From fe8f55a8802742a304fcefdbd66ee09938be5a33 Mon Sep 17 00:00:00 2001 From: Shon Feder Date: Wed, 4 Oct 2023 23:48:35 -0400 Subject: [PATCH 01/15] Replace unsupported union match with sum match --- quint/src/generated/Quint.g4 | 12 +- quint/src/graphics.ts | 2 +- quint/src/ir/IRprinting.ts | 4 +- quint/src/ir/quintIr.ts | 4 +- quint/src/ir/quintTypes.ts | 4 +- quint/src/names/base.ts | 4 +- quint/src/parsing/ToIrListener.ts | 174 ++++++++++++------ quint/src/runtime/impl/compilerImpl.ts | 2 + quint/test/ir/IRprinting.test.ts | 4 +- .../test/parsing/quintParserFrontend.test.ts | 24 +-- quint/testFixture/SuperSpec.json | 2 +- quint/testFixture/SuperSpec.qnt | 10 - quint/testFixture/_1025importeeWithError.json | 2 +- 13 files changed, 148 insertions(+), 100 deletions(-) diff --git a/quint/src/generated/Quint.g4 b/quint/src/generated/Quint.g4 index 7f8a3d101..9e4b25d3d 100644 --- a/quint/src/generated/Quint.g4 +++ b/quint/src/generated/Quint.g4 @@ -57,8 +57,7 @@ typeDef | 'type' typeName=qualId '=' '|'? typeSumVariant ('|' typeSumVariant)* # typeSumDef ; -// A single variant case in a sum type definition. -// +// A single variant case in a sum type definition or match statement. // E.g., `A(t)` or `A`. typeSumVariant : sumLabel=simpleId["variant label"] ('(' type ')')? ; @@ -157,8 +156,7 @@ expr: // apply a built-in operator via the dot notation | expr OR expr # or | expr IFF expr # iff | expr IMPLIES expr # implies - | expr MATCH - ('|' STRING ':' parameter '=>' expr)+ # match + | matchSumExpr # match | 'all' '{' expr (',' expr)* ','? '}' # actionAll | 'any' '{' expr (',' expr)* ','? '}' # actionAny | ( qualId | INT | BOOL | STRING) # literalOrId @@ -176,6 +174,12 @@ expr: // apply a built-in operator via the dot notation | '{' expr '}' # braces ; +// match e { A(a) => e1 | B => e2 | C(_)} +matchSumExpr: MATCH expr '{' '|'? matchCase+=matchSumCase ('|' matchCase+=matchSumCase)* '}' ; +matchSumCase: (variantMatch=matchSumVariant | wildCardMatch='_') '=>' expr ; +matchSumVariant + : (variantLabel=simpleId["variant label"]) ('(' (variantParam=simpleId["match case parameter"] | '_') ')')? ; + // A probing rule for REPL. // Note that a top-level declaration has priority over an expression. // For example, see: https://github.com/informalsystems/quint/issues/394 diff --git a/quint/src/graphics.ts b/quint/src/graphics.ts index b933dd1a6..74f5e9bf7 100644 --- a/quint/src/graphics.ts +++ b/quint/src/graphics.ts @@ -187,7 +187,7 @@ export function prettyQuintType(type: QuintType): Doc { return group([text('{ '), prettyRow(type.fields), text('}')]) } case 'sum': { - return group([text('{ '), prettySumRow(type.fields), text('}')]) + return prettySumRow(type.fields) } case 'union': { const records = type.records.map(rec => { diff --git a/quint/src/ir/IRprinting.ts b/quint/src/ir/IRprinting.ts index d7df7c8f2..c79810555 100644 --- a/quint/src/ir/IRprinting.ts +++ b/quint/src/ir/IRprinting.ts @@ -13,7 +13,7 @@ */ import { OpQualifier, QuintDeclaration, QuintDef, QuintEx, QuintModule, isAnnotatedDef } from './quintIr' -import { QuintSumType, QuintType, Row, RowField, isTheUnit } from './quintTypes' +import { QuintSumType, QuintType, Row, RowField, isUnitType } from './quintTypes' import { TypeScheme } from '../types/base' import { typeSchemeToString } from '../types/printing' @@ -218,7 +218,7 @@ export function rowToString(r: Row): string { export function sumToString(s: QuintSumType): string { return s.fields.fields .map((f: RowField) => { - if (isTheUnit(f.fieldType)) { + if (isUnitType(f.fieldType)) { return `| ${f.fieldName}` } else { return `| ${f.fieldName}(${typeToString(f.fieldType)})` diff --git a/quint/src/ir/quintIr.ts b/quint/src/ir/quintIr.ts index a049b6d9d..7700f9aee 100644 --- a/quint/src/ir/quintIr.ts +++ b/quint/src/ir/quintIr.ts @@ -131,7 +131,7 @@ export function isQuintBuiltin(app: QuintApp): app is QuintBuiltinApp { } // This should be the source of truth for all builtin opcodes -const builtinOpCodes = [ +export const builtinOpCodes = [ 'List', 'Map', 'Rec', @@ -187,6 +187,7 @@ const builtinOpCodes = [ 'length', 'map', 'mapBy', + 'match', 'mustChange', 'neq', 'next', @@ -217,6 +218,7 @@ const builtinOpCodes = [ 'tuples', 'union', 'unionMatch', + 'variant', 'weakFair', 'with', ] as const diff --git a/quint/src/ir/quintTypes.ts b/quint/src/ir/quintTypes.ts index 065a41446..2a08553e4 100644 --- a/quint/src/ir/quintTypes.ts +++ b/quint/src/ir/quintTypes.ts @@ -75,7 +75,7 @@ export interface QuintRecordType extends WithOptionalId { } // A value of the unit type, i.e. an empty record -export function unitValue(id: bigint): QuintRecordType { +export function unitType(id: bigint): QuintRecordType { return { id, kind: 'rec', @@ -83,7 +83,7 @@ export function unitValue(id: bigint): QuintRecordType { } } -export function isTheUnit(r: QuintType): Boolean { +export function isUnitType(r: QuintType): Boolean { return r.kind === 'rec' && r.fields.kind === 'row' && r.fields.fields.length === 0 && r.fields.other.kind === 'empty' } diff --git a/quint/src/names/base.ts b/quint/src/names/base.ts index 248e046fa..5da5f2cab 100644 --- a/quint/src/names/base.ts +++ b/quint/src/names/base.ts @@ -12,7 +12,7 @@ * @module */ -import { QuintDef, QuintExport, QuintImport, QuintInstance, QuintLambdaParameter } from '../ir/quintIr' +import { QuintDef, QuintExport, QuintImport, QuintInstance, QuintLambdaParameter, builtinOpCodes } from '../ir/quintIr' import { QuintType } from '../ir/quintTypes' /** @@ -232,4 +232,6 @@ export const builtinNames = [ 'ite', 'cross', 'difference', + 'match', + 'variant', ] diff --git a/quint/src/parsing/ToIrListener.ts b/quint/src/parsing/ToIrListener.ts index cb85eed3f..b3ef0b5fc 100644 --- a/quint/src/parsing/ToIrListener.ts +++ b/quint/src/parsing/ToIrListener.ts @@ -5,22 +5,26 @@ import { QuintListener } from '../generated/QuintListener' import { OpQualifier, QuintApp, + QuintBuiltinApp, QuintDeclaration, QuintDef, QuintEx, + QuintLambda, QuintLambdaParameter, QuintLet, QuintModule, QuintName, QuintOpDef, + QuintStr, } from '../ir/quintIr' -import { ConcreteFixedRow, QuintSumType, QuintType, Row, RowField, unitValue } from '../ir/quintTypes' +import { ConcreteFixedRow, QuintSumType, QuintType, Row, RowField, isUnitType, unitType } from '../ir/quintTypes' import { strict as assert } from 'assert' import { ErrorMessage, Loc } from './quintParserFrontend' import { compact, zipWith } from 'lodash' import { Maybe, just, none } from '@sweet-monads/maybe' import { TerminalNode } from 'antlr4ts/tree/TerminalNode' import { QuintTypeDef } from '../ir/quintIr' +import { zip } from '../../test/util' /** * An ANTLR4 listener that constructs QuintIr objects out of the abstract @@ -373,44 +377,69 @@ export class ToIrListener implements QuintListener { // type T = | A | B(t1) | C(t2) exitTypeSumDef(ctx: p.TypeSumDefContext) { const name = ctx._typeName!.text! - const defId = this.idGen.nextId() - this.sourceMap.set(defId, this.loc(ctx)) - - const typeId = this.idGen.nextId() - this.sourceMap.set(typeId, this.loc(ctx)) + const id = this.getId(ctx) + // Build the type declaraion const fields: RowField[] = popMany(this.variantStack, this.variantStack.length) const row: ConcreteFixedRow = { kind: 'row', fields, other: { kind: 'empty' } } - const type: QuintSumType = { id: defId, kind: 'sum', fields: row } - + const type: QuintSumType = { id, kind: 'sum', fields: row } const def: QuintTypeDef = { - id: defId, + id: id, name, kind: 'typedef', type, } - this.declarationStack.push(def) + // Generate all the variant constructors + // a variant constructor is an operator that injects an exprssion + // into the sum type by wrapping it in a label + const constructors: QuintOpDef[] = zip(fields, ctx.typeSumVariant()).map( + ([{ fieldName, fieldType }, variantCtx]) => { + // Mangle the parameter name to avoid clashes + // This shouldn't be visible to users + const paramName = `__${fieldName}Param` + + let params: QuintLambdaParameter[] + let expr: QuintEx + let qualifier: OpQualifier + + if (isUnitType(fieldType)) { + // The nullary variant constructor is actual + // variant pairint a label with the unit. + params = [] + expr = unitValue(this.getId(variantCtx._sumLabel)) + // Its a `val` cause it takes no arguments + qualifier = 'val' + } else { + // Oherwise we will build constructor that takes one parameter + // and wraps it in a `variaint` + params = [{ id: this.getId(variantCtx.type()!), name: paramName }] + expr = { kind: 'name', name: paramName, id: this.getId(variantCtx._sumLabel) } + qualifier = 'def' + } + const label: QuintStr = { id: this.getId(variantCtx), kind: 'str', value: fieldName } + const variant: QuintBuiltinApp = { + id: this.getId(variantCtx), + kind: 'app', + opcode: 'variant', + args: [label, expr], + } + const lam: QuintLambda = { id: this.getId(variantCtx), kind: 'lambda', params, qualifier, expr: variant } + return { id: this.getId(variantCtx), kind: 'def', name: fieldName, qualifier, expr: lam } + } + ) + + this.declarationStack.push(def, ...constructors) } exitTypeSumVariant(ctx: p.TypeSumVariantContext) { const fieldName = ctx._sumLabel!.text! const poppedType = this.popType().value - - let fieldType: QuintType - // Check if we have an accompanying type, and if not, then synthesize the // unit type. - // - // I.e., we interpert a variant `A` as `A({})`. - if (poppedType === undefined) { - const id = this.idGen.nextId() - this.sourceMap.set(id, this.loc(ctx)) - fieldType = unitValue(id) - } else { - fieldType = poppedType - } - + // const poppedType = this.popType().value + // I.e., we interpret a variant `A` as `A({})`. + const fieldType: QuintType = poppedType ? poppedType : unitType(this.getId(ctx)) this.variantStack.push({ fieldName, fieldType }) } @@ -887,45 +916,68 @@ export class ToIrListener implements QuintListener { } // if (p) e1 else e2 - exitIfElse(ctx: any) { + exitIfElse(ctx: p.IfElseContext) { const args = popMany(this.exprStack, 3) this.pushApplication(ctx, 'ite', args) } - // entry match - // | "Cat": cat => cat.name != "" - // | "Dog": dog => dog.year > 0 - exitMatch(ctx: p.MatchContext) { - const options = ctx.STRING().map(opt => opt.text.slice(1, -1)) - const noptions = options.length - // expressions in the right-hand sides, e.g., dog.year > 0 - const rhsExprs = popMany(this.exprStack, noptions) - // parameters in the right-hand side - const params = popMany(this.paramStack, noptions) - // matched expressionm e.g., entry - const exprToMatch = popMany(this.exprStack, 1)![0] - const matchArgs: QuintEx[] = [exprToMatch] - // push the tag value and the corresponding lambda in matchArgs - for (let i = 0; i < noptions; i++) { - const tagId = this.getId(ctx) - const tag: QuintEx = { - id: tagId, - kind: 'str', - value: options[i], - } - const lamId = this.getId(ctx) - const lam: QuintEx = { - id: lamId, - kind: 'lambda', - params: [params[i]], - qualifier: 'def', - expr: rhsExprs[i], + // match expr { + // | Variant1(var1) => expr1 + // | Variantk(_) => exprk // a hole in the payload + // | ... + // | Variantn(varn) => exprn + // | _ => exprm // A wildcard match, acting as a catchall + // } + // + // The above is represented in the UFC using an exotic `match` operator of the form + // + // match(epxr, label1, (var1) => expr1, ..., labeln, (varn) => exprn, "_", (_) => exprm) + exitMatchSumExpr(ctx: p.MatchSumExprContext) { + const matchId = this.getId(ctx) + // We will have one expression for each match case, plus the + const exprs = popMany(this.exprStack, ctx._matchCase.length + 1) + // The first expression is the one we are matching on + // the syntax rules ensure that at least this expression is given + const expr = exprs.shift()! + const gatherCase: ( + acc: (QuintStr | QuintLambda)[], + matchCase: [QuintEx, p.MatchSumCaseContext] + ) => (QuintStr | QuintLambda)[] = (acc, [caseExpr, caseCtx]) => { + const caseId = this.getId(caseCtx) + let label: string + let params: QuintLambdaParameter[] + if (caseCtx._wildCardMatch) { + // a wildcard case: _ => expr + label = '_' + params = [] + } else if (caseCtx._variantMatch) { + const variant = caseCtx._variantMatch + let name: string + if (variant._variantParam) { + name = variant._variantParam.text + } else { + // We either have a hole or no param specified, in which case our lambda only needs a hole + name = '_' + } + label = variant._variantLabel.text + params = [{ name, id: this.getId(variant) }] + } else { + throw new Error('impossible: either _wildCardMatch or _variantMatch must be present') } - matchArgs.push(tag) - matchArgs.push(lam) + const labelStr: QuintStr = { id: caseId, kind: 'str', value: label } + const elim: QuintLambda = { id: caseId, kind: 'lambda', qualifier: 'def', expr: caseExpr, params } + return acc.concat([labelStr, elim]) + } + + // after shifting off the match expr, the remaing exprs are in each case + const cases: (QuintStr | QuintLambda)[] = zip(exprs, ctx._matchCase).reduce(gatherCase, []) + const matchExpr: QuintBuiltinApp = { + id: matchId, + kind: 'app', + opcode: 'match', + args: [expr].concat(cases), } - // construct the match expression and push it in exprStack - this.pushApplication(ctx, 'unionMatch', matchArgs) + this.exprStack.push(matchExpr) } /** ******************* translate types ********************************/ @@ -1238,3 +1290,13 @@ function popMany(stack: T[], n: number): T[] { function getDocText(doc: TerminalNode[]): string { return doc.map(l => l.text.slice(4, -1)).join('\n') } + +// Helper to construct an empty record (the unit value) +function unitValue(id: bigint): QuintBuiltinApp { + return { + id, + kind: 'app', + opcode: 'Rec', + args: [], + } +} diff --git a/quint/src/runtime/impl/compilerImpl.ts b/quint/src/runtime/impl/compilerImpl.ts index 1e7b733f1..32feaf506 100644 --- a/quint/src/runtime/impl/compilerImpl.ts +++ b/quint/src/runtime/impl/compilerImpl.ts @@ -919,6 +919,8 @@ export class CompilerVisitor implements IRVisitor { // builtin operators that are not handled by REPL case 'unionMatch': + case 'variant': // TODO: https://github.com/informalsystems/quint/issues/1033 + case 'match': // TODO: https://github.com/informalsystems/quint/issues/1033 case 'orKeep': case 'mustChange': case 'weakFair': diff --git a/quint/test/ir/IRprinting.test.ts b/quint/test/ir/IRprinting.test.ts index 8cbee1b85..1389cfbb7 100644 --- a/quint/test/ir/IRprinting.test.ts +++ b/quint/test/ir/IRprinting.test.ts @@ -9,7 +9,7 @@ import { typeToString, } from '../../src/ir/IRprinting' import { toScheme } from '../../src/types/base' -import { QuintSumType, unitValue } from '../../src' +import { QuintSumType, unitType } from '../../src' describe('moduleToString', () => { const quintModule = buildModuleWithDecls(['var S: Set[int]', 'val f = S.filter(x => x + 1)']) @@ -241,7 +241,7 @@ describe('typeToString', () => { kind: 'row', fields: [ { fieldName: 'A', fieldType: { kind: 'int', id: 0n } }, - { fieldName: 'B', fieldType: unitValue(0n) }, + { fieldName: 'B', fieldType: unitType(0n) }, ], other: { kind: 'empty' }, }, diff --git a/quint/test/parsing/quintParserFrontend.test.ts b/quint/test/parsing/quintParserFrontend.test.ts index d2fe46df8..224ea4c21 100644 --- a/quint/test/parsing/quintParserFrontend.test.ts +++ b/quint/test/parsing/quintParserFrontend.test.ts @@ -15,7 +15,6 @@ import { right } from '@sweet-monads/either' import { newIdGenerator } from '../../src/idGenerator' import { collectIds } from '../util' import { fileSourceResolver } from '../../src/parsing/sourceResolver' -import { isTheUnit } from '../../src' // read a Quint file from the test data directory function readQuint(name: string): string { @@ -131,24 +130,11 @@ describe('parsing', () => { }) it('parses sum types', () => { - const mod = ` - module SumTypes { - type T = - | A - | B(int) - } - ` - const result = parsePhase1fromText(newIdGenerator(), mod, 'test') - assert(result.isRight()) - const typeDef = result.value.modules[0].declarations[0] - assert(typeDef.kind === 'typedef') - const sumType = typeDef.type! - assert(sumType.kind === 'sum') - const [variantA, variantB] = sumType.fields.fields - assert(variantA.fieldName === 'A') - assert(isTheUnit(variantA.fieldType)) - assert(variantB.fieldName === 'B') - assert(variantB.fieldType.kind === 'int') + parseAndCompare('_1043sumTypeDecl') + }) + + it('parses match expressions', () => { + parseAndCompare('_1044matchExpression') }) }) diff --git a/quint/testFixture/SuperSpec.json b/quint/testFixture/SuperSpec.json index dda01e30c..d53360132 100644 --- a/quint/testFixture/SuperSpec.json +++ b/quint/testFixture/SuperSpec.json @@ -1 +1 @@ -{"stage":"parsing","warnings":[],"modules":[{"id":3,"name":"M1","declarations":[{"id":2,"kind":"def","name":"foo","qualifier":"val","expr":{"id":1,"kind":"int","value":4}}]},{"id":6,"name":"M2","declarations":[{"id":5,"kind":"def","name":"bar","qualifier":"val","expr":{"id":4,"kind":"int","value":4}}]},{"id":11,"name":"Proto","declarations":[{"kind":"var","name":"x","typeAnnotation":{"id":9,"kind":"int"},"id":10},{"kind":"const","name":"N","typeAnnotation":{"id":7,"kind":"int"},"id":8}]},{"id":523,"name":"withConsts","declarations":[{"id":102,"kind":"def","name":"pow_2_to_3","qualifier":"val","expr":{"id":101,"kind":"app","opcode":"ipow","args":[{"id":99,"kind":"int","value":2},{"id":100,"kind":"int","value":3}]}},{"id":105,"kind":"def","name":"uminus","qualifier":"val","expr":{"id":104,"kind":"app","opcode":"iuminus","args":[{"id":103,"kind":"int","value":100}]}},{"id":109,"kind":"def","name":"gt_2_to_3","qualifier":"val","expr":{"id":108,"kind":"app","opcode":"igt","args":[{"id":106,"kind":"int","value":2},{"id":107,"kind":"int","value":3}]}},{"id":113,"kind":"def","name":"ge_2_to_3","qualifier":"val","expr":{"id":112,"kind":"app","opcode":"igte","args":[{"id":110,"kind":"int","value":2},{"id":111,"kind":"int","value":3}]}},{"id":117,"kind":"def","name":"lt_2_to_3","qualifier":"val","expr":{"id":116,"kind":"app","opcode":"ilt","args":[{"id":114,"kind":"int","value":2},{"id":115,"kind":"int","value":3}]}},{"id":121,"kind":"def","name":"le_2_to_3","qualifier":"val","expr":{"id":120,"kind":"app","opcode":"ilte","args":[{"id":118,"kind":"int","value":2},{"id":119,"kind":"int","value":3}]}},{"id":125,"kind":"def","name":"eqeq_2_to_3","qualifier":"val","expr":{"id":124,"kind":"app","opcode":"eq","args":[{"id":122,"kind":"int","value":2},{"id":123,"kind":"int","value":3}]}},{"id":129,"kind":"def","name":"ne_2_to_3","qualifier":"val","expr":{"id":128,"kind":"app","opcode":"neq","args":[{"id":126,"kind":"int","value":2},{"id":127,"kind":"int","value":3}]}},{"kind":"const","name":"N","typeAnnotation":{"id":12,"kind":"int"},"id":13},{"id":135,"kind":"def","name":"VeryTrue","qualifier":"val","expr":{"id":134,"kind":"app","opcode":"eq","args":[{"id":132,"kind":"app","opcode":"iadd","args":[{"id":130,"kind":"int","value":2},{"id":131,"kind":"int","value":2}]},{"id":133,"kind":"int","value":4}]}},{"id":139,"kind":"def","name":"nat_includes_one","qualifier":"val","expr":{"id":138,"kind":"app","opcode":"in","args":[{"id":136,"kind":"int","value":1},{"id":137,"kind":"name","name":"Nat"}]}},{"id":151,"kind":"def","name":"withType","qualifier":"val","expr":{"id":150,"kind":"app","opcode":"Set","args":[{"id":148,"kind":"int","value":1},{"id":149,"kind":"int","value":2}]},"typeAnnotation":{"id":147,"kind":"set","elem":{"id":146,"kind":"int"}}},{"id":152,"kind":"typedef","name":"PROC"},{"kind":"var","name":"n","typeAnnotation":{"id":157,"kind":"int"},"id":158},{"kind":"const","name":"S","typeAnnotation":{"id":15,"kind":"set","elem":{"id":14,"kind":"int"}},"id":16},{"id":160,"kind":"def","name":"magicNumber","qualifier":"pureval","expr":{"id":159,"kind":"int","value":42}},{"kind":"const","name":"MySet","typeAnnotation":{"id":18,"kind":"set","elem":{"id":17,"kind":"int"}},"id":19},{"kind":"var","name":"k","typeAnnotation":{"id":197,"kind":"int"},"id":198},{"id":219,"kind":"def","name":"test_and","qualifier":"val","expr":{"id":218,"kind":"app","opcode":"and","args":[{"id":216,"kind":"bool","value":false},{"id":217,"kind":"bool","value":true}]}},{"kind":"const","name":"MySeq","typeAnnotation":{"id":21,"kind":"list","elem":{"id":20,"kind":"bool"}},"id":22},{"id":223,"kind":"def","name":"test_or","qualifier":"val","expr":{"id":222,"kind":"app","opcode":"or","args":[{"id":220,"kind":"bool","value":false},{"id":221,"kind":"bool","value":true}]}},{"id":227,"kind":"def","name":"test_implies","qualifier":"val","expr":{"id":226,"kind":"app","opcode":"implies","args":[{"id":224,"kind":"bool","value":false},{"id":225,"kind":"bool","value":true}]}},{"id":256,"kind":"def","name":"test_block_and","qualifier":"val","expr":{"id":255,"kind":"app","opcode":"and","args":[{"id":252,"kind":"bool","value":false},{"id":253,"kind":"bool","value":true},{"id":254,"kind":"bool","value":false}]}},{"kind":"const","name":"MyFun","typeAnnotation":{"id":25,"kind":"fun","arg":{"id":23,"kind":"int"},"res":{"id":24,"kind":"str"}},"id":26},{"id":261,"kind":"def","name":"test_action_and","qualifier":"action","expr":{"id":260,"kind":"app","opcode":"actionAll","args":[{"id":257,"kind":"bool","value":false},{"id":258,"kind":"bool","value":true},{"id":259,"kind":"bool","value":false}]}},{"id":266,"kind":"def","name":"test_block_or","qualifier":"val","expr":{"id":265,"kind":"app","opcode":"or","args":[{"id":262,"kind":"bool","value":false},{"id":263,"kind":"bool","value":true},{"id":264,"kind":"bool","value":false}]}},{"id":271,"kind":"def","name":"test_action_or","qualifier":"action","expr":{"id":270,"kind":"app","opcode":"actionAny","args":[{"id":267,"kind":"bool","value":false},{"id":268,"kind":"bool","value":true},{"id":269,"kind":"bool","value":false}]}},{"id":276,"kind":"def","name":"test_ite","qualifier":"val","expr":{"id":275,"kind":"app","opcode":"ite","args":[{"id":272,"kind":"bool","value":true},{"id":273,"kind":"int","value":1},{"id":274,"kind":"int","value":0}]}},{"kind":"var","name":"f1","typeAnnotation":{"id":292,"kind":"fun","arg":{"id":290,"kind":"str"},"res":{"id":291,"kind":"int"}},"id":293},{"id":301,"kind":"def","name":"MyOper","qualifier":"def","expr":{"id":301,"kind":"lambda","params":[{"id":298,"name":"a"},{"id":299,"name":"b"}],"qualifier":"def","expr":{"id":300,"kind":"int","value":1}}},{"id":313,"kind":"def","name":"oper_in","qualifier":"val","expr":{"id":312,"kind":"app","opcode":"in","args":[{"id":310,"kind":"int","value":1},{"id":311,"kind":"app","opcode":"Set","args":[]}]}},{"kind":"const","name":"MyFunFun","typeAnnotation":{"id":31,"kind":"fun","arg":{"id":29,"kind":"fun","arg":{"id":27,"kind":"int"},"res":{"id":28,"kind":"str"}},"res":{"id":30,"kind":"bool"}},"id":32},{"kind":"const","name":"MyOperator","typeAnnotation":{"id":36,"kind":"oper","args":[{"id":33,"kind":"int"},{"id":34,"kind":"str"}],"res":{"id":35,"kind":"bool"}},"id":37},{"id":378,"kind":"def","name":"one","qualifier":"val","expr":{"id":377,"kind":"app","opcode":"head","args":[{"id":376,"kind":"app","opcode":"List","args":[{"id":374,"kind":"int","value":1},{"id":375,"kind":"int","value":2}]}]}},{"id":383,"kind":"def","name":"test_tuple","qualifier":"val","expr":{"id":382,"kind":"app","opcode":"Tup","args":[{"id":379,"kind":"int","value":1},{"id":380,"kind":"int","value":2},{"id":381,"kind":"int","value":3}]}},{"id":388,"kind":"def","name":"test_tuple2","qualifier":"val","expr":{"id":387,"kind":"app","opcode":"Tup","args":[{"id":384,"kind":"int","value":1},{"id":385,"kind":"int","value":2},{"id":386,"kind":"int","value":3}]}},{"id":392,"kind":"def","name":"test_pair","qualifier":"val","expr":{"id":391,"kind":"app","opcode":"Tup","args":[{"id":389,"kind":"int","value":4},{"id":390,"kind":"int","value":5}]}},{"id":397,"kind":"def","name":"test_list","qualifier":"val","expr":{"id":396,"kind":"app","opcode":"List","args":[{"id":393,"kind":"int","value":1},{"id":394,"kind":"int","value":2},{"id":395,"kind":"int","value":3}]}},{"id":402,"kind":"def","name":"test_list2","qualifier":"val","expr":{"id":401,"kind":"app","opcode":"List","args":[{"id":398,"kind":"int","value":1},{"id":399,"kind":"int","value":2},{"id":400,"kind":"int","value":3}]}},{"id":409,"kind":"def","name":"test_list_nth","qualifier":"val","expr":{"id":408,"kind":"app","opcode":"nth","args":[{"id":406,"kind":"app","opcode":"List","args":[{"id":403,"kind":"int","value":2},{"id":404,"kind":"int","value":3},{"id":405,"kind":"int","value":4}]},{"id":407,"kind":"int","value":2}]}},{"id":415,"kind":"def","name":"test_record","qualifier":"val","expr":{"id":414,"kind":"app","opcode":"Rec","args":[{"id":411,"kind":"str","value":"name"},{"id":410,"kind":"str","value":"igor"},{"id":413,"kind":"str","value":"year"},{"id":412,"kind":"int","value":1981}]}},{"kind":"const","name":"MyOperatorWithComma","typeAnnotation":{"id":41,"kind":"oper","args":[{"id":38,"kind":"int"},{"id":39,"kind":"str"}],"res":{"id":40,"kind":"bool"}},"id":42},{"id":421,"kind":"def","name":"test_record2","qualifier":"val","expr":{"id":420,"kind":"app","opcode":"Rec","args":[{"id":416,"kind":"str","value":"name"},{"id":417,"kind":"str","value":"igor"},{"id":418,"kind":"str","value":"year"},{"id":419,"kind":"int","value":1981}]}},{"id":434,"kind":"def","name":"test_set","qualifier":"val","expr":{"id":433,"kind":"app","opcode":"Set","args":[{"id":430,"kind":"int","value":1},{"id":431,"kind":"int","value":2},{"id":432,"kind":"int","value":3}]}},{"id":463,"kind":"def","name":"in_2_empty","qualifier":"val","expr":{"id":462,"kind":"app","opcode":"in","args":[{"id":460,"kind":"int","value":2},{"id":461,"kind":"app","opcode":"Set","args":[]}]}},{"id":467,"kind":"def","name":"subseteq_empty","qualifier":"val","expr":{"id":466,"kind":"app","opcode":"subseteq","args":[{"id":464,"kind":"app","opcode":"Set","args":[]},{"id":465,"kind":"app","opcode":"Set","args":[]}]}},{"kind":"const","name":"MyTuple","typeAnnotation":{"id":46,"kind":"tup","fields":{"kind":"row","fields":[{"fieldName":"0","fieldType":{"id":43,"kind":"int"}},{"fieldName":"1","fieldType":{"id":44,"kind":"bool"}},{"fieldName":"2","fieldType":{"id":45,"kind":"str"}}],"other":{"kind":"empty"}}},"id":47},{"id":476,"kind":"def","name":"powersets","qualifier":"val","expr":{"id":475,"kind":"app","opcode":"in","args":[{"id":469,"kind":"app","opcode":"Set","args":[{"id":468,"kind":"int","value":1}]},{"id":474,"kind":"app","opcode":"powerset","args":[{"id":473,"kind":"app","opcode":"Set","args":[{"id":470,"kind":"int","value":1},{"id":471,"kind":"int","value":2},{"id":472,"kind":"int","value":3}]}]}]}},{"id":489,"kind":"typedef","name":"INT_SET","type":{"id":488,"kind":"set","elem":{"id":487,"kind":"int"}}},{"id":490,"kind":"typedef","name":"UNINTERPRETED_TYPE"},{"id":502,"kind":"typedef","name":"ENTRY_TYPE","type":{"id":501,"kind":"union","tag":"tag","records":[{"tagValue":"Cat","fields":{"kind":"row","fields":[{"fieldName":"name","fieldType":{"id":496,"kind":"str"}},{"fieldName":"year","fieldType":{"id":497,"kind":"int"}}],"other":{"kind":"empty"}}},{"tagValue":"Date","fields":{"kind":"row","fields":[{"fieldName":"day","fieldType":{"id":498,"kind":"int"}},{"fieldName":"month","fieldType":{"id":499,"kind":"int"}},{"fieldName":"year","fieldType":{"id":500,"kind":"int"}}],"other":{"kind":"empty"}}}]}},{"kind":"const","name":"MyTupleWithComma","typeAnnotation":{"id":51,"kind":"tup","fields":{"kind":"row","fields":[{"fieldName":"0","fieldType":{"id":48,"kind":"int"}},{"fieldName":"1","fieldType":{"id":49,"kind":"bool"}},{"fieldName":"2","fieldType":{"id":50,"kind":"str"}}],"other":{"kind":"empty"}}},"id":52},{"kind":"const","name":"MyRecord","typeAnnotation":{"id":56,"kind":"rec","fields":{"kind":"row","fields":[{"fieldName":"i","fieldType":{"id":53,"kind":"int"}},{"fieldName":"b","fieldType":{"id":54,"kind":"bool"}},{"fieldName":"s","fieldType":{"id":55,"kind":"str"}}],"other":{"kind":"empty"}}},"id":57},{"kind":"const","name":"MyRecordWithComma","typeAnnotation":{"id":61,"kind":"rec","fields":{"kind":"row","fields":[{"fieldName":"i","fieldType":{"id":58,"kind":"int"}},{"fieldName":"b","fieldType":{"id":59,"kind":"bool"}},{"fieldName":"s","fieldType":{"id":60,"kind":"str"}}],"other":{"kind":"empty"}}},"id":62},{"kind":"const","name":"MyUnion","typeAnnotation":{"id":67,"kind":"union","tag":"tag","records":[{"tagValue":"circle","fields":{"kind":"row","fields":[{"fieldName":"radius","fieldType":{"id":63,"kind":"int"}}],"other":{"kind":"empty"}}},{"tagValue":"rectangle","fields":{"kind":"row","fields":[{"fieldName":"width","fieldType":{"id":64,"kind":"int"}},{"fieldName":"height","fieldType":{"id":65,"kind":"int"}}],"other":{"kind":"empty"}}},{"tagValue":"dog","fields":{"kind":"row","fields":[{"fieldName":"name","fieldType":{"id":66,"kind":"str"}}],"other":{"kind":"empty"}}}]},"id":68},{"kind":"const","name":"MyUnionWithComma","typeAnnotation":{"id":73,"kind":"union","tag":"tag","records":[{"tagValue":"circle","fields":{"kind":"row","fields":[{"fieldName":"radius","fieldType":{"id":69,"kind":"int"}}],"other":{"kind":"empty"}}},{"tagValue":"rectangle","fields":{"kind":"row","fields":[{"fieldName":"width","fieldType":{"id":70,"kind":"int"}},{"fieldName":"height","fieldType":{"id":71,"kind":"int"}}],"other":{"kind":"empty"}}},{"tagValue":"dog","fields":{"kind":"row","fields":[{"fieldName":"name","fieldType":{"id":72,"kind":"str"}}],"other":{"kind":"empty"}}}]},"id":74},{"kind":"var","name":"i","typeAnnotation":{"id":75,"kind":"int"},"id":76},{"kind":"var","name":"j","typeAnnotation":{"id":77,"kind":"bool"},"id":78},{"id":82,"kind":"def","name":"add_1_to_2","qualifier":"val","expr":{"id":81,"kind":"app","opcode":"iadd","args":[{"id":79,"kind":"int","value":1},{"id":80,"kind":"int","value":2}]}},{"id":86,"kind":"def","name":"sub_1_to_2","qualifier":"val","expr":{"id":85,"kind":"app","opcode":"isub","args":[{"id":83,"kind":"int","value":1},{"id":84,"kind":"int","value":2}]}},{"id":90,"kind":"def","name":"mul_2_to_3","qualifier":"val","expr":{"id":89,"kind":"app","opcode":"imul","args":[{"id":87,"kind":"int","value":2},{"id":88,"kind":"int","value":3}]}},{"id":94,"kind":"def","name":"div_2_to_3","qualifier":"val","expr":{"id":93,"kind":"app","opcode":"idiv","args":[{"id":91,"kind":"int","value":2},{"id":92,"kind":"int","value":3}]}},{"id":98,"kind":"def","name":"mod_2_to_3","qualifier":"val","expr":{"id":97,"kind":"app","opcode":"imod","args":[{"id":95,"kind":"int","value":2},{"id":96,"kind":"int","value":3}]}},{"id":145,"kind":"def","name":"there_is_truth","qualifier":"val","expr":{"id":144,"kind":"app","opcode":"exists","args":[{"id":140,"kind":"name","name":"Bool"},{"id":143,"kind":"lambda","params":[{"id":141,"name":"x"}],"qualifier":"def","expr":{"id":142,"kind":"name","name":"x"}}]}},{"id":156,"kind":"def","name":"withUninterpretedType","qualifier":"val","expr":{"id":155,"kind":"app","opcode":"Set","args":[]},"typeAnnotation":{"id":154,"kind":"set","elem":{"id":153,"kind":"const","name":"PROC"}}},{"id":166,"kind":"def","name":"add","qualifier":"puredef","expr":{"id":166,"kind":"lambda","params":[{"id":161,"name":"x"},{"id":162,"name":"y"}],"qualifier":"puredef","expr":{"id":165,"kind":"app","opcode":"iadd","args":[{"id":163,"kind":"name","name":"x"},{"id":164,"kind":"name","name":"y"}]}}},{"id":171,"kind":"def","name":"ofN","qualifier":"def","expr":{"id":171,"kind":"lambda","params":[{"id":167,"name":"factor"}],"qualifier":"def","expr":{"id":170,"kind":"app","opcode":"imul","args":[{"id":168,"kind":"name","name":"factor"},{"id":169,"kind":"name","name":"n"}]}}},{"id":176,"kind":"def","name":"A","qualifier":"action","expr":{"id":176,"kind":"lambda","params":[{"id":172,"name":"x"}],"qualifier":"action","expr":{"id":175,"kind":"app","opcode":"assign","args":[{"id":174,"kind":"name","name":"n"},{"id":173,"kind":"name","name":"x"}]}}},{"id":180,"kind":"def","name":"B","qualifier":"puredef","expr":{"id":180,"kind":"lambda","params":[{"id":177,"name":"x"}],"qualifier":"puredef","expr":{"id":179,"kind":"app","opcode":"not","args":[{"id":178,"kind":"name","name":"x"}]}}},{"id":190,"kind":"def","name":"H","qualifier":"def","expr":{"id":190,"kind":"lambda","params":[{"id":181,"name":"x"},{"id":182,"name":"y"}],"qualifier":"def","expr":{"id":189,"kind":"app","opcode":"iadd","args":[{"id":187,"kind":"name","name":"x"},{"id":188,"kind":"name","name":"y"}]}},"typeAnnotation":{"id":186,"kind":"oper","args":[{"id":183,"kind":"int"},{"id":184,"kind":"int"}],"res":{"id":185,"kind":"int"}}},{"id":196,"kind":"def","name":"Pol","qualifier":"def","expr":{"id":196,"kind":"lambda","params":[{"id":191,"name":"x"}],"qualifier":"def","expr":{"id":195,"kind":"name","name":"x"}},"typeAnnotation":{"id":194,"kind":"oper","args":[{"id":192,"kind":"var","name":"a"}],"res":{"id":193,"kind":"var","name":"a"}}},{"id":202,"kind":"def","name":"asgn","qualifier":"action","expr":{"id":201,"kind":"app","opcode":"assign","args":[{"id":200,"kind":"name","name":"k"},{"id":199,"kind":"int","value":3}]}},{"id":215,"kind":"def","name":"min","qualifier":"puredef","expr":{"id":215,"kind":"lambda","params":[{"id":203,"name":"x"},{"id":205,"name":"y"}],"qualifier":"puredef","expr":{"id":213,"kind":"app","opcode":"ite","args":[{"id":210,"kind":"app","opcode":"ilt","args":[{"id":208,"kind":"name","name":"x"},{"id":209,"kind":"name","name":"y"}]},{"id":211,"kind":"name","name":"x"},{"id":212,"kind":"name","name":"y"}]}},"typeAnnotation":{"id":214,"kind":"oper","args":[{"id":204,"kind":"int"},{"id":206,"kind":"int"}],"res":{"id":207,"kind":"int"}}},{"id":230,"kind":"def","name":"F","qualifier":"def","expr":{"id":230,"kind":"lambda","params":[{"id":228,"name":"x"}],"qualifier":"def","expr":{"id":229,"kind":"name","name":"x"}}},{"id":289,"kind":"def","name":"test_ite2","qualifier":"def","expr":{"id":289,"kind":"lambda","params":[{"id":277,"name":"x"},{"id":278,"name":"y"}],"qualifier":"def","expr":{"id":288,"kind":"app","opcode":"ite","args":[{"id":281,"kind":"app","opcode":"ilt","args":[{"id":279,"kind":"name","name":"x"},{"id":280,"kind":"int","value":10}]},{"id":284,"kind":"app","opcode":"iadd","args":[{"id":282,"kind":"name","name":"y"},{"id":283,"kind":"int","value":5}]},{"id":287,"kind":"app","opcode":"imod","args":[{"id":285,"kind":"name","name":"y"},{"id":286,"kind":"int","value":5}]}]}}},{"id":297,"kind":"def","name":"funapp","qualifier":"val","expr":{"id":296,"kind":"app","opcode":"get","args":[{"id":294,"kind":"name","name":"f1"},{"id":295,"kind":"str","value":"a"}]}},{"id":305,"kind":"def","name":"oper_app_normal","qualifier":"val","expr":{"id":304,"kind":"app","opcode":"MyOper","args":[{"id":302,"kind":"str","value":"a"},{"id":303,"kind":"int","value":42}]}},{"id":309,"kind":"def","name":"oper_app_ufcs","qualifier":"val","expr":{"id":308,"kind":"app","opcode":"MyOper","args":[{"id":306,"kind":"str","value":"a"},{"id":307,"kind":"int","value":42}]}},{"id":321,"kind":"def","name":"oper_app_dot1","qualifier":"val","expr":{"id":320,"kind":"app","opcode":"filter","args":[{"id":314,"kind":"name","name":"S"},{"id":319,"kind":"lambda","params":[{"id":315,"name":"x"}],"qualifier":"def","expr":{"id":318,"kind":"app","opcode":"igt","args":[{"id":316,"kind":"name","name":"x"},{"id":317,"kind":"int","value":10}]}}]}},{"id":359,"kind":"def","name":"oper_app_dot4","qualifier":"val","expr":{"id":358,"kind":"app","opcode":"filter","args":[{"id":354,"kind":"name","name":"S"},{"id":357,"kind":"lambda","params":[{"id":355,"name":"_"}],"qualifier":"def","expr":{"id":356,"kind":"bool","value":true}}]}},{"id":367,"kind":"def","name":"f","qualifier":"val","expr":{"id":366,"kind":"app","opcode":"mapBy","args":[{"id":360,"kind":"name","name":"S"},{"id":365,"kind":"lambda","params":[{"id":361,"name":"x"}],"qualifier":"def","expr":{"id":364,"kind":"app","opcode":"iadd","args":[{"id":362,"kind":"name","name":"x"},{"id":363,"kind":"int","value":1}]}}]}},{"id":373,"kind":"def","name":"set_difference","qualifier":"val","expr":{"id":372,"kind":"app","opcode":"exclude","args":[{"id":368,"kind":"name","name":"S"},{"id":371,"kind":"app","opcode":"Set","args":[{"id":369,"kind":"int","value":3},{"id":370,"kind":"int","value":4}]}]}},{"id":429,"kind":"def","name":"test_record3","qualifier":"val","expr":{"id":428,"kind":"app","opcode":"with","args":[{"id":427,"kind":"app","opcode":"with","args":[{"id":426,"kind":"name","name":"test_record"},{"id":423,"kind":"str","value":"name"},{"id":422,"kind":"str","value":"quint"}]},{"id":425,"kind":"str","value":"year"},{"id":424,"kind":"int","value":2023}]}},{"id":445,"kind":"def","name":"rec_field","qualifier":"val","expr":{"id":444,"kind":"let","opdef":{"id":440,"kind":"def","name":"my_rec","qualifier":"val","expr":{"id":439,"kind":"app","opcode":"Rec","args":[{"id":436,"kind":"str","value":"a"},{"id":435,"kind":"int","value":1},{"id":438,"kind":"str","value":"b"},{"id":437,"kind":"str","value":"foo"}]}},"expr":{"id":443,"kind":"app","opcode":"field","args":[{"id":441,"kind":"name","name":"my_rec"},{"id":442,"kind":"str","value":"a"}]}}},{"id":454,"kind":"def","name":"tup_elem","qualifier":"val","expr":{"id":453,"kind":"let","opdef":{"id":449,"kind":"def","name":"my_tup","qualifier":"val","expr":{"id":448,"kind":"app","opcode":"Tup","args":[{"id":446,"kind":"str","value":"a"},{"id":447,"kind":"int","value":3}]}},"expr":{"id":452,"kind":"app","opcode":"item","args":[{"id":450,"kind":"name","name":"my_tup"},{"id":451,"kind":"int","value":2}]}}},{"id":459,"kind":"def","name":"isEmpty","qualifier":"def","expr":{"id":459,"kind":"lambda","params":[{"id":455,"name":"s"}],"qualifier":"def","expr":{"id":458,"kind":"app","opcode":"eq","args":[{"id":456,"kind":"name","name":"s"},{"id":457,"kind":"app","opcode":"List","args":[]}]}}},{"id":480,"kind":"assume","name":"positive","assumption":{"id":479,"kind":"app","opcode":"igt","args":[{"id":477,"kind":"name","name":"N"},{"id":478,"kind":"int","value":0}]}},{"id":484,"kind":"assume","name":"_","assumption":{"id":483,"kind":"app","opcode":"neq","args":[{"id":481,"kind":"name","name":"N"},{"id":482,"kind":"int","value":0}]}},{"id":485,"kind":"import","defName":"foo","protoName":"M1"},{"id":486,"kind":"import","defName":"*","protoName":"M2"},{"kind":"var","name":"S1","typeAnnotation":{"id":491,"kind":"const","name":"INT_SET"},"id":492},{"id":495,"kind":"instance","qualifiedName":"Inst1","protoName":"Proto","overrides":[[{"id":494,"name":"N"},{"id":493,"kind":"name","name":"N"}]],"identityOverride":false},{"id":522,"kind":"def","name":"isValid","qualifier":"def","expr":{"id":522,"kind":"lambda","params":[{"id":503,"name":"entry"}],"qualifier":"def","expr":{"id":521,"kind":"app","opcode":"unionMatch","args":[{"id":504,"kind":"name","name":"entry"},{"id":517,"kind":"str","value":"Cat"},{"id":518,"kind":"lambda","params":[{"id":505,"name":"cat"}],"qualifier":"def","expr":{"id":510,"kind":"app","opcode":"neq","args":[{"id":508,"kind":"app","opcode":"field","args":[{"id":506,"kind":"name","name":"cat"},{"id":507,"kind":"str","value":"name"}]},{"id":509,"kind":"str","value":""}]}},{"id":519,"kind":"str","value":"Date"},{"id":520,"kind":"lambda","params":[{"id":511,"name":"date"}],"qualifier":"def","expr":{"id":516,"kind":"app","opcode":"igt","args":[{"id":514,"kind":"app","opcode":"field","args":[{"id":512,"kind":"name","name":"date"},{"id":513,"kind":"str","value":"year"}]},{"id":515,"kind":"int","value":0}]}}]}}},{"id":237,"kind":"def","name":"G","qualifier":"val","expr":{"id":237,"kind":"lambda","params":[{"id":231,"name":"x"}],"qualifier":"val","expr":{"id":236,"kind":"app","opcode":"and","args":[{"id":233,"kind":"app","opcode":"F","args":[{"id":232,"kind":"name","name":"x"}]},{"id":235,"kind":"app","opcode":"not","args":[{"id":234,"kind":"name","name":"x"}]}]}}},{"id":244,"kind":"def","name":"test_and_arg","qualifier":"val","expr":{"id":244,"kind":"lambda","params":[{"id":238,"name":"x"}],"qualifier":"val","expr":{"id":243,"kind":"app","opcode":"and","args":[{"id":240,"kind":"app","opcode":"F","args":[{"id":239,"kind":"name","name":"x"}]},{"id":242,"kind":"app","opcode":"not","args":[{"id":241,"kind":"name","name":"x"}]}]}}},{"id":251,"kind":"def","name":"test_or_arg","qualifier":"val","expr":{"id":251,"kind":"lambda","params":[{"id":245,"name":"x"}],"qualifier":"val","expr":{"id":250,"kind":"app","opcode":"or","args":[{"id":247,"kind":"app","opcode":"F","args":[{"id":246,"kind":"name","name":"x"}]},{"id":249,"kind":"app","opcode":"not","args":[{"id":248,"kind":"name","name":"x"}]}]}}},{"id":341,"kind":"def","name":"tuple_sum","qualifier":"val","expr":{"id":340,"kind":"app","opcode":"map","args":[{"id":324,"kind":"app","opcode":"tuples","args":[{"id":322,"kind":"name","name":"S"},{"id":323,"kind":"name","name":"MySet"}]},{"id":339,"kind":"lambda","params":[{"id":330,"name":"quintTupledLambdaParam330"}],"qualifier":"def","expr":{"id":335,"kind":"let","opdef":{"id":326,"kind":"def","name":"mys","qualifier":"pureval","expr":{"id":336,"kind":"app","opcode":"item","args":[{"id":337,"kind":"name","name":"quintTupledLambdaParam330"},{"id":338,"kind":"int","value":2}]}},"expr":{"id":331,"kind":"let","opdef":{"id":325,"kind":"def","name":"s","qualifier":"pureval","expr":{"id":332,"kind":"app","opcode":"item","args":[{"id":333,"kind":"name","name":"quintTupledLambdaParam330"},{"id":334,"kind":"int","value":1}]}},"expr":{"id":329,"kind":"app","opcode":"iadd","args":[{"id":327,"kind":"name","name":"s"},{"id":328,"kind":"name","name":"mys"}]}}}}]}},{"id":353,"kind":"def","name":"oper_nondet","qualifier":"action","expr":{"id":352,"kind":"let","opdef":{"id":344,"kind":"def","name":"x","qualifier":"nondet","expr":{"id":343,"kind":"app","opcode":"oneOf","args":[{"id":342,"kind":"name","name":"S"}]}},"expr":{"id":351,"kind":"app","opcode":"actionAll","args":[{"id":347,"kind":"app","opcode":"igt","args":[{"id":345,"kind":"name","name":"x"},{"id":346,"kind":"int","value":10}]},{"id":350,"kind":"app","opcode":"assign","args":[{"id":349,"kind":"name","name":"k"},{"id":348,"kind":"name","name":"x"}]}]}}}]}],"table":{"142":{"id":141,"name":"x","kind":"param"},"153":{"id":152,"kind":"typedef","name":"PROC"},"163":{"id":161,"name":"x","kind":"param"},"164":{"id":162,"name":"y","kind":"param"},"168":{"id":167,"name":"factor","kind":"param"},"169":{"kind":"var","name":"n","typeAnnotation":{"id":157,"kind":"int"},"id":158},"173":{"id":172,"name":"x","kind":"param"},"174":{"kind":"var","name":"n","typeAnnotation":{"id":157,"kind":"int"},"id":158},"178":{"id":177,"name":"x","kind":"param"},"187":{"id":181,"name":"x","kind":"param"},"188":{"id":182,"name":"y","kind":"param"},"195":{"id":191,"name":"x","kind":"param"},"200":{"kind":"var","name":"k","typeAnnotation":{"id":197,"kind":"int"},"id":198},"208":{"id":203,"name":"x","kind":"param"},"209":{"id":205,"name":"y","kind":"param"},"211":{"id":203,"name":"x","kind":"param"},"212":{"id":205,"name":"y","kind":"param"},"229":{"id":228,"name":"x","kind":"param"},"232":{"id":231,"name":"x","kind":"param"},"233":{"id":230,"kind":"def","name":"F","qualifier":"def","expr":{"id":230,"kind":"lambda","params":[{"id":228,"name":"x"}],"qualifier":"def","expr":{"id":229,"kind":"name","name":"x"}},"depth":0},"234":{"id":231,"name":"x","kind":"param"},"239":{"id":238,"name":"x","kind":"param"},"240":{"id":230,"kind":"def","name":"F","qualifier":"def","expr":{"id":230,"kind":"lambda","params":[{"id":228,"name":"x"}],"qualifier":"def","expr":{"id":229,"kind":"name","name":"x"}},"depth":0},"241":{"id":238,"name":"x","kind":"param"},"246":{"id":245,"name":"x","kind":"param"},"247":{"id":230,"kind":"def","name":"F","qualifier":"def","expr":{"id":230,"kind":"lambda","params":[{"id":228,"name":"x"}],"qualifier":"def","expr":{"id":229,"kind":"name","name":"x"}},"depth":0},"248":{"id":245,"name":"x","kind":"param"},"279":{"id":277,"name":"x","kind":"param"},"282":{"id":278,"name":"y","kind":"param"},"285":{"id":278,"name":"y","kind":"param"},"294":{"kind":"var","name":"f1","typeAnnotation":{"id":292,"kind":"fun","arg":{"id":290,"kind":"str"},"res":{"id":291,"kind":"int"}},"id":293},"304":{"id":301,"kind":"def","name":"MyOper","qualifier":"def","expr":{"id":301,"kind":"lambda","params":[{"id":298,"name":"a"},{"id":299,"name":"b"}],"qualifier":"def","expr":{"id":300,"kind":"int","value":1}},"depth":0},"308":{"id":301,"kind":"def","name":"MyOper","qualifier":"def","expr":{"id":301,"kind":"lambda","params":[{"id":298,"name":"a"},{"id":299,"name":"b"}],"qualifier":"def","expr":{"id":300,"kind":"int","value":1}},"depth":0},"314":{"kind":"const","name":"S","typeAnnotation":{"id":15,"kind":"set","elem":{"id":14,"kind":"int"}},"id":16},"316":{"id":315,"name":"x","kind":"param"},"322":{"kind":"const","name":"S","typeAnnotation":{"id":15,"kind":"set","elem":{"id":14,"kind":"int"}},"id":16},"323":{"kind":"const","name":"MySet","typeAnnotation":{"id":18,"kind":"set","elem":{"id":17,"kind":"int"}},"id":19},"327":{"id":325,"kind":"def","name":"s","qualifier":"pureval","expr":{"id":332,"kind":"app","opcode":"item","args":[{"id":333,"kind":"name","name":"quintTupledLambdaParam330"},{"id":334,"kind":"int","value":1}]},"depth":1},"328":{"id":326,"kind":"def","name":"mys","qualifier":"pureval","expr":{"id":336,"kind":"app","opcode":"item","args":[{"id":337,"kind":"name","name":"quintTupledLambdaParam330"},{"id":338,"kind":"int","value":2}]},"depth":1},"333":{"id":330,"name":"quintTupledLambdaParam330","kind":"param"},"337":{"id":330,"name":"quintTupledLambdaParam330","kind":"param"},"342":{"kind":"const","name":"S","typeAnnotation":{"id":15,"kind":"set","elem":{"id":14,"kind":"int"}},"id":16},"345":{"id":344,"kind":"def","name":"x","qualifier":"nondet","expr":{"id":343,"kind":"app","opcode":"oneOf","args":[{"id":342,"kind":"name","name":"S"}]},"depth":1},"348":{"id":344,"kind":"def","name":"x","qualifier":"nondet","expr":{"id":343,"kind":"app","opcode":"oneOf","args":[{"id":342,"kind":"name","name":"S"}]},"depth":1},"349":{"kind":"var","name":"k","typeAnnotation":{"id":197,"kind":"int"},"id":198},"354":{"kind":"const","name":"S","typeAnnotation":{"id":15,"kind":"set","elem":{"id":14,"kind":"int"}},"id":16},"360":{"kind":"const","name":"S","typeAnnotation":{"id":15,"kind":"set","elem":{"id":14,"kind":"int"}},"id":16},"362":{"id":361,"name":"x","kind":"param"},"368":{"kind":"const","name":"S","typeAnnotation":{"id":15,"kind":"set","elem":{"id":14,"kind":"int"}},"id":16},"426":{"id":415,"kind":"def","name":"test_record","qualifier":"val","expr":{"id":414,"kind":"app","opcode":"Rec","args":[{"id":411,"kind":"str","value":"name"},{"id":410,"kind":"str","value":"igor"},{"id":413,"kind":"str","value":"year"},{"id":412,"kind":"int","value":1981}]},"depth":0},"441":{"id":440,"kind":"def","name":"my_rec","qualifier":"val","expr":{"id":439,"kind":"app","opcode":"Rec","args":[{"id":436,"kind":"str","value":"a"},{"id":435,"kind":"int","value":1},{"id":438,"kind":"str","value":"b"},{"id":437,"kind":"str","value":"foo"}]},"depth":1},"450":{"id":449,"kind":"def","name":"my_tup","qualifier":"val","expr":{"id":448,"kind":"app","opcode":"Tup","args":[{"id":446,"kind":"str","value":"a"},{"id":447,"kind":"int","value":3}]},"depth":1},"456":{"id":455,"name":"s","kind":"param"},"477":{"kind":"const","name":"N","typeAnnotation":{"id":12,"kind":"int"},"id":13},"481":{"kind":"const","name":"N","typeAnnotation":{"id":12,"kind":"int"},"id":13},"491":{"id":489,"kind":"typedef","name":"INT_SET","type":{"id":488,"kind":"set","elem":{"id":487,"kind":"int"}}},"493":{"kind":"const","name":"N","typeAnnotation":{"id":12,"kind":"int"},"id":13},"494":{"kind":"const","name":"N","typeAnnotation":{"id":7,"kind":"int"},"id":493,"importedFrom":{"id":495,"kind":"instance","qualifiedName":"Inst1","protoName":"Proto","overrides":[[{"id":494,"name":"N"},{"id":493,"kind":"name","name":"N"}]],"identityOverride":false},"hidden":true,"namespaces":["Inst1","withConsts"]},"504":{"id":503,"name":"entry","kind":"param"},"506":{"id":505,"name":"cat","kind":"param"},"512":{"id":511,"name":"date","kind":"param"}}} \ No newline at end of file +{"stage":"parsing","warnings":[],"errors":[{"explanation":"extraneous input 'match' expecting {'}', 'const', 'var', 'assume', 'type', 'val', 'def', 'pure', 'action', 'run', 'temporal', 'import', 'export', DOCCOMMENT}","locs":[{"source":"mocked_path/testFixture/SuperSpec.qnt","start":{"line":233,"col":10,"index":5236},"end":{"line":233,"col":14,"index":5240}}]}]} \ No newline at end of file diff --git a/quint/testFixture/SuperSpec.qnt b/quint/testFixture/SuperSpec.qnt index ff7489cf2..c35e56005 100644 --- a/quint/testFixture/SuperSpec.qnt +++ b/quint/testFixture/SuperSpec.qnt @@ -226,14 +226,4 @@ module withConsts { // create an instance of Proto by using '*' // import Proto(*) as Inst2 - - // Match - type ENTRY_TYPE = - | { tag: "Cat", name: str, year: int } - | { tag: "Date", day: int, month: int, year: int } - - def isValid(entry) = - entry match - | "Cat": cat => cat.name != "" - | "Date": date => date.year > 0 } diff --git a/quint/testFixture/_1025importeeWithError.json b/quint/testFixture/_1025importeeWithError.json index 1b8d2045f..4027490ae 100644 --- a/quint/testFixture/_1025importeeWithError.json +++ b/quint/testFixture/_1025importeeWithError.json @@ -1 +1 @@ -{"stage":"parsing","warnings":[],"errors":[{"explanation":"mismatched input '}' expecting {'{', 'nondet', 'val', 'def', 'pure', 'action', 'run', 'temporal', '[', 'all', 'any', 'if', '_', STRING, BOOL, INT, 'and', 'or', 'iff', 'implies', 'Set', 'List', 'Map', '-', '(', IDENTIFIER}","locs":[{"source":"mocked_path/testFixture/_1025importeeWithError.qnt","start":{"line":3,"col":0,"index":45},"end":{"line":3,"col":0,"index":45}}]}]} \ No newline at end of file +{"stage":"parsing","warnings":[],"errors":[{"explanation":"mismatched input '}' expecting {'{', 'nondet', 'val', 'def', 'pure', 'action', 'run', 'temporal', '[', 'all', 'any', 'if', '_', STRING, BOOL, INT, 'and', 'or', 'iff', 'implies', 'Set', 'List', 'Map', 'match', '-', '(', IDENTIFIER}","locs":[{"source":"mocked_path/testFixture/_1025importeeWithError.qnt","start":{"line":3,"col":0,"index":45},"end":{"line":3,"col":0,"index":45}}]}]} \ No newline at end of file From 16d707522e30a4707b8eff595fcabe579fb0a183 Mon Sep 17 00:00:00 2001 From: Shon Feder Date: Wed, 4 Oct 2023 23:53:09 -0400 Subject: [PATCH 02/15] Add generated files --- quint/src/generated/Quint.interp | 5 +- quint/src/generated/QuintListener.ts | 36 + quint/src/generated/QuintParser.ts | 2232 ++++++++++++++------------ quint/src/generated/QuintVisitor.ts | 24 + quint/testFixture/SuperSpec.json | 2 +- quint/testFixture/SuperSpec.map.json | 2 +- 6 files changed, 1305 insertions(+), 996 deletions(-) diff --git a/quint/src/generated/Quint.interp b/quint/src/generated/Quint.interp index 579ad10bd..4b92d158c 100644 --- a/quint/src/generated/Quint.interp +++ b/quint/src/generated/Quint.interp @@ -164,6 +164,9 @@ typeUnionRecOne row rowLabel expr +matchSumExpr +matchSumCase +matchSumVariant declarationOrExpr lambda lambdaUnsugared @@ -182,4 +185,4 @@ simpleId atn: -[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 3, 71, 748, 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, 3, 2, 6, 2, 76, 10, 2, 13, 2, 14, 2, 77, 3, 2, 3, 2, 3, 3, 7, 3, 83, 10, 3, 12, 3, 14, 3, 86, 11, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 3, 92, 10, 3, 12, 3, 14, 3, 95, 11, 3, 3, 3, 3, 3, 3, 4, 7, 4, 100, 10, 4, 12, 4, 14, 4, 103, 11, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 127, 10, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 135, 10, 6, 12, 6, 14, 6, 138, 11, 6, 5, 6, 140, 10, 6, 3, 6, 3, 6, 3, 6, 5, 6, 145, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 158, 10, 6, 12, 6, 14, 6, 161, 11, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 167, 10, 6, 3, 6, 3, 6, 5, 6, 171, 10, 6, 3, 6, 5, 6, 174, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 187, 10, 7, 3, 7, 3, 7, 3, 7, 7, 7, 192, 10, 7, 12, 7, 14, 7, 195, 11, 7, 5, 7, 197, 10, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 204, 10, 8, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 210, 10, 9, 3, 9, 3, 9, 3, 9, 5, 9, 215, 10, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 226, 10, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 234, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 240, 10, 11, 3, 11, 3, 11, 5, 11, 244, 10, 11, 5, 11, 246, 10, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 257, 10, 12, 5, 12, 259, 10, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 7, 13, 272, 10, 13, 12, 13, 14, 13, 275, 11, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 282, 10, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 7, 13, 295, 10, 13, 12, 13, 14, 13, 298, 11, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 305, 10, 13, 5, 13, 307, 10, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 7, 18, 322, 10, 18, 12, 18, 14, 18, 325, 11, 18, 5, 18, 327, 10, 18, 3, 18, 5, 18, 330, 10, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 7, 18, 351, 10, 18, 12, 18, 14, 18, 354, 11, 18, 3, 18, 5, 18, 357, 10, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 6, 18, 366, 10, 18, 13, 18, 14, 18, 367, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 5, 18, 378, 10, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 7, 18, 386, 10, 18, 12, 18, 14, 18, 389, 11, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 5, 19, 398, 10, 19, 3, 19, 5, 19, 401, 10, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 7, 20, 410, 10, 20, 12, 20, 14, 20, 413, 11, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 5, 20, 422, 10, 20, 5, 20, 424, 10, 20, 3, 20, 3, 20, 5, 20, 428, 10, 20, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 5, 22, 437, 10, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 7, 22, 453, 10, 22, 12, 22, 14, 22, 456, 11, 22, 3, 22, 5, 22, 459, 10, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 7, 22, 468, 10, 22, 12, 22, 14, 22, 471, 11, 22, 3, 22, 5, 22, 474, 10, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 7, 22, 483, 10, 22, 12, 22, 14, 22, 486, 11, 22, 3, 22, 5, 22, 489, 10, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 7, 22, 498, 10, 22, 12, 22, 14, 22, 501, 11, 22, 3, 22, 5, 22, 504, 10, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 5, 22, 512, 10, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 7, 22, 520, 10, 22, 12, 22, 14, 22, 523, 11, 22, 3, 22, 5, 22, 526, 10, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 7, 22, 534, 10, 22, 12, 22, 14, 22, 537, 11, 22, 3, 22, 5, 22, 540, 10, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 7, 22, 548, 10, 22, 12, 22, 14, 22, 551, 11, 22, 5, 22, 553, 10, 22, 3, 22, 5, 22, 556, 10, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 5, 22, 581, 10, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 5, 22, 620, 10, 22, 3, 22, 5, 22, 623, 10, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 6, 22, 639, 10, 22, 13, 22, 14, 22, 640, 7, 22, 643, 10, 22, 12, 22, 14, 22, 646, 11, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 5, 23, 657, 10, 23, 3, 24, 3, 24, 5, 24, 661, 10, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 7, 25, 671, 10, 25, 12, 25, 14, 25, 674, 11, 25, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 680, 10, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 6, 26, 687, 10, 26, 13, 26, 14, 26, 688, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 5, 27, 698, 10, 27, 3, 28, 3, 28, 3, 29, 3, 29, 5, 29, 704, 10, 29, 3, 30, 3, 30, 3, 30, 7, 30, 709, 10, 30, 12, 30, 14, 30, 712, 11, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 5, 31, 720, 10, 31, 3, 32, 3, 32, 5, 32, 724, 10, 32, 3, 33, 3, 33, 5, 33, 728, 10, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 7, 36, 737, 10, 36, 12, 36, 14, 36, 740, 11, 36, 3, 37, 3, 37, 3, 37, 3, 37, 5, 37, 746, 10, 37, 3, 37, 2, 2, 4, 34, 42, 38, 2, 2, 4, 2, 6, 2, 8, 2, 10, 2, 12, 2, 14, 2, 16, 2, 18, 2, 20, 2, 22, 2, 24, 2, 26, 2, 28, 2, 30, 2, 32, 2, 34, 2, 36, 2, 38, 2, 40, 2, 42, 2, 44, 2, 46, 2, 48, 2, 50, 2, 52, 2, 54, 2, 56, 2, 58, 2, 60, 2, 62, 2, 64, 2, 66, 2, 68, 2, 70, 2, 72, 2, 2, 9, 3, 2, 55, 57, 3, 2, 53, 54, 3, 2, 58, 63, 3, 2, 45, 51, 3, 2, 45, 48, 5, 2, 33, 33, 45, 48, 53, 63, 3, 2, 42, 44, 2, 846, 2, 75, 3, 2, 2, 2, 4, 84, 3, 2, 2, 2, 6, 101, 3, 2, 2, 2, 8, 126, 3, 2, 2, 2, 10, 128, 3, 2, 2, 2, 12, 196, 3, 2, 2, 2, 14, 198, 3, 2, 2, 2, 16, 205, 3, 2, 2, 2, 18, 225, 3, 2, 2, 2, 20, 245, 3, 2, 2, 2, 22, 258, 3, 2, 2, 2, 24, 306, 3, 2, 2, 2, 26, 308, 3, 2, 2, 2, 28, 310, 3, 2, 2, 2, 30, 312, 3, 2, 2, 2, 32, 314, 3, 2, 2, 2, 34, 377, 3, 2, 2, 2, 36, 390, 3, 2, 2, 2, 38, 427, 3, 2, 2, 2, 40, 429, 3, 2, 2, 2, 42, 580, 3, 2, 2, 2, 44, 656, 3, 2, 2, 2, 46, 660, 3, 2, 2, 2, 48, 679, 3, 2, 2, 2, 50, 681, 3, 2, 2, 2, 52, 697, 3, 2, 2, 2, 54, 699, 3, 2, 2, 2, 56, 703, 3, 2, 2, 2, 58, 705, 3, 2, 2, 2, 60, 719, 3, 2, 2, 2, 62, 723, 3, 2, 2, 2, 64, 727, 3, 2, 2, 2, 66, 729, 3, 2, 2, 2, 68, 731, 3, 2, 2, 2, 70, 733, 3, 2, 2, 2, 72, 745, 3, 2, 2, 2, 74, 76, 5, 4, 3, 2, 75, 74, 3, 2, 2, 2, 76, 77, 3, 2, 2, 2, 77, 75, 3, 2, 2, 2, 77, 78, 3, 2, 2, 2, 78, 79, 3, 2, 2, 2, 79, 80, 7, 2, 2, 3, 80, 3, 3, 2, 2, 2, 81, 83, 7, 68, 2, 2, 82, 81, 3, 2, 2, 2, 83, 86, 3, 2, 2, 2, 84, 82, 3, 2, 2, 2, 84, 85, 3, 2, 2, 2, 85, 87, 3, 2, 2, 2, 86, 84, 3, 2, 2, 2, 87, 88, 7, 3, 2, 2, 88, 89, 5, 70, 36, 2, 89, 93, 7, 4, 2, 2, 90, 92, 5, 6, 4, 2, 91, 90, 3, 2, 2, 2, 92, 95, 3, 2, 2, 2, 93, 91, 3, 2, 2, 2, 93, 94, 3, 2, 2, 2, 94, 96, 3, 2, 2, 2, 95, 93, 3, 2, 2, 2, 96, 97, 7, 5, 2, 2, 97, 5, 3, 2, 2, 2, 98, 100, 7, 68, 2, 2, 99, 98, 3, 2, 2, 2, 100, 103, 3, 2, 2, 2, 101, 99, 3, 2, 2, 2, 101, 102, 3, 2, 2, 2, 102, 104, 3, 2, 2, 2, 103, 101, 3, 2, 2, 2, 104, 105, 5, 8, 5, 2, 105, 7, 3, 2, 2, 2, 106, 107, 7, 6, 2, 2, 107, 108, 5, 70, 36, 2, 108, 109, 7, 7, 2, 2, 109, 110, 5, 34, 18, 2, 110, 127, 3, 2, 2, 2, 111, 112, 7, 8, 2, 2, 112, 113, 5, 70, 36, 2, 113, 114, 7, 7, 2, 2, 114, 115, 5, 34, 18, 2, 115, 127, 3, 2, 2, 2, 116, 117, 7, 9, 2, 2, 117, 118, 5, 52, 27, 2, 118, 119, 7, 64, 2, 2, 119, 120, 5, 42, 22, 2, 120, 127, 3, 2, 2, 2, 121, 127, 5, 24, 13, 2, 122, 127, 5, 10, 6, 2, 123, 127, 5, 12, 7, 2, 124, 127, 5, 20, 11, 2, 125, 127, 5, 22, 12, 2, 126, 106, 3, 2, 2, 2, 126, 111, 3, 2, 2, 2, 126, 116, 3, 2, 2, 2, 126, 121, 3, 2, 2, 2, 126, 122, 3, 2, 2, 2, 126, 123, 3, 2, 2, 2, 126, 124, 3, 2, 2, 2, 126, 125, 3, 2, 2, 2, 127, 9, 3, 2, 2, 2, 128, 129, 5, 18, 10, 2, 129, 166, 5, 62, 32, 2, 130, 139, 7, 65, 2, 2, 131, 136, 5, 54, 28, 2, 132, 133, 7, 10, 2, 2, 133, 135, 5, 54, 28, 2, 134, 132, 3, 2, 2, 2, 135, 138, 3, 2, 2, 2, 136, 134, 3, 2, 2, 2, 136, 137, 3, 2, 2, 2, 137, 140, 3, 2, 2, 2, 138, 136, 3, 2, 2, 2, 139, 131, 3, 2, 2, 2, 139, 140, 3, 2, 2, 2, 140, 141, 3, 2, 2, 2, 141, 144, 7, 66, 2, 2, 142, 143, 7, 7, 2, 2, 143, 145, 5, 34, 18, 2, 144, 142, 3, 2, 2, 2, 144, 145, 3, 2, 2, 2, 145, 167, 3, 2, 2, 2, 146, 147, 7, 7, 2, 2, 147, 167, 5, 34, 18, 2, 148, 149, 7, 65, 2, 2, 149, 150, 5, 54, 28, 2, 150, 151, 7, 7, 2, 2, 151, 159, 5, 34, 18, 2, 152, 153, 7, 10, 2, 2, 153, 154, 5, 54, 28, 2, 154, 155, 7, 7, 2, 2, 155, 156, 5, 34, 18, 2, 156, 158, 3, 2, 2, 2, 157, 152, 3, 2, 2, 2, 158, 161, 3, 2, 2, 2, 159, 157, 3, 2, 2, 2, 159, 160, 3, 2, 2, 2, 160, 162, 3, 2, 2, 2, 161, 159, 3, 2, 2, 2, 162, 163, 7, 66, 2, 2, 163, 164, 7, 7, 2, 2, 164, 165, 5, 34, 18, 2, 165, 167, 3, 2, 2, 2, 166, 130, 3, 2, 2, 2, 166, 146, 3, 2, 2, 2, 166, 148, 3, 2, 2, 2, 166, 167, 3, 2, 2, 2, 167, 170, 3, 2, 2, 2, 168, 169, 7, 64, 2, 2, 169, 171, 5, 42, 22, 2, 170, 168, 3, 2, 2, 2, 170, 171, 3, 2, 2, 2, 171, 173, 3, 2, 2, 2, 172, 174, 7, 11, 2, 2, 173, 172, 3, 2, 2, 2, 173, 174, 3, 2, 2, 2, 174, 11, 3, 2, 2, 2, 175, 176, 7, 12, 2, 2, 176, 197, 5, 70, 36, 2, 177, 178, 7, 12, 2, 2, 178, 179, 5, 70, 36, 2, 179, 180, 7, 64, 2, 2, 180, 181, 5, 34, 18, 2, 181, 197, 3, 2, 2, 2, 182, 183, 7, 12, 2, 2, 183, 184, 5, 70, 36, 2, 184, 186, 7, 64, 2, 2, 185, 187, 7, 13, 2, 2, 186, 185, 3, 2, 2, 2, 186, 187, 3, 2, 2, 2, 187, 188, 3, 2, 2, 2, 188, 193, 5, 14, 8, 2, 189, 190, 7, 13, 2, 2, 190, 192, 5, 14, 8, 2, 191, 189, 3, 2, 2, 2, 192, 195, 3, 2, 2, 2, 193, 191, 3, 2, 2, 2, 193, 194, 3, 2, 2, 2, 194, 197, 3, 2, 2, 2, 195, 193, 3, 2, 2, 2, 196, 175, 3, 2, 2, 2, 196, 177, 3, 2, 2, 2, 196, 182, 3, 2, 2, 2, 197, 13, 3, 2, 2, 2, 198, 203, 5, 72, 37, 2, 199, 200, 7, 65, 2, 2, 200, 201, 5, 34, 18, 2, 201, 202, 7, 66, 2, 2, 202, 204, 3, 2, 2, 2, 203, 199, 3, 2, 2, 2, 203, 204, 3, 2, 2, 2, 204, 15, 3, 2, 2, 2, 205, 206, 7, 14, 2, 2, 206, 209, 5, 70, 36, 2, 207, 208, 7, 7, 2, 2, 208, 210, 5, 34, 18, 2, 209, 207, 3, 2, 2, 2, 209, 210, 3, 2, 2, 2, 210, 211, 3, 2, 2, 2, 211, 212, 7, 64, 2, 2, 212, 214, 5, 42, 22, 2, 213, 215, 7, 11, 2, 2, 214, 213, 3, 2, 2, 2, 214, 215, 3, 2, 2, 2, 215, 17, 3, 2, 2, 2, 216, 226, 7, 15, 2, 2, 217, 226, 7, 16, 2, 2, 218, 219, 7, 17, 2, 2, 219, 226, 7, 15, 2, 2, 220, 221, 7, 17, 2, 2, 221, 226, 7, 16, 2, 2, 222, 226, 7, 18, 2, 2, 223, 226, 7, 19, 2, 2, 224, 226, 7, 20, 2, 2, 225, 216, 3, 2, 2, 2, 225, 217, 3, 2, 2, 2, 225, 218, 3, 2, 2, 2, 225, 220, 3, 2, 2, 2, 225, 222, 3, 2, 2, 2, 225, 223, 3, 2, 2, 2, 225, 224, 3, 2, 2, 2, 226, 19, 3, 2, 2, 2, 227, 228, 7, 21, 2, 2, 228, 229, 5, 28, 15, 2, 229, 230, 7, 22, 2, 2, 230, 233, 5, 56, 29, 2, 231, 232, 7, 23, 2, 2, 232, 234, 5, 32, 17, 2, 233, 231, 3, 2, 2, 2, 233, 234, 3, 2, 2, 2, 234, 246, 3, 2, 2, 2, 235, 236, 7, 21, 2, 2, 236, 239, 5, 28, 15, 2, 237, 238, 7, 24, 2, 2, 238, 240, 5, 28, 15, 2, 239, 237, 3, 2, 2, 2, 239, 240, 3, 2, 2, 2, 240, 243, 3, 2, 2, 2, 241, 242, 7, 23, 2, 2, 242, 244, 5, 32, 17, 2, 243, 241, 3, 2, 2, 2, 243, 244, 3, 2, 2, 2, 244, 246, 3, 2, 2, 2, 245, 227, 3, 2, 2, 2, 245, 235, 3, 2, 2, 2, 246, 21, 3, 2, 2, 2, 247, 248, 7, 25, 2, 2, 248, 249, 5, 28, 15, 2, 249, 250, 7, 22, 2, 2, 250, 251, 5, 56, 29, 2, 251, 259, 3, 2, 2, 2, 252, 253, 7, 25, 2, 2, 253, 256, 5, 28, 15, 2, 254, 255, 7, 24, 2, 2, 255, 257, 5, 28, 15, 2, 256, 254, 3, 2, 2, 2, 256, 257, 3, 2, 2, 2, 257, 259, 3, 2, 2, 2, 258, 247, 3, 2, 2, 2, 258, 252, 3, 2, 2, 2, 259, 23, 3, 2, 2, 2, 260, 261, 7, 21, 2, 2, 261, 262, 5, 26, 14, 2, 262, 263, 7, 65, 2, 2, 263, 264, 5, 28, 15, 2, 264, 265, 7, 64, 2, 2, 265, 273, 5, 42, 22, 2, 266, 267, 7, 10, 2, 2, 267, 268, 5, 28, 15, 2, 268, 269, 7, 64, 2, 2, 269, 270, 5, 42, 22, 2, 270, 272, 3, 2, 2, 2, 271, 266, 3, 2, 2, 2, 272, 275, 3, 2, 2, 2, 273, 271, 3, 2, 2, 2, 273, 274, 3, 2, 2, 2, 274, 276, 3, 2, 2, 2, 275, 273, 3, 2, 2, 2, 276, 277, 7, 66, 2, 2, 277, 278, 7, 22, 2, 2, 278, 281, 7, 55, 2, 2, 279, 280, 7, 23, 2, 2, 280, 282, 5, 32, 17, 2, 281, 279, 3, 2, 2, 2, 281, 282, 3, 2, 2, 2, 282, 307, 3, 2, 2, 2, 283, 284, 7, 21, 2, 2, 284, 285, 5, 26, 14, 2, 285, 286, 7, 65, 2, 2, 286, 287, 5, 28, 15, 2, 287, 288, 7, 64, 2, 2, 288, 296, 5, 42, 22, 2, 289, 290, 7, 10, 2, 2, 290, 291, 5, 28, 15, 2, 291, 292, 7, 64, 2, 2, 292, 293, 5, 42, 22, 2, 293, 295, 3, 2, 2, 2, 294, 289, 3, 2, 2, 2, 295, 298, 3, 2, 2, 2, 296, 294, 3, 2, 2, 2, 296, 297, 3, 2, 2, 2, 297, 299, 3, 2, 2, 2, 298, 296, 3, 2, 2, 2, 299, 300, 7, 66, 2, 2, 300, 301, 7, 24, 2, 2, 301, 304, 5, 30, 16, 2, 302, 303, 7, 23, 2, 2, 303, 305, 5, 32, 17, 2, 304, 302, 3, 2, 2, 2, 304, 305, 3, 2, 2, 2, 305, 307, 3, 2, 2, 2, 306, 260, 3, 2, 2, 2, 306, 283, 3, 2, 2, 2, 307, 25, 3, 2, 2, 2, 308, 309, 5, 70, 36, 2, 309, 27, 3, 2, 2, 2, 310, 311, 5, 70, 36, 2, 311, 29, 3, 2, 2, 2, 312, 313, 5, 70, 36, 2, 313, 31, 3, 2, 2, 2, 314, 315, 7, 42, 2, 2, 315, 33, 3, 2, 2, 2, 316, 317, 8, 18, 1, 2, 317, 326, 7, 65, 2, 2, 318, 323, 5, 34, 18, 2, 319, 320, 7, 10, 2, 2, 320, 322, 5, 34, 18, 2, 321, 319, 3, 2, 2, 2, 322, 325, 3, 2, 2, 2, 323, 321, 3, 2, 2, 2, 323, 324, 3, 2, 2, 2, 324, 327, 3, 2, 2, 2, 325, 323, 3, 2, 2, 2, 326, 318, 3, 2, 2, 2, 326, 327, 3, 2, 2, 2, 327, 329, 3, 2, 2, 2, 328, 330, 7, 10, 2, 2, 329, 328, 3, 2, 2, 2, 329, 330, 3, 2, 2, 2, 330, 331, 3, 2, 2, 2, 331, 332, 7, 66, 2, 2, 332, 333, 7, 27, 2, 2, 333, 378, 5, 34, 18, 13, 334, 335, 7, 49, 2, 2, 335, 336, 7, 28, 2, 2, 336, 337, 5, 34, 18, 2, 337, 338, 7, 29, 2, 2, 338, 378, 3, 2, 2, 2, 339, 340, 7, 50, 2, 2, 340, 341, 7, 28, 2, 2, 341, 342, 5, 34, 18, 2, 342, 343, 7, 29, 2, 2, 343, 378, 3, 2, 2, 2, 344, 345, 7, 65, 2, 2, 345, 346, 5, 34, 18, 2, 346, 347, 7, 10, 2, 2, 347, 352, 5, 34, 18, 2, 348, 349, 7, 10, 2, 2, 349, 351, 5, 34, 18, 2, 350, 348, 3, 2, 2, 2, 351, 354, 3, 2, 2, 2, 352, 350, 3, 2, 2, 2, 352, 353, 3, 2, 2, 2, 353, 356, 3, 2, 2, 2, 354, 352, 3, 2, 2, 2, 355, 357, 7, 10, 2, 2, 356, 355, 3, 2, 2, 2, 356, 357, 3, 2, 2, 2, 357, 358, 3, 2, 2, 2, 358, 359, 7, 66, 2, 2, 359, 378, 3, 2, 2, 2, 360, 361, 7, 4, 2, 2, 361, 362, 5, 38, 20, 2, 362, 363, 7, 5, 2, 2, 363, 378, 3, 2, 2, 2, 364, 366, 5, 36, 19, 2, 365, 364, 3, 2, 2, 2, 366, 367, 3, 2, 2, 2, 367, 365, 3, 2, 2, 2, 367, 368, 3, 2, 2, 2, 368, 378, 3, 2, 2, 2, 369, 378, 7, 30, 2, 2, 370, 378, 7, 31, 2, 2, 371, 378, 7, 32, 2, 2, 372, 378, 5, 70, 36, 2, 373, 374, 7, 65, 2, 2, 374, 375, 5, 34, 18, 2, 375, 376, 7, 66, 2, 2, 376, 378, 3, 2, 2, 2, 377, 316, 3, 2, 2, 2, 377, 334, 3, 2, 2, 2, 377, 339, 3, 2, 2, 2, 377, 344, 3, 2, 2, 2, 377, 360, 3, 2, 2, 2, 377, 365, 3, 2, 2, 2, 377, 369, 3, 2, 2, 2, 377, 370, 3, 2, 2, 2, 377, 371, 3, 2, 2, 2, 377, 372, 3, 2, 2, 2, 377, 373, 3, 2, 2, 2, 378, 387, 3, 2, 2, 2, 379, 380, 12, 15, 2, 2, 380, 381, 7, 26, 2, 2, 381, 386, 5, 34, 18, 15, 382, 383, 12, 14, 2, 2, 383, 384, 7, 27, 2, 2, 384, 386, 5, 34, 18, 14, 385, 379, 3, 2, 2, 2, 385, 382, 3, 2, 2, 2, 386, 389, 3, 2, 2, 2, 387, 385, 3, 2, 2, 2, 387, 388, 3, 2, 2, 2, 388, 35, 3, 2, 2, 2, 389, 387, 3, 2, 2, 2, 390, 391, 7, 13, 2, 2, 391, 392, 7, 4, 2, 2, 392, 393, 5, 70, 36, 2, 393, 394, 7, 7, 2, 2, 394, 397, 7, 42, 2, 2, 395, 396, 7, 10, 2, 2, 396, 398, 5, 38, 20, 2, 397, 395, 3, 2, 2, 2, 397, 398, 3, 2, 2, 2, 398, 400, 3, 2, 2, 2, 399, 401, 7, 10, 2, 2, 400, 399, 3, 2, 2, 2, 400, 401, 3, 2, 2, 2, 401, 402, 3, 2, 2, 2, 402, 403, 7, 5, 2, 2, 403, 37, 3, 2, 2, 2, 404, 405, 5, 40, 21, 2, 405, 406, 7, 7, 2, 2, 406, 407, 5, 34, 18, 2, 407, 408, 7, 10, 2, 2, 408, 410, 3, 2, 2, 2, 409, 404, 3, 2, 2, 2, 410, 413, 3, 2, 2, 2, 411, 409, 3, 2, 2, 2, 411, 412, 3, 2, 2, 2, 412, 423, 3, 2, 2, 2, 413, 411, 3, 2, 2, 2, 414, 415, 5, 40, 21, 2, 415, 416, 7, 7, 2, 2, 416, 417, 5, 34, 18, 2, 417, 421, 3, 2, 2, 2, 418, 422, 7, 10, 2, 2, 419, 420, 7, 13, 2, 2, 420, 422, 7, 67, 2, 2, 421, 418, 3, 2, 2, 2, 421, 419, 3, 2, 2, 2, 421, 422, 3, 2, 2, 2, 422, 424, 3, 2, 2, 2, 423, 414, 3, 2, 2, 2, 423, 424, 3, 2, 2, 2, 424, 428, 3, 2, 2, 2, 425, 426, 7, 13, 2, 2, 426, 428, 7, 67, 2, 2, 427, 411, 3, 2, 2, 2, 427, 425, 3, 2, 2, 2, 428, 39, 3, 2, 2, 2, 429, 430, 5, 72, 37, 2, 430, 41, 3, 2, 2, 2, 431, 432, 8, 22, 1, 2, 432, 581, 5, 46, 24, 2, 433, 434, 5, 62, 32, 2, 434, 436, 7, 65, 2, 2, 435, 437, 5, 58, 30, 2, 436, 435, 3, 2, 2, 2, 436, 437, 3, 2, 2, 2, 437, 438, 3, 2, 2, 2, 438, 439, 7, 66, 2, 2, 439, 581, 3, 2, 2, 2, 440, 441, 7, 54, 2, 2, 441, 581, 5, 42, 22, 27, 442, 443, 5, 70, 36, 2, 443, 444, 7, 34, 2, 2, 444, 445, 7, 64, 2, 2, 445, 446, 5, 42, 22, 23, 446, 581, 3, 2, 2, 2, 447, 448, 7, 45, 2, 2, 448, 449, 7, 4, 2, 2, 449, 454, 5, 42, 22, 2, 450, 451, 7, 10, 2, 2, 451, 453, 5, 42, 22, 2, 452, 450, 3, 2, 2, 2, 453, 456, 3, 2, 2, 2, 454, 452, 3, 2, 2, 2, 454, 455, 3, 2, 2, 2, 455, 458, 3, 2, 2, 2, 456, 454, 3, 2, 2, 2, 457, 459, 7, 10, 2, 2, 458, 457, 3, 2, 2, 2, 458, 459, 3, 2, 2, 2, 459, 460, 3, 2, 2, 2, 460, 461, 7, 5, 2, 2, 461, 581, 3, 2, 2, 2, 462, 463, 7, 46, 2, 2, 463, 464, 7, 4, 2, 2, 464, 469, 5, 42, 22, 2, 465, 466, 7, 10, 2, 2, 466, 468, 5, 42, 22, 2, 467, 465, 3, 2, 2, 2, 468, 471, 3, 2, 2, 2, 469, 467, 3, 2, 2, 2, 469, 470, 3, 2, 2, 2, 470, 473, 3, 2, 2, 2, 471, 469, 3, 2, 2, 2, 472, 474, 7, 10, 2, 2, 473, 472, 3, 2, 2, 2, 473, 474, 3, 2, 2, 2, 474, 475, 3, 2, 2, 2, 475, 476, 7, 5, 2, 2, 476, 581, 3, 2, 2, 2, 477, 478, 7, 35, 2, 2, 478, 479, 7, 4, 2, 2, 479, 484, 5, 42, 22, 2, 480, 481, 7, 10, 2, 2, 481, 483, 5, 42, 22, 2, 482, 480, 3, 2, 2, 2, 483, 486, 3, 2, 2, 2, 484, 482, 3, 2, 2, 2, 484, 485, 3, 2, 2, 2, 485, 488, 3, 2, 2, 2, 486, 484, 3, 2, 2, 2, 487, 489, 7, 10, 2, 2, 488, 487, 3, 2, 2, 2, 488, 489, 3, 2, 2, 2, 489, 490, 3, 2, 2, 2, 490, 491, 7, 5, 2, 2, 491, 581, 3, 2, 2, 2, 492, 493, 7, 36, 2, 2, 493, 494, 7, 4, 2, 2, 494, 499, 5, 42, 22, 2, 495, 496, 7, 10, 2, 2, 496, 498, 5, 42, 22, 2, 497, 495, 3, 2, 2, 2, 498, 501, 3, 2, 2, 2, 499, 497, 3, 2, 2, 2, 499, 500, 3, 2, 2, 2, 500, 503, 3, 2, 2, 2, 501, 499, 3, 2, 2, 2, 502, 504, 7, 10, 2, 2, 503, 502, 3, 2, 2, 2, 503, 504, 3, 2, 2, 2, 504, 505, 3, 2, 2, 2, 505, 506, 7, 5, 2, 2, 506, 581, 3, 2, 2, 2, 507, 512, 5, 70, 36, 2, 508, 512, 7, 44, 2, 2, 509, 512, 7, 43, 2, 2, 510, 512, 7, 42, 2, 2, 511, 507, 3, 2, 2, 2, 511, 508, 3, 2, 2, 2, 511, 509, 3, 2, 2, 2, 511, 510, 3, 2, 2, 2, 512, 581, 3, 2, 2, 2, 513, 514, 7, 65, 2, 2, 514, 515, 5, 42, 22, 2, 515, 516, 7, 10, 2, 2, 516, 521, 5, 42, 22, 2, 517, 518, 7, 10, 2, 2, 518, 520, 5, 42, 22, 2, 519, 517, 3, 2, 2, 2, 520, 523, 3, 2, 2, 2, 521, 519, 3, 2, 2, 2, 521, 522, 3, 2, 2, 2, 522, 525, 3, 2, 2, 2, 523, 521, 3, 2, 2, 2, 524, 526, 7, 10, 2, 2, 525, 524, 3, 2, 2, 2, 525, 526, 3, 2, 2, 2, 526, 527, 3, 2, 2, 2, 527, 528, 7, 66, 2, 2, 528, 581, 3, 2, 2, 2, 529, 530, 7, 4, 2, 2, 530, 535, 5, 60, 31, 2, 531, 532, 7, 10, 2, 2, 532, 534, 5, 60, 31, 2, 533, 531, 3, 2, 2, 2, 534, 537, 3, 2, 2, 2, 535, 533, 3, 2, 2, 2, 535, 536, 3, 2, 2, 2, 536, 539, 3, 2, 2, 2, 537, 535, 3, 2, 2, 2, 538, 540, 7, 10, 2, 2, 539, 538, 3, 2, 2, 2, 539, 540, 3, 2, 2, 2, 540, 541, 3, 2, 2, 2, 541, 542, 7, 5, 2, 2, 542, 581, 3, 2, 2, 2, 543, 552, 7, 28, 2, 2, 544, 549, 5, 42, 22, 2, 545, 546, 7, 10, 2, 2, 546, 548, 5, 42, 22, 2, 547, 545, 3, 2, 2, 2, 548, 551, 3, 2, 2, 2, 549, 547, 3, 2, 2, 2, 549, 550, 3, 2, 2, 2, 550, 553, 3, 2, 2, 2, 551, 549, 3, 2, 2, 2, 552, 544, 3, 2, 2, 2, 552, 553, 3, 2, 2, 2, 553, 555, 3, 2, 2, 2, 554, 556, 7, 10, 2, 2, 555, 554, 3, 2, 2, 2, 555, 556, 3, 2, 2, 2, 556, 557, 3, 2, 2, 2, 557, 581, 7, 29, 2, 2, 558, 559, 7, 37, 2, 2, 559, 560, 7, 65, 2, 2, 560, 561, 5, 42, 22, 2, 561, 562, 7, 66, 2, 2, 562, 563, 5, 42, 22, 2, 563, 564, 7, 38, 2, 2, 564, 565, 5, 42, 22, 7, 565, 581, 3, 2, 2, 2, 566, 567, 5, 10, 6, 2, 567, 568, 5, 42, 22, 6, 568, 581, 3, 2, 2, 2, 569, 570, 5, 16, 9, 2, 570, 571, 5, 42, 22, 5, 571, 581, 3, 2, 2, 2, 572, 573, 7, 65, 2, 2, 573, 574, 5, 42, 22, 2, 574, 575, 7, 66, 2, 2, 575, 581, 3, 2, 2, 2, 576, 577, 7, 4, 2, 2, 577, 578, 5, 42, 22, 2, 578, 579, 7, 5, 2, 2, 579, 581, 3, 2, 2, 2, 580, 431, 3, 2, 2, 2, 580, 433, 3, 2, 2, 2, 580, 440, 3, 2, 2, 2, 580, 442, 3, 2, 2, 2, 580, 447, 3, 2, 2, 2, 580, 462, 3, 2, 2, 2, 580, 477, 3, 2, 2, 2, 580, 492, 3, 2, 2, 2, 580, 511, 3, 2, 2, 2, 580, 513, 3, 2, 2, 2, 580, 529, 3, 2, 2, 2, 580, 543, 3, 2, 2, 2, 580, 558, 3, 2, 2, 2, 580, 566, 3, 2, 2, 2, 580, 569, 3, 2, 2, 2, 580, 572, 3, 2, 2, 2, 580, 576, 3, 2, 2, 2, 581, 644, 3, 2, 2, 2, 582, 583, 12, 28, 2, 2, 583, 584, 7, 33, 2, 2, 584, 643, 5, 42, 22, 28, 585, 586, 12, 26, 2, 2, 586, 587, 9, 2, 2, 2, 587, 643, 5, 42, 22, 27, 588, 589, 12, 25, 2, 2, 589, 590, 9, 3, 2, 2, 590, 643, 5, 42, 22, 26, 591, 592, 12, 24, 2, 2, 592, 593, 9, 4, 2, 2, 593, 643, 5, 42, 22, 25, 594, 595, 12, 22, 2, 2, 595, 596, 7, 64, 2, 2, 596, 597, 5, 42, 22, 23, 597, 598, 8, 22, 1, 2, 598, 643, 3, 2, 2, 2, 599, 600, 12, 20, 2, 2, 600, 601, 7, 45, 2, 2, 601, 643, 5, 42, 22, 21, 602, 603, 12, 18, 2, 2, 603, 604, 7, 46, 2, 2, 604, 643, 5, 42, 22, 19, 605, 606, 12, 17, 2, 2, 606, 607, 7, 47, 2, 2, 607, 643, 5, 42, 22, 18, 608, 609, 12, 16, 2, 2, 609, 610, 7, 48, 2, 2, 610, 643, 5, 42, 22, 17, 611, 612, 12, 10, 2, 2, 612, 613, 7, 26, 2, 2, 613, 643, 5, 42, 22, 11, 614, 615, 12, 32, 2, 2, 615, 616, 7, 22, 2, 2, 616, 622, 5, 64, 33, 2, 617, 619, 7, 65, 2, 2, 618, 620, 5, 58, 30, 2, 619, 618, 3, 2, 2, 2, 619, 620, 3, 2, 2, 2, 620, 621, 3, 2, 2, 2, 621, 623, 7, 66, 2, 2, 622, 617, 3, 2, 2, 2, 622, 623, 3, 2, 2, 2, 623, 643, 3, 2, 2, 2, 624, 625, 12, 29, 2, 2, 625, 626, 7, 28, 2, 2, 626, 627, 5, 42, 22, 2, 627, 628, 7, 29, 2, 2, 628, 643, 3, 2, 2, 2, 629, 630, 12, 15, 2, 2, 630, 638, 7, 52, 2, 2, 631, 632, 7, 13, 2, 2, 632, 633, 7, 42, 2, 2, 633, 634, 7, 7, 2, 2, 634, 635, 5, 54, 28, 2, 635, 636, 7, 27, 2, 2, 636, 637, 5, 42, 22, 2, 637, 639, 3, 2, 2, 2, 638, 631, 3, 2, 2, 2, 639, 640, 3, 2, 2, 2, 640, 638, 3, 2, 2, 2, 640, 641, 3, 2, 2, 2, 641, 643, 3, 2, 2, 2, 642, 582, 3, 2, 2, 2, 642, 585, 3, 2, 2, 2, 642, 588, 3, 2, 2, 2, 642, 591, 3, 2, 2, 2, 642, 594, 3, 2, 2, 2, 642, 599, 3, 2, 2, 2, 642, 602, 3, 2, 2, 2, 642, 605, 3, 2, 2, 2, 642, 608, 3, 2, 2, 2, 642, 611, 3, 2, 2, 2, 642, 614, 3, 2, 2, 2, 642, 624, 3, 2, 2, 2, 642, 629, 3, 2, 2, 2, 643, 646, 3, 2, 2, 2, 644, 642, 3, 2, 2, 2, 644, 645, 3, 2, 2, 2, 645, 43, 3, 2, 2, 2, 646, 644, 3, 2, 2, 2, 647, 648, 5, 8, 5, 2, 648, 649, 7, 2, 2, 3, 649, 657, 3, 2, 2, 2, 650, 651, 5, 42, 22, 2, 651, 652, 7, 2, 2, 3, 652, 657, 3, 2, 2, 2, 653, 654, 7, 68, 2, 2, 654, 657, 7, 2, 2, 3, 655, 657, 7, 2, 2, 3, 656, 647, 3, 2, 2, 2, 656, 650, 3, 2, 2, 2, 656, 653, 3, 2, 2, 2, 656, 655, 3, 2, 2, 2, 657, 45, 3, 2, 2, 2, 658, 661, 5, 48, 25, 2, 659, 661, 5, 50, 26, 2, 660, 658, 3, 2, 2, 2, 660, 659, 3, 2, 2, 2, 661, 47, 3, 2, 2, 2, 662, 663, 5, 54, 28, 2, 663, 664, 7, 27, 2, 2, 664, 665, 5, 42, 22, 2, 665, 680, 3, 2, 2, 2, 666, 667, 7, 65, 2, 2, 667, 672, 5, 54, 28, 2, 668, 669, 7, 10, 2, 2, 669, 671, 5, 54, 28, 2, 670, 668, 3, 2, 2, 2, 671, 674, 3, 2, 2, 2, 672, 670, 3, 2, 2, 2, 672, 673, 3, 2, 2, 2, 673, 675, 3, 2, 2, 2, 674, 672, 3, 2, 2, 2, 675, 676, 7, 66, 2, 2, 676, 677, 7, 27, 2, 2, 677, 678, 5, 42, 22, 2, 678, 680, 3, 2, 2, 2, 679, 662, 3, 2, 2, 2, 679, 666, 3, 2, 2, 2, 680, 49, 3, 2, 2, 2, 681, 682, 7, 65, 2, 2, 682, 683, 7, 65, 2, 2, 683, 686, 5, 54, 28, 2, 684, 685, 7, 10, 2, 2, 685, 687, 5, 54, 28, 2, 686, 684, 3, 2, 2, 2, 687, 688, 3, 2, 2, 2, 688, 686, 3, 2, 2, 2, 688, 689, 3, 2, 2, 2, 689, 690, 3, 2, 2, 2, 690, 691, 7, 66, 2, 2, 691, 692, 7, 66, 2, 2, 692, 693, 7, 27, 2, 2, 693, 694, 5, 42, 22, 2, 694, 51, 3, 2, 2, 2, 695, 698, 7, 39, 2, 2, 696, 698, 5, 70, 36, 2, 697, 695, 3, 2, 2, 2, 697, 696, 3, 2, 2, 2, 698, 53, 3, 2, 2, 2, 699, 700, 5, 52, 27, 2, 700, 55, 3, 2, 2, 2, 701, 704, 7, 55, 2, 2, 702, 704, 5, 70, 36, 2, 703, 701, 3, 2, 2, 2, 703, 702, 3, 2, 2, 2, 704, 57, 3, 2, 2, 2, 705, 710, 5, 42, 22, 2, 706, 707, 7, 10, 2, 2, 707, 709, 5, 42, 22, 2, 708, 706, 3, 2, 2, 2, 709, 712, 3, 2, 2, 2, 710, 708, 3, 2, 2, 2, 710, 711, 3, 2, 2, 2, 711, 59, 3, 2, 2, 2, 712, 710, 3, 2, 2, 2, 713, 714, 5, 72, 37, 2, 714, 715, 7, 7, 2, 2, 715, 716, 5, 42, 22, 2, 716, 720, 3, 2, 2, 2, 717, 718, 7, 40, 2, 2, 718, 720, 5, 42, 22, 2, 719, 713, 3, 2, 2, 2, 719, 717, 3, 2, 2, 2, 720, 61, 3, 2, 2, 2, 721, 724, 5, 70, 36, 2, 722, 724, 9, 5, 2, 2, 723, 721, 3, 2, 2, 2, 723, 722, 3, 2, 2, 2, 724, 63, 3, 2, 2, 2, 725, 728, 5, 70, 36, 2, 726, 728, 9, 6, 2, 2, 727, 725, 3, 2, 2, 2, 727, 726, 3, 2, 2, 2, 728, 65, 3, 2, 2, 2, 729, 730, 9, 7, 2, 2, 730, 67, 3, 2, 2, 2, 731, 732, 9, 8, 2, 2, 732, 69, 3, 2, 2, 2, 733, 738, 7, 67, 2, 2, 734, 735, 7, 41, 2, 2, 735, 737, 7, 67, 2, 2, 736, 734, 3, 2, 2, 2, 737, 740, 3, 2, 2, 2, 738, 736, 3, 2, 2, 2, 738, 739, 3, 2, 2, 2, 739, 71, 3, 2, 2, 2, 740, 738, 3, 2, 2, 2, 741, 746, 7, 67, 2, 2, 742, 743, 5, 70, 36, 2, 743, 744, 8, 37, 1, 2, 744, 746, 3, 2, 2, 2, 745, 741, 3, 2, 2, 2, 745, 742, 3, 2, 2, 2, 746, 73, 3, 2, 2, 2, 83, 77, 84, 93, 101, 126, 136, 139, 144, 159, 166, 170, 173, 186, 193, 196, 203, 209, 214, 225, 233, 239, 243, 245, 256, 258, 273, 281, 296, 304, 306, 323, 326, 329, 352, 356, 367, 377, 385, 387, 397, 400, 411, 421, 423, 427, 436, 454, 458, 469, 473, 484, 488, 499, 503, 511, 521, 525, 535, 539, 549, 552, 555, 580, 619, 622, 640, 642, 644, 656, 660, 672, 679, 688, 697, 703, 710, 719, 723, 727, 738, 745] \ No newline at end of file +[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 3, 71, 774, 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, 3, 2, 6, 2, 82, 10, 2, 13, 2, 14, 2, 83, 3, 2, 3, 2, 3, 3, 7, 3, 89, 10, 3, 12, 3, 14, 3, 92, 11, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 3, 98, 10, 3, 12, 3, 14, 3, 101, 11, 3, 3, 3, 3, 3, 3, 4, 7, 4, 106, 10, 4, 12, 4, 14, 4, 109, 11, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 133, 10, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 141, 10, 6, 12, 6, 14, 6, 144, 11, 6, 5, 6, 146, 10, 6, 3, 6, 3, 6, 3, 6, 5, 6, 151, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 164, 10, 6, 12, 6, 14, 6, 167, 11, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 173, 10, 6, 3, 6, 3, 6, 5, 6, 177, 10, 6, 3, 6, 5, 6, 180, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 193, 10, 7, 3, 7, 3, 7, 3, 7, 7, 7, 198, 10, 7, 12, 7, 14, 7, 201, 11, 7, 5, 7, 203, 10, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 210, 10, 8, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 216, 10, 9, 3, 9, 3, 9, 3, 9, 5, 9, 221, 10, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 232, 10, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 240, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 246, 10, 11, 3, 11, 3, 11, 5, 11, 250, 10, 11, 5, 11, 252, 10, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 263, 10, 12, 5, 12, 265, 10, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 7, 13, 278, 10, 13, 12, 13, 14, 13, 281, 11, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 288, 10, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 7, 13, 301, 10, 13, 12, 13, 14, 13, 304, 11, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 311, 10, 13, 5, 13, 313, 10, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 7, 18, 328, 10, 18, 12, 18, 14, 18, 331, 11, 18, 5, 18, 333, 10, 18, 3, 18, 5, 18, 336, 10, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 7, 18, 357, 10, 18, 12, 18, 14, 18, 360, 11, 18, 3, 18, 5, 18, 363, 10, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 6, 18, 372, 10, 18, 13, 18, 14, 18, 373, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 5, 18, 384, 10, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 7, 18, 392, 10, 18, 12, 18, 14, 18, 395, 11, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 5, 19, 404, 10, 19, 3, 19, 5, 19, 407, 10, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 7, 20, 416, 10, 20, 12, 20, 14, 20, 419, 11, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 5, 20, 428, 10, 20, 5, 20, 430, 10, 20, 3, 20, 3, 20, 5, 20, 434, 10, 20, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 5, 22, 443, 10, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 7, 22, 459, 10, 22, 12, 22, 14, 22, 462, 11, 22, 3, 22, 5, 22, 465, 10, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 7, 22, 474, 10, 22, 12, 22, 14, 22, 477, 11, 22, 3, 22, 5, 22, 480, 10, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 7, 22, 490, 10, 22, 12, 22, 14, 22, 493, 11, 22, 3, 22, 5, 22, 496, 10, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 7, 22, 505, 10, 22, 12, 22, 14, 22, 508, 11, 22, 3, 22, 5, 22, 511, 10, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 5, 22, 519, 10, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 7, 22, 527, 10, 22, 12, 22, 14, 22, 530, 11, 22, 3, 22, 5, 22, 533, 10, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 7, 22, 541, 10, 22, 12, 22, 14, 22, 544, 11, 22, 3, 22, 5, 22, 547, 10, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 7, 22, 555, 10, 22, 12, 22, 14, 22, 558, 11, 22, 5, 22, 560, 10, 22, 3, 22, 5, 22, 563, 10, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 5, 22, 588, 10, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 5, 22, 627, 10, 22, 3, 22, 5, 22, 630, 10, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 7, 22, 637, 10, 22, 12, 22, 14, 22, 640, 11, 22, 3, 23, 3, 23, 3, 23, 3, 23, 5, 23, 646, 10, 23, 3, 23, 3, 23, 3, 23, 7, 23, 651, 10, 23, 12, 23, 14, 23, 654, 11, 23, 3, 23, 3, 23, 3, 24, 3, 24, 5, 24, 660, 10, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 669, 10, 25, 3, 25, 5, 25, 672, 10, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 5, 26, 683, 10, 26, 3, 27, 3, 27, 5, 27, 687, 10, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 7, 28, 697, 10, 28, 12, 28, 14, 28, 700, 11, 28, 3, 28, 3, 28, 3, 28, 3, 28, 5, 28, 706, 10, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 6, 29, 713, 10, 29, 13, 29, 14, 29, 714, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 5, 30, 724, 10, 30, 3, 31, 3, 31, 3, 32, 3, 32, 5, 32, 730, 10, 32, 3, 33, 3, 33, 3, 33, 7, 33, 735, 10, 33, 12, 33, 14, 33, 738, 11, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 746, 10, 34, 3, 35, 3, 35, 5, 35, 750, 10, 35, 3, 36, 3, 36, 5, 36, 754, 10, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 7, 39, 763, 10, 39, 12, 39, 14, 39, 766, 11, 39, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, 772, 10, 40, 3, 40, 2, 2, 4, 34, 42, 41, 2, 2, 4, 2, 6, 2, 8, 2, 10, 2, 12, 2, 14, 2, 16, 2, 18, 2, 20, 2, 22, 2, 24, 2, 26, 2, 28, 2, 30, 2, 32, 2, 34, 2, 36, 2, 38, 2, 40, 2, 42, 2, 44, 2, 46, 2, 48, 2, 50, 2, 52, 2, 54, 2, 56, 2, 58, 2, 60, 2, 62, 2, 64, 2, 66, 2, 68, 2, 70, 2, 72, 2, 74, 2, 76, 2, 78, 2, 2, 9, 3, 2, 55, 57, 3, 2, 53, 54, 3, 2, 58, 63, 3, 2, 45, 51, 3, 2, 45, 48, 5, 2, 33, 33, 45, 48, 53, 63, 3, 2, 42, 44, 2, 873, 2, 81, 3, 2, 2, 2, 4, 90, 3, 2, 2, 2, 6, 107, 3, 2, 2, 2, 8, 132, 3, 2, 2, 2, 10, 134, 3, 2, 2, 2, 12, 202, 3, 2, 2, 2, 14, 204, 3, 2, 2, 2, 16, 211, 3, 2, 2, 2, 18, 231, 3, 2, 2, 2, 20, 251, 3, 2, 2, 2, 22, 264, 3, 2, 2, 2, 24, 312, 3, 2, 2, 2, 26, 314, 3, 2, 2, 2, 28, 316, 3, 2, 2, 2, 30, 318, 3, 2, 2, 2, 32, 320, 3, 2, 2, 2, 34, 383, 3, 2, 2, 2, 36, 396, 3, 2, 2, 2, 38, 433, 3, 2, 2, 2, 40, 435, 3, 2, 2, 2, 42, 587, 3, 2, 2, 2, 44, 641, 3, 2, 2, 2, 46, 659, 3, 2, 2, 2, 48, 664, 3, 2, 2, 2, 50, 682, 3, 2, 2, 2, 52, 686, 3, 2, 2, 2, 54, 705, 3, 2, 2, 2, 56, 707, 3, 2, 2, 2, 58, 723, 3, 2, 2, 2, 60, 725, 3, 2, 2, 2, 62, 729, 3, 2, 2, 2, 64, 731, 3, 2, 2, 2, 66, 745, 3, 2, 2, 2, 68, 749, 3, 2, 2, 2, 70, 753, 3, 2, 2, 2, 72, 755, 3, 2, 2, 2, 74, 757, 3, 2, 2, 2, 76, 759, 3, 2, 2, 2, 78, 771, 3, 2, 2, 2, 80, 82, 5, 4, 3, 2, 81, 80, 3, 2, 2, 2, 82, 83, 3, 2, 2, 2, 83, 81, 3, 2, 2, 2, 83, 84, 3, 2, 2, 2, 84, 85, 3, 2, 2, 2, 85, 86, 7, 2, 2, 3, 86, 3, 3, 2, 2, 2, 87, 89, 7, 68, 2, 2, 88, 87, 3, 2, 2, 2, 89, 92, 3, 2, 2, 2, 90, 88, 3, 2, 2, 2, 90, 91, 3, 2, 2, 2, 91, 93, 3, 2, 2, 2, 92, 90, 3, 2, 2, 2, 93, 94, 7, 3, 2, 2, 94, 95, 5, 76, 39, 2, 95, 99, 7, 4, 2, 2, 96, 98, 5, 6, 4, 2, 97, 96, 3, 2, 2, 2, 98, 101, 3, 2, 2, 2, 99, 97, 3, 2, 2, 2, 99, 100, 3, 2, 2, 2, 100, 102, 3, 2, 2, 2, 101, 99, 3, 2, 2, 2, 102, 103, 7, 5, 2, 2, 103, 5, 3, 2, 2, 2, 104, 106, 7, 68, 2, 2, 105, 104, 3, 2, 2, 2, 106, 109, 3, 2, 2, 2, 107, 105, 3, 2, 2, 2, 107, 108, 3, 2, 2, 2, 108, 110, 3, 2, 2, 2, 109, 107, 3, 2, 2, 2, 110, 111, 5, 8, 5, 2, 111, 7, 3, 2, 2, 2, 112, 113, 7, 6, 2, 2, 113, 114, 5, 76, 39, 2, 114, 115, 7, 7, 2, 2, 115, 116, 5, 34, 18, 2, 116, 133, 3, 2, 2, 2, 117, 118, 7, 8, 2, 2, 118, 119, 5, 76, 39, 2, 119, 120, 7, 7, 2, 2, 120, 121, 5, 34, 18, 2, 121, 133, 3, 2, 2, 2, 122, 123, 7, 9, 2, 2, 123, 124, 5, 58, 30, 2, 124, 125, 7, 64, 2, 2, 125, 126, 5, 42, 22, 2, 126, 133, 3, 2, 2, 2, 127, 133, 5, 24, 13, 2, 128, 133, 5, 10, 6, 2, 129, 133, 5, 12, 7, 2, 130, 133, 5, 20, 11, 2, 131, 133, 5, 22, 12, 2, 132, 112, 3, 2, 2, 2, 132, 117, 3, 2, 2, 2, 132, 122, 3, 2, 2, 2, 132, 127, 3, 2, 2, 2, 132, 128, 3, 2, 2, 2, 132, 129, 3, 2, 2, 2, 132, 130, 3, 2, 2, 2, 132, 131, 3, 2, 2, 2, 133, 9, 3, 2, 2, 2, 134, 135, 5, 18, 10, 2, 135, 172, 5, 68, 35, 2, 136, 145, 7, 65, 2, 2, 137, 142, 5, 60, 31, 2, 138, 139, 7, 10, 2, 2, 139, 141, 5, 60, 31, 2, 140, 138, 3, 2, 2, 2, 141, 144, 3, 2, 2, 2, 142, 140, 3, 2, 2, 2, 142, 143, 3, 2, 2, 2, 143, 146, 3, 2, 2, 2, 144, 142, 3, 2, 2, 2, 145, 137, 3, 2, 2, 2, 145, 146, 3, 2, 2, 2, 146, 147, 3, 2, 2, 2, 147, 150, 7, 66, 2, 2, 148, 149, 7, 7, 2, 2, 149, 151, 5, 34, 18, 2, 150, 148, 3, 2, 2, 2, 150, 151, 3, 2, 2, 2, 151, 173, 3, 2, 2, 2, 152, 153, 7, 7, 2, 2, 153, 173, 5, 34, 18, 2, 154, 155, 7, 65, 2, 2, 155, 156, 5, 60, 31, 2, 156, 157, 7, 7, 2, 2, 157, 165, 5, 34, 18, 2, 158, 159, 7, 10, 2, 2, 159, 160, 5, 60, 31, 2, 160, 161, 7, 7, 2, 2, 161, 162, 5, 34, 18, 2, 162, 164, 3, 2, 2, 2, 163, 158, 3, 2, 2, 2, 164, 167, 3, 2, 2, 2, 165, 163, 3, 2, 2, 2, 165, 166, 3, 2, 2, 2, 166, 168, 3, 2, 2, 2, 167, 165, 3, 2, 2, 2, 168, 169, 7, 66, 2, 2, 169, 170, 7, 7, 2, 2, 170, 171, 5, 34, 18, 2, 171, 173, 3, 2, 2, 2, 172, 136, 3, 2, 2, 2, 172, 152, 3, 2, 2, 2, 172, 154, 3, 2, 2, 2, 172, 173, 3, 2, 2, 2, 173, 176, 3, 2, 2, 2, 174, 175, 7, 64, 2, 2, 175, 177, 5, 42, 22, 2, 176, 174, 3, 2, 2, 2, 176, 177, 3, 2, 2, 2, 177, 179, 3, 2, 2, 2, 178, 180, 7, 11, 2, 2, 179, 178, 3, 2, 2, 2, 179, 180, 3, 2, 2, 2, 180, 11, 3, 2, 2, 2, 181, 182, 7, 12, 2, 2, 182, 203, 5, 76, 39, 2, 183, 184, 7, 12, 2, 2, 184, 185, 5, 76, 39, 2, 185, 186, 7, 64, 2, 2, 186, 187, 5, 34, 18, 2, 187, 203, 3, 2, 2, 2, 188, 189, 7, 12, 2, 2, 189, 190, 5, 76, 39, 2, 190, 192, 7, 64, 2, 2, 191, 193, 7, 13, 2, 2, 192, 191, 3, 2, 2, 2, 192, 193, 3, 2, 2, 2, 193, 194, 3, 2, 2, 2, 194, 199, 5, 14, 8, 2, 195, 196, 7, 13, 2, 2, 196, 198, 5, 14, 8, 2, 197, 195, 3, 2, 2, 2, 198, 201, 3, 2, 2, 2, 199, 197, 3, 2, 2, 2, 199, 200, 3, 2, 2, 2, 200, 203, 3, 2, 2, 2, 201, 199, 3, 2, 2, 2, 202, 181, 3, 2, 2, 2, 202, 183, 3, 2, 2, 2, 202, 188, 3, 2, 2, 2, 203, 13, 3, 2, 2, 2, 204, 209, 5, 78, 40, 2, 205, 206, 7, 65, 2, 2, 206, 207, 5, 34, 18, 2, 207, 208, 7, 66, 2, 2, 208, 210, 3, 2, 2, 2, 209, 205, 3, 2, 2, 2, 209, 210, 3, 2, 2, 2, 210, 15, 3, 2, 2, 2, 211, 212, 7, 14, 2, 2, 212, 215, 5, 76, 39, 2, 213, 214, 7, 7, 2, 2, 214, 216, 5, 34, 18, 2, 215, 213, 3, 2, 2, 2, 215, 216, 3, 2, 2, 2, 216, 217, 3, 2, 2, 2, 217, 218, 7, 64, 2, 2, 218, 220, 5, 42, 22, 2, 219, 221, 7, 11, 2, 2, 220, 219, 3, 2, 2, 2, 220, 221, 3, 2, 2, 2, 221, 17, 3, 2, 2, 2, 222, 232, 7, 15, 2, 2, 223, 232, 7, 16, 2, 2, 224, 225, 7, 17, 2, 2, 225, 232, 7, 15, 2, 2, 226, 227, 7, 17, 2, 2, 227, 232, 7, 16, 2, 2, 228, 232, 7, 18, 2, 2, 229, 232, 7, 19, 2, 2, 230, 232, 7, 20, 2, 2, 231, 222, 3, 2, 2, 2, 231, 223, 3, 2, 2, 2, 231, 224, 3, 2, 2, 2, 231, 226, 3, 2, 2, 2, 231, 228, 3, 2, 2, 2, 231, 229, 3, 2, 2, 2, 231, 230, 3, 2, 2, 2, 232, 19, 3, 2, 2, 2, 233, 234, 7, 21, 2, 2, 234, 235, 5, 28, 15, 2, 235, 236, 7, 22, 2, 2, 236, 239, 5, 62, 32, 2, 237, 238, 7, 23, 2, 2, 238, 240, 5, 32, 17, 2, 239, 237, 3, 2, 2, 2, 239, 240, 3, 2, 2, 2, 240, 252, 3, 2, 2, 2, 241, 242, 7, 21, 2, 2, 242, 245, 5, 28, 15, 2, 243, 244, 7, 24, 2, 2, 244, 246, 5, 28, 15, 2, 245, 243, 3, 2, 2, 2, 245, 246, 3, 2, 2, 2, 246, 249, 3, 2, 2, 2, 247, 248, 7, 23, 2, 2, 248, 250, 5, 32, 17, 2, 249, 247, 3, 2, 2, 2, 249, 250, 3, 2, 2, 2, 250, 252, 3, 2, 2, 2, 251, 233, 3, 2, 2, 2, 251, 241, 3, 2, 2, 2, 252, 21, 3, 2, 2, 2, 253, 254, 7, 25, 2, 2, 254, 255, 5, 28, 15, 2, 255, 256, 7, 22, 2, 2, 256, 257, 5, 62, 32, 2, 257, 265, 3, 2, 2, 2, 258, 259, 7, 25, 2, 2, 259, 262, 5, 28, 15, 2, 260, 261, 7, 24, 2, 2, 261, 263, 5, 28, 15, 2, 262, 260, 3, 2, 2, 2, 262, 263, 3, 2, 2, 2, 263, 265, 3, 2, 2, 2, 264, 253, 3, 2, 2, 2, 264, 258, 3, 2, 2, 2, 265, 23, 3, 2, 2, 2, 266, 267, 7, 21, 2, 2, 267, 268, 5, 26, 14, 2, 268, 269, 7, 65, 2, 2, 269, 270, 5, 28, 15, 2, 270, 271, 7, 64, 2, 2, 271, 279, 5, 42, 22, 2, 272, 273, 7, 10, 2, 2, 273, 274, 5, 28, 15, 2, 274, 275, 7, 64, 2, 2, 275, 276, 5, 42, 22, 2, 276, 278, 3, 2, 2, 2, 277, 272, 3, 2, 2, 2, 278, 281, 3, 2, 2, 2, 279, 277, 3, 2, 2, 2, 279, 280, 3, 2, 2, 2, 280, 282, 3, 2, 2, 2, 281, 279, 3, 2, 2, 2, 282, 283, 7, 66, 2, 2, 283, 284, 7, 22, 2, 2, 284, 287, 7, 55, 2, 2, 285, 286, 7, 23, 2, 2, 286, 288, 5, 32, 17, 2, 287, 285, 3, 2, 2, 2, 287, 288, 3, 2, 2, 2, 288, 313, 3, 2, 2, 2, 289, 290, 7, 21, 2, 2, 290, 291, 5, 26, 14, 2, 291, 292, 7, 65, 2, 2, 292, 293, 5, 28, 15, 2, 293, 294, 7, 64, 2, 2, 294, 302, 5, 42, 22, 2, 295, 296, 7, 10, 2, 2, 296, 297, 5, 28, 15, 2, 297, 298, 7, 64, 2, 2, 298, 299, 5, 42, 22, 2, 299, 301, 3, 2, 2, 2, 300, 295, 3, 2, 2, 2, 301, 304, 3, 2, 2, 2, 302, 300, 3, 2, 2, 2, 302, 303, 3, 2, 2, 2, 303, 305, 3, 2, 2, 2, 304, 302, 3, 2, 2, 2, 305, 306, 7, 66, 2, 2, 306, 307, 7, 24, 2, 2, 307, 310, 5, 30, 16, 2, 308, 309, 7, 23, 2, 2, 309, 311, 5, 32, 17, 2, 310, 308, 3, 2, 2, 2, 310, 311, 3, 2, 2, 2, 311, 313, 3, 2, 2, 2, 312, 266, 3, 2, 2, 2, 312, 289, 3, 2, 2, 2, 313, 25, 3, 2, 2, 2, 314, 315, 5, 76, 39, 2, 315, 27, 3, 2, 2, 2, 316, 317, 5, 76, 39, 2, 317, 29, 3, 2, 2, 2, 318, 319, 5, 76, 39, 2, 319, 31, 3, 2, 2, 2, 320, 321, 7, 42, 2, 2, 321, 33, 3, 2, 2, 2, 322, 323, 8, 18, 1, 2, 323, 332, 7, 65, 2, 2, 324, 329, 5, 34, 18, 2, 325, 326, 7, 10, 2, 2, 326, 328, 5, 34, 18, 2, 327, 325, 3, 2, 2, 2, 328, 331, 3, 2, 2, 2, 329, 327, 3, 2, 2, 2, 329, 330, 3, 2, 2, 2, 330, 333, 3, 2, 2, 2, 331, 329, 3, 2, 2, 2, 332, 324, 3, 2, 2, 2, 332, 333, 3, 2, 2, 2, 333, 335, 3, 2, 2, 2, 334, 336, 7, 10, 2, 2, 335, 334, 3, 2, 2, 2, 335, 336, 3, 2, 2, 2, 336, 337, 3, 2, 2, 2, 337, 338, 7, 66, 2, 2, 338, 339, 7, 27, 2, 2, 339, 384, 5, 34, 18, 13, 340, 341, 7, 49, 2, 2, 341, 342, 7, 28, 2, 2, 342, 343, 5, 34, 18, 2, 343, 344, 7, 29, 2, 2, 344, 384, 3, 2, 2, 2, 345, 346, 7, 50, 2, 2, 346, 347, 7, 28, 2, 2, 347, 348, 5, 34, 18, 2, 348, 349, 7, 29, 2, 2, 349, 384, 3, 2, 2, 2, 350, 351, 7, 65, 2, 2, 351, 352, 5, 34, 18, 2, 352, 353, 7, 10, 2, 2, 353, 358, 5, 34, 18, 2, 354, 355, 7, 10, 2, 2, 355, 357, 5, 34, 18, 2, 356, 354, 3, 2, 2, 2, 357, 360, 3, 2, 2, 2, 358, 356, 3, 2, 2, 2, 358, 359, 3, 2, 2, 2, 359, 362, 3, 2, 2, 2, 360, 358, 3, 2, 2, 2, 361, 363, 7, 10, 2, 2, 362, 361, 3, 2, 2, 2, 362, 363, 3, 2, 2, 2, 363, 364, 3, 2, 2, 2, 364, 365, 7, 66, 2, 2, 365, 384, 3, 2, 2, 2, 366, 367, 7, 4, 2, 2, 367, 368, 5, 38, 20, 2, 368, 369, 7, 5, 2, 2, 369, 384, 3, 2, 2, 2, 370, 372, 5, 36, 19, 2, 371, 370, 3, 2, 2, 2, 372, 373, 3, 2, 2, 2, 373, 371, 3, 2, 2, 2, 373, 374, 3, 2, 2, 2, 374, 384, 3, 2, 2, 2, 375, 384, 7, 30, 2, 2, 376, 384, 7, 31, 2, 2, 377, 384, 7, 32, 2, 2, 378, 384, 5, 76, 39, 2, 379, 380, 7, 65, 2, 2, 380, 381, 5, 34, 18, 2, 381, 382, 7, 66, 2, 2, 382, 384, 3, 2, 2, 2, 383, 322, 3, 2, 2, 2, 383, 340, 3, 2, 2, 2, 383, 345, 3, 2, 2, 2, 383, 350, 3, 2, 2, 2, 383, 366, 3, 2, 2, 2, 383, 371, 3, 2, 2, 2, 383, 375, 3, 2, 2, 2, 383, 376, 3, 2, 2, 2, 383, 377, 3, 2, 2, 2, 383, 378, 3, 2, 2, 2, 383, 379, 3, 2, 2, 2, 384, 393, 3, 2, 2, 2, 385, 386, 12, 15, 2, 2, 386, 387, 7, 26, 2, 2, 387, 392, 5, 34, 18, 15, 388, 389, 12, 14, 2, 2, 389, 390, 7, 27, 2, 2, 390, 392, 5, 34, 18, 14, 391, 385, 3, 2, 2, 2, 391, 388, 3, 2, 2, 2, 392, 395, 3, 2, 2, 2, 393, 391, 3, 2, 2, 2, 393, 394, 3, 2, 2, 2, 394, 35, 3, 2, 2, 2, 395, 393, 3, 2, 2, 2, 396, 397, 7, 13, 2, 2, 397, 398, 7, 4, 2, 2, 398, 399, 5, 76, 39, 2, 399, 400, 7, 7, 2, 2, 400, 403, 7, 42, 2, 2, 401, 402, 7, 10, 2, 2, 402, 404, 5, 38, 20, 2, 403, 401, 3, 2, 2, 2, 403, 404, 3, 2, 2, 2, 404, 406, 3, 2, 2, 2, 405, 407, 7, 10, 2, 2, 406, 405, 3, 2, 2, 2, 406, 407, 3, 2, 2, 2, 407, 408, 3, 2, 2, 2, 408, 409, 7, 5, 2, 2, 409, 37, 3, 2, 2, 2, 410, 411, 5, 40, 21, 2, 411, 412, 7, 7, 2, 2, 412, 413, 5, 34, 18, 2, 413, 414, 7, 10, 2, 2, 414, 416, 3, 2, 2, 2, 415, 410, 3, 2, 2, 2, 416, 419, 3, 2, 2, 2, 417, 415, 3, 2, 2, 2, 417, 418, 3, 2, 2, 2, 418, 429, 3, 2, 2, 2, 419, 417, 3, 2, 2, 2, 420, 421, 5, 40, 21, 2, 421, 422, 7, 7, 2, 2, 422, 423, 5, 34, 18, 2, 423, 427, 3, 2, 2, 2, 424, 428, 7, 10, 2, 2, 425, 426, 7, 13, 2, 2, 426, 428, 7, 67, 2, 2, 427, 424, 3, 2, 2, 2, 427, 425, 3, 2, 2, 2, 427, 428, 3, 2, 2, 2, 428, 430, 3, 2, 2, 2, 429, 420, 3, 2, 2, 2, 429, 430, 3, 2, 2, 2, 430, 434, 3, 2, 2, 2, 431, 432, 7, 13, 2, 2, 432, 434, 7, 67, 2, 2, 433, 417, 3, 2, 2, 2, 433, 431, 3, 2, 2, 2, 434, 39, 3, 2, 2, 2, 435, 436, 5, 78, 40, 2, 436, 41, 3, 2, 2, 2, 437, 438, 8, 22, 1, 2, 438, 588, 5, 52, 27, 2, 439, 440, 5, 68, 35, 2, 440, 442, 7, 65, 2, 2, 441, 443, 5, 64, 33, 2, 442, 441, 3, 2, 2, 2, 442, 443, 3, 2, 2, 2, 443, 444, 3, 2, 2, 2, 444, 445, 7, 66, 2, 2, 445, 588, 3, 2, 2, 2, 446, 447, 7, 54, 2, 2, 447, 588, 5, 42, 22, 27, 448, 449, 5, 76, 39, 2, 449, 450, 7, 34, 2, 2, 450, 451, 7, 64, 2, 2, 451, 452, 5, 42, 22, 23, 452, 588, 3, 2, 2, 2, 453, 454, 7, 45, 2, 2, 454, 455, 7, 4, 2, 2, 455, 460, 5, 42, 22, 2, 456, 457, 7, 10, 2, 2, 457, 459, 5, 42, 22, 2, 458, 456, 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, 465, 7, 10, 2, 2, 464, 463, 3, 2, 2, 2, 464, 465, 3, 2, 2, 2, 465, 466, 3, 2, 2, 2, 466, 467, 7, 5, 2, 2, 467, 588, 3, 2, 2, 2, 468, 469, 7, 46, 2, 2, 469, 470, 7, 4, 2, 2, 470, 475, 5, 42, 22, 2, 471, 472, 7, 10, 2, 2, 472, 474, 5, 42, 22, 2, 473, 471, 3, 2, 2, 2, 474, 477, 3, 2, 2, 2, 475, 473, 3, 2, 2, 2, 475, 476, 3, 2, 2, 2, 476, 479, 3, 2, 2, 2, 477, 475, 3, 2, 2, 2, 478, 480, 7, 10, 2, 2, 479, 478, 3, 2, 2, 2, 479, 480, 3, 2, 2, 2, 480, 481, 3, 2, 2, 2, 481, 482, 7, 5, 2, 2, 482, 588, 3, 2, 2, 2, 483, 588, 5, 44, 23, 2, 484, 485, 7, 35, 2, 2, 485, 486, 7, 4, 2, 2, 486, 491, 5, 42, 22, 2, 487, 488, 7, 10, 2, 2, 488, 490, 5, 42, 22, 2, 489, 487, 3, 2, 2, 2, 490, 493, 3, 2, 2, 2, 491, 489, 3, 2, 2, 2, 491, 492, 3, 2, 2, 2, 492, 495, 3, 2, 2, 2, 493, 491, 3, 2, 2, 2, 494, 496, 7, 10, 2, 2, 495, 494, 3, 2, 2, 2, 495, 496, 3, 2, 2, 2, 496, 497, 3, 2, 2, 2, 497, 498, 7, 5, 2, 2, 498, 588, 3, 2, 2, 2, 499, 500, 7, 36, 2, 2, 500, 501, 7, 4, 2, 2, 501, 506, 5, 42, 22, 2, 502, 503, 7, 10, 2, 2, 503, 505, 5, 42, 22, 2, 504, 502, 3, 2, 2, 2, 505, 508, 3, 2, 2, 2, 506, 504, 3, 2, 2, 2, 506, 507, 3, 2, 2, 2, 507, 510, 3, 2, 2, 2, 508, 506, 3, 2, 2, 2, 509, 511, 7, 10, 2, 2, 510, 509, 3, 2, 2, 2, 510, 511, 3, 2, 2, 2, 511, 512, 3, 2, 2, 2, 512, 513, 7, 5, 2, 2, 513, 588, 3, 2, 2, 2, 514, 519, 5, 76, 39, 2, 515, 519, 7, 44, 2, 2, 516, 519, 7, 43, 2, 2, 517, 519, 7, 42, 2, 2, 518, 514, 3, 2, 2, 2, 518, 515, 3, 2, 2, 2, 518, 516, 3, 2, 2, 2, 518, 517, 3, 2, 2, 2, 519, 588, 3, 2, 2, 2, 520, 521, 7, 65, 2, 2, 521, 522, 5, 42, 22, 2, 522, 523, 7, 10, 2, 2, 523, 528, 5, 42, 22, 2, 524, 525, 7, 10, 2, 2, 525, 527, 5, 42, 22, 2, 526, 524, 3, 2, 2, 2, 527, 530, 3, 2, 2, 2, 528, 526, 3, 2, 2, 2, 528, 529, 3, 2, 2, 2, 529, 532, 3, 2, 2, 2, 530, 528, 3, 2, 2, 2, 531, 533, 7, 10, 2, 2, 532, 531, 3, 2, 2, 2, 532, 533, 3, 2, 2, 2, 533, 534, 3, 2, 2, 2, 534, 535, 7, 66, 2, 2, 535, 588, 3, 2, 2, 2, 536, 537, 7, 4, 2, 2, 537, 542, 5, 66, 34, 2, 538, 539, 7, 10, 2, 2, 539, 541, 5, 66, 34, 2, 540, 538, 3, 2, 2, 2, 541, 544, 3, 2, 2, 2, 542, 540, 3, 2, 2, 2, 542, 543, 3, 2, 2, 2, 543, 546, 3, 2, 2, 2, 544, 542, 3, 2, 2, 2, 545, 547, 7, 10, 2, 2, 546, 545, 3, 2, 2, 2, 546, 547, 3, 2, 2, 2, 547, 548, 3, 2, 2, 2, 548, 549, 7, 5, 2, 2, 549, 588, 3, 2, 2, 2, 550, 559, 7, 28, 2, 2, 551, 556, 5, 42, 22, 2, 552, 553, 7, 10, 2, 2, 553, 555, 5, 42, 22, 2, 554, 552, 3, 2, 2, 2, 555, 558, 3, 2, 2, 2, 556, 554, 3, 2, 2, 2, 556, 557, 3, 2, 2, 2, 557, 560, 3, 2, 2, 2, 558, 556, 3, 2, 2, 2, 559, 551, 3, 2, 2, 2, 559, 560, 3, 2, 2, 2, 560, 562, 3, 2, 2, 2, 561, 563, 7, 10, 2, 2, 562, 561, 3, 2, 2, 2, 562, 563, 3, 2, 2, 2, 563, 564, 3, 2, 2, 2, 564, 588, 7, 29, 2, 2, 565, 566, 7, 37, 2, 2, 566, 567, 7, 65, 2, 2, 567, 568, 5, 42, 22, 2, 568, 569, 7, 66, 2, 2, 569, 570, 5, 42, 22, 2, 570, 571, 7, 38, 2, 2, 571, 572, 5, 42, 22, 7, 572, 588, 3, 2, 2, 2, 573, 574, 5, 10, 6, 2, 574, 575, 5, 42, 22, 6, 575, 588, 3, 2, 2, 2, 576, 577, 5, 16, 9, 2, 577, 578, 5, 42, 22, 5, 578, 588, 3, 2, 2, 2, 579, 580, 7, 65, 2, 2, 580, 581, 5, 42, 22, 2, 581, 582, 7, 66, 2, 2, 582, 588, 3, 2, 2, 2, 583, 584, 7, 4, 2, 2, 584, 585, 5, 42, 22, 2, 585, 586, 7, 5, 2, 2, 586, 588, 3, 2, 2, 2, 587, 437, 3, 2, 2, 2, 587, 439, 3, 2, 2, 2, 587, 446, 3, 2, 2, 2, 587, 448, 3, 2, 2, 2, 587, 453, 3, 2, 2, 2, 587, 468, 3, 2, 2, 2, 587, 483, 3, 2, 2, 2, 587, 484, 3, 2, 2, 2, 587, 499, 3, 2, 2, 2, 587, 518, 3, 2, 2, 2, 587, 520, 3, 2, 2, 2, 587, 536, 3, 2, 2, 2, 587, 550, 3, 2, 2, 2, 587, 565, 3, 2, 2, 2, 587, 573, 3, 2, 2, 2, 587, 576, 3, 2, 2, 2, 587, 579, 3, 2, 2, 2, 587, 583, 3, 2, 2, 2, 588, 638, 3, 2, 2, 2, 589, 590, 12, 28, 2, 2, 590, 591, 7, 33, 2, 2, 591, 637, 5, 42, 22, 28, 592, 593, 12, 26, 2, 2, 593, 594, 9, 2, 2, 2, 594, 637, 5, 42, 22, 27, 595, 596, 12, 25, 2, 2, 596, 597, 9, 3, 2, 2, 597, 637, 5, 42, 22, 26, 598, 599, 12, 24, 2, 2, 599, 600, 9, 4, 2, 2, 600, 637, 5, 42, 22, 25, 601, 602, 12, 22, 2, 2, 602, 603, 7, 64, 2, 2, 603, 604, 5, 42, 22, 23, 604, 605, 8, 22, 1, 2, 605, 637, 3, 2, 2, 2, 606, 607, 12, 20, 2, 2, 607, 608, 7, 45, 2, 2, 608, 637, 5, 42, 22, 21, 609, 610, 12, 18, 2, 2, 610, 611, 7, 46, 2, 2, 611, 637, 5, 42, 22, 19, 612, 613, 12, 17, 2, 2, 613, 614, 7, 47, 2, 2, 614, 637, 5, 42, 22, 18, 615, 616, 12, 16, 2, 2, 616, 617, 7, 48, 2, 2, 617, 637, 5, 42, 22, 17, 618, 619, 12, 10, 2, 2, 619, 620, 7, 26, 2, 2, 620, 637, 5, 42, 22, 11, 621, 622, 12, 32, 2, 2, 622, 623, 7, 22, 2, 2, 623, 629, 5, 70, 36, 2, 624, 626, 7, 65, 2, 2, 625, 627, 5, 64, 33, 2, 626, 625, 3, 2, 2, 2, 626, 627, 3, 2, 2, 2, 627, 628, 3, 2, 2, 2, 628, 630, 7, 66, 2, 2, 629, 624, 3, 2, 2, 2, 629, 630, 3, 2, 2, 2, 630, 637, 3, 2, 2, 2, 631, 632, 12, 29, 2, 2, 632, 633, 7, 28, 2, 2, 633, 634, 5, 42, 22, 2, 634, 635, 7, 29, 2, 2, 635, 637, 3, 2, 2, 2, 636, 589, 3, 2, 2, 2, 636, 592, 3, 2, 2, 2, 636, 595, 3, 2, 2, 2, 636, 598, 3, 2, 2, 2, 636, 601, 3, 2, 2, 2, 636, 606, 3, 2, 2, 2, 636, 609, 3, 2, 2, 2, 636, 612, 3, 2, 2, 2, 636, 615, 3, 2, 2, 2, 636, 618, 3, 2, 2, 2, 636, 621, 3, 2, 2, 2, 636, 631, 3, 2, 2, 2, 637, 640, 3, 2, 2, 2, 638, 636, 3, 2, 2, 2, 638, 639, 3, 2, 2, 2, 639, 43, 3, 2, 2, 2, 640, 638, 3, 2, 2, 2, 641, 642, 7, 52, 2, 2, 642, 643, 5, 42, 22, 2, 643, 645, 7, 4, 2, 2, 644, 646, 7, 13, 2, 2, 645, 644, 3, 2, 2, 2, 645, 646, 3, 2, 2, 2, 646, 647, 3, 2, 2, 2, 647, 652, 5, 46, 24, 2, 648, 649, 7, 13, 2, 2, 649, 651, 5, 46, 24, 2, 650, 648, 3, 2, 2, 2, 651, 654, 3, 2, 2, 2, 652, 650, 3, 2, 2, 2, 652, 653, 3, 2, 2, 2, 653, 655, 3, 2, 2, 2, 654, 652, 3, 2, 2, 2, 655, 656, 7, 5, 2, 2, 656, 45, 3, 2, 2, 2, 657, 660, 5, 48, 25, 2, 658, 660, 7, 39, 2, 2, 659, 657, 3, 2, 2, 2, 659, 658, 3, 2, 2, 2, 660, 661, 3, 2, 2, 2, 661, 662, 7, 27, 2, 2, 662, 663, 5, 42, 22, 2, 663, 47, 3, 2, 2, 2, 664, 671, 5, 78, 40, 2, 665, 668, 7, 65, 2, 2, 666, 669, 5, 78, 40, 2, 667, 669, 7, 39, 2, 2, 668, 666, 3, 2, 2, 2, 668, 667, 3, 2, 2, 2, 669, 670, 3, 2, 2, 2, 670, 672, 7, 66, 2, 2, 671, 665, 3, 2, 2, 2, 671, 672, 3, 2, 2, 2, 672, 49, 3, 2, 2, 2, 673, 674, 5, 8, 5, 2, 674, 675, 7, 2, 2, 3, 675, 683, 3, 2, 2, 2, 676, 677, 5, 42, 22, 2, 677, 678, 7, 2, 2, 3, 678, 683, 3, 2, 2, 2, 679, 680, 7, 68, 2, 2, 680, 683, 7, 2, 2, 3, 681, 683, 7, 2, 2, 3, 682, 673, 3, 2, 2, 2, 682, 676, 3, 2, 2, 2, 682, 679, 3, 2, 2, 2, 682, 681, 3, 2, 2, 2, 683, 51, 3, 2, 2, 2, 684, 687, 5, 54, 28, 2, 685, 687, 5, 56, 29, 2, 686, 684, 3, 2, 2, 2, 686, 685, 3, 2, 2, 2, 687, 53, 3, 2, 2, 2, 688, 689, 5, 60, 31, 2, 689, 690, 7, 27, 2, 2, 690, 691, 5, 42, 22, 2, 691, 706, 3, 2, 2, 2, 692, 693, 7, 65, 2, 2, 693, 698, 5, 60, 31, 2, 694, 695, 7, 10, 2, 2, 695, 697, 5, 60, 31, 2, 696, 694, 3, 2, 2, 2, 697, 700, 3, 2, 2, 2, 698, 696, 3, 2, 2, 2, 698, 699, 3, 2, 2, 2, 699, 701, 3, 2, 2, 2, 700, 698, 3, 2, 2, 2, 701, 702, 7, 66, 2, 2, 702, 703, 7, 27, 2, 2, 703, 704, 5, 42, 22, 2, 704, 706, 3, 2, 2, 2, 705, 688, 3, 2, 2, 2, 705, 692, 3, 2, 2, 2, 706, 55, 3, 2, 2, 2, 707, 708, 7, 65, 2, 2, 708, 709, 7, 65, 2, 2, 709, 712, 5, 60, 31, 2, 710, 711, 7, 10, 2, 2, 711, 713, 5, 60, 31, 2, 712, 710, 3, 2, 2, 2, 713, 714, 3, 2, 2, 2, 714, 712, 3, 2, 2, 2, 714, 715, 3, 2, 2, 2, 715, 716, 3, 2, 2, 2, 716, 717, 7, 66, 2, 2, 717, 718, 7, 66, 2, 2, 718, 719, 7, 27, 2, 2, 719, 720, 5, 42, 22, 2, 720, 57, 3, 2, 2, 2, 721, 724, 7, 39, 2, 2, 722, 724, 5, 76, 39, 2, 723, 721, 3, 2, 2, 2, 723, 722, 3, 2, 2, 2, 724, 59, 3, 2, 2, 2, 725, 726, 5, 58, 30, 2, 726, 61, 3, 2, 2, 2, 727, 730, 7, 55, 2, 2, 728, 730, 5, 76, 39, 2, 729, 727, 3, 2, 2, 2, 729, 728, 3, 2, 2, 2, 730, 63, 3, 2, 2, 2, 731, 736, 5, 42, 22, 2, 732, 733, 7, 10, 2, 2, 733, 735, 5, 42, 22, 2, 734, 732, 3, 2, 2, 2, 735, 738, 3, 2, 2, 2, 736, 734, 3, 2, 2, 2, 736, 737, 3, 2, 2, 2, 737, 65, 3, 2, 2, 2, 738, 736, 3, 2, 2, 2, 739, 740, 5, 78, 40, 2, 740, 741, 7, 7, 2, 2, 741, 742, 5, 42, 22, 2, 742, 746, 3, 2, 2, 2, 743, 744, 7, 40, 2, 2, 744, 746, 5, 42, 22, 2, 745, 739, 3, 2, 2, 2, 745, 743, 3, 2, 2, 2, 746, 67, 3, 2, 2, 2, 747, 750, 5, 76, 39, 2, 748, 750, 9, 5, 2, 2, 749, 747, 3, 2, 2, 2, 749, 748, 3, 2, 2, 2, 750, 69, 3, 2, 2, 2, 751, 754, 5, 76, 39, 2, 752, 754, 9, 6, 2, 2, 753, 751, 3, 2, 2, 2, 753, 752, 3, 2, 2, 2, 754, 71, 3, 2, 2, 2, 755, 756, 9, 7, 2, 2, 756, 73, 3, 2, 2, 2, 757, 758, 9, 8, 2, 2, 758, 75, 3, 2, 2, 2, 759, 764, 7, 67, 2, 2, 760, 761, 7, 41, 2, 2, 761, 763, 7, 67, 2, 2, 762, 760, 3, 2, 2, 2, 763, 766, 3, 2, 2, 2, 764, 762, 3, 2, 2, 2, 764, 765, 3, 2, 2, 2, 765, 77, 3, 2, 2, 2, 766, 764, 3, 2, 2, 2, 767, 772, 7, 67, 2, 2, 768, 769, 5, 76, 39, 2, 769, 770, 8, 40, 1, 2, 770, 772, 3, 2, 2, 2, 771, 767, 3, 2, 2, 2, 771, 768, 3, 2, 2, 2, 772, 79, 3, 2, 2, 2, 87, 83, 90, 99, 107, 132, 142, 145, 150, 165, 172, 176, 179, 192, 199, 202, 209, 215, 220, 231, 239, 245, 249, 251, 262, 264, 279, 287, 302, 310, 312, 329, 332, 335, 358, 362, 373, 383, 391, 393, 403, 406, 417, 427, 429, 433, 442, 460, 464, 475, 479, 491, 495, 506, 510, 518, 528, 532, 542, 546, 556, 559, 562, 587, 626, 629, 636, 638, 645, 652, 659, 668, 671, 682, 686, 698, 705, 714, 723, 729, 736, 745, 749, 753, 764, 771] \ No newline at end of file diff --git a/quint/src/generated/QuintListener.ts b/quint/src/generated/QuintListener.ts index b139028d9..0c624e297 100644 --- a/quint/src/generated/QuintListener.ts +++ b/quint/src/generated/QuintListener.ts @@ -83,6 +83,9 @@ import { TypeUnionRecOneContext } from "./QuintParser"; import { RowContext } from "./QuintParser"; import { RowLabelContext } from "./QuintParser"; import { ExprContext } from "./QuintParser"; +import { MatchSumExprContext } from "./QuintParser"; +import { MatchSumCaseContext } from "./QuintParser"; +import { MatchSumVariantContext } from "./QuintParser"; import { DeclarationOrExprContext } from "./QuintParser"; import { LambdaContext } from "./QuintParser"; import { LambdaUnsugaredContext } from "./QuintParser"; @@ -1025,6 +1028,39 @@ export interface QuintListener extends ParseTreeListener { */ exitExpr?: (ctx: ExprContext) => void; + /** + * Enter a parse tree produced by `QuintParser.matchSumExpr`. + * @param ctx the parse tree + */ + enterMatchSumExpr?: (ctx: MatchSumExprContext) => void; + /** + * Exit a parse tree produced by `QuintParser.matchSumExpr`. + * @param ctx the parse tree + */ + exitMatchSumExpr?: (ctx: MatchSumExprContext) => void; + + /** + * Enter a parse tree produced by `QuintParser.matchSumCase`. + * @param ctx the parse tree + */ + enterMatchSumCase?: (ctx: MatchSumCaseContext) => void; + /** + * Exit a parse tree produced by `QuintParser.matchSumCase`. + * @param ctx the parse tree + */ + exitMatchSumCase?: (ctx: MatchSumCaseContext) => void; + + /** + * Enter a parse tree produced by `QuintParser.matchSumVariant`. + * @param ctx the parse tree + */ + enterMatchSumVariant?: (ctx: MatchSumVariantContext) => void; + /** + * Exit a parse tree produced by `QuintParser.matchSumVariant`. + * @param ctx the parse tree + */ + exitMatchSumVariant?: (ctx: MatchSumVariantContext) => void; + /** * Enter a parse tree produced by `QuintParser.declarationOrExpr`. * @param ctx the parse tree diff --git a/quint/src/generated/QuintParser.ts b/quint/src/generated/QuintParser.ts index 4ca9ec2db..dee78856d 100644 --- a/quint/src/generated/QuintParser.ts +++ b/quint/src/generated/QuintParser.ts @@ -124,30 +124,34 @@ export class QuintParser extends Parser { public static readonly RULE_row = 18; public static readonly RULE_rowLabel = 19; public static readonly RULE_expr = 20; - public static readonly RULE_declarationOrExpr = 21; - public static readonly RULE_lambda = 22; - public static readonly RULE_lambdaUnsugared = 23; - public static readonly RULE_lambdaTupleSugar = 24; - public static readonly RULE_identOrHole = 25; - public static readonly RULE_parameter = 26; - public static readonly RULE_identOrStar = 27; - public static readonly RULE_argList = 28; - public static readonly RULE_recElem = 29; - public static readonly RULE_normalCallName = 30; - public static readonly RULE_nameAfterDot = 31; - public static readonly RULE_operator = 32; - public static readonly RULE_literal = 33; - public static readonly RULE_qualId = 34; - public static readonly RULE_simpleId = 35; + public static readonly RULE_matchSumExpr = 21; + public static readonly RULE_matchSumCase = 22; + public static readonly RULE_matchSumVariant = 23; + public static readonly RULE_declarationOrExpr = 24; + public static readonly RULE_lambda = 25; + public static readonly RULE_lambdaUnsugared = 26; + public static readonly RULE_lambdaTupleSugar = 27; + public static readonly RULE_identOrHole = 28; + public static readonly RULE_parameter = 29; + public static readonly RULE_identOrStar = 30; + public static readonly RULE_argList = 31; + public static readonly RULE_recElem = 32; + public static readonly RULE_normalCallName = 33; + public static readonly RULE_nameAfterDot = 34; + public static readonly RULE_operator = 35; + public static readonly RULE_literal = 36; + public static readonly RULE_qualId = 37; + public static readonly RULE_simpleId = 38; // tslint:disable:no-trailing-whitespace public static readonly ruleNames: string[] = [ "modules", "module", "documentedDeclaration", "declaration", "operDef", "typeDef", "typeSumVariant", "nondetOperDef", "qualifier", "importMod", "exportMod", "instanceMod", "moduleName", "name", "qualifiedName", "fromSource", - "type", "typeUnionRecOne", "row", "rowLabel", "expr", "declarationOrExpr", - "lambda", "lambdaUnsugared", "lambdaTupleSugar", "identOrHole", "parameter", - "identOrStar", "argList", "recElem", "normalCallName", "nameAfterDot", - "operator", "literal", "qualId", "simpleId", + "type", "typeUnionRecOne", "row", "rowLabel", "expr", "matchSumExpr", + "matchSumCase", "matchSumVariant", "declarationOrExpr", "lambda", "lambdaUnsugared", + "lambdaTupleSugar", "identOrHole", "parameter", "identOrStar", "argList", + "recElem", "normalCallName", "nameAfterDot", "operator", "literal", "qualId", + "simpleId", ]; private static readonly _LITERAL_NAMES: Array = [ @@ -206,21 +210,21 @@ export class QuintParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 73; + this.state = 79; this._errHandler.sync(this); _la = this._input.LA(1); do { { { - this.state = 72; + this.state = 78; this.module(); } } - this.state = 75; + this.state = 81; this._errHandler.sync(this); _la = this._input.LA(1); } while (_la === QuintParser.T__0 || _la === QuintParser.DOCCOMMENT); - this.state = 77; + this.state = 83; this.match(QuintParser.EOF); } } @@ -246,41 +250,41 @@ export class QuintParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 82; + this.state = 88; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === QuintParser.DOCCOMMENT) { { { - this.state = 79; + this.state = 85; this.match(QuintParser.DOCCOMMENT); } } - this.state = 84; + this.state = 90; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 85; + this.state = 91; this.match(QuintParser.T__0); - this.state = 86; + this.state = 92; this.qualId(); - this.state = 87; + this.state = 93; this.match(QuintParser.T__1); - this.state = 91; + this.state = 97; this._errHandler.sync(this); _la = this._input.LA(1); while ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << QuintParser.T__3) | (1 << QuintParser.T__5) | (1 << QuintParser.T__6) | (1 << QuintParser.T__9) | (1 << QuintParser.T__12) | (1 << QuintParser.T__13) | (1 << QuintParser.T__14) | (1 << QuintParser.T__15) | (1 << QuintParser.T__16) | (1 << QuintParser.T__17) | (1 << QuintParser.T__18) | (1 << QuintParser.T__22))) !== 0) || _la === QuintParser.DOCCOMMENT) { { { - this.state = 88; + this.state = 94; this.documentedDeclaration(); } } - this.state = 93; + this.state = 99; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 94; + this.state = 100; this.match(QuintParser.T__2); } } @@ -306,21 +310,21 @@ export class QuintParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 99; + this.state = 105; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === QuintParser.DOCCOMMENT) { { { - this.state = 96; + this.state = 102; this.match(QuintParser.DOCCOMMENT); } } - this.state = 101; + this.state = 107; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 102; + this.state = 108; this.declaration(); } } @@ -343,20 +347,20 @@ export class QuintParser extends Parser { let _localctx: DeclarationContext = new DeclarationContext(this._ctx, this.state); this.enterRule(_localctx, 6, QuintParser.RULE_declaration); try { - this.state = 124; + this.state = 130; this._errHandler.sync(this); switch ( this.interpreter.adaptivePredict(this._input, 4, this._ctx) ) { case 1: _localctx = new ConstContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 104; + this.state = 110; this.match(QuintParser.T__3); - this.state = 105; + this.state = 111; this.qualId(); - this.state = 106; + this.state = 112; this.match(QuintParser.T__4); - this.state = 107; + this.state = 113; this.type(0); } break; @@ -365,13 +369,13 @@ export class QuintParser extends Parser { _localctx = new VarContext(_localctx); this.enterOuterAlt(_localctx, 2); { - this.state = 109; + this.state = 115; this.match(QuintParser.T__5); - this.state = 110; + this.state = 116; this.qualId(); - this.state = 111; + this.state = 117; this.match(QuintParser.T__4); - this.state = 112; + this.state = 118; this.type(0); } break; @@ -380,13 +384,13 @@ export class QuintParser extends Parser { _localctx = new AssumeContext(_localctx); this.enterOuterAlt(_localctx, 3); { - this.state = 114; + this.state = 120; this.match(QuintParser.T__6); - this.state = 115; + this.state = 121; this.identOrHole(); - this.state = 116; + this.state = 122; this.match(QuintParser.ASGN); - this.state = 117; + this.state = 123; this.expr(0); } break; @@ -395,7 +399,7 @@ export class QuintParser extends Parser { _localctx = new InstanceContext(_localctx); this.enterOuterAlt(_localctx, 4); { - this.state = 119; + this.state = 125; this.instanceMod(); } break; @@ -404,7 +408,7 @@ export class QuintParser extends Parser { _localctx = new OperContext(_localctx); this.enterOuterAlt(_localctx, 5); { - this.state = 120; + this.state = 126; this.operDef(); } break; @@ -413,7 +417,7 @@ export class QuintParser extends Parser { _localctx = new TypeDefsContext(_localctx); this.enterOuterAlt(_localctx, 6); { - this.state = 121; + this.state = 127; this.typeDef(); } break; @@ -422,7 +426,7 @@ export class QuintParser extends Parser { _localctx = new ImportDefContext(_localctx); this.enterOuterAlt(_localctx, 7); { - this.state = 122; + this.state = 128; this.importMod(); } break; @@ -431,7 +435,7 @@ export class QuintParser extends Parser { _localctx = new ExportDefContext(_localctx); this.enterOuterAlt(_localctx, 8); { - this.state = 123; + this.state = 129; this.exportMod(); } break; @@ -459,53 +463,53 @@ export class QuintParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 126; + this.state = 132; this.qualifier(); - this.state = 127; + this.state = 133; this.normalCallName(); - this.state = 164; + this.state = 170; this._errHandler.sync(this); switch ( this.interpreter.adaptivePredict(this._input, 9, this._ctx) ) { case 1: { - this.state = 128; + this.state = 134; this.match(QuintParser.LPAREN); - this.state = 137; + this.state = 143; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === QuintParser.T__36 || _la === QuintParser.IDENTIFIER) { { - this.state = 129; + this.state = 135; this.parameter(); - this.state = 134; + this.state = 140; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === QuintParser.T__7) { { { - this.state = 130; + this.state = 136; this.match(QuintParser.T__7); - this.state = 131; + this.state = 137; this.parameter(); } } - this.state = 136; + this.state = 142; this._errHandler.sync(this); _la = this._input.LA(1); } } } - this.state = 139; + this.state = 145; this.match(QuintParser.RPAREN); - this.state = 142; + this.state = 148; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === QuintParser.T__4) { { - this.state = 140; + this.state = 146; this.match(QuintParser.T__4); - this.state = 141; + this.state = 147; this.type(0); } } @@ -515,72 +519,72 @@ export class QuintParser extends Parser { case 2: { - this.state = 144; + this.state = 150; this.match(QuintParser.T__4); - this.state = 145; + this.state = 151; this.type(0); } break; case 3: { - this.state = 146; + this.state = 152; this.match(QuintParser.LPAREN); { - this.state = 147; + this.state = 153; this.parameter(); - this.state = 148; + this.state = 154; this.match(QuintParser.T__4); - this.state = 149; + this.state = 155; this.type(0); - this.state = 157; + this.state = 163; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === QuintParser.T__7) { { { - this.state = 150; + this.state = 156; this.match(QuintParser.T__7); - this.state = 151; + this.state = 157; this.parameter(); - this.state = 152; + this.state = 158; this.match(QuintParser.T__4); - this.state = 153; + this.state = 159; this.type(0); } } - this.state = 159; + this.state = 165; this._errHandler.sync(this); _la = this._input.LA(1); } } - this.state = 160; + this.state = 166; this.match(QuintParser.RPAREN); - this.state = 161; + this.state = 167; this.match(QuintParser.T__4); - this.state = 162; + this.state = 168; this.type(0); } break; } - this.state = 168; + this.state = 174; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === QuintParser.ASGN) { { - this.state = 166; + this.state = 172; this.match(QuintParser.ASGN); - this.state = 167; + this.state = 173; this.expr(0); } } - this.state = 171; + this.state = 177; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === QuintParser.T__8) { { - this.state = 170; + this.state = 176; this.match(QuintParser.T__8); } } @@ -607,16 +611,16 @@ export class QuintParser extends Parser { this.enterRule(_localctx, 10, QuintParser.RULE_typeDef); let _la: number; try { - this.state = 194; + this.state = 200; this._errHandler.sync(this); switch ( this.interpreter.adaptivePredict(this._input, 14, this._ctx) ) { case 1: _localctx = new TypeAbstractDefContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 173; + this.state = 179; this.match(QuintParser.T__9); - this.state = 174; + this.state = 180; this.qualId(); } break; @@ -625,13 +629,13 @@ export class QuintParser extends Parser { _localctx = new TypeAliasDefContext(_localctx); this.enterOuterAlt(_localctx, 2); { - this.state = 175; + this.state = 181; this.match(QuintParser.T__9); - this.state = 176; + this.state = 182; this.qualId(); - this.state = 177; + this.state = 183; this.match(QuintParser.ASGN); - this.state = 178; + this.state = 184; this.type(0); } break; @@ -640,37 +644,37 @@ export class QuintParser extends Parser { _localctx = new TypeSumDefContext(_localctx); this.enterOuterAlt(_localctx, 3); { - this.state = 180; + this.state = 186; this.match(QuintParser.T__9); - this.state = 181; + this.state = 187; (_localctx as TypeSumDefContext)._typeName = this.qualId(); - this.state = 182; + this.state = 188; this.match(QuintParser.ASGN); - this.state = 184; + this.state = 190; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === QuintParser.T__10) { { - this.state = 183; + this.state = 189; this.match(QuintParser.T__10); } } - this.state = 186; + this.state = 192; this.typeSumVariant(); - this.state = 191; + this.state = 197; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === QuintParser.T__10) { { { - this.state = 187; + this.state = 193; this.match(QuintParser.T__10); - this.state = 188; + this.state = 194; this.typeSumVariant(); } } - this.state = 193; + this.state = 199; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -700,18 +704,18 @@ export class QuintParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 196; + this.state = 202; _localctx._sumLabel = this.simpleId("variant label"); - this.state = 201; + this.state = 207; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === QuintParser.LPAREN) { { - this.state = 197; + this.state = 203; this.match(QuintParser.LPAREN); - this.state = 198; + this.state = 204; this.type(0); - this.state = 199; + this.state = 205; this.match(QuintParser.RPAREN); } } @@ -740,32 +744,32 @@ export class QuintParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 203; + this.state = 209; this.match(QuintParser.T__11); - this.state = 204; + this.state = 210; this.qualId(); - this.state = 207; + this.state = 213; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === QuintParser.T__4) { { - this.state = 205; + this.state = 211; this.match(QuintParser.T__4); - this.state = 206; + this.state = 212; this.type(0); } } - this.state = 209; + this.state = 215; this.match(QuintParser.ASGN); - this.state = 210; + this.state = 216; this.expr(0); - this.state = 212; + this.state = 218; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === QuintParser.T__8) { { - this.state = 211; + this.state = 217; this.match(QuintParser.T__8); } } @@ -791,13 +795,13 @@ export class QuintParser extends Parser { let _localctx: QualifierContext = new QualifierContext(this._ctx, this.state); this.enterRule(_localctx, 16, QuintParser.RULE_qualifier); try { - this.state = 223; + this.state = 229; this._errHandler.sync(this); switch ( this.interpreter.adaptivePredict(this._input, 18, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 214; + this.state = 220; this.match(QuintParser.T__12); } break; @@ -805,7 +809,7 @@ export class QuintParser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 215; + this.state = 221; this.match(QuintParser.T__13); } break; @@ -813,9 +817,9 @@ export class QuintParser extends Parser { case 3: this.enterOuterAlt(_localctx, 3); { - this.state = 216; + this.state = 222; this.match(QuintParser.T__14); - this.state = 217; + this.state = 223; this.match(QuintParser.T__12); } break; @@ -823,9 +827,9 @@ export class QuintParser extends Parser { case 4: this.enterOuterAlt(_localctx, 4); { - this.state = 218; + this.state = 224; this.match(QuintParser.T__14); - this.state = 219; + this.state = 225; this.match(QuintParser.T__13); } break; @@ -833,7 +837,7 @@ export class QuintParser extends Parser { case 5: this.enterOuterAlt(_localctx, 5); { - this.state = 220; + this.state = 226; this.match(QuintParser.T__15); } break; @@ -841,7 +845,7 @@ export class QuintParser extends Parser { case 6: this.enterOuterAlt(_localctx, 6); { - this.state = 221; + this.state = 227; this.match(QuintParser.T__16); } break; @@ -849,7 +853,7 @@ export class QuintParser extends Parser { case 7: this.enterOuterAlt(_localctx, 7); { - this.state = 222; + this.state = 228; this.match(QuintParser.T__17); } break; @@ -875,28 +879,28 @@ export class QuintParser extends Parser { this.enterRule(_localctx, 18, QuintParser.RULE_importMod); let _la: number; try { - this.state = 243; + this.state = 249; this._errHandler.sync(this); switch ( this.interpreter.adaptivePredict(this._input, 22, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 225; + this.state = 231; this.match(QuintParser.T__18); - this.state = 226; + this.state = 232; this.name(); - this.state = 227; + this.state = 233; this.match(QuintParser.T__19); - this.state = 228; + this.state = 234; this.identOrStar(); - this.state = 231; + this.state = 237; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === QuintParser.T__20) { { - this.state = 229; + this.state = 235; this.match(QuintParser.T__20); - this.state = 230; + this.state = 236; this.fromSource(); } } @@ -907,30 +911,30 @@ export class QuintParser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 233; + this.state = 239; this.match(QuintParser.T__18); - this.state = 234; + this.state = 240; this.name(); - this.state = 237; + this.state = 243; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === QuintParser.T__21) { { - this.state = 235; + this.state = 241; this.match(QuintParser.T__21); - this.state = 236; + this.state = 242; this.name(); } } - this.state = 241; + this.state = 247; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === QuintParser.T__20) { { - this.state = 239; + this.state = 245; this.match(QuintParser.T__20); - this.state = 240; + this.state = 246; this.fromSource(); } } @@ -959,19 +963,19 @@ export class QuintParser extends Parser { this.enterRule(_localctx, 20, QuintParser.RULE_exportMod); let _la: number; try { - this.state = 256; + this.state = 262; this._errHandler.sync(this); switch ( this.interpreter.adaptivePredict(this._input, 24, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 245; + this.state = 251; this.match(QuintParser.T__22); - this.state = 246; + this.state = 252; this.name(); - this.state = 247; + this.state = 253; this.match(QuintParser.T__19); - this.state = 248; + this.state = 254; this.identOrStar(); } break; @@ -979,18 +983,18 @@ export class QuintParser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 250; + this.state = 256; this.match(QuintParser.T__22); - this.state = 251; + this.state = 257; this.name(); - this.state = 254; + this.state = 260; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === QuintParser.T__21) { { - this.state = 252; + this.state = 258; this.match(QuintParser.T__21); - this.state = 253; + this.state = 259; this.name(); } } @@ -1019,60 +1023,60 @@ export class QuintParser extends Parser { this.enterRule(_localctx, 22, QuintParser.RULE_instanceMod); let _la: number; try { - this.state = 304; + this.state = 310; this._errHandler.sync(this); switch ( this.interpreter.adaptivePredict(this._input, 29, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 258; + this.state = 264; this.match(QuintParser.T__18); - this.state = 259; + this.state = 265; this.moduleName(); - this.state = 260; + this.state = 266; this.match(QuintParser.LPAREN); { - this.state = 261; + this.state = 267; this.name(); - this.state = 262; + this.state = 268; this.match(QuintParser.ASGN); - this.state = 263; + this.state = 269; this.expr(0); - this.state = 271; + this.state = 277; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === QuintParser.T__7) { { { - this.state = 264; + this.state = 270; this.match(QuintParser.T__7); - this.state = 265; + this.state = 271; this.name(); - this.state = 266; + this.state = 272; this.match(QuintParser.ASGN); - this.state = 267; + this.state = 273; this.expr(0); } } - this.state = 273; + this.state = 279; this._errHandler.sync(this); _la = this._input.LA(1); } } - this.state = 274; + this.state = 280; this.match(QuintParser.RPAREN); - this.state = 275; + this.state = 281; this.match(QuintParser.T__19); - this.state = 276; + this.state = 282; this.match(QuintParser.MUL); - this.state = 279; + this.state = 285; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === QuintParser.T__20) { { - this.state = 277; + this.state = 283; this.match(QuintParser.T__20); - this.state = 278; + this.state = 284; this.fromSource(); } } @@ -1083,54 +1087,54 @@ export class QuintParser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 281; + this.state = 287; this.match(QuintParser.T__18); - this.state = 282; + this.state = 288; this.moduleName(); - this.state = 283; + this.state = 289; this.match(QuintParser.LPAREN); { - this.state = 284; + this.state = 290; this.name(); - this.state = 285; + this.state = 291; this.match(QuintParser.ASGN); - this.state = 286; + this.state = 292; this.expr(0); - this.state = 294; + this.state = 300; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === QuintParser.T__7) { { { - this.state = 287; + this.state = 293; this.match(QuintParser.T__7); - this.state = 288; + this.state = 294; this.name(); - this.state = 289; + this.state = 295; this.match(QuintParser.ASGN); - this.state = 290; + this.state = 296; this.expr(0); } } - this.state = 296; + this.state = 302; this._errHandler.sync(this); _la = this._input.LA(1); } } - this.state = 297; + this.state = 303; this.match(QuintParser.RPAREN); - this.state = 298; + this.state = 304; this.match(QuintParser.T__21); - this.state = 299; + this.state = 305; this.qualifiedName(); - this.state = 302; + this.state = 308; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === QuintParser.T__20) { { - this.state = 300; + this.state = 306; this.match(QuintParser.T__20); - this.state = 301; + this.state = 307; this.fromSource(); } } @@ -1160,7 +1164,7 @@ export class QuintParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 306; + this.state = 312; this.qualId(); } } @@ -1185,7 +1189,7 @@ export class QuintParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 308; + this.state = 314; this.qualId(); } } @@ -1210,7 +1214,7 @@ export class QuintParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 310; + this.state = 316; this.qualId(); } } @@ -1235,7 +1239,7 @@ export class QuintParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 312; + this.state = 318; this.match(QuintParser.STRING); } } @@ -1273,7 +1277,7 @@ export class QuintParser extends Parser { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 375; + this.state = 381; this._errHandler.sync(this); switch ( this.interpreter.adaptivePredict(this._input, 36, this._ctx) ) { case 1: @@ -1282,51 +1286,51 @@ export class QuintParser extends Parser { this._ctx = _localctx; _prevctx = _localctx; - this.state = 315; + this.state = 321; this.match(QuintParser.LPAREN); - this.state = 324; + this.state = 330; this._errHandler.sync(this); _la = this._input.LA(1); if ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << QuintParser.T__1) | (1 << QuintParser.T__10) | (1 << QuintParser.T__27) | (1 << QuintParser.T__28) | (1 << QuintParser.T__29))) !== 0) || ((((_la - 47)) & ~0x1F) === 0 && ((1 << (_la - 47)) & ((1 << (QuintParser.SET - 47)) | (1 << (QuintParser.LIST - 47)) | (1 << (QuintParser.LPAREN - 47)) | (1 << (QuintParser.IDENTIFIER - 47)))) !== 0)) { { - this.state = 316; + this.state = 322; this.type(0); - this.state = 321; + this.state = 327; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 30, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 317; + this.state = 323; this.match(QuintParser.T__7); - this.state = 318; + this.state = 324; this.type(0); } } } - this.state = 323; + this.state = 329; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 30, this._ctx); } } } - this.state = 327; + this.state = 333; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === QuintParser.T__7) { { - this.state = 326; + this.state = 332; this.match(QuintParser.T__7); } } - this.state = 329; + this.state = 335; this.match(QuintParser.RPAREN); - this.state = 330; + this.state = 336; this.match(QuintParser.T__24); - this.state = 331; + this.state = 337; this.type(11); } break; @@ -1336,13 +1340,13 @@ export class QuintParser extends Parser { _localctx = new TypeSetContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 332; + this.state = 338; this.match(QuintParser.SET); - this.state = 333; + this.state = 339; this.match(QuintParser.T__25); - this.state = 334; + this.state = 340; this.type(0); - this.state = 335; + this.state = 341; this.match(QuintParser.T__26); } break; @@ -1352,13 +1356,13 @@ export class QuintParser extends Parser { _localctx = new TypeListContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 337; + this.state = 343; this.match(QuintParser.LIST); - this.state = 338; + this.state = 344; this.match(QuintParser.T__25); - this.state = 339; + this.state = 345; this.type(0); - this.state = 340; + this.state = 346; this.match(QuintParser.T__26); } break; @@ -1368,43 +1372,43 @@ export class QuintParser extends Parser { _localctx = new TypeTupleContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 342; + this.state = 348; this.match(QuintParser.LPAREN); - this.state = 343; + this.state = 349; this.type(0); - this.state = 344; + this.state = 350; this.match(QuintParser.T__7); - this.state = 345; + this.state = 351; this.type(0); - this.state = 350; + this.state = 356; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 33, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 346; + this.state = 352; this.match(QuintParser.T__7); - this.state = 347; + this.state = 353; this.type(0); } } } - this.state = 352; + this.state = 358; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 33, this._ctx); } - this.state = 354; + this.state = 360; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === QuintParser.T__7) { { - this.state = 353; + this.state = 359; this.match(QuintParser.T__7); } } - this.state = 356; + this.state = 362; this.match(QuintParser.RPAREN); } break; @@ -1414,11 +1418,11 @@ export class QuintParser extends Parser { _localctx = new TypeRecContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 358; + this.state = 364; this.match(QuintParser.T__1); - this.state = 359; + this.state = 365; this.row(); - this.state = 360; + this.state = 366; this.match(QuintParser.T__2); } break; @@ -1428,7 +1432,7 @@ export class QuintParser extends Parser { _localctx = new TypeUnionRecContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 363; + this.state = 369; this._errHandler.sync(this); _alt = 1; do { @@ -1436,7 +1440,7 @@ export class QuintParser extends Parser { case 1: { { - this.state = 362; + this.state = 368; this.typeUnionRecOne(); } } @@ -1444,7 +1448,7 @@ export class QuintParser extends Parser { default: throw new NoViableAltException(this); } - this.state = 365; + this.state = 371; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 35, this._ctx); } while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER); @@ -1456,7 +1460,7 @@ export class QuintParser extends Parser { _localctx = new TypeIntContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 367; + this.state = 373; this.match(QuintParser.T__27); } break; @@ -1466,7 +1470,7 @@ export class QuintParser extends Parser { _localctx = new TypeStrContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 368; + this.state = 374; this.match(QuintParser.T__28); } break; @@ -1476,7 +1480,7 @@ export class QuintParser extends Parser { _localctx = new TypeBoolContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 369; + this.state = 375; this.match(QuintParser.T__29); } break; @@ -1486,7 +1490,7 @@ export class QuintParser extends Parser { _localctx = new TypeConstOrVarContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 370; + this.state = 376; this.qualId(); } break; @@ -1496,17 +1500,17 @@ export class QuintParser extends Parser { _localctx = new TypeParenContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 371; + this.state = 377; this.match(QuintParser.LPAREN); - this.state = 372; + this.state = 378; this.type(0); - this.state = 373; + this.state = 379; this.match(QuintParser.RPAREN); } break; } this._ctx._stop = this._input.tryLT(-1); - this.state = 385; + this.state = 391; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 38, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { @@ -1516,20 +1520,20 @@ export class QuintParser extends Parser { } _prevctx = _localctx; { - this.state = 383; + this.state = 389; this._errHandler.sync(this); switch ( this.interpreter.adaptivePredict(this._input, 37, this._ctx) ) { case 1: { _localctx = new TypeFunContext(new TypeContext(_parentctx, _parentState)); this.pushNewRecursionContext(_localctx, _startState, QuintParser.RULE_type); - this.state = 377; + this.state = 383; if (!(this.precpred(this._ctx, 13))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 13)"); } - this.state = 378; + this.state = 384; this.match(QuintParser.T__23); - this.state = 379; + this.state = 385; this.type(13); } break; @@ -1538,20 +1542,20 @@ export class QuintParser extends Parser { { _localctx = new TypeOperContext(new TypeContext(_parentctx, _parentState)); this.pushNewRecursionContext(_localctx, _startState, QuintParser.RULE_type); - this.state = 380; + this.state = 386; if (!(this.precpred(this._ctx, 12))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 12)"); } - this.state = 381; + this.state = 387; this.match(QuintParser.T__24); - this.state = 382; + this.state = 388; this.type(12); } break; } } } - this.state = 387; + this.state = 393; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 38, this._ctx); } @@ -1579,39 +1583,39 @@ export class QuintParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 388; + this.state = 394; this.match(QuintParser.T__10); - this.state = 389; + this.state = 395; this.match(QuintParser.T__1); - this.state = 390; + this.state = 396; this.qualId(); - this.state = 391; + this.state = 397; this.match(QuintParser.T__4); - this.state = 392; + this.state = 398; this.match(QuintParser.STRING); - this.state = 395; + this.state = 401; this._errHandler.sync(this); switch ( this.interpreter.adaptivePredict(this._input, 39, this._ctx) ) { case 1: { - this.state = 393; + this.state = 399; this.match(QuintParser.T__7); - this.state = 394; + this.state = 400; this.row(); } break; } - this.state = 398; + this.state = 404; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === QuintParser.T__7) { { - this.state = 397; + this.state = 403; this.match(QuintParser.T__7); } } - this.state = 400; + this.state = 406; this.match(QuintParser.T__2); } } @@ -1636,7 +1640,7 @@ export class QuintParser extends Parser { let _la: number; try { let _alt: number; - this.state = 425; + this.state = 431; this._errHandler.sync(this); switch (this._input.LA(1)) { case QuintParser.T__2: @@ -1644,57 +1648,57 @@ export class QuintParser extends Parser { case QuintParser.IDENTIFIER: this.enterOuterAlt(_localctx, 1); { - this.state = 409; + this.state = 415; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 41, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 402; + this.state = 408; this.rowLabel(); - this.state = 403; + this.state = 409; this.match(QuintParser.T__4); - this.state = 404; + this.state = 410; this.type(0); - this.state = 405; + this.state = 411; this.match(QuintParser.T__7); } } } - this.state = 411; + this.state = 417; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 41, this._ctx); } - this.state = 421; + this.state = 427; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === QuintParser.IDENTIFIER) { { { - this.state = 412; + this.state = 418; this.rowLabel(); - this.state = 413; + this.state = 419; this.match(QuintParser.T__4); - this.state = 414; + this.state = 420; this.type(0); } - this.state = 419; + this.state = 425; this._errHandler.sync(this); switch ( this.interpreter.adaptivePredict(this._input, 42, this._ctx) ) { case 1: { - this.state = 416; + this.state = 422; this.match(QuintParser.T__7); } break; case 2: { - this.state = 417; + this.state = 423; this.match(QuintParser.T__10); { - this.state = 418; + this.state = 424; _localctx._rowVar = this.match(QuintParser.IDENTIFIER); } } @@ -1708,10 +1712,10 @@ export class QuintParser extends Parser { case QuintParser.T__10: this.enterOuterAlt(_localctx, 2); { - this.state = 423; + this.state = 429; this.match(QuintParser.T__10); { - this.state = 424; + this.state = 430; _localctx._rowVar = this.match(QuintParser.IDENTIFIER); } } @@ -1741,7 +1745,7 @@ export class QuintParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 427; + this.state = 433; this.simpleId("record"); } } @@ -1779,7 +1783,7 @@ export class QuintParser extends Parser { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 578; + this.state = 585; this._errHandler.sync(this); switch ( this.interpreter.adaptivePredict(this._input, 62, this._ctx) ) { case 1: @@ -1788,7 +1792,7 @@ export class QuintParser extends Parser { this._ctx = _localctx; _prevctx = _localctx; - this.state = 430; + this.state = 436; this.lambda(); } break; @@ -1798,21 +1802,21 @@ export class QuintParser extends Parser { _localctx = new OperAppContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 431; + this.state = 437; this.normalCallName(); - this.state = 432; + this.state = 438; this.match(QuintParser.LPAREN); - this.state = 434; + this.state = 440; this._errHandler.sync(this); _la = this._input.LA(1); - if (((((_la - 2)) & ~0x1F) === 0 && ((1 << (_la - 2)) & ((1 << (QuintParser.T__1 - 2)) | (1 << (QuintParser.T__11 - 2)) | (1 << (QuintParser.T__12 - 2)) | (1 << (QuintParser.T__13 - 2)) | (1 << (QuintParser.T__14 - 2)) | (1 << (QuintParser.T__15 - 2)) | (1 << (QuintParser.T__16 - 2)) | (1 << (QuintParser.T__17 - 2)) | (1 << (QuintParser.T__25 - 2)) | (1 << (QuintParser.T__32 - 2)))) !== 0) || ((((_la - 34)) & ~0x1F) === 0 && ((1 << (_la - 34)) & ((1 << (QuintParser.T__33 - 34)) | (1 << (QuintParser.T__34 - 34)) | (1 << (QuintParser.T__36 - 34)) | (1 << (QuintParser.STRING - 34)) | (1 << (QuintParser.BOOL - 34)) | (1 << (QuintParser.INT - 34)) | (1 << (QuintParser.AND - 34)) | (1 << (QuintParser.OR - 34)) | (1 << (QuintParser.IFF - 34)) | (1 << (QuintParser.IMPLIES - 34)) | (1 << (QuintParser.SET - 34)) | (1 << (QuintParser.LIST - 34)) | (1 << (QuintParser.MAP - 34)) | (1 << (QuintParser.MINUS - 34)) | (1 << (QuintParser.LPAREN - 34)) | (1 << (QuintParser.IDENTIFIER - 34)))) !== 0)) { + if (((((_la - 2)) & ~0x1F) === 0 && ((1 << (_la - 2)) & ((1 << (QuintParser.T__1 - 2)) | (1 << (QuintParser.T__11 - 2)) | (1 << (QuintParser.T__12 - 2)) | (1 << (QuintParser.T__13 - 2)) | (1 << (QuintParser.T__14 - 2)) | (1 << (QuintParser.T__15 - 2)) | (1 << (QuintParser.T__16 - 2)) | (1 << (QuintParser.T__17 - 2)) | (1 << (QuintParser.T__25 - 2)) | (1 << (QuintParser.T__32 - 2)))) !== 0) || ((((_la - 34)) & ~0x1F) === 0 && ((1 << (_la - 34)) & ((1 << (QuintParser.T__33 - 34)) | (1 << (QuintParser.T__34 - 34)) | (1 << (QuintParser.T__36 - 34)) | (1 << (QuintParser.STRING - 34)) | (1 << (QuintParser.BOOL - 34)) | (1 << (QuintParser.INT - 34)) | (1 << (QuintParser.AND - 34)) | (1 << (QuintParser.OR - 34)) | (1 << (QuintParser.IFF - 34)) | (1 << (QuintParser.IMPLIES - 34)) | (1 << (QuintParser.SET - 34)) | (1 << (QuintParser.LIST - 34)) | (1 << (QuintParser.MAP - 34)) | (1 << (QuintParser.MATCH - 34)) | (1 << (QuintParser.MINUS - 34)) | (1 << (QuintParser.LPAREN - 34)) | (1 << (QuintParser.IDENTIFIER - 34)))) !== 0)) { { - this.state = 433; + this.state = 439; this.argList(); } } - this.state = 436; + this.state = 442; this.match(QuintParser.RPAREN); } break; @@ -1822,9 +1826,9 @@ export class QuintParser extends Parser { _localctx = new UminusContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 438; + this.state = 444; this.match(QuintParser.MINUS); - this.state = 439; + this.state = 445; this.expr(25); } break; @@ -1834,13 +1838,13 @@ export class QuintParser extends Parser { _localctx = new AsgnContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 440; + this.state = 446; this.qualId(); - this.state = 441; + this.state = 447; this.match(QuintParser.T__31); - this.state = 442; + this.state = 448; this.match(QuintParser.ASGN); - this.state = 443; + this.state = 449; this.expr(21); } break; @@ -1850,41 +1854,41 @@ export class QuintParser extends Parser { _localctx = new AndExprContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 445; + this.state = 451; this.match(QuintParser.AND); - this.state = 446; + this.state = 452; this.match(QuintParser.T__1); - this.state = 447; + this.state = 453; this.expr(0); - this.state = 452; + this.state = 458; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 46, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 448; + this.state = 454; this.match(QuintParser.T__7); - this.state = 449; + this.state = 455; this.expr(0); } } } - this.state = 454; + this.state = 460; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 46, this._ctx); } - this.state = 456; + this.state = 462; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === QuintParser.T__7) { { - this.state = 455; + this.state = 461; this.match(QuintParser.T__7); } } - this.state = 458; + this.state = 464; this.match(QuintParser.T__2); } break; @@ -1894,162 +1898,172 @@ export class QuintParser extends Parser { _localctx = new OrExprContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 460; + this.state = 466; this.match(QuintParser.OR); - this.state = 461; + this.state = 467; this.match(QuintParser.T__1); - this.state = 462; + this.state = 468; this.expr(0); - this.state = 467; + this.state = 473; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 48, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 463; + this.state = 469; this.match(QuintParser.T__7); - this.state = 464; + this.state = 470; this.expr(0); } } } - this.state = 469; + this.state = 475; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 48, this._ctx); } - this.state = 471; + this.state = 477; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === QuintParser.T__7) { { - this.state = 470; + this.state = 476; this.match(QuintParser.T__7); } } - this.state = 473; + this.state = 479; this.match(QuintParser.T__2); } break; case 7: + { + _localctx = new MatchContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; + this.state = 481; + this.matchSumExpr(); + } + break; + + case 8: { _localctx = new ActionAllContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 475; + this.state = 482; this.match(QuintParser.T__32); - this.state = 476; + this.state = 483; this.match(QuintParser.T__1); - this.state = 477; + this.state = 484; this.expr(0); - this.state = 482; + this.state = 489; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 50, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 478; + this.state = 485; this.match(QuintParser.T__7); - this.state = 479; + this.state = 486; this.expr(0); } } } - this.state = 484; + this.state = 491; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 50, this._ctx); } - this.state = 486; + this.state = 493; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === QuintParser.T__7) { { - this.state = 485; + this.state = 492; this.match(QuintParser.T__7); } } - this.state = 488; + this.state = 495; this.match(QuintParser.T__2); } break; - case 8: + case 9: { _localctx = new ActionAnyContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 490; + this.state = 497; this.match(QuintParser.T__33); - this.state = 491; + this.state = 498; this.match(QuintParser.T__1); - this.state = 492; + this.state = 499; this.expr(0); - this.state = 497; + this.state = 504; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 52, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 493; + this.state = 500; this.match(QuintParser.T__7); - this.state = 494; + this.state = 501; this.expr(0); } } } - this.state = 499; + this.state = 506; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 52, this._ctx); } - this.state = 501; + this.state = 508; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === QuintParser.T__7) { { - this.state = 500; + this.state = 507; this.match(QuintParser.T__7); } } - this.state = 503; + this.state = 510; this.match(QuintParser.T__2); } break; - case 9: + case 10: { _localctx = new LiteralOrIdContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 509; + this.state = 516; this._errHandler.sync(this); switch (this._input.LA(1)) { case QuintParser.IDENTIFIER: { - this.state = 505; + this.state = 512; this.qualId(); } break; case QuintParser.INT: { - this.state = 506; + this.state = 513; this.match(QuintParser.INT); } break; case QuintParser.BOOL: { - this.state = 507; + this.state = 514; this.match(QuintParser.BOOL); } break; case QuintParser.STRING: { - this.state = 508; + this.state = 515; this.match(QuintParser.STRING); } break; @@ -2059,222 +2073,222 @@ export class QuintParser extends Parser { } break; - case 10: + case 11: { _localctx = new TupleContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 511; + this.state = 518; this.match(QuintParser.LPAREN); - this.state = 512; + this.state = 519; this.expr(0); - this.state = 513; + this.state = 520; this.match(QuintParser.T__7); - this.state = 514; + this.state = 521; this.expr(0); - this.state = 519; + this.state = 526; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 55, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 515; + this.state = 522; this.match(QuintParser.T__7); - this.state = 516; + this.state = 523; this.expr(0); } } } - this.state = 521; + this.state = 528; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 55, this._ctx); } - this.state = 523; + this.state = 530; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === QuintParser.T__7) { { - this.state = 522; + this.state = 529; this.match(QuintParser.T__7); } } - this.state = 525; + this.state = 532; this.match(QuintParser.RPAREN); } break; - case 11: + case 12: { _localctx = new RecordContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 527; + this.state = 534; this.match(QuintParser.T__1); - this.state = 528; + this.state = 535; this.recElem(); - this.state = 533; + this.state = 540; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 57, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 529; + this.state = 536; this.match(QuintParser.T__7); - this.state = 530; + this.state = 537; this.recElem(); } } } - this.state = 535; + this.state = 542; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 57, this._ctx); } - this.state = 537; + this.state = 544; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === QuintParser.T__7) { { - this.state = 536; + this.state = 543; this.match(QuintParser.T__7); } } - this.state = 539; + this.state = 546; this.match(QuintParser.T__2); } break; - case 12: + case 13: { _localctx = new ListContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 541; + this.state = 548; this.match(QuintParser.T__25); - this.state = 550; + this.state = 557; this._errHandler.sync(this); _la = this._input.LA(1); - if (((((_la - 2)) & ~0x1F) === 0 && ((1 << (_la - 2)) & ((1 << (QuintParser.T__1 - 2)) | (1 << (QuintParser.T__11 - 2)) | (1 << (QuintParser.T__12 - 2)) | (1 << (QuintParser.T__13 - 2)) | (1 << (QuintParser.T__14 - 2)) | (1 << (QuintParser.T__15 - 2)) | (1 << (QuintParser.T__16 - 2)) | (1 << (QuintParser.T__17 - 2)) | (1 << (QuintParser.T__25 - 2)) | (1 << (QuintParser.T__32 - 2)))) !== 0) || ((((_la - 34)) & ~0x1F) === 0 && ((1 << (_la - 34)) & ((1 << (QuintParser.T__33 - 34)) | (1 << (QuintParser.T__34 - 34)) | (1 << (QuintParser.T__36 - 34)) | (1 << (QuintParser.STRING - 34)) | (1 << (QuintParser.BOOL - 34)) | (1 << (QuintParser.INT - 34)) | (1 << (QuintParser.AND - 34)) | (1 << (QuintParser.OR - 34)) | (1 << (QuintParser.IFF - 34)) | (1 << (QuintParser.IMPLIES - 34)) | (1 << (QuintParser.SET - 34)) | (1 << (QuintParser.LIST - 34)) | (1 << (QuintParser.MAP - 34)) | (1 << (QuintParser.MINUS - 34)) | (1 << (QuintParser.LPAREN - 34)) | (1 << (QuintParser.IDENTIFIER - 34)))) !== 0)) { + if (((((_la - 2)) & ~0x1F) === 0 && ((1 << (_la - 2)) & ((1 << (QuintParser.T__1 - 2)) | (1 << (QuintParser.T__11 - 2)) | (1 << (QuintParser.T__12 - 2)) | (1 << (QuintParser.T__13 - 2)) | (1 << (QuintParser.T__14 - 2)) | (1 << (QuintParser.T__15 - 2)) | (1 << (QuintParser.T__16 - 2)) | (1 << (QuintParser.T__17 - 2)) | (1 << (QuintParser.T__25 - 2)) | (1 << (QuintParser.T__32 - 2)))) !== 0) || ((((_la - 34)) & ~0x1F) === 0 && ((1 << (_la - 34)) & ((1 << (QuintParser.T__33 - 34)) | (1 << (QuintParser.T__34 - 34)) | (1 << (QuintParser.T__36 - 34)) | (1 << (QuintParser.STRING - 34)) | (1 << (QuintParser.BOOL - 34)) | (1 << (QuintParser.INT - 34)) | (1 << (QuintParser.AND - 34)) | (1 << (QuintParser.OR - 34)) | (1 << (QuintParser.IFF - 34)) | (1 << (QuintParser.IMPLIES - 34)) | (1 << (QuintParser.SET - 34)) | (1 << (QuintParser.LIST - 34)) | (1 << (QuintParser.MAP - 34)) | (1 << (QuintParser.MATCH - 34)) | (1 << (QuintParser.MINUS - 34)) | (1 << (QuintParser.LPAREN - 34)) | (1 << (QuintParser.IDENTIFIER - 34)))) !== 0)) { { - this.state = 542; + this.state = 549; this.expr(0); - this.state = 547; + this.state = 554; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 59, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 543; + this.state = 550; this.match(QuintParser.T__7); - this.state = 544; + this.state = 551; this.expr(0); } } } - this.state = 549; + this.state = 556; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 59, this._ctx); } } } - this.state = 553; + this.state = 560; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === QuintParser.T__7) { { - this.state = 552; + this.state = 559; this.match(QuintParser.T__7); } } - this.state = 555; + this.state = 562; this.match(QuintParser.T__26); } break; - case 13: + case 14: { _localctx = new IfElseContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 556; + this.state = 563; this.match(QuintParser.T__34); - this.state = 557; + this.state = 564; this.match(QuintParser.LPAREN); - this.state = 558; + this.state = 565; this.expr(0); - this.state = 559; + this.state = 566; this.match(QuintParser.RPAREN); - this.state = 560; + this.state = 567; this.expr(0); - this.state = 561; + this.state = 568; this.match(QuintParser.T__35); - this.state = 562; + this.state = 569; this.expr(5); } break; - case 14: + case 15: { _localctx = new LetInContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 564; + this.state = 571; this.operDef(); - this.state = 565; + this.state = 572; this.expr(4); } break; - case 15: + case 16: { _localctx = new NondetContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 567; + this.state = 574; this.nondetOperDef(); - this.state = 568; + this.state = 575; this.expr(3); } break; - case 16: + case 17: { _localctx = new ParenContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 570; + this.state = 577; this.match(QuintParser.LPAREN); - this.state = 571; + this.state = 578; this.expr(0); - this.state = 572; + this.state = 579; this.match(QuintParser.RPAREN); } break; - case 17: + case 18: { _localctx = new BracesContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 574; + this.state = 581; this.match(QuintParser.T__1); - this.state = 575; + this.state = 582; this.expr(0); - this.state = 576; + this.state = 583; this.match(QuintParser.T__2); } break; } this._ctx._stop = this._input.tryLT(-1); - this.state = 642; + this.state = 636; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 67, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 66, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -2282,20 +2296,20 @@ export class QuintParser extends Parser { } _prevctx = _localctx; { - this.state = 640; + this.state = 634; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 66, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 65, this._ctx) ) { case 1: { _localctx = new PowContext(new ExprContext(_parentctx, _parentState)); this.pushNewRecursionContext(_localctx, _startState, QuintParser.RULE_expr); - this.state = 580; + this.state = 587; if (!(this.precpred(this._ctx, 26))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 26)"); } - this.state = 581; + this.state = 588; (_localctx as PowContext)._op = this.match(QuintParser.T__30); - this.state = 582; + this.state = 589; this.expr(26); } break; @@ -2304,11 +2318,11 @@ export class QuintParser extends Parser { { _localctx = new MultDivContext(new ExprContext(_parentctx, _parentState)); this.pushNewRecursionContext(_localctx, _startState, QuintParser.RULE_expr); - this.state = 583; + this.state = 590; if (!(this.precpred(this._ctx, 24))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 24)"); } - this.state = 584; + this.state = 591; (_localctx as MultDivContext)._op = this._input.LT(1); _la = this._input.LA(1); if (!(((((_la - 53)) & ~0x1F) === 0 && ((1 << (_la - 53)) & ((1 << (QuintParser.MUL - 53)) | (1 << (QuintParser.DIV - 53)) | (1 << (QuintParser.MOD - 53)))) !== 0))) { @@ -2321,7 +2335,7 @@ export class QuintParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 585; + this.state = 592; this.expr(25); } break; @@ -2330,11 +2344,11 @@ export class QuintParser extends Parser { { _localctx = new PlusMinusContext(new ExprContext(_parentctx, _parentState)); this.pushNewRecursionContext(_localctx, _startState, QuintParser.RULE_expr); - this.state = 586; + this.state = 593; if (!(this.precpred(this._ctx, 23))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 23)"); } - this.state = 587; + this.state = 594; (_localctx as PlusMinusContext)._op = this._input.LT(1); _la = this._input.LA(1); if (!(_la === QuintParser.PLUS || _la === QuintParser.MINUS)) { @@ -2347,7 +2361,7 @@ export class QuintParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 588; + this.state = 595; this.expr(24); } break; @@ -2356,11 +2370,11 @@ export class QuintParser extends Parser { { _localctx = new RelationsContext(new ExprContext(_parentctx, _parentState)); this.pushNewRecursionContext(_localctx, _startState, QuintParser.RULE_expr); - this.state = 589; + this.state = 596; if (!(this.precpred(this._ctx, 22))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 22)"); } - this.state = 590; + this.state = 597; (_localctx as RelationsContext)._op = this._input.LT(1); _la = this._input.LA(1); if (!(((((_la - 56)) & ~0x1F) === 0 && ((1 << (_la - 56)) & ((1 << (QuintParser.GT - 56)) | (1 << (QuintParser.LT - 56)) | (1 << (QuintParser.GE - 56)) | (1 << (QuintParser.LE - 56)) | (1 << (QuintParser.NE - 56)) | (1 << (QuintParser.EQ - 56)))) !== 0))) { @@ -2373,7 +2387,7 @@ export class QuintParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 591; + this.state = 598; this.expr(23); } break; @@ -2382,13 +2396,13 @@ export class QuintParser extends Parser { { _localctx = new ErrorEqContext(new ExprContext(_parentctx, _parentState)); this.pushNewRecursionContext(_localctx, _startState, QuintParser.RULE_expr); - this.state = 592; + this.state = 599; if (!(this.precpred(this._ctx, 20))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 20)"); } - this.state = 593; + this.state = 600; this.match(QuintParser.ASGN); - this.state = 594; + this.state = 601; this.expr(21); const m = "QNT006: unexpected '=', did you mean '=='?" @@ -2401,13 +2415,13 @@ export class QuintParser extends Parser { { _localctx = new AndContext(new ExprContext(_parentctx, _parentState)); this.pushNewRecursionContext(_localctx, _startState, QuintParser.RULE_expr); - this.state = 597; + this.state = 604; if (!(this.precpred(this._ctx, 18))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 18)"); } - this.state = 598; + this.state = 605; this.match(QuintParser.AND); - this.state = 599; + this.state = 606; this.expr(19); } break; @@ -2416,13 +2430,13 @@ export class QuintParser extends Parser { { _localctx = new OrContext(new ExprContext(_parentctx, _parentState)); this.pushNewRecursionContext(_localctx, _startState, QuintParser.RULE_expr); - this.state = 600; + this.state = 607; if (!(this.precpred(this._ctx, 16))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 16)"); } - this.state = 601; + this.state = 608; this.match(QuintParser.OR); - this.state = 602; + this.state = 609; this.expr(17); } break; @@ -2431,13 +2445,13 @@ export class QuintParser extends Parser { { _localctx = new IffContext(new ExprContext(_parentctx, _parentState)); this.pushNewRecursionContext(_localctx, _startState, QuintParser.RULE_expr); - this.state = 603; + this.state = 610; if (!(this.precpred(this._ctx, 15))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 15)"); } - this.state = 604; + this.state = 611; this.match(QuintParser.IFF); - this.state = 605; + this.state = 612; this.expr(16); } break; @@ -2446,13 +2460,13 @@ export class QuintParser extends Parser { { _localctx = new ImpliesContext(new ExprContext(_parentctx, _parentState)); this.pushNewRecursionContext(_localctx, _startState, QuintParser.RULE_expr); - this.state = 606; + this.state = 613; if (!(this.precpred(this._ctx, 14))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 14)"); } - this.state = 607; + this.state = 614; this.match(QuintParser.IMPLIES); - this.state = 608; + this.state = 615; this.expr(15); } break; @@ -2461,13 +2475,13 @@ export class QuintParser extends Parser { { _localctx = new PairContext(new ExprContext(_parentctx, _parentState)); this.pushNewRecursionContext(_localctx, _startState, QuintParser.RULE_expr); - this.state = 609; + this.state = 616; if (!(this.precpred(this._ctx, 8))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 8)"); } - this.state = 610; + this.state = 617; this.match(QuintParser.T__23); - this.state = 611; + this.state = 618; this.expr(9); } break; @@ -2476,32 +2490,32 @@ export class QuintParser extends Parser { { _localctx = new DotCallContext(new ExprContext(_parentctx, _parentState)); this.pushNewRecursionContext(_localctx, _startState, QuintParser.RULE_expr); - this.state = 612; + this.state = 619; if (!(this.precpred(this._ctx, 30))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 30)"); } - this.state = 613; + this.state = 620; this.match(QuintParser.T__19); - this.state = 614; + this.state = 621; this.nameAfterDot(); - this.state = 620; + this.state = 627; this._errHandler.sync(this); switch ( this.interpreter.adaptivePredict(this._input, 64, this._ctx) ) { case 1: { - this.state = 615; + this.state = 622; this.match(QuintParser.LPAREN); - this.state = 617; + this.state = 624; this._errHandler.sync(this); _la = this._input.LA(1); - if (((((_la - 2)) & ~0x1F) === 0 && ((1 << (_la - 2)) & ((1 << (QuintParser.T__1 - 2)) | (1 << (QuintParser.T__11 - 2)) | (1 << (QuintParser.T__12 - 2)) | (1 << (QuintParser.T__13 - 2)) | (1 << (QuintParser.T__14 - 2)) | (1 << (QuintParser.T__15 - 2)) | (1 << (QuintParser.T__16 - 2)) | (1 << (QuintParser.T__17 - 2)) | (1 << (QuintParser.T__25 - 2)) | (1 << (QuintParser.T__32 - 2)))) !== 0) || ((((_la - 34)) & ~0x1F) === 0 && ((1 << (_la - 34)) & ((1 << (QuintParser.T__33 - 34)) | (1 << (QuintParser.T__34 - 34)) | (1 << (QuintParser.T__36 - 34)) | (1 << (QuintParser.STRING - 34)) | (1 << (QuintParser.BOOL - 34)) | (1 << (QuintParser.INT - 34)) | (1 << (QuintParser.AND - 34)) | (1 << (QuintParser.OR - 34)) | (1 << (QuintParser.IFF - 34)) | (1 << (QuintParser.IMPLIES - 34)) | (1 << (QuintParser.SET - 34)) | (1 << (QuintParser.LIST - 34)) | (1 << (QuintParser.MAP - 34)) | (1 << (QuintParser.MINUS - 34)) | (1 << (QuintParser.LPAREN - 34)) | (1 << (QuintParser.IDENTIFIER - 34)))) !== 0)) { + if (((((_la - 2)) & ~0x1F) === 0 && ((1 << (_la - 2)) & ((1 << (QuintParser.T__1 - 2)) | (1 << (QuintParser.T__11 - 2)) | (1 << (QuintParser.T__12 - 2)) | (1 << (QuintParser.T__13 - 2)) | (1 << (QuintParser.T__14 - 2)) | (1 << (QuintParser.T__15 - 2)) | (1 << (QuintParser.T__16 - 2)) | (1 << (QuintParser.T__17 - 2)) | (1 << (QuintParser.T__25 - 2)) | (1 << (QuintParser.T__32 - 2)))) !== 0) || ((((_la - 34)) & ~0x1F) === 0 && ((1 << (_la - 34)) & ((1 << (QuintParser.T__33 - 34)) | (1 << (QuintParser.T__34 - 34)) | (1 << (QuintParser.T__36 - 34)) | (1 << (QuintParser.STRING - 34)) | (1 << (QuintParser.BOOL - 34)) | (1 << (QuintParser.INT - 34)) | (1 << (QuintParser.AND - 34)) | (1 << (QuintParser.OR - 34)) | (1 << (QuintParser.IFF - 34)) | (1 << (QuintParser.IMPLIES - 34)) | (1 << (QuintParser.SET - 34)) | (1 << (QuintParser.LIST - 34)) | (1 << (QuintParser.MAP - 34)) | (1 << (QuintParser.MATCH - 34)) | (1 << (QuintParser.MINUS - 34)) | (1 << (QuintParser.LPAREN - 34)) | (1 << (QuintParser.IDENTIFIER - 34)))) !== 0)) { { - this.state = 616; + this.state = 623; this.argList(); } } - this.state = 619; + this.state = 626; this.match(QuintParser.RPAREN); } break; @@ -2513,68 +2527,190 @@ export class QuintParser extends Parser { { _localctx = new ListAppContext(new ExprContext(_parentctx, _parentState)); this.pushNewRecursionContext(_localctx, _startState, QuintParser.RULE_expr); - this.state = 622; + this.state = 629; if (!(this.precpred(this._ctx, 27))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 27)"); } - this.state = 623; + this.state = 630; this.match(QuintParser.T__25); - this.state = 624; + this.state = 631; this.expr(0); - this.state = 625; + this.state = 632; this.match(QuintParser.T__26); } break; - - case 13: - { - _localctx = new MatchContext(new ExprContext(_parentctx, _parentState)); - this.pushNewRecursionContext(_localctx, _startState, QuintParser.RULE_expr); - this.state = 627; - if (!(this.precpred(this._ctx, 13))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 13)"); - } - this.state = 628; - this.match(QuintParser.MATCH); - this.state = 636; - this._errHandler.sync(this); - _alt = 1; - do { - switch (_alt) { - case 1: - { - { - this.state = 629; - this.match(QuintParser.T__10); - this.state = 630; - this.match(QuintParser.STRING); - this.state = 631; - this.match(QuintParser.T__4); - this.state = 632; - this.parameter(); - this.state = 633; - this.match(QuintParser.T__24); - this.state = 634; - this.expr(0); - } - } - break; - default: - throw new NoViableAltException(this); - } - this.state = 638; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 65, this._ctx); - } while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER); - } - break; } } } - this.state = 644; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 67, this._ctx); + this.state = 638; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 66, this._ctx); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.unrollRecursionContexts(_parentctx); + } + return _localctx; + } + // @RuleVersion(0) + public matchSumExpr(): MatchSumExprContext { + let _localctx: MatchSumExprContext = new MatchSumExprContext(this._ctx, this.state); + this.enterRule(_localctx, 42, QuintParser.RULE_matchSumExpr); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 639; + this.match(QuintParser.MATCH); + this.state = 640; + this.expr(0); + this.state = 641; + this.match(QuintParser.T__1); + this.state = 643; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === QuintParser.T__10) { + { + this.state = 642; + this.match(QuintParser.T__10); + } + } + + this.state = 645; + _localctx._matchSumCase = this.matchSumCase(); + _localctx._matchCase.push(_localctx._matchSumCase); + this.state = 650; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === QuintParser.T__10) { + { + { + this.state = 646; + this.match(QuintParser.T__10); + this.state = 647; + _localctx._matchSumCase = this.matchSumCase(); + _localctx._matchCase.push(_localctx._matchSumCase); + } + } + this.state = 652; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 653; + this.match(QuintParser.T__2); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public matchSumCase(): MatchSumCaseContext { + let _localctx: MatchSumCaseContext = new MatchSumCaseContext(this._ctx, this.state); + this.enterRule(_localctx, 44, QuintParser.RULE_matchSumCase); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 657; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case QuintParser.IDENTIFIER: + { + this.state = 655; + _localctx._variantMatch = this.matchSumVariant(); + } + break; + case QuintParser.T__36: + { + this.state = 656; + _localctx._wildCardMatch = this.match(QuintParser.T__36); + } + break; + default: + throw new NoViableAltException(this); + } + this.state = 659; + this.match(QuintParser.T__24); + this.state = 660; + this.expr(0); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public matchSumVariant(): MatchSumVariantContext { + let _localctx: MatchSumVariantContext = new MatchSumVariantContext(this._ctx, this.state); + this.enterRule(_localctx, 46, QuintParser.RULE_matchSumVariant); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + { + this.state = 662; + _localctx._variantLabel = this.simpleId("variant label"); + } + this.state = 669; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === QuintParser.LPAREN) { + { + this.state = 663; + this.match(QuintParser.LPAREN); + this.state = 666; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case QuintParser.IDENTIFIER: + { + this.state = 664; + _localctx._variantParam = this.simpleId("match case parameter"); + } + break; + case QuintParser.T__36: + { + this.state = 665; + this.match(QuintParser.T__36); + } + break; + default: + throw new NoViableAltException(this); + } + this.state = 668; + this.match(QuintParser.RPAREN); + } } + } } catch (re) { @@ -2587,24 +2723,24 @@ export class QuintParser extends Parser { } } finally { - this.unrollRecursionContexts(_parentctx); + this.exitRule(); } return _localctx; } // @RuleVersion(0) public declarationOrExpr(): DeclarationOrExprContext { let _localctx: DeclarationOrExprContext = new DeclarationOrExprContext(this._ctx, this.state); - this.enterRule(_localctx, 42, QuintParser.RULE_declarationOrExpr); + this.enterRule(_localctx, 48, QuintParser.RULE_declarationOrExpr); try { - this.state = 654; + this.state = 680; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 68, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 72, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 645; + this.state = 671; this.declaration(); - this.state = 646; + this.state = 672; this.match(QuintParser.EOF); } break; @@ -2612,9 +2748,9 @@ export class QuintParser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 648; + this.state = 674; this.expr(0); - this.state = 649; + this.state = 675; this.match(QuintParser.EOF); } break; @@ -2622,9 +2758,9 @@ export class QuintParser extends Parser { case 3: this.enterOuterAlt(_localctx, 3); { - this.state = 651; + this.state = 677; this.match(QuintParser.DOCCOMMENT); - this.state = 652; + this.state = 678; this.match(QuintParser.EOF); } break; @@ -2632,7 +2768,7 @@ export class QuintParser extends Parser { case 4: this.enterOuterAlt(_localctx, 4); { - this.state = 653; + this.state = 679; this.match(QuintParser.EOF); } break; @@ -2655,15 +2791,15 @@ export class QuintParser extends Parser { // @RuleVersion(0) public lambda(): LambdaContext { let _localctx: LambdaContext = new LambdaContext(this._ctx, this.state); - this.enterRule(_localctx, 44, QuintParser.RULE_lambda); + this.enterRule(_localctx, 50, QuintParser.RULE_lambda); try { - this.state = 658; + this.state = 684; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 69, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 73, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 656; + this.state = 682; this.lambdaUnsugared(); } break; @@ -2671,7 +2807,7 @@ export class QuintParser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 657; + this.state = 683; this.lambdaTupleSugar(); } break; @@ -2694,52 +2830,52 @@ export class QuintParser extends Parser { // @RuleVersion(0) public lambdaUnsugared(): LambdaUnsugaredContext { let _localctx: LambdaUnsugaredContext = new LambdaUnsugaredContext(this._ctx, this.state); - this.enterRule(_localctx, 46, QuintParser.RULE_lambdaUnsugared); + this.enterRule(_localctx, 52, QuintParser.RULE_lambdaUnsugared); let _la: number; try { - this.state = 677; + this.state = 703; this._errHandler.sync(this); switch (this._input.LA(1)) { case QuintParser.T__36: case QuintParser.IDENTIFIER: this.enterOuterAlt(_localctx, 1); { - this.state = 660; + this.state = 686; this.parameter(); - this.state = 661; + this.state = 687; this.match(QuintParser.T__24); - this.state = 662; + this.state = 688; this.expr(0); } break; case QuintParser.LPAREN: this.enterOuterAlt(_localctx, 2); { - this.state = 664; + this.state = 690; this.match(QuintParser.LPAREN); - this.state = 665; + this.state = 691; this.parameter(); - this.state = 670; + this.state = 696; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === QuintParser.T__7) { { { - this.state = 666; + this.state = 692; this.match(QuintParser.T__7); - this.state = 667; + this.state = 693; this.parameter(); } } - this.state = 672; + this.state = 698; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 673; + this.state = 699; this.match(QuintParser.RPAREN); - this.state = 674; + this.state = 700; this.match(QuintParser.T__24); - this.state = 675; + this.state = 701; this.expr(0); } break; @@ -2764,40 +2900,40 @@ export class QuintParser extends Parser { // @RuleVersion(0) public lambdaTupleSugar(): LambdaTupleSugarContext { let _localctx: LambdaTupleSugarContext = new LambdaTupleSugarContext(this._ctx, this.state); - this.enterRule(_localctx, 48, QuintParser.RULE_lambdaTupleSugar); + this.enterRule(_localctx, 54, QuintParser.RULE_lambdaTupleSugar); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 679; + this.state = 705; this.match(QuintParser.LPAREN); - this.state = 680; + this.state = 706; this.match(QuintParser.LPAREN); - this.state = 681; + this.state = 707; this.parameter(); - this.state = 684; + this.state = 710; this._errHandler.sync(this); _la = this._input.LA(1); do { { { - this.state = 682; + this.state = 708; this.match(QuintParser.T__7); - this.state = 683; + this.state = 709; this.parameter(); } } - this.state = 686; + this.state = 712; this._errHandler.sync(this); _la = this._input.LA(1); } while (_la === QuintParser.T__7); - this.state = 688; + this.state = 714; this.match(QuintParser.RPAREN); - this.state = 689; + this.state = 715; this.match(QuintParser.RPAREN); - this.state = 690; + this.state = 716; this.match(QuintParser.T__24); - this.state = 691; + this.state = 717; this.expr(0); } } @@ -2818,22 +2954,22 @@ export class QuintParser extends Parser { // @RuleVersion(0) public identOrHole(): IdentOrHoleContext { let _localctx: IdentOrHoleContext = new IdentOrHoleContext(this._ctx, this.state); - this.enterRule(_localctx, 50, QuintParser.RULE_identOrHole); + this.enterRule(_localctx, 56, QuintParser.RULE_identOrHole); try { - this.state = 695; + this.state = 721; this._errHandler.sync(this); switch (this._input.LA(1)) { case QuintParser.T__36: this.enterOuterAlt(_localctx, 1); { - this.state = 693; + this.state = 719; this.match(QuintParser.T__36); } break; case QuintParser.IDENTIFIER: this.enterOuterAlt(_localctx, 2); { - this.state = 694; + this.state = 720; this.qualId(); } break; @@ -2858,11 +2994,11 @@ export class QuintParser extends Parser { // @RuleVersion(0) public parameter(): ParameterContext { let _localctx: ParameterContext = new ParameterContext(this._ctx, this.state); - this.enterRule(_localctx, 52, QuintParser.RULE_parameter); + this.enterRule(_localctx, 58, QuintParser.RULE_parameter); try { this.enterOuterAlt(_localctx, 1); { - this.state = 697; + this.state = 723; this.identOrHole(); } } @@ -2883,22 +3019,22 @@ export class QuintParser extends Parser { // @RuleVersion(0) public identOrStar(): IdentOrStarContext { let _localctx: IdentOrStarContext = new IdentOrStarContext(this._ctx, this.state); - this.enterRule(_localctx, 54, QuintParser.RULE_identOrStar); + this.enterRule(_localctx, 60, QuintParser.RULE_identOrStar); try { - this.state = 701; + this.state = 727; this._errHandler.sync(this); switch (this._input.LA(1)) { case QuintParser.MUL: this.enterOuterAlt(_localctx, 1); { - this.state = 699; + this.state = 725; this.match(QuintParser.MUL); } break; case QuintParser.IDENTIFIER: this.enterOuterAlt(_localctx, 2); { - this.state = 700; + this.state = 726; this.qualId(); } break; @@ -2923,26 +3059,26 @@ export class QuintParser extends Parser { // @RuleVersion(0) public argList(): ArgListContext { let _localctx: ArgListContext = new ArgListContext(this._ctx, this.state); - this.enterRule(_localctx, 56, QuintParser.RULE_argList); + this.enterRule(_localctx, 62, QuintParser.RULE_argList); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 703; + this.state = 729; this.expr(0); - this.state = 708; + this.state = 734; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === QuintParser.T__7) { { { - this.state = 704; + this.state = 730; this.match(QuintParser.T__7); - this.state = 705; + this.state = 731; this.expr(0); } } - this.state = 710; + this.state = 736; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -2965,28 +3101,28 @@ export class QuintParser extends Parser { // @RuleVersion(0) public recElem(): RecElemContext { let _localctx: RecElemContext = new RecElemContext(this._ctx, this.state); - this.enterRule(_localctx, 58, QuintParser.RULE_recElem); + this.enterRule(_localctx, 64, QuintParser.RULE_recElem); try { - this.state = 717; + this.state = 743; this._errHandler.sync(this); switch (this._input.LA(1)) { case QuintParser.IDENTIFIER: this.enterOuterAlt(_localctx, 1); { - this.state = 711; + this.state = 737; this.simpleId("record"); - this.state = 712; + this.state = 738; this.match(QuintParser.T__4); - this.state = 713; + this.state = 739; this.expr(0); } break; case QuintParser.T__37: this.enterOuterAlt(_localctx, 2); { - this.state = 715; + this.state = 741; this.match(QuintParser.T__37); - this.state = 716; + this.state = 742; this.expr(0); } break; @@ -3011,16 +3147,16 @@ export class QuintParser extends Parser { // @RuleVersion(0) public normalCallName(): NormalCallNameContext { let _localctx: NormalCallNameContext = new NormalCallNameContext(this._ctx, this.state); - this.enterRule(_localctx, 60, QuintParser.RULE_normalCallName); + this.enterRule(_localctx, 66, QuintParser.RULE_normalCallName); let _la: number; try { - this.state = 721; + this.state = 747; this._errHandler.sync(this); switch (this._input.LA(1)) { case QuintParser.IDENTIFIER: this.enterOuterAlt(_localctx, 1); { - this.state = 719; + this.state = 745; this.qualId(); } break; @@ -3033,7 +3169,7 @@ export class QuintParser extends Parser { case QuintParser.MAP: this.enterOuterAlt(_localctx, 2); { - this.state = 720; + this.state = 746; _localctx._op = this._input.LT(1); _la = this._input.LA(1); if (!(((((_la - 43)) & ~0x1F) === 0 && ((1 << (_la - 43)) & ((1 << (QuintParser.AND - 43)) | (1 << (QuintParser.OR - 43)) | (1 << (QuintParser.IFF - 43)) | (1 << (QuintParser.IMPLIES - 43)) | (1 << (QuintParser.SET - 43)) | (1 << (QuintParser.LIST - 43)) | (1 << (QuintParser.MAP - 43)))) !== 0))) { @@ -3069,16 +3205,16 @@ export class QuintParser extends Parser { // @RuleVersion(0) public nameAfterDot(): NameAfterDotContext { let _localctx: NameAfterDotContext = new NameAfterDotContext(this._ctx, this.state); - this.enterRule(_localctx, 62, QuintParser.RULE_nameAfterDot); + this.enterRule(_localctx, 68, QuintParser.RULE_nameAfterDot); let _la: number; try { - this.state = 725; + this.state = 751; this._errHandler.sync(this); switch (this._input.LA(1)) { case QuintParser.IDENTIFIER: this.enterOuterAlt(_localctx, 1); { - this.state = 723; + this.state = 749; this.qualId(); } break; @@ -3088,7 +3224,7 @@ export class QuintParser extends Parser { case QuintParser.IMPLIES: this.enterOuterAlt(_localctx, 2); { - this.state = 724; + this.state = 750; _localctx._op = this._input.LT(1); _la = this._input.LA(1); if (!(((((_la - 43)) & ~0x1F) === 0 && ((1 << (_la - 43)) & ((1 << (QuintParser.AND - 43)) | (1 << (QuintParser.OR - 43)) | (1 << (QuintParser.IFF - 43)) | (1 << (QuintParser.IMPLIES - 43)))) !== 0))) { @@ -3124,12 +3260,12 @@ export class QuintParser extends Parser { // @RuleVersion(0) public operator(): OperatorContext { let _localctx: OperatorContext = new OperatorContext(this._ctx, this.state); - this.enterRule(_localctx, 64, QuintParser.RULE_operator); + this.enterRule(_localctx, 70, QuintParser.RULE_operator); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 727; + this.state = 753; _la = this._input.LA(1); if (!(((((_la - 31)) & ~0x1F) === 0 && ((1 << (_la - 31)) & ((1 << (QuintParser.T__30 - 31)) | (1 << (QuintParser.AND - 31)) | (1 << (QuintParser.OR - 31)) | (1 << (QuintParser.IFF - 31)) | (1 << (QuintParser.IMPLIES - 31)) | (1 << (QuintParser.PLUS - 31)) | (1 << (QuintParser.MINUS - 31)) | (1 << (QuintParser.MUL - 31)) | (1 << (QuintParser.DIV - 31)) | (1 << (QuintParser.MOD - 31)) | (1 << (QuintParser.GT - 31)) | (1 << (QuintParser.LT - 31)) | (1 << (QuintParser.GE - 31)) | (1 << (QuintParser.LE - 31)) | (1 << (QuintParser.NE - 31)) | (1 << (QuintParser.EQ - 31)))) !== 0))) { this._errHandler.recoverInline(this); @@ -3160,12 +3296,12 @@ export class QuintParser extends Parser { // @RuleVersion(0) public literal(): LiteralContext { let _localctx: LiteralContext = new LiteralContext(this._ctx, this.state); - this.enterRule(_localctx, 66, QuintParser.RULE_literal); + this.enterRule(_localctx, 72, QuintParser.RULE_literal); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 729; + this.state = 755; _la = this._input.LA(1); if (!(((((_la - 40)) & ~0x1F) === 0 && ((1 << (_la - 40)) & ((1 << (QuintParser.STRING - 40)) | (1 << (QuintParser.BOOL - 40)) | (1 << (QuintParser.INT - 40)))) !== 0))) { this._errHandler.recoverInline(this); @@ -3196,30 +3332,30 @@ export class QuintParser extends Parser { // @RuleVersion(0) public qualId(): QualIdContext { let _localctx: QualIdContext = new QualIdContext(this._ctx, this.state); - this.enterRule(_localctx, 68, QuintParser.RULE_qualId); + this.enterRule(_localctx, 74, QuintParser.RULE_qualId); try { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 731; + this.state = 757; this.match(QuintParser.IDENTIFIER); - this.state = 736; + this.state = 762; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 79, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 83, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 732; + this.state = 758; this.match(QuintParser.T__38); - this.state = 733; + this.state = 759; this.match(QuintParser.IDENTIFIER); } } } - this.state = 738; + this.state = 764; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 79, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 83, this._ctx); } } } @@ -3240,15 +3376,15 @@ export class QuintParser extends Parser { // @RuleVersion(0) public simpleId(context: string): SimpleIdContext { let _localctx: SimpleIdContext = new SimpleIdContext(this._ctx, this.state, context); - this.enterRule(_localctx, 70, QuintParser.RULE_simpleId); + this.enterRule(_localctx, 76, QuintParser.RULE_simpleId); try { - this.state = 743; + this.state = 769; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 80, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 84, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 739; + this.state = 765; this.match(QuintParser.IDENTIFIER); } break; @@ -3256,7 +3392,7 @@ export class QuintParser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 740; + this.state = 766; _localctx._qualId = this.qualId(); const err = quintErrorToString( @@ -3342,409 +3478,421 @@ export class QuintParser extends Parser { case 13: return this.precpred(this._ctx, 27); - - case 14: - return this.precpred(this._ctx, 13); } return true; } private static readonly _serializedATNSegments: number = 2; private static readonly _serializedATNSegment0: string = - "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x03G\u02EC\x04\x02" + + "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x03G\u0306\x04\x02" + "\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06\x04\x07" + "\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04\r\t\r\x04" + "\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04\x12\t\x12\x04" + "\x13\t\x13\x04\x14\t\x14\x04\x15\t\x15\x04\x16\t\x16\x04\x17\t\x17\x04" + "\x18\t\x18\x04\x19\t\x19\x04\x1A\t\x1A\x04\x1B\t\x1B\x04\x1C\t\x1C\x04" + "\x1D\t\x1D\x04\x1E\t\x1E\x04\x1F\t\x1F\x04 \t \x04!\t!\x04\"\t\"\x04#" + - "\t#\x04$\t$\x04%\t%\x03\x02\x06\x02L\n\x02\r\x02\x0E\x02M\x03\x02\x03" + - "\x02\x03\x03\x07\x03S\n\x03\f\x03\x0E\x03V\v\x03\x03\x03\x03\x03\x03\x03" + - "\x03\x03\x07\x03\\\n\x03\f\x03\x0E\x03_\v\x03\x03\x03\x03\x03\x03\x04" + - "\x07\x04d\n\x04\f\x04\x0E\x04g\v\x04\x03\x04\x03\x04\x03\x05\x03\x05\x03" + + "\t#\x04$\t$\x04%\t%\x04&\t&\x04\'\t\'\x04(\t(\x03\x02\x06\x02R\n\x02\r" + + "\x02\x0E\x02S\x03\x02\x03\x02\x03\x03\x07\x03Y\n\x03\f\x03\x0E\x03\\\v" + + "\x03\x03\x03\x03\x03\x03\x03\x03\x03\x07\x03b\n\x03\f\x03\x0E\x03e\v\x03" + + "\x03\x03\x03\x03\x03\x04\x07\x04j\n\x04\f\x04\x0E\x04m\v\x04\x03\x04\x03" + + "\x04\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03" + "\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03" + - "\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x05" + - "\x05\x7F\n\x05\x03\x06\x03\x06\x03\x06\x03\x06\x03\x06\x03\x06\x07\x06" + - "\x87\n\x06\f\x06\x0E\x06\x8A\v\x06\x05\x06\x8C\n\x06\x03\x06\x03\x06\x03" + - "\x06\x05\x06\x91\n\x06\x03\x06\x03\x06\x03\x06\x03\x06\x03\x06\x03\x06" + - "\x03\x06\x03\x06\x03\x06\x03\x06\x03\x06\x07\x06\x9E\n\x06\f\x06\x0E\x06" + - "\xA1\v\x06\x03\x06\x03\x06\x03\x06\x03\x06\x05\x06\xA7\n\x06\x03\x06\x03" + - "\x06\x05\x06\xAB\n\x06\x03\x06\x05\x06\xAE\n\x06\x03\x07\x03\x07\x03\x07" + - "\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x05\x07" + - "\xBB\n\x07\x03\x07\x03\x07\x03\x07\x07\x07\xC0\n\x07\f\x07\x0E\x07\xC3" + - "\v\x07\x05\x07\xC5\n\x07\x03\b\x03\b\x03\b\x03\b\x03\b\x05\b\xCC\n\b\x03" + - "\t\x03\t\x03\t\x03\t\x05\t\xD2\n\t\x03\t\x03\t\x03\t\x05\t\xD7\n\t\x03" + - "\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x05\n\xE2\n\n\x03\v" + - "\x03\v\x03\v\x03\v\x03\v\x03\v\x05\v\xEA\n\v\x03\v\x03\v\x03\v\x03\v\x05" + - "\v\xF0\n\v\x03\v\x03\v\x05\v\xF4\n\v\x05\v\xF6\n\v\x03\f\x03\f\x03\f\x03" + - "\f\x03\f\x03\f\x03\f\x03\f\x03\f\x05\f\u0101\n\f\x05\f\u0103\n\f\x03\r" + - "\x03\r\x03\r\x03\r\x03\r\x03\r\x03\r\x03\r\x03\r\x03\r\x03\r\x07\r\u0110" + - "\n\r\f\r\x0E\r\u0113\v\r\x03\r\x03\r\x03\r\x03\r\x03\r\x05\r\u011A\n\r" + - "\x03\r\x03\r\x03\r\x03\r\x03\r\x03\r\x03\r\x03\r\x03\r\x03\r\x03\r\x07" + - "\r\u0127\n\r\f\r\x0E\r\u012A\v\r\x03\r\x03\r\x03\r\x03\r\x03\r\x05\r\u0131" + - "\n\r\x05\r\u0133\n\r\x03\x0E\x03\x0E\x03\x0F\x03\x0F\x03\x10\x03\x10\x03" + - "\x11\x03\x11\x03\x12\x03\x12\x03\x12\x03\x12\x03\x12\x07\x12\u0142\n\x12" + - "\f\x12\x0E\x12\u0145\v\x12\x05\x12\u0147\n\x12\x03\x12\x05\x12\u014A\n" + - "\x12\x03\x12\x03\x12\x03\x12\x03\x12\x03\x12\x03\x12\x03\x12\x03\x12\x03" + + "\x05\x03\x05\x03\x05\x05\x05\x85\n\x05\x03\x06\x03\x06\x03\x06\x03\x06" + + "\x03\x06\x03\x06\x07\x06\x8D\n\x06\f\x06\x0E\x06\x90\v\x06\x05\x06\x92" + + "\n\x06\x03\x06\x03\x06\x03\x06\x05\x06\x97\n\x06\x03\x06\x03\x06\x03\x06" + + "\x03\x06\x03\x06\x03\x06\x03\x06\x03\x06\x03\x06\x03\x06\x03\x06\x07\x06" + + "\xA4\n\x06\f\x06\x0E\x06\xA7\v\x06\x03\x06\x03\x06\x03\x06\x03\x06\x05" + + "\x06\xAD\n\x06\x03\x06\x03\x06\x05\x06\xB1\n\x06\x03\x06\x05\x06\xB4\n" + + "\x06\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03" + + "\x07\x03\x07\x03\x07\x05\x07\xC1\n\x07\x03\x07\x03\x07\x03\x07\x07\x07" + + "\xC6\n\x07\f\x07\x0E\x07\xC9\v\x07\x05\x07\xCB\n\x07\x03\b\x03\b\x03\b" + + "\x03\b\x03\b\x05\b\xD2\n\b\x03\t\x03\t\x03\t\x03\t\x05\t\xD8\n\t\x03\t" + + "\x03\t\x03\t\x05\t\xDD\n\t\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03" + + "\n\x03\n\x05\n\xE8\n\n\x03\v\x03\v\x03\v\x03\v\x03\v\x03\v\x05\v\xF0\n" + + "\v\x03\v\x03\v\x03\v\x03\v\x05\v\xF6\n\v\x03\v\x03\v\x05\v\xFA\n\v\x05" + + "\v\xFC\n\v\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x05\f" + + "\u0107\n\f\x05\f\u0109\n\f\x03\r\x03\r\x03\r\x03\r\x03\r\x03\r\x03\r\x03" + + "\r\x03\r\x03\r\x03\r\x07\r\u0116\n\r\f\r\x0E\r\u0119\v\r\x03\r\x03\r\x03" + + "\r\x03\r\x03\r\x05\r\u0120\n\r\x03\r\x03\r\x03\r\x03\r\x03\r\x03\r\x03" + + "\r\x03\r\x03\r\x03\r\x03\r\x07\r\u012D\n\r\f\r\x0E\r\u0130\v\r\x03\r\x03" + + "\r\x03\r\x03\r\x03\r\x05\r\u0137\n\r\x05\r\u0139\n\r\x03\x0E\x03\x0E\x03" + + "\x0F\x03\x0F\x03\x10\x03\x10\x03\x11\x03\x11\x03\x12\x03\x12\x03\x12\x03" + + "\x12\x03\x12\x07\x12\u0148\n\x12\f\x12\x0E\x12\u014B\v\x12\x05\x12\u014D" + + "\n\x12\x03\x12\x05\x12\u0150\n\x12\x03\x12\x03\x12\x03\x12\x03\x12\x03" + "\x12\x03\x12\x03\x12\x03\x12\x03\x12\x03\x12\x03\x12\x03\x12\x03\x12\x03" + - "\x12\x03\x12\x07\x12\u015F\n\x12\f\x12\x0E\x12\u0162\v\x12\x03\x12\x05" + - "\x12\u0165\n\x12\x03\x12\x03\x12\x03\x12\x03\x12\x03\x12\x03\x12\x03\x12" + - "\x06\x12\u016E\n\x12\r\x12\x0E\x12\u016F\x03\x12\x03\x12\x03\x12\x03\x12" + - "\x03\x12\x03\x12\x03\x12\x03\x12\x05\x12\u017A\n\x12\x03\x12\x03\x12\x03" + - "\x12\x03\x12\x03\x12\x03\x12\x07\x12\u0182\n\x12\f\x12\x0E\x12\u0185\v" + - "\x12\x03\x13\x03\x13\x03\x13\x03\x13\x03\x13\x03\x13\x03\x13\x05\x13\u018E" + - "\n\x13\x03\x13\x05\x13\u0191\n\x13\x03\x13\x03\x13\x03\x14\x03\x14\x03" + - "\x14\x03\x14\x03\x14\x07\x14\u019A\n\x14\f\x14\x0E\x14\u019D\v\x14\x03" + - "\x14\x03\x14\x03\x14\x03\x14\x03\x14\x03\x14\x03\x14\x05\x14\u01A6\n\x14" + - "\x05\x14\u01A8\n\x14\x03\x14\x03\x14\x05\x14\u01AC\n\x14\x03\x15\x03\x15" + - "\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x05\x16\u01B5\n\x16\x03\x16\x03" + - "\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03" + - "\x16\x03\x16\x03\x16\x03\x16\x07\x16\u01C5\n\x16\f\x16\x0E\x16\u01C8\v" + - "\x16\x03\x16\x05\x16\u01CB\n\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16" + - "\x03\x16\x03\x16\x07\x16\u01D4\n\x16\f\x16\x0E\x16\u01D7\v\x16\x03\x16" + - "\x05\x16\u01DA\n\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03" + - "\x16\x07\x16\u01E3\n\x16\f\x16\x0E\x16\u01E6\v\x16\x03\x16\x05\x16\u01E9" + - "\n\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x07\x16" + - "\u01F2\n\x16\f\x16\x0E\x16\u01F5\v\x16\x03\x16\x05\x16\u01F8\n\x16\x03" + - "\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x05\x16\u0200\n\x16\x03\x16" + - "\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x07\x16\u0208\n\x16\f\x16\x0E" + - "\x16\u020B\v\x16\x03\x16\x05\x16\u020E\n\x16\x03\x16\x03\x16\x03\x16\x03" + - "\x16\x03\x16\x03\x16\x07\x16\u0216\n\x16\f\x16\x0E\x16\u0219\v\x16\x03" + - "\x16\x05\x16\u021C\n\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16" + - "\x07\x16\u0224\n\x16\f\x16\x0E\x16\u0227\v\x16\x05\x16\u0229\n\x16\x03" + - "\x16\x05\x16\u022C\n\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16" + - "\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16" + - "\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x05\x16" + - "\u0245\n\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03" + + "\x12\x03\x12\x03\x12\x03\x12\x03\x12\x03\x12\x07\x12\u0165\n\x12\f\x12" + + "\x0E\x12\u0168\v\x12\x03\x12\x05\x12\u016B\n\x12\x03\x12\x03\x12\x03\x12" + + "\x03\x12\x03\x12\x03\x12\x03\x12\x06\x12\u0174\n\x12\r\x12\x0E\x12\u0175" + + "\x03\x12\x03\x12\x03\x12\x03\x12\x03\x12\x03\x12\x03\x12\x03\x12\x05\x12" + + "\u0180\n\x12\x03\x12\x03\x12\x03\x12\x03\x12\x03\x12\x03\x12\x07\x12\u0188" + + "\n\x12\f\x12\x0E\x12\u018B\v\x12\x03\x13\x03\x13\x03\x13\x03\x13\x03\x13" + + "\x03\x13\x03\x13\x05\x13\u0194\n\x13\x03\x13\x05\x13\u0197\n\x13\x03\x13" + + "\x03\x13\x03\x14\x03\x14\x03\x14\x03\x14\x03\x14\x07\x14\u01A0\n\x14\f" + + "\x14\x0E\x14\u01A3\v\x14\x03\x14\x03\x14\x03\x14\x03\x14\x03\x14\x03\x14" + + "\x03\x14\x05\x14\u01AC\n\x14\x05\x14\u01AE\n\x14\x03\x14\x03\x14\x05\x14" + + "\u01B2\n\x14\x03\x15\x03\x15\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x05" + + "\x16\u01BB\n\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16" + + "\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x07\x16\u01CB" + + "\n\x16\f\x16\x0E\x16\u01CE\v\x16\x03\x16\x05\x16\u01D1\n\x16\x03\x16\x03" + + "\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x07\x16\u01DA\n\x16\f\x16" + + "\x0E\x16\u01DD\v\x16\x03\x16\x05\x16\u01E0\n\x16\x03\x16\x03\x16\x03\x16" + + "\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x07\x16\u01EA\n\x16\f\x16\x0E" + + "\x16\u01ED\v\x16\x03\x16\x05\x16\u01F0\n\x16\x03\x16\x03\x16\x03\x16\x03" + + "\x16\x03\x16\x03\x16\x03\x16\x07\x16\u01F9\n\x16\f\x16\x0E\x16\u01FC\v" + + "\x16\x03\x16\x05\x16\u01FF\n\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16" + + "\x03\x16\x05\x16\u0207\n\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03" + + "\x16\x07\x16\u020F\n\x16\f\x16\x0E\x16\u0212\v\x16\x03\x16\x05\x16\u0215" + + "\n\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x07\x16\u021D\n" + + "\x16\f\x16\x0E\x16\u0220\v\x16\x03\x16\x05\x16\u0223\n\x16\x03\x16\x03" + + "\x16\x03\x16\x03\x16\x03\x16\x03\x16\x07\x16\u022B\n\x16\f\x16\x0E\x16" + + "\u022E\v\x16\x05\x16\u0230\n\x16\x03\x16\x05\x16\u0233\n\x16\x03\x16\x03" + "\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03" + "\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03" + - "\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03" + - "\x16\x03\x16\x03\x16\x05\x16\u026C\n\x16\x03\x16\x05\x16\u026F\n\x16\x03" + - "\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03" + - "\x16\x03\x16\x03\x16\x03\x16\x03\x16\x06\x16\u027F\n\x16\r\x16\x0E\x16" + - "\u0280\x07\x16\u0283\n\x16\f\x16\x0E\x16\u0286\v\x16\x03\x17\x03\x17\x03" + - "\x17\x03\x17\x03\x17\x03\x17\x03\x17\x03\x17\x03\x17\x05\x17\u0291\n\x17" + - "\x03\x18\x03\x18\x05\x18\u0295\n\x18\x03\x19\x03\x19\x03\x19\x03\x19\x03" + - "\x19\x03\x19\x03\x19\x03\x19\x07\x19\u029F\n\x19\f\x19\x0E\x19\u02A2\v" + - "\x19\x03\x19\x03\x19\x03\x19\x03\x19\x05\x19\u02A8\n\x19\x03\x1A\x03\x1A" + - "\x03\x1A\x03\x1A\x03\x1A\x06\x1A\u02AF\n\x1A\r\x1A\x0E\x1A\u02B0\x03\x1A" + - "\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1B\x03\x1B\x05\x1B\u02BA\n\x1B\x03" + - "\x1C\x03\x1C\x03\x1D\x03\x1D\x05\x1D\u02C0\n\x1D\x03\x1E\x03\x1E\x03\x1E" + - "\x07\x1E\u02C5\n\x1E\f\x1E\x0E\x1E\u02C8\v\x1E\x03\x1F\x03\x1F\x03\x1F" + - "\x03\x1F\x03\x1F\x03\x1F\x05\x1F\u02D0\n\x1F\x03 \x03 \x05 \u02D4\n \x03" + - "!\x03!\x05!\u02D8\n!\x03\"\x03\"\x03#\x03#\x03$\x03$\x03$\x07$\u02E1\n" + - "$\f$\x0E$\u02E4\v$\x03%\x03%\x03%\x03%\x05%\u02EA\n%\x03%\x02\x02\x04" + - "\"*&\x02\x02\x04\x02\x06\x02\b\x02\n\x02\f\x02\x0E\x02\x10\x02\x12\x02" + - "\x14\x02\x16\x02\x18\x02\x1A\x02\x1C\x02\x1E\x02 \x02\"\x02$\x02&\x02" + - "(\x02*\x02,\x02.\x020\x022\x024\x026\x028\x02:\x02<\x02>\x02@\x02B\x02" + - "D\x02F\x02H\x02\x02\t\x03\x0279\x03\x0256\x03\x02:?\x03\x02-3\x03\x02" + - "-0\x05\x02!!-05?\x03\x02*,\x02\u034E\x02K\x03\x02\x02\x02\x04T\x03\x02" + - "\x02\x02\x06e\x03\x02\x02\x02\b~\x03\x02\x02\x02\n\x80\x03\x02\x02\x02" + - "\f\xC4\x03\x02\x02\x02\x0E\xC6\x03\x02\x02\x02\x10\xCD\x03\x02\x02\x02" + - "\x12\xE1\x03\x02\x02\x02\x14\xF5\x03\x02\x02\x02\x16\u0102\x03\x02\x02" + - "\x02\x18\u0132\x03\x02\x02\x02\x1A\u0134\x03\x02\x02\x02\x1C\u0136\x03" + - "\x02\x02\x02\x1E\u0138\x03\x02\x02\x02 \u013A\x03\x02\x02\x02\"\u0179" + - "\x03\x02\x02\x02$\u0186\x03\x02\x02\x02&\u01AB\x03\x02\x02\x02(\u01AD" + - "\x03\x02\x02\x02*\u0244\x03\x02\x02\x02,\u0290\x03\x02\x02\x02.\u0294" + - "\x03\x02\x02\x020\u02A7\x03\x02\x02\x022\u02A9\x03\x02\x02\x024\u02B9" + - "\x03\x02\x02\x026\u02BB\x03\x02\x02\x028\u02BF\x03\x02\x02\x02:\u02C1" + - "\x03\x02\x02\x02<\u02CF\x03\x02\x02\x02>\u02D3\x03\x02\x02\x02@\u02D7" + - "\x03\x02\x02\x02B\u02D9\x03\x02\x02\x02D\u02DB\x03\x02\x02\x02F\u02DD" + - "\x03\x02\x02\x02H\u02E9\x03\x02\x02\x02JL\x05\x04\x03\x02KJ\x03\x02\x02" + - "\x02LM\x03\x02\x02\x02MK\x03\x02\x02\x02MN\x03\x02\x02\x02NO\x03\x02\x02" + - "\x02OP\x07\x02\x02\x03P\x03\x03\x02\x02\x02QS\x07D\x02\x02RQ\x03\x02\x02" + - "\x02SV\x03\x02\x02\x02TR\x03\x02\x02\x02TU\x03\x02\x02\x02UW\x03\x02\x02" + - "\x02VT\x03\x02\x02\x02WX\x07\x03\x02\x02XY\x05F$\x02Y]\x07\x04\x02\x02" + - "Z\\\x05\x06\x04\x02[Z\x03\x02\x02\x02\\_\x03\x02\x02\x02][\x03\x02\x02" + - "\x02]^\x03\x02\x02\x02^`\x03\x02\x02\x02_]\x03\x02\x02\x02`a\x07\x05\x02" + - "\x02a\x05\x03\x02\x02\x02bd\x07D\x02\x02cb\x03\x02\x02\x02dg\x03\x02\x02" + - "\x02ec\x03\x02\x02\x02ef\x03\x02\x02\x02fh\x03\x02\x02\x02ge\x03\x02\x02" + - "\x02hi\x05\b\x05\x02i\x07\x03\x02\x02\x02jk\x07\x06\x02\x02kl\x05F$\x02" + - "lm\x07\x07\x02\x02mn\x05\"\x12\x02n\x7F\x03\x02\x02\x02op\x07\b\x02\x02" + - "pq\x05F$\x02qr\x07\x07\x02\x02rs\x05\"\x12\x02s\x7F\x03\x02\x02\x02tu" + - "\x07\t\x02\x02uv\x054\x1B\x02vw\x07@\x02\x02wx\x05*\x16\x02x\x7F\x03\x02" + - "\x02\x02y\x7F\x05\x18\r\x02z\x7F\x05\n\x06\x02{\x7F\x05\f\x07\x02|\x7F" + - "\x05\x14\v\x02}\x7F\x05\x16\f\x02~j\x03\x02\x02\x02~o\x03\x02\x02\x02" + - "~t\x03\x02\x02\x02~y\x03\x02\x02\x02~z\x03\x02\x02\x02~{\x03\x02\x02\x02" + - "~|\x03\x02\x02\x02~}\x03\x02\x02\x02\x7F\t\x03\x02\x02\x02\x80\x81\x05" + - "\x12\n\x02\x81\xA6\x05> \x02\x82\x8B\x07A\x02\x02\x83\x88\x056\x1C\x02" + - "\x84\x85\x07\n\x02\x02\x85\x87\x056\x1C\x02\x86\x84\x03\x02\x02\x02\x87" + - "\x8A\x03\x02\x02\x02\x88\x86\x03\x02\x02\x02\x88\x89\x03\x02\x02\x02\x89" + - "\x8C\x03\x02\x02\x02\x8A\x88\x03\x02\x02\x02\x8B\x83\x03\x02\x02\x02\x8B" + - "\x8C\x03\x02\x02\x02\x8C\x8D\x03\x02\x02\x02\x8D\x90\x07B\x02\x02\x8E" + - "\x8F\x07\x07\x02\x02\x8F\x91\x05\"\x12\x02\x90\x8E\x03\x02\x02\x02\x90" + - "\x91\x03\x02\x02\x02\x91\xA7\x03\x02\x02\x02\x92\x93\x07\x07\x02\x02\x93" + - "\xA7\x05\"\x12\x02\x94\x95\x07A\x02\x02\x95\x96\x056\x1C\x02\x96\x97\x07" + - "\x07\x02\x02\x97\x9F\x05\"\x12\x02\x98\x99\x07\n\x02\x02\x99\x9A\x056" + - "\x1C\x02\x9A\x9B\x07\x07\x02\x02\x9B\x9C\x05\"\x12\x02\x9C\x9E\x03\x02" + - "\x02\x02\x9D\x98\x03\x02\x02\x02\x9E\xA1\x03\x02\x02\x02\x9F\x9D\x03\x02" + - "\x02\x02\x9F\xA0\x03\x02\x02\x02\xA0\xA2\x03\x02\x02\x02\xA1\x9F\x03\x02" + - "\x02\x02\xA2\xA3\x07B\x02\x02\xA3\xA4\x07\x07\x02\x02\xA4\xA5\x05\"\x12" + - "\x02\xA5\xA7\x03\x02\x02\x02\xA6\x82\x03\x02\x02\x02\xA6\x92\x03\x02\x02" + - "\x02\xA6\x94\x03\x02\x02\x02\xA6\xA7\x03\x02\x02\x02\xA7\xAA\x03\x02\x02" + - "\x02\xA8\xA9\x07@\x02\x02\xA9\xAB\x05*\x16\x02\xAA\xA8\x03\x02\x02\x02" + - "\xAA\xAB\x03\x02\x02\x02\xAB\xAD\x03\x02\x02\x02\xAC\xAE\x07\v\x02\x02" + - "\xAD\xAC\x03\x02\x02\x02\xAD\xAE\x03\x02\x02\x02\xAE\v\x03\x02\x02\x02" + - "\xAF\xB0\x07\f\x02\x02\xB0\xC5\x05F$\x02\xB1\xB2\x07\f\x02\x02\xB2\xB3" + - "\x05F$\x02\xB3\xB4\x07@\x02\x02\xB4\xB5\x05\"\x12\x02\xB5\xC5\x03\x02" + - "\x02\x02\xB6\xB7\x07\f\x02\x02\xB7\xB8\x05F$\x02\xB8\xBA\x07@\x02\x02" + - "\xB9\xBB\x07\r\x02\x02\xBA\xB9\x03\x02\x02\x02\xBA\xBB\x03\x02\x02\x02" + - "\xBB\xBC\x03\x02\x02\x02\xBC\xC1\x05\x0E\b\x02\xBD\xBE\x07\r\x02\x02\xBE" + - "\xC0\x05\x0E\b\x02\xBF\xBD\x03\x02\x02\x02\xC0\xC3\x03\x02\x02\x02\xC1" + - "\xBF\x03\x02\x02\x02\xC1\xC2\x03\x02\x02\x02\xC2\xC5\x03\x02\x02\x02\xC3" + - "\xC1\x03\x02\x02\x02\xC4\xAF\x03\x02\x02\x02\xC4\xB1\x03\x02\x02\x02\xC4" + - "\xB6\x03\x02\x02\x02\xC5\r\x03\x02\x02\x02\xC6\xCB\x05H%\x02\xC7\xC8\x07" + - "A\x02\x02\xC8\xC9\x05\"\x12\x02\xC9\xCA\x07B\x02\x02\xCA\xCC\x03\x02\x02" + - "\x02\xCB\xC7\x03\x02\x02\x02\xCB\xCC\x03\x02\x02\x02\xCC\x0F\x03\x02\x02" + - "\x02\xCD\xCE\x07\x0E\x02\x02\xCE\xD1\x05F$\x02\xCF\xD0\x07\x07\x02\x02" + - "\xD0\xD2\x05\"\x12\x02\xD1\xCF\x03\x02\x02\x02\xD1\xD2\x03\x02\x02\x02" + - "\xD2\xD3\x03\x02\x02\x02\xD3\xD4\x07@\x02\x02\xD4\xD6\x05*\x16\x02\xD5" + - "\xD7\x07\v\x02\x02\xD6\xD5\x03\x02\x02\x02\xD6\xD7\x03\x02\x02\x02\xD7" + - "\x11\x03\x02\x02\x02\xD8\xE2\x07\x0F\x02\x02\xD9\xE2\x07\x10\x02\x02\xDA" + - "\xDB\x07\x11\x02\x02\xDB\xE2\x07\x0F\x02\x02\xDC\xDD\x07\x11\x02\x02\xDD" + - "\xE2\x07\x10\x02\x02\xDE\xE2\x07\x12\x02\x02\xDF\xE2\x07\x13\x02\x02\xE0" + - "\xE2\x07\x14\x02\x02\xE1\xD8\x03\x02\x02\x02\xE1\xD9\x03\x02\x02\x02\xE1" + - "\xDA\x03\x02\x02\x02\xE1\xDC\x03\x02\x02\x02\xE1\xDE\x03\x02\x02\x02\xE1" + - "\xDF\x03\x02\x02\x02\xE1\xE0\x03\x02\x02\x02\xE2\x13\x03\x02\x02\x02\xE3" + - "\xE4\x07\x15\x02\x02\xE4\xE5\x05\x1C\x0F\x02\xE5\xE6\x07\x16\x02\x02\xE6" + - "\xE9\x058\x1D\x02\xE7\xE8\x07\x17\x02\x02\xE8\xEA\x05 \x11\x02\xE9\xE7" + - "\x03\x02\x02\x02\xE9\xEA\x03\x02\x02\x02\xEA\xF6\x03\x02\x02\x02\xEB\xEC" + - "\x07\x15\x02\x02\xEC\xEF\x05\x1C\x0F\x02\xED\xEE\x07\x18\x02\x02\xEE\xF0" + - "\x05\x1C\x0F\x02\xEF\xED\x03\x02\x02\x02\xEF\xF0\x03\x02\x02\x02\xF0\xF3" + - "\x03\x02\x02\x02\xF1\xF2\x07\x17\x02\x02\xF2\xF4\x05 \x11\x02\xF3\xF1" + - "\x03\x02\x02\x02\xF3\xF4\x03\x02\x02\x02\xF4\xF6\x03\x02\x02\x02\xF5\xE3" + - "\x03\x02\x02\x02\xF5\xEB\x03\x02\x02\x02\xF6\x15\x03\x02\x02\x02\xF7\xF8" + - "\x07\x19\x02\x02\xF8\xF9\x05\x1C\x0F\x02\xF9\xFA\x07\x16\x02\x02\xFA\xFB" + - "\x058\x1D\x02\xFB\u0103\x03\x02\x02\x02\xFC\xFD\x07\x19\x02\x02\xFD\u0100" + - "\x05\x1C\x0F\x02\xFE\xFF\x07\x18\x02\x02\xFF\u0101\x05\x1C\x0F\x02\u0100" + - "\xFE\x03\x02\x02\x02\u0100\u0101\x03\x02\x02\x02\u0101\u0103\x03\x02\x02" + - "\x02\u0102\xF7\x03\x02\x02\x02\u0102\xFC\x03\x02\x02\x02\u0103\x17\x03" + - "\x02\x02\x02\u0104\u0105\x07\x15\x02\x02\u0105\u0106\x05\x1A\x0E\x02\u0106" + - "\u0107\x07A\x02\x02\u0107\u0108\x05\x1C\x0F\x02\u0108\u0109\x07@\x02\x02" + - "\u0109\u0111\x05*\x16\x02\u010A\u010B\x07\n\x02\x02\u010B\u010C\x05\x1C" + - "\x0F\x02\u010C\u010D\x07@\x02\x02\u010D\u010E\x05*\x16\x02\u010E\u0110" + - "\x03\x02\x02\x02\u010F\u010A\x03\x02\x02\x02\u0110\u0113\x03\x02\x02\x02" + - "\u0111\u010F\x03\x02\x02\x02\u0111\u0112\x03\x02\x02\x02\u0112\u0114\x03" + - "\x02\x02\x02\u0113\u0111\x03\x02\x02\x02\u0114\u0115\x07B\x02\x02\u0115" + - "\u0116\x07\x16\x02\x02\u0116\u0119\x077\x02\x02\u0117\u0118\x07\x17\x02" + - "\x02\u0118\u011A\x05 \x11\x02\u0119\u0117\x03\x02\x02\x02\u0119\u011A" + - "\x03\x02\x02\x02\u011A\u0133\x03\x02\x02\x02\u011B\u011C\x07\x15\x02\x02" + - "\u011C\u011D\x05\x1A\x0E\x02\u011D\u011E\x07A\x02\x02\u011E\u011F\x05" + - "\x1C\x0F\x02\u011F\u0120\x07@\x02\x02\u0120\u0128\x05*\x16\x02\u0121\u0122" + - "\x07\n\x02\x02\u0122\u0123\x05\x1C\x0F\x02\u0123\u0124\x07@\x02\x02\u0124" + - "\u0125\x05*\x16\x02\u0125\u0127\x03\x02\x02\x02\u0126\u0121\x03\x02\x02" + - "\x02\u0127\u012A\x03\x02\x02\x02\u0128\u0126\x03\x02\x02\x02\u0128\u0129" + - "\x03\x02\x02\x02\u0129\u012B\x03\x02\x02\x02\u012A\u0128\x03\x02\x02\x02" + - "\u012B\u012C\x07B\x02\x02\u012C\u012D\x07\x18\x02\x02\u012D\u0130\x05" + - "\x1E\x10\x02\u012E\u012F\x07\x17\x02\x02\u012F\u0131\x05 \x11\x02\u0130" + - "\u012E\x03\x02\x02\x02\u0130\u0131\x03\x02\x02\x02\u0131\u0133\x03\x02" + - "\x02\x02\u0132\u0104\x03\x02\x02\x02\u0132\u011B\x03\x02\x02\x02\u0133" + - "\x19\x03\x02\x02\x02\u0134\u0135\x05F$\x02\u0135\x1B\x03\x02\x02\x02\u0136" + - "\u0137\x05F$\x02\u0137\x1D\x03\x02\x02\x02\u0138\u0139\x05F$\x02\u0139" + - "\x1F\x03\x02\x02\x02\u013A\u013B\x07*\x02\x02\u013B!\x03\x02\x02\x02\u013C" + - "\u013D\b\x12\x01\x02\u013D\u0146\x07A\x02\x02\u013E\u0143\x05\"\x12\x02" + - "\u013F\u0140\x07\n\x02\x02\u0140\u0142\x05\"\x12\x02\u0141\u013F\x03\x02" + - "\x02\x02\u0142\u0145\x03\x02\x02\x02\u0143\u0141\x03\x02\x02\x02\u0143" + - "\u0144\x03\x02\x02\x02\u0144\u0147\x03\x02\x02\x02\u0145\u0143\x03\x02" + - "\x02\x02\u0146\u013E\x03\x02\x02\x02\u0146\u0147\x03\x02\x02\x02\u0147" + - "\u0149\x03\x02\x02\x02\u0148\u014A\x07\n\x02\x02\u0149\u0148\x03\x02\x02" + - "\x02\u0149\u014A\x03\x02\x02\x02\u014A\u014B\x03\x02\x02\x02\u014B\u014C" + - "\x07B\x02\x02\u014C\u014D\x07\x1B\x02\x02\u014D\u017A\x05\"\x12\r\u014E" + - "\u014F\x071\x02\x02\u014F\u0150\x07\x1C\x02\x02\u0150\u0151\x05\"\x12" + - "\x02\u0151\u0152\x07\x1D\x02\x02\u0152\u017A\x03\x02\x02\x02\u0153\u0154" + - "\x072\x02\x02\u0154\u0155\x07\x1C\x02\x02\u0155\u0156\x05\"\x12\x02\u0156" + - "\u0157\x07\x1D\x02\x02\u0157\u017A\x03\x02\x02\x02\u0158\u0159\x07A\x02" + - "\x02\u0159\u015A\x05\"\x12\x02\u015A\u015B\x07\n\x02\x02\u015B\u0160\x05" + - "\"\x12\x02\u015C\u015D\x07\n\x02\x02\u015D\u015F\x05\"\x12\x02\u015E\u015C" + - "\x03\x02\x02\x02\u015F\u0162\x03\x02\x02\x02\u0160\u015E\x03\x02\x02\x02" + - "\u0160\u0161\x03\x02\x02\x02\u0161\u0164\x03\x02\x02\x02\u0162\u0160\x03" + - "\x02\x02\x02\u0163\u0165\x07\n\x02\x02\u0164\u0163\x03\x02\x02\x02\u0164" + - "\u0165\x03\x02\x02\x02\u0165\u0166\x03\x02\x02\x02\u0166\u0167\x07B\x02" + - "\x02\u0167\u017A\x03\x02\x02\x02\u0168\u0169\x07\x04\x02\x02\u0169\u016A" + - "\x05&\x14\x02\u016A\u016B\x07\x05\x02\x02\u016B\u017A\x03\x02\x02\x02" + - "\u016C\u016E\x05$\x13\x02\u016D\u016C\x03\x02\x02\x02\u016E\u016F\x03" + - "\x02\x02\x02\u016F\u016D\x03\x02\x02\x02\u016F\u0170\x03\x02\x02\x02\u0170" + - "\u017A\x03\x02\x02\x02\u0171\u017A\x07\x1E\x02\x02\u0172\u017A\x07\x1F" + - "\x02\x02\u0173\u017A\x07 \x02\x02\u0174\u017A\x05F$\x02\u0175\u0176\x07" + - "A\x02\x02\u0176\u0177\x05\"\x12\x02\u0177\u0178\x07B\x02\x02\u0178\u017A" + - "\x03\x02\x02\x02\u0179\u013C\x03\x02\x02\x02\u0179\u014E\x03\x02\x02\x02" + - "\u0179\u0153\x03\x02\x02\x02\u0179\u0158\x03\x02\x02\x02\u0179\u0168\x03" + - "\x02\x02\x02\u0179\u016D\x03\x02\x02\x02\u0179\u0171\x03\x02\x02\x02\u0179" + - "\u0172\x03\x02\x02\x02\u0179\u0173\x03\x02\x02\x02\u0179\u0174\x03\x02" + - "\x02\x02\u0179\u0175\x03\x02\x02\x02\u017A\u0183\x03\x02\x02\x02\u017B" + - "\u017C\f\x0F\x02\x02\u017C\u017D\x07\x1A\x02\x02\u017D\u0182\x05\"\x12" + - "\x0F\u017E\u017F\f\x0E\x02\x02\u017F\u0180\x07\x1B\x02\x02\u0180\u0182" + - "\x05\"\x12\x0E\u0181\u017B\x03\x02\x02\x02\u0181\u017E\x03\x02\x02\x02" + - "\u0182\u0185\x03\x02\x02\x02\u0183\u0181\x03\x02\x02\x02\u0183\u0184\x03" + - "\x02\x02\x02\u0184#\x03\x02\x02\x02\u0185\u0183\x03\x02\x02\x02\u0186" + - "\u0187\x07\r\x02\x02\u0187\u0188\x07\x04\x02\x02\u0188\u0189\x05F$\x02" + - "\u0189\u018A\x07\x07\x02\x02\u018A\u018D\x07*\x02\x02\u018B\u018C\x07" + - "\n\x02\x02\u018C\u018E\x05&\x14\x02\u018D\u018B\x03\x02\x02\x02\u018D" + - "\u018E\x03\x02\x02\x02\u018E\u0190\x03\x02\x02\x02\u018F\u0191\x07\n\x02" + - "\x02\u0190\u018F\x03\x02\x02\x02\u0190\u0191\x03\x02\x02\x02\u0191\u0192" + - "\x03\x02\x02\x02\u0192\u0193\x07\x05\x02\x02\u0193%\x03\x02\x02\x02\u0194" + - "\u0195\x05(\x15\x02\u0195\u0196\x07\x07\x02\x02\u0196\u0197\x05\"\x12" + - "\x02\u0197\u0198\x07\n\x02\x02\u0198\u019A\x03\x02\x02\x02\u0199\u0194" + - "\x03\x02\x02\x02\u019A\u019D\x03\x02\x02\x02\u019B\u0199\x03\x02\x02\x02" + - "\u019B\u019C\x03\x02\x02\x02\u019C\u01A7\x03\x02\x02\x02\u019D\u019B\x03" + - "\x02\x02\x02\u019E\u019F\x05(\x15\x02\u019F\u01A0\x07\x07\x02\x02\u01A0" + - "\u01A1\x05\"\x12\x02\u01A1\u01A5\x03\x02\x02\x02\u01A2\u01A6\x07\n\x02" + - "\x02\u01A3\u01A4\x07\r\x02\x02\u01A4\u01A6\x07C\x02\x02\u01A5\u01A2\x03" + - "\x02\x02\x02\u01A5\u01A3\x03\x02\x02\x02\u01A5\u01A6\x03\x02\x02\x02\u01A6" + - "\u01A8\x03\x02\x02\x02\u01A7\u019E\x03\x02\x02\x02\u01A7\u01A8\x03\x02" + - "\x02\x02\u01A8\u01AC\x03\x02\x02\x02\u01A9\u01AA\x07\r\x02\x02\u01AA\u01AC" + - "\x07C\x02\x02\u01AB\u019B\x03\x02\x02\x02\u01AB\u01A9\x03\x02\x02\x02" + - "\u01AC\'\x03\x02\x02\x02\u01AD\u01AE\x05H%\x02\u01AE)\x03\x02\x02\x02" + - "\u01AF\u01B0\b\x16\x01\x02\u01B0\u0245\x05.\x18\x02\u01B1\u01B2\x05> " + - "\x02\u01B2\u01B4\x07A\x02\x02\u01B3\u01B5\x05:\x1E\x02\u01B4\u01B3\x03" + - "\x02\x02\x02\u01B4\u01B5\x03\x02\x02\x02\u01B5\u01B6\x03\x02\x02\x02\u01B6" + - "\u01B7\x07B\x02\x02\u01B7\u0245\x03\x02\x02\x02\u01B8\u01B9\x076\x02\x02" + - "\u01B9\u0245\x05*\x16\x1B\u01BA\u01BB\x05F$\x02\u01BB\u01BC\x07\"\x02" + - "\x02\u01BC\u01BD\x07@\x02\x02\u01BD\u01BE\x05*\x16\x17\u01BE\u0245\x03" + - "\x02\x02\x02\u01BF\u01C0\x07-\x02\x02\u01C0\u01C1\x07\x04\x02\x02\u01C1" + - "\u01C6\x05*\x16\x02\u01C2\u01C3\x07\n\x02\x02\u01C3\u01C5\x05*\x16\x02" + - "\u01C4\u01C2\x03\x02\x02\x02\u01C5\u01C8\x03\x02\x02\x02\u01C6\u01C4\x03" + - "\x02\x02\x02\u01C6\u01C7\x03\x02\x02\x02\u01C7\u01CA\x03\x02\x02\x02\u01C8" + - "\u01C6\x03\x02\x02\x02\u01C9\u01CB\x07\n\x02\x02\u01CA\u01C9\x03\x02\x02" + - "\x02\u01CA\u01CB\x03\x02\x02\x02\u01CB\u01CC\x03\x02\x02\x02\u01CC\u01CD" + - "\x07\x05\x02\x02\u01CD\u0245\x03\x02\x02\x02\u01CE\u01CF\x07.\x02\x02" + - "\u01CF\u01D0\x07\x04\x02\x02\u01D0\u01D5\x05*\x16\x02\u01D1\u01D2\x07" + - "\n\x02\x02\u01D2\u01D4\x05*\x16\x02\u01D3\u01D1\x03\x02\x02\x02\u01D4" + - "\u01D7\x03\x02\x02\x02\u01D5\u01D3\x03\x02\x02\x02\u01D5\u01D6\x03\x02" + - "\x02\x02\u01D6\u01D9\x03\x02\x02\x02\u01D7\u01D5\x03\x02\x02\x02\u01D8" + - "\u01DA\x07\n\x02\x02\u01D9\u01D8\x03\x02\x02\x02\u01D9\u01DA\x03\x02\x02" + - "\x02\u01DA\u01DB\x03\x02\x02\x02\u01DB\u01DC\x07\x05\x02\x02\u01DC\u0245" + - "\x03\x02\x02\x02\u01DD\u01DE\x07#\x02\x02\u01DE\u01DF\x07\x04\x02\x02" + - "\u01DF\u01E4\x05*\x16\x02\u01E0\u01E1\x07\n\x02\x02\u01E1\u01E3\x05*\x16" + - "\x02\u01E2\u01E0\x03\x02\x02\x02\u01E3\u01E6\x03\x02\x02\x02\u01E4\u01E2" + - "\x03\x02\x02\x02\u01E4\u01E5\x03\x02\x02\x02\u01E5\u01E8\x03\x02\x02\x02" + - "\u01E6\u01E4\x03\x02\x02\x02\u01E7\u01E9\x07\n\x02\x02\u01E8\u01E7\x03" + - "\x02\x02\x02\u01E8\u01E9\x03\x02\x02\x02\u01E9\u01EA\x03\x02\x02\x02\u01EA" + - "\u01EB\x07\x05\x02\x02\u01EB\u0245\x03\x02\x02\x02\u01EC\u01ED\x07$\x02" + - "\x02\u01ED\u01EE\x07\x04\x02\x02\u01EE\u01F3\x05*\x16\x02\u01EF\u01F0" + - "\x07\n\x02\x02\u01F0\u01F2\x05*\x16\x02\u01F1\u01EF\x03\x02\x02\x02\u01F2" + - "\u01F5\x03\x02\x02\x02\u01F3\u01F1\x03\x02\x02\x02\u01F3\u01F4\x03\x02" + - "\x02\x02\u01F4\u01F7\x03\x02\x02\x02\u01F5\u01F3\x03\x02\x02\x02\u01F6" + - "\u01F8\x07\n\x02\x02\u01F7\u01F6\x03\x02\x02\x02\u01F7\u01F8\x03\x02\x02" + - "\x02\u01F8\u01F9\x03\x02\x02\x02\u01F9\u01FA\x07\x05\x02\x02"; + "\x16\x03\x16\x03\x16\x03\x16\x05\x16\u024C\n\x16\x03\x16\x03\x16\x03\x16" + + "\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16" + + "\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16" + + "\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16" + + "\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x05\x16\u0273" + + "\n\x16\x03\x16\x05\x16\u0276\n\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03" + + "\x16\x07\x16\u027D\n\x16\f\x16\x0E\x16\u0280\v\x16\x03\x17\x03\x17\x03" + + "\x17\x03\x17\x05\x17\u0286\n\x17\x03\x17\x03\x17\x03\x17\x07\x17\u028B" + + "\n\x17\f\x17\x0E\x17\u028E\v\x17\x03\x17\x03\x17\x03\x18\x03\x18\x05\x18" + + "\u0294\n\x18\x03\x18\x03\x18\x03\x18\x03\x19\x03\x19\x03\x19\x03\x19\x05" + + "\x19\u029D\n\x19\x03\x19\x05\x19\u02A0\n\x19\x03\x1A\x03\x1A\x03\x1A\x03" + + "\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x05\x1A\u02AB\n\x1A\x03\x1B" + + "\x03\x1B\x05\x1B\u02AF\n\x1B\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03" + + "\x1C\x03\x1C\x03\x1C\x07\x1C\u02B9\n\x1C\f\x1C\x0E\x1C\u02BC\v\x1C\x03" + + "\x1C\x03\x1C\x03\x1C\x03\x1C\x05\x1C\u02C2\n\x1C\x03\x1D\x03\x1D\x03\x1D" + + "\x03\x1D\x03\x1D\x06\x1D\u02C9\n\x1D\r\x1D\x0E\x1D\u02CA\x03\x1D\x03\x1D" + + "\x03\x1D\x03\x1D\x03\x1D\x03\x1E\x03\x1E\x05\x1E\u02D4\n\x1E\x03\x1F\x03" + + "\x1F\x03 \x03 \x05 \u02DA\n \x03!\x03!\x03!\x07!\u02DF\n!\f!\x0E!\u02E2" + + "\v!\x03\"\x03\"\x03\"\x03\"\x03\"\x03\"\x05\"\u02EA\n\"\x03#\x03#\x05" + + "#\u02EE\n#\x03$\x03$\x05$\u02F2\n$\x03%\x03%\x03&\x03&\x03\'\x03\'\x03" + + "\'\x07\'\u02FB\n\'\f\'\x0E\'\u02FE\v\'\x03(\x03(\x03(\x03(\x05(\u0304" + + "\n(\x03(\x02\x02\x04\"*)\x02\x02\x04\x02\x06\x02\b\x02\n\x02\f\x02\x0E" + + "\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1A\x02\x1C\x02\x1E\x02 " + + "\x02\"\x02$\x02&\x02(\x02*\x02,\x02.\x020\x022\x024\x026\x028\x02:\x02" + + "<\x02>\x02@\x02B\x02D\x02F\x02H\x02J\x02L\x02N\x02\x02\t\x03\x0279\x03" + + "\x0256\x03\x02:?\x03\x02-3\x03\x02-0\x05\x02!!-05?\x03\x02*,\x02\u0369" + + "\x02Q\x03\x02\x02\x02\x04Z\x03\x02\x02\x02\x06k\x03\x02\x02\x02\b\x84" + + "\x03\x02\x02\x02\n\x86\x03\x02\x02\x02\f\xCA\x03\x02\x02\x02\x0E\xCC\x03" + + "\x02\x02\x02\x10\xD3\x03\x02\x02\x02\x12\xE7\x03\x02\x02\x02\x14\xFB\x03" + + "\x02\x02\x02\x16\u0108\x03\x02\x02\x02\x18\u0138\x03\x02\x02\x02\x1A\u013A" + + "\x03\x02\x02\x02\x1C\u013C\x03\x02\x02\x02\x1E\u013E\x03\x02\x02\x02 " + + "\u0140\x03\x02\x02\x02\"\u017F\x03\x02\x02\x02$\u018C\x03\x02\x02\x02" + + "&\u01B1\x03\x02\x02\x02(\u01B3\x03\x02\x02\x02*\u024B\x03\x02\x02\x02" + + ",\u0281\x03\x02\x02\x02.\u0293\x03\x02\x02\x020\u0298\x03\x02\x02\x02" + + "2\u02AA\x03\x02\x02\x024\u02AE\x03\x02\x02\x026\u02C1\x03\x02\x02\x02" + + "8\u02C3\x03\x02\x02\x02:\u02D3\x03\x02\x02\x02<\u02D5\x03\x02\x02\x02" + + ">\u02D9\x03\x02\x02\x02@\u02DB\x03\x02\x02\x02B\u02E9\x03\x02\x02\x02" + + "D\u02ED\x03\x02\x02\x02F\u02F1\x03\x02\x02\x02H\u02F3\x03\x02\x02\x02" + + "J\u02F5\x03\x02\x02\x02L\u02F7\x03\x02\x02\x02N\u0303\x03\x02\x02\x02" + + "PR\x05\x04\x03\x02QP\x03\x02\x02\x02RS\x03\x02\x02\x02SQ\x03\x02\x02\x02" + + "ST\x03\x02\x02\x02TU\x03\x02\x02\x02UV\x07\x02\x02\x03V\x03\x03\x02\x02" + + "\x02WY\x07D\x02\x02XW\x03\x02\x02\x02Y\\\x03\x02\x02\x02ZX\x03\x02\x02" + + "\x02Z[\x03\x02\x02\x02[]\x03\x02\x02\x02\\Z\x03\x02\x02\x02]^\x07\x03" + + "\x02\x02^_\x05L\'\x02_c\x07\x04\x02\x02`b\x05\x06\x04\x02a`\x03\x02\x02" + + "\x02be\x03\x02\x02\x02ca\x03\x02\x02\x02cd\x03\x02\x02\x02df\x03\x02\x02" + + "\x02ec\x03\x02\x02\x02fg\x07\x05\x02\x02g\x05\x03\x02\x02\x02hj\x07D\x02" + + "\x02ih\x03\x02\x02\x02jm\x03\x02\x02\x02ki\x03\x02\x02\x02kl\x03\x02\x02" + + "\x02ln\x03\x02\x02\x02mk\x03\x02\x02\x02no\x05\b\x05\x02o\x07\x03\x02" + + "\x02\x02pq\x07\x06\x02\x02qr\x05L\'\x02rs\x07\x07\x02\x02st\x05\"\x12" + + "\x02t\x85\x03\x02\x02\x02uv\x07\b\x02\x02vw\x05L\'\x02wx\x07\x07\x02\x02" + + "xy\x05\"\x12\x02y\x85\x03\x02\x02\x02z{\x07\t\x02\x02{|\x05:\x1E\x02|" + + "}\x07@\x02\x02}~\x05*\x16\x02~\x85\x03\x02\x02\x02\x7F\x85\x05\x18\r\x02" + + "\x80\x85\x05\n\x06\x02\x81\x85\x05\f\x07\x02\x82\x85\x05\x14\v\x02\x83" + + "\x85\x05\x16\f\x02\x84p\x03\x02\x02\x02\x84u\x03\x02\x02\x02\x84z\x03" + + "\x02\x02\x02\x84\x7F\x03\x02\x02\x02\x84\x80\x03\x02\x02\x02\x84\x81\x03" + + "\x02\x02\x02\x84\x82\x03\x02\x02\x02\x84\x83\x03\x02\x02\x02\x85\t\x03" + + "\x02\x02\x02\x86\x87\x05\x12\n\x02\x87\xAC\x05D#\x02\x88\x91\x07A\x02" + + "\x02\x89\x8E\x05<\x1F\x02\x8A\x8B\x07\n\x02\x02\x8B\x8D\x05<\x1F\x02\x8C" + + "\x8A\x03\x02\x02\x02\x8D\x90\x03\x02\x02\x02\x8E\x8C\x03\x02\x02\x02\x8E" + + "\x8F\x03\x02\x02\x02\x8F\x92\x03\x02\x02\x02\x90\x8E\x03\x02\x02\x02\x91" + + "\x89\x03\x02\x02\x02\x91\x92\x03\x02\x02\x02\x92\x93\x03\x02\x02\x02\x93" + + "\x96\x07B\x02\x02\x94\x95\x07\x07\x02\x02\x95\x97\x05\"\x12\x02\x96\x94" + + "\x03\x02\x02\x02\x96\x97\x03\x02\x02\x02\x97\xAD\x03\x02\x02\x02\x98\x99" + + "\x07\x07\x02\x02\x99\xAD\x05\"\x12\x02\x9A\x9B\x07A\x02\x02\x9B\x9C\x05" + + "<\x1F\x02\x9C\x9D\x07\x07\x02\x02\x9D\xA5\x05\"\x12\x02\x9E\x9F\x07\n" + + "\x02\x02\x9F\xA0\x05<\x1F\x02\xA0\xA1\x07\x07\x02\x02\xA1\xA2\x05\"\x12" + + "\x02\xA2\xA4\x03\x02\x02\x02\xA3\x9E\x03\x02\x02\x02\xA4\xA7\x03\x02\x02" + + "\x02\xA5\xA3\x03\x02\x02\x02\xA5\xA6\x03\x02\x02\x02\xA6\xA8\x03\x02\x02" + + "\x02\xA7\xA5\x03\x02\x02\x02\xA8\xA9\x07B\x02\x02\xA9\xAA\x07\x07\x02" + + "\x02\xAA\xAB\x05\"\x12\x02\xAB\xAD\x03\x02\x02\x02\xAC\x88\x03\x02\x02" + + "\x02\xAC\x98\x03\x02\x02\x02\xAC\x9A\x03\x02\x02\x02\xAC\xAD\x03\x02\x02" + + "\x02\xAD\xB0\x03\x02\x02\x02\xAE\xAF\x07@\x02\x02\xAF\xB1\x05*\x16\x02" + + "\xB0\xAE\x03\x02\x02\x02\xB0\xB1\x03\x02\x02\x02\xB1\xB3\x03\x02\x02\x02" + + "\xB2\xB4\x07\v\x02\x02\xB3\xB2\x03\x02\x02\x02\xB3\xB4\x03\x02\x02\x02" + + "\xB4\v\x03\x02\x02\x02\xB5\xB6\x07\f\x02\x02\xB6\xCB\x05L\'\x02\xB7\xB8" + + "\x07\f\x02\x02\xB8\xB9\x05L\'\x02\xB9\xBA\x07@\x02\x02\xBA\xBB\x05\"\x12" + + "\x02\xBB\xCB\x03\x02\x02\x02\xBC\xBD\x07\f\x02\x02\xBD\xBE\x05L\'\x02" + + "\xBE\xC0\x07@\x02\x02\xBF\xC1\x07\r\x02\x02\xC0\xBF\x03\x02\x02\x02\xC0" + + "\xC1\x03\x02\x02\x02\xC1\xC2\x03\x02\x02\x02\xC2\xC7\x05\x0E\b\x02\xC3" + + "\xC4\x07\r\x02\x02\xC4\xC6\x05\x0E\b\x02\xC5\xC3\x03\x02\x02\x02\xC6\xC9" + + "\x03\x02\x02\x02\xC7\xC5\x03\x02\x02\x02\xC7\xC8\x03\x02\x02\x02\xC8\xCB" + + "\x03\x02\x02\x02\xC9\xC7\x03\x02\x02\x02\xCA\xB5\x03\x02\x02\x02\xCA\xB7" + + "\x03\x02\x02\x02\xCA\xBC\x03\x02\x02\x02\xCB\r\x03\x02\x02\x02\xCC\xD1" + + "\x05N(\x02\xCD\xCE\x07A\x02\x02\xCE\xCF\x05\"\x12\x02\xCF\xD0\x07B\x02" + + "\x02\xD0\xD2\x03\x02\x02\x02\xD1\xCD\x03\x02\x02\x02\xD1\xD2\x03\x02\x02" + + "\x02\xD2\x0F\x03\x02\x02\x02\xD3\xD4\x07\x0E\x02\x02\xD4\xD7\x05L\'\x02" + + "\xD5\xD6\x07\x07\x02\x02\xD6\xD8\x05\"\x12\x02\xD7\xD5\x03\x02\x02\x02" + + "\xD7\xD8\x03\x02\x02\x02\xD8\xD9\x03\x02\x02\x02\xD9\xDA\x07@\x02\x02" + + "\xDA\xDC\x05*\x16\x02\xDB\xDD\x07\v\x02\x02\xDC\xDB\x03\x02\x02\x02\xDC" + + "\xDD\x03\x02\x02\x02\xDD\x11\x03\x02\x02\x02\xDE\xE8\x07\x0F\x02\x02\xDF" + + "\xE8\x07\x10\x02\x02\xE0\xE1\x07\x11\x02\x02\xE1\xE8\x07\x0F\x02\x02\xE2" + + "\xE3\x07\x11\x02\x02\xE3\xE8\x07\x10\x02\x02\xE4\xE8\x07\x12\x02\x02\xE5" + + "\xE8\x07\x13\x02\x02\xE6\xE8\x07\x14\x02\x02\xE7\xDE\x03\x02\x02\x02\xE7" + + "\xDF\x03\x02\x02\x02\xE7\xE0\x03\x02\x02\x02\xE7\xE2\x03\x02\x02\x02\xE7" + + "\xE4\x03\x02\x02\x02\xE7\xE5\x03\x02\x02\x02\xE7\xE6\x03\x02\x02\x02\xE8" + + "\x13\x03\x02\x02\x02\xE9\xEA\x07\x15\x02\x02\xEA\xEB\x05\x1C\x0F\x02\xEB" + + "\xEC\x07\x16\x02\x02\xEC\xEF\x05> \x02\xED\xEE\x07\x17\x02\x02\xEE\xF0" + + "\x05 \x11\x02\xEF\xED\x03\x02\x02\x02\xEF\xF0\x03\x02\x02\x02\xF0\xFC" + + "\x03\x02\x02\x02\xF1\xF2\x07\x15\x02\x02\xF2\xF5\x05\x1C\x0F\x02\xF3\xF4" + + "\x07\x18\x02\x02\xF4\xF6\x05\x1C\x0F\x02\xF5\xF3\x03\x02\x02\x02\xF5\xF6" + + "\x03\x02\x02\x02\xF6\xF9\x03\x02\x02\x02\xF7\xF8\x07\x17\x02\x02\xF8\xFA" + + "\x05 \x11\x02\xF9\xF7\x03\x02\x02\x02\xF9\xFA\x03\x02\x02\x02\xFA\xFC" + + "\x03\x02\x02\x02\xFB\xE9\x03\x02\x02\x02\xFB\xF1\x03\x02\x02\x02\xFC\x15" + + "\x03\x02\x02\x02\xFD\xFE\x07\x19\x02\x02\xFE\xFF\x05\x1C\x0F\x02\xFF\u0100" + + "\x07\x16\x02\x02\u0100\u0101\x05> \x02\u0101\u0109\x03\x02\x02\x02\u0102" + + "\u0103\x07\x19\x02\x02\u0103\u0106\x05\x1C\x0F\x02\u0104\u0105\x07\x18" + + "\x02\x02\u0105\u0107\x05\x1C\x0F\x02\u0106\u0104\x03\x02\x02\x02\u0106" + + "\u0107\x03\x02\x02\x02\u0107\u0109\x03\x02\x02\x02\u0108\xFD\x03\x02\x02" + + "\x02\u0108\u0102\x03\x02\x02\x02\u0109\x17\x03\x02\x02\x02\u010A\u010B" + + "\x07\x15\x02\x02\u010B\u010C\x05\x1A\x0E\x02\u010C\u010D\x07A\x02\x02" + + "\u010D\u010E\x05\x1C\x0F\x02\u010E\u010F\x07@\x02\x02\u010F\u0117\x05" + + "*\x16\x02\u0110\u0111\x07\n\x02\x02\u0111\u0112\x05\x1C\x0F\x02\u0112" + + "\u0113\x07@\x02\x02\u0113\u0114\x05*\x16\x02\u0114\u0116\x03\x02\x02\x02" + + "\u0115\u0110\x03\x02\x02\x02\u0116\u0119\x03\x02\x02\x02\u0117\u0115\x03" + + "\x02\x02\x02\u0117\u0118\x03\x02\x02\x02\u0118\u011A\x03\x02\x02\x02\u0119" + + "\u0117\x03\x02\x02\x02\u011A\u011B\x07B\x02\x02\u011B\u011C\x07\x16\x02" + + "\x02\u011C\u011F\x077\x02\x02\u011D\u011E\x07\x17\x02\x02\u011E\u0120" + + "\x05 \x11\x02\u011F\u011D\x03\x02\x02\x02\u011F\u0120\x03\x02\x02\x02" + + "\u0120\u0139\x03\x02\x02\x02\u0121\u0122\x07\x15\x02\x02\u0122\u0123\x05" + + "\x1A\x0E\x02\u0123\u0124\x07A\x02\x02\u0124\u0125\x05\x1C\x0F\x02\u0125" + + "\u0126\x07@\x02\x02\u0126\u012E\x05*\x16\x02\u0127\u0128\x07\n\x02\x02" + + "\u0128\u0129\x05\x1C\x0F\x02\u0129\u012A\x07@\x02\x02\u012A\u012B\x05" + + "*\x16\x02\u012B\u012D\x03\x02\x02\x02\u012C\u0127\x03\x02\x02\x02\u012D" + + "\u0130\x03\x02\x02\x02\u012E\u012C\x03\x02\x02\x02\u012E\u012F\x03\x02" + + "\x02\x02\u012F\u0131\x03\x02\x02\x02\u0130\u012E\x03\x02\x02\x02\u0131" + + "\u0132\x07B\x02\x02\u0132\u0133\x07\x18\x02\x02\u0133\u0136\x05\x1E\x10" + + "\x02\u0134\u0135\x07\x17\x02\x02\u0135\u0137\x05 \x11\x02\u0136\u0134" + + "\x03\x02\x02\x02\u0136\u0137\x03\x02\x02\x02\u0137\u0139\x03\x02\x02\x02" + + "\u0138\u010A\x03\x02\x02\x02\u0138\u0121\x03\x02\x02\x02\u0139\x19\x03" + + "\x02\x02\x02\u013A\u013B\x05L\'\x02\u013B\x1B\x03\x02\x02\x02\u013C\u013D" + + "\x05L\'\x02\u013D\x1D\x03\x02\x02\x02\u013E\u013F\x05L\'\x02\u013F\x1F" + + "\x03\x02\x02\x02\u0140\u0141\x07*\x02\x02\u0141!\x03\x02\x02\x02\u0142" + + "\u0143\b\x12\x01\x02\u0143\u014C\x07A\x02\x02\u0144\u0149\x05\"\x12\x02" + + "\u0145\u0146\x07\n\x02\x02\u0146\u0148\x05\"\x12\x02\u0147\u0145\x03\x02" + + "\x02\x02\u0148\u014B\x03\x02\x02\x02\u0149\u0147\x03\x02\x02\x02\u0149" + + "\u014A\x03\x02\x02\x02\u014A\u014D\x03\x02\x02\x02\u014B\u0149\x03\x02" + + "\x02\x02\u014C\u0144\x03\x02\x02\x02\u014C\u014D\x03\x02\x02\x02\u014D" + + "\u014F\x03\x02\x02\x02\u014E\u0150\x07\n\x02\x02\u014F\u014E\x03\x02\x02" + + "\x02\u014F\u0150\x03\x02\x02\x02\u0150\u0151\x03\x02\x02\x02\u0151\u0152" + + "\x07B\x02\x02\u0152\u0153\x07\x1B\x02\x02\u0153\u0180\x05\"\x12\r\u0154" + + "\u0155\x071\x02\x02\u0155\u0156\x07\x1C\x02\x02\u0156\u0157\x05\"\x12" + + "\x02\u0157\u0158\x07\x1D\x02\x02\u0158\u0180\x03\x02\x02\x02\u0159\u015A" + + "\x072\x02\x02\u015A\u015B\x07\x1C\x02\x02\u015B\u015C\x05\"\x12\x02\u015C" + + "\u015D\x07\x1D\x02\x02\u015D\u0180\x03\x02\x02\x02\u015E\u015F\x07A\x02" + + "\x02\u015F\u0160\x05\"\x12\x02\u0160\u0161\x07\n\x02\x02\u0161\u0166\x05" + + "\"\x12\x02\u0162\u0163\x07\n\x02\x02\u0163\u0165\x05\"\x12\x02\u0164\u0162" + + "\x03\x02\x02\x02\u0165\u0168\x03\x02\x02\x02\u0166\u0164\x03\x02\x02\x02" + + "\u0166\u0167\x03\x02\x02\x02\u0167\u016A\x03\x02\x02\x02\u0168\u0166\x03" + + "\x02\x02\x02\u0169\u016B\x07\n\x02\x02\u016A\u0169\x03\x02\x02\x02\u016A" + + "\u016B\x03\x02\x02\x02\u016B\u016C\x03\x02\x02\x02\u016C\u016D\x07B\x02" + + "\x02\u016D\u0180\x03\x02\x02\x02\u016E\u016F\x07\x04\x02\x02\u016F\u0170" + + "\x05&\x14\x02\u0170\u0171\x07\x05\x02\x02\u0171\u0180\x03\x02\x02\x02" + + "\u0172\u0174\x05$\x13\x02\u0173\u0172\x03\x02\x02\x02\u0174\u0175\x03" + + "\x02\x02\x02\u0175\u0173\x03\x02\x02\x02\u0175\u0176\x03\x02\x02\x02\u0176" + + "\u0180\x03\x02\x02\x02\u0177\u0180\x07\x1E\x02\x02\u0178\u0180\x07\x1F" + + "\x02\x02\u0179\u0180\x07 \x02\x02\u017A\u0180\x05L\'\x02\u017B\u017C\x07" + + "A\x02\x02\u017C\u017D\x05\"\x12\x02\u017D\u017E\x07B\x02\x02\u017E\u0180" + + "\x03\x02\x02\x02\u017F\u0142\x03\x02\x02\x02\u017F\u0154\x03\x02\x02\x02" + + "\u017F\u0159\x03\x02\x02\x02\u017F\u015E\x03\x02\x02\x02\u017F\u016E\x03" + + "\x02\x02\x02\u017F\u0173\x03\x02\x02\x02\u017F\u0177\x03\x02\x02\x02\u017F" + + "\u0178\x03\x02\x02\x02\u017F\u0179\x03\x02\x02\x02\u017F\u017A\x03\x02" + + "\x02\x02\u017F\u017B\x03\x02\x02\x02\u0180\u0189\x03\x02\x02\x02\u0181" + + "\u0182\f\x0F\x02\x02\u0182\u0183\x07\x1A\x02\x02\u0183\u0188\x05\"\x12" + + "\x0F\u0184\u0185\f\x0E\x02\x02\u0185\u0186\x07\x1B\x02\x02\u0186\u0188" + + "\x05\"\x12\x0E\u0187\u0181\x03\x02\x02\x02\u0187\u0184\x03\x02\x02\x02" + + "\u0188\u018B\x03\x02\x02\x02\u0189\u0187\x03\x02\x02\x02\u0189\u018A\x03" + + "\x02\x02\x02\u018A#\x03\x02\x02\x02\u018B\u0189\x03\x02\x02\x02\u018C" + + "\u018D\x07\r\x02\x02\u018D\u018E\x07\x04\x02\x02\u018E\u018F\x05L\'\x02" + + "\u018F\u0190\x07\x07\x02\x02\u0190\u0193\x07*\x02\x02\u0191\u0192\x07" + + "\n\x02\x02\u0192\u0194\x05&\x14\x02\u0193\u0191\x03\x02\x02\x02\u0193" + + "\u0194\x03\x02\x02\x02\u0194\u0196\x03\x02\x02\x02\u0195\u0197\x07\n\x02" + + "\x02\u0196\u0195\x03\x02\x02\x02\u0196\u0197\x03\x02\x02\x02\u0197\u0198" + + "\x03\x02\x02\x02\u0198\u0199\x07\x05\x02\x02\u0199%\x03\x02\x02\x02\u019A" + + "\u019B\x05(\x15\x02\u019B\u019C\x07\x07\x02\x02\u019C\u019D\x05\"\x12" + + "\x02\u019D\u019E\x07\n\x02\x02\u019E\u01A0\x03\x02\x02\x02\u019F\u019A" + + "\x03\x02\x02\x02\u01A0\u01A3\x03\x02\x02\x02\u01A1\u019F\x03\x02\x02\x02" + + "\u01A1\u01A2\x03\x02\x02\x02\u01A2\u01AD\x03\x02\x02\x02\u01A3\u01A1\x03" + + "\x02\x02\x02\u01A4\u01A5\x05(\x15\x02\u01A5\u01A6\x07\x07\x02\x02\u01A6" + + "\u01A7\x05\"\x12\x02\u01A7\u01AB\x03\x02\x02\x02\u01A8\u01AC\x07\n\x02" + + "\x02\u01A9\u01AA\x07\r\x02\x02\u01AA\u01AC\x07C\x02\x02\u01AB\u01A8\x03" + + "\x02\x02\x02\u01AB\u01A9\x03\x02\x02\x02\u01AB\u01AC\x03\x02\x02\x02\u01AC" + + "\u01AE\x03\x02\x02\x02\u01AD\u01A4\x03\x02\x02\x02\u01AD\u01AE\x03\x02" + + "\x02\x02\u01AE\u01B2\x03\x02\x02\x02\u01AF\u01B0\x07\r\x02\x02\u01B0\u01B2" + + "\x07C\x02\x02\u01B1\u01A1\x03\x02\x02\x02\u01B1\u01AF\x03\x02\x02\x02" + + "\u01B2\'\x03\x02\x02\x02\u01B3\u01B4\x05N(\x02\u01B4)\x03\x02\x02\x02" + + "\u01B5\u01B6\b\x16\x01\x02\u01B6\u024C\x054\x1B\x02\u01B7\u01B8\x05D#" + + "\x02\u01B8\u01BA\x07A\x02\x02\u01B9\u01BB\x05@!\x02\u01BA\u01B9\x03\x02" + + "\x02\x02\u01BA\u01BB\x03\x02\x02\x02\u01BB\u01BC\x03\x02\x02\x02\u01BC" + + "\u01BD\x07B\x02\x02\u01BD\u024C\x03\x02\x02\x02\u01BE\u01BF\x076\x02\x02" + + "\u01BF\u024C\x05*\x16\x1B\u01C0\u01C1\x05L\'\x02\u01C1\u01C2\x07\"\x02" + + "\x02\u01C2\u01C3\x07@\x02\x02\u01C3\u01C4\x05*\x16\x17\u01C4\u024C\x03" + + "\x02\x02\x02\u01C5\u01C6\x07-\x02\x02\u01C6\u01C7\x07\x04\x02\x02\u01C7" + + "\u01CC\x05*\x16\x02\u01C8\u01C9\x07\n\x02\x02\u01C9\u01CB\x05*\x16\x02" + + "\u01CA\u01C8\x03\x02\x02\x02\u01CB\u01CE\x03\x02\x02\x02\u01CC\u01CA\x03" + + "\x02\x02\x02\u01CC\u01CD\x03\x02\x02\x02\u01CD\u01D0\x03\x02\x02\x02\u01CE" + + "\u01CC\x03\x02\x02\x02\u01CF\u01D1\x07\n\x02\x02\u01D0\u01CF\x03\x02\x02" + + "\x02\u01D0\u01D1\x03\x02\x02\x02\u01D1\u01D2\x03\x02\x02\x02\u01D2\u01D3" + + "\x07\x05\x02\x02\u01D3\u024C\x03\x02\x02\x02\u01D4\u01D5\x07.\x02\x02" + + "\u01D5\u01D6\x07\x04\x02\x02\u01D6\u01DB\x05*\x16\x02\u01D7\u01D8\x07" + + "\n\x02\x02\u01D8\u01DA\x05*\x16\x02\u01D9\u01D7\x03\x02\x02\x02\u01DA" + + "\u01DD\x03\x02\x02\x02\u01DB\u01D9\x03\x02\x02\x02\u01DB\u01DC\x03\x02" + + "\x02\x02\u01DC\u01DF\x03\x02\x02\x02\u01DD\u01DB\x03\x02\x02\x02\u01DE" + + "\u01E0\x07\n\x02\x02\u01DF\u01DE\x03\x02\x02\x02\u01DF\u01E0\x03\x02\x02" + + "\x02\u01E0\u01E1\x03\x02\x02\x02\u01E1\u01E2\x07\x05\x02\x02\u01E2\u024C" + + "\x03\x02\x02\x02\u01E3\u024C\x05,\x17\x02\u01E4\u01E5\x07#\x02\x02\u01E5" + + "\u01E6\x07\x04\x02\x02\u01E6\u01EB\x05*\x16\x02\u01E7\u01E8\x07\n\x02" + + "\x02\u01E8\u01EA\x05*\x16\x02\u01E9\u01E7\x03\x02\x02\x02\u01EA\u01ED" + + "\x03\x02\x02\x02\u01EB\u01E9\x03\x02\x02\x02\u01EB\u01EC\x03\x02\x02\x02" + + "\u01EC\u01EF\x03\x02\x02\x02\u01ED\u01EB\x03\x02\x02\x02\u01EE\u01F0\x07" + + "\n\x02\x02\u01EF\u01EE\x03\x02\x02\x02\u01EF\u01F0\x03\x02\x02\x02\u01F0" + + "\u01F1\x03\x02\x02\x02\u01F1\u01F2\x07\x05\x02\x02\u01F2\u024C\x03\x02" + + "\x02\x02\u01F3\u01F4\x07$\x02\x02\u01F4\u01F5\x07\x04"; private static readonly _serializedATNSegment1: string = - "\u01FA\u0245\x03\x02\x02\x02\u01FB\u0200\x05F$\x02\u01FC\u0200\x07,\x02" + - "\x02\u01FD\u0200\x07+\x02\x02\u01FE\u0200\x07*\x02\x02\u01FF\u01FB\x03" + - "\x02\x02\x02\u01FF\u01FC\x03\x02\x02\x02\u01FF\u01FD\x03\x02\x02\x02\u01FF" + - "\u01FE\x03\x02\x02\x02\u0200\u0245\x03\x02\x02\x02\u0201\u0202\x07A\x02" + - "\x02\u0202\u0203\x05*\x16\x02\u0203\u0204\x07\n\x02\x02\u0204\u0209\x05" + - "*\x16\x02\u0205\u0206\x07\n\x02\x02\u0206\u0208\x05*\x16\x02\u0207\u0205" + - "\x03\x02\x02\x02\u0208\u020B\x03\x02\x02\x02\u0209\u0207\x03\x02\x02\x02" + - "\u0209\u020A\x03\x02\x02\x02\u020A\u020D\x03\x02\x02\x02\u020B\u0209\x03" + - "\x02\x02\x02\u020C\u020E\x07\n\x02\x02\u020D\u020C\x03\x02\x02\x02\u020D" + - "\u020E\x03\x02\x02\x02\u020E\u020F\x03\x02\x02\x02\u020F\u0210\x07B\x02" + - "\x02\u0210\u0245\x03\x02\x02\x02\u0211\u0212\x07\x04\x02\x02\u0212\u0217" + - "\x05<\x1F\x02\u0213\u0214\x07\n\x02\x02\u0214\u0216\x05<\x1F\x02\u0215" + - "\u0213\x03\x02\x02\x02\u0216\u0219\x03\x02\x02\x02\u0217\u0215\x03\x02" + - "\x02\x02\u0217\u0218\x03\x02\x02\x02\u0218\u021B\x03\x02\x02\x02\u0219" + - "\u0217\x03\x02\x02\x02\u021A\u021C\x07\n\x02\x02\u021B\u021A\x03\x02\x02" + - "\x02\u021B\u021C\x03\x02\x02\x02\u021C\u021D\x03\x02\x02\x02\u021D\u021E" + - "\x07\x05\x02\x02\u021E\u0245\x03\x02\x02\x02\u021F\u0228\x07\x1C\x02\x02" + - "\u0220\u0225\x05*\x16\x02\u0221\u0222\x07\n\x02\x02\u0222\u0224\x05*\x16" + - "\x02\u0223\u0221\x03\x02\x02\x02\u0224\u0227\x03\x02\x02\x02\u0225\u0223" + - "\x03\x02\x02\x02\u0225\u0226\x03\x02\x02\x02\u0226\u0229\x03\x02\x02\x02" + - "\u0227\u0225\x03\x02\x02\x02\u0228\u0220\x03\x02\x02\x02\u0228\u0229\x03" + - "\x02\x02\x02\u0229\u022B\x03\x02\x02\x02\u022A\u022C\x07\n\x02\x02\u022B" + - "\u022A\x03\x02\x02\x02\u022B\u022C\x03\x02\x02\x02\u022C\u022D\x03\x02" + - "\x02\x02\u022D\u0245\x07\x1D\x02\x02\u022E\u022F\x07%\x02\x02\u022F\u0230" + - "\x07A\x02\x02\u0230\u0231\x05*\x16\x02\u0231\u0232\x07B\x02\x02\u0232" + - "\u0233\x05*\x16\x02\u0233\u0234\x07&\x02\x02\u0234\u0235\x05*\x16\x07" + - "\u0235\u0245\x03\x02\x02\x02\u0236\u0237\x05\n\x06\x02\u0237\u0238\x05" + - "*\x16\x06\u0238\u0245\x03\x02\x02\x02\u0239\u023A\x05\x10\t\x02\u023A" + - "\u023B\x05*\x16\x05\u023B\u0245\x03\x02\x02\x02\u023C\u023D\x07A\x02\x02" + - "\u023D\u023E\x05*\x16\x02\u023E\u023F\x07B\x02\x02\u023F\u0245\x03\x02" + - "\x02\x02\u0240\u0241\x07\x04\x02\x02\u0241\u0242\x05*\x16\x02\u0242\u0243" + - "\x07\x05\x02\x02\u0243\u0245\x03\x02\x02\x02\u0244\u01AF\x03\x02\x02\x02" + - "\u0244\u01B1\x03\x02\x02\x02\u0244\u01B8\x03\x02\x02\x02\u0244\u01BA\x03" + - "\x02\x02\x02\u0244\u01BF\x03\x02\x02\x02\u0244\u01CE\x03\x02\x02\x02\u0244" + - "\u01DD\x03\x02\x02\x02\u0244\u01EC\x03\x02\x02\x02\u0244\u01FF\x03\x02" + - "\x02\x02\u0244\u0201\x03\x02\x02\x02\u0244\u0211\x03\x02\x02\x02\u0244" + - "\u021F\x03\x02\x02\x02\u0244\u022E\x03\x02\x02\x02\u0244\u0236\x03\x02" + - "\x02\x02\u0244\u0239\x03\x02\x02\x02\u0244\u023C\x03\x02\x02\x02\u0244" + - "\u0240\x03\x02\x02\x02\u0245\u0284\x03\x02\x02\x02\u0246\u0247\f\x1C\x02" + - "\x02\u0247\u0248\x07!\x02\x02\u0248\u0283\x05*\x16\x1C\u0249\u024A\f\x1A" + - "\x02\x02\u024A\u024B\t\x02\x02\x02\u024B\u0283\x05*\x16\x1B\u024C\u024D" + - "\f\x19\x02\x02\u024D\u024E\t\x03\x02\x02\u024E\u0283\x05*\x16\x1A\u024F" + - "\u0250\f\x18\x02\x02\u0250\u0251\t\x04\x02\x02\u0251\u0283\x05*\x16\x19" + - "\u0252\u0253\f\x16\x02\x02\u0253\u0254\x07@\x02\x02\u0254\u0255\x05*\x16" + - "\x17\u0255\u0256\b\x16\x01\x02\u0256\u0283\x03\x02\x02\x02\u0257\u0258" + - "\f\x14\x02\x02\u0258\u0259\x07-\x02\x02\u0259\u0283\x05*\x16\x15\u025A" + - "\u025B\f\x12\x02\x02\u025B\u025C\x07.\x02\x02\u025C\u0283\x05*\x16\x13" + - "\u025D\u025E\f\x11\x02\x02\u025E\u025F\x07/\x02\x02\u025F\u0283\x05*\x16" + - "\x12\u0260\u0261\f\x10\x02\x02\u0261\u0262\x070\x02\x02\u0262\u0283\x05" + - "*\x16\x11\u0263\u0264\f\n\x02\x02\u0264\u0265\x07\x1A\x02\x02\u0265\u0283" + - "\x05*\x16\v\u0266\u0267\f \x02\x02\u0267\u0268\x07\x16\x02\x02\u0268\u026E" + - "\x05@!\x02\u0269\u026B\x07A\x02\x02\u026A\u026C\x05:\x1E\x02\u026B\u026A" + - "\x03\x02\x02\x02\u026B\u026C\x03\x02\x02\x02\u026C\u026D\x03\x02\x02\x02" + - "\u026D\u026F\x07B\x02\x02\u026E\u0269\x03\x02\x02\x02\u026E\u026F\x03" + - "\x02\x02\x02\u026F\u0283\x03\x02\x02\x02\u0270\u0271\f\x1D\x02\x02\u0271" + - "\u0272\x07\x1C\x02\x02\u0272\u0273\x05*\x16\x02\u0273\u0274\x07\x1D\x02" + - "\x02\u0274\u0283\x03\x02\x02\x02\u0275\u0276\f\x0F\x02\x02\u0276\u027E" + - "\x074\x02\x02\u0277\u0278\x07\r\x02\x02\u0278\u0279\x07*\x02\x02\u0279" + - "\u027A\x07\x07\x02\x02\u027A\u027B\x056\x1C\x02\u027B\u027C\x07\x1B\x02" + - "\x02\u027C\u027D\x05*\x16\x02\u027D\u027F\x03\x02\x02\x02\u027E\u0277" + - "\x03\x02\x02\x02\u027F\u0280\x03\x02\x02\x02\u0280\u027E\x03\x02\x02\x02" + - "\u0280\u0281\x03\x02\x02\x02\u0281\u0283\x03\x02\x02\x02\u0282\u0246\x03" + - "\x02\x02\x02\u0282\u0249\x03\x02\x02\x02\u0282\u024C\x03\x02\x02\x02\u0282" + - "\u024F\x03\x02\x02\x02\u0282\u0252\x03\x02\x02\x02\u0282\u0257\x03\x02" + - "\x02\x02\u0282\u025A\x03\x02\x02\x02\u0282\u025D\x03\x02\x02\x02\u0282" + - "\u0260\x03\x02\x02\x02\u0282\u0263\x03\x02\x02\x02\u0282\u0266\x03\x02" + - "\x02\x02\u0282\u0270\x03\x02\x02\x02\u0282\u0275\x03\x02\x02\x02\u0283" + - "\u0286\x03\x02\x02\x02\u0284\u0282\x03\x02\x02\x02\u0284\u0285\x03\x02" + - "\x02\x02\u0285+\x03\x02\x02\x02\u0286\u0284\x03\x02\x02\x02\u0287\u0288" + - "\x05\b\x05\x02\u0288\u0289\x07\x02\x02\x03\u0289\u0291\x03\x02\x02\x02" + - "\u028A\u028B\x05*\x16\x02\u028B\u028C\x07\x02\x02\x03\u028C\u0291\x03" + - "\x02\x02\x02\u028D\u028E\x07D\x02\x02\u028E\u0291\x07\x02\x02\x03\u028F" + - "\u0291\x07\x02\x02\x03\u0290\u0287\x03\x02\x02\x02\u0290\u028A\x03\x02" + - "\x02\x02\u0290\u028D\x03\x02\x02\x02\u0290\u028F\x03\x02\x02\x02\u0291" + - "-\x03\x02\x02\x02\u0292\u0295\x050\x19\x02\u0293\u0295\x052\x1A\x02\u0294" + - "\u0292\x03\x02\x02\x02\u0294\u0293\x03\x02\x02\x02\u0295/\x03\x02\x02" + - "\x02\u0296\u0297\x056\x1C\x02\u0297\u0298\x07\x1B\x02\x02\u0298\u0299" + - "\x05*\x16\x02\u0299\u02A8\x03\x02\x02\x02\u029A\u029B\x07A\x02\x02\u029B" + - "\u02A0\x056\x1C\x02\u029C\u029D\x07\n\x02\x02\u029D\u029F\x056\x1C\x02" + - "\u029E\u029C\x03\x02\x02\x02\u029F\u02A2\x03\x02\x02\x02\u02A0\u029E\x03" + - "\x02\x02\x02\u02A0\u02A1\x03\x02\x02\x02\u02A1\u02A3\x03\x02\x02\x02\u02A2" + - "\u02A0\x03\x02\x02\x02\u02A3\u02A4\x07B\x02\x02\u02A4\u02A5\x07\x1B\x02" + - "\x02\u02A5\u02A6\x05*\x16\x02\u02A6\u02A8\x03\x02\x02\x02\u02A7\u0296" + - "\x03\x02\x02\x02\u02A7\u029A\x03\x02\x02\x02\u02A81\x03\x02\x02\x02\u02A9" + - "\u02AA\x07A\x02\x02\u02AA\u02AB\x07A\x02\x02\u02AB\u02AE\x056\x1C\x02" + - "\u02AC\u02AD\x07\n\x02\x02\u02AD\u02AF\x056\x1C\x02\u02AE\u02AC\x03\x02" + - "\x02\x02\u02AF\u02B0\x03\x02\x02\x02\u02B0\u02AE\x03\x02\x02\x02\u02B0" + - "\u02B1\x03\x02\x02\x02\u02B1\u02B2\x03\x02\x02\x02\u02B2\u02B3\x07B\x02" + - "\x02\u02B3\u02B4\x07B\x02\x02\u02B4\u02B5\x07\x1B\x02\x02\u02B5\u02B6" + - "\x05*\x16\x02\u02B63\x03\x02\x02\x02\u02B7\u02BA\x07\'\x02\x02\u02B8\u02BA" + - "\x05F$\x02\u02B9\u02B7\x03\x02\x02\x02\u02B9\u02B8\x03\x02\x02\x02\u02BA" + - "5\x03\x02\x02\x02\u02BB\u02BC\x054\x1B\x02\u02BC7\x03\x02\x02\x02\u02BD" + - "\u02C0\x077\x02\x02\u02BE\u02C0\x05F$\x02\u02BF\u02BD\x03\x02\x02\x02" + - "\u02BF\u02BE\x03\x02\x02\x02\u02C09\x03\x02\x02\x02\u02C1\u02C6\x05*\x16" + - "\x02\u02C2\u02C3\x07\n\x02\x02\u02C3\u02C5\x05*\x16\x02\u02C4\u02C2\x03" + - "\x02\x02\x02\u02C5\u02C8\x03\x02\x02\x02\u02C6\u02C4\x03\x02\x02\x02\u02C6" + - "\u02C7\x03\x02\x02\x02\u02C7;\x03\x02\x02\x02\u02C8\u02C6\x03\x02\x02" + - "\x02\u02C9\u02CA\x05H%\x02\u02CA\u02CB\x07\x07\x02\x02\u02CB\u02CC\x05" + - "*\x16\x02\u02CC\u02D0\x03\x02\x02\x02\u02CD\u02CE\x07(\x02\x02\u02CE\u02D0" + - "\x05*\x16\x02\u02CF\u02C9\x03\x02\x02\x02\u02CF\u02CD\x03\x02\x02\x02" + - "\u02D0=\x03\x02\x02\x02\u02D1\u02D4\x05F$\x02\u02D2\u02D4\t\x05\x02\x02" + - "\u02D3\u02D1\x03\x02\x02\x02\u02D3\u02D2\x03\x02\x02\x02\u02D4?\x03\x02" + - "\x02\x02\u02D5\u02D8\x05F$\x02\u02D6\u02D8\t\x06\x02\x02\u02D7\u02D5\x03" + - "\x02\x02\x02\u02D7\u02D6\x03\x02\x02\x02\u02D8A\x03\x02\x02\x02\u02D9" + - "\u02DA\t\x07\x02\x02\u02DAC\x03\x02\x02\x02\u02DB\u02DC\t\b\x02\x02\u02DC" + - "E\x03\x02\x02\x02\u02DD\u02E2\x07C\x02\x02\u02DE\u02DF\x07)\x02\x02\u02DF" + - "\u02E1\x07C\x02\x02\u02E0\u02DE\x03\x02\x02\x02\u02E1\u02E4\x03\x02\x02" + - "\x02\u02E2\u02E0\x03\x02\x02\x02\u02E2\u02E3\x03\x02\x02\x02\u02E3G\x03" + - "\x02\x02\x02\u02E4\u02E2\x03\x02\x02\x02\u02E5\u02EA\x07C\x02\x02\u02E6" + - "\u02E7\x05F$\x02\u02E7\u02E8\b%\x01\x02\u02E8\u02EA\x03\x02\x02\x02\u02E9" + - "\u02E5\x03\x02\x02\x02\u02E9\u02E6\x03\x02\x02\x02\u02EAI\x03\x02\x02" + - "\x02SMT]e~\x88\x8B\x90\x9F\xA6\xAA\xAD\xBA\xC1\xC4\xCB\xD1\xD6\xE1\xE9" + - "\xEF\xF3\xF5\u0100\u0102\u0111\u0119\u0128\u0130\u0132\u0143\u0146\u0149" + - "\u0160\u0164\u016F\u0179\u0181\u0183\u018D\u0190\u019B\u01A5\u01A7\u01AB" + - "\u01B4\u01C6\u01CA\u01D5\u01D9\u01E4\u01E8\u01F3\u01F7\u01FF\u0209\u020D" + - "\u0217\u021B\u0225\u0228\u022B\u0244\u026B\u026E\u0280\u0282\u0284\u0290" + - "\u0294\u02A0\u02A7\u02B0\u02B9\u02BF\u02C6\u02CF\u02D3\u02D7\u02E2\u02E9"; + "\x02\x02\u01F5\u01FA\x05*\x16\x02\u01F6\u01F7\x07\n\x02\x02\u01F7\u01F9" + + "\x05*\x16\x02\u01F8\u01F6\x03\x02\x02\x02\u01F9\u01FC\x03\x02\x02\x02" + + "\u01FA\u01F8\x03\x02\x02\x02\u01FA\u01FB\x03\x02\x02\x02\u01FB\u01FE\x03" + + "\x02\x02\x02\u01FC\u01FA\x03\x02\x02\x02\u01FD\u01FF\x07\n\x02\x02\u01FE" + + "\u01FD\x03\x02\x02\x02\u01FE\u01FF\x03\x02\x02\x02\u01FF\u0200\x03\x02" + + "\x02\x02\u0200\u0201\x07\x05\x02\x02\u0201\u024C\x03\x02\x02\x02\u0202" + + "\u0207\x05L\'\x02\u0203\u0207\x07,\x02\x02\u0204\u0207\x07+\x02\x02\u0205" + + "\u0207\x07*\x02\x02\u0206\u0202\x03\x02\x02\x02\u0206\u0203\x03\x02\x02" + + "\x02\u0206\u0204\x03\x02\x02\x02\u0206\u0205\x03\x02\x02\x02\u0207\u024C" + + "\x03\x02\x02\x02\u0208\u0209\x07A\x02\x02\u0209\u020A\x05*\x16\x02\u020A" + + "\u020B\x07\n\x02\x02\u020B\u0210\x05*\x16\x02\u020C\u020D\x07\n\x02\x02" + + "\u020D\u020F\x05*\x16\x02\u020E\u020C\x03\x02\x02\x02\u020F\u0212\x03" + + "\x02\x02\x02\u0210\u020E\x03\x02\x02\x02\u0210\u0211\x03\x02\x02\x02\u0211" + + "\u0214\x03\x02\x02\x02\u0212\u0210\x03\x02\x02\x02\u0213\u0215\x07\n\x02" + + "\x02\u0214\u0213\x03\x02\x02\x02\u0214\u0215\x03\x02\x02\x02\u0215\u0216" + + "\x03\x02\x02\x02\u0216\u0217\x07B\x02\x02\u0217\u024C\x03\x02\x02\x02" + + "\u0218\u0219\x07\x04\x02\x02\u0219\u021E\x05B\"\x02\u021A\u021B\x07\n" + + "\x02\x02\u021B\u021D\x05B\"\x02\u021C\u021A\x03\x02\x02\x02\u021D\u0220" + + "\x03\x02\x02\x02\u021E\u021C\x03\x02\x02\x02\u021E\u021F\x03\x02\x02\x02" + + "\u021F\u0222\x03\x02\x02\x02\u0220\u021E\x03\x02\x02\x02\u0221\u0223\x07" + + "\n\x02\x02\u0222\u0221\x03\x02\x02\x02\u0222\u0223\x03\x02\x02\x02\u0223" + + "\u0224\x03\x02\x02\x02\u0224\u0225\x07\x05\x02\x02\u0225\u024C\x03\x02" + + "\x02\x02\u0226\u022F\x07\x1C\x02\x02\u0227\u022C\x05*\x16\x02\u0228\u0229" + + "\x07\n\x02\x02\u0229\u022B\x05*\x16\x02\u022A\u0228\x03\x02\x02\x02\u022B" + + "\u022E\x03\x02\x02\x02\u022C\u022A\x03\x02\x02\x02\u022C\u022D\x03\x02" + + "\x02\x02\u022D\u0230\x03\x02\x02\x02\u022E\u022C\x03\x02\x02\x02\u022F" + + "\u0227\x03\x02\x02\x02\u022F\u0230\x03\x02\x02\x02\u0230\u0232\x03\x02" + + "\x02\x02\u0231\u0233\x07\n\x02\x02\u0232\u0231\x03\x02\x02\x02\u0232\u0233" + + "\x03\x02\x02\x02\u0233\u0234\x03\x02\x02\x02\u0234\u024C\x07\x1D\x02\x02" + + "\u0235\u0236\x07%\x02\x02\u0236\u0237\x07A\x02\x02\u0237\u0238\x05*\x16" + + "\x02\u0238\u0239\x07B\x02\x02\u0239\u023A\x05*\x16\x02\u023A\u023B\x07" + + "&\x02\x02\u023B\u023C\x05*\x16\x07\u023C\u024C\x03\x02\x02\x02\u023D\u023E" + + "\x05\n\x06\x02\u023E\u023F\x05*\x16\x06\u023F\u024C\x03\x02\x02\x02\u0240" + + "\u0241\x05\x10\t\x02\u0241\u0242\x05*\x16\x05\u0242\u024C\x03\x02\x02" + + "\x02\u0243\u0244\x07A\x02\x02\u0244\u0245\x05*\x16\x02\u0245\u0246\x07" + + "B\x02\x02\u0246\u024C\x03\x02\x02\x02\u0247\u0248\x07\x04\x02\x02\u0248" + + "\u0249\x05*\x16\x02\u0249\u024A\x07\x05\x02\x02\u024A\u024C\x03\x02\x02" + + "\x02\u024B\u01B5\x03\x02\x02\x02\u024B\u01B7\x03\x02\x02\x02\u024B\u01BE" + + "\x03\x02\x02\x02\u024B\u01C0\x03\x02\x02\x02\u024B\u01C5\x03\x02\x02\x02" + + "\u024B\u01D4\x03\x02\x02\x02\u024B\u01E3\x03\x02\x02\x02\u024B\u01E4\x03" + + "\x02\x02\x02\u024B\u01F3\x03\x02\x02\x02\u024B\u0206\x03\x02\x02\x02\u024B" + + "\u0208\x03\x02\x02\x02\u024B\u0218\x03\x02\x02\x02\u024B\u0226\x03\x02" + + "\x02\x02\u024B\u0235\x03\x02\x02\x02\u024B\u023D\x03\x02\x02\x02\u024B" + + "\u0240\x03\x02\x02\x02\u024B\u0243\x03\x02\x02\x02\u024B\u0247\x03\x02" + + "\x02\x02\u024C\u027E\x03\x02\x02\x02\u024D\u024E\f\x1C\x02\x02\u024E\u024F" + + "\x07!\x02\x02\u024F\u027D\x05*\x16\x1C\u0250\u0251\f\x1A\x02\x02\u0251" + + "\u0252\t\x02\x02\x02\u0252\u027D\x05*\x16\x1B\u0253\u0254\f\x19\x02\x02" + + "\u0254\u0255\t\x03\x02\x02\u0255\u027D\x05*\x16\x1A\u0256\u0257\f\x18" + + "\x02\x02\u0257\u0258\t\x04\x02\x02\u0258\u027D\x05*\x16\x19\u0259\u025A" + + "\f\x16\x02\x02\u025A\u025B\x07@\x02\x02\u025B\u025C\x05*\x16\x17\u025C" + + "\u025D\b\x16\x01\x02\u025D\u027D\x03\x02\x02\x02\u025E\u025F\f\x14\x02" + + "\x02\u025F\u0260\x07-\x02\x02\u0260\u027D\x05*\x16\x15\u0261\u0262\f\x12" + + "\x02\x02\u0262\u0263\x07.\x02\x02\u0263\u027D\x05*\x16\x13\u0264\u0265" + + "\f\x11\x02\x02\u0265\u0266\x07/\x02\x02\u0266\u027D\x05*\x16\x12\u0267" + + "\u0268\f\x10\x02\x02\u0268\u0269\x070\x02\x02\u0269\u027D\x05*\x16\x11" + + "\u026A\u026B\f\n\x02\x02\u026B\u026C\x07\x1A\x02\x02\u026C\u027D\x05*" + + "\x16\v\u026D\u026E\f \x02\x02\u026E\u026F\x07\x16\x02\x02\u026F\u0275" + + "\x05F$\x02\u0270\u0272\x07A\x02\x02\u0271\u0273\x05@!\x02\u0272\u0271" + + "\x03\x02\x02\x02\u0272\u0273\x03\x02\x02\x02\u0273\u0274\x03\x02\x02\x02" + + "\u0274\u0276\x07B\x02\x02\u0275\u0270\x03\x02\x02\x02\u0275\u0276\x03" + + "\x02\x02\x02\u0276\u027D\x03\x02\x02\x02\u0277\u0278\f\x1D\x02\x02\u0278" + + "\u0279\x07\x1C\x02\x02\u0279\u027A\x05*\x16\x02\u027A\u027B\x07\x1D\x02" + + "\x02\u027B\u027D\x03\x02\x02\x02\u027C\u024D\x03\x02\x02\x02\u027C\u0250" + + "\x03\x02\x02\x02\u027C\u0253\x03\x02\x02\x02\u027C\u0256\x03\x02\x02\x02" + + "\u027C\u0259\x03\x02\x02\x02\u027C\u025E\x03\x02\x02\x02\u027C\u0261\x03" + + "\x02\x02\x02\u027C\u0264\x03\x02\x02\x02\u027C\u0267\x03\x02\x02\x02\u027C" + + "\u026A\x03\x02\x02\x02\u027C\u026D\x03\x02\x02\x02\u027C\u0277\x03\x02" + + "\x02\x02\u027D\u0280\x03\x02\x02\x02\u027E\u027C\x03\x02\x02\x02\u027E" + + "\u027F\x03\x02\x02\x02\u027F+\x03\x02\x02\x02\u0280\u027E\x03\x02\x02" + + "\x02\u0281\u0282\x074\x02\x02\u0282\u0283\x05*\x16\x02\u0283\u0285\x07" + + "\x04\x02\x02\u0284\u0286\x07\r\x02\x02\u0285\u0284\x03\x02\x02\x02\u0285" + + "\u0286\x03\x02\x02\x02\u0286\u0287\x03\x02\x02\x02\u0287\u028C\x05.\x18" + + "\x02\u0288\u0289\x07\r\x02\x02\u0289\u028B\x05.\x18\x02\u028A\u0288\x03" + + "\x02\x02\x02\u028B\u028E\x03\x02\x02\x02\u028C\u028A\x03\x02\x02\x02\u028C" + + "\u028D\x03\x02\x02\x02\u028D\u028F\x03\x02\x02\x02\u028E\u028C\x03\x02" + + "\x02\x02\u028F\u0290\x07\x05\x02\x02\u0290-\x03\x02\x02\x02\u0291\u0294" + + "\x050\x19\x02\u0292\u0294\x07\'\x02\x02\u0293\u0291\x03\x02\x02\x02\u0293" + + "\u0292\x03\x02\x02\x02\u0294\u0295\x03\x02\x02\x02\u0295\u0296\x07\x1B" + + "\x02\x02\u0296\u0297\x05*\x16\x02\u0297/\x03\x02\x02\x02\u0298\u029F\x05" + + "N(\x02\u0299\u029C\x07A\x02\x02\u029A\u029D\x05N(\x02\u029B\u029D\x07" + + "\'\x02\x02\u029C\u029A\x03\x02\x02\x02\u029C\u029B\x03\x02\x02\x02\u029D" + + "\u029E\x03\x02\x02\x02\u029E\u02A0\x07B\x02\x02\u029F\u0299\x03\x02\x02" + + "\x02\u029F\u02A0\x03\x02\x02\x02\u02A01\x03\x02\x02\x02\u02A1\u02A2\x05" + + "\b\x05\x02\u02A2\u02A3\x07\x02\x02\x03\u02A3\u02AB\x03\x02\x02\x02\u02A4" + + "\u02A5\x05*\x16\x02\u02A5\u02A6\x07\x02\x02\x03\u02A6\u02AB\x03\x02\x02" + + "\x02\u02A7\u02A8\x07D\x02\x02\u02A8\u02AB\x07\x02\x02\x03\u02A9\u02AB" + + "\x07\x02\x02\x03\u02AA\u02A1\x03\x02\x02\x02\u02AA\u02A4\x03\x02\x02\x02" + + "\u02AA\u02A7\x03\x02\x02\x02\u02AA\u02A9\x03\x02\x02\x02\u02AB3\x03\x02" + + "\x02\x02\u02AC\u02AF\x056\x1C\x02\u02AD\u02AF\x058\x1D\x02\u02AE\u02AC" + + "\x03\x02\x02\x02\u02AE\u02AD\x03\x02\x02\x02\u02AF5\x03\x02\x02\x02\u02B0" + + "\u02B1\x05<\x1F\x02\u02B1\u02B2\x07\x1B\x02\x02\u02B2\u02B3\x05*\x16\x02" + + "\u02B3\u02C2\x03\x02\x02\x02\u02B4\u02B5\x07A\x02\x02\u02B5\u02BA\x05" + + "<\x1F\x02\u02B6\u02B7\x07\n\x02\x02\u02B7\u02B9\x05<\x1F\x02\u02B8\u02B6" + + "\x03\x02\x02\x02\u02B9\u02BC\x03\x02\x02\x02\u02BA\u02B8\x03\x02\x02\x02" + + "\u02BA\u02BB\x03\x02\x02\x02\u02BB\u02BD\x03\x02\x02\x02\u02BC\u02BA\x03" + + "\x02\x02\x02\u02BD\u02BE\x07B\x02\x02\u02BE\u02BF\x07\x1B\x02\x02\u02BF" + + "\u02C0\x05*\x16\x02\u02C0\u02C2\x03\x02\x02\x02\u02C1\u02B0\x03\x02\x02" + + "\x02\u02C1\u02B4\x03\x02\x02\x02\u02C27\x03\x02\x02\x02\u02C3\u02C4\x07" + + "A\x02\x02\u02C4\u02C5\x07A\x02\x02\u02C5\u02C8\x05<\x1F\x02\u02C6\u02C7" + + "\x07\n\x02\x02\u02C7\u02C9\x05<\x1F\x02\u02C8\u02C6\x03\x02\x02\x02\u02C9" + + "\u02CA\x03\x02\x02\x02\u02CA\u02C8\x03\x02\x02\x02\u02CA\u02CB\x03\x02" + + "\x02\x02\u02CB\u02CC\x03\x02\x02\x02\u02CC\u02CD\x07B\x02\x02\u02CD\u02CE" + + "\x07B\x02\x02\u02CE\u02CF\x07\x1B\x02\x02\u02CF\u02D0\x05*\x16\x02\u02D0" + + "9\x03\x02\x02\x02\u02D1\u02D4\x07\'\x02\x02\u02D2\u02D4\x05L\'\x02\u02D3" + + "\u02D1\x03\x02\x02\x02\u02D3\u02D2\x03\x02\x02\x02\u02D4;\x03\x02\x02" + + "\x02\u02D5\u02D6\x05:\x1E\x02\u02D6=\x03\x02\x02\x02\u02D7\u02DA\x077" + + "\x02\x02\u02D8\u02DA\x05L\'\x02\u02D9\u02D7\x03\x02\x02\x02\u02D9\u02D8" + + "\x03\x02\x02\x02\u02DA?\x03\x02\x02\x02\u02DB\u02E0\x05*\x16\x02\u02DC" + + "\u02DD\x07\n\x02\x02\u02DD\u02DF\x05*\x16\x02\u02DE\u02DC\x03\x02\x02" + + "\x02\u02DF\u02E2\x03\x02\x02\x02\u02E0\u02DE\x03\x02\x02\x02\u02E0\u02E1" + + "\x03\x02\x02\x02\u02E1A\x03\x02\x02\x02\u02E2\u02E0\x03\x02\x02\x02\u02E3" + + "\u02E4\x05N(\x02\u02E4\u02E5\x07\x07\x02\x02\u02E5\u02E6\x05*\x16\x02" + + "\u02E6\u02EA\x03\x02\x02\x02\u02E7\u02E8\x07(\x02\x02\u02E8\u02EA\x05" + + "*\x16\x02\u02E9\u02E3\x03\x02\x02\x02\u02E9\u02E7\x03\x02\x02\x02\u02EA" + + "C\x03\x02\x02\x02\u02EB\u02EE\x05L\'\x02\u02EC\u02EE\t\x05\x02\x02\u02ED" + + "\u02EB\x03\x02\x02\x02\u02ED\u02EC\x03\x02\x02\x02\u02EEE\x03\x02\x02" + + "\x02\u02EF\u02F2\x05L\'\x02\u02F0\u02F2\t\x06\x02\x02\u02F1\u02EF\x03" + + "\x02\x02\x02\u02F1\u02F0\x03\x02\x02\x02\u02F2G\x03\x02\x02\x02\u02F3" + + "\u02F4\t\x07\x02\x02\u02F4I\x03\x02\x02\x02\u02F5\u02F6\t\b\x02\x02\u02F6" + + "K\x03\x02\x02\x02\u02F7\u02FC\x07C\x02\x02\u02F8\u02F9\x07)\x02\x02\u02F9" + + "\u02FB\x07C\x02\x02\u02FA\u02F8\x03\x02\x02\x02\u02FB\u02FE\x03\x02\x02" + + "\x02\u02FC\u02FA\x03\x02\x02\x02\u02FC\u02FD\x03\x02\x02\x02\u02FDM\x03" + + "\x02\x02\x02\u02FE\u02FC\x03\x02\x02\x02\u02FF\u0304\x07C\x02\x02\u0300" + + "\u0301\x05L\'\x02\u0301\u0302\b(\x01\x02\u0302\u0304\x03\x02\x02\x02\u0303" + + "\u02FF\x03\x02\x02\x02\u0303\u0300\x03\x02\x02\x02\u0304O\x03\x02\x02" + + "\x02WSZck\x84\x8E\x91\x96\xA5\xAC\xB0\xB3\xC0\xC7\xCA\xD1\xD7\xDC\xE7" + + "\xEF\xF5\xF9\xFB\u0106\u0108\u0117\u011F\u012E\u0136\u0138\u0149\u014C" + + "\u014F\u0166\u016A\u0175\u017F\u0187\u0189\u0193\u0196\u01A1\u01AB\u01AD" + + "\u01B1\u01BA\u01CC\u01D0\u01DB\u01DF\u01EB\u01EF\u01FA\u01FE\u0206\u0210" + + "\u0214\u021E\u0222\u022C\u022F\u0232\u024B\u0272\u0275\u027C\u027E\u0285" + + "\u028C\u0293\u029C\u029F\u02AA\u02AE\u02BA\u02C1\u02CA\u02D3\u02D9\u02E0" + + "\u02E9\u02ED\u02F1\u02FC\u0303"; public static readonly _serializedATN: string = Utils.join( [ QuintParser._serializedATNSegment0, @@ -5821,33 +5969,8 @@ export class ImpliesContext extends ExprContext { } } export class MatchContext extends ExprContext { - public expr(): ExprContext[]; - public expr(i: number): ExprContext; - public expr(i?: number): ExprContext | ExprContext[] { - if (i === undefined) { - return this.getRuleContexts(ExprContext); - } else { - return this.getRuleContext(i, ExprContext); - } - } - public MATCH(): TerminalNode { return this.getToken(QuintParser.MATCH, 0); } - public STRING(): TerminalNode[]; - public STRING(i: number): TerminalNode; - public STRING(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(QuintParser.STRING); - } else { - return this.getToken(QuintParser.STRING, i); - } - } - public parameter(): ParameterContext[]; - public parameter(i: number): ParameterContext; - public parameter(i?: number): ParameterContext | ParameterContext[] { - if (i === undefined) { - return this.getRuleContexts(ParameterContext); - } else { - return this.getRuleContext(i, ParameterContext); - } + public matchSumExpr(): MatchSumExprContext { + return this.getRuleContext(0, MatchSumExprContext); } constructor(ctx: ExprContext) { super(ctx.parent, ctx.invokingState); @@ -6281,6 +6404,129 @@ export class BracesContext extends ExprContext { } +export class MatchSumExprContext extends ParserRuleContext { + public _matchSumCase!: MatchSumCaseContext; + public _matchCase: MatchSumCaseContext[] = []; + public MATCH(): TerminalNode { return this.getToken(QuintParser.MATCH, 0); } + public expr(): ExprContext { + return this.getRuleContext(0, ExprContext); + } + public matchSumCase(): MatchSumCaseContext[]; + public matchSumCase(i: number): MatchSumCaseContext; + public matchSumCase(i?: number): MatchSumCaseContext | MatchSumCaseContext[] { + if (i === undefined) { + return this.getRuleContexts(MatchSumCaseContext); + } else { + return this.getRuleContext(i, MatchSumCaseContext); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return QuintParser.RULE_matchSumExpr; } + // @Override + public enterRule(listener: QuintListener): void { + if (listener.enterMatchSumExpr) { + listener.enterMatchSumExpr(this); + } + } + // @Override + public exitRule(listener: QuintListener): void { + if (listener.exitMatchSumExpr) { + listener.exitMatchSumExpr(this); + } + } + // @Override + public accept(visitor: QuintVisitor): Result { + if (visitor.visitMatchSumExpr) { + return visitor.visitMatchSumExpr(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class MatchSumCaseContext extends ParserRuleContext { + public _variantMatch!: MatchSumVariantContext; + public _wildCardMatch!: Token; + public expr(): ExprContext { + return this.getRuleContext(0, ExprContext); + } + public matchSumVariant(): MatchSumVariantContext | undefined { + return this.tryGetRuleContext(0, MatchSumVariantContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return QuintParser.RULE_matchSumCase; } + // @Override + public enterRule(listener: QuintListener): void { + if (listener.enterMatchSumCase) { + listener.enterMatchSumCase(this); + } + } + // @Override + public exitRule(listener: QuintListener): void { + if (listener.exitMatchSumCase) { + listener.exitMatchSumCase(this); + } + } + // @Override + public accept(visitor: QuintVisitor): Result { + if (visitor.visitMatchSumCase) { + return visitor.visitMatchSumCase(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class MatchSumVariantContext extends ParserRuleContext { + public _variantLabel!: SimpleIdContext; + public _variantParam!: SimpleIdContext; + public simpleId(): SimpleIdContext[]; + public simpleId(i: number): SimpleIdContext; + public simpleId(i?: number): SimpleIdContext | SimpleIdContext[] { + if (i === undefined) { + return this.getRuleContexts(SimpleIdContext); + } else { + return this.getRuleContext(i, SimpleIdContext); + } + } + public LPAREN(): TerminalNode | undefined { return this.tryGetToken(QuintParser.LPAREN, 0); } + public RPAREN(): TerminalNode | undefined { return this.tryGetToken(QuintParser.RPAREN, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return QuintParser.RULE_matchSumVariant; } + // @Override + public enterRule(listener: QuintListener): void { + if (listener.enterMatchSumVariant) { + listener.enterMatchSumVariant(this); + } + } + // @Override + public exitRule(listener: QuintListener): void { + if (listener.exitMatchSumVariant) { + listener.exitMatchSumVariant(this); + } + } + // @Override + public accept(visitor: QuintVisitor): Result { + if (visitor.visitMatchSumVariant) { + return visitor.visitMatchSumVariant(this); + } else { + return visitor.visitChildren(this); + } + } +} + + export class DeclarationOrExprContext extends ParserRuleContext { public declaration(): DeclarationContext | undefined { return this.tryGetRuleContext(0, DeclarationContext); diff --git a/quint/src/generated/QuintVisitor.ts b/quint/src/generated/QuintVisitor.ts index 13a0307e9..92f31558f 100644 --- a/quint/src/generated/QuintVisitor.ts +++ b/quint/src/generated/QuintVisitor.ts @@ -83,6 +83,9 @@ import { TypeUnionRecOneContext } from "./QuintParser"; import { RowContext } from "./QuintParser"; import { RowLabelContext } from "./QuintParser"; import { ExprContext } from "./QuintParser"; +import { MatchSumExprContext } from "./QuintParser"; +import { MatchSumCaseContext } from "./QuintParser"; +import { MatchSumVariantContext } from "./QuintParser"; import { DeclarationOrExprContext } from "./QuintParser"; import { LambdaContext } from "./QuintParser"; import { LambdaUnsugaredContext } from "./QuintParser"; @@ -679,6 +682,27 @@ export interface QuintVisitor extends ParseTreeVisitor { */ visitExpr?: (ctx: ExprContext) => Result; + /** + * Visit a parse tree produced by `QuintParser.matchSumExpr`. + * @param ctx the parse tree + * @return the visitor result + */ + visitMatchSumExpr?: (ctx: MatchSumExprContext) => Result; + + /** + * Visit a parse tree produced by `QuintParser.matchSumCase`. + * @param ctx the parse tree + * @return the visitor result + */ + visitMatchSumCase?: (ctx: MatchSumCaseContext) => Result; + + /** + * Visit a parse tree produced by `QuintParser.matchSumVariant`. + * @param ctx the parse tree + * @return the visitor result + */ + visitMatchSumVariant?: (ctx: MatchSumVariantContext) => Result; + /** * Visit a parse tree produced by `QuintParser.declarationOrExpr`. * @param ctx the parse tree diff --git a/quint/testFixture/SuperSpec.json b/quint/testFixture/SuperSpec.json index d53360132..16ffc901b 100644 --- a/quint/testFixture/SuperSpec.json +++ b/quint/testFixture/SuperSpec.json @@ -1 +1 @@ -{"stage":"parsing","warnings":[],"errors":[{"explanation":"extraneous input 'match' expecting {'}', 'const', 'var', 'assume', 'type', 'val', 'def', 'pure', 'action', 'run', 'temporal', 'import', 'export', DOCCOMMENT}","locs":[{"source":"mocked_path/testFixture/SuperSpec.qnt","start":{"line":233,"col":10,"index":5236},"end":{"line":233,"col":14,"index":5240}}]}]} \ No newline at end of file +{"stage":"parsing","warnings":[],"modules":[{"id":3,"name":"M1","declarations":[{"id":2,"kind":"def","name":"foo","qualifier":"val","expr":{"id":1,"kind":"int","value":4}}]},{"id":6,"name":"M2","declarations":[{"id":5,"kind":"def","name":"bar","qualifier":"val","expr":{"id":4,"kind":"int","value":4}}]},{"id":11,"name":"Proto","declarations":[{"kind":"var","name":"x","typeAnnotation":{"id":9,"kind":"int"},"id":10},{"kind":"const","name":"N","typeAnnotation":{"id":7,"kind":"int"},"id":8}]},{"id":496,"name":"withConsts","declarations":[{"id":102,"kind":"def","name":"pow_2_to_3","qualifier":"val","expr":{"id":101,"kind":"app","opcode":"ipow","args":[{"id":99,"kind":"int","value":2},{"id":100,"kind":"int","value":3}]}},{"id":105,"kind":"def","name":"uminus","qualifier":"val","expr":{"id":104,"kind":"app","opcode":"iuminus","args":[{"id":103,"kind":"int","value":100}]}},{"id":109,"kind":"def","name":"gt_2_to_3","qualifier":"val","expr":{"id":108,"kind":"app","opcode":"igt","args":[{"id":106,"kind":"int","value":2},{"id":107,"kind":"int","value":3}]}},{"id":113,"kind":"def","name":"ge_2_to_3","qualifier":"val","expr":{"id":112,"kind":"app","opcode":"igte","args":[{"id":110,"kind":"int","value":2},{"id":111,"kind":"int","value":3}]}},{"id":117,"kind":"def","name":"lt_2_to_3","qualifier":"val","expr":{"id":116,"kind":"app","opcode":"ilt","args":[{"id":114,"kind":"int","value":2},{"id":115,"kind":"int","value":3}]}},{"id":121,"kind":"def","name":"le_2_to_3","qualifier":"val","expr":{"id":120,"kind":"app","opcode":"ilte","args":[{"id":118,"kind":"int","value":2},{"id":119,"kind":"int","value":3}]}},{"id":125,"kind":"def","name":"eqeq_2_to_3","qualifier":"val","expr":{"id":124,"kind":"app","opcode":"eq","args":[{"id":122,"kind":"int","value":2},{"id":123,"kind":"int","value":3}]}},{"id":129,"kind":"def","name":"ne_2_to_3","qualifier":"val","expr":{"id":128,"kind":"app","opcode":"neq","args":[{"id":126,"kind":"int","value":2},{"id":127,"kind":"int","value":3}]}},{"kind":"const","name":"N","typeAnnotation":{"id":12,"kind":"int"},"id":13},{"id":135,"kind":"def","name":"VeryTrue","qualifier":"val","expr":{"id":134,"kind":"app","opcode":"eq","args":[{"id":132,"kind":"app","opcode":"iadd","args":[{"id":130,"kind":"int","value":2},{"id":131,"kind":"int","value":2}]},{"id":133,"kind":"int","value":4}]}},{"id":139,"kind":"def","name":"nat_includes_one","qualifier":"val","expr":{"id":138,"kind":"app","opcode":"in","args":[{"id":136,"kind":"int","value":1},{"id":137,"kind":"name","name":"Nat"}]}},{"id":151,"kind":"def","name":"withType","qualifier":"val","expr":{"id":150,"kind":"app","opcode":"Set","args":[{"id":148,"kind":"int","value":1},{"id":149,"kind":"int","value":2}]},"typeAnnotation":{"id":147,"kind":"set","elem":{"id":146,"kind":"int"}}},{"id":152,"kind":"typedef","name":"PROC"},{"kind":"var","name":"n","typeAnnotation":{"id":157,"kind":"int"},"id":158},{"kind":"const","name":"S","typeAnnotation":{"id":15,"kind":"set","elem":{"id":14,"kind":"int"}},"id":16},{"id":160,"kind":"def","name":"magicNumber","qualifier":"pureval","expr":{"id":159,"kind":"int","value":42}},{"kind":"const","name":"MySet","typeAnnotation":{"id":18,"kind":"set","elem":{"id":17,"kind":"int"}},"id":19},{"kind":"var","name":"k","typeAnnotation":{"id":197,"kind":"int"},"id":198},{"id":219,"kind":"def","name":"test_and","qualifier":"val","expr":{"id":218,"kind":"app","opcode":"and","args":[{"id":216,"kind":"bool","value":false},{"id":217,"kind":"bool","value":true}]}},{"kind":"const","name":"MySeq","typeAnnotation":{"id":21,"kind":"list","elem":{"id":20,"kind":"bool"}},"id":22},{"id":223,"kind":"def","name":"test_or","qualifier":"val","expr":{"id":222,"kind":"app","opcode":"or","args":[{"id":220,"kind":"bool","value":false},{"id":221,"kind":"bool","value":true}]}},{"id":227,"kind":"def","name":"test_implies","qualifier":"val","expr":{"id":226,"kind":"app","opcode":"implies","args":[{"id":224,"kind":"bool","value":false},{"id":225,"kind":"bool","value":true}]}},{"id":256,"kind":"def","name":"test_block_and","qualifier":"val","expr":{"id":255,"kind":"app","opcode":"and","args":[{"id":252,"kind":"bool","value":false},{"id":253,"kind":"bool","value":true},{"id":254,"kind":"bool","value":false}]}},{"kind":"const","name":"MyFun","typeAnnotation":{"id":25,"kind":"fun","arg":{"id":23,"kind":"int"},"res":{"id":24,"kind":"str"}},"id":26},{"id":261,"kind":"def","name":"test_action_and","qualifier":"action","expr":{"id":260,"kind":"app","opcode":"actionAll","args":[{"id":257,"kind":"bool","value":false},{"id":258,"kind":"bool","value":true},{"id":259,"kind":"bool","value":false}]}},{"id":266,"kind":"def","name":"test_block_or","qualifier":"val","expr":{"id":265,"kind":"app","opcode":"or","args":[{"id":262,"kind":"bool","value":false},{"id":263,"kind":"bool","value":true},{"id":264,"kind":"bool","value":false}]}},{"id":271,"kind":"def","name":"test_action_or","qualifier":"action","expr":{"id":270,"kind":"app","opcode":"actionAny","args":[{"id":267,"kind":"bool","value":false},{"id":268,"kind":"bool","value":true},{"id":269,"kind":"bool","value":false}]}},{"id":276,"kind":"def","name":"test_ite","qualifier":"val","expr":{"id":275,"kind":"app","opcode":"ite","args":[{"id":272,"kind":"bool","value":true},{"id":273,"kind":"int","value":1},{"id":274,"kind":"int","value":0}]}},{"kind":"var","name":"f1","typeAnnotation":{"id":292,"kind":"fun","arg":{"id":290,"kind":"str"},"res":{"id":291,"kind":"int"}},"id":293},{"id":301,"kind":"def","name":"MyOper","qualifier":"def","expr":{"id":301,"kind":"lambda","params":[{"id":298,"name":"a"},{"id":299,"name":"b"}],"qualifier":"def","expr":{"id":300,"kind":"int","value":1}}},{"id":313,"kind":"def","name":"oper_in","qualifier":"val","expr":{"id":312,"kind":"app","opcode":"in","args":[{"id":310,"kind":"int","value":1},{"id":311,"kind":"app","opcode":"Set","args":[]}]}},{"kind":"const","name":"MyFunFun","typeAnnotation":{"id":31,"kind":"fun","arg":{"id":29,"kind":"fun","arg":{"id":27,"kind":"int"},"res":{"id":28,"kind":"str"}},"res":{"id":30,"kind":"bool"}},"id":32},{"kind":"const","name":"MyOperator","typeAnnotation":{"id":36,"kind":"oper","args":[{"id":33,"kind":"int"},{"id":34,"kind":"str"}],"res":{"id":35,"kind":"bool"}},"id":37},{"id":378,"kind":"def","name":"one","qualifier":"val","expr":{"id":377,"kind":"app","opcode":"head","args":[{"id":376,"kind":"app","opcode":"List","args":[{"id":374,"kind":"int","value":1},{"id":375,"kind":"int","value":2}]}]}},{"id":383,"kind":"def","name":"test_tuple","qualifier":"val","expr":{"id":382,"kind":"app","opcode":"Tup","args":[{"id":379,"kind":"int","value":1},{"id":380,"kind":"int","value":2},{"id":381,"kind":"int","value":3}]}},{"id":388,"kind":"def","name":"test_tuple2","qualifier":"val","expr":{"id":387,"kind":"app","opcode":"Tup","args":[{"id":384,"kind":"int","value":1},{"id":385,"kind":"int","value":2},{"id":386,"kind":"int","value":3}]}},{"id":392,"kind":"def","name":"test_pair","qualifier":"val","expr":{"id":391,"kind":"app","opcode":"Tup","args":[{"id":389,"kind":"int","value":4},{"id":390,"kind":"int","value":5}]}},{"id":397,"kind":"def","name":"test_list","qualifier":"val","expr":{"id":396,"kind":"app","opcode":"List","args":[{"id":393,"kind":"int","value":1},{"id":394,"kind":"int","value":2},{"id":395,"kind":"int","value":3}]}},{"id":402,"kind":"def","name":"test_list2","qualifier":"val","expr":{"id":401,"kind":"app","opcode":"List","args":[{"id":398,"kind":"int","value":1},{"id":399,"kind":"int","value":2},{"id":400,"kind":"int","value":3}]}},{"id":409,"kind":"def","name":"test_list_nth","qualifier":"val","expr":{"id":408,"kind":"app","opcode":"nth","args":[{"id":406,"kind":"app","opcode":"List","args":[{"id":403,"kind":"int","value":2},{"id":404,"kind":"int","value":3},{"id":405,"kind":"int","value":4}]},{"id":407,"kind":"int","value":2}]}},{"id":415,"kind":"def","name":"test_record","qualifier":"val","expr":{"id":414,"kind":"app","opcode":"Rec","args":[{"id":411,"kind":"str","value":"name"},{"id":410,"kind":"str","value":"igor"},{"id":413,"kind":"str","value":"year"},{"id":412,"kind":"int","value":1981}]}},{"kind":"const","name":"MyOperatorWithComma","typeAnnotation":{"id":41,"kind":"oper","args":[{"id":38,"kind":"int"},{"id":39,"kind":"str"}],"res":{"id":40,"kind":"bool"}},"id":42},{"id":421,"kind":"def","name":"test_record2","qualifier":"val","expr":{"id":420,"kind":"app","opcode":"Rec","args":[{"id":416,"kind":"str","value":"name"},{"id":417,"kind":"str","value":"igor"},{"id":418,"kind":"str","value":"year"},{"id":419,"kind":"int","value":1981}]}},{"id":434,"kind":"def","name":"test_set","qualifier":"val","expr":{"id":433,"kind":"app","opcode":"Set","args":[{"id":430,"kind":"int","value":1},{"id":431,"kind":"int","value":2},{"id":432,"kind":"int","value":3}]}},{"id":463,"kind":"def","name":"in_2_empty","qualifier":"val","expr":{"id":462,"kind":"app","opcode":"in","args":[{"id":460,"kind":"int","value":2},{"id":461,"kind":"app","opcode":"Set","args":[]}]}},{"id":467,"kind":"def","name":"subseteq_empty","qualifier":"val","expr":{"id":466,"kind":"app","opcode":"subseteq","args":[{"id":464,"kind":"app","opcode":"Set","args":[]},{"id":465,"kind":"app","opcode":"Set","args":[]}]}},{"kind":"const","name":"MyTuple","typeAnnotation":{"id":46,"kind":"tup","fields":{"kind":"row","fields":[{"fieldName":"0","fieldType":{"id":43,"kind":"int"}},{"fieldName":"1","fieldType":{"id":44,"kind":"bool"}},{"fieldName":"2","fieldType":{"id":45,"kind":"str"}}],"other":{"kind":"empty"}}},"id":47},{"id":476,"kind":"def","name":"powersets","qualifier":"val","expr":{"id":475,"kind":"app","opcode":"in","args":[{"id":469,"kind":"app","opcode":"Set","args":[{"id":468,"kind":"int","value":1}]},{"id":474,"kind":"app","opcode":"powerset","args":[{"id":473,"kind":"app","opcode":"Set","args":[{"id":470,"kind":"int","value":1},{"id":471,"kind":"int","value":2},{"id":472,"kind":"int","value":3}]}]}]}},{"id":489,"kind":"typedef","name":"INT_SET","type":{"id":488,"kind":"set","elem":{"id":487,"kind":"int"}}},{"id":490,"kind":"typedef","name":"UNINTERPRETED_TYPE"},{"kind":"const","name":"MyTupleWithComma","typeAnnotation":{"id":51,"kind":"tup","fields":{"kind":"row","fields":[{"fieldName":"0","fieldType":{"id":48,"kind":"int"}},{"fieldName":"1","fieldType":{"id":49,"kind":"bool"}},{"fieldName":"2","fieldType":{"id":50,"kind":"str"}}],"other":{"kind":"empty"}}},"id":52},{"kind":"const","name":"MyRecord","typeAnnotation":{"id":56,"kind":"rec","fields":{"kind":"row","fields":[{"fieldName":"i","fieldType":{"id":53,"kind":"int"}},{"fieldName":"b","fieldType":{"id":54,"kind":"bool"}},{"fieldName":"s","fieldType":{"id":55,"kind":"str"}}],"other":{"kind":"empty"}}},"id":57},{"kind":"const","name":"MyRecordWithComma","typeAnnotation":{"id":61,"kind":"rec","fields":{"kind":"row","fields":[{"fieldName":"i","fieldType":{"id":58,"kind":"int"}},{"fieldName":"b","fieldType":{"id":59,"kind":"bool"}},{"fieldName":"s","fieldType":{"id":60,"kind":"str"}}],"other":{"kind":"empty"}}},"id":62},{"kind":"const","name":"MyUnion","typeAnnotation":{"id":67,"kind":"union","tag":"tag","records":[{"tagValue":"circle","fields":{"kind":"row","fields":[{"fieldName":"radius","fieldType":{"id":63,"kind":"int"}}],"other":{"kind":"empty"}}},{"tagValue":"rectangle","fields":{"kind":"row","fields":[{"fieldName":"width","fieldType":{"id":64,"kind":"int"}},{"fieldName":"height","fieldType":{"id":65,"kind":"int"}}],"other":{"kind":"empty"}}},{"tagValue":"dog","fields":{"kind":"row","fields":[{"fieldName":"name","fieldType":{"id":66,"kind":"str"}}],"other":{"kind":"empty"}}}]},"id":68},{"kind":"const","name":"MyUnionWithComma","typeAnnotation":{"id":73,"kind":"union","tag":"tag","records":[{"tagValue":"circle","fields":{"kind":"row","fields":[{"fieldName":"radius","fieldType":{"id":69,"kind":"int"}}],"other":{"kind":"empty"}}},{"tagValue":"rectangle","fields":{"kind":"row","fields":[{"fieldName":"width","fieldType":{"id":70,"kind":"int"}},{"fieldName":"height","fieldType":{"id":71,"kind":"int"}}],"other":{"kind":"empty"}}},{"tagValue":"dog","fields":{"kind":"row","fields":[{"fieldName":"name","fieldType":{"id":72,"kind":"str"}}],"other":{"kind":"empty"}}}]},"id":74},{"kind":"var","name":"i","typeAnnotation":{"id":75,"kind":"int"},"id":76},{"kind":"var","name":"j","typeAnnotation":{"id":77,"kind":"bool"},"id":78},{"id":82,"kind":"def","name":"add_1_to_2","qualifier":"val","expr":{"id":81,"kind":"app","opcode":"iadd","args":[{"id":79,"kind":"int","value":1},{"id":80,"kind":"int","value":2}]}},{"id":86,"kind":"def","name":"sub_1_to_2","qualifier":"val","expr":{"id":85,"kind":"app","opcode":"isub","args":[{"id":83,"kind":"int","value":1},{"id":84,"kind":"int","value":2}]}},{"id":90,"kind":"def","name":"mul_2_to_3","qualifier":"val","expr":{"id":89,"kind":"app","opcode":"imul","args":[{"id":87,"kind":"int","value":2},{"id":88,"kind":"int","value":3}]}},{"id":94,"kind":"def","name":"div_2_to_3","qualifier":"val","expr":{"id":93,"kind":"app","opcode":"idiv","args":[{"id":91,"kind":"int","value":2},{"id":92,"kind":"int","value":3}]}},{"id":98,"kind":"def","name":"mod_2_to_3","qualifier":"val","expr":{"id":97,"kind":"app","opcode":"imod","args":[{"id":95,"kind":"int","value":2},{"id":96,"kind":"int","value":3}]}},{"id":145,"kind":"def","name":"there_is_truth","qualifier":"val","expr":{"id":144,"kind":"app","opcode":"exists","args":[{"id":140,"kind":"name","name":"Bool"},{"id":143,"kind":"lambda","params":[{"id":141,"name":"x"}],"qualifier":"def","expr":{"id":142,"kind":"name","name":"x"}}]}},{"id":156,"kind":"def","name":"withUninterpretedType","qualifier":"val","expr":{"id":155,"kind":"app","opcode":"Set","args":[]},"typeAnnotation":{"id":154,"kind":"set","elem":{"id":153,"kind":"const","name":"PROC"}}},{"id":166,"kind":"def","name":"add","qualifier":"puredef","expr":{"id":166,"kind":"lambda","params":[{"id":161,"name":"x"},{"id":162,"name":"y"}],"qualifier":"puredef","expr":{"id":165,"kind":"app","opcode":"iadd","args":[{"id":163,"kind":"name","name":"x"},{"id":164,"kind":"name","name":"y"}]}}},{"id":171,"kind":"def","name":"ofN","qualifier":"def","expr":{"id":171,"kind":"lambda","params":[{"id":167,"name":"factor"}],"qualifier":"def","expr":{"id":170,"kind":"app","opcode":"imul","args":[{"id":168,"kind":"name","name":"factor"},{"id":169,"kind":"name","name":"n"}]}}},{"id":176,"kind":"def","name":"A","qualifier":"action","expr":{"id":176,"kind":"lambda","params":[{"id":172,"name":"x"}],"qualifier":"action","expr":{"id":175,"kind":"app","opcode":"assign","args":[{"id":174,"kind":"name","name":"n"},{"id":173,"kind":"name","name":"x"}]}}},{"id":180,"kind":"def","name":"B","qualifier":"puredef","expr":{"id":180,"kind":"lambda","params":[{"id":177,"name":"x"}],"qualifier":"puredef","expr":{"id":179,"kind":"app","opcode":"not","args":[{"id":178,"kind":"name","name":"x"}]}}},{"id":190,"kind":"def","name":"H","qualifier":"def","expr":{"id":190,"kind":"lambda","params":[{"id":181,"name":"x"},{"id":182,"name":"y"}],"qualifier":"def","expr":{"id":189,"kind":"app","opcode":"iadd","args":[{"id":187,"kind":"name","name":"x"},{"id":188,"kind":"name","name":"y"}]}},"typeAnnotation":{"id":186,"kind":"oper","args":[{"id":183,"kind":"int"},{"id":184,"kind":"int"}],"res":{"id":185,"kind":"int"}}},{"id":196,"kind":"def","name":"Pol","qualifier":"def","expr":{"id":196,"kind":"lambda","params":[{"id":191,"name":"x"}],"qualifier":"def","expr":{"id":195,"kind":"name","name":"x"}},"typeAnnotation":{"id":194,"kind":"oper","args":[{"id":192,"kind":"var","name":"a"}],"res":{"id":193,"kind":"var","name":"a"}}},{"id":202,"kind":"def","name":"asgn","qualifier":"action","expr":{"id":201,"kind":"app","opcode":"assign","args":[{"id":200,"kind":"name","name":"k"},{"id":199,"kind":"int","value":3}]}},{"id":215,"kind":"def","name":"min","qualifier":"puredef","expr":{"id":215,"kind":"lambda","params":[{"id":203,"name":"x"},{"id":205,"name":"y"}],"qualifier":"puredef","expr":{"id":213,"kind":"app","opcode":"ite","args":[{"id":210,"kind":"app","opcode":"ilt","args":[{"id":208,"kind":"name","name":"x"},{"id":209,"kind":"name","name":"y"}]},{"id":211,"kind":"name","name":"x"},{"id":212,"kind":"name","name":"y"}]}},"typeAnnotation":{"id":214,"kind":"oper","args":[{"id":204,"kind":"int"},{"id":206,"kind":"int"}],"res":{"id":207,"kind":"int"}}},{"id":230,"kind":"def","name":"F","qualifier":"def","expr":{"id":230,"kind":"lambda","params":[{"id":228,"name":"x"}],"qualifier":"def","expr":{"id":229,"kind":"name","name":"x"}}},{"id":289,"kind":"def","name":"test_ite2","qualifier":"def","expr":{"id":289,"kind":"lambda","params":[{"id":277,"name":"x"},{"id":278,"name":"y"}],"qualifier":"def","expr":{"id":288,"kind":"app","opcode":"ite","args":[{"id":281,"kind":"app","opcode":"ilt","args":[{"id":279,"kind":"name","name":"x"},{"id":280,"kind":"int","value":10}]},{"id":284,"kind":"app","opcode":"iadd","args":[{"id":282,"kind":"name","name":"y"},{"id":283,"kind":"int","value":5}]},{"id":287,"kind":"app","opcode":"imod","args":[{"id":285,"kind":"name","name":"y"},{"id":286,"kind":"int","value":5}]}]}}},{"id":297,"kind":"def","name":"funapp","qualifier":"val","expr":{"id":296,"kind":"app","opcode":"get","args":[{"id":294,"kind":"name","name":"f1"},{"id":295,"kind":"str","value":"a"}]}},{"id":305,"kind":"def","name":"oper_app_normal","qualifier":"val","expr":{"id":304,"kind":"app","opcode":"MyOper","args":[{"id":302,"kind":"str","value":"a"},{"id":303,"kind":"int","value":42}]}},{"id":309,"kind":"def","name":"oper_app_ufcs","qualifier":"val","expr":{"id":308,"kind":"app","opcode":"MyOper","args":[{"id":306,"kind":"str","value":"a"},{"id":307,"kind":"int","value":42}]}},{"id":321,"kind":"def","name":"oper_app_dot1","qualifier":"val","expr":{"id":320,"kind":"app","opcode":"filter","args":[{"id":314,"kind":"name","name":"S"},{"id":319,"kind":"lambda","params":[{"id":315,"name":"x"}],"qualifier":"def","expr":{"id":318,"kind":"app","opcode":"igt","args":[{"id":316,"kind":"name","name":"x"},{"id":317,"kind":"int","value":10}]}}]}},{"id":359,"kind":"def","name":"oper_app_dot4","qualifier":"val","expr":{"id":358,"kind":"app","opcode":"filter","args":[{"id":354,"kind":"name","name":"S"},{"id":357,"kind":"lambda","params":[{"id":355,"name":"_"}],"qualifier":"def","expr":{"id":356,"kind":"bool","value":true}}]}},{"id":367,"kind":"def","name":"f","qualifier":"val","expr":{"id":366,"kind":"app","opcode":"mapBy","args":[{"id":360,"kind":"name","name":"S"},{"id":365,"kind":"lambda","params":[{"id":361,"name":"x"}],"qualifier":"def","expr":{"id":364,"kind":"app","opcode":"iadd","args":[{"id":362,"kind":"name","name":"x"},{"id":363,"kind":"int","value":1}]}}]}},{"id":373,"kind":"def","name":"set_difference","qualifier":"val","expr":{"id":372,"kind":"app","opcode":"exclude","args":[{"id":368,"kind":"name","name":"S"},{"id":371,"kind":"app","opcode":"Set","args":[{"id":369,"kind":"int","value":3},{"id":370,"kind":"int","value":4}]}]}},{"id":429,"kind":"def","name":"test_record3","qualifier":"val","expr":{"id":428,"kind":"app","opcode":"with","args":[{"id":427,"kind":"app","opcode":"with","args":[{"id":426,"kind":"name","name":"test_record"},{"id":423,"kind":"str","value":"name"},{"id":422,"kind":"str","value":"quint"}]},{"id":425,"kind":"str","value":"year"},{"id":424,"kind":"int","value":2023}]}},{"id":445,"kind":"def","name":"rec_field","qualifier":"val","expr":{"id":444,"kind":"let","opdef":{"id":440,"kind":"def","name":"my_rec","qualifier":"val","expr":{"id":439,"kind":"app","opcode":"Rec","args":[{"id":436,"kind":"str","value":"a"},{"id":435,"kind":"int","value":1},{"id":438,"kind":"str","value":"b"},{"id":437,"kind":"str","value":"foo"}]}},"expr":{"id":443,"kind":"app","opcode":"field","args":[{"id":441,"kind":"name","name":"my_rec"},{"id":442,"kind":"str","value":"a"}]}}},{"id":454,"kind":"def","name":"tup_elem","qualifier":"val","expr":{"id":453,"kind":"let","opdef":{"id":449,"kind":"def","name":"my_tup","qualifier":"val","expr":{"id":448,"kind":"app","opcode":"Tup","args":[{"id":446,"kind":"str","value":"a"},{"id":447,"kind":"int","value":3}]}},"expr":{"id":452,"kind":"app","opcode":"item","args":[{"id":450,"kind":"name","name":"my_tup"},{"id":451,"kind":"int","value":2}]}}},{"id":459,"kind":"def","name":"isEmpty","qualifier":"def","expr":{"id":459,"kind":"lambda","params":[{"id":455,"name":"s"}],"qualifier":"def","expr":{"id":458,"kind":"app","opcode":"eq","args":[{"id":456,"kind":"name","name":"s"},{"id":457,"kind":"app","opcode":"List","args":[]}]}}},{"id":480,"kind":"assume","name":"positive","assumption":{"id":479,"kind":"app","opcode":"igt","args":[{"id":477,"kind":"name","name":"N"},{"id":478,"kind":"int","value":0}]}},{"id":484,"kind":"assume","name":"_","assumption":{"id":483,"kind":"app","opcode":"neq","args":[{"id":481,"kind":"name","name":"N"},{"id":482,"kind":"int","value":0}]}},{"id":485,"kind":"import","defName":"foo","protoName":"M1"},{"id":486,"kind":"import","defName":"*","protoName":"M2"},{"kind":"var","name":"S1","typeAnnotation":{"id":491,"kind":"const","name":"INT_SET"},"id":492},{"id":495,"kind":"instance","qualifiedName":"Inst1","protoName":"Proto","overrides":[[{"id":494,"name":"N"},{"id":493,"kind":"name","name":"N"}]],"identityOverride":false},{"id":237,"kind":"def","name":"G","qualifier":"val","expr":{"id":237,"kind":"lambda","params":[{"id":231,"name":"x"}],"qualifier":"val","expr":{"id":236,"kind":"app","opcode":"and","args":[{"id":233,"kind":"app","opcode":"F","args":[{"id":232,"kind":"name","name":"x"}]},{"id":235,"kind":"app","opcode":"not","args":[{"id":234,"kind":"name","name":"x"}]}]}}},{"id":244,"kind":"def","name":"test_and_arg","qualifier":"val","expr":{"id":244,"kind":"lambda","params":[{"id":238,"name":"x"}],"qualifier":"val","expr":{"id":243,"kind":"app","opcode":"and","args":[{"id":240,"kind":"app","opcode":"F","args":[{"id":239,"kind":"name","name":"x"}]},{"id":242,"kind":"app","opcode":"not","args":[{"id":241,"kind":"name","name":"x"}]}]}}},{"id":251,"kind":"def","name":"test_or_arg","qualifier":"val","expr":{"id":251,"kind":"lambda","params":[{"id":245,"name":"x"}],"qualifier":"val","expr":{"id":250,"kind":"app","opcode":"or","args":[{"id":247,"kind":"app","opcode":"F","args":[{"id":246,"kind":"name","name":"x"}]},{"id":249,"kind":"app","opcode":"not","args":[{"id":248,"kind":"name","name":"x"}]}]}}},{"id":341,"kind":"def","name":"tuple_sum","qualifier":"val","expr":{"id":340,"kind":"app","opcode":"map","args":[{"id":324,"kind":"app","opcode":"tuples","args":[{"id":322,"kind":"name","name":"S"},{"id":323,"kind":"name","name":"MySet"}]},{"id":339,"kind":"lambda","params":[{"id":330,"name":"quintTupledLambdaParam330"}],"qualifier":"def","expr":{"id":335,"kind":"let","opdef":{"id":326,"kind":"def","name":"mys","qualifier":"pureval","expr":{"id":336,"kind":"app","opcode":"item","args":[{"id":337,"kind":"name","name":"quintTupledLambdaParam330"},{"id":338,"kind":"int","value":2}]}},"expr":{"id":331,"kind":"let","opdef":{"id":325,"kind":"def","name":"s","qualifier":"pureval","expr":{"id":332,"kind":"app","opcode":"item","args":[{"id":333,"kind":"name","name":"quintTupledLambdaParam330"},{"id":334,"kind":"int","value":1}]}},"expr":{"id":329,"kind":"app","opcode":"iadd","args":[{"id":327,"kind":"name","name":"s"},{"id":328,"kind":"name","name":"mys"}]}}}}]}},{"id":353,"kind":"def","name":"oper_nondet","qualifier":"action","expr":{"id":352,"kind":"let","opdef":{"id":344,"kind":"def","name":"x","qualifier":"nondet","expr":{"id":343,"kind":"app","opcode":"oneOf","args":[{"id":342,"kind":"name","name":"S"}]}},"expr":{"id":351,"kind":"app","opcode":"actionAll","args":[{"id":347,"kind":"app","opcode":"igt","args":[{"id":345,"kind":"name","name":"x"},{"id":346,"kind":"int","value":10}]},{"id":350,"kind":"app","opcode":"assign","args":[{"id":349,"kind":"name","name":"k"},{"id":348,"kind":"name","name":"x"}]}]}}}]}],"table":{"142":{"id":141,"name":"x","kind":"param"},"153":{"id":152,"kind":"typedef","name":"PROC"},"163":{"id":161,"name":"x","kind":"param"},"164":{"id":162,"name":"y","kind":"param"},"168":{"id":167,"name":"factor","kind":"param"},"169":{"kind":"var","name":"n","typeAnnotation":{"id":157,"kind":"int"},"id":158},"173":{"id":172,"name":"x","kind":"param"},"174":{"kind":"var","name":"n","typeAnnotation":{"id":157,"kind":"int"},"id":158},"178":{"id":177,"name":"x","kind":"param"},"187":{"id":181,"name":"x","kind":"param"},"188":{"id":182,"name":"y","kind":"param"},"195":{"id":191,"name":"x","kind":"param"},"200":{"kind":"var","name":"k","typeAnnotation":{"id":197,"kind":"int"},"id":198},"208":{"id":203,"name":"x","kind":"param"},"209":{"id":205,"name":"y","kind":"param"},"211":{"id":203,"name":"x","kind":"param"},"212":{"id":205,"name":"y","kind":"param"},"229":{"id":228,"name":"x","kind":"param"},"232":{"id":231,"name":"x","kind":"param"},"233":{"id":230,"kind":"def","name":"F","qualifier":"def","expr":{"id":230,"kind":"lambda","params":[{"id":228,"name":"x"}],"qualifier":"def","expr":{"id":229,"kind":"name","name":"x"}},"depth":0},"234":{"id":231,"name":"x","kind":"param"},"239":{"id":238,"name":"x","kind":"param"},"240":{"id":230,"kind":"def","name":"F","qualifier":"def","expr":{"id":230,"kind":"lambda","params":[{"id":228,"name":"x"}],"qualifier":"def","expr":{"id":229,"kind":"name","name":"x"}},"depth":0},"241":{"id":238,"name":"x","kind":"param"},"246":{"id":245,"name":"x","kind":"param"},"247":{"id":230,"kind":"def","name":"F","qualifier":"def","expr":{"id":230,"kind":"lambda","params":[{"id":228,"name":"x"}],"qualifier":"def","expr":{"id":229,"kind":"name","name":"x"}},"depth":0},"248":{"id":245,"name":"x","kind":"param"},"279":{"id":277,"name":"x","kind":"param"},"282":{"id":278,"name":"y","kind":"param"},"285":{"id":278,"name":"y","kind":"param"},"294":{"kind":"var","name":"f1","typeAnnotation":{"id":292,"kind":"fun","arg":{"id":290,"kind":"str"},"res":{"id":291,"kind":"int"}},"id":293},"304":{"id":301,"kind":"def","name":"MyOper","qualifier":"def","expr":{"id":301,"kind":"lambda","params":[{"id":298,"name":"a"},{"id":299,"name":"b"}],"qualifier":"def","expr":{"id":300,"kind":"int","value":1}},"depth":0},"308":{"id":301,"kind":"def","name":"MyOper","qualifier":"def","expr":{"id":301,"kind":"lambda","params":[{"id":298,"name":"a"},{"id":299,"name":"b"}],"qualifier":"def","expr":{"id":300,"kind":"int","value":1}},"depth":0},"314":{"kind":"const","name":"S","typeAnnotation":{"id":15,"kind":"set","elem":{"id":14,"kind":"int"}},"id":16},"316":{"id":315,"name":"x","kind":"param"},"322":{"kind":"const","name":"S","typeAnnotation":{"id":15,"kind":"set","elem":{"id":14,"kind":"int"}},"id":16},"323":{"kind":"const","name":"MySet","typeAnnotation":{"id":18,"kind":"set","elem":{"id":17,"kind":"int"}},"id":19},"327":{"id":325,"kind":"def","name":"s","qualifier":"pureval","expr":{"id":332,"kind":"app","opcode":"item","args":[{"id":333,"kind":"name","name":"quintTupledLambdaParam330"},{"id":334,"kind":"int","value":1}]},"depth":1},"328":{"id":326,"kind":"def","name":"mys","qualifier":"pureval","expr":{"id":336,"kind":"app","opcode":"item","args":[{"id":337,"kind":"name","name":"quintTupledLambdaParam330"},{"id":338,"kind":"int","value":2}]},"depth":1},"333":{"id":330,"name":"quintTupledLambdaParam330","kind":"param"},"337":{"id":330,"name":"quintTupledLambdaParam330","kind":"param"},"342":{"kind":"const","name":"S","typeAnnotation":{"id":15,"kind":"set","elem":{"id":14,"kind":"int"}},"id":16},"345":{"id":344,"kind":"def","name":"x","qualifier":"nondet","expr":{"id":343,"kind":"app","opcode":"oneOf","args":[{"id":342,"kind":"name","name":"S"}]},"depth":1},"348":{"id":344,"kind":"def","name":"x","qualifier":"nondet","expr":{"id":343,"kind":"app","opcode":"oneOf","args":[{"id":342,"kind":"name","name":"S"}]},"depth":1},"349":{"kind":"var","name":"k","typeAnnotation":{"id":197,"kind":"int"},"id":198},"354":{"kind":"const","name":"S","typeAnnotation":{"id":15,"kind":"set","elem":{"id":14,"kind":"int"}},"id":16},"360":{"kind":"const","name":"S","typeAnnotation":{"id":15,"kind":"set","elem":{"id":14,"kind":"int"}},"id":16},"362":{"id":361,"name":"x","kind":"param"},"368":{"kind":"const","name":"S","typeAnnotation":{"id":15,"kind":"set","elem":{"id":14,"kind":"int"}},"id":16},"426":{"id":415,"kind":"def","name":"test_record","qualifier":"val","expr":{"id":414,"kind":"app","opcode":"Rec","args":[{"id":411,"kind":"str","value":"name"},{"id":410,"kind":"str","value":"igor"},{"id":413,"kind":"str","value":"year"},{"id":412,"kind":"int","value":1981}]},"depth":0},"441":{"id":440,"kind":"def","name":"my_rec","qualifier":"val","expr":{"id":439,"kind":"app","opcode":"Rec","args":[{"id":436,"kind":"str","value":"a"},{"id":435,"kind":"int","value":1},{"id":438,"kind":"str","value":"b"},{"id":437,"kind":"str","value":"foo"}]},"depth":1},"450":{"id":449,"kind":"def","name":"my_tup","qualifier":"val","expr":{"id":448,"kind":"app","opcode":"Tup","args":[{"id":446,"kind":"str","value":"a"},{"id":447,"kind":"int","value":3}]},"depth":1},"456":{"id":455,"name":"s","kind":"param"},"477":{"kind":"const","name":"N","typeAnnotation":{"id":12,"kind":"int"},"id":13},"481":{"kind":"const","name":"N","typeAnnotation":{"id":12,"kind":"int"},"id":13},"491":{"id":489,"kind":"typedef","name":"INT_SET","type":{"id":488,"kind":"set","elem":{"id":487,"kind":"int"}}},"493":{"kind":"const","name":"N","typeAnnotation":{"id":12,"kind":"int"},"id":13},"494":{"kind":"const","name":"N","typeAnnotation":{"id":7,"kind":"int"},"id":493,"importedFrom":{"id":495,"kind":"instance","qualifiedName":"Inst1","protoName":"Proto","overrides":[[{"id":494,"name":"N"},{"id":493,"kind":"name","name":"N"}]],"identityOverride":false},"hidden":true,"namespaces":["Inst1","withConsts"]}}} \ No newline at end of file diff --git a/quint/testFixture/SuperSpec.map.json b/quint/testFixture/SuperSpec.map.json index ecb0a9889..4212ee434 100644 --- a/quint/testFixture/SuperSpec.map.json +++ b/quint/testFixture/SuperSpec.map.json @@ -1 +1 @@ -{"sourceIndex":{"0":"mocked_path/testFixture/SuperSpec.qnt"},"map":{"1":[0,{"line":1,"col":12,"index":24},{"line":1,"col":12,"index":24}],"2":[0,{"line":1,"col":2,"index":14},{"line":1,"col":12,"index":24}],"3":[0,{"line":0,"col":0,"index":0},{"line":2,"col":26,"index":26}],"4":[0,{"line":5,"col":12,"index":53},{"line":5,"col":12,"index":53}],"5":[0,{"line":5,"col":2,"index":43},{"line":5,"col":12,"index":53}],"6":[0,{"line":4,"col":0,"index":29},{"line":6,"col":26,"index":55}],"7":[0,{"line":9,"col":11,"index":84},{"line":9,"col":13,"index":86}],"8":[0,{"line":9,"col":2,"index":75},{"line":9,"col":13,"index":86}],"9":[0,{"line":10,"col":9,"index":97},{"line":10,"col":11,"index":99}],"10":[0,{"line":10,"col":2,"index":90},{"line":10,"col":11,"index":99}],"11":[0,{"line":8,"col":0,"index":58},{"line":11,"col":43,"index":101}],"12":[0,{"line":16,"col":11,"index":186},{"line":16,"col":13,"index":188}],"13":[0,{"line":16,"col":2,"index":177},{"line":16,"col":13,"index":188}],"14":[0,{"line":17,"col":15,"index":205},{"line":17,"col":17,"index":207}],"15":[0,{"line":17,"col":11,"index":201},{"line":17,"col":18,"index":208}],"16":[0,{"line":17,"col":2,"index":192},{"line":17,"col":18,"index":208}],"17":[0,{"line":18,"col":19,"index":229},{"line":18,"col":21,"index":231}],"18":[0,{"line":18,"col":15,"index":225},{"line":18,"col":22,"index":232}],"19":[0,{"line":18,"col":2,"index":212},{"line":18,"col":22,"index":232}],"20":[0,{"line":19,"col":20,"index":254},{"line":19,"col":23,"index":257}],"21":[0,{"line":19,"col":15,"index":249},{"line":19,"col":24,"index":258}],"22":[0,{"line":19,"col":2,"index":236},{"line":19,"col":24,"index":258}],"23":[0,{"line":20,"col":15,"index":275},{"line":20,"col":17,"index":277}],"24":[0,{"line":20,"col":22,"index":282},{"line":20,"col":24,"index":284}],"25":[0,{"line":20,"col":15,"index":275},{"line":20,"col":24,"index":284}],"26":[0,{"line":20,"col":2,"index":262},{"line":20,"col":24,"index":284}],"27":[0,{"line":21,"col":19,"index":305},{"line":21,"col":21,"index":307}],"28":[0,{"line":21,"col":26,"index":312},{"line":21,"col":28,"index":314}],"29":[0,{"line":21,"col":19,"index":305},{"line":21,"col":28,"index":314}],"30":[0,{"line":21,"col":34,"index":320},{"line":21,"col":37,"index":323}],"31":[0,{"line":21,"col":18,"index":304},{"line":21,"col":37,"index":323}],"32":[0,{"line":21,"col":2,"index":288},{"line":21,"col":37,"index":323}],"33":[0,{"line":22,"col":21,"index":346},{"line":22,"col":23,"index":348}],"34":[0,{"line":22,"col":26,"index":351},{"line":22,"col":28,"index":353}],"35":[0,{"line":22,"col":34,"index":359},{"line":22,"col":37,"index":362}],"36":[0,{"line":22,"col":20,"index":345},{"line":22,"col":37,"index":362}],"37":[0,{"line":22,"col":2,"index":327},{"line":22,"col":37,"index":362}],"38":[0,{"line":23,"col":30,"index":394},{"line":23,"col":32,"index":396}],"39":[0,{"line":23,"col":35,"index":399},{"line":23,"col":37,"index":401}],"40":[0,{"line":23,"col":45,"index":409},{"line":23,"col":48,"index":412}],"41":[0,{"line":23,"col":29,"index":393},{"line":23,"col":48,"index":412}],"42":[0,{"line":23,"col":2,"index":366},{"line":23,"col":48,"index":412}],"43":[0,{"line":24,"col":18,"index":432},{"line":24,"col":20,"index":434}],"44":[0,{"line":24,"col":23,"index":437},{"line":24,"col":26,"index":440}],"45":[0,{"line":24,"col":29,"index":443},{"line":24,"col":31,"index":445}],"46":[0,{"line":24,"col":17,"index":431},{"line":24,"col":32,"index":446}],"47":[0,{"line":24,"col":2,"index":416},{"line":24,"col":32,"index":446}],"48":[0,{"line":25,"col":27,"index":475},{"line":25,"col":29,"index":477}],"49":[0,{"line":25,"col":32,"index":480},{"line":25,"col":35,"index":483}],"50":[0,{"line":25,"col":38,"index":486},{"line":25,"col":40,"index":488}],"51":[0,{"line":25,"col":26,"index":474},{"line":25,"col":43,"index":491}],"52":[0,{"line":25,"col":2,"index":450},{"line":25,"col":43,"index":491}],"53":[0,{"line":28,"col":23,"index":580},{"line":28,"col":25,"index":582}],"54":[0,{"line":28,"col":31,"index":588},{"line":28,"col":34,"index":591}],"55":[0,{"line":28,"col":40,"index":597},{"line":28,"col":42,"index":599}],"56":[0,{"line":28,"col":18,"index":575},{"line":28,"col":44,"index":601}],"57":[0,{"line":28,"col":2,"index":559},{"line":28,"col":44,"index":601}],"58":[0,{"line":29,"col":32,"index":635},{"line":29,"col":34,"index":637}],"59":[0,{"line":29,"col":40,"index":643},{"line":29,"col":43,"index":646}],"60":[0,{"line":29,"col":49,"index":652},{"line":29,"col":51,"index":654}],"61":[0,{"line":29,"col":27,"index":630},{"line":29,"col":54,"index":657}],"62":[0,{"line":29,"col":2,"index":605},{"line":29,"col":54,"index":657}],"63":[0,{"line":32,"col":33,"index":759},{"line":32,"col":35,"index":761}],"64":[0,{"line":33,"col":35,"index":800},{"line":33,"col":37,"index":802}],"65":[0,{"line":33,"col":48,"index":813},{"line":33,"col":50,"index":815}],"66":[0,{"line":34,"col":28,"index":847},{"line":34,"col":30,"index":849}],"67":[0,{"line":32,"col":6,"index":732},{"line":34,"col":125,"index":851}],"68":[0,{"line":31,"col":2,"index":711},{"line":34,"col":142,"index":851}],"69":[0,{"line":37,"col":33,"index":913},{"line":37,"col":35,"index":915}],"70":[0,{"line":38,"col":35,"index":955},{"line":38,"col":37,"index":957}],"71":[0,{"line":38,"col":48,"index":968},{"line":38,"col":50,"index":970}],"72":[0,{"line":39,"col":28,"index":1003},{"line":39,"col":30,"index":1005}],"73":[0,{"line":37,"col":6,"index":886},{"line":39,"col":128,"index":1008}],"74":[0,{"line":36,"col":2,"index":856},{"line":39,"col":154,"index":1008}],"75":[0,{"line":44,"col":9,"index":1122},{"line":44,"col":11,"index":1124}],"76":[0,{"line":44,"col":2,"index":1115},{"line":44,"col":11,"index":1124}],"77":[0,{"line":45,"col":9,"index":1135},{"line":45,"col":12,"index":1138}],"78":[0,{"line":45,"col":2,"index":1128},{"line":45,"col":12,"index":1138}],"79":[0,{"line":50,"col":19,"index":1307},{"line":50,"col":19,"index":1307}],"80":[0,{"line":50,"col":23,"index":1311},{"line":50,"col":23,"index":1311}],"81":[0,{"line":50,"col":19,"index":1307},{"line":50,"col":23,"index":1311}],"82":[0,{"line":50,"col":2,"index":1290},{"line":50,"col":23,"index":1311}],"83":[0,{"line":51,"col":19,"index":1332},{"line":51,"col":19,"index":1332}],"84":[0,{"line":51,"col":23,"index":1336},{"line":51,"col":23,"index":1336}],"85":[0,{"line":51,"col":19,"index":1332},{"line":51,"col":23,"index":1336}],"86":[0,{"line":51,"col":2,"index":1315},{"line":51,"col":23,"index":1336}],"87":[0,{"line":52,"col":19,"index":1357},{"line":52,"col":19,"index":1357}],"88":[0,{"line":52,"col":23,"index":1361},{"line":52,"col":23,"index":1361}],"89":[0,{"line":52,"col":19,"index":1357},{"line":52,"col":23,"index":1361}],"90":[0,{"line":52,"col":2,"index":1340},{"line":52,"col":23,"index":1361}],"91":[0,{"line":53,"col":19,"index":1382},{"line":53,"col":19,"index":1382}],"92":[0,{"line":53,"col":23,"index":1386},{"line":53,"col":23,"index":1386}],"93":[0,{"line":53,"col":19,"index":1382},{"line":53,"col":23,"index":1386}],"94":[0,{"line":53,"col":2,"index":1365},{"line":53,"col":23,"index":1386}],"95":[0,{"line":54,"col":19,"index":1407},{"line":54,"col":19,"index":1407}],"96":[0,{"line":54,"col":23,"index":1411},{"line":54,"col":23,"index":1411}],"97":[0,{"line":54,"col":19,"index":1407},{"line":54,"col":23,"index":1411}],"98":[0,{"line":54,"col":2,"index":1390},{"line":54,"col":23,"index":1411}],"99":[0,{"line":55,"col":19,"index":1432},{"line":55,"col":19,"index":1432}],"100":[0,{"line":55,"col":21,"index":1434},{"line":55,"col":21,"index":1434}],"101":[0,{"line":55,"col":19,"index":1432},{"line":55,"col":21,"index":1434}],"102":[0,{"line":55,"col":2,"index":1415},{"line":55,"col":21,"index":1434}],"103":[0,{"line":56,"col":16,"index":1452},{"line":56,"col":18,"index":1454}],"104":[0,{"line":56,"col":15,"index":1451},{"line":56,"col":18,"index":1454}],"105":[0,{"line":56,"col":2,"index":1438},{"line":56,"col":18,"index":1454}],"106":[0,{"line":57,"col":18,"index":1474},{"line":57,"col":18,"index":1474}],"107":[0,{"line":57,"col":22,"index":1478},{"line":57,"col":22,"index":1478}],"108":[0,{"line":57,"col":18,"index":1474},{"line":57,"col":22,"index":1478}],"109":[0,{"line":57,"col":2,"index":1458},{"line":57,"col":22,"index":1478}],"110":[0,{"line":58,"col":18,"index":1498},{"line":58,"col":18,"index":1498}],"111":[0,{"line":58,"col":23,"index":1503},{"line":58,"col":23,"index":1503}],"112":[0,{"line":58,"col":18,"index":1498},{"line":58,"col":23,"index":1503}],"113":[0,{"line":58,"col":2,"index":1482},{"line":58,"col":23,"index":1503}],"114":[0,{"line":59,"col":18,"index":1523},{"line":59,"col":18,"index":1523}],"115":[0,{"line":59,"col":22,"index":1527},{"line":59,"col":22,"index":1527}],"116":[0,{"line":59,"col":18,"index":1523},{"line":59,"col":22,"index":1527}],"117":[0,{"line":59,"col":2,"index":1507},{"line":59,"col":22,"index":1527}],"118":[0,{"line":60,"col":18,"index":1547},{"line":60,"col":18,"index":1547}],"119":[0,{"line":60,"col":23,"index":1552},{"line":60,"col":23,"index":1552}],"120":[0,{"line":60,"col":18,"index":1547},{"line":60,"col":23,"index":1552}],"121":[0,{"line":60,"col":2,"index":1531},{"line":60,"col":23,"index":1552}],"122":[0,{"line":61,"col":20,"index":1574},{"line":61,"col":20,"index":1574}],"123":[0,{"line":61,"col":25,"index":1579},{"line":61,"col":25,"index":1579}],"124":[0,{"line":61,"col":20,"index":1574},{"line":61,"col":25,"index":1579}],"125":[0,{"line":61,"col":2,"index":1556},{"line":61,"col":25,"index":1579}],"126":[0,{"line":62,"col":18,"index":1599},{"line":62,"col":18,"index":1599}],"127":[0,{"line":62,"col":23,"index":1604},{"line":62,"col":23,"index":1604}],"128":[0,{"line":62,"col":18,"index":1599},{"line":62,"col":23,"index":1604}],"129":[0,{"line":62,"col":2,"index":1583},{"line":62,"col":23,"index":1604}],"130":[0,{"line":64,"col":6,"index":1631},{"line":64,"col":6,"index":1631}],"131":[0,{"line":64,"col":10,"index":1635},{"line":64,"col":10,"index":1635}],"132":[0,{"line":64,"col":6,"index":1631},{"line":64,"col":10,"index":1635}],"133":[0,{"line":64,"col":15,"index":1640},{"line":64,"col":15,"index":1640}],"134":[0,{"line":64,"col":6,"index":1631},{"line":64,"col":15,"index":1640}],"135":[0,{"line":63,"col":2,"index":1608},{"line":65,"col":38,"index":1644}],"136":[0,{"line":66,"col":25,"index":1671},{"line":66,"col":25,"index":1671}],"137":[0,{"line":66,"col":30,"index":1676},{"line":66,"col":32,"index":1678}],"138":[0,{"line":66,"col":25,"index":1671},{"line":66,"col":33,"index":1679}],"139":[0,{"line":66,"col":2,"index":1648},{"line":66,"col":33,"index":1679}],"140":[0,{"line":67,"col":23,"index":1704},{"line":67,"col":26,"index":1707}],"141":[0,{"line":67,"col":35,"index":1716},{"line":67,"col":35,"index":1716}],"142":[0,{"line":67,"col":40,"index":1721},{"line":67,"col":40,"index":1721}],"143":[0,{"line":67,"col":35,"index":1716},{"line":67,"col":40,"index":1721}],"144":[0,{"line":67,"col":23,"index":1704},{"line":67,"col":41,"index":1722}],"145":[0,{"line":67,"col":2,"index":1683},{"line":67,"col":41,"index":1722}],"146":[0,{"line":70,"col":20,"index":1761},{"line":70,"col":22,"index":1763}],"147":[0,{"line":70,"col":16,"index":1757},{"line":70,"col":23,"index":1764}],"148":[0,{"line":70,"col":31,"index":1772},{"line":70,"col":31,"index":1772}],"149":[0,{"line":70,"col":34,"index":1775},{"line":70,"col":34,"index":1775}],"150":[0,{"line":70,"col":27,"index":1768},{"line":70,"col":35,"index":1776}],"151":[0,{"line":70,"col":2,"index":1743},{"line":70,"col":35,"index":1776}],"152":[0,{"line":72,"col":2,"index":1815},{"line":72,"col":10,"index":1823}],"153":[0,{"line":73,"col":33,"index":1858},{"line":73,"col":36,"index":1861}],"154":[0,{"line":73,"col":29,"index":1854},{"line":73,"col":37,"index":1862}],"155":[0,{"line":73,"col":41,"index":1866},{"line":73,"col":45,"index":1870}],"156":[0,{"line":73,"col":2,"index":1827},{"line":73,"col":45,"index":1870}],"157":[0,{"line":76,"col":9,"index":1908},{"line":76,"col":11,"index":1910}],"158":[0,{"line":76,"col":2,"index":1901},{"line":76,"col":11,"index":1910}],"159":[0,{"line":77,"col":25,"index":1937},{"line":77,"col":26,"index":1938}],"160":[0,{"line":77,"col":2,"index":1914},{"line":77,"col":26,"index":1938}],"161":[0,{"line":78,"col":15,"index":1955},{"line":78,"col":15,"index":1955}],"162":[0,{"line":78,"col":18,"index":1958},{"line":78,"col":18,"index":1958}],"163":[0,{"line":78,"col":23,"index":1963},{"line":78,"col":23,"index":1963}],"164":[0,{"line":78,"col":27,"index":1967},{"line":78,"col":27,"index":1967}],"165":[0,{"line":78,"col":23,"index":1963},{"line":78,"col":27,"index":1967}],"166":[0,{"line":78,"col":2,"index":1942},{"line":78,"col":27,"index":1967}],"167":[0,{"line":79,"col":10,"index":1979},{"line":79,"col":15,"index":1984}],"168":[0,{"line":79,"col":20,"index":1989},{"line":79,"col":25,"index":1994}],"169":[0,{"line":79,"col":29,"index":1998},{"line":79,"col":29,"index":1998}],"170":[0,{"line":79,"col":20,"index":1989},{"line":79,"col":29,"index":1998}],"171":[0,{"line":79,"col":2,"index":1971},{"line":79,"col":29,"index":1998}],"172":[0,{"line":80,"col":11,"index":2011},{"line":80,"col":11,"index":2011}],"173":[0,{"line":80,"col":21,"index":2021},{"line":80,"col":21,"index":2021}],"174":[0,{"line":80,"col":16,"index":2016},{"line":80,"col":21,"index":2021}],"175":[0,{"line":80,"col":16,"index":2016},{"line":80,"col":21,"index":2021}],"176":[0,{"line":80,"col":2,"index":2002},{"line":80,"col":21,"index":2021}],"177":[0,{"line":81,"col":13,"index":2036},{"line":81,"col":13,"index":2036}],"178":[0,{"line":81,"col":22,"index":2045},{"line":81,"col":22,"index":2045}],"179":[0,{"line":81,"col":18,"index":2041},{"line":81,"col":23,"index":2046}],"180":[0,{"line":81,"col":2,"index":2025},{"line":81,"col":23,"index":2046}],"181":[0,{"line":84,"col":8,"index":2078},{"line":84,"col":8,"index":2078}],"182":[0,{"line":84,"col":11,"index":2081},{"line":84,"col":11,"index":2081}],"183":[0,{"line":84,"col":16,"index":2086},{"line":84,"col":18,"index":2088}],"184":[0,{"line":84,"col":21,"index":2091},{"line":84,"col":23,"index":2093}],"185":[0,{"line":84,"col":29,"index":2099},{"line":84,"col":31,"index":2101}],"186":[0,{"line":84,"col":15,"index":2085},{"line":84,"col":31,"index":2101}],"187":[0,{"line":85,"col":6,"index":2113},{"line":85,"col":6,"index":2113}],"188":[0,{"line":85,"col":10,"index":2117},{"line":85,"col":10,"index":2117}],"189":[0,{"line":85,"col":6,"index":2113},{"line":85,"col":10,"index":2117}],"190":[0,{"line":84,"col":2,"index":2072},{"line":86,"col":51,"index":2121}],"191":[0,{"line":88,"col":10,"index":2164},{"line":88,"col":10,"index":2164}],"192":[0,{"line":88,"col":15,"index":2169},{"line":88,"col":15,"index":2169}],"193":[0,{"line":88,"col":21,"index":2175},{"line":88,"col":21,"index":2175}],"194":[0,{"line":88,"col":14,"index":2168},{"line":88,"col":21,"index":2175}],"195":[0,{"line":89,"col":6,"index":2187},{"line":89,"col":6,"index":2187}],"196":[0,{"line":88,"col":2,"index":2156},{"line":90,"col":37,"index":2191}],"197":[0,{"line":92,"col":9,"index":2203},{"line":92,"col":11,"index":2205}],"198":[0,{"line":92,"col":2,"index":2196},{"line":92,"col":11,"index":2205}],"199":[0,{"line":93,"col":21,"index":2228},{"line":93,"col":21,"index":2228}],"200":[0,{"line":93,"col":16,"index":2223},{"line":93,"col":21,"index":2228}],"201":[0,{"line":93,"col":16,"index":2223},{"line":93,"col":21,"index":2228}],"202":[0,{"line":93,"col":2,"index":2209},{"line":93,"col":21,"index":2228}],"203":[0,{"line":96,"col":15,"index":2280},{"line":96,"col":15,"index":2280}],"204":[0,{"line":96,"col":18,"index":2283},{"line":96,"col":20,"index":2285}],"205":[0,{"line":96,"col":23,"index":2288},{"line":96,"col":23,"index":2288}],"206":[0,{"line":96,"col":26,"index":2291},{"line":96,"col":28,"index":2293}],"207":[0,{"line":96,"col":32,"index":2297},{"line":96,"col":34,"index":2299}],"208":[0,{"line":97,"col":8,"index":2313},{"line":97,"col":8,"index":2313}],"209":[0,{"line":97,"col":12,"index":2317},{"line":97,"col":12,"index":2317}],"210":[0,{"line":97,"col":8,"index":2313},{"line":97,"col":12,"index":2317}],"211":[0,{"line":98,"col":4,"index":2324},{"line":98,"col":4,"index":2324}],"212":[0,{"line":99,"col":9,"index":2335},{"line":99,"col":9,"index":2335}],"213":[0,{"line":97,"col":4,"index":2309},{"line":99,"col":30,"index":2335}],"214":[0,{"line":96,"col":2,"index":2267},{"line":100,"col":74,"index":2339}],"215":[0,{"line":96,"col":2,"index":2267},{"line":100,"col":74,"index":2339}],"216":[0,{"line":104,"col":17,"index":2383},{"line":104,"col":21,"index":2387}],"217":[0,{"line":104,"col":27,"index":2393},{"line":104,"col":30,"index":2396}],"218":[0,{"line":104,"col":17,"index":2383},{"line":104,"col":30,"index":2396}],"219":[0,{"line":104,"col":2,"index":2368},{"line":104,"col":30,"index":2396}],"220":[0,{"line":105,"col":16,"index":2414},{"line":105,"col":20,"index":2418}],"221":[0,{"line":105,"col":25,"index":2423},{"line":105,"col":28,"index":2426}],"222":[0,{"line":105,"col":16,"index":2414},{"line":105,"col":28,"index":2426}],"223":[0,{"line":105,"col":2,"index":2400},{"line":105,"col":28,"index":2426}],"224":[0,{"line":106,"col":21,"index":2449},{"line":106,"col":25,"index":2453}],"225":[0,{"line":106,"col":35,"index":2463},{"line":106,"col":38,"index":2466}],"226":[0,{"line":106,"col":21,"index":2449},{"line":106,"col":38,"index":2466}],"227":[0,{"line":106,"col":2,"index":2430},{"line":106,"col":38,"index":2466}],"228":[0,{"line":107,"col":8,"index":2476},{"line":107,"col":8,"index":2476}],"229":[0,{"line":107,"col":13,"index":2481},{"line":107,"col":13,"index":2481}],"230":[0,{"line":107,"col":2,"index":2470},{"line":107,"col":13,"index":2481}],"231":[0,{"line":108,"col":8,"index":2491},{"line":108,"col":8,"index":2491}],"232":[0,{"line":108,"col":15,"index":2498},{"line":108,"col":15,"index":2498}],"233":[0,{"line":108,"col":13,"index":2496},{"line":108,"col":16,"index":2499}],"234":[0,{"line":108,"col":26,"index":2509},{"line":108,"col":26,"index":2509}],"235":[0,{"line":108,"col":22,"index":2505},{"line":108,"col":27,"index":2510}],"236":[0,{"line":108,"col":13,"index":2496},{"line":108,"col":27,"index":2510}],"237":[0,{"line":108,"col":2,"index":2485},{"line":108,"col":27,"index":2510}],"238":[0,{"line":109,"col":19,"index":2531},{"line":109,"col":19,"index":2531}],"239":[0,{"line":109,"col":26,"index":2538},{"line":109,"col":26,"index":2538}],"240":[0,{"line":109,"col":24,"index":2536},{"line":109,"col":27,"index":2539}],"241":[0,{"line":109,"col":37,"index":2549},{"line":109,"col":37,"index":2549}],"242":[0,{"line":109,"col":33,"index":2545},{"line":109,"col":38,"index":2550}],"243":[0,{"line":109,"col":24,"index":2536},{"line":109,"col":38,"index":2550}],"244":[0,{"line":109,"col":2,"index":2514},{"line":109,"col":38,"index":2550}],"245":[0,{"line":110,"col":18,"index":2570},{"line":110,"col":18,"index":2570}],"246":[0,{"line":110,"col":25,"index":2577},{"line":110,"col":25,"index":2577}],"247":[0,{"line":110,"col":23,"index":2575},{"line":110,"col":26,"index":2578}],"248":[0,{"line":110,"col":35,"index":2587},{"line":110,"col":35,"index":2587}],"249":[0,{"line":110,"col":31,"index":2583},{"line":110,"col":36,"index":2588}],"250":[0,{"line":110,"col":23,"index":2575},{"line":110,"col":36,"index":2588}],"251":[0,{"line":110,"col":2,"index":2554},{"line":110,"col":36,"index":2588}],"252":[0,{"line":113,"col":6,"index":2626},{"line":113,"col":10,"index":2630}],"253":[0,{"line":114,"col":6,"index":2639},{"line":114,"col":9,"index":2642}],"254":[0,{"line":115,"col":6,"index":2651},{"line":115,"col":10,"index":2655}],"255":[0,{"line":112,"col":23,"index":2614},{"line":116,"col":68,"index":2659}],"256":[0,{"line":112,"col":2,"index":2593},{"line":116,"col":68,"index":2659}],"257":[0,{"line":119,"col":6,"index":2701},{"line":119,"col":10,"index":2705}],"258":[0,{"line":120,"col":6,"index":2714},{"line":120,"col":9,"index":2717}],"259":[0,{"line":121,"col":6,"index":2726},{"line":121,"col":10,"index":2730}],"260":[0,{"line":118,"col":27,"index":2689},{"line":122,"col":72,"index":2734}],"261":[0,{"line":118,"col":2,"index":2664},{"line":122,"col":72,"index":2734}],"262":[0,{"line":125,"col":6,"index":2770},{"line":125,"col":10,"index":2774}],"263":[0,{"line":126,"col":6,"index":2783},{"line":126,"col":9,"index":2786}],"264":[0,{"line":127,"col":6,"index":2795},{"line":127,"col":10,"index":2799}],"265":[0,{"line":124,"col":22,"index":2759},{"line":128,"col":66,"index":2803}],"266":[0,{"line":124,"col":2,"index":2739},{"line":128,"col":66,"index":2803}],"267":[0,{"line":131,"col":6,"index":2844},{"line":131,"col":10,"index":2848}],"268":[0,{"line":132,"col":6,"index":2857},{"line":132,"col":9,"index":2860}],"269":[0,{"line":133,"col":6,"index":2869},{"line":133,"col":10,"index":2873}],"270":[0,{"line":130,"col":26,"index":2832},{"line":134,"col":71,"index":2877}],"271":[0,{"line":130,"col":2,"index":2808},{"line":134,"col":71,"index":2877}],"272":[0,{"line":136,"col":21,"index":2901},{"line":136,"col":24,"index":2904}],"273":[0,{"line":136,"col":27,"index":2907},{"line":136,"col":27,"index":2907}],"274":[0,{"line":136,"col":34,"index":2914},{"line":136,"col":34,"index":2914}],"275":[0,{"line":136,"col":17,"index":2897},{"line":136,"col":34,"index":2914}],"276":[0,{"line":136,"col":2,"index":2882},{"line":136,"col":34,"index":2914}],"277":[0,{"line":137,"col":16,"index":2932},{"line":137,"col":16,"index":2932}],"278":[0,{"line":137,"col":19,"index":2935},{"line":137,"col":19,"index":2935}],"279":[0,{"line":137,"col":28,"index":2944},{"line":137,"col":28,"index":2944}],"280":[0,{"line":137,"col":32,"index":2948},{"line":137,"col":33,"index":2949}],"281":[0,{"line":137,"col":28,"index":2944},{"line":137,"col":33,"index":2949}],"282":[0,{"line":137,"col":36,"index":2952},{"line":137,"col":36,"index":2952}],"283":[0,{"line":137,"col":40,"index":2956},{"line":137,"col":40,"index":2956}],"284":[0,{"line":137,"col":36,"index":2952},{"line":137,"col":40,"index":2956}],"285":[0,{"line":137,"col":47,"index":2963},{"line":137,"col":47,"index":2963}],"286":[0,{"line":137,"col":51,"index":2967},{"line":137,"col":51,"index":2967}],"287":[0,{"line":137,"col":47,"index":2963},{"line":137,"col":51,"index":2967}],"288":[0,{"line":137,"col":24,"index":2940},{"line":137,"col":51,"index":2967}],"289":[0,{"line":137,"col":2,"index":2918},{"line":137,"col":51,"index":2967}],"290":[0,{"line":140,"col":10,"index":3006},{"line":140,"col":12,"index":3008}],"291":[0,{"line":140,"col":17,"index":3013},{"line":140,"col":19,"index":3015}],"292":[0,{"line":140,"col":10,"index":3006},{"line":140,"col":19,"index":3015}],"293":[0,{"line":140,"col":2,"index":2998},{"line":140,"col":19,"index":3015}],"294":[0,{"line":141,"col":15,"index":3032},{"line":141,"col":16,"index":3033}],"295":[0,{"line":141,"col":22,"index":3039},{"line":141,"col":24,"index":3041}],"296":[0,{"line":141,"col":15,"index":3032},{"line":141,"col":25,"index":3042}],"297":[0,{"line":141,"col":2,"index":3019},{"line":141,"col":25,"index":3042}],"298":[0,{"line":144,"col":13,"index":3106},{"line":144,"col":13,"index":3106}],"299":[0,{"line":144,"col":16,"index":3109},{"line":144,"col":16,"index":3109}],"300":[0,{"line":144,"col":21,"index":3114},{"line":144,"col":21,"index":3114}],"301":[0,{"line":144,"col":2,"index":3095},{"line":144,"col":21,"index":3114}],"302":[0,{"line":145,"col":31,"index":3147},{"line":145,"col":33,"index":3149}],"303":[0,{"line":145,"col":36,"index":3152},{"line":145,"col":37,"index":3153}],"304":[0,{"line":145,"col":24,"index":3140},{"line":145,"col":38,"index":3154}],"305":[0,{"line":145,"col":2,"index":3118},{"line":145,"col":38,"index":3154}],"306":[0,{"line":146,"col":22,"index":3178},{"line":146,"col":24,"index":3180}],"307":[0,{"line":146,"col":33,"index":3189},{"line":146,"col":34,"index":3190}],"308":[0,{"line":146,"col":22,"index":3178},{"line":146,"col":35,"index":3191}],"309":[0,{"line":146,"col":2,"index":3158},{"line":146,"col":35,"index":3191}],"310":[0,{"line":148,"col":19,"index":3269},{"line":148,"col":19,"index":3269}],"311":[0,{"line":148,"col":22,"index":3272},{"line":148,"col":26,"index":3276}],"312":[0,{"line":148,"col":16,"index":3266},{"line":148,"col":27,"index":3277}],"313":[0,{"line":148,"col":2,"index":3252},{"line":148,"col":27,"index":3277}],"314":[0,{"line":153,"col":22,"index":3446},{"line":153,"col":22,"index":3446}],"315":[0,{"line":153,"col":31,"index":3455},{"line":153,"col":31,"index":3455}],"316":[0,{"line":153,"col":36,"index":3460},{"line":153,"col":36,"index":3460}],"317":[0,{"line":153,"col":40,"index":3464},{"line":153,"col":41,"index":3465}],"318":[0,{"line":153,"col":36,"index":3460},{"line":153,"col":41,"index":3465}],"319":[0,{"line":153,"col":31,"index":3455},{"line":153,"col":41,"index":3465}],"320":[0,{"line":153,"col":22,"index":3446},{"line":153,"col":42,"index":3466}],"321":[0,{"line":153,"col":2,"index":3426},{"line":153,"col":42,"index":3466}],"322":[0,{"line":155,"col":25,"index":3523},{"line":155,"col":25,"index":3523}],"323":[0,{"line":155,"col":28,"index":3526},{"line":155,"col":32,"index":3530}],"324":[0,{"line":155,"col":18,"index":3516},{"line":155,"col":33,"index":3531}],"325":[0,{"line":155,"col":42,"index":3540},{"line":155,"col":42,"index":3540}],"326":[0,{"line":155,"col":45,"index":3543},{"line":155,"col":47,"index":3545}],"327":[0,{"line":155,"col":54,"index":3552},{"line":155,"col":54,"index":3552}],"328":[0,{"line":155,"col":58,"index":3556},{"line":155,"col":60,"index":3558}],"329":[0,{"line":155,"col":54,"index":3552},{"line":155,"col":60,"index":3558}],"330":[0,{"line":155,"col":40,"index":3538},{"line":155,"col":60,"index":3558}],"331":[0,{"line":155,"col":40,"index":3538},{"line":155,"col":60,"index":3558}],"332":[0,{"line":155,"col":40,"index":3538},{"line":155,"col":60,"index":3558}],"333":[0,{"line":155,"col":40,"index":3538},{"line":155,"col":60,"index":3558}],"334":[0,{"line":155,"col":40,"index":3538},{"line":155,"col":60,"index":3558}],"335":[0,{"line":155,"col":40,"index":3538},{"line":155,"col":60,"index":3558}],"336":[0,{"line":155,"col":40,"index":3538},{"line":155,"col":60,"index":3558}],"337":[0,{"line":155,"col":40,"index":3538},{"line":155,"col":60,"index":3558}],"338":[0,{"line":155,"col":40,"index":3538},{"line":155,"col":60,"index":3558}],"339":[0,{"line":155,"col":40,"index":3538},{"line":155,"col":60,"index":3558}],"340":[0,{"line":155,"col":18,"index":3516},{"line":155,"col":62,"index":3560}],"341":[0,{"line":155,"col":2,"index":3500},{"line":155,"col":62,"index":3560}],"342":[0,{"line":158,"col":21,"index":3625},{"line":158,"col":21,"index":3625}],"343":[0,{"line":158,"col":15,"index":3619},{"line":158,"col":22,"index":3626}],"344":[0,{"line":158,"col":4,"index":3608},{"line":158,"col":22,"index":3626}],"345":[0,{"line":160,"col":6,"index":3644},{"line":160,"col":6,"index":3644}],"346":[0,{"line":160,"col":10,"index":3648},{"line":160,"col":11,"index":3649}],"347":[0,{"line":160,"col":6,"index":3644},{"line":160,"col":11,"index":3649}],"348":[0,{"line":161,"col":11,"index":3663},{"line":161,"col":11,"index":3663}],"349":[0,{"line":161,"col":6,"index":3658},{"line":161,"col":11,"index":3663}],"350":[0,{"line":161,"col":6,"index":3658},{"line":161,"col":11,"index":3663}],"351":[0,{"line":159,"col":4,"index":3632},{"line":162,"col":41,"index":3669}],"352":[0,{"line":158,"col":4,"index":3608},{"line":162,"col":65,"index":3669}],"353":[0,{"line":157,"col":2,"index":3581},{"line":163,"col":94,"index":3673}],"354":[0,{"line":165,"col":22,"index":3712},{"line":165,"col":22,"index":3712}],"355":[0,{"line":165,"col":31,"index":3721},{"line":165,"col":31,"index":3721}],"356":[0,{"line":165,"col":36,"index":3726},{"line":165,"col":39,"index":3729}],"357":[0,{"line":165,"col":31,"index":3721},{"line":165,"col":39,"index":3729}],"358":[0,{"line":165,"col":22,"index":3712},{"line":165,"col":40,"index":3730}],"359":[0,{"line":165,"col":2,"index":3692},{"line":165,"col":40,"index":3730}],"360":[0,{"line":167,"col":10,"index":3743},{"line":167,"col":10,"index":3743}],"361":[0,{"line":167,"col":18,"index":3751},{"line":167,"col":18,"index":3751}],"362":[0,{"line":167,"col":23,"index":3756},{"line":167,"col":23,"index":3756}],"363":[0,{"line":167,"col":27,"index":3760},{"line":167,"col":27,"index":3760}],"364":[0,{"line":167,"col":23,"index":3756},{"line":167,"col":27,"index":3760}],"365":[0,{"line":167,"col":18,"index":3751},{"line":167,"col":27,"index":3760}],"366":[0,{"line":167,"col":10,"index":3743},{"line":167,"col":28,"index":3761}],"367":[0,{"line":167,"col":2,"index":3735},{"line":167,"col":28,"index":3761}],"368":[0,{"line":169,"col":23,"index":3787},{"line":169,"col":23,"index":3787}],"369":[0,{"line":169,"col":37,"index":3801},{"line":169,"col":37,"index":3801}],"370":[0,{"line":169,"col":40,"index":3804},{"line":169,"col":40,"index":3804}],"371":[0,{"line":169,"col":33,"index":3797},{"line":169,"col":41,"index":3805}],"372":[0,{"line":169,"col":23,"index":3787},{"line":169,"col":42,"index":3806}],"373":[0,{"line":169,"col":2,"index":3766},{"line":169,"col":42,"index":3806}],"374":[0,{"line":172,"col":17,"index":3865},{"line":172,"col":17,"index":3865}],"375":[0,{"line":172,"col":20,"index":3868},{"line":172,"col":20,"index":3868}],"376":[0,{"line":172,"col":12,"index":3860},{"line":172,"col":21,"index":3869}],"377":[0,{"line":172,"col":12,"index":3860},{"line":172,"col":28,"index":3876}],"378":[0,{"line":172,"col":2,"index":3850},{"line":172,"col":28,"index":3876}],"379":[0,{"line":175,"col":20,"index":3920},{"line":175,"col":20,"index":3920}],"380":[0,{"line":175,"col":23,"index":3923},{"line":175,"col":23,"index":3923}],"381":[0,{"line":175,"col":26,"index":3926},{"line":175,"col":26,"index":3926}],"382":[0,{"line":175,"col":19,"index":3919},{"line":175,"col":27,"index":3927}],"383":[0,{"line":175,"col":2,"index":3902},{"line":175,"col":27,"index":3927}],"384":[0,{"line":176,"col":24,"index":3953},{"line":176,"col":24,"index":3953}],"385":[0,{"line":176,"col":27,"index":3956},{"line":176,"col":27,"index":3956}],"386":[0,{"line":176,"col":30,"index":3959},{"line":176,"col":30,"index":3959}],"387":[0,{"line":176,"col":20,"index":3949},{"line":176,"col":31,"index":3960}],"388":[0,{"line":176,"col":2,"index":3931},{"line":176,"col":31,"index":3960}],"389":[0,{"line":177,"col":18,"index":3980},{"line":177,"col":18,"index":3980}],"390":[0,{"line":177,"col":23,"index":3985},{"line":177,"col":23,"index":3985}],"391":[0,{"line":177,"col":18,"index":3980},{"line":177,"col":23,"index":3985}],"392":[0,{"line":177,"col":2,"index":3964},{"line":177,"col":23,"index":3985}],"393":[0,{"line":178,"col":19,"index":4006},{"line":178,"col":19,"index":4006}],"394":[0,{"line":178,"col":22,"index":4009},{"line":178,"col":22,"index":4009}],"395":[0,{"line":178,"col":25,"index":4012},{"line":178,"col":25,"index":4012}],"396":[0,{"line":178,"col":18,"index":4005},{"line":178,"col":26,"index":4013}],"397":[0,{"line":178,"col":2,"index":3989},{"line":178,"col":26,"index":4013}],"398":[0,{"line":179,"col":24,"index":4039},{"line":179,"col":24,"index":4039}],"399":[0,{"line":179,"col":27,"index":4042},{"line":179,"col":27,"index":4042}],"400":[0,{"line":179,"col":30,"index":4045},{"line":179,"col":30,"index":4045}],"401":[0,{"line":179,"col":19,"index":4034},{"line":179,"col":31,"index":4046}],"402":[0,{"line":179,"col":2,"index":4017},{"line":179,"col":31,"index":4046}],"403":[0,{"line":180,"col":23,"index":4071},{"line":180,"col":23,"index":4071}],"404":[0,{"line":180,"col":26,"index":4074},{"line":180,"col":26,"index":4074}],"405":[0,{"line":180,"col":29,"index":4077},{"line":180,"col":29,"index":4077}],"406":[0,{"line":180,"col":22,"index":4070},{"line":180,"col":30,"index":4078}],"407":[0,{"line":180,"col":32,"index":4080},{"line":180,"col":32,"index":4080}],"408":[0,{"line":180,"col":22,"index":4070},{"line":180,"col":33,"index":4081}],"409":[0,{"line":180,"col":2,"index":4050},{"line":180,"col":33,"index":4081}],"410":[0,{"line":181,"col":28,"index":4111},{"line":181,"col":33,"index":4116}],"411":[0,{"line":181,"col":22,"index":4105},{"line":181,"col":33,"index":4116}],"412":[0,{"line":181,"col":42,"index":4125},{"line":181,"col":45,"index":4128}],"413":[0,{"line":181,"col":36,"index":4119},{"line":181,"col":45,"index":4128}],"414":[0,{"line":181,"col":20,"index":4103},{"line":181,"col":47,"index":4130}],"415":[0,{"line":181,"col":2,"index":4085},{"line":181,"col":47,"index":4130}],"416":[0,{"line":182,"col":25,"index":4157},{"line":182,"col":30,"index":4162}],"417":[0,{"line":182,"col":33,"index":4165},{"line":182,"col":38,"index":4170}],"418":[0,{"line":182,"col":41,"index":4173},{"line":182,"col":46,"index":4178}],"419":[0,{"line":182,"col":49,"index":4181},{"line":182,"col":52,"index":4184}],"420":[0,{"line":182,"col":21,"index":4153},{"line":182,"col":53,"index":4185}],"421":[0,{"line":182,"col":2,"index":4134},{"line":182,"col":53,"index":4185}],"422":[0,{"line":183,"col":29,"index":4216},{"line":183,"col":35,"index":4222}],"423":[0,{"line":183,"col":23,"index":4210},{"line":183,"col":35,"index":4222}],"424":[0,{"line":183,"col":44,"index":4231},{"line":183,"col":47,"index":4234}],"425":[0,{"line":183,"col":38,"index":4225},{"line":183,"col":47,"index":4234}],"426":[0,{"line":183,"col":53,"index":4240},{"line":183,"col":63,"index":4250}],"427":[0,{"line":183,"col":21,"index":4208},{"line":183,"col":65,"index":4252}],"428":[0,{"line":183,"col":21,"index":4208},{"line":183,"col":65,"index":4252}],"429":[0,{"line":183,"col":2,"index":4189},{"line":183,"col":65,"index":4252}],"430":[0,{"line":184,"col":21,"index":4275},{"line":184,"col":21,"index":4275}],"431":[0,{"line":184,"col":24,"index":4278},{"line":184,"col":24,"index":4278}],"432":[0,{"line":184,"col":27,"index":4281},{"line":184,"col":27,"index":4281}],"433":[0,{"line":184,"col":17,"index":4271},{"line":184,"col":28,"index":4282}],"434":[0,{"line":184,"col":2,"index":4256},{"line":184,"col":28,"index":4282}],"435":[0,{"line":188,"col":22,"index":4354},{"line":188,"col":22,"index":4354}],"436":[0,{"line":188,"col":19,"index":4351},{"line":188,"col":22,"index":4354}],"437":[0,{"line":188,"col":28,"index":4360},{"line":188,"col":32,"index":4364}],"438":[0,{"line":188,"col":25,"index":4357},{"line":188,"col":32,"index":4364}],"439":[0,{"line":188,"col":17,"index":4349},{"line":188,"col":34,"index":4366}],"440":[0,{"line":188,"col":4,"index":4336},{"line":188,"col":34,"index":4366}],"441":[0,{"line":189,"col":4,"index":4372},{"line":189,"col":9,"index":4377}],"442":[0,{"line":189,"col":4,"index":4372},{"line":189,"col":11,"index":4379}],"443":[0,{"line":189,"col":4,"index":4372},{"line":189,"col":11,"index":4379}],"444":[0,{"line":188,"col":4,"index":4336},{"line":189,"col":47,"index":4379}],"445":[0,{"line":187,"col":2,"index":4316},{"line":189,"col":65,"index":4379}],"446":[0,{"line":192,"col":21,"index":4420},{"line":192,"col":23,"index":4422}],"447":[0,{"line":192,"col":26,"index":4425},{"line":192,"col":26,"index":4425}],"448":[0,{"line":192,"col":17,"index":4416},{"line":192,"col":27,"index":4426}],"449":[0,{"line":192,"col":4,"index":4403},{"line":192,"col":27,"index":4426}],"450":[0,{"line":193,"col":4,"index":4432},{"line":193,"col":9,"index":4437}],"451":[0,{"line":193,"col":4,"index":4432},{"line":193,"col":12,"index":4440}],"452":[0,{"line":193,"col":4,"index":4432},{"line":193,"col":12,"index":4440}],"453":[0,{"line":192,"col":4,"index":4403},{"line":193,"col":41,"index":4440}],"454":[0,{"line":191,"col":2,"index":4384},{"line":193,"col":58,"index":4440}],"455":[0,{"line":195,"col":14,"index":4457},{"line":195,"col":14,"index":4457}],"456":[0,{"line":195,"col":19,"index":4462},{"line":195,"col":19,"index":4462}],"457":[0,{"line":195,"col":24,"index":4467},{"line":195,"col":25,"index":4468}],"458":[0,{"line":195,"col":19,"index":4462},{"line":195,"col":25,"index":4468}],"459":[0,{"line":195,"col":2,"index":4445},{"line":195,"col":25,"index":4468}],"460":[0,{"line":198,"col":19,"index":4516},{"line":198,"col":19,"index":4516}],"461":[0,{"line":198,"col":24,"index":4521},{"line":198,"col":28,"index":4525}],"462":[0,{"line":198,"col":19,"index":4516},{"line":198,"col":29,"index":4526}],"463":[0,{"line":198,"col":2,"index":4499},{"line":198,"col":29,"index":4526}],"464":[0,{"line":199,"col":23,"index":4551},{"line":199,"col":27,"index":4555}],"465":[0,{"line":199,"col":38,"index":4566},{"line":199,"col":42,"index":4570}],"466":[0,{"line":199,"col":23,"index":4551},{"line":199,"col":43,"index":4571}],"467":[0,{"line":199,"col":2,"index":4530},{"line":199,"col":43,"index":4571}],"468":[0,{"line":200,"col":22,"index":4595},{"line":200,"col":22,"index":4595}],"469":[0,{"line":200,"col":18,"index":4591},{"line":200,"col":23,"index":4596}],"470":[0,{"line":200,"col":41,"index":4614},{"line":200,"col":41,"index":4614}],"471":[0,{"line":200,"col":43,"index":4616},{"line":200,"col":43,"index":4616}],"472":[0,{"line":200,"col":45,"index":4618},{"line":200,"col":45,"index":4618}],"473":[0,{"line":200,"col":37,"index":4610},{"line":200,"col":46,"index":4619}],"474":[0,{"line":200,"col":28,"index":4601},{"line":200,"col":47,"index":4620}],"475":[0,{"line":200,"col":18,"index":4591},{"line":200,"col":48,"index":4621}],"476":[0,{"line":200,"col":2,"index":4575},{"line":200,"col":48,"index":4621}],"477":[0,{"line":203,"col":20,"index":4668},{"line":203,"col":20,"index":4668}],"478":[0,{"line":203,"col":24,"index":4672},{"line":203,"col":24,"index":4672}],"479":[0,{"line":203,"col":20,"index":4668},{"line":203,"col":24,"index":4672}],"480":[0,{"line":203,"col":2,"index":4650},{"line":203,"col":24,"index":4672}],"481":[0,{"line":205,"col":13,"index":4716},{"line":205,"col":13,"index":4716}],"482":[0,{"line":205,"col":18,"index":4721},{"line":205,"col":18,"index":4721}],"483":[0,{"line":205,"col":13,"index":4716},{"line":205,"col":18,"index":4721}],"484":[0,{"line":205,"col":2,"index":4705},{"line":205,"col":18,"index":4721}],"485":[0,{"line":208,"col":2,"index":4739},{"line":208,"col":14,"index":4751}],"486":[0,{"line":209,"col":2,"index":4755},{"line":209,"col":12,"index":4765}],"487":[0,{"line":212,"col":21,"index":4803},{"line":212,"col":23,"index":4805}],"488":[0,{"line":212,"col":17,"index":4799},{"line":212,"col":24,"index":4806}],"489":[0,{"line":212,"col":2,"index":4784},{"line":212,"col":24,"index":4806}],"490":[0,{"line":214,"col":2,"index":4811},{"line":214,"col":24,"index":4833}],"491":[0,{"line":216,"col":10,"index":4846},{"line":216,"col":16,"index":4852}],"492":[0,{"line":216,"col":2,"index":4838},{"line":216,"col":16,"index":4852}],"493":[0,{"line":224,"col":19,"index":5073},{"line":224,"col":19,"index":5073}],"494":[0,{"line":224,"col":15,"index":5069},{"line":224,"col":15,"index":5069}],"495":[0,{"line":224,"col":2,"index":5056},{"line":224,"col":29,"index":5083}],"496":[0,{"line":231,"col":28,"index":5222},{"line":231,"col":30,"index":5224}],"497":[0,{"line":231,"col":39,"index":5233},{"line":231,"col":41,"index":5235}],"498":[0,{"line":232,"col":28,"index":5267},{"line":232,"col":30,"index":5269}],"499":[0,{"line":232,"col":40,"index":5279},{"line":232,"col":42,"index":5281}],"500":[0,{"line":232,"col":51,"index":5290},{"line":232,"col":53,"index":5292}],"501":[0,{"line":231,"col":6,"index":5200},{"line":232,"col":100,"index":5294}],"502":[0,{"line":230,"col":2,"index":5176},{"line":232,"col":120,"index":5294}],"503":[0,{"line":234,"col":14,"index":5311},{"line":234,"col":18,"index":5315}],"504":[0,{"line":235,"col":4,"index":5324},{"line":235,"col":8,"index":5328}],"505":[0,{"line":236,"col":16,"index":5352},{"line":236,"col":18,"index":5354}],"506":[0,{"line":236,"col":23,"index":5359},{"line":236,"col":25,"index":5361}],"507":[0,{"line":236,"col":23,"index":5359},{"line":236,"col":30,"index":5366}],"508":[0,{"line":236,"col":23,"index":5359},{"line":236,"col":30,"index":5366}],"509":[0,{"line":236,"col":35,"index":5371},{"line":236,"col":36,"index":5372}],"510":[0,{"line":236,"col":23,"index":5359},{"line":236,"col":36,"index":5372}],"511":[0,{"line":237,"col":17,"index":5391},{"line":237,"col":20,"index":5394}],"512":[0,{"line":237,"col":25,"index":5399},{"line":237,"col":28,"index":5402}],"513":[0,{"line":237,"col":25,"index":5399},{"line":237,"col":33,"index":5407}],"514":[0,{"line":237,"col":25,"index":5399},{"line":237,"col":33,"index":5407}],"515":[0,{"line":237,"col":37,"index":5411},{"line":237,"col":37,"index":5411}],"516":[0,{"line":237,"col":25,"index":5399},{"line":237,"col":37,"index":5411}],"517":[0,{"line":235,"col":4,"index":5324},{"line":237,"col":91,"index":5411}],"518":[0,{"line":235,"col":4,"index":5324},{"line":237,"col":91,"index":5411}],"519":[0,{"line":235,"col":4,"index":5324},{"line":237,"col":91,"index":5411}],"520":[0,{"line":235,"col":4,"index":5324},{"line":237,"col":91,"index":5411}],"521":[0,{"line":235,"col":4,"index":5324},{"line":237,"col":91,"index":5411}],"522":[0,{"line":234,"col":2,"index":5299},{"line":237,"col":114,"index":5411}],"523":[0,{"line":14,"col":0,"index":140},{"line":238,"col":5273,"index":5413}]}} \ No newline at end of file +{"sourceIndex":{"0":"mocked_path/testFixture/SuperSpec.qnt"},"map":{"1":[0,{"line":1,"col":12,"index":24},{"line":1,"col":12,"index":24}],"2":[0,{"line":1,"col":2,"index":14},{"line":1,"col":12,"index":24}],"3":[0,{"line":0,"col":0,"index":0},{"line":2,"col":26,"index":26}],"4":[0,{"line":5,"col":12,"index":53},{"line":5,"col":12,"index":53}],"5":[0,{"line":5,"col":2,"index":43},{"line":5,"col":12,"index":53}],"6":[0,{"line":4,"col":0,"index":29},{"line":6,"col":26,"index":55}],"7":[0,{"line":9,"col":11,"index":84},{"line":9,"col":13,"index":86}],"8":[0,{"line":9,"col":2,"index":75},{"line":9,"col":13,"index":86}],"9":[0,{"line":10,"col":9,"index":97},{"line":10,"col":11,"index":99}],"10":[0,{"line":10,"col":2,"index":90},{"line":10,"col":11,"index":99}],"11":[0,{"line":8,"col":0,"index":58},{"line":11,"col":43,"index":101}],"12":[0,{"line":16,"col":11,"index":186},{"line":16,"col":13,"index":188}],"13":[0,{"line":16,"col":2,"index":177},{"line":16,"col":13,"index":188}],"14":[0,{"line":17,"col":15,"index":205},{"line":17,"col":17,"index":207}],"15":[0,{"line":17,"col":11,"index":201},{"line":17,"col":18,"index":208}],"16":[0,{"line":17,"col":2,"index":192},{"line":17,"col":18,"index":208}],"17":[0,{"line":18,"col":19,"index":229},{"line":18,"col":21,"index":231}],"18":[0,{"line":18,"col":15,"index":225},{"line":18,"col":22,"index":232}],"19":[0,{"line":18,"col":2,"index":212},{"line":18,"col":22,"index":232}],"20":[0,{"line":19,"col":20,"index":254},{"line":19,"col":23,"index":257}],"21":[0,{"line":19,"col":15,"index":249},{"line":19,"col":24,"index":258}],"22":[0,{"line":19,"col":2,"index":236},{"line":19,"col":24,"index":258}],"23":[0,{"line":20,"col":15,"index":275},{"line":20,"col":17,"index":277}],"24":[0,{"line":20,"col":22,"index":282},{"line":20,"col":24,"index":284}],"25":[0,{"line":20,"col":15,"index":275},{"line":20,"col":24,"index":284}],"26":[0,{"line":20,"col":2,"index":262},{"line":20,"col":24,"index":284}],"27":[0,{"line":21,"col":19,"index":305},{"line":21,"col":21,"index":307}],"28":[0,{"line":21,"col":26,"index":312},{"line":21,"col":28,"index":314}],"29":[0,{"line":21,"col":19,"index":305},{"line":21,"col":28,"index":314}],"30":[0,{"line":21,"col":34,"index":320},{"line":21,"col":37,"index":323}],"31":[0,{"line":21,"col":18,"index":304},{"line":21,"col":37,"index":323}],"32":[0,{"line":21,"col":2,"index":288},{"line":21,"col":37,"index":323}],"33":[0,{"line":22,"col":21,"index":346},{"line":22,"col":23,"index":348}],"34":[0,{"line":22,"col":26,"index":351},{"line":22,"col":28,"index":353}],"35":[0,{"line":22,"col":34,"index":359},{"line":22,"col":37,"index":362}],"36":[0,{"line":22,"col":20,"index":345},{"line":22,"col":37,"index":362}],"37":[0,{"line":22,"col":2,"index":327},{"line":22,"col":37,"index":362}],"38":[0,{"line":23,"col":30,"index":394},{"line":23,"col":32,"index":396}],"39":[0,{"line":23,"col":35,"index":399},{"line":23,"col":37,"index":401}],"40":[0,{"line":23,"col":45,"index":409},{"line":23,"col":48,"index":412}],"41":[0,{"line":23,"col":29,"index":393},{"line":23,"col":48,"index":412}],"42":[0,{"line":23,"col":2,"index":366},{"line":23,"col":48,"index":412}],"43":[0,{"line":24,"col":18,"index":432},{"line":24,"col":20,"index":434}],"44":[0,{"line":24,"col":23,"index":437},{"line":24,"col":26,"index":440}],"45":[0,{"line":24,"col":29,"index":443},{"line":24,"col":31,"index":445}],"46":[0,{"line":24,"col":17,"index":431},{"line":24,"col":32,"index":446}],"47":[0,{"line":24,"col":2,"index":416},{"line":24,"col":32,"index":446}],"48":[0,{"line":25,"col":27,"index":475},{"line":25,"col":29,"index":477}],"49":[0,{"line":25,"col":32,"index":480},{"line":25,"col":35,"index":483}],"50":[0,{"line":25,"col":38,"index":486},{"line":25,"col":40,"index":488}],"51":[0,{"line":25,"col":26,"index":474},{"line":25,"col":43,"index":491}],"52":[0,{"line":25,"col":2,"index":450},{"line":25,"col":43,"index":491}],"53":[0,{"line":28,"col":23,"index":580},{"line":28,"col":25,"index":582}],"54":[0,{"line":28,"col":31,"index":588},{"line":28,"col":34,"index":591}],"55":[0,{"line":28,"col":40,"index":597},{"line":28,"col":42,"index":599}],"56":[0,{"line":28,"col":18,"index":575},{"line":28,"col":44,"index":601}],"57":[0,{"line":28,"col":2,"index":559},{"line":28,"col":44,"index":601}],"58":[0,{"line":29,"col":32,"index":635},{"line":29,"col":34,"index":637}],"59":[0,{"line":29,"col":40,"index":643},{"line":29,"col":43,"index":646}],"60":[0,{"line":29,"col":49,"index":652},{"line":29,"col":51,"index":654}],"61":[0,{"line":29,"col":27,"index":630},{"line":29,"col":54,"index":657}],"62":[0,{"line":29,"col":2,"index":605},{"line":29,"col":54,"index":657}],"63":[0,{"line":32,"col":33,"index":759},{"line":32,"col":35,"index":761}],"64":[0,{"line":33,"col":35,"index":800},{"line":33,"col":37,"index":802}],"65":[0,{"line":33,"col":48,"index":813},{"line":33,"col":50,"index":815}],"66":[0,{"line":34,"col":28,"index":847},{"line":34,"col":30,"index":849}],"67":[0,{"line":32,"col":6,"index":732},{"line":34,"col":125,"index":851}],"68":[0,{"line":31,"col":2,"index":711},{"line":34,"col":142,"index":851}],"69":[0,{"line":37,"col":33,"index":913},{"line":37,"col":35,"index":915}],"70":[0,{"line":38,"col":35,"index":955},{"line":38,"col":37,"index":957}],"71":[0,{"line":38,"col":48,"index":968},{"line":38,"col":50,"index":970}],"72":[0,{"line":39,"col":28,"index":1003},{"line":39,"col":30,"index":1005}],"73":[0,{"line":37,"col":6,"index":886},{"line":39,"col":128,"index":1008}],"74":[0,{"line":36,"col":2,"index":856},{"line":39,"col":154,"index":1008}],"75":[0,{"line":44,"col":9,"index":1122},{"line":44,"col":11,"index":1124}],"76":[0,{"line":44,"col":2,"index":1115},{"line":44,"col":11,"index":1124}],"77":[0,{"line":45,"col":9,"index":1135},{"line":45,"col":12,"index":1138}],"78":[0,{"line":45,"col":2,"index":1128},{"line":45,"col":12,"index":1138}],"79":[0,{"line":50,"col":19,"index":1307},{"line":50,"col":19,"index":1307}],"80":[0,{"line":50,"col":23,"index":1311},{"line":50,"col":23,"index":1311}],"81":[0,{"line":50,"col":19,"index":1307},{"line":50,"col":23,"index":1311}],"82":[0,{"line":50,"col":2,"index":1290},{"line":50,"col":23,"index":1311}],"83":[0,{"line":51,"col":19,"index":1332},{"line":51,"col":19,"index":1332}],"84":[0,{"line":51,"col":23,"index":1336},{"line":51,"col":23,"index":1336}],"85":[0,{"line":51,"col":19,"index":1332},{"line":51,"col":23,"index":1336}],"86":[0,{"line":51,"col":2,"index":1315},{"line":51,"col":23,"index":1336}],"87":[0,{"line":52,"col":19,"index":1357},{"line":52,"col":19,"index":1357}],"88":[0,{"line":52,"col":23,"index":1361},{"line":52,"col":23,"index":1361}],"89":[0,{"line":52,"col":19,"index":1357},{"line":52,"col":23,"index":1361}],"90":[0,{"line":52,"col":2,"index":1340},{"line":52,"col":23,"index":1361}],"91":[0,{"line":53,"col":19,"index":1382},{"line":53,"col":19,"index":1382}],"92":[0,{"line":53,"col":23,"index":1386},{"line":53,"col":23,"index":1386}],"93":[0,{"line":53,"col":19,"index":1382},{"line":53,"col":23,"index":1386}],"94":[0,{"line":53,"col":2,"index":1365},{"line":53,"col":23,"index":1386}],"95":[0,{"line":54,"col":19,"index":1407},{"line":54,"col":19,"index":1407}],"96":[0,{"line":54,"col":23,"index":1411},{"line":54,"col":23,"index":1411}],"97":[0,{"line":54,"col":19,"index":1407},{"line":54,"col":23,"index":1411}],"98":[0,{"line":54,"col":2,"index":1390},{"line":54,"col":23,"index":1411}],"99":[0,{"line":55,"col":19,"index":1432},{"line":55,"col":19,"index":1432}],"100":[0,{"line":55,"col":21,"index":1434},{"line":55,"col":21,"index":1434}],"101":[0,{"line":55,"col":19,"index":1432},{"line":55,"col":21,"index":1434}],"102":[0,{"line":55,"col":2,"index":1415},{"line":55,"col":21,"index":1434}],"103":[0,{"line":56,"col":16,"index":1452},{"line":56,"col":18,"index":1454}],"104":[0,{"line":56,"col":15,"index":1451},{"line":56,"col":18,"index":1454}],"105":[0,{"line":56,"col":2,"index":1438},{"line":56,"col":18,"index":1454}],"106":[0,{"line":57,"col":18,"index":1474},{"line":57,"col":18,"index":1474}],"107":[0,{"line":57,"col":22,"index":1478},{"line":57,"col":22,"index":1478}],"108":[0,{"line":57,"col":18,"index":1474},{"line":57,"col":22,"index":1478}],"109":[0,{"line":57,"col":2,"index":1458},{"line":57,"col":22,"index":1478}],"110":[0,{"line":58,"col":18,"index":1498},{"line":58,"col":18,"index":1498}],"111":[0,{"line":58,"col":23,"index":1503},{"line":58,"col":23,"index":1503}],"112":[0,{"line":58,"col":18,"index":1498},{"line":58,"col":23,"index":1503}],"113":[0,{"line":58,"col":2,"index":1482},{"line":58,"col":23,"index":1503}],"114":[0,{"line":59,"col":18,"index":1523},{"line":59,"col":18,"index":1523}],"115":[0,{"line":59,"col":22,"index":1527},{"line":59,"col":22,"index":1527}],"116":[0,{"line":59,"col":18,"index":1523},{"line":59,"col":22,"index":1527}],"117":[0,{"line":59,"col":2,"index":1507},{"line":59,"col":22,"index":1527}],"118":[0,{"line":60,"col":18,"index":1547},{"line":60,"col":18,"index":1547}],"119":[0,{"line":60,"col":23,"index":1552},{"line":60,"col":23,"index":1552}],"120":[0,{"line":60,"col":18,"index":1547},{"line":60,"col":23,"index":1552}],"121":[0,{"line":60,"col":2,"index":1531},{"line":60,"col":23,"index":1552}],"122":[0,{"line":61,"col":20,"index":1574},{"line":61,"col":20,"index":1574}],"123":[0,{"line":61,"col":25,"index":1579},{"line":61,"col":25,"index":1579}],"124":[0,{"line":61,"col":20,"index":1574},{"line":61,"col":25,"index":1579}],"125":[0,{"line":61,"col":2,"index":1556},{"line":61,"col":25,"index":1579}],"126":[0,{"line":62,"col":18,"index":1599},{"line":62,"col":18,"index":1599}],"127":[0,{"line":62,"col":23,"index":1604},{"line":62,"col":23,"index":1604}],"128":[0,{"line":62,"col":18,"index":1599},{"line":62,"col":23,"index":1604}],"129":[0,{"line":62,"col":2,"index":1583},{"line":62,"col":23,"index":1604}],"130":[0,{"line":64,"col":6,"index":1631},{"line":64,"col":6,"index":1631}],"131":[0,{"line":64,"col":10,"index":1635},{"line":64,"col":10,"index":1635}],"132":[0,{"line":64,"col":6,"index":1631},{"line":64,"col":10,"index":1635}],"133":[0,{"line":64,"col":15,"index":1640},{"line":64,"col":15,"index":1640}],"134":[0,{"line":64,"col":6,"index":1631},{"line":64,"col":15,"index":1640}],"135":[0,{"line":63,"col":2,"index":1608},{"line":65,"col":38,"index":1644}],"136":[0,{"line":66,"col":25,"index":1671},{"line":66,"col":25,"index":1671}],"137":[0,{"line":66,"col":30,"index":1676},{"line":66,"col":32,"index":1678}],"138":[0,{"line":66,"col":25,"index":1671},{"line":66,"col":33,"index":1679}],"139":[0,{"line":66,"col":2,"index":1648},{"line":66,"col":33,"index":1679}],"140":[0,{"line":67,"col":23,"index":1704},{"line":67,"col":26,"index":1707}],"141":[0,{"line":67,"col":35,"index":1716},{"line":67,"col":35,"index":1716}],"142":[0,{"line":67,"col":40,"index":1721},{"line":67,"col":40,"index":1721}],"143":[0,{"line":67,"col":35,"index":1716},{"line":67,"col":40,"index":1721}],"144":[0,{"line":67,"col":23,"index":1704},{"line":67,"col":41,"index":1722}],"145":[0,{"line":67,"col":2,"index":1683},{"line":67,"col":41,"index":1722}],"146":[0,{"line":70,"col":20,"index":1761},{"line":70,"col":22,"index":1763}],"147":[0,{"line":70,"col":16,"index":1757},{"line":70,"col":23,"index":1764}],"148":[0,{"line":70,"col":31,"index":1772},{"line":70,"col":31,"index":1772}],"149":[0,{"line":70,"col":34,"index":1775},{"line":70,"col":34,"index":1775}],"150":[0,{"line":70,"col":27,"index":1768},{"line":70,"col":35,"index":1776}],"151":[0,{"line":70,"col":2,"index":1743},{"line":70,"col":35,"index":1776}],"152":[0,{"line":72,"col":2,"index":1815},{"line":72,"col":10,"index":1823}],"153":[0,{"line":73,"col":33,"index":1858},{"line":73,"col":36,"index":1861}],"154":[0,{"line":73,"col":29,"index":1854},{"line":73,"col":37,"index":1862}],"155":[0,{"line":73,"col":41,"index":1866},{"line":73,"col":45,"index":1870}],"156":[0,{"line":73,"col":2,"index":1827},{"line":73,"col":45,"index":1870}],"157":[0,{"line":76,"col":9,"index":1908},{"line":76,"col":11,"index":1910}],"158":[0,{"line":76,"col":2,"index":1901},{"line":76,"col":11,"index":1910}],"159":[0,{"line":77,"col":25,"index":1937},{"line":77,"col":26,"index":1938}],"160":[0,{"line":77,"col":2,"index":1914},{"line":77,"col":26,"index":1938}],"161":[0,{"line":78,"col":15,"index":1955},{"line":78,"col":15,"index":1955}],"162":[0,{"line":78,"col":18,"index":1958},{"line":78,"col":18,"index":1958}],"163":[0,{"line":78,"col":23,"index":1963},{"line":78,"col":23,"index":1963}],"164":[0,{"line":78,"col":27,"index":1967},{"line":78,"col":27,"index":1967}],"165":[0,{"line":78,"col":23,"index":1963},{"line":78,"col":27,"index":1967}],"166":[0,{"line":78,"col":2,"index":1942},{"line":78,"col":27,"index":1967}],"167":[0,{"line":79,"col":10,"index":1979},{"line":79,"col":15,"index":1984}],"168":[0,{"line":79,"col":20,"index":1989},{"line":79,"col":25,"index":1994}],"169":[0,{"line":79,"col":29,"index":1998},{"line":79,"col":29,"index":1998}],"170":[0,{"line":79,"col":20,"index":1989},{"line":79,"col":29,"index":1998}],"171":[0,{"line":79,"col":2,"index":1971},{"line":79,"col":29,"index":1998}],"172":[0,{"line":80,"col":11,"index":2011},{"line":80,"col":11,"index":2011}],"173":[0,{"line":80,"col":21,"index":2021},{"line":80,"col":21,"index":2021}],"174":[0,{"line":80,"col":16,"index":2016},{"line":80,"col":21,"index":2021}],"175":[0,{"line":80,"col":16,"index":2016},{"line":80,"col":21,"index":2021}],"176":[0,{"line":80,"col":2,"index":2002},{"line":80,"col":21,"index":2021}],"177":[0,{"line":81,"col":13,"index":2036},{"line":81,"col":13,"index":2036}],"178":[0,{"line":81,"col":22,"index":2045},{"line":81,"col":22,"index":2045}],"179":[0,{"line":81,"col":18,"index":2041},{"line":81,"col":23,"index":2046}],"180":[0,{"line":81,"col":2,"index":2025},{"line":81,"col":23,"index":2046}],"181":[0,{"line":84,"col":8,"index":2078},{"line":84,"col":8,"index":2078}],"182":[0,{"line":84,"col":11,"index":2081},{"line":84,"col":11,"index":2081}],"183":[0,{"line":84,"col":16,"index":2086},{"line":84,"col":18,"index":2088}],"184":[0,{"line":84,"col":21,"index":2091},{"line":84,"col":23,"index":2093}],"185":[0,{"line":84,"col":29,"index":2099},{"line":84,"col":31,"index":2101}],"186":[0,{"line":84,"col":15,"index":2085},{"line":84,"col":31,"index":2101}],"187":[0,{"line":85,"col":6,"index":2113},{"line":85,"col":6,"index":2113}],"188":[0,{"line":85,"col":10,"index":2117},{"line":85,"col":10,"index":2117}],"189":[0,{"line":85,"col":6,"index":2113},{"line":85,"col":10,"index":2117}],"190":[0,{"line":84,"col":2,"index":2072},{"line":86,"col":51,"index":2121}],"191":[0,{"line":88,"col":10,"index":2164},{"line":88,"col":10,"index":2164}],"192":[0,{"line":88,"col":15,"index":2169},{"line":88,"col":15,"index":2169}],"193":[0,{"line":88,"col":21,"index":2175},{"line":88,"col":21,"index":2175}],"194":[0,{"line":88,"col":14,"index":2168},{"line":88,"col":21,"index":2175}],"195":[0,{"line":89,"col":6,"index":2187},{"line":89,"col":6,"index":2187}],"196":[0,{"line":88,"col":2,"index":2156},{"line":90,"col":37,"index":2191}],"197":[0,{"line":92,"col":9,"index":2203},{"line":92,"col":11,"index":2205}],"198":[0,{"line":92,"col":2,"index":2196},{"line":92,"col":11,"index":2205}],"199":[0,{"line":93,"col":21,"index":2228},{"line":93,"col":21,"index":2228}],"200":[0,{"line":93,"col":16,"index":2223},{"line":93,"col":21,"index":2228}],"201":[0,{"line":93,"col":16,"index":2223},{"line":93,"col":21,"index":2228}],"202":[0,{"line":93,"col":2,"index":2209},{"line":93,"col":21,"index":2228}],"203":[0,{"line":96,"col":15,"index":2280},{"line":96,"col":15,"index":2280}],"204":[0,{"line":96,"col":18,"index":2283},{"line":96,"col":20,"index":2285}],"205":[0,{"line":96,"col":23,"index":2288},{"line":96,"col":23,"index":2288}],"206":[0,{"line":96,"col":26,"index":2291},{"line":96,"col":28,"index":2293}],"207":[0,{"line":96,"col":32,"index":2297},{"line":96,"col":34,"index":2299}],"208":[0,{"line":97,"col":8,"index":2313},{"line":97,"col":8,"index":2313}],"209":[0,{"line":97,"col":12,"index":2317},{"line":97,"col":12,"index":2317}],"210":[0,{"line":97,"col":8,"index":2313},{"line":97,"col":12,"index":2317}],"211":[0,{"line":98,"col":4,"index":2324},{"line":98,"col":4,"index":2324}],"212":[0,{"line":99,"col":9,"index":2335},{"line":99,"col":9,"index":2335}],"213":[0,{"line":97,"col":4,"index":2309},{"line":99,"col":30,"index":2335}],"214":[0,{"line":96,"col":2,"index":2267},{"line":100,"col":74,"index":2339}],"215":[0,{"line":96,"col":2,"index":2267},{"line":100,"col":74,"index":2339}],"216":[0,{"line":104,"col":17,"index":2383},{"line":104,"col":21,"index":2387}],"217":[0,{"line":104,"col":27,"index":2393},{"line":104,"col":30,"index":2396}],"218":[0,{"line":104,"col":17,"index":2383},{"line":104,"col":30,"index":2396}],"219":[0,{"line":104,"col":2,"index":2368},{"line":104,"col":30,"index":2396}],"220":[0,{"line":105,"col":16,"index":2414},{"line":105,"col":20,"index":2418}],"221":[0,{"line":105,"col":25,"index":2423},{"line":105,"col":28,"index":2426}],"222":[0,{"line":105,"col":16,"index":2414},{"line":105,"col":28,"index":2426}],"223":[0,{"line":105,"col":2,"index":2400},{"line":105,"col":28,"index":2426}],"224":[0,{"line":106,"col":21,"index":2449},{"line":106,"col":25,"index":2453}],"225":[0,{"line":106,"col":35,"index":2463},{"line":106,"col":38,"index":2466}],"226":[0,{"line":106,"col":21,"index":2449},{"line":106,"col":38,"index":2466}],"227":[0,{"line":106,"col":2,"index":2430},{"line":106,"col":38,"index":2466}],"228":[0,{"line":107,"col":8,"index":2476},{"line":107,"col":8,"index":2476}],"229":[0,{"line":107,"col":13,"index":2481},{"line":107,"col":13,"index":2481}],"230":[0,{"line":107,"col":2,"index":2470},{"line":107,"col":13,"index":2481}],"231":[0,{"line":108,"col":8,"index":2491},{"line":108,"col":8,"index":2491}],"232":[0,{"line":108,"col":15,"index":2498},{"line":108,"col":15,"index":2498}],"233":[0,{"line":108,"col":13,"index":2496},{"line":108,"col":16,"index":2499}],"234":[0,{"line":108,"col":26,"index":2509},{"line":108,"col":26,"index":2509}],"235":[0,{"line":108,"col":22,"index":2505},{"line":108,"col":27,"index":2510}],"236":[0,{"line":108,"col":13,"index":2496},{"line":108,"col":27,"index":2510}],"237":[0,{"line":108,"col":2,"index":2485},{"line":108,"col":27,"index":2510}],"238":[0,{"line":109,"col":19,"index":2531},{"line":109,"col":19,"index":2531}],"239":[0,{"line":109,"col":26,"index":2538},{"line":109,"col":26,"index":2538}],"240":[0,{"line":109,"col":24,"index":2536},{"line":109,"col":27,"index":2539}],"241":[0,{"line":109,"col":37,"index":2549},{"line":109,"col":37,"index":2549}],"242":[0,{"line":109,"col":33,"index":2545},{"line":109,"col":38,"index":2550}],"243":[0,{"line":109,"col":24,"index":2536},{"line":109,"col":38,"index":2550}],"244":[0,{"line":109,"col":2,"index":2514},{"line":109,"col":38,"index":2550}],"245":[0,{"line":110,"col":18,"index":2570},{"line":110,"col":18,"index":2570}],"246":[0,{"line":110,"col":25,"index":2577},{"line":110,"col":25,"index":2577}],"247":[0,{"line":110,"col":23,"index":2575},{"line":110,"col":26,"index":2578}],"248":[0,{"line":110,"col":35,"index":2587},{"line":110,"col":35,"index":2587}],"249":[0,{"line":110,"col":31,"index":2583},{"line":110,"col":36,"index":2588}],"250":[0,{"line":110,"col":23,"index":2575},{"line":110,"col":36,"index":2588}],"251":[0,{"line":110,"col":2,"index":2554},{"line":110,"col":36,"index":2588}],"252":[0,{"line":113,"col":6,"index":2626},{"line":113,"col":10,"index":2630}],"253":[0,{"line":114,"col":6,"index":2639},{"line":114,"col":9,"index":2642}],"254":[0,{"line":115,"col":6,"index":2651},{"line":115,"col":10,"index":2655}],"255":[0,{"line":112,"col":23,"index":2614},{"line":116,"col":68,"index":2659}],"256":[0,{"line":112,"col":2,"index":2593},{"line":116,"col":68,"index":2659}],"257":[0,{"line":119,"col":6,"index":2701},{"line":119,"col":10,"index":2705}],"258":[0,{"line":120,"col":6,"index":2714},{"line":120,"col":9,"index":2717}],"259":[0,{"line":121,"col":6,"index":2726},{"line":121,"col":10,"index":2730}],"260":[0,{"line":118,"col":27,"index":2689},{"line":122,"col":72,"index":2734}],"261":[0,{"line":118,"col":2,"index":2664},{"line":122,"col":72,"index":2734}],"262":[0,{"line":125,"col":6,"index":2770},{"line":125,"col":10,"index":2774}],"263":[0,{"line":126,"col":6,"index":2783},{"line":126,"col":9,"index":2786}],"264":[0,{"line":127,"col":6,"index":2795},{"line":127,"col":10,"index":2799}],"265":[0,{"line":124,"col":22,"index":2759},{"line":128,"col":66,"index":2803}],"266":[0,{"line":124,"col":2,"index":2739},{"line":128,"col":66,"index":2803}],"267":[0,{"line":131,"col":6,"index":2844},{"line":131,"col":10,"index":2848}],"268":[0,{"line":132,"col":6,"index":2857},{"line":132,"col":9,"index":2860}],"269":[0,{"line":133,"col":6,"index":2869},{"line":133,"col":10,"index":2873}],"270":[0,{"line":130,"col":26,"index":2832},{"line":134,"col":71,"index":2877}],"271":[0,{"line":130,"col":2,"index":2808},{"line":134,"col":71,"index":2877}],"272":[0,{"line":136,"col":21,"index":2901},{"line":136,"col":24,"index":2904}],"273":[0,{"line":136,"col":27,"index":2907},{"line":136,"col":27,"index":2907}],"274":[0,{"line":136,"col":34,"index":2914},{"line":136,"col":34,"index":2914}],"275":[0,{"line":136,"col":17,"index":2897},{"line":136,"col":34,"index":2914}],"276":[0,{"line":136,"col":2,"index":2882},{"line":136,"col":34,"index":2914}],"277":[0,{"line":137,"col":16,"index":2932},{"line":137,"col":16,"index":2932}],"278":[0,{"line":137,"col":19,"index":2935},{"line":137,"col":19,"index":2935}],"279":[0,{"line":137,"col":28,"index":2944},{"line":137,"col":28,"index":2944}],"280":[0,{"line":137,"col":32,"index":2948},{"line":137,"col":33,"index":2949}],"281":[0,{"line":137,"col":28,"index":2944},{"line":137,"col":33,"index":2949}],"282":[0,{"line":137,"col":36,"index":2952},{"line":137,"col":36,"index":2952}],"283":[0,{"line":137,"col":40,"index":2956},{"line":137,"col":40,"index":2956}],"284":[0,{"line":137,"col":36,"index":2952},{"line":137,"col":40,"index":2956}],"285":[0,{"line":137,"col":47,"index":2963},{"line":137,"col":47,"index":2963}],"286":[0,{"line":137,"col":51,"index":2967},{"line":137,"col":51,"index":2967}],"287":[0,{"line":137,"col":47,"index":2963},{"line":137,"col":51,"index":2967}],"288":[0,{"line":137,"col":24,"index":2940},{"line":137,"col":51,"index":2967}],"289":[0,{"line":137,"col":2,"index":2918},{"line":137,"col":51,"index":2967}],"290":[0,{"line":140,"col":10,"index":3006},{"line":140,"col":12,"index":3008}],"291":[0,{"line":140,"col":17,"index":3013},{"line":140,"col":19,"index":3015}],"292":[0,{"line":140,"col":10,"index":3006},{"line":140,"col":19,"index":3015}],"293":[0,{"line":140,"col":2,"index":2998},{"line":140,"col":19,"index":3015}],"294":[0,{"line":141,"col":15,"index":3032},{"line":141,"col":16,"index":3033}],"295":[0,{"line":141,"col":22,"index":3039},{"line":141,"col":24,"index":3041}],"296":[0,{"line":141,"col":15,"index":3032},{"line":141,"col":25,"index":3042}],"297":[0,{"line":141,"col":2,"index":3019},{"line":141,"col":25,"index":3042}],"298":[0,{"line":144,"col":13,"index":3106},{"line":144,"col":13,"index":3106}],"299":[0,{"line":144,"col":16,"index":3109},{"line":144,"col":16,"index":3109}],"300":[0,{"line":144,"col":21,"index":3114},{"line":144,"col":21,"index":3114}],"301":[0,{"line":144,"col":2,"index":3095},{"line":144,"col":21,"index":3114}],"302":[0,{"line":145,"col":31,"index":3147},{"line":145,"col":33,"index":3149}],"303":[0,{"line":145,"col":36,"index":3152},{"line":145,"col":37,"index":3153}],"304":[0,{"line":145,"col":24,"index":3140},{"line":145,"col":38,"index":3154}],"305":[0,{"line":145,"col":2,"index":3118},{"line":145,"col":38,"index":3154}],"306":[0,{"line":146,"col":22,"index":3178},{"line":146,"col":24,"index":3180}],"307":[0,{"line":146,"col":33,"index":3189},{"line":146,"col":34,"index":3190}],"308":[0,{"line":146,"col":22,"index":3178},{"line":146,"col":35,"index":3191}],"309":[0,{"line":146,"col":2,"index":3158},{"line":146,"col":35,"index":3191}],"310":[0,{"line":148,"col":19,"index":3269},{"line":148,"col":19,"index":3269}],"311":[0,{"line":148,"col":22,"index":3272},{"line":148,"col":26,"index":3276}],"312":[0,{"line":148,"col":16,"index":3266},{"line":148,"col":27,"index":3277}],"313":[0,{"line":148,"col":2,"index":3252},{"line":148,"col":27,"index":3277}],"314":[0,{"line":153,"col":22,"index":3446},{"line":153,"col":22,"index":3446}],"315":[0,{"line":153,"col":31,"index":3455},{"line":153,"col":31,"index":3455}],"316":[0,{"line":153,"col":36,"index":3460},{"line":153,"col":36,"index":3460}],"317":[0,{"line":153,"col":40,"index":3464},{"line":153,"col":41,"index":3465}],"318":[0,{"line":153,"col":36,"index":3460},{"line":153,"col":41,"index":3465}],"319":[0,{"line":153,"col":31,"index":3455},{"line":153,"col":41,"index":3465}],"320":[0,{"line":153,"col":22,"index":3446},{"line":153,"col":42,"index":3466}],"321":[0,{"line":153,"col":2,"index":3426},{"line":153,"col":42,"index":3466}],"322":[0,{"line":155,"col":25,"index":3523},{"line":155,"col":25,"index":3523}],"323":[0,{"line":155,"col":28,"index":3526},{"line":155,"col":32,"index":3530}],"324":[0,{"line":155,"col":18,"index":3516},{"line":155,"col":33,"index":3531}],"325":[0,{"line":155,"col":42,"index":3540},{"line":155,"col":42,"index":3540}],"326":[0,{"line":155,"col":45,"index":3543},{"line":155,"col":47,"index":3545}],"327":[0,{"line":155,"col":54,"index":3552},{"line":155,"col":54,"index":3552}],"328":[0,{"line":155,"col":58,"index":3556},{"line":155,"col":60,"index":3558}],"329":[0,{"line":155,"col":54,"index":3552},{"line":155,"col":60,"index":3558}],"330":[0,{"line":155,"col":40,"index":3538},{"line":155,"col":60,"index":3558}],"331":[0,{"line":155,"col":40,"index":3538},{"line":155,"col":60,"index":3558}],"332":[0,{"line":155,"col":40,"index":3538},{"line":155,"col":60,"index":3558}],"333":[0,{"line":155,"col":40,"index":3538},{"line":155,"col":60,"index":3558}],"334":[0,{"line":155,"col":40,"index":3538},{"line":155,"col":60,"index":3558}],"335":[0,{"line":155,"col":40,"index":3538},{"line":155,"col":60,"index":3558}],"336":[0,{"line":155,"col":40,"index":3538},{"line":155,"col":60,"index":3558}],"337":[0,{"line":155,"col":40,"index":3538},{"line":155,"col":60,"index":3558}],"338":[0,{"line":155,"col":40,"index":3538},{"line":155,"col":60,"index":3558}],"339":[0,{"line":155,"col":40,"index":3538},{"line":155,"col":60,"index":3558}],"340":[0,{"line":155,"col":18,"index":3516},{"line":155,"col":62,"index":3560}],"341":[0,{"line":155,"col":2,"index":3500},{"line":155,"col":62,"index":3560}],"342":[0,{"line":158,"col":21,"index":3625},{"line":158,"col":21,"index":3625}],"343":[0,{"line":158,"col":15,"index":3619},{"line":158,"col":22,"index":3626}],"344":[0,{"line":158,"col":4,"index":3608},{"line":158,"col":22,"index":3626}],"345":[0,{"line":160,"col":6,"index":3644},{"line":160,"col":6,"index":3644}],"346":[0,{"line":160,"col":10,"index":3648},{"line":160,"col":11,"index":3649}],"347":[0,{"line":160,"col":6,"index":3644},{"line":160,"col":11,"index":3649}],"348":[0,{"line":161,"col":11,"index":3663},{"line":161,"col":11,"index":3663}],"349":[0,{"line":161,"col":6,"index":3658},{"line":161,"col":11,"index":3663}],"350":[0,{"line":161,"col":6,"index":3658},{"line":161,"col":11,"index":3663}],"351":[0,{"line":159,"col":4,"index":3632},{"line":162,"col":41,"index":3669}],"352":[0,{"line":158,"col":4,"index":3608},{"line":162,"col":65,"index":3669}],"353":[0,{"line":157,"col":2,"index":3581},{"line":163,"col":94,"index":3673}],"354":[0,{"line":165,"col":22,"index":3712},{"line":165,"col":22,"index":3712}],"355":[0,{"line":165,"col":31,"index":3721},{"line":165,"col":31,"index":3721}],"356":[0,{"line":165,"col":36,"index":3726},{"line":165,"col":39,"index":3729}],"357":[0,{"line":165,"col":31,"index":3721},{"line":165,"col":39,"index":3729}],"358":[0,{"line":165,"col":22,"index":3712},{"line":165,"col":40,"index":3730}],"359":[0,{"line":165,"col":2,"index":3692},{"line":165,"col":40,"index":3730}],"360":[0,{"line":167,"col":10,"index":3743},{"line":167,"col":10,"index":3743}],"361":[0,{"line":167,"col":18,"index":3751},{"line":167,"col":18,"index":3751}],"362":[0,{"line":167,"col":23,"index":3756},{"line":167,"col":23,"index":3756}],"363":[0,{"line":167,"col":27,"index":3760},{"line":167,"col":27,"index":3760}],"364":[0,{"line":167,"col":23,"index":3756},{"line":167,"col":27,"index":3760}],"365":[0,{"line":167,"col":18,"index":3751},{"line":167,"col":27,"index":3760}],"366":[0,{"line":167,"col":10,"index":3743},{"line":167,"col":28,"index":3761}],"367":[0,{"line":167,"col":2,"index":3735},{"line":167,"col":28,"index":3761}],"368":[0,{"line":169,"col":23,"index":3787},{"line":169,"col":23,"index":3787}],"369":[0,{"line":169,"col":37,"index":3801},{"line":169,"col":37,"index":3801}],"370":[0,{"line":169,"col":40,"index":3804},{"line":169,"col":40,"index":3804}],"371":[0,{"line":169,"col":33,"index":3797},{"line":169,"col":41,"index":3805}],"372":[0,{"line":169,"col":23,"index":3787},{"line":169,"col":42,"index":3806}],"373":[0,{"line":169,"col":2,"index":3766},{"line":169,"col":42,"index":3806}],"374":[0,{"line":172,"col":17,"index":3865},{"line":172,"col":17,"index":3865}],"375":[0,{"line":172,"col":20,"index":3868},{"line":172,"col":20,"index":3868}],"376":[0,{"line":172,"col":12,"index":3860},{"line":172,"col":21,"index":3869}],"377":[0,{"line":172,"col":12,"index":3860},{"line":172,"col":28,"index":3876}],"378":[0,{"line":172,"col":2,"index":3850},{"line":172,"col":28,"index":3876}],"379":[0,{"line":175,"col":20,"index":3920},{"line":175,"col":20,"index":3920}],"380":[0,{"line":175,"col":23,"index":3923},{"line":175,"col":23,"index":3923}],"381":[0,{"line":175,"col":26,"index":3926},{"line":175,"col":26,"index":3926}],"382":[0,{"line":175,"col":19,"index":3919},{"line":175,"col":27,"index":3927}],"383":[0,{"line":175,"col":2,"index":3902},{"line":175,"col":27,"index":3927}],"384":[0,{"line":176,"col":24,"index":3953},{"line":176,"col":24,"index":3953}],"385":[0,{"line":176,"col":27,"index":3956},{"line":176,"col":27,"index":3956}],"386":[0,{"line":176,"col":30,"index":3959},{"line":176,"col":30,"index":3959}],"387":[0,{"line":176,"col":20,"index":3949},{"line":176,"col":31,"index":3960}],"388":[0,{"line":176,"col":2,"index":3931},{"line":176,"col":31,"index":3960}],"389":[0,{"line":177,"col":18,"index":3980},{"line":177,"col":18,"index":3980}],"390":[0,{"line":177,"col":23,"index":3985},{"line":177,"col":23,"index":3985}],"391":[0,{"line":177,"col":18,"index":3980},{"line":177,"col":23,"index":3985}],"392":[0,{"line":177,"col":2,"index":3964},{"line":177,"col":23,"index":3985}],"393":[0,{"line":178,"col":19,"index":4006},{"line":178,"col":19,"index":4006}],"394":[0,{"line":178,"col":22,"index":4009},{"line":178,"col":22,"index":4009}],"395":[0,{"line":178,"col":25,"index":4012},{"line":178,"col":25,"index":4012}],"396":[0,{"line":178,"col":18,"index":4005},{"line":178,"col":26,"index":4013}],"397":[0,{"line":178,"col":2,"index":3989},{"line":178,"col":26,"index":4013}],"398":[0,{"line":179,"col":24,"index":4039},{"line":179,"col":24,"index":4039}],"399":[0,{"line":179,"col":27,"index":4042},{"line":179,"col":27,"index":4042}],"400":[0,{"line":179,"col":30,"index":4045},{"line":179,"col":30,"index":4045}],"401":[0,{"line":179,"col":19,"index":4034},{"line":179,"col":31,"index":4046}],"402":[0,{"line":179,"col":2,"index":4017},{"line":179,"col":31,"index":4046}],"403":[0,{"line":180,"col":23,"index":4071},{"line":180,"col":23,"index":4071}],"404":[0,{"line":180,"col":26,"index":4074},{"line":180,"col":26,"index":4074}],"405":[0,{"line":180,"col":29,"index":4077},{"line":180,"col":29,"index":4077}],"406":[0,{"line":180,"col":22,"index":4070},{"line":180,"col":30,"index":4078}],"407":[0,{"line":180,"col":32,"index":4080},{"line":180,"col":32,"index":4080}],"408":[0,{"line":180,"col":22,"index":4070},{"line":180,"col":33,"index":4081}],"409":[0,{"line":180,"col":2,"index":4050},{"line":180,"col":33,"index":4081}],"410":[0,{"line":181,"col":28,"index":4111},{"line":181,"col":33,"index":4116}],"411":[0,{"line":181,"col":22,"index":4105},{"line":181,"col":33,"index":4116}],"412":[0,{"line":181,"col":42,"index":4125},{"line":181,"col":45,"index":4128}],"413":[0,{"line":181,"col":36,"index":4119},{"line":181,"col":45,"index":4128}],"414":[0,{"line":181,"col":20,"index":4103},{"line":181,"col":47,"index":4130}],"415":[0,{"line":181,"col":2,"index":4085},{"line":181,"col":47,"index":4130}],"416":[0,{"line":182,"col":25,"index":4157},{"line":182,"col":30,"index":4162}],"417":[0,{"line":182,"col":33,"index":4165},{"line":182,"col":38,"index":4170}],"418":[0,{"line":182,"col":41,"index":4173},{"line":182,"col":46,"index":4178}],"419":[0,{"line":182,"col":49,"index":4181},{"line":182,"col":52,"index":4184}],"420":[0,{"line":182,"col":21,"index":4153},{"line":182,"col":53,"index":4185}],"421":[0,{"line":182,"col":2,"index":4134},{"line":182,"col":53,"index":4185}],"422":[0,{"line":183,"col":29,"index":4216},{"line":183,"col":35,"index":4222}],"423":[0,{"line":183,"col":23,"index":4210},{"line":183,"col":35,"index":4222}],"424":[0,{"line":183,"col":44,"index":4231},{"line":183,"col":47,"index":4234}],"425":[0,{"line":183,"col":38,"index":4225},{"line":183,"col":47,"index":4234}],"426":[0,{"line":183,"col":53,"index":4240},{"line":183,"col":63,"index":4250}],"427":[0,{"line":183,"col":21,"index":4208},{"line":183,"col":65,"index":4252}],"428":[0,{"line":183,"col":21,"index":4208},{"line":183,"col":65,"index":4252}],"429":[0,{"line":183,"col":2,"index":4189},{"line":183,"col":65,"index":4252}],"430":[0,{"line":184,"col":21,"index":4275},{"line":184,"col":21,"index":4275}],"431":[0,{"line":184,"col":24,"index":4278},{"line":184,"col":24,"index":4278}],"432":[0,{"line":184,"col":27,"index":4281},{"line":184,"col":27,"index":4281}],"433":[0,{"line":184,"col":17,"index":4271},{"line":184,"col":28,"index":4282}],"434":[0,{"line":184,"col":2,"index":4256},{"line":184,"col":28,"index":4282}],"435":[0,{"line":188,"col":22,"index":4354},{"line":188,"col":22,"index":4354}],"436":[0,{"line":188,"col":19,"index":4351},{"line":188,"col":22,"index":4354}],"437":[0,{"line":188,"col":28,"index":4360},{"line":188,"col":32,"index":4364}],"438":[0,{"line":188,"col":25,"index":4357},{"line":188,"col":32,"index":4364}],"439":[0,{"line":188,"col":17,"index":4349},{"line":188,"col":34,"index":4366}],"440":[0,{"line":188,"col":4,"index":4336},{"line":188,"col":34,"index":4366}],"441":[0,{"line":189,"col":4,"index":4372},{"line":189,"col":9,"index":4377}],"442":[0,{"line":189,"col":4,"index":4372},{"line":189,"col":11,"index":4379}],"443":[0,{"line":189,"col":4,"index":4372},{"line":189,"col":11,"index":4379}],"444":[0,{"line":188,"col":4,"index":4336},{"line":189,"col":47,"index":4379}],"445":[0,{"line":187,"col":2,"index":4316},{"line":189,"col":65,"index":4379}],"446":[0,{"line":192,"col":21,"index":4420},{"line":192,"col":23,"index":4422}],"447":[0,{"line":192,"col":26,"index":4425},{"line":192,"col":26,"index":4425}],"448":[0,{"line":192,"col":17,"index":4416},{"line":192,"col":27,"index":4426}],"449":[0,{"line":192,"col":4,"index":4403},{"line":192,"col":27,"index":4426}],"450":[0,{"line":193,"col":4,"index":4432},{"line":193,"col":9,"index":4437}],"451":[0,{"line":193,"col":4,"index":4432},{"line":193,"col":12,"index":4440}],"452":[0,{"line":193,"col":4,"index":4432},{"line":193,"col":12,"index":4440}],"453":[0,{"line":192,"col":4,"index":4403},{"line":193,"col":41,"index":4440}],"454":[0,{"line":191,"col":2,"index":4384},{"line":193,"col":58,"index":4440}],"455":[0,{"line":195,"col":14,"index":4457},{"line":195,"col":14,"index":4457}],"456":[0,{"line":195,"col":19,"index":4462},{"line":195,"col":19,"index":4462}],"457":[0,{"line":195,"col":24,"index":4467},{"line":195,"col":25,"index":4468}],"458":[0,{"line":195,"col":19,"index":4462},{"line":195,"col":25,"index":4468}],"459":[0,{"line":195,"col":2,"index":4445},{"line":195,"col":25,"index":4468}],"460":[0,{"line":198,"col":19,"index":4516},{"line":198,"col":19,"index":4516}],"461":[0,{"line":198,"col":24,"index":4521},{"line":198,"col":28,"index":4525}],"462":[0,{"line":198,"col":19,"index":4516},{"line":198,"col":29,"index":4526}],"463":[0,{"line":198,"col":2,"index":4499},{"line":198,"col":29,"index":4526}],"464":[0,{"line":199,"col":23,"index":4551},{"line":199,"col":27,"index":4555}],"465":[0,{"line":199,"col":38,"index":4566},{"line":199,"col":42,"index":4570}],"466":[0,{"line":199,"col":23,"index":4551},{"line":199,"col":43,"index":4571}],"467":[0,{"line":199,"col":2,"index":4530},{"line":199,"col":43,"index":4571}],"468":[0,{"line":200,"col":22,"index":4595},{"line":200,"col":22,"index":4595}],"469":[0,{"line":200,"col":18,"index":4591},{"line":200,"col":23,"index":4596}],"470":[0,{"line":200,"col":41,"index":4614},{"line":200,"col":41,"index":4614}],"471":[0,{"line":200,"col":43,"index":4616},{"line":200,"col":43,"index":4616}],"472":[0,{"line":200,"col":45,"index":4618},{"line":200,"col":45,"index":4618}],"473":[0,{"line":200,"col":37,"index":4610},{"line":200,"col":46,"index":4619}],"474":[0,{"line":200,"col":28,"index":4601},{"line":200,"col":47,"index":4620}],"475":[0,{"line":200,"col":18,"index":4591},{"line":200,"col":48,"index":4621}],"476":[0,{"line":200,"col":2,"index":4575},{"line":200,"col":48,"index":4621}],"477":[0,{"line":203,"col":20,"index":4668},{"line":203,"col":20,"index":4668}],"478":[0,{"line":203,"col":24,"index":4672},{"line":203,"col":24,"index":4672}],"479":[0,{"line":203,"col":20,"index":4668},{"line":203,"col":24,"index":4672}],"480":[0,{"line":203,"col":2,"index":4650},{"line":203,"col":24,"index":4672}],"481":[0,{"line":205,"col":13,"index":4716},{"line":205,"col":13,"index":4716}],"482":[0,{"line":205,"col":18,"index":4721},{"line":205,"col":18,"index":4721}],"483":[0,{"line":205,"col":13,"index":4716},{"line":205,"col":18,"index":4721}],"484":[0,{"line":205,"col":2,"index":4705},{"line":205,"col":18,"index":4721}],"485":[0,{"line":208,"col":2,"index":4739},{"line":208,"col":14,"index":4751}],"486":[0,{"line":209,"col":2,"index":4755},{"line":209,"col":12,"index":4765}],"487":[0,{"line":212,"col":21,"index":4803},{"line":212,"col":23,"index":4805}],"488":[0,{"line":212,"col":17,"index":4799},{"line":212,"col":24,"index":4806}],"489":[0,{"line":212,"col":2,"index":4784},{"line":212,"col":24,"index":4806}],"490":[0,{"line":214,"col":2,"index":4811},{"line":214,"col":24,"index":4833}],"491":[0,{"line":216,"col":10,"index":4846},{"line":216,"col":16,"index":4852}],"492":[0,{"line":216,"col":2,"index":4838},{"line":216,"col":16,"index":4852}],"493":[0,{"line":224,"col":19,"index":5073},{"line":224,"col":19,"index":5073}],"494":[0,{"line":224,"col":15,"index":5069},{"line":224,"col":15,"index":5069}],"495":[0,{"line":224,"col":2,"index":5056},{"line":224,"col":29,"index":5083}],"496":[0,{"line":14,"col":0,"index":140},{"line":228,"col":5022,"index":5162}]}} \ No newline at end of file From d8c6cc0a4c7bc19262cacf51a867e6cd11c0ca3d Mon Sep 17 00:00:00 2001 From: Shon Feder Date: Thu, 5 Oct 2023 00:03:57 -0400 Subject: [PATCH 03/15] Add test fixtures --- quint/testFixture/_1043sumTypeDecl.json | 1 + quint/testFixture/_1043sumTypeDecl.map.json | 1 + quint/testFixture/_1043sumTypeDecl.qnt | 7 +++++++ quint/testFixture/_1044matchExpression.json | 1 + quint/testFixture/_1044matchExpression.map.json | 1 + quint/testFixture/_1044matchExpression.qnt | 11 +++++++++++ 6 files changed, 22 insertions(+) create mode 100644 quint/testFixture/_1043sumTypeDecl.json create mode 100644 quint/testFixture/_1043sumTypeDecl.map.json create mode 100644 quint/testFixture/_1043sumTypeDecl.qnt create mode 100644 quint/testFixture/_1044matchExpression.json create mode 100644 quint/testFixture/_1044matchExpression.map.json create mode 100644 quint/testFixture/_1044matchExpression.qnt diff --git a/quint/testFixture/_1043sumTypeDecl.json b/quint/testFixture/_1043sumTypeDecl.json new file mode 100644 index 000000000..5b5d51d2d --- /dev/null +++ b/quint/testFixture/_1043sumTypeDecl.json @@ -0,0 +1 @@ +{"stage":"parsing","warnings":[],"modules":[{"id":20,"name":"SumTypes","declarations":[{"id":3,"name":"T","kind":"typedef","type":{"id":3,"kind":"sum","fields":{"kind":"row","fields":[{"fieldName":"A","fieldType":{"id":1,"kind":"rec","fields":{"kind":"row","fields":[],"other":{"kind":"empty"}}}},{"fieldName":"B","fieldType":{"id":2,"kind":"int"}}],"other":{"kind":"empty"}}}},{"id":8,"kind":"def","name":"A","qualifier":"val","expr":{"id":7,"kind":"lambda","params":[],"qualifier":"val","expr":{"id":6,"kind":"app","opcode":"variant","args":[{"id":5,"kind":"str","value":"A"},{"id":4,"kind":"app","opcode":"Rec","args":[]}]}}},{"id":14,"kind":"def","name":"B","qualifier":"def","expr":{"id":13,"kind":"lambda","params":[{"id":9,"name":"__BParam"}],"qualifier":"def","expr":{"id":12,"kind":"app","opcode":"variant","args":[{"id":11,"kind":"str","value":"B"},{"kind":"name","name":"__BParam","id":10}]}}},{"id":19,"kind":"def","name":"canConstructVariants","qualifier":"val","expr":{"id":18,"kind":"app","opcode":"List","args":[{"id":15,"kind":"name","name":"A"},{"id":17,"kind":"app","opcode":"B","args":[{"id":16,"kind":"int","value":2}]}]}}]}],"table":{"10":{"id":9,"name":"__BParam","kind":"param"},"15":{"id":8,"kind":"def","name":"A","qualifier":"val","expr":{"id":7,"kind":"lambda","params":[],"qualifier":"val","expr":{"id":6,"kind":"app","opcode":"variant","args":[{"id":5,"kind":"str","value":"A"},{"id":4,"kind":"app","opcode":"Rec","args":[]}]}},"depth":0},"17":{"id":14,"kind":"def","name":"B","qualifier":"def","expr":{"id":13,"kind":"lambda","params":[{"id":9,"name":"__BParam"}],"qualifier":"def","expr":{"id":12,"kind":"app","opcode":"variant","args":[{"id":11,"kind":"str","value":"B"},{"kind":"name","name":"__BParam","id":10}]}},"depth":0}}} \ No newline at end of file diff --git a/quint/testFixture/_1043sumTypeDecl.map.json b/quint/testFixture/_1043sumTypeDecl.map.json new file mode 100644 index 000000000..2f332fe29 --- /dev/null +++ b/quint/testFixture/_1043sumTypeDecl.map.json @@ -0,0 +1 @@ +{"sourceIndex":{"0":"mocked_path/testFixture/_1043sumTypeDecl.qnt"},"map":{"1":[0,{"line":2,"col":6,"index":35},{"line":2,"col":6,"index":35}],"2":[0,{"line":3,"col":8,"index":45},{"line":3,"col":10,"index":47}],"3":[0,{"line":1,"col":2,"index":20},{"line":3,"col":30,"index":48}],"4":[0,{"line":2,"col":6,"index":35},{"line":2,"col":6,"index":35}],"5":[0,{"line":2,"col":6,"index":35},{"line":2,"col":6,"index":35}],"6":[0,{"line":2,"col":6,"index":35},{"line":2,"col":6,"index":35}],"7":[0,{"line":2,"col":6,"index":35},{"line":2,"col":6,"index":35}],"8":[0,{"line":2,"col":6,"index":35},{"line":2,"col":6,"index":35}],"9":[0,{"line":3,"col":8,"index":45},{"line":3,"col":10,"index":47}],"10":[0,{"line":3,"col":6,"index":43},{"line":3,"col":6,"index":43}],"11":[0,{"line":3,"col":6,"index":43},{"line":3,"col":11,"index":48}],"12":[0,{"line":3,"col":6,"index":43},{"line":3,"col":11,"index":48}],"13":[0,{"line":3,"col":6,"index":43},{"line":3,"col":11,"index":48}],"14":[0,{"line":3,"col":6,"index":43},{"line":3,"col":11,"index":48}],"15":[0,{"line":5,"col":34,"index":85},{"line":5,"col":34,"index":85}],"16":[0,{"line":5,"col":39,"index":90},{"line":5,"col":39,"index":90}],"17":[0,{"line":5,"col":37,"index":88},{"line":5,"col":40,"index":91}],"18":[0,{"line":5,"col":29,"index":80},{"line":5,"col":41,"index":92}],"19":[0,{"line":5,"col":2,"index":53},{"line":5,"col":41,"index":92}],"20":[0,{"line":0,"col":0,"index":0},{"line":6,"col":94,"index":94}]}} \ No newline at end of file diff --git a/quint/testFixture/_1043sumTypeDecl.qnt b/quint/testFixture/_1043sumTypeDecl.qnt new file mode 100644 index 000000000..42d9dc09d --- /dev/null +++ b/quint/testFixture/_1043sumTypeDecl.qnt @@ -0,0 +1,7 @@ +module SumTypes { + type T = + | A + | B(int) + + val canConstructVariants = List(A, B(2)) +} diff --git a/quint/testFixture/_1044matchExpression.json b/quint/testFixture/_1044matchExpression.json new file mode 100644 index 000000000..b306d60fe --- /dev/null +++ b/quint/testFixture/_1044matchExpression.json @@ -0,0 +1 @@ +{"stage":"parsing","warnings":[],"modules":[{"id":37,"name":"SumTypes","declarations":[{"id":4,"name":"T","kind":"typedef","type":{"id":4,"kind":"sum","fields":{"kind":"row","fields":[{"fieldName":"A","fieldType":{"id":1,"kind":"rec","fields":{"kind":"row","fields":[],"other":{"kind":"empty"}}}},{"fieldName":"B","fieldType":{"id":2,"kind":"int"}},{"fieldName":"C","fieldType":{"id":3,"kind":"str"}}],"other":{"kind":"empty"}}}},{"id":9,"kind":"def","name":"A","qualifier":"val","expr":{"id":8,"kind":"lambda","params":[],"qualifier":"val","expr":{"id":7,"kind":"app","opcode":"variant","args":[{"id":6,"kind":"str","value":"A"},{"id":5,"kind":"app","opcode":"Rec","args":[]}]}}},{"id":15,"kind":"def","name":"B","qualifier":"def","expr":{"id":14,"kind":"lambda","params":[{"id":10,"name":"__BParam"}],"qualifier":"def","expr":{"id":13,"kind":"app","opcode":"variant","args":[{"id":12,"kind":"str","value":"B"},{"kind":"name","name":"__BParam","id":11}]}}},{"id":21,"kind":"def","name":"C","qualifier":"def","expr":{"id":20,"kind":"lambda","params":[{"id":16,"name":"__CParam"}],"qualifier":"def","expr":{"id":19,"kind":"app","opcode":"variant","args":[{"id":18,"kind":"str","value":"C"},{"kind":"name","name":"__CParam","id":17}]}}},{"id":24,"kind":"def","name":"c","qualifier":"val","expr":{"id":23,"kind":"app","opcode":"C","args":[{"id":22,"kind":"str","value":"Foo"}]}},{"id":36,"kind":"def","name":"ex","qualifier":"val","expr":{"id":30,"kind":"app","opcode":"match","args":[{"id":25,"kind":"name","name":"c"},{"id":31,"kind":"str","value":"A"},{"id":31,"kind":"lambda","qualifier":"def","expr":{"id":26,"kind":"int","value":0},"params":[{"name":"_","id":32}]},{"id":33,"kind":"str","value":"B"},{"id":33,"kind":"lambda","qualifier":"def","expr":{"id":27,"kind":"name","name":"n"},"params":[{"name":"n","id":34}]},{"id":35,"kind":"str","value":"_"},{"id":35,"kind":"lambda","qualifier":"def","expr":{"id":29,"kind":"app","opcode":"iuminus","args":[{"id":28,"kind":"int","value":1}]},"params":[]}]}}]}],"table":{"11":{"id":10,"name":"__BParam","kind":"param"},"17":{"id":16,"name":"__CParam","kind":"param"},"23":{"id":21,"kind":"def","name":"C","qualifier":"def","expr":{"id":20,"kind":"lambda","params":[{"id":16,"name":"__CParam"}],"qualifier":"def","expr":{"id":19,"kind":"app","opcode":"variant","args":[{"id":18,"kind":"str","value":"C"},{"kind":"name","name":"__CParam","id":17}]}},"depth":0},"25":{"id":24,"kind":"def","name":"c","qualifier":"val","expr":{"id":23,"kind":"app","opcode":"C","args":[{"id":22,"kind":"str","value":"Foo"}]},"depth":0},"27":{"name":"n","id":34,"kind":"param"}}} \ No newline at end of file diff --git a/quint/testFixture/_1044matchExpression.map.json b/quint/testFixture/_1044matchExpression.map.json new file mode 100644 index 000000000..277960ad0 --- /dev/null +++ b/quint/testFixture/_1044matchExpression.map.json @@ -0,0 +1 @@ +{"sourceIndex":{"0":"mocked_path/testFixture/_1044matchExpression.qnt"},"map":{"1":[0,{"line":1,"col":11,"index":29},{"line":1,"col":11,"index":29}],"2":[0,{"line":1,"col":17,"index":35},{"line":1,"col":19,"index":37}],"3":[0,{"line":1,"col":26,"index":44},{"line":1,"col":28,"index":46}],"4":[0,{"line":1,"col":2,"index":20},{"line":1,"col":29,"index":47}],"5":[0,{"line":1,"col":11,"index":29},{"line":1,"col":11,"index":29}],"6":[0,{"line":1,"col":11,"index":29},{"line":1,"col":11,"index":29}],"7":[0,{"line":1,"col":11,"index":29},{"line":1,"col":11,"index":29}],"8":[0,{"line":1,"col":11,"index":29},{"line":1,"col":11,"index":29}],"9":[0,{"line":1,"col":11,"index":29},{"line":1,"col":11,"index":29}],"10":[0,{"line":1,"col":17,"index":35},{"line":1,"col":19,"index":37}],"11":[0,{"line":1,"col":15,"index":33},{"line":1,"col":15,"index":33}],"12":[0,{"line":1,"col":15,"index":33},{"line":1,"col":20,"index":38}],"13":[0,{"line":1,"col":15,"index":33},{"line":1,"col":20,"index":38}],"14":[0,{"line":1,"col":15,"index":33},{"line":1,"col":20,"index":38}],"15":[0,{"line":1,"col":15,"index":33},{"line":1,"col":20,"index":38}],"16":[0,{"line":1,"col":26,"index":44},{"line":1,"col":28,"index":46}],"17":[0,{"line":1,"col":24,"index":42},{"line":1,"col":24,"index":42}],"18":[0,{"line":1,"col":24,"index":42},{"line":1,"col":29,"index":47}],"19":[0,{"line":1,"col":24,"index":42},{"line":1,"col":29,"index":47}],"20":[0,{"line":1,"col":24,"index":42},{"line":1,"col":29,"index":47}],"21":[0,{"line":1,"col":24,"index":42},{"line":1,"col":29,"index":47}],"22":[0,{"line":3,"col":12,"index":62},{"line":3,"col":16,"index":66}],"23":[0,{"line":3,"col":10,"index":60},{"line":3,"col":17,"index":67}],"24":[0,{"line":3,"col":2,"index":52},{"line":3,"col":17,"index":67}],"25":[0,{"line":5,"col":17,"index":87},{"line":5,"col":17,"index":87}],"26":[0,{"line":6,"col":14,"index":105},{"line":6,"col":14,"index":105}],"27":[0,{"line":7,"col":14,"index":121},{"line":7,"col":14,"index":121}],"28":[0,{"line":8,"col":15,"index":138},{"line":8,"col":15,"index":138}],"29":[0,{"line":8,"col":14,"index":137},{"line":8,"col":15,"index":138}],"30":[0,{"line":5,"col":11,"index":81},{"line":9,"col":72,"index":142}],"31":[0,{"line":6,"col":6,"index":97},{"line":6,"col":14,"index":105}],"32":[0,{"line":6,"col":6,"index":97},{"line":6,"col":6,"index":97}],"33":[0,{"line":7,"col":6,"index":113},{"line":7,"col":14,"index":121}],"34":[0,{"line":7,"col":6,"index":113},{"line":7,"col":9,"index":116}],"35":[0,{"line":8,"col":6,"index":129},{"line":8,"col":15,"index":138}],"36":[0,{"line":5,"col":2,"index":72},{"line":9,"col":72,"index":142}],"37":[0,{"line":0,"col":0,"index":0},{"line":10,"col":144,"index":144}]}} \ No newline at end of file diff --git a/quint/testFixture/_1044matchExpression.qnt b/quint/testFixture/_1044matchExpression.qnt new file mode 100644 index 000000000..08d848fde --- /dev/null +++ b/quint/testFixture/_1044matchExpression.qnt @@ -0,0 +1,11 @@ +module SumTypes { + type T = A | B(int) | C(str) + + val c = C("Foo") + + val ex = match c { + | A => 0 + | B(n) => n + | _ => -1 + } +} From 5fc46988faddb2d617b1ced9bf9765185b326742 Mon Sep 17 00:00:00 2001 From: Shon Feder Date: Thu, 5 Oct 2023 00:08:17 -0400 Subject: [PATCH 04/15] Remove unused import --- quint/src/names/base.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quint/src/names/base.ts b/quint/src/names/base.ts index 5da5f2cab..febdd22cd 100644 --- a/quint/src/names/base.ts +++ b/quint/src/names/base.ts @@ -12,7 +12,7 @@ * @module */ -import { QuintDef, QuintExport, QuintImport, QuintInstance, QuintLambdaParameter, builtinOpCodes } from '../ir/quintIr' +import { QuintDef, QuintExport, QuintImport, QuintInstance, QuintLambdaParameter } from '../ir/quintIr' import { QuintType } from '../ir/quintTypes' /** From 1c5bfce7a5d3a58c415f82ee779d04413bfdb679 Mon Sep 17 00:00:00 2001 From: Shon Feder Date: Thu, 5 Oct 2023 00:23:23 -0400 Subject: [PATCH 05/15] Clean up ToIrListener Move helper function into its own private method --- quint/src/parsing/ToIrListener.ts | 75 ++++++++++++++++++------------- 1 file changed, 43 insertions(+), 32 deletions(-) diff --git a/quint/src/parsing/ToIrListener.ts b/quint/src/parsing/ToIrListener.ts index b3ef0b5fc..941fc40ed 100644 --- a/quint/src/parsing/ToIrListener.ts +++ b/quint/src/parsing/ToIrListener.ts @@ -934,43 +934,20 @@ export class ToIrListener implements QuintListener { // match(epxr, label1, (var1) => expr1, ..., labeln, (varn) => exprn, "_", (_) => exprm) exitMatchSumExpr(ctx: p.MatchSumExprContext) { const matchId = this.getId(ctx) - // We will have one expression for each match case, plus the + + // We will have one expression for each match case, plus one for each case const exprs = popMany(this.exprStack, ctx._matchCase.length + 1) + // The first expression is the one we are matching on // the syntax rules ensure that at least this expression is given const expr = exprs.shift()! - const gatherCase: ( - acc: (QuintStr | QuintLambda)[], - matchCase: [QuintEx, p.MatchSumCaseContext] - ) => (QuintStr | QuintLambda)[] = (acc, [caseExpr, caseCtx]) => { - const caseId = this.getId(caseCtx) - let label: string - let params: QuintLambdaParameter[] - if (caseCtx._wildCardMatch) { - // a wildcard case: _ => expr - label = '_' - params = [] - } else if (caseCtx._variantMatch) { - const variant = caseCtx._variantMatch - let name: string - if (variant._variantParam) { - name = variant._variantParam.text - } else { - // We either have a hole or no param specified, in which case our lambda only needs a hole - name = '_' - } - label = variant._variantLabel.text - params = [{ name, id: this.getId(variant) }] - } else { - throw new Error('impossible: either _wildCardMatch or _variantMatch must be present') - } - const labelStr: QuintStr = { id: caseId, kind: 'str', value: label } - const elim: QuintLambda = { id: caseId, kind: 'lambda', qualifier: 'def', expr: caseExpr, params } - return acc.concat([labelStr, elim]) - } - // after shifting off the match expr, the remaing exprs are in each case - const cases: (QuintStr | QuintLambda)[] = zip(exprs, ctx._matchCase).reduce(gatherCase, []) + // after shifting off the match expr, the remaing exprs are the cases of the match expression + const cases: (QuintStr | QuintLambda)[] = zip(exprs, ctx._matchCase).reduce( + (acc: (QuintStr | QuintLambda)[], matchCase: [QuintEx, p.MatchSumCaseContext]) => + acc.concat(this.formMatchCase(matchCase)), + [] + ) const matchExpr: QuintBuiltinApp = { id: matchId, kind: 'app', @@ -980,6 +957,40 @@ export class ToIrListener implements QuintListener { this.exprStack.push(matchExpr) } + // A helper for forming match expressions + // + // For a single case parsed `matchCase`, we form the pair of the variant label + // and the lambda that will eliminate the value wrapped carried in variant. + // + // E.g., `A(x) => ` becomes `["A", (x) => ]` + private formMatchCase([caseExpr, caseCtx]: [QuintEx, p.MatchSumCaseContext]): (QuintStr | QuintLambda)[] { + const caseId = this.getId(caseCtx) + let label: string + let params: QuintLambdaParameter[] + if (caseCtx._wildCardMatch) { + // a wildcard case: _ => expr + label = '_' + params = [] + } else if (caseCtx._variantMatch) { + const variant = caseCtx._variantMatch + let name: string + if (variant._variantParam) { + name = variant._variantParam.text + } else { + // We either have a hole or no param specified, in which case our lambda only needs a hole + name = '_' + } + label = variant._variantLabel.text + params = [{ name, id: this.getId(variant) }] + } else { + throw new Error('impossible: either _wildCardMatch or _variantMatch must be present') + } + const labelStr: QuintStr = { id: caseId, kind: 'str', value: label } + const elim: QuintLambda = { id: caseId, kind: 'lambda', qualifier: 'def', expr: caseExpr, params } + return [labelStr, elim] + // return acc.concat([labelStr, elim]) + } + /** ******************* translate types ********************************/ // the integer type, that is, int From abfb0e070870629a83ef8e7fc62d6305629bf0cb Mon Sep 17 00:00:00 2001 From: Shon Feder Date: Thu, 5 Oct 2023 00:27:14 -0400 Subject: [PATCH 06/15] Fix comment --- quint/src/generated/Quint.g4 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quint/src/generated/Quint.g4 b/quint/src/generated/Quint.g4 index 9e4b25d3d..40dd4accf 100644 --- a/quint/src/generated/Quint.g4 +++ b/quint/src/generated/Quint.g4 @@ -174,7 +174,7 @@ expr: // apply a built-in operator via the dot notation | '{' expr '}' # braces ; -// match e { A(a) => e1 | B => e2 | C(_)} +// match e { A(a) => e1 | B => e2 | C(_) => e3 | ... | _ => en } matchSumExpr: MATCH expr '{' '|'? matchCase+=matchSumCase ('|' matchCase+=matchSumCase)* '}' ; matchSumCase: (variantMatch=matchSumVariant | wildCardMatch='_') '=>' expr ; matchSumVariant From 382e90c20961783054c01d52e426cd73e2de87bd Mon Sep 17 00:00:00 2001 From: Shon Feder Date: Thu, 5 Oct 2023 00:37:34 -0400 Subject: [PATCH 07/15] Use sum syntax in the option example --- examples/language-features/option.qnt | 29 ++++++--------------------- 1 file changed, 6 insertions(+), 23 deletions(-) diff --git a/examples/language-features/option.qnt b/examples/language-features/option.qnt index 80bd16c4b..cbecf8b6a 100644 --- a/examples/language-features/option.qnt +++ b/examples/language-features/option.qnt @@ -4,12 +4,8 @@ module option { // An option type for values. // This type declaration is not required. It only defines an alias. type Vote_option = - | { tag: "none" } - | { tag: "some", value: int } - - def Some(v) = { tag: "some", value: v } - - val None = { tag: "none" } + | None + | Some(int) var votes: List[Vote_option] var outcome: int @@ -29,24 +25,11 @@ module option { } val SumVotes = - def sum_one(sum, w): (int, Vote_option) => int = - // deconstruct a discriminate union. - w match - // this pattern binds some_w to the "some" version of w, if w.tag == "some" - | "some": some_w => sum + some_w.value - // this pattern - | "none": _ => sum - - /* // this is how you would do that in typescript - if (w.tag == "some") { - // w has the type { tag: "some", value: int } - sum + w.value - } else { - sum + votes.foldl(0, (sum, vote) => match vote { + | Some(v) => sum + v + | None => sum } - */ - - votes.foldl(0, sum_one) + ) action Next = all { any { From 9272a764e79711bdd66f11aa3aa592d52714b1f8 Mon Sep 17 00:00:00 2001 From: Shon Feder Date: Thu, 5 Oct 2023 00:47:02 -0400 Subject: [PATCH 08/15] Remove CLI test for typecheck of option.qnt This is covered in the example test --- quint/cli-tests.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/quint/cli-tests.md b/quint/cli-tests.md index d011569c4..45ebc6428 100644 --- a/quint/cli-tests.md +++ b/quint/cli-tests.md @@ -117,11 +117,6 @@ Temporarily disabled. quint parse ../examples/language-features/option.qnt -### OK on typecheck option - - - quint typecheck ../examples/language-features/option.qnt - ### OK on parse BinSearch From f29276d18658b6ace816e035d4e5d9e1e04ad959 Mon Sep 17 00:00:00 2001 From: Shon Feder Date: Thu, 5 Oct 2023 01:05:48 -0400 Subject: [PATCH 09/15] Update examples entry for option.qnt This marks our switch to sum types from the union of records. Record unions are not really supported, and we mean to ditch them, so this is a more honest report of the current state of things. --- examples/.scripts/run-example.sh | 2 +- examples/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/.scripts/run-example.sh b/examples/.scripts/run-example.sh index 1352d4f99..f95470442 100755 --- a/examples/.scripts/run-example.sh +++ b/examples/.scripts/run-example.sh @@ -52,7 +52,7 @@ result () { printf "https://github.com/informalsystems/quint/issues/244" elif [[ "$file" == "classic/distributed/Paxos/Voting.qnt" && ( "$cmd" == "test" || "$cmd" == "verify" )]] ; then printf "https://github.com/informalsystems/quint/issues/244" - elif [[ "$file" == "language-features/option.qnt" && "$cmd" == "verify" ]] ; then + elif [[ "$file" == "language-features/option.qnt" && "$cmd" =~ (typecheck|test|verify) ]] ; then printf "https://github.com/informalsystems/quint/issues/244" elif [[ "$file" == "solidity/icse23-fig7/lottery.qnt" && "$cmd" == "verify" ]] ; then printf "https://github.com/informalsystems/quint/issues/1019" diff --git a/examples/README.md b/examples/README.md index d43046882..53624aea5 100644 --- a/examples/README.md +++ b/examples/README.md @@ -80,7 +80,7 @@ listed without any additional command line arguments. | [language-features/lists.qnt](./language-features/lists.qnt) | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | | [language-features/maps.qnt](./language-features/maps.qnt) | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | | [language-features/nondetEx.qnt](./language-features/nondetEx.qnt) | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | -| [language-features/option.qnt](./language-features/option.qnt) | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x:https://github.com/informalsystems/quint/issues/244 | +| [language-features/option.qnt](./language-features/option.qnt) | :white_check_mark: | :x:https://github.com/informalsystems/quint/issues/244 | :x:https://github.com/informalsystems/quint/issues/244 | :x:https://github.com/informalsystems/quint/issues/244 | | [language-features/records.qnt](./language-features/records.qnt) | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | | [language-features/sets.qnt](./language-features/sets.qnt) | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | | [language-features/tuples.qnt](./language-features/tuples.qnt) | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | From 2ab35d6be408c64c91c8f5106f556dfc34e9c9a3 Mon Sep 17 00:00:00 2001 From: Shon Feder Date: Thu, 5 Oct 2023 01:15:18 -0400 Subject: [PATCH 10/15] Move `zip` util into src We use it in ToIrListener now, not just in the tests. --- quint/src/parsing/ToIrListener.ts | 2 +- quint/src/util.ts | 15 +++++++++++++++ quint/test/itf.test.ts | 3 ++- quint/test/util.ts | 16 +--------------- 4 files changed, 19 insertions(+), 17 deletions(-) diff --git a/quint/src/parsing/ToIrListener.ts b/quint/src/parsing/ToIrListener.ts index 941fc40ed..cf4dea6a5 100644 --- a/quint/src/parsing/ToIrListener.ts +++ b/quint/src/parsing/ToIrListener.ts @@ -24,7 +24,7 @@ import { compact, zipWith } from 'lodash' import { Maybe, just, none } from '@sweet-monads/maybe' import { TerminalNode } from 'antlr4ts/tree/TerminalNode' import { QuintTypeDef } from '../ir/quintIr' -import { zip } from '../../test/util' +import { zip } from '../util' /** * An ANTLR4 listener that constructs QuintIr objects out of the abstract diff --git a/quint/src/util.ts b/quint/src/util.ts index 061434919..e9d04caf4 100644 --- a/quint/src/util.ts +++ b/quint/src/util.ts @@ -13,6 +13,7 @@ */ import JSONbig from 'json-bigint' +import lodash from 'lodash' /** Add this at the end of a switch statement or if/then sequence to enforce exhaustiveness checking * @@ -29,3 +30,17 @@ import JSONbig from 'json-bigint' export function unreachable(object: never): never { throw new Error(`impossible: non-exhuastive check should fail during type checking ${JSONbig.stringify(object)}`) } + +/** A wrapper around lodash zip that ensures all zipped elements are defined + * + * Raises `Error` if the arrays are not the same length + */ +export function zip(a: A[], b: B[]): [A, B][] { + return lodash.zip(a, b).map(([x, y]) => { + if (x === undefined || y === undefined) { + throw new Error('Illegal arguments to zip: array lengths unequal') + } else { + return [x, y] + } + }) +} diff --git a/quint/test/itf.test.ts b/quint/test/itf.test.ts index 71913dc27..1f1a622f2 100644 --- a/quint/test/itf.test.ts +++ b/quint/test/itf.test.ts @@ -1,6 +1,7 @@ import { describe, it } from 'mocha' import { assert } from 'chai' -import { quintExAreEqual, zip } from './util' +import { quintExAreEqual } from './util' +import { zip } from '../src/util' import { buildExpression } from './builders/ir' import { ItfTrace, ofItf, toItf } from '../src/itf' diff --git a/quint/test/util.ts b/quint/test/util.ts index 8a41ea4af..7c6a1831f 100644 --- a/quint/test/util.ts +++ b/quint/test/util.ts @@ -13,7 +13,7 @@ import { QuintTypeDef, } from '../src/ir/quintIr' import { QuintType } from '../src/ir/quintTypes' -import lodash from 'lodash' +import { zip } from '../src/util' import { ParserPhase3, parse } from '../src/parsing/quintParserFrontend' import { SourceLookupPath } from '../src/parsing/sourceResolver' import { newIdGenerator } from '../src/idGenerator' @@ -53,20 +53,6 @@ export function collectIds(module: QuintModule): bigint[] { return [...ids] } -/** A wrapper around lodash zip that ensures all zipped elements are defined - * - * Raises `Error` if the arrays are not the same length - */ -export function zip(a: A[], b: B[]): [A, B][] { - return lodash.zip(a, b).map(([x, y]) => { - if (x === undefined || y === undefined) { - throw new Error('Illegal arguments to zepWell: array lengths unequal') - } else { - return [x, y] - } - }) -} - // Type predicate that tells us when a QuintEx is a scalar with a `value` function isScalar(v: QuintEx): v is QuintBool | QuintInt | QuintStr { return v.kind === 'bool' || v.kind === 'int' || v.kind === 'str' From fcd5ba5020f425c7cc10712a1bdeee07411325ce Mon Sep 17 00:00:00 2001 From: Shon Feder Date: Thu, 5 Oct 2023 01:36:51 -0400 Subject: [PATCH 11/15] Fix order of actual and expected values Expected goes second. This effects the output. --- quint/test/parsing/quintParserFrontend.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quint/test/parsing/quintParserFrontend.test.ts b/quint/test/parsing/quintParserFrontend.test.ts index 224ea4c21..f604586b8 100644 --- a/quint/test/parsing/quintParserFrontend.test.ts +++ b/quint/test/parsing/quintParserFrontend.test.ts @@ -64,7 +64,7 @@ function parseAndCompare(artifact: string): void { const { modules: modules2, sourceMap } = phase2Result.value const expectedIds = modules2.flatMap(m => collectIds(m)).sort() // Phase 1-2 succededed, check that the source map is correct - assert.sameDeepMembers(expectedIds, [...sourceMap.keys()].sort(), 'expected source map to contain all ids') + assert.sameDeepMembers([...sourceMap.keys()].sort(), expectedIds, 'expected source map to contain all ids') const expectedSourceMap = readJson(`${artifact}.map`) const sourceMapResult = JSONbig.parse(JSONbig.stringify(compactSourceMap(sourceMap))) From d9ffe10f5de280abae4696920633145f7f29af6c Mon Sep 17 00:00:00 2001 From: Shon Feder Date: Thu, 5 Oct 2023 01:38:47 -0400 Subject: [PATCH 12/15] Walk the row of a sum type --- quint/src/ir/IRVisitor.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/quint/src/ir/IRVisitor.ts b/quint/src/ir/IRVisitor.ts index 9bab7a483..ab1ef8988 100644 --- a/quint/src/ir/IRVisitor.ts +++ b/quint/src/ir/IRVisitor.ts @@ -250,6 +250,7 @@ export function walkType(visitor: IRVisitor, type: t.QuintType): void { case 'sum': visitor.enterSumType?.(type) + walkRow(visitor, type.fields) visitor.exitSumType?.(type) break From 0f187c082b6db77a058347050190510a9cabc887 Mon Sep 17 00:00:00 2001 From: Shon Feder Date: Thu, 5 Oct 2023 01:55:53 -0400 Subject: [PATCH 13/15] Fix documentation of sum type ir listener --- quint/src/parsing/ToIrListener.ts | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/quint/src/parsing/ToIrListener.ts b/quint/src/parsing/ToIrListener.ts index cf4dea6a5..8c91554d7 100644 --- a/quint/src/parsing/ToIrListener.ts +++ b/quint/src/parsing/ToIrListener.ts @@ -390,9 +390,29 @@ export class ToIrListener implements QuintListener { type, } - // Generate all the variant constructors - // a variant constructor is an operator that injects an exprssion + // Generate all the variant constructors implied by a variant type definition + // a variant constructor is an operator that injects an expression // into the sum type by wrapping it in a label + // + // E.g., given the type definition + // + // ``` + // type T = A(int) | B + // ``` + // + // We will generate + // + // ``` + // def A(__AParam) = variant("A", __AParam) + // val B = {} + // ``` + // + // Allowing users to write: + // + // ``` + // val a: T = A(42) + // val b: T = B + // ``` const constructors: QuintOpDef[] = zip(fields, ctx.typeSumVariant()).map( ([{ fieldName, fieldType }, variantCtx]) => { // Mangle the parameter name to avoid clashes @@ -404,15 +424,14 @@ export class ToIrListener implements QuintListener { let qualifier: OpQualifier if (isUnitType(fieldType)) { - // The nullary variant constructor is actual - // variant pairint a label with the unit. + // The nullary variant constructor is actualy + // a variant pairing a label with the unit. params = [] expr = unitValue(this.getId(variantCtx._sumLabel)) // Its a `val` cause it takes no arguments qualifier = 'val' } else { - // Oherwise we will build constructor that takes one parameter - // and wraps it in a `variaint` + // Otherwise we will build a constructor that takes one parameter params = [{ id: this.getId(variantCtx.type()!), name: paramName }] expr = { kind: 'name', name: paramName, id: this.getId(variantCtx._sumLabel) } qualifier = 'def' From 37685988e86ec7798803e7833a80367253dadad6 Mon Sep 17 00:00:00 2001 From: Shon Feder Date: Thu, 5 Oct 2023 01:58:35 -0400 Subject: [PATCH 14/15] Fix comments --- quint/src/parsing/ToIrListener.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/quint/src/parsing/ToIrListener.ts b/quint/src/parsing/ToIrListener.ts index 8c91554d7..8c23313a8 100644 --- a/quint/src/parsing/ToIrListener.ts +++ b/quint/src/parsing/ToIrListener.ts @@ -954,7 +954,7 @@ export class ToIrListener implements QuintListener { exitMatchSumExpr(ctx: p.MatchSumExprContext) { const matchId = this.getId(ctx) - // We will have one expression for each match case, plus one for each case + // We will have one expression for the matched expression, plus one for each elimination case const exprs = popMany(this.exprStack, ctx._matchCase.length + 1) // The first expression is the one we are matching on @@ -979,7 +979,7 @@ export class ToIrListener implements QuintListener { // A helper for forming match expressions // // For a single case parsed `matchCase`, we form the pair of the variant label - // and the lambda that will eliminate the value wrapped carried in variant. + // and the lambda that will eliminate the value carried by the variant. // // E.g., `A(x) => ` becomes `["A", (x) => ]` private formMatchCase([caseExpr, caseCtx]: [QuintEx, p.MatchSumCaseContext]): (QuintStr | QuintLambda)[] { From ba946ad88befae93404bef9fd88ac1a283451722 Mon Sep 17 00:00:00 2001 From: Shon Feder Date: Thu, 5 Oct 2023 09:18:54 -0400 Subject: [PATCH 15/15] Remove commented out code --- quint/src/parsing/ToIrListener.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/quint/src/parsing/ToIrListener.ts b/quint/src/parsing/ToIrListener.ts index 8c23313a8..6085250e7 100644 --- a/quint/src/parsing/ToIrListener.ts +++ b/quint/src/parsing/ToIrListener.ts @@ -456,7 +456,7 @@ export class ToIrListener implements QuintListener { const poppedType = this.popType().value // Check if we have an accompanying type, and if not, then synthesize the // unit type. - // const poppedType = this.popType().value + // // I.e., we interpret a variant `A` as `A({})`. const fieldType: QuintType = poppedType ? poppedType : unitType(this.getId(ctx)) this.variantStack.push({ fieldName, fieldType }) @@ -1007,7 +1007,6 @@ export class ToIrListener implements QuintListener { const labelStr: QuintStr = { id: caseId, kind: 'str', value: label } const elim: QuintLambda = { id: caseId, kind: 'lambda', qualifier: 'def', expr: caseExpr, params } return [labelStr, elim] - // return acc.concat([labelStr, elim]) } /** ******************* translate types ********************************/