From 59735c5e38da6eb430c92f86870c9a94eac68791 Mon Sep 17 00:00:00 2001 From: "Timothy J. Aveni" Date: Wed, 16 Sep 2026 11:25:20 -0700 Subject: [PATCH] Add checked React field bindings and Web Studio factories Replace opaque props with checked generic presentation contracts and lazy typed interface references. Generate readonly/writable field APIs and component checks. Preserve CRDT editing through explicit resolved getter/setter contracts, binding- fenced delta RPCs, native watches and replica-aware field adapters. Custom setters retain semantic writes; storage snapshots never grant write authority. Cover concurrent edits, lost acknowledgements, readonly contracts and authorization. Add receiver-free static factory dispatch, state-field binding shorthand, and conformance-based creation. Migrate TODO, editable scaffolds and authoring guides. Verify language/codegen, SDK, RPC, browser lifecycle, local scaffolds, production browser bundling and CRDT persistence with temporary PostgreSQL. --- grammar/QuixosCapability.g4 | 8 +- proto/quixos/orch.proto | 47 +- src/bindings/cli.ts | 10 +- src/bindings/generics.ts | 16 +- src/bindings/index.ts | 9 +- src/bindings/react-platform.ts | 35 +- src/bindings/react.ts | 87 + .../generated/QuixosCapability.interp | 5 +- .../generated/QuixosCapability.tokens | 364 +-- .../generated/QuixosCapabilityLexer.interp | 5 +- .../generated/QuixosCapabilityLexer.tokens | 364 +-- .../generated/QuixosCapabilityLexer.ts | 1046 +++---- .../generated/QuixosCapabilityParser.ts | 2756 +++++++++-------- .../generated/QuixosCapabilityVisitor.ts | 7 + src/capability-language/parser.ts | 47 +- src/capability-language/scaffold-recipes.ts | 24 +- src/capability-language/tool-cli.ts | 3 + src/capability-model/types.ts | 2 + src/capability-model/validation.ts | 66 +- src/gen/quixos/orch_pb.ts | 238 +- test/react-fields.test.ts | 187 ++ test/scaffold-recipes.test.ts | 8 +- 22 files changed, 3034 insertions(+), 2300 deletions(-) create mode 100644 src/bindings/react.ts create mode 100644 test/react-fields.test.ts diff --git a/grammar/QuixosCapability.g4 b/grammar/QuixosCapability.g4 index b1825e4..38d4512 100644 --- a/grammar/QuixosCapability.g4 +++ b/grammar/QuixosCapability.g4 @@ -95,7 +95,7 @@ interfaceMember ; operationMember - : OPERATION identifier ID stringLiteral COLON valueType ARROW valueType + : STATIC? OPERATION identifier ID stringLiteral COLON valueType ARROW valueType LBRACE CALL ID stringLiteral SEMI RBRACE ; @@ -239,9 +239,14 @@ conformanceDecl conformanceItem : PRIVATE attachmentDecl | operationBindingDecl + | stateFieldBindingDecl | relationshipMaterializationDecl ; +stateFieldBindingDecl + : BIND identifier TO STATE identifier SEMI + ; + relationshipMaterializationDecl : MATERIALIZE identifier IF ABSENT USING CONSTRUCTOR identifier VIA EDGE identifier DOT identifier SEMI ; @@ -395,6 +400,7 @@ INPUT: 'input'; CONFORM: 'conform'; AS: 'as'; BIND: 'bind'; +STATIC: 'static'; TO: 'to'; PRIVATE: 'private'; SHARED: 'shared'; diff --git a/proto/quixos/orch.proto b/proto/quixos/orch.proto index bf306c2..cabf65c 100644 --- a/proto/quixos/orch.proto +++ b/proto/quixos/orch.proto @@ -9,6 +9,8 @@ import "quixos/runtime.proto"; service OrchestratorRuntime { rpc InvokeCapability(InvokeCapabilityRequest) returns (InvokeCapabilityResponse); + rpc EditCapabilityField(EditCapabilityFieldRequest) returns (InvokeCapabilityResponse); + rpc InvokeClassCapability(InvokeClassCapabilityRequest) returns (InvokeCapabilityResponse); rpc WatchCapability(WatchCapabilityRequest) returns (stream WatchCapabilityEvent); rpc ConstructObject(ConstructObjectRequest) returns (ConstructObjectResponse); rpc ResolveOrConstructRelatedObject(ResolveOrConstructRelatedObjectRequest) @@ -46,6 +48,11 @@ message InvokeCapabilityRequest { // layers so a live-value controller can recognize its own confirmation. string client_mutation_id = 4; } +message InvokeClassCapabilityRequest { + string conformance_id = 1; + string operation_id = 2; + map input = 3; +} message InvokeCapabilityResponse { string invocation_id = 1; Activation activation = 2; @@ -53,6 +60,24 @@ message InvokeCapabilityResponse { camino.Value result = 4; string error = 5; repeated quixos.runtime.DerivedDependency dependencies = 6; + FieldEditing field_editing = 7; +} + +// Resolved from the checked native getter/setter binding, not Value.source. +message FieldEditing { + string getter_operation_id = 1; + string setter_operation_id = 2; + string document_type = 3; + string binding_digest = 4; +} +message EditCapabilityFieldRequest { + // The public getter; setter must belong to the same value member. + quixos.CapabilityRef capability = 1; + string object_id = 2; + string setter_operation_id = 3; + string binding_digest = 4; + camino.CrdtValue update = 5; + string client_mutation_id = 6; } message WatchCapabilityRequest { @@ -68,18 +93,34 @@ message WatchCapabilityEvent { repeated quixos.runtime.DerivedDependency dependencies = 5; string error = 6; bool initial = 7; + FieldEditing field_editing = 8; } -message GetWorkspaceRequest {} +message GetWorkspaceRequest { + // Revision polling must not download the entire interface graph. + bool include_interface_contracts = 1; +} message GetWorkspaceResponse { string workspace_id = 1; string workspace_revision_id = 2; string source_root_commit = 3; - // Checked constructors whose wire input can be empty. Web Studio intersects - // this with its temporary Createable marker; the marker is not a factory. + // Checked constructors whose wire input can be empty. The create panel uses + // class factory conformances instead of this constructor inventory. repeated string empty_input_constructible_atom_ids = 4; repeated CapabilityInputContract capability_inputs = 5; repeated ConstructorInputContract constructor_inputs = 6; + // Exact closed interface contracts used by checked presentation consumers. + string interfaces_json = 7; + repeated ClassCapability class_capabilities = 8; +} +message ClassCapability { + string conformance_id = 1; + string atom_id = 2; + string interface_revision_id = 3; + string definition_id = 4; + string operation_id = 5; + string input_type_json = 6; + string output_type_json = 7; } message CapabilityInputContract { string interface_revision_id = 1; diff --git a/src/bindings/cli.ts b/src/bindings/cli.ts index df81397..d62f844 100644 --- a/src/bindings/cli.ts +++ b/src/bindings/cli.ts @@ -3,16 +3,22 @@ import { readFile, writeFile } from "node:fs/promises"; import { generateTypeScriptBindings } from "./index.js"; import path from "node:path"; import { reactPlatformTypes } from "./react-platform.js"; +import { generateReactBindings } from "./react.js"; const main = async () => { const [schema, revision, output, options, ...rest] = process.argv.slice(2); if (!schema || !revision || !output || rest.length) throw new Error("usage: quixos-codegen-ts SCHEMA.json PACKAGE_REVISION OUTPUT.ts [OPTIONS.json]"); const config = options ? JSON.parse(await readFile(options, "utf8")) : {}; - const generated = generateTypeScriptBindings(JSON.parse(await readFile(schema, "utf8")), revision, config); + const contracts = JSON.parse(await readFile(schema, "utf8")); + const generated = generateTypeScriptBindings(contracts, revision, config); await writeFile(output, generated); - if (config.messages?.["org.quixos.web-studio.ReactProps"]) { + if (config.react) { await writeFile(path.join(path.dirname(output), "web-studio-react-runtime.d.ts"), reactPlatformTypes); + await writeFile( + path.join(path.dirname(output), "react-props.gen.ts"), + generateReactBindings(contracts, revision, config.react.propsExports, config.react.components), + ); } }; main().catch((error: unknown) => { diff --git a/src/bindings/generics.ts b/src/bindings/generics.ts index a6c3011..f9d8f1a 100644 --- a/src/bindings/generics.ts +++ b/src/bindings/generics.ts @@ -124,7 +124,7 @@ export const genericImplementationType = ( }; const operations = (contract.template?.members ?? contract.members).flatMap((member) => member.operations - .filter((op) => op.mode === "call") + .filter((op) => op.mode === "call" && op.scope !== "class") .map((op) => ({ ...op, name: `${member.displayName}.${op.displayName}` })), ); return object([ @@ -146,11 +146,21 @@ export const genericImplementationType = ( .join(","); const receiver = definition.receiverRequirement; const context = object([ - ["objectId", `QxObjectRef<${receiver.kind === "target" ? target(receiver.target, rootScope()) : "string"}>`], + ...(definition.kind === "function" + ? [] + : [ + [ + "objectId", + `QxObjectRef<${receiver.kind === "target" ? target(receiver.target, rootScope()) : "string"}>`, + ] as [string, string], + ]), ["input", value(definition.inputType, rootScope())], ["ports", object(definition.dependencyPorts.map((entry) => [entry.displayName, port(entry)]))], ]); - const contextWithLifecycle = `${context} & QxContextLifecycle<${context} & {signal?: AbortSignal}>`; + const contextWithLifecycle = + definition.kind === "function" + ? `${context} & {signal?: AbortSignal}` + : `${context} & QxContextLifecycle<${context} & {signal?: AbortSignal}>`; const result = value(definition.eventType ?? definition.outputType, rootScope()); const handler = `<${declarations}>(context:${contextWithLifecycle})=>${result}|Promise<${result}>`; const derived = `{kind:"derived";get:${handler}}`; diff --git a/src/bindings/index.ts b/src/bindings/index.ts index 27210b3..5043659 100644 --- a/src/bindings/index.ts +++ b/src/bindings/index.ts @@ -180,7 +180,7 @@ export const generateTypeScriptBindings = ( // Streaming ports need a future streaming ABI; ordinary calls are fully typed today. const operations = contract.members.flatMap((member) => member.operations - .filter((operation) => operation.mode === "call") + .filter((operation) => operation.mode === "call" && operation.scope !== "class") .map((operation) => ({ ...operation, name: `${member.displayName}.${operation.displayName}` })), ); return { @@ -245,13 +245,15 @@ export const generateTypeScriptBindings = ( ? `QxObjectRef<${entry.receiverRequirement.interfaceRevisionIds.map((id) => q(`interface:${id}`)).join(" | ") || "never"}>` : "QxObjectRef"; const contextShape = object([ - ["objectId", receiver], + ...(entry.kind === "function" ? [] : [["objectId", receiver] as [string, string]]), ["input", type(entry.inputType)], ["ports", object(ports.map((port) => [port.name, port.type]))], ]); contexts.push([ entry.displayName, - `${contextShape} & QxContextLifecycle<${contextShape} & {signal?: AbortSignal}>`, + entry.kind === "function" + ? `${contextShape} & {signal?: AbortSignal}` + : `${contextShape} & QxContextLifecycle<${contextShape} & {signal?: AbortSignal}>`, ]); const event = entry.kind === "operation" ? entry.eventType : undefined; const contextType = `Contexts[${q(entry.displayName)}]`; @@ -266,6 +268,7 @@ export const generateTypeScriptBindings = ( : `QxHandler<${contextType}, ${outputType}>${entry.kind === "operation" && entry.mode === "call" ? ` | QxDerived<${contextType}, ${outputType}>` : ""}`, ]); specs[entry.displayName] = { + ...(entry.kind === "function" ? { receiver: "none" } : {}), inputType: entry.inputType, outputType: entry.outputType, ...(event ? { eventType: event } : {}), diff --git a/src/bindings/react-platform.ts b/src/bindings/react-platform.ts index 09e8977..d674291 100644 --- a/src/bindings/react-platform.ts +++ b/src/bindings/react-platform.ts @@ -8,21 +8,13 @@ declare module "@quixos/web-studio-react-runtime" { export type ObjectRef = string & { readonly $quixosAtom: AtomId; }; - export type LiveFieldProp = { - value: T; - source: { - objectId: string; - slotId: string; - valueType?: string; - storagePolicy?: string; - revision?: string | number | bigint; - crdtSnapshot?: { - type: string; - encoding: string; - payload: string; - }; - }; - }; + export type FieldCapability = {objectId: string; interfaceRevisionId: string; getOperationId: string; watchOperationId?: string; setOperationId?: string; inputKind?: "fields" | "value"}; + export type ReadableField = {readonly value?: T; readonly capability: FieldCapability}; + /** set(T) uses the resolved capability: native CRDT fields send incremental edits; + * custom/manual setters receive semantic values. Storage provenance grants no authority. */ + export type WritableField = ReadableField & {readonly $writeType?: (value: T) => T; readonly writable: true; readonly capability: FieldCapability & {setOperationId: string}}; + export type LiveFieldProp = ReadableField; + export type InterfaceReference = {readonly $quixosRef: string; readonly interfaceRevisionId: I; readonly fields: Fields}; export type ReactComponentHostProps = { onAction?: (action: Action) => void; fallback?: React.ReactNode; @@ -49,15 +41,8 @@ declare module "@quixos/web-studio-react-runtime" { options?: {clientMutationId?: string; signal?: AbortSignal}, ) => Promise; export const h: typeof React.createElement; - export const useLiveField: ( - field: LiveFieldProp, - options?: { - reconcileRegister?: (state: { - confirmed: T; - optimistic: T; - pending: boolean; - }) => T; - }, - ) => readonly [T, (value: T) => Promise]; + export function useLiveField(field: ReadableField, options: {write: (value: T) => Promise}): readonly [T, (value: T) => Promise]; + export function useLiveField(field: WritableField): readonly [T, (value: T) => Promise]; + export function useLiveField(field: ReadableField): readonly [T]; } `; diff --git a/src/bindings/react.ts b/src/bindings/react.ts new file mode 100644 index 0000000..f34cab3 --- /dev/null +++ b/src/bindings/react.ts @@ -0,0 +1,87 @@ +import type { BindingSchema } from "./index.js"; +import type { ValueType } from "../capability-model/types.js"; + +/** Browser projection of the SAME checked RPC types, not a second props schema. */ +export function generateReactBindings( + schema: BindingSchema, + packageRevisionId: string, + propsExports: readonly string[], + components: readonly { module: string; propsExport: string }[] = [], +) { + const pkg = schema.packages.find((entry) => entry.revisionId === packageRevisionId); + if (!pkg) throw new Error(`Unknown package ${packageRevisionId}`); + const q = JSON.stringify; + const references = new Map(); + const declarations: string[] = []; + const type = (value: ValueType): string => { + switch (value.kind) { + case "builtin": + if (value.name !== "unit") throw new Error(`Unsupported React props builtin ${value.name}`); + return "null"; + case "scalar": + return { + string: "string", + bool: "boolean", + bytes: "Uint8Array", + int64: "bigint", + uint64: "bigint", + int32: "number", + uint32: "number", + double: "number", + }[value.name]; + case "optional": + return `(${type(value.value)} | null)`; + case "list": + return `Array<${type(value.value)}>`; + case "record": + return `{${Object.entries(value.fields) + .map(([name, field]) => `${q(name)}: ${type(field)}`) + .join(";")}}`; + case "message": + throw new Error(`React props require checked values, not opaque message ${value.descriptorId}`); + case "object-ref": { + if (value.expectation.kind === "atom") return `ObjectRef<${q(value.expectation.atomId)}>`; + const id = value.expectation.interfaceRevisionId; + const existing = references.get(id); + if (existing) return existing; + const name = `Interface${references.size}`; + references.set(id, name); + const iface = schema.interfaces.find((entry) => entry.revisionId === id); + if (!iface) throw new Error(`Missing React reference contract ${id}`); + const fields = iface.members.flatMap((member) => { + if (member.kind === "operation") return []; + const get = member.operations.find((op) => op.displayName === (member.kind === "value" ? "get" : "resolve")); + if (!get) return []; + const writable = member.kind === "value" && member.operations.some((op) => op.displayName === "set"); + return [`${q(member.displayName)}: ${writable ? "WritableField" : "ReadableField"}<${type(get.outputType)}>`]; + }); + declarations.push(`export type ${name} = InterfaceReference<${q(id)}, {${fields.join(";")}}> ;`); + return name; + } + } + }; + // Only exports explicitly selected as props are projected. Non-props exports + // may legitimately use opaque messages or types unrelated to the browser. + const selected = propsExports.map((name) => { + const entry = pkg.exports.find((candidate) => candidate.displayName === name); + if (!entry) throw new Error(`Unknown React props export ${name}`); + return entry; + }); + const results = selected.map( + (entry) => + `${q(entry.displayName)}: ${type(entry.kind === "operation" ? (entry.eventType ?? entry.outputType) : entry.outputType)}`, + ); + const checks = components.map((component, i) => { + if (!propsExports.includes(component.propsExport)) + throw new Error(`Component refers to unselected props export ${component.propsExport}`); + if (!component.module.startsWith(".")) + throw new Error("React component check must name a local module relative to generated bindings"); + return `type Component${i} = CheckedComponent<${q(component.propsExport)}, typeof import(${q(component.module)})["default"]>;`; + }); + return ( + `// Generated from checked QX contracts. Do not edit.\nimport type {ObjectRef, InterfaceReference, ReadableField, WritableField} from "@quixos/web-studio-react-runtime";\n${declarations.join("\n")}\nexport type ReactResults = {${results.join(";\n")}};\n` + + (checks.length + ? `type CheckedComponent void}) => unknown> = C;\n${checks.join("\n")}\n` + : "") + ); +} diff --git a/src/capability-language/generated/QuixosCapability.interp b/src/capability-language/generated/QuixosCapability.interp index ce06dea..a4830e8 100644 --- a/src/capability-language/generated/QuixosCapability.interp +++ b/src/capability-language/generated/QuixosCapability.interp @@ -23,6 +23,7 @@ null 'conform' 'as' 'bind' +'static' 'to' 'private' 'shared' @@ -143,6 +144,7 @@ INPUT CONFORM AS BIND +STATIC TO PRIVATE SHARED @@ -284,6 +286,7 @@ edgeDecl edgeEndpoint conformanceDecl conformanceItem +stateFieldBindingDecl relationshipMaterializationDecl operationBindingDecl memberOperationRef @@ -307,4 +310,4 @@ stringLiteral atn: -[4, 1, 117, 958, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, 143, 8, 0, 1, 1, 1, 1, 1, 1, 5, 1, 148, 8, 1, 10, 1, 12, 1, 151, 9, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 169, 8, 3, 10, 3, 12, 3, 172, 9, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 183, 8, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 195, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 215, 8, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 223, 8, 9, 1, 9, 1, 9, 1, 10, 5, 10, 228, 8, 10, 10, 10, 12, 10, 231, 9, 10, 1, 10, 1, 10, 1, 10, 3, 10, 236, 8, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 5, 10, 246, 8, 10, 10, 10, 12, 10, 249, 9, 10, 3, 10, 251, 8, 10, 1, 10, 1, 10, 5, 10, 255, 8, 10, 10, 10, 12, 10, 258, 9, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 5, 11, 266, 8, 11, 10, 11, 12, 11, 269, 9, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 277, 8, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 5, 12, 285, 8, 12, 10, 12, 12, 12, 288, 9, 12, 3, 12, 290, 8, 12, 3, 12, 292, 8, 12, 1, 13, 1, 13, 3, 13, 296, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 5, 14, 302, 8, 14, 10, 14, 12, 14, 305, 9, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 316, 8, 15, 1, 16, 1, 16, 1, 16, 3, 16, 321, 8, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 3, 17, 330, 8, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 5, 19, 355, 8, 19, 10, 19, 12, 19, 358, 9, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 381, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 391, 8, 21, 1, 21, 1, 21, 5, 21, 395, 8, 21, 10, 21, 12, 21, 398, 9, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 426, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 433, 8, 23, 1, 23, 1, 23, 3, 23, 437, 8, 23, 1, 24, 5, 24, 440, 8, 24, 10, 24, 12, 24, 443, 9, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 3, 24, 453, 8, 24, 1, 24, 1, 24, 5, 24, 457, 8, 24, 10, 24, 12, 24, 460, 9, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 3, 25, 467, 8, 25, 1, 26, 1, 26, 1, 26, 3, 26, 472, 8, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 483, 8, 26, 1, 26, 1, 26, 1, 26, 3, 26, 488, 8, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 3, 27, 495, 8, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 504, 8, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 517, 8, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 5, 31, 536, 8, 31, 10, 31, 12, 31, 539, 9, 31, 3, 31, 541, 8, 31, 1, 31, 3, 31, 544, 8, 31, 1, 32, 1, 32, 1, 32, 5, 32, 549, 8, 32, 10, 32, 12, 32, 552, 9, 32, 1, 33, 1, 33, 1, 33, 5, 33, 557, 8, 33, 10, 33, 12, 33, 560, 9, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 590, 8, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 602, 8, 34, 1, 34, 1, 34, 3, 34, 606, 8, 34, 1, 35, 1, 35, 1, 35, 1, 35, 5, 35, 612, 8, 35, 10, 35, 12, 35, 615, 9, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 3, 38, 626, 8, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 3, 39, 640, 8, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 3, 40, 650, 8, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 3, 42, 668, 8, 42, 1, 42, 1, 42, 3, 42, 672, 8, 42, 1, 42, 3, 42, 675, 8, 42, 1, 42, 1, 42, 3, 42, 679, 8, 42, 1, 42, 3, 42, 682, 8, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 3, 43, 691, 8, 43, 1, 43, 1, 43, 3, 43, 695, 8, 43, 1, 43, 1, 43, 3, 43, 699, 8, 43, 1, 43, 1, 43, 5, 43, 703, 8, 43, 10, 43, 12, 43, 706, 9, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 3, 44, 714, 8, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 3, 48, 751, 8, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 3, 49, 770, 8, 49, 1, 49, 3, 49, 773, 8, 49, 3, 49, 775, 8, 49, 1, 50, 1, 50, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 5, 52, 784, 8, 52, 10, 52, 12, 52, 787, 9, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 801, 8, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 817, 8, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 826, 8, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 834, 8, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 844, 8, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 3, 54, 853, 8, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 3, 55, 871, 8, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 5, 55, 893, 8, 55, 10, 55, 12, 55, 896, 9, 55, 1, 55, 1, 55, 1, 55, 3, 55, 901, 8, 55, 3, 55, 903, 8, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 3, 59, 922, 8, 59, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 928, 8, 60, 10, 60, 12, 60, 931, 9, 60, 3, 60, 933, 8, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 5, 62, 945, 8, 62, 10, 62, 12, 62, 948, 9, 62, 3, 62, 950, 8, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 0, 0, 65, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 0, 7, 1, 0, 65, 69, 2, 0, 60, 64, 66, 67, 2, 0, 60, 61, 66, 67, 2, 0, 62, 64, 66, 67, 1, 0, 85, 92, 1, 0, 72, 75, 2, 0, 39, 39, 113, 113, 1022, 0, 142, 1, 0, 0, 0, 2, 144, 1, 0, 0, 0, 4, 154, 1, 0, 0, 0, 6, 158, 1, 0, 0, 0, 8, 182, 1, 0, 0, 0, 10, 194, 1, 0, 0, 0, 12, 196, 1, 0, 0, 0, 14, 203, 1, 0, 0, 0, 16, 214, 1, 0, 0, 0, 18, 216, 1, 0, 0, 0, 20, 229, 1, 0, 0, 0, 22, 261, 1, 0, 0, 0, 24, 291, 1, 0, 0, 0, 26, 293, 1, 0, 0, 0, 28, 297, 1, 0, 0, 0, 30, 315, 1, 0, 0, 0, 32, 317, 1, 0, 0, 0, 34, 329, 1, 0, 0, 0, 36, 331, 1, 0, 0, 0, 38, 346, 1, 0, 0, 0, 40, 380, 1, 0, 0, 0, 42, 382, 1, 0, 0, 0, 44, 425, 1, 0, 0, 0, 46, 436, 1, 0, 0, 0, 48, 441, 1, 0, 0, 0, 50, 466, 1, 0, 0, 0, 52, 468, 1, 0, 0, 0, 54, 491, 1, 0, 0, 0, 56, 507, 1, 0, 0, 0, 58, 520, 1, 0, 0, 0, 60, 523, 1, 0, 0, 0, 62, 543, 1, 0, 0, 0, 64, 545, 1, 0, 0, 0, 66, 553, 1, 0, 0, 0, 68, 605, 1, 0, 0, 0, 70, 607, 1, 0, 0, 0, 72, 618, 1, 0, 0, 0, 74, 620, 1, 0, 0, 0, 76, 625, 1, 0, 0, 0, 78, 627, 1, 0, 0, 0, 80, 649, 1, 0, 0, 0, 82, 651, 1, 0, 0, 0, 84, 660, 1, 0, 0, 0, 86, 685, 1, 0, 0, 0, 88, 713, 1, 0, 0, 0, 90, 715, 1, 0, 0, 0, 92, 729, 1, 0, 0, 0, 94, 735, 1, 0, 0, 0, 96, 750, 1, 0, 0, 0, 98, 774, 1, 0, 0, 0, 100, 776, 1, 0, 0, 0, 102, 778, 1, 0, 0, 0, 104, 780, 1, 0, 0, 0, 106, 843, 1, 0, 0, 0, 108, 845, 1, 0, 0, 0, 110, 902, 1, 0, 0, 0, 112, 904, 1, 0, 0, 0, 114, 909, 1, 0, 0, 0, 116, 911, 1, 0, 0, 0, 118, 921, 1, 0, 0, 0, 120, 923, 1, 0, 0, 0, 122, 936, 1, 0, 0, 0, 124, 940, 1, 0, 0, 0, 126, 953, 1, 0, 0, 0, 128, 955, 1, 0, 0, 0, 130, 131, 3, 6, 3, 0, 131, 132, 5, 0, 0, 1, 132, 143, 1, 0, 0, 0, 133, 134, 3, 20, 10, 0, 134, 135, 5, 0, 0, 1, 135, 143, 1, 0, 0, 0, 136, 137, 3, 48, 24, 0, 137, 138, 5, 0, 0, 1, 138, 143, 1, 0, 0, 0, 139, 140, 3, 2, 1, 0, 140, 141, 5, 0, 0, 1, 141, 143, 1, 0, 0, 0, 142, 130, 1, 0, 0, 0, 142, 133, 1, 0, 0, 0, 142, 136, 1, 0, 0, 0, 142, 139, 1, 0, 0, 0, 143, 1, 1, 0, 0, 0, 144, 145, 5, 7, 0, 0, 145, 149, 5, 101, 0, 0, 146, 148, 3, 8, 4, 0, 147, 146, 1, 0, 0, 0, 148, 151, 1, 0, 0, 0, 149, 147, 1, 0, 0, 0, 149, 150, 1, 0, 0, 0, 150, 152, 1, 0, 0, 0, 151, 149, 1, 0, 0, 0, 152, 153, 5, 102, 0, 0, 153, 3, 1, 0, 0, 0, 154, 155, 5, 8, 0, 0, 155, 156, 3, 128, 64, 0, 156, 157, 5, 98, 0, 0, 157, 5, 1, 0, 0, 0, 158, 159, 5, 1, 0, 0, 159, 160, 3, 126, 63, 0, 160, 161, 5, 48, 0, 0, 161, 162, 3, 128, 64, 0, 162, 163, 5, 42, 0, 0, 163, 164, 3, 128, 64, 0, 164, 165, 5, 41, 0, 0, 165, 166, 3, 128, 64, 0, 166, 170, 5, 101, 0, 0, 167, 169, 3, 8, 4, 0, 168, 167, 1, 0, 0, 0, 169, 172, 1, 0, 0, 0, 170, 168, 1, 0, 0, 0, 170, 171, 1, 0, 0, 0, 171, 173, 1, 0, 0, 0, 172, 170, 1, 0, 0, 0, 173, 174, 5, 102, 0, 0, 174, 7, 1, 0, 0, 0, 175, 183, 3, 4, 2, 0, 176, 183, 3, 18, 9, 0, 177, 183, 3, 10, 5, 0, 178, 183, 3, 74, 37, 0, 179, 183, 3, 86, 43, 0, 180, 183, 3, 108, 54, 0, 181, 183, 3, 32, 16, 0, 182, 175, 1, 0, 0, 0, 182, 176, 1, 0, 0, 0, 182, 177, 1, 0, 0, 0, 182, 178, 1, 0, 0, 0, 182, 179, 1, 0, 0, 0, 182, 180, 1, 0, 0, 0, 182, 181, 1, 0, 0, 0, 183, 9, 1, 0, 0, 0, 184, 185, 5, 8, 0, 0, 185, 186, 5, 11, 0, 0, 186, 187, 3, 126, 63, 0, 187, 188, 5, 98, 0, 0, 188, 195, 1, 0, 0, 0, 189, 190, 5, 8, 0, 0, 190, 191, 5, 13, 0, 0, 191, 192, 3, 126, 63, 0, 192, 193, 5, 98, 0, 0, 193, 195, 1, 0, 0, 0, 194, 184, 1, 0, 0, 0, 194, 189, 1, 0, 0, 0, 195, 11, 1, 0, 0, 0, 196, 197, 5, 9, 0, 0, 197, 198, 5, 10, 0, 0, 198, 199, 3, 126, 63, 0, 199, 200, 5, 48, 0, 0, 200, 201, 3, 128, 64, 0, 201, 202, 5, 98, 0, 0, 202, 13, 1, 0, 0, 0, 203, 204, 5, 9, 0, 0, 204, 205, 5, 11, 0, 0, 205, 206, 3, 126, 63, 0, 206, 207, 5, 42, 0, 0, 207, 208, 3, 128, 64, 0, 208, 209, 5, 98, 0, 0, 209, 15, 1, 0, 0, 0, 210, 215, 3, 10, 5, 0, 211, 215, 3, 12, 6, 0, 212, 215, 3, 14, 7, 0, 213, 215, 3, 32, 16, 0, 214, 210, 1, 0, 0, 0, 214, 211, 1, 0, 0, 0, 214, 212, 1, 0, 0, 0, 214, 213, 1, 0, 0, 0, 215, 17, 1, 0, 0, 0, 216, 217, 5, 10, 0, 0, 217, 218, 3, 126, 63, 0, 218, 219, 5, 48, 0, 0, 219, 222, 3, 128, 64, 0, 220, 221, 5, 49, 0, 0, 221, 223, 3, 128, 64, 0, 222, 220, 1, 0, 0, 0, 222, 223, 1, 0, 0, 0, 223, 224, 1, 0, 0, 0, 224, 225, 5, 98, 0, 0, 225, 19, 1, 0, 0, 0, 226, 228, 3, 16, 8, 0, 227, 226, 1, 0, 0, 0, 228, 231, 1, 0, 0, 0, 229, 227, 1, 0, 0, 0, 229, 230, 1, 0, 0, 0, 230, 232, 1, 0, 0, 0, 231, 229, 1, 0, 0, 0, 232, 233, 5, 11, 0, 0, 233, 235, 3, 126, 63, 0, 234, 236, 3, 22, 11, 0, 235, 234, 1, 0, 0, 0, 235, 236, 1, 0, 0, 0, 236, 237, 1, 0, 0, 0, 237, 238, 5, 48, 0, 0, 238, 239, 3, 128, 64, 0, 239, 240, 5, 42, 0, 0, 240, 250, 3, 128, 64, 0, 241, 242, 5, 53, 0, 0, 242, 247, 3, 26, 13, 0, 243, 244, 5, 99, 0, 0, 244, 246, 3, 26, 13, 0, 245, 243, 1, 0, 0, 0, 246, 249, 1, 0, 0, 0, 247, 245, 1, 0, 0, 0, 247, 248, 1, 0, 0, 0, 248, 251, 1, 0, 0, 0, 249, 247, 1, 0, 0, 0, 250, 241, 1, 0, 0, 0, 250, 251, 1, 0, 0, 0, 251, 252, 1, 0, 0, 0, 252, 256, 5, 101, 0, 0, 253, 255, 3, 34, 17, 0, 254, 253, 1, 0, 0, 0, 255, 258, 1, 0, 0, 0, 256, 254, 1, 0, 0, 0, 256, 257, 1, 0, 0, 0, 257, 259, 1, 0, 0, 0, 258, 256, 1, 0, 0, 0, 259, 260, 5, 102, 0, 0, 260, 21, 1, 0, 0, 0, 261, 262, 5, 107, 0, 0, 262, 267, 3, 24, 12, 0, 263, 264, 5, 99, 0, 0, 264, 266, 3, 24, 12, 0, 265, 263, 1, 0, 0, 0, 266, 269, 1, 0, 0, 0, 267, 265, 1, 0, 0, 0, 267, 268, 1, 0, 0, 0, 268, 270, 1, 0, 0, 0, 269, 267, 1, 0, 0, 0, 270, 271, 5, 108, 0, 0, 271, 23, 1, 0, 0, 0, 272, 273, 5, 14, 0, 0, 273, 276, 3, 126, 63, 0, 274, 275, 5, 97, 0, 0, 275, 277, 5, 4, 0, 0, 276, 274, 1, 0, 0, 0, 276, 277, 1, 0, 0, 0, 277, 292, 1, 0, 0, 0, 278, 279, 5, 3, 0, 0, 279, 289, 3, 126, 63, 0, 280, 281, 5, 5, 0, 0, 281, 286, 3, 26, 13, 0, 282, 283, 5, 109, 0, 0, 283, 285, 3, 26, 13, 0, 284, 282, 1, 0, 0, 0, 285, 288, 1, 0, 0, 0, 286, 284, 1, 0, 0, 0, 286, 287, 1, 0, 0, 0, 287, 290, 1, 0, 0, 0, 288, 286, 1, 0, 0, 0, 289, 280, 1, 0, 0, 0, 289, 290, 1, 0, 0, 0, 290, 292, 1, 0, 0, 0, 291, 272, 1, 0, 0, 0, 291, 278, 1, 0, 0, 0, 292, 25, 1, 0, 0, 0, 293, 295, 3, 126, 63, 0, 294, 296, 3, 28, 14, 0, 295, 294, 1, 0, 0, 0, 295, 296, 1, 0, 0, 0, 296, 27, 1, 0, 0, 0, 297, 298, 5, 107, 0, 0, 298, 303, 3, 30, 15, 0, 299, 300, 5, 99, 0, 0, 300, 302, 3, 30, 15, 0, 301, 299, 1, 0, 0, 0, 302, 305, 1, 0, 0, 0, 303, 301, 1, 0, 0, 0, 303, 304, 1, 0, 0, 0, 304, 306, 1, 0, 0, 0, 305, 303, 1, 0, 0, 0, 306, 307, 5, 108, 0, 0, 307, 29, 1, 0, 0, 0, 308, 309, 5, 10, 0, 0, 309, 316, 3, 126, 63, 0, 310, 311, 5, 11, 0, 0, 311, 316, 3, 26, 13, 0, 312, 313, 5, 3, 0, 0, 313, 316, 3, 126, 63, 0, 314, 316, 3, 110, 55, 0, 315, 308, 1, 0, 0, 0, 315, 310, 1, 0, 0, 0, 315, 312, 1, 0, 0, 0, 315, 314, 1, 0, 0, 0, 316, 31, 1, 0, 0, 0, 317, 318, 5, 2, 0, 0, 318, 320, 3, 126, 63, 0, 319, 321, 3, 22, 11, 0, 320, 319, 1, 0, 0, 0, 320, 321, 1, 0, 0, 0, 321, 322, 1, 0, 0, 0, 322, 323, 5, 110, 0, 0, 323, 324, 3, 110, 55, 0, 324, 325, 5, 98, 0, 0, 325, 33, 1, 0, 0, 0, 326, 330, 3, 38, 19, 0, 327, 330, 3, 42, 21, 0, 328, 330, 3, 36, 18, 0, 329, 326, 1, 0, 0, 0, 329, 327, 1, 0, 0, 0, 329, 328, 1, 0, 0, 0, 330, 35, 1, 0, 0, 0, 331, 332, 5, 16, 0, 0, 332, 333, 3, 126, 63, 0, 333, 334, 5, 48, 0, 0, 334, 335, 3, 128, 64, 0, 335, 336, 5, 97, 0, 0, 336, 337, 3, 110, 55, 0, 337, 338, 5, 96, 0, 0, 338, 339, 3, 110, 55, 0, 339, 340, 5, 101, 0, 0, 340, 341, 5, 65, 0, 0, 341, 342, 5, 48, 0, 0, 342, 343, 3, 128, 64, 0, 343, 344, 5, 98, 0, 0, 344, 345, 5, 102, 0, 0, 345, 37, 1, 0, 0, 0, 346, 347, 5, 14, 0, 0, 347, 348, 3, 126, 63, 0, 348, 349, 5, 48, 0, 0, 349, 350, 3, 128, 64, 0, 350, 351, 5, 97, 0, 0, 351, 352, 3, 110, 55, 0, 352, 356, 5, 101, 0, 0, 353, 355, 3, 40, 20, 0, 354, 353, 1, 0, 0, 0, 355, 358, 1, 0, 0, 0, 356, 354, 1, 0, 0, 0, 356, 357, 1, 0, 0, 0, 357, 359, 1, 0, 0, 0, 358, 356, 1, 0, 0, 0, 359, 360, 5, 102, 0, 0, 360, 39, 1, 0, 0, 0, 361, 362, 5, 55, 0, 0, 362, 363, 5, 48, 0, 0, 363, 364, 3, 128, 64, 0, 364, 365, 5, 98, 0, 0, 365, 381, 1, 0, 0, 0, 366, 367, 5, 56, 0, 0, 367, 368, 5, 48, 0, 0, 368, 369, 3, 128, 64, 0, 369, 370, 5, 98, 0, 0, 370, 381, 1, 0, 0, 0, 371, 372, 5, 57, 0, 0, 372, 373, 5, 58, 0, 0, 373, 374, 5, 48, 0, 0, 374, 375, 3, 128, 64, 0, 375, 376, 5, 59, 0, 0, 376, 377, 5, 48, 0, 0, 377, 378, 3, 128, 64, 0, 378, 379, 5, 98, 0, 0, 379, 381, 1, 0, 0, 0, 380, 361, 1, 0, 0, 0, 380, 366, 1, 0, 0, 0, 380, 371, 1, 0, 0, 0, 381, 41, 1, 0, 0, 0, 382, 383, 5, 15, 0, 0, 383, 384, 3, 126, 63, 0, 384, 385, 5, 48, 0, 0, 385, 386, 3, 128, 64, 0, 386, 387, 5, 97, 0, 0, 387, 388, 3, 116, 58, 0, 388, 390, 3, 46, 23, 0, 389, 391, 5, 76, 0, 0, 390, 389, 1, 0, 0, 0, 390, 391, 1, 0, 0, 0, 391, 392, 1, 0, 0, 0, 392, 396, 5, 101, 0, 0, 393, 395, 3, 44, 22, 0, 394, 393, 1, 0, 0, 0, 395, 398, 1, 0, 0, 0, 396, 394, 1, 0, 0, 0, 396, 397, 1, 0, 0, 0, 397, 399, 1, 0, 0, 0, 398, 396, 1, 0, 0, 0, 399, 400, 5, 102, 0, 0, 400, 43, 1, 0, 0, 0, 401, 402, 5, 62, 0, 0, 402, 403, 5, 48, 0, 0, 403, 404, 3, 128, 64, 0, 404, 405, 5, 98, 0, 0, 405, 426, 1, 0, 0, 0, 406, 407, 5, 63, 0, 0, 407, 408, 5, 48, 0, 0, 408, 409, 3, 128, 64, 0, 409, 410, 5, 98, 0, 0, 410, 426, 1, 0, 0, 0, 411, 412, 5, 64, 0, 0, 412, 413, 5, 48, 0, 0, 413, 414, 3, 128, 64, 0, 414, 415, 5, 98, 0, 0, 415, 426, 1, 0, 0, 0, 416, 417, 5, 57, 0, 0, 417, 418, 5, 58, 0, 0, 418, 419, 5, 48, 0, 0, 419, 420, 3, 128, 64, 0, 420, 421, 5, 59, 0, 0, 421, 422, 5, 48, 0, 0, 422, 423, 3, 128, 64, 0, 423, 424, 5, 98, 0, 0, 424, 426, 1, 0, 0, 0, 425, 401, 1, 0, 0, 0, 425, 406, 1, 0, 0, 0, 425, 411, 1, 0, 0, 0, 425, 416, 1, 0, 0, 0, 426, 45, 1, 0, 0, 0, 427, 428, 5, 10, 0, 0, 428, 437, 3, 126, 63, 0, 429, 430, 5, 11, 0, 0, 430, 432, 3, 126, 63, 0, 431, 433, 3, 28, 14, 0, 432, 431, 1, 0, 0, 0, 432, 433, 1, 0, 0, 0, 433, 437, 1, 0, 0, 0, 434, 435, 5, 3, 0, 0, 435, 437, 3, 126, 63, 0, 436, 427, 1, 0, 0, 0, 436, 429, 1, 0, 0, 0, 436, 434, 1, 0, 0, 0, 437, 47, 1, 0, 0, 0, 438, 440, 3, 16, 8, 0, 439, 438, 1, 0, 0, 0, 440, 443, 1, 0, 0, 0, 441, 439, 1, 0, 0, 0, 441, 442, 1, 0, 0, 0, 442, 444, 1, 0, 0, 0, 443, 441, 1, 0, 0, 0, 444, 445, 5, 13, 0, 0, 445, 446, 3, 126, 63, 0, 446, 447, 5, 48, 0, 0, 447, 448, 3, 128, 64, 0, 448, 449, 5, 42, 0, 0, 449, 452, 3, 128, 64, 0, 450, 451, 5, 43, 0, 0, 451, 453, 5, 111, 0, 0, 452, 450, 1, 0, 0, 0, 452, 453, 1, 0, 0, 0, 453, 454, 1, 0, 0, 0, 454, 458, 5, 101, 0, 0, 455, 457, 3, 50, 25, 0, 456, 455, 1, 0, 0, 0, 457, 460, 1, 0, 0, 0, 458, 456, 1, 0, 0, 0, 458, 459, 1, 0, 0, 0, 459, 461, 1, 0, 0, 0, 460, 458, 1, 0, 0, 0, 461, 462, 5, 102, 0, 0, 462, 49, 1, 0, 0, 0, 463, 467, 3, 52, 26, 0, 464, 467, 3, 54, 27, 0, 465, 467, 3, 56, 28, 0, 466, 463, 1, 0, 0, 0, 466, 464, 1, 0, 0, 0, 466, 465, 1, 0, 0, 0, 467, 51, 1, 0, 0, 0, 468, 469, 5, 16, 0, 0, 469, 471, 3, 126, 63, 0, 470, 472, 3, 22, 11, 0, 471, 470, 1, 0, 0, 0, 471, 472, 1, 0, 0, 0, 472, 473, 1, 0, 0, 0, 473, 474, 5, 48, 0, 0, 474, 475, 3, 128, 64, 0, 475, 476, 5, 97, 0, 0, 476, 477, 3, 110, 55, 0, 477, 478, 5, 96, 0, 0, 478, 479, 3, 110, 55, 0, 479, 480, 5, 50, 0, 0, 480, 482, 3, 60, 30, 0, 481, 483, 3, 58, 29, 0, 482, 481, 1, 0, 0, 0, 482, 483, 1, 0, 0, 0, 483, 484, 1, 0, 0, 0, 484, 485, 5, 52, 0, 0, 485, 487, 3, 62, 31, 0, 486, 488, 3, 66, 33, 0, 487, 486, 1, 0, 0, 0, 487, 488, 1, 0, 0, 0, 488, 489, 1, 0, 0, 0, 489, 490, 5, 98, 0, 0, 490, 53, 1, 0, 0, 0, 491, 492, 5, 17, 0, 0, 492, 494, 3, 126, 63, 0, 493, 495, 3, 22, 11, 0, 494, 493, 1, 0, 0, 0, 494, 495, 1, 0, 0, 0, 495, 496, 1, 0, 0, 0, 496, 497, 5, 48, 0, 0, 497, 498, 3, 128, 64, 0, 498, 499, 5, 97, 0, 0, 499, 500, 3, 110, 55, 0, 500, 501, 5, 96, 0, 0, 501, 503, 3, 110, 55, 0, 502, 504, 3, 66, 33, 0, 503, 502, 1, 0, 0, 0, 503, 504, 1, 0, 0, 0, 504, 505, 1, 0, 0, 0, 505, 506, 5, 98, 0, 0, 506, 55, 1, 0, 0, 0, 507, 508, 5, 18, 0, 0, 508, 509, 3, 126, 63, 0, 509, 510, 5, 48, 0, 0, 510, 511, 3, 128, 64, 0, 511, 512, 5, 19, 0, 0, 512, 513, 3, 126, 63, 0, 513, 514, 5, 97, 0, 0, 514, 516, 3, 110, 55, 0, 515, 517, 3, 66, 33, 0, 516, 515, 1, 0, 0, 0, 516, 517, 1, 0, 0, 0, 517, 518, 1, 0, 0, 0, 518, 519, 5, 98, 0, 0, 519, 57, 1, 0, 0, 0, 520, 521, 5, 51, 0, 0, 521, 522, 3, 110, 55, 0, 522, 59, 1, 0, 0, 0, 523, 524, 7, 0, 0, 0, 524, 61, 1, 0, 0, 0, 525, 544, 5, 54, 0, 0, 526, 527, 5, 10, 0, 0, 527, 544, 3, 126, 63, 0, 528, 529, 5, 3, 0, 0, 529, 544, 3, 126, 63, 0, 530, 531, 5, 12, 0, 0, 531, 540, 5, 103, 0, 0, 532, 537, 3, 26, 13, 0, 533, 534, 5, 99, 0, 0, 534, 536, 3, 26, 13, 0, 535, 533, 1, 0, 0, 0, 536, 539, 1, 0, 0, 0, 537, 535, 1, 0, 0, 0, 537, 538, 1, 0, 0, 0, 538, 541, 1, 0, 0, 0, 539, 537, 1, 0, 0, 0, 540, 532, 1, 0, 0, 0, 540, 541, 1, 0, 0, 0, 541, 542, 1, 0, 0, 0, 542, 544, 5, 104, 0, 0, 543, 525, 1, 0, 0, 0, 543, 526, 1, 0, 0, 0, 543, 528, 1, 0, 0, 0, 543, 530, 1, 0, 0, 0, 544, 63, 1, 0, 0, 0, 545, 550, 3, 126, 63, 0, 546, 547, 5, 99, 0, 0, 547, 549, 3, 126, 63, 0, 548, 546, 1, 0, 0, 0, 549, 552, 1, 0, 0, 0, 550, 548, 1, 0, 0, 0, 550, 551, 1, 0, 0, 0, 551, 65, 1, 0, 0, 0, 552, 550, 1, 0, 0, 0, 553, 554, 5, 53, 0, 0, 554, 558, 5, 101, 0, 0, 555, 557, 3, 68, 34, 0, 556, 555, 1, 0, 0, 0, 557, 560, 1, 0, 0, 0, 558, 556, 1, 0, 0, 0, 558, 559, 1, 0, 0, 0, 559, 561, 1, 0, 0, 0, 560, 558, 1, 0, 0, 0, 561, 562, 5, 102, 0, 0, 562, 67, 1, 0, 0, 0, 563, 564, 5, 27, 0, 0, 564, 565, 3, 126, 63, 0, 565, 566, 5, 48, 0, 0, 566, 567, 3, 128, 64, 0, 567, 568, 5, 97, 0, 0, 568, 569, 3, 110, 55, 0, 569, 570, 3, 70, 35, 0, 570, 571, 5, 98, 0, 0, 571, 606, 1, 0, 0, 0, 572, 573, 5, 28, 0, 0, 573, 574, 3, 126, 63, 0, 574, 575, 5, 48, 0, 0, 575, 576, 3, 128, 64, 0, 576, 577, 5, 97, 0, 0, 577, 578, 3, 116, 58, 0, 578, 579, 3, 46, 23, 0, 579, 580, 3, 70, 35, 0, 580, 581, 5, 98, 0, 0, 581, 606, 1, 0, 0, 0, 582, 583, 5, 11, 0, 0, 583, 584, 3, 126, 63, 0, 584, 585, 5, 48, 0, 0, 585, 586, 3, 128, 64, 0, 586, 587, 5, 97, 0, 0, 587, 589, 3, 126, 63, 0, 588, 590, 3, 28, 14, 0, 589, 588, 1, 0, 0, 0, 589, 590, 1, 0, 0, 0, 590, 591, 1, 0, 0, 0, 591, 592, 5, 98, 0, 0, 592, 606, 1, 0, 0, 0, 593, 594, 5, 18, 0, 0, 594, 595, 3, 126, 63, 0, 595, 596, 5, 48, 0, 0, 596, 597, 3, 128, 64, 0, 597, 598, 5, 97, 0, 0, 598, 601, 3, 126, 63, 0, 599, 600, 5, 20, 0, 0, 600, 602, 3, 110, 55, 0, 601, 599, 1, 0, 0, 0, 601, 602, 1, 0, 0, 0, 602, 603, 1, 0, 0, 0, 603, 604, 5, 98, 0, 0, 604, 606, 1, 0, 0, 0, 605, 563, 1, 0, 0, 0, 605, 572, 1, 0, 0, 0, 605, 582, 1, 0, 0, 0, 605, 593, 1, 0, 0, 0, 606, 69, 1, 0, 0, 0, 607, 608, 5, 103, 0, 0, 608, 613, 3, 72, 36, 0, 609, 610, 5, 99, 0, 0, 610, 612, 3, 72, 36, 0, 611, 609, 1, 0, 0, 0, 612, 615, 1, 0, 0, 0, 613, 611, 1, 0, 0, 0, 613, 614, 1, 0, 0, 0, 614, 616, 1, 0, 0, 0, 615, 613, 1, 0, 0, 0, 616, 617, 5, 104, 0, 0, 617, 71, 1, 0, 0, 0, 618, 619, 7, 1, 0, 0, 619, 73, 1, 0, 0, 0, 620, 621, 5, 26, 0, 0, 621, 622, 3, 76, 38, 0, 622, 75, 1, 0, 0, 0, 623, 626, 3, 78, 39, 0, 624, 626, 3, 82, 41, 0, 625, 623, 1, 0, 0, 0, 625, 624, 1, 0, 0, 0, 626, 77, 1, 0, 0, 0, 627, 628, 5, 27, 0, 0, 628, 629, 3, 126, 63, 0, 629, 630, 5, 48, 0, 0, 630, 631, 3, 128, 64, 0, 631, 632, 5, 36, 0, 0, 632, 633, 3, 126, 63, 0, 633, 634, 5, 97, 0, 0, 634, 635, 3, 110, 55, 0, 635, 636, 5, 37, 0, 0, 636, 639, 3, 80, 40, 0, 637, 638, 5, 38, 0, 0, 638, 640, 3, 118, 59, 0, 639, 637, 1, 0, 0, 0, 639, 640, 1, 0, 0, 0, 640, 641, 1, 0, 0, 0, 641, 642, 5, 98, 0, 0, 642, 79, 1, 0, 0, 0, 643, 650, 5, 70, 0, 0, 644, 645, 5, 71, 0, 0, 645, 646, 5, 105, 0, 0, 646, 647, 3, 110, 55, 0, 647, 648, 5, 106, 0, 0, 648, 650, 1, 0, 0, 0, 649, 643, 1, 0, 0, 0, 649, 644, 1, 0, 0, 0, 650, 81, 1, 0, 0, 0, 651, 652, 5, 28, 0, 0, 652, 653, 3, 126, 63, 0, 653, 654, 5, 48, 0, 0, 654, 655, 3, 128, 64, 0, 655, 656, 5, 101, 0, 0, 656, 657, 3, 84, 42, 0, 657, 658, 3, 84, 42, 0, 658, 659, 5, 102, 0, 0, 659, 83, 1, 0, 0, 0, 660, 661, 3, 46, 23, 0, 661, 662, 5, 29, 0, 0, 662, 663, 3, 126, 63, 0, 663, 664, 5, 48, 0, 0, 664, 665, 3, 128, 64, 0, 665, 667, 3, 116, 58, 0, 666, 668, 5, 76, 0, 0, 667, 666, 1, 0, 0, 0, 667, 668, 1, 0, 0, 0, 668, 671, 1, 0, 0, 0, 669, 670, 5, 44, 0, 0, 670, 672, 3, 128, 64, 0, 671, 669, 1, 0, 0, 0, 671, 672, 1, 0, 0, 0, 672, 674, 1, 0, 0, 0, 673, 675, 5, 45, 0, 0, 674, 673, 1, 0, 0, 0, 674, 675, 1, 0, 0, 0, 675, 678, 1, 0, 0, 0, 676, 677, 5, 46, 0, 0, 677, 679, 3, 128, 64, 0, 678, 676, 1, 0, 0, 0, 678, 679, 1, 0, 0, 0, 679, 681, 1, 0, 0, 0, 680, 682, 5, 47, 0, 0, 681, 680, 1, 0, 0, 0, 681, 682, 1, 0, 0, 0, 682, 683, 1, 0, 0, 0, 683, 684, 5, 98, 0, 0, 684, 85, 1, 0, 0, 0, 685, 686, 5, 21, 0, 0, 686, 687, 3, 126, 63, 0, 687, 688, 5, 22, 0, 0, 688, 690, 3, 126, 63, 0, 689, 691, 3, 28, 14, 0, 690, 689, 1, 0, 0, 0, 690, 691, 1, 0, 0, 0, 691, 694, 1, 0, 0, 0, 692, 693, 5, 48, 0, 0, 693, 695, 3, 128, 64, 0, 694, 692, 1, 0, 0, 0, 694, 695, 1, 0, 0, 0, 695, 698, 1, 0, 0, 0, 696, 697, 5, 43, 0, 0, 697, 699, 5, 111, 0, 0, 698, 696, 1, 0, 0, 0, 698, 699, 1, 0, 0, 0, 699, 700, 1, 0, 0, 0, 700, 704, 5, 101, 0, 0, 701, 703, 3, 88, 44, 0, 702, 701, 1, 0, 0, 0, 703, 706, 1, 0, 0, 0, 704, 702, 1, 0, 0, 0, 704, 705, 1, 0, 0, 0, 705, 707, 1, 0, 0, 0, 706, 704, 1, 0, 0, 0, 707, 708, 5, 102, 0, 0, 708, 87, 1, 0, 0, 0, 709, 710, 5, 25, 0, 0, 710, 714, 3, 76, 38, 0, 711, 714, 3, 92, 46, 0, 712, 714, 3, 90, 45, 0, 713, 709, 1, 0, 0, 0, 713, 711, 1, 0, 0, 0, 713, 712, 1, 0, 0, 0, 714, 89, 1, 0, 0, 0, 715, 716, 5, 33, 0, 0, 716, 717, 3, 126, 63, 0, 717, 718, 5, 34, 0, 0, 718, 719, 5, 35, 0, 0, 719, 720, 5, 31, 0, 0, 720, 721, 5, 18, 0, 0, 721, 722, 3, 126, 63, 0, 722, 723, 5, 32, 0, 0, 723, 724, 5, 28, 0, 0, 724, 725, 3, 126, 63, 0, 725, 726, 5, 100, 0, 0, 726, 727, 3, 126, 63, 0, 727, 728, 5, 98, 0, 0, 728, 91, 1, 0, 0, 0, 729, 730, 5, 23, 0, 0, 730, 731, 3, 94, 47, 0, 731, 732, 5, 24, 0, 0, 732, 733, 3, 98, 49, 0, 733, 734, 5, 98, 0, 0, 734, 93, 1, 0, 0, 0, 735, 736, 3, 126, 63, 0, 736, 737, 5, 100, 0, 0, 737, 738, 3, 96, 48, 0, 738, 95, 1, 0, 0, 0, 739, 751, 3, 126, 63, 0, 740, 751, 5, 65, 0, 0, 741, 751, 5, 55, 0, 0, 742, 751, 5, 56, 0, 0, 743, 751, 5, 62, 0, 0, 744, 751, 5, 63, 0, 0, 745, 751, 5, 64, 0, 0, 746, 751, 5, 66, 0, 0, 747, 751, 5, 67, 0, 0, 748, 751, 5, 68, 0, 0, 749, 751, 5, 69, 0, 0, 750, 739, 1, 0, 0, 0, 750, 740, 1, 0, 0, 0, 750, 741, 1, 0, 0, 0, 750, 742, 1, 0, 0, 0, 750, 743, 1, 0, 0, 0, 750, 744, 1, 0, 0, 0, 750, 745, 1, 0, 0, 0, 750, 746, 1, 0, 0, 0, 750, 747, 1, 0, 0, 0, 750, 748, 1, 0, 0, 0, 750, 749, 1, 0, 0, 0, 751, 97, 1, 0, 0, 0, 752, 753, 5, 27, 0, 0, 753, 754, 3, 126, 63, 0, 754, 755, 5, 100, 0, 0, 755, 756, 3, 100, 50, 0, 756, 775, 1, 0, 0, 0, 757, 758, 5, 28, 0, 0, 758, 759, 3, 126, 63, 0, 759, 760, 5, 100, 0, 0, 760, 761, 3, 126, 63, 0, 761, 762, 5, 100, 0, 0, 762, 763, 3, 102, 51, 0, 763, 775, 1, 0, 0, 0, 764, 765, 5, 13, 0, 0, 765, 766, 3, 126, 63, 0, 766, 767, 5, 100, 0, 0, 767, 769, 3, 126, 63, 0, 768, 770, 3, 28, 14, 0, 769, 768, 1, 0, 0, 0, 769, 770, 1, 0, 0, 0, 770, 772, 1, 0, 0, 0, 771, 773, 3, 104, 52, 0, 772, 771, 1, 0, 0, 0, 772, 773, 1, 0, 0, 0, 773, 775, 1, 0, 0, 0, 774, 752, 1, 0, 0, 0, 774, 757, 1, 0, 0, 0, 774, 764, 1, 0, 0, 0, 775, 99, 1, 0, 0, 0, 776, 777, 7, 2, 0, 0, 777, 101, 1, 0, 0, 0, 778, 779, 7, 3, 0, 0, 779, 103, 1, 0, 0, 0, 780, 781, 5, 30, 0, 0, 781, 785, 5, 101, 0, 0, 782, 784, 3, 106, 53, 0, 783, 782, 1, 0, 0, 0, 784, 787, 1, 0, 0, 0, 785, 783, 1, 0, 0, 0, 785, 786, 1, 0, 0, 0, 786, 788, 1, 0, 0, 0, 787, 785, 1, 0, 0, 0, 788, 789, 5, 102, 0, 0, 789, 105, 1, 0, 0, 0, 790, 791, 3, 126, 63, 0, 791, 792, 5, 24, 0, 0, 792, 793, 5, 27, 0, 0, 793, 800, 3, 126, 63, 0, 794, 795, 5, 32, 0, 0, 795, 796, 5, 28, 0, 0, 796, 797, 3, 126, 63, 0, 797, 798, 5, 100, 0, 0, 798, 799, 3, 126, 63, 0, 799, 801, 1, 0, 0, 0, 800, 794, 1, 0, 0, 0, 800, 801, 1, 0, 0, 0, 801, 802, 1, 0, 0, 0, 802, 803, 5, 98, 0, 0, 803, 844, 1, 0, 0, 0, 804, 805, 3, 126, 63, 0, 805, 806, 5, 24, 0, 0, 806, 807, 5, 28, 0, 0, 807, 808, 3, 126, 63, 0, 808, 809, 5, 100, 0, 0, 809, 816, 3, 126, 63, 0, 810, 811, 5, 32, 0, 0, 811, 812, 5, 28, 0, 0, 812, 813, 3, 126, 63, 0, 813, 814, 5, 100, 0, 0, 814, 815, 3, 126, 63, 0, 815, 817, 1, 0, 0, 0, 816, 810, 1, 0, 0, 0, 816, 817, 1, 0, 0, 0, 817, 818, 1, 0, 0, 0, 818, 819, 5, 98, 0, 0, 819, 844, 1, 0, 0, 0, 820, 821, 3, 126, 63, 0, 821, 822, 5, 24, 0, 0, 822, 823, 5, 11, 0, 0, 823, 825, 3, 126, 63, 0, 824, 826, 3, 28, 14, 0, 825, 824, 1, 0, 0, 0, 825, 826, 1, 0, 0, 0, 826, 833, 1, 0, 0, 0, 827, 828, 5, 32, 0, 0, 828, 829, 5, 28, 0, 0, 829, 830, 3, 126, 63, 0, 830, 831, 5, 100, 0, 0, 831, 832, 3, 126, 63, 0, 832, 834, 1, 0, 0, 0, 833, 827, 1, 0, 0, 0, 833, 834, 1, 0, 0, 0, 834, 835, 1, 0, 0, 0, 835, 836, 5, 98, 0, 0, 836, 844, 1, 0, 0, 0, 837, 838, 3, 126, 63, 0, 838, 839, 5, 24, 0, 0, 839, 840, 5, 18, 0, 0, 840, 841, 3, 126, 63, 0, 841, 842, 5, 98, 0, 0, 842, 844, 1, 0, 0, 0, 843, 790, 1, 0, 0, 0, 843, 804, 1, 0, 0, 0, 843, 820, 1, 0, 0, 0, 843, 837, 1, 0, 0, 0, 844, 107, 1, 0, 0, 0, 845, 846, 5, 18, 0, 0, 846, 847, 3, 126, 63, 0, 847, 848, 5, 24, 0, 0, 848, 849, 3, 126, 63, 0, 849, 850, 5, 100, 0, 0, 850, 852, 3, 126, 63, 0, 851, 853, 3, 104, 52, 0, 852, 851, 1, 0, 0, 0, 852, 853, 1, 0, 0, 0, 853, 854, 1, 0, 0, 0, 854, 855, 5, 98, 0, 0, 855, 109, 1, 0, 0, 0, 856, 903, 3, 114, 57, 0, 857, 903, 5, 77, 0, 0, 858, 903, 5, 78, 0, 0, 859, 860, 5, 79, 0, 0, 860, 903, 3, 128, 64, 0, 861, 862, 5, 80, 0, 0, 862, 863, 5, 107, 0, 0, 863, 864, 3, 126, 63, 0, 864, 865, 5, 108, 0, 0, 865, 903, 1, 0, 0, 0, 866, 867, 5, 81, 0, 0, 867, 868, 5, 107, 0, 0, 868, 870, 3, 126, 63, 0, 869, 871, 3, 28, 14, 0, 870, 869, 1, 0, 0, 0, 870, 871, 1, 0, 0, 0, 871, 872, 1, 0, 0, 0, 872, 873, 5, 108, 0, 0, 873, 903, 1, 0, 0, 0, 874, 875, 5, 6, 0, 0, 875, 876, 5, 107, 0, 0, 876, 877, 3, 126, 63, 0, 877, 878, 5, 108, 0, 0, 878, 903, 1, 0, 0, 0, 879, 880, 5, 82, 0, 0, 880, 881, 5, 107, 0, 0, 881, 882, 3, 110, 55, 0, 882, 883, 5, 108, 0, 0, 883, 903, 1, 0, 0, 0, 884, 885, 5, 83, 0, 0, 885, 886, 5, 107, 0, 0, 886, 887, 3, 110, 55, 0, 887, 888, 5, 108, 0, 0, 888, 903, 1, 0, 0, 0, 889, 890, 5, 84, 0, 0, 890, 894, 5, 101, 0, 0, 891, 893, 3, 112, 56, 0, 892, 891, 1, 0, 0, 0, 893, 896, 1, 0, 0, 0, 894, 892, 1, 0, 0, 0, 894, 895, 1, 0, 0, 0, 895, 897, 1, 0, 0, 0, 896, 894, 1, 0, 0, 0, 897, 903, 5, 102, 0, 0, 898, 900, 3, 126, 63, 0, 899, 901, 3, 28, 14, 0, 900, 899, 1, 0, 0, 0, 900, 901, 1, 0, 0, 0, 901, 903, 1, 0, 0, 0, 902, 856, 1, 0, 0, 0, 902, 857, 1, 0, 0, 0, 902, 858, 1, 0, 0, 0, 902, 859, 1, 0, 0, 0, 902, 861, 1, 0, 0, 0, 902, 866, 1, 0, 0, 0, 902, 874, 1, 0, 0, 0, 902, 879, 1, 0, 0, 0, 902, 884, 1, 0, 0, 0, 902, 889, 1, 0, 0, 0, 902, 898, 1, 0, 0, 0, 903, 111, 1, 0, 0, 0, 904, 905, 3, 126, 63, 0, 905, 906, 5, 97, 0, 0, 906, 907, 3, 110, 55, 0, 907, 908, 5, 98, 0, 0, 908, 113, 1, 0, 0, 0, 909, 910, 7, 4, 0, 0, 910, 115, 1, 0, 0, 0, 911, 912, 7, 5, 0, 0, 912, 117, 1, 0, 0, 0, 913, 922, 3, 128, 64, 0, 914, 922, 5, 111, 0, 0, 915, 922, 5, 112, 0, 0, 916, 922, 5, 93, 0, 0, 917, 922, 5, 94, 0, 0, 918, 922, 5, 95, 0, 0, 919, 922, 3, 120, 60, 0, 920, 922, 3, 124, 62, 0, 921, 913, 1, 0, 0, 0, 921, 914, 1, 0, 0, 0, 921, 915, 1, 0, 0, 0, 921, 916, 1, 0, 0, 0, 921, 917, 1, 0, 0, 0, 921, 918, 1, 0, 0, 0, 921, 919, 1, 0, 0, 0, 921, 920, 1, 0, 0, 0, 922, 119, 1, 0, 0, 0, 923, 932, 5, 101, 0, 0, 924, 929, 3, 122, 61, 0, 925, 926, 5, 99, 0, 0, 926, 928, 3, 122, 61, 0, 927, 925, 1, 0, 0, 0, 928, 931, 1, 0, 0, 0, 929, 927, 1, 0, 0, 0, 929, 930, 1, 0, 0, 0, 930, 933, 1, 0, 0, 0, 931, 929, 1, 0, 0, 0, 932, 924, 1, 0, 0, 0, 932, 933, 1, 0, 0, 0, 933, 934, 1, 0, 0, 0, 934, 935, 5, 102, 0, 0, 935, 121, 1, 0, 0, 0, 936, 937, 3, 128, 64, 0, 937, 938, 5, 97, 0, 0, 938, 939, 3, 118, 59, 0, 939, 123, 1, 0, 0, 0, 940, 949, 5, 103, 0, 0, 941, 946, 3, 118, 59, 0, 942, 943, 5, 99, 0, 0, 943, 945, 3, 118, 59, 0, 944, 942, 1, 0, 0, 0, 945, 948, 1, 0, 0, 0, 946, 944, 1, 0, 0, 0, 946, 947, 1, 0, 0, 0, 947, 950, 1, 0, 0, 0, 948, 946, 1, 0, 0, 0, 949, 941, 1, 0, 0, 0, 949, 950, 1, 0, 0, 0, 950, 951, 1, 0, 0, 0, 951, 952, 5, 104, 0, 0, 952, 125, 1, 0, 0, 0, 953, 954, 7, 6, 0, 0, 954, 127, 1, 0, 0, 0, 955, 956, 5, 114, 0, 0, 956, 129, 1, 0, 0, 0, 81, 142, 149, 170, 182, 194, 214, 222, 229, 235, 247, 250, 256, 267, 276, 286, 289, 291, 295, 303, 315, 320, 329, 356, 380, 390, 396, 425, 432, 436, 441, 452, 458, 466, 471, 482, 487, 494, 503, 516, 537, 540, 543, 550, 558, 589, 601, 605, 613, 625, 639, 649, 667, 671, 674, 678, 681, 690, 694, 698, 704, 713, 750, 769, 772, 774, 785, 800, 816, 825, 833, 843, 852, 870, 894, 900, 902, 921, 929, 932, 946, 949] \ No newline at end of file +[4, 1, 118, 971, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, 145, 8, 0, 1, 1, 1, 1, 1, 1, 5, 1, 150, 8, 1, 10, 1, 12, 1, 153, 9, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 171, 8, 3, 10, 3, 12, 3, 174, 9, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 185, 8, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 197, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 217, 8, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 225, 8, 9, 1, 9, 1, 9, 1, 10, 5, 10, 230, 8, 10, 10, 10, 12, 10, 233, 9, 10, 1, 10, 1, 10, 1, 10, 3, 10, 238, 8, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 5, 10, 248, 8, 10, 10, 10, 12, 10, 251, 9, 10, 3, 10, 253, 8, 10, 1, 10, 1, 10, 5, 10, 257, 8, 10, 10, 10, 12, 10, 260, 9, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 5, 11, 268, 8, 11, 10, 11, 12, 11, 271, 9, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 279, 8, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 5, 12, 287, 8, 12, 10, 12, 12, 12, 290, 9, 12, 3, 12, 292, 8, 12, 3, 12, 294, 8, 12, 1, 13, 1, 13, 3, 13, 298, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 5, 14, 304, 8, 14, 10, 14, 12, 14, 307, 9, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 318, 8, 15, 1, 16, 1, 16, 1, 16, 3, 16, 323, 8, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 3, 17, 332, 8, 17, 1, 18, 3, 18, 335, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 5, 19, 360, 8, 19, 10, 19, 12, 19, 363, 9, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 386, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 396, 8, 21, 1, 21, 1, 21, 5, 21, 400, 8, 21, 10, 21, 12, 21, 403, 9, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 431, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 438, 8, 23, 1, 23, 1, 23, 3, 23, 442, 8, 23, 1, 24, 5, 24, 445, 8, 24, 10, 24, 12, 24, 448, 9, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 3, 24, 458, 8, 24, 1, 24, 1, 24, 5, 24, 462, 8, 24, 10, 24, 12, 24, 465, 9, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 3, 25, 472, 8, 25, 1, 26, 1, 26, 1, 26, 3, 26, 477, 8, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 488, 8, 26, 1, 26, 1, 26, 1, 26, 3, 26, 493, 8, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 3, 27, 500, 8, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 509, 8, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 522, 8, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 5, 31, 541, 8, 31, 10, 31, 12, 31, 544, 9, 31, 3, 31, 546, 8, 31, 1, 31, 3, 31, 549, 8, 31, 1, 32, 1, 32, 1, 32, 5, 32, 554, 8, 32, 10, 32, 12, 32, 557, 9, 32, 1, 33, 1, 33, 1, 33, 5, 33, 562, 8, 33, 10, 33, 12, 33, 565, 9, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 595, 8, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 607, 8, 34, 1, 34, 1, 34, 3, 34, 611, 8, 34, 1, 35, 1, 35, 1, 35, 1, 35, 5, 35, 617, 8, 35, 10, 35, 12, 35, 620, 9, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 3, 38, 631, 8, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 3, 39, 645, 8, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 3, 40, 655, 8, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 3, 42, 673, 8, 42, 1, 42, 1, 42, 3, 42, 677, 8, 42, 1, 42, 3, 42, 680, 8, 42, 1, 42, 1, 42, 3, 42, 684, 8, 42, 1, 42, 3, 42, 687, 8, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 3, 43, 696, 8, 43, 1, 43, 1, 43, 3, 43, 700, 8, 43, 1, 43, 1, 43, 3, 43, 704, 8, 43, 1, 43, 1, 43, 5, 43, 708, 8, 43, 10, 43, 12, 43, 711, 9, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 3, 44, 720, 8, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 3, 49, 764, 8, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 783, 8, 50, 1, 50, 3, 50, 786, 8, 50, 3, 50, 788, 8, 50, 1, 51, 1, 51, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 5, 53, 797, 8, 53, 10, 53, 12, 53, 800, 9, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 3, 54, 814, 8, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 3, 54, 830, 8, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 3, 54, 839, 8, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 3, 54, 847, 8, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 3, 54, 857, 8, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 3, 55, 866, 8, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 3, 56, 884, 8, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 5, 56, 906, 8, 56, 10, 56, 12, 56, 909, 9, 56, 1, 56, 1, 56, 1, 56, 3, 56, 914, 8, 56, 3, 56, 916, 8, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 3, 60, 935, 8, 60, 1, 61, 1, 61, 1, 61, 1, 61, 5, 61, 941, 8, 61, 10, 61, 12, 61, 944, 9, 61, 3, 61, 946, 8, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 5, 63, 958, 8, 63, 10, 63, 12, 63, 961, 9, 63, 3, 63, 963, 8, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 0, 0, 66, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 0, 7, 1, 0, 66, 70, 2, 0, 61, 65, 67, 68, 2, 0, 61, 62, 67, 68, 2, 0, 63, 65, 67, 68, 1, 0, 86, 93, 1, 0, 73, 76, 2, 0, 40, 40, 114, 114, 1036, 0, 144, 1, 0, 0, 0, 2, 146, 1, 0, 0, 0, 4, 156, 1, 0, 0, 0, 6, 160, 1, 0, 0, 0, 8, 184, 1, 0, 0, 0, 10, 196, 1, 0, 0, 0, 12, 198, 1, 0, 0, 0, 14, 205, 1, 0, 0, 0, 16, 216, 1, 0, 0, 0, 18, 218, 1, 0, 0, 0, 20, 231, 1, 0, 0, 0, 22, 263, 1, 0, 0, 0, 24, 293, 1, 0, 0, 0, 26, 295, 1, 0, 0, 0, 28, 299, 1, 0, 0, 0, 30, 317, 1, 0, 0, 0, 32, 319, 1, 0, 0, 0, 34, 331, 1, 0, 0, 0, 36, 334, 1, 0, 0, 0, 38, 351, 1, 0, 0, 0, 40, 385, 1, 0, 0, 0, 42, 387, 1, 0, 0, 0, 44, 430, 1, 0, 0, 0, 46, 441, 1, 0, 0, 0, 48, 446, 1, 0, 0, 0, 50, 471, 1, 0, 0, 0, 52, 473, 1, 0, 0, 0, 54, 496, 1, 0, 0, 0, 56, 512, 1, 0, 0, 0, 58, 525, 1, 0, 0, 0, 60, 528, 1, 0, 0, 0, 62, 548, 1, 0, 0, 0, 64, 550, 1, 0, 0, 0, 66, 558, 1, 0, 0, 0, 68, 610, 1, 0, 0, 0, 70, 612, 1, 0, 0, 0, 72, 623, 1, 0, 0, 0, 74, 625, 1, 0, 0, 0, 76, 630, 1, 0, 0, 0, 78, 632, 1, 0, 0, 0, 80, 654, 1, 0, 0, 0, 82, 656, 1, 0, 0, 0, 84, 665, 1, 0, 0, 0, 86, 690, 1, 0, 0, 0, 88, 719, 1, 0, 0, 0, 90, 721, 1, 0, 0, 0, 92, 728, 1, 0, 0, 0, 94, 742, 1, 0, 0, 0, 96, 748, 1, 0, 0, 0, 98, 763, 1, 0, 0, 0, 100, 787, 1, 0, 0, 0, 102, 789, 1, 0, 0, 0, 104, 791, 1, 0, 0, 0, 106, 793, 1, 0, 0, 0, 108, 856, 1, 0, 0, 0, 110, 858, 1, 0, 0, 0, 112, 915, 1, 0, 0, 0, 114, 917, 1, 0, 0, 0, 116, 922, 1, 0, 0, 0, 118, 924, 1, 0, 0, 0, 120, 934, 1, 0, 0, 0, 122, 936, 1, 0, 0, 0, 124, 949, 1, 0, 0, 0, 126, 953, 1, 0, 0, 0, 128, 966, 1, 0, 0, 0, 130, 968, 1, 0, 0, 0, 132, 133, 3, 6, 3, 0, 133, 134, 5, 0, 0, 1, 134, 145, 1, 0, 0, 0, 135, 136, 3, 20, 10, 0, 136, 137, 5, 0, 0, 1, 137, 145, 1, 0, 0, 0, 138, 139, 3, 48, 24, 0, 139, 140, 5, 0, 0, 1, 140, 145, 1, 0, 0, 0, 141, 142, 3, 2, 1, 0, 142, 143, 5, 0, 0, 1, 143, 145, 1, 0, 0, 0, 144, 132, 1, 0, 0, 0, 144, 135, 1, 0, 0, 0, 144, 138, 1, 0, 0, 0, 144, 141, 1, 0, 0, 0, 145, 1, 1, 0, 0, 0, 146, 147, 5, 7, 0, 0, 147, 151, 5, 102, 0, 0, 148, 150, 3, 8, 4, 0, 149, 148, 1, 0, 0, 0, 150, 153, 1, 0, 0, 0, 151, 149, 1, 0, 0, 0, 151, 152, 1, 0, 0, 0, 152, 154, 1, 0, 0, 0, 153, 151, 1, 0, 0, 0, 154, 155, 5, 103, 0, 0, 155, 3, 1, 0, 0, 0, 156, 157, 5, 8, 0, 0, 157, 158, 3, 130, 65, 0, 158, 159, 5, 99, 0, 0, 159, 5, 1, 0, 0, 0, 160, 161, 5, 1, 0, 0, 161, 162, 3, 128, 64, 0, 162, 163, 5, 49, 0, 0, 163, 164, 3, 130, 65, 0, 164, 165, 5, 43, 0, 0, 165, 166, 3, 130, 65, 0, 166, 167, 5, 42, 0, 0, 167, 168, 3, 130, 65, 0, 168, 172, 5, 102, 0, 0, 169, 171, 3, 8, 4, 0, 170, 169, 1, 0, 0, 0, 171, 174, 1, 0, 0, 0, 172, 170, 1, 0, 0, 0, 172, 173, 1, 0, 0, 0, 173, 175, 1, 0, 0, 0, 174, 172, 1, 0, 0, 0, 175, 176, 5, 103, 0, 0, 176, 7, 1, 0, 0, 0, 177, 185, 3, 4, 2, 0, 178, 185, 3, 18, 9, 0, 179, 185, 3, 10, 5, 0, 180, 185, 3, 74, 37, 0, 181, 185, 3, 86, 43, 0, 182, 185, 3, 110, 55, 0, 183, 185, 3, 32, 16, 0, 184, 177, 1, 0, 0, 0, 184, 178, 1, 0, 0, 0, 184, 179, 1, 0, 0, 0, 184, 180, 1, 0, 0, 0, 184, 181, 1, 0, 0, 0, 184, 182, 1, 0, 0, 0, 184, 183, 1, 0, 0, 0, 185, 9, 1, 0, 0, 0, 186, 187, 5, 8, 0, 0, 187, 188, 5, 11, 0, 0, 188, 189, 3, 128, 64, 0, 189, 190, 5, 99, 0, 0, 190, 197, 1, 0, 0, 0, 191, 192, 5, 8, 0, 0, 192, 193, 5, 13, 0, 0, 193, 194, 3, 128, 64, 0, 194, 195, 5, 99, 0, 0, 195, 197, 1, 0, 0, 0, 196, 186, 1, 0, 0, 0, 196, 191, 1, 0, 0, 0, 197, 11, 1, 0, 0, 0, 198, 199, 5, 9, 0, 0, 199, 200, 5, 10, 0, 0, 200, 201, 3, 128, 64, 0, 201, 202, 5, 49, 0, 0, 202, 203, 3, 130, 65, 0, 203, 204, 5, 99, 0, 0, 204, 13, 1, 0, 0, 0, 205, 206, 5, 9, 0, 0, 206, 207, 5, 11, 0, 0, 207, 208, 3, 128, 64, 0, 208, 209, 5, 43, 0, 0, 209, 210, 3, 130, 65, 0, 210, 211, 5, 99, 0, 0, 211, 15, 1, 0, 0, 0, 212, 217, 3, 10, 5, 0, 213, 217, 3, 12, 6, 0, 214, 217, 3, 14, 7, 0, 215, 217, 3, 32, 16, 0, 216, 212, 1, 0, 0, 0, 216, 213, 1, 0, 0, 0, 216, 214, 1, 0, 0, 0, 216, 215, 1, 0, 0, 0, 217, 17, 1, 0, 0, 0, 218, 219, 5, 10, 0, 0, 219, 220, 3, 128, 64, 0, 220, 221, 5, 49, 0, 0, 221, 224, 3, 130, 65, 0, 222, 223, 5, 50, 0, 0, 223, 225, 3, 130, 65, 0, 224, 222, 1, 0, 0, 0, 224, 225, 1, 0, 0, 0, 225, 226, 1, 0, 0, 0, 226, 227, 5, 99, 0, 0, 227, 19, 1, 0, 0, 0, 228, 230, 3, 16, 8, 0, 229, 228, 1, 0, 0, 0, 230, 233, 1, 0, 0, 0, 231, 229, 1, 0, 0, 0, 231, 232, 1, 0, 0, 0, 232, 234, 1, 0, 0, 0, 233, 231, 1, 0, 0, 0, 234, 235, 5, 11, 0, 0, 235, 237, 3, 128, 64, 0, 236, 238, 3, 22, 11, 0, 237, 236, 1, 0, 0, 0, 237, 238, 1, 0, 0, 0, 238, 239, 1, 0, 0, 0, 239, 240, 5, 49, 0, 0, 240, 241, 3, 130, 65, 0, 241, 242, 5, 43, 0, 0, 242, 252, 3, 130, 65, 0, 243, 244, 5, 54, 0, 0, 244, 249, 3, 26, 13, 0, 245, 246, 5, 100, 0, 0, 246, 248, 3, 26, 13, 0, 247, 245, 1, 0, 0, 0, 248, 251, 1, 0, 0, 0, 249, 247, 1, 0, 0, 0, 249, 250, 1, 0, 0, 0, 250, 253, 1, 0, 0, 0, 251, 249, 1, 0, 0, 0, 252, 243, 1, 0, 0, 0, 252, 253, 1, 0, 0, 0, 253, 254, 1, 0, 0, 0, 254, 258, 5, 102, 0, 0, 255, 257, 3, 34, 17, 0, 256, 255, 1, 0, 0, 0, 257, 260, 1, 0, 0, 0, 258, 256, 1, 0, 0, 0, 258, 259, 1, 0, 0, 0, 259, 261, 1, 0, 0, 0, 260, 258, 1, 0, 0, 0, 261, 262, 5, 103, 0, 0, 262, 21, 1, 0, 0, 0, 263, 264, 5, 108, 0, 0, 264, 269, 3, 24, 12, 0, 265, 266, 5, 100, 0, 0, 266, 268, 3, 24, 12, 0, 267, 265, 1, 0, 0, 0, 268, 271, 1, 0, 0, 0, 269, 267, 1, 0, 0, 0, 269, 270, 1, 0, 0, 0, 270, 272, 1, 0, 0, 0, 271, 269, 1, 0, 0, 0, 272, 273, 5, 109, 0, 0, 273, 23, 1, 0, 0, 0, 274, 275, 5, 14, 0, 0, 275, 278, 3, 128, 64, 0, 276, 277, 5, 98, 0, 0, 277, 279, 5, 4, 0, 0, 278, 276, 1, 0, 0, 0, 278, 279, 1, 0, 0, 0, 279, 294, 1, 0, 0, 0, 280, 281, 5, 3, 0, 0, 281, 291, 3, 128, 64, 0, 282, 283, 5, 5, 0, 0, 283, 288, 3, 26, 13, 0, 284, 285, 5, 110, 0, 0, 285, 287, 3, 26, 13, 0, 286, 284, 1, 0, 0, 0, 287, 290, 1, 0, 0, 0, 288, 286, 1, 0, 0, 0, 288, 289, 1, 0, 0, 0, 289, 292, 1, 0, 0, 0, 290, 288, 1, 0, 0, 0, 291, 282, 1, 0, 0, 0, 291, 292, 1, 0, 0, 0, 292, 294, 1, 0, 0, 0, 293, 274, 1, 0, 0, 0, 293, 280, 1, 0, 0, 0, 294, 25, 1, 0, 0, 0, 295, 297, 3, 128, 64, 0, 296, 298, 3, 28, 14, 0, 297, 296, 1, 0, 0, 0, 297, 298, 1, 0, 0, 0, 298, 27, 1, 0, 0, 0, 299, 300, 5, 108, 0, 0, 300, 305, 3, 30, 15, 0, 301, 302, 5, 100, 0, 0, 302, 304, 3, 30, 15, 0, 303, 301, 1, 0, 0, 0, 304, 307, 1, 0, 0, 0, 305, 303, 1, 0, 0, 0, 305, 306, 1, 0, 0, 0, 306, 308, 1, 0, 0, 0, 307, 305, 1, 0, 0, 0, 308, 309, 5, 109, 0, 0, 309, 29, 1, 0, 0, 0, 310, 311, 5, 10, 0, 0, 311, 318, 3, 128, 64, 0, 312, 313, 5, 11, 0, 0, 313, 318, 3, 26, 13, 0, 314, 315, 5, 3, 0, 0, 315, 318, 3, 128, 64, 0, 316, 318, 3, 112, 56, 0, 317, 310, 1, 0, 0, 0, 317, 312, 1, 0, 0, 0, 317, 314, 1, 0, 0, 0, 317, 316, 1, 0, 0, 0, 318, 31, 1, 0, 0, 0, 319, 320, 5, 2, 0, 0, 320, 322, 3, 128, 64, 0, 321, 323, 3, 22, 11, 0, 322, 321, 1, 0, 0, 0, 322, 323, 1, 0, 0, 0, 323, 324, 1, 0, 0, 0, 324, 325, 5, 111, 0, 0, 325, 326, 3, 112, 56, 0, 326, 327, 5, 99, 0, 0, 327, 33, 1, 0, 0, 0, 328, 332, 3, 38, 19, 0, 329, 332, 3, 42, 21, 0, 330, 332, 3, 36, 18, 0, 331, 328, 1, 0, 0, 0, 331, 329, 1, 0, 0, 0, 331, 330, 1, 0, 0, 0, 332, 35, 1, 0, 0, 0, 333, 335, 5, 24, 0, 0, 334, 333, 1, 0, 0, 0, 334, 335, 1, 0, 0, 0, 335, 336, 1, 0, 0, 0, 336, 337, 5, 16, 0, 0, 337, 338, 3, 128, 64, 0, 338, 339, 5, 49, 0, 0, 339, 340, 3, 130, 65, 0, 340, 341, 5, 98, 0, 0, 341, 342, 3, 112, 56, 0, 342, 343, 5, 97, 0, 0, 343, 344, 3, 112, 56, 0, 344, 345, 5, 102, 0, 0, 345, 346, 5, 66, 0, 0, 346, 347, 5, 49, 0, 0, 347, 348, 3, 130, 65, 0, 348, 349, 5, 99, 0, 0, 349, 350, 5, 103, 0, 0, 350, 37, 1, 0, 0, 0, 351, 352, 5, 14, 0, 0, 352, 353, 3, 128, 64, 0, 353, 354, 5, 49, 0, 0, 354, 355, 3, 130, 65, 0, 355, 356, 5, 98, 0, 0, 356, 357, 3, 112, 56, 0, 357, 361, 5, 102, 0, 0, 358, 360, 3, 40, 20, 0, 359, 358, 1, 0, 0, 0, 360, 363, 1, 0, 0, 0, 361, 359, 1, 0, 0, 0, 361, 362, 1, 0, 0, 0, 362, 364, 1, 0, 0, 0, 363, 361, 1, 0, 0, 0, 364, 365, 5, 103, 0, 0, 365, 39, 1, 0, 0, 0, 366, 367, 5, 56, 0, 0, 367, 368, 5, 49, 0, 0, 368, 369, 3, 130, 65, 0, 369, 370, 5, 99, 0, 0, 370, 386, 1, 0, 0, 0, 371, 372, 5, 57, 0, 0, 372, 373, 5, 49, 0, 0, 373, 374, 3, 130, 65, 0, 374, 375, 5, 99, 0, 0, 375, 386, 1, 0, 0, 0, 376, 377, 5, 58, 0, 0, 377, 378, 5, 59, 0, 0, 378, 379, 5, 49, 0, 0, 379, 380, 3, 130, 65, 0, 380, 381, 5, 60, 0, 0, 381, 382, 5, 49, 0, 0, 382, 383, 3, 130, 65, 0, 383, 384, 5, 99, 0, 0, 384, 386, 1, 0, 0, 0, 385, 366, 1, 0, 0, 0, 385, 371, 1, 0, 0, 0, 385, 376, 1, 0, 0, 0, 386, 41, 1, 0, 0, 0, 387, 388, 5, 15, 0, 0, 388, 389, 3, 128, 64, 0, 389, 390, 5, 49, 0, 0, 390, 391, 3, 130, 65, 0, 391, 392, 5, 98, 0, 0, 392, 393, 3, 118, 59, 0, 393, 395, 3, 46, 23, 0, 394, 396, 5, 77, 0, 0, 395, 394, 1, 0, 0, 0, 395, 396, 1, 0, 0, 0, 396, 397, 1, 0, 0, 0, 397, 401, 5, 102, 0, 0, 398, 400, 3, 44, 22, 0, 399, 398, 1, 0, 0, 0, 400, 403, 1, 0, 0, 0, 401, 399, 1, 0, 0, 0, 401, 402, 1, 0, 0, 0, 402, 404, 1, 0, 0, 0, 403, 401, 1, 0, 0, 0, 404, 405, 5, 103, 0, 0, 405, 43, 1, 0, 0, 0, 406, 407, 5, 63, 0, 0, 407, 408, 5, 49, 0, 0, 408, 409, 3, 130, 65, 0, 409, 410, 5, 99, 0, 0, 410, 431, 1, 0, 0, 0, 411, 412, 5, 64, 0, 0, 412, 413, 5, 49, 0, 0, 413, 414, 3, 130, 65, 0, 414, 415, 5, 99, 0, 0, 415, 431, 1, 0, 0, 0, 416, 417, 5, 65, 0, 0, 417, 418, 5, 49, 0, 0, 418, 419, 3, 130, 65, 0, 419, 420, 5, 99, 0, 0, 420, 431, 1, 0, 0, 0, 421, 422, 5, 58, 0, 0, 422, 423, 5, 59, 0, 0, 423, 424, 5, 49, 0, 0, 424, 425, 3, 130, 65, 0, 425, 426, 5, 60, 0, 0, 426, 427, 5, 49, 0, 0, 427, 428, 3, 130, 65, 0, 428, 429, 5, 99, 0, 0, 429, 431, 1, 0, 0, 0, 430, 406, 1, 0, 0, 0, 430, 411, 1, 0, 0, 0, 430, 416, 1, 0, 0, 0, 430, 421, 1, 0, 0, 0, 431, 45, 1, 0, 0, 0, 432, 433, 5, 10, 0, 0, 433, 442, 3, 128, 64, 0, 434, 435, 5, 11, 0, 0, 435, 437, 3, 128, 64, 0, 436, 438, 3, 28, 14, 0, 437, 436, 1, 0, 0, 0, 437, 438, 1, 0, 0, 0, 438, 442, 1, 0, 0, 0, 439, 440, 5, 3, 0, 0, 440, 442, 3, 128, 64, 0, 441, 432, 1, 0, 0, 0, 441, 434, 1, 0, 0, 0, 441, 439, 1, 0, 0, 0, 442, 47, 1, 0, 0, 0, 443, 445, 3, 16, 8, 0, 444, 443, 1, 0, 0, 0, 445, 448, 1, 0, 0, 0, 446, 444, 1, 0, 0, 0, 446, 447, 1, 0, 0, 0, 447, 449, 1, 0, 0, 0, 448, 446, 1, 0, 0, 0, 449, 450, 5, 13, 0, 0, 450, 451, 3, 128, 64, 0, 451, 452, 5, 49, 0, 0, 452, 453, 3, 130, 65, 0, 453, 454, 5, 43, 0, 0, 454, 457, 3, 130, 65, 0, 455, 456, 5, 44, 0, 0, 456, 458, 5, 112, 0, 0, 457, 455, 1, 0, 0, 0, 457, 458, 1, 0, 0, 0, 458, 459, 1, 0, 0, 0, 459, 463, 5, 102, 0, 0, 460, 462, 3, 50, 25, 0, 461, 460, 1, 0, 0, 0, 462, 465, 1, 0, 0, 0, 463, 461, 1, 0, 0, 0, 463, 464, 1, 0, 0, 0, 464, 466, 1, 0, 0, 0, 465, 463, 1, 0, 0, 0, 466, 467, 5, 103, 0, 0, 467, 49, 1, 0, 0, 0, 468, 472, 3, 52, 26, 0, 469, 472, 3, 54, 27, 0, 470, 472, 3, 56, 28, 0, 471, 468, 1, 0, 0, 0, 471, 469, 1, 0, 0, 0, 471, 470, 1, 0, 0, 0, 472, 51, 1, 0, 0, 0, 473, 474, 5, 16, 0, 0, 474, 476, 3, 128, 64, 0, 475, 477, 3, 22, 11, 0, 476, 475, 1, 0, 0, 0, 476, 477, 1, 0, 0, 0, 477, 478, 1, 0, 0, 0, 478, 479, 5, 49, 0, 0, 479, 480, 3, 130, 65, 0, 480, 481, 5, 98, 0, 0, 481, 482, 3, 112, 56, 0, 482, 483, 5, 97, 0, 0, 483, 484, 3, 112, 56, 0, 484, 485, 5, 51, 0, 0, 485, 487, 3, 60, 30, 0, 486, 488, 3, 58, 29, 0, 487, 486, 1, 0, 0, 0, 487, 488, 1, 0, 0, 0, 488, 489, 1, 0, 0, 0, 489, 490, 5, 53, 0, 0, 490, 492, 3, 62, 31, 0, 491, 493, 3, 66, 33, 0, 492, 491, 1, 0, 0, 0, 492, 493, 1, 0, 0, 0, 493, 494, 1, 0, 0, 0, 494, 495, 5, 99, 0, 0, 495, 53, 1, 0, 0, 0, 496, 497, 5, 17, 0, 0, 497, 499, 3, 128, 64, 0, 498, 500, 3, 22, 11, 0, 499, 498, 1, 0, 0, 0, 499, 500, 1, 0, 0, 0, 500, 501, 1, 0, 0, 0, 501, 502, 5, 49, 0, 0, 502, 503, 3, 130, 65, 0, 503, 504, 5, 98, 0, 0, 504, 505, 3, 112, 56, 0, 505, 506, 5, 97, 0, 0, 506, 508, 3, 112, 56, 0, 507, 509, 3, 66, 33, 0, 508, 507, 1, 0, 0, 0, 508, 509, 1, 0, 0, 0, 509, 510, 1, 0, 0, 0, 510, 511, 5, 99, 0, 0, 511, 55, 1, 0, 0, 0, 512, 513, 5, 18, 0, 0, 513, 514, 3, 128, 64, 0, 514, 515, 5, 49, 0, 0, 515, 516, 3, 130, 65, 0, 516, 517, 5, 19, 0, 0, 517, 518, 3, 128, 64, 0, 518, 519, 5, 98, 0, 0, 519, 521, 3, 112, 56, 0, 520, 522, 3, 66, 33, 0, 521, 520, 1, 0, 0, 0, 521, 522, 1, 0, 0, 0, 522, 523, 1, 0, 0, 0, 523, 524, 5, 99, 0, 0, 524, 57, 1, 0, 0, 0, 525, 526, 5, 52, 0, 0, 526, 527, 3, 112, 56, 0, 527, 59, 1, 0, 0, 0, 528, 529, 7, 0, 0, 0, 529, 61, 1, 0, 0, 0, 530, 549, 5, 55, 0, 0, 531, 532, 5, 10, 0, 0, 532, 549, 3, 128, 64, 0, 533, 534, 5, 3, 0, 0, 534, 549, 3, 128, 64, 0, 535, 536, 5, 12, 0, 0, 536, 545, 5, 104, 0, 0, 537, 542, 3, 26, 13, 0, 538, 539, 5, 100, 0, 0, 539, 541, 3, 26, 13, 0, 540, 538, 1, 0, 0, 0, 541, 544, 1, 0, 0, 0, 542, 540, 1, 0, 0, 0, 542, 543, 1, 0, 0, 0, 543, 546, 1, 0, 0, 0, 544, 542, 1, 0, 0, 0, 545, 537, 1, 0, 0, 0, 545, 546, 1, 0, 0, 0, 546, 547, 1, 0, 0, 0, 547, 549, 5, 105, 0, 0, 548, 530, 1, 0, 0, 0, 548, 531, 1, 0, 0, 0, 548, 533, 1, 0, 0, 0, 548, 535, 1, 0, 0, 0, 549, 63, 1, 0, 0, 0, 550, 555, 3, 128, 64, 0, 551, 552, 5, 100, 0, 0, 552, 554, 3, 128, 64, 0, 553, 551, 1, 0, 0, 0, 554, 557, 1, 0, 0, 0, 555, 553, 1, 0, 0, 0, 555, 556, 1, 0, 0, 0, 556, 65, 1, 0, 0, 0, 557, 555, 1, 0, 0, 0, 558, 559, 5, 54, 0, 0, 559, 563, 5, 102, 0, 0, 560, 562, 3, 68, 34, 0, 561, 560, 1, 0, 0, 0, 562, 565, 1, 0, 0, 0, 563, 561, 1, 0, 0, 0, 563, 564, 1, 0, 0, 0, 564, 566, 1, 0, 0, 0, 565, 563, 1, 0, 0, 0, 566, 567, 5, 103, 0, 0, 567, 67, 1, 0, 0, 0, 568, 569, 5, 28, 0, 0, 569, 570, 3, 128, 64, 0, 570, 571, 5, 49, 0, 0, 571, 572, 3, 130, 65, 0, 572, 573, 5, 98, 0, 0, 573, 574, 3, 112, 56, 0, 574, 575, 3, 70, 35, 0, 575, 576, 5, 99, 0, 0, 576, 611, 1, 0, 0, 0, 577, 578, 5, 29, 0, 0, 578, 579, 3, 128, 64, 0, 579, 580, 5, 49, 0, 0, 580, 581, 3, 130, 65, 0, 581, 582, 5, 98, 0, 0, 582, 583, 3, 118, 59, 0, 583, 584, 3, 46, 23, 0, 584, 585, 3, 70, 35, 0, 585, 586, 5, 99, 0, 0, 586, 611, 1, 0, 0, 0, 587, 588, 5, 11, 0, 0, 588, 589, 3, 128, 64, 0, 589, 590, 5, 49, 0, 0, 590, 591, 3, 130, 65, 0, 591, 592, 5, 98, 0, 0, 592, 594, 3, 128, 64, 0, 593, 595, 3, 28, 14, 0, 594, 593, 1, 0, 0, 0, 594, 595, 1, 0, 0, 0, 595, 596, 1, 0, 0, 0, 596, 597, 5, 99, 0, 0, 597, 611, 1, 0, 0, 0, 598, 599, 5, 18, 0, 0, 599, 600, 3, 128, 64, 0, 600, 601, 5, 49, 0, 0, 601, 602, 3, 130, 65, 0, 602, 603, 5, 98, 0, 0, 603, 606, 3, 128, 64, 0, 604, 605, 5, 20, 0, 0, 605, 607, 3, 112, 56, 0, 606, 604, 1, 0, 0, 0, 606, 607, 1, 0, 0, 0, 607, 608, 1, 0, 0, 0, 608, 609, 5, 99, 0, 0, 609, 611, 1, 0, 0, 0, 610, 568, 1, 0, 0, 0, 610, 577, 1, 0, 0, 0, 610, 587, 1, 0, 0, 0, 610, 598, 1, 0, 0, 0, 611, 69, 1, 0, 0, 0, 612, 613, 5, 104, 0, 0, 613, 618, 3, 72, 36, 0, 614, 615, 5, 100, 0, 0, 615, 617, 3, 72, 36, 0, 616, 614, 1, 0, 0, 0, 617, 620, 1, 0, 0, 0, 618, 616, 1, 0, 0, 0, 618, 619, 1, 0, 0, 0, 619, 621, 1, 0, 0, 0, 620, 618, 1, 0, 0, 0, 621, 622, 5, 105, 0, 0, 622, 71, 1, 0, 0, 0, 623, 624, 7, 1, 0, 0, 624, 73, 1, 0, 0, 0, 625, 626, 5, 27, 0, 0, 626, 627, 3, 76, 38, 0, 627, 75, 1, 0, 0, 0, 628, 631, 3, 78, 39, 0, 629, 631, 3, 82, 41, 0, 630, 628, 1, 0, 0, 0, 630, 629, 1, 0, 0, 0, 631, 77, 1, 0, 0, 0, 632, 633, 5, 28, 0, 0, 633, 634, 3, 128, 64, 0, 634, 635, 5, 49, 0, 0, 635, 636, 3, 130, 65, 0, 636, 637, 5, 37, 0, 0, 637, 638, 3, 128, 64, 0, 638, 639, 5, 98, 0, 0, 639, 640, 3, 112, 56, 0, 640, 641, 5, 38, 0, 0, 641, 644, 3, 80, 40, 0, 642, 643, 5, 39, 0, 0, 643, 645, 3, 120, 60, 0, 644, 642, 1, 0, 0, 0, 644, 645, 1, 0, 0, 0, 645, 646, 1, 0, 0, 0, 646, 647, 5, 99, 0, 0, 647, 79, 1, 0, 0, 0, 648, 655, 5, 71, 0, 0, 649, 650, 5, 72, 0, 0, 650, 651, 5, 106, 0, 0, 651, 652, 3, 112, 56, 0, 652, 653, 5, 107, 0, 0, 653, 655, 1, 0, 0, 0, 654, 648, 1, 0, 0, 0, 654, 649, 1, 0, 0, 0, 655, 81, 1, 0, 0, 0, 656, 657, 5, 29, 0, 0, 657, 658, 3, 128, 64, 0, 658, 659, 5, 49, 0, 0, 659, 660, 3, 130, 65, 0, 660, 661, 5, 102, 0, 0, 661, 662, 3, 84, 42, 0, 662, 663, 3, 84, 42, 0, 663, 664, 5, 103, 0, 0, 664, 83, 1, 0, 0, 0, 665, 666, 3, 46, 23, 0, 666, 667, 5, 30, 0, 0, 667, 668, 3, 128, 64, 0, 668, 669, 5, 49, 0, 0, 669, 670, 3, 130, 65, 0, 670, 672, 3, 118, 59, 0, 671, 673, 5, 77, 0, 0, 672, 671, 1, 0, 0, 0, 672, 673, 1, 0, 0, 0, 673, 676, 1, 0, 0, 0, 674, 675, 5, 45, 0, 0, 675, 677, 3, 130, 65, 0, 676, 674, 1, 0, 0, 0, 676, 677, 1, 0, 0, 0, 677, 679, 1, 0, 0, 0, 678, 680, 5, 46, 0, 0, 679, 678, 1, 0, 0, 0, 679, 680, 1, 0, 0, 0, 680, 683, 1, 0, 0, 0, 681, 682, 5, 47, 0, 0, 682, 684, 3, 130, 65, 0, 683, 681, 1, 0, 0, 0, 683, 684, 1, 0, 0, 0, 684, 686, 1, 0, 0, 0, 685, 687, 5, 48, 0, 0, 686, 685, 1, 0, 0, 0, 686, 687, 1, 0, 0, 0, 687, 688, 1, 0, 0, 0, 688, 689, 5, 99, 0, 0, 689, 85, 1, 0, 0, 0, 690, 691, 5, 21, 0, 0, 691, 692, 3, 128, 64, 0, 692, 693, 5, 22, 0, 0, 693, 695, 3, 128, 64, 0, 694, 696, 3, 28, 14, 0, 695, 694, 1, 0, 0, 0, 695, 696, 1, 0, 0, 0, 696, 699, 1, 0, 0, 0, 697, 698, 5, 49, 0, 0, 698, 700, 3, 130, 65, 0, 699, 697, 1, 0, 0, 0, 699, 700, 1, 0, 0, 0, 700, 703, 1, 0, 0, 0, 701, 702, 5, 44, 0, 0, 702, 704, 5, 112, 0, 0, 703, 701, 1, 0, 0, 0, 703, 704, 1, 0, 0, 0, 704, 705, 1, 0, 0, 0, 705, 709, 5, 102, 0, 0, 706, 708, 3, 88, 44, 0, 707, 706, 1, 0, 0, 0, 708, 711, 1, 0, 0, 0, 709, 707, 1, 0, 0, 0, 709, 710, 1, 0, 0, 0, 710, 712, 1, 0, 0, 0, 711, 709, 1, 0, 0, 0, 712, 713, 5, 103, 0, 0, 713, 87, 1, 0, 0, 0, 714, 715, 5, 26, 0, 0, 715, 720, 3, 76, 38, 0, 716, 720, 3, 94, 47, 0, 717, 720, 3, 90, 45, 0, 718, 720, 3, 92, 46, 0, 719, 714, 1, 0, 0, 0, 719, 716, 1, 0, 0, 0, 719, 717, 1, 0, 0, 0, 719, 718, 1, 0, 0, 0, 720, 89, 1, 0, 0, 0, 721, 722, 5, 23, 0, 0, 722, 723, 3, 128, 64, 0, 723, 724, 5, 25, 0, 0, 724, 725, 5, 28, 0, 0, 725, 726, 3, 128, 64, 0, 726, 727, 5, 99, 0, 0, 727, 91, 1, 0, 0, 0, 728, 729, 5, 34, 0, 0, 729, 730, 3, 128, 64, 0, 730, 731, 5, 35, 0, 0, 731, 732, 5, 36, 0, 0, 732, 733, 5, 32, 0, 0, 733, 734, 5, 18, 0, 0, 734, 735, 3, 128, 64, 0, 735, 736, 5, 33, 0, 0, 736, 737, 5, 29, 0, 0, 737, 738, 3, 128, 64, 0, 738, 739, 5, 101, 0, 0, 739, 740, 3, 128, 64, 0, 740, 741, 5, 99, 0, 0, 741, 93, 1, 0, 0, 0, 742, 743, 5, 23, 0, 0, 743, 744, 3, 96, 48, 0, 744, 745, 5, 25, 0, 0, 745, 746, 3, 100, 50, 0, 746, 747, 5, 99, 0, 0, 747, 95, 1, 0, 0, 0, 748, 749, 3, 128, 64, 0, 749, 750, 5, 101, 0, 0, 750, 751, 3, 98, 49, 0, 751, 97, 1, 0, 0, 0, 752, 764, 3, 128, 64, 0, 753, 764, 5, 66, 0, 0, 754, 764, 5, 56, 0, 0, 755, 764, 5, 57, 0, 0, 756, 764, 5, 63, 0, 0, 757, 764, 5, 64, 0, 0, 758, 764, 5, 65, 0, 0, 759, 764, 5, 67, 0, 0, 760, 764, 5, 68, 0, 0, 761, 764, 5, 69, 0, 0, 762, 764, 5, 70, 0, 0, 763, 752, 1, 0, 0, 0, 763, 753, 1, 0, 0, 0, 763, 754, 1, 0, 0, 0, 763, 755, 1, 0, 0, 0, 763, 756, 1, 0, 0, 0, 763, 757, 1, 0, 0, 0, 763, 758, 1, 0, 0, 0, 763, 759, 1, 0, 0, 0, 763, 760, 1, 0, 0, 0, 763, 761, 1, 0, 0, 0, 763, 762, 1, 0, 0, 0, 764, 99, 1, 0, 0, 0, 765, 766, 5, 28, 0, 0, 766, 767, 3, 128, 64, 0, 767, 768, 5, 101, 0, 0, 768, 769, 3, 102, 51, 0, 769, 788, 1, 0, 0, 0, 770, 771, 5, 29, 0, 0, 771, 772, 3, 128, 64, 0, 772, 773, 5, 101, 0, 0, 773, 774, 3, 128, 64, 0, 774, 775, 5, 101, 0, 0, 775, 776, 3, 104, 52, 0, 776, 788, 1, 0, 0, 0, 777, 778, 5, 13, 0, 0, 778, 779, 3, 128, 64, 0, 779, 780, 5, 101, 0, 0, 780, 782, 3, 128, 64, 0, 781, 783, 3, 28, 14, 0, 782, 781, 1, 0, 0, 0, 782, 783, 1, 0, 0, 0, 783, 785, 1, 0, 0, 0, 784, 786, 3, 106, 53, 0, 785, 784, 1, 0, 0, 0, 785, 786, 1, 0, 0, 0, 786, 788, 1, 0, 0, 0, 787, 765, 1, 0, 0, 0, 787, 770, 1, 0, 0, 0, 787, 777, 1, 0, 0, 0, 788, 101, 1, 0, 0, 0, 789, 790, 7, 2, 0, 0, 790, 103, 1, 0, 0, 0, 791, 792, 7, 3, 0, 0, 792, 105, 1, 0, 0, 0, 793, 794, 5, 31, 0, 0, 794, 798, 5, 102, 0, 0, 795, 797, 3, 108, 54, 0, 796, 795, 1, 0, 0, 0, 797, 800, 1, 0, 0, 0, 798, 796, 1, 0, 0, 0, 798, 799, 1, 0, 0, 0, 799, 801, 1, 0, 0, 0, 800, 798, 1, 0, 0, 0, 801, 802, 5, 103, 0, 0, 802, 107, 1, 0, 0, 0, 803, 804, 3, 128, 64, 0, 804, 805, 5, 25, 0, 0, 805, 806, 5, 28, 0, 0, 806, 813, 3, 128, 64, 0, 807, 808, 5, 33, 0, 0, 808, 809, 5, 29, 0, 0, 809, 810, 3, 128, 64, 0, 810, 811, 5, 101, 0, 0, 811, 812, 3, 128, 64, 0, 812, 814, 1, 0, 0, 0, 813, 807, 1, 0, 0, 0, 813, 814, 1, 0, 0, 0, 814, 815, 1, 0, 0, 0, 815, 816, 5, 99, 0, 0, 816, 857, 1, 0, 0, 0, 817, 818, 3, 128, 64, 0, 818, 819, 5, 25, 0, 0, 819, 820, 5, 29, 0, 0, 820, 821, 3, 128, 64, 0, 821, 822, 5, 101, 0, 0, 822, 829, 3, 128, 64, 0, 823, 824, 5, 33, 0, 0, 824, 825, 5, 29, 0, 0, 825, 826, 3, 128, 64, 0, 826, 827, 5, 101, 0, 0, 827, 828, 3, 128, 64, 0, 828, 830, 1, 0, 0, 0, 829, 823, 1, 0, 0, 0, 829, 830, 1, 0, 0, 0, 830, 831, 1, 0, 0, 0, 831, 832, 5, 99, 0, 0, 832, 857, 1, 0, 0, 0, 833, 834, 3, 128, 64, 0, 834, 835, 5, 25, 0, 0, 835, 836, 5, 11, 0, 0, 836, 838, 3, 128, 64, 0, 837, 839, 3, 28, 14, 0, 838, 837, 1, 0, 0, 0, 838, 839, 1, 0, 0, 0, 839, 846, 1, 0, 0, 0, 840, 841, 5, 33, 0, 0, 841, 842, 5, 29, 0, 0, 842, 843, 3, 128, 64, 0, 843, 844, 5, 101, 0, 0, 844, 845, 3, 128, 64, 0, 845, 847, 1, 0, 0, 0, 846, 840, 1, 0, 0, 0, 846, 847, 1, 0, 0, 0, 847, 848, 1, 0, 0, 0, 848, 849, 5, 99, 0, 0, 849, 857, 1, 0, 0, 0, 850, 851, 3, 128, 64, 0, 851, 852, 5, 25, 0, 0, 852, 853, 5, 18, 0, 0, 853, 854, 3, 128, 64, 0, 854, 855, 5, 99, 0, 0, 855, 857, 1, 0, 0, 0, 856, 803, 1, 0, 0, 0, 856, 817, 1, 0, 0, 0, 856, 833, 1, 0, 0, 0, 856, 850, 1, 0, 0, 0, 857, 109, 1, 0, 0, 0, 858, 859, 5, 18, 0, 0, 859, 860, 3, 128, 64, 0, 860, 861, 5, 25, 0, 0, 861, 862, 3, 128, 64, 0, 862, 863, 5, 101, 0, 0, 863, 865, 3, 128, 64, 0, 864, 866, 3, 106, 53, 0, 865, 864, 1, 0, 0, 0, 865, 866, 1, 0, 0, 0, 866, 867, 1, 0, 0, 0, 867, 868, 5, 99, 0, 0, 868, 111, 1, 0, 0, 0, 869, 916, 3, 116, 58, 0, 870, 916, 5, 78, 0, 0, 871, 916, 5, 79, 0, 0, 872, 873, 5, 80, 0, 0, 873, 916, 3, 130, 65, 0, 874, 875, 5, 81, 0, 0, 875, 876, 5, 108, 0, 0, 876, 877, 3, 128, 64, 0, 877, 878, 5, 109, 0, 0, 878, 916, 1, 0, 0, 0, 879, 880, 5, 82, 0, 0, 880, 881, 5, 108, 0, 0, 881, 883, 3, 128, 64, 0, 882, 884, 3, 28, 14, 0, 883, 882, 1, 0, 0, 0, 883, 884, 1, 0, 0, 0, 884, 885, 1, 0, 0, 0, 885, 886, 5, 109, 0, 0, 886, 916, 1, 0, 0, 0, 887, 888, 5, 6, 0, 0, 888, 889, 5, 108, 0, 0, 889, 890, 3, 128, 64, 0, 890, 891, 5, 109, 0, 0, 891, 916, 1, 0, 0, 0, 892, 893, 5, 83, 0, 0, 893, 894, 5, 108, 0, 0, 894, 895, 3, 112, 56, 0, 895, 896, 5, 109, 0, 0, 896, 916, 1, 0, 0, 0, 897, 898, 5, 84, 0, 0, 898, 899, 5, 108, 0, 0, 899, 900, 3, 112, 56, 0, 900, 901, 5, 109, 0, 0, 901, 916, 1, 0, 0, 0, 902, 903, 5, 85, 0, 0, 903, 907, 5, 102, 0, 0, 904, 906, 3, 114, 57, 0, 905, 904, 1, 0, 0, 0, 906, 909, 1, 0, 0, 0, 907, 905, 1, 0, 0, 0, 907, 908, 1, 0, 0, 0, 908, 910, 1, 0, 0, 0, 909, 907, 1, 0, 0, 0, 910, 916, 5, 103, 0, 0, 911, 913, 3, 128, 64, 0, 912, 914, 3, 28, 14, 0, 913, 912, 1, 0, 0, 0, 913, 914, 1, 0, 0, 0, 914, 916, 1, 0, 0, 0, 915, 869, 1, 0, 0, 0, 915, 870, 1, 0, 0, 0, 915, 871, 1, 0, 0, 0, 915, 872, 1, 0, 0, 0, 915, 874, 1, 0, 0, 0, 915, 879, 1, 0, 0, 0, 915, 887, 1, 0, 0, 0, 915, 892, 1, 0, 0, 0, 915, 897, 1, 0, 0, 0, 915, 902, 1, 0, 0, 0, 915, 911, 1, 0, 0, 0, 916, 113, 1, 0, 0, 0, 917, 918, 3, 128, 64, 0, 918, 919, 5, 98, 0, 0, 919, 920, 3, 112, 56, 0, 920, 921, 5, 99, 0, 0, 921, 115, 1, 0, 0, 0, 922, 923, 7, 4, 0, 0, 923, 117, 1, 0, 0, 0, 924, 925, 7, 5, 0, 0, 925, 119, 1, 0, 0, 0, 926, 935, 3, 130, 65, 0, 927, 935, 5, 112, 0, 0, 928, 935, 5, 113, 0, 0, 929, 935, 5, 94, 0, 0, 930, 935, 5, 95, 0, 0, 931, 935, 5, 96, 0, 0, 932, 935, 3, 122, 61, 0, 933, 935, 3, 126, 63, 0, 934, 926, 1, 0, 0, 0, 934, 927, 1, 0, 0, 0, 934, 928, 1, 0, 0, 0, 934, 929, 1, 0, 0, 0, 934, 930, 1, 0, 0, 0, 934, 931, 1, 0, 0, 0, 934, 932, 1, 0, 0, 0, 934, 933, 1, 0, 0, 0, 935, 121, 1, 0, 0, 0, 936, 945, 5, 102, 0, 0, 937, 942, 3, 124, 62, 0, 938, 939, 5, 100, 0, 0, 939, 941, 3, 124, 62, 0, 940, 938, 1, 0, 0, 0, 941, 944, 1, 0, 0, 0, 942, 940, 1, 0, 0, 0, 942, 943, 1, 0, 0, 0, 943, 946, 1, 0, 0, 0, 944, 942, 1, 0, 0, 0, 945, 937, 1, 0, 0, 0, 945, 946, 1, 0, 0, 0, 946, 947, 1, 0, 0, 0, 947, 948, 5, 103, 0, 0, 948, 123, 1, 0, 0, 0, 949, 950, 3, 130, 65, 0, 950, 951, 5, 98, 0, 0, 951, 952, 3, 120, 60, 0, 952, 125, 1, 0, 0, 0, 953, 962, 5, 104, 0, 0, 954, 959, 3, 120, 60, 0, 955, 956, 5, 100, 0, 0, 956, 958, 3, 120, 60, 0, 957, 955, 1, 0, 0, 0, 958, 961, 1, 0, 0, 0, 959, 957, 1, 0, 0, 0, 959, 960, 1, 0, 0, 0, 960, 963, 1, 0, 0, 0, 961, 959, 1, 0, 0, 0, 962, 954, 1, 0, 0, 0, 962, 963, 1, 0, 0, 0, 963, 964, 1, 0, 0, 0, 964, 965, 5, 105, 0, 0, 965, 127, 1, 0, 0, 0, 966, 967, 7, 6, 0, 0, 967, 129, 1, 0, 0, 0, 968, 969, 5, 115, 0, 0, 969, 131, 1, 0, 0, 0, 82, 144, 151, 172, 184, 196, 216, 224, 231, 237, 249, 252, 258, 269, 278, 288, 291, 293, 297, 305, 317, 322, 331, 334, 361, 385, 395, 401, 430, 437, 441, 446, 457, 463, 471, 476, 487, 492, 499, 508, 521, 542, 545, 548, 555, 563, 594, 606, 610, 618, 630, 644, 654, 672, 676, 679, 683, 686, 695, 699, 703, 709, 719, 763, 782, 785, 787, 798, 813, 829, 838, 846, 856, 865, 883, 907, 913, 915, 934, 942, 945, 959, 962] \ No newline at end of file diff --git a/src/capability-language/generated/QuixosCapability.tokens b/src/capability-language/generated/QuixosCapability.tokens index 75f42fb..ed12769 100644 --- a/src/capability-language/generated/QuixosCapability.tokens +++ b/src/capability-language/generated/QuixosCapability.tokens @@ -21,100 +21,101 @@ INPUT=20 CONFORM=21 AS=22 BIND=23 -TO=24 -PRIVATE=25 -SHARED=26 -STATE=27 -EDGE=28 -PROJECTION=29 -WITH=30 -USING=31 -VIA=32 -MATERIALIZE=33 -IF=34 -ABSENT=35 -ON=36 -POLICY=37 -DEFAULT=38 -SOURCE=39 -REPOSITORY=40 -COMMIT=41 -REVISION=42 -SEMANTIC_MAJOR=43 -ON_DELETE=44 -RETAIN_OTHER=45 -KEYED=46 -PUBLIC_TRAVERSAL=47 -ID=48 -DOC=49 -MODE=50 -EMITS=51 -RECEIVER=52 -REQUIRES=53 -ANY=54 -GET=55 -SET=56 -WATCH=57 -START=58 -STOP=59 -READ=60 -WRITE=61 -RESOLVE=62 -CONNECT=63 -DISCONNECT=64 -CALL=65 -WATCH_START=66 -WATCH_STOP=67 -SUBSCRIBE=68 -UNSUBSCRIBE=69 -OPTIMISTIC_REGISTER=70 -CRDT=71 -OPTIONAL_ONE=72 -EXACTLY_ONE=73 -MANY_UNIQUE=74 -MANY=75 -ORDERED=76 -UNIT=77 -WATCH_HANDLE=78 -MESSAGE=79 -ATOM_REF=80 -INTERFACE_REF=81 -OPTIONAL=82 -LIST=83 -RECORD=84 -BOOL=85 -BYTES=86 -DOUBLE=87 -INT32=88 -INT64=89 -STRING=90 -UINT32=91 -UINT64=92 -TRUE=93 -FALSE=94 -NULL=95 -ARROW=96 -COLON=97 -SEMI=98 -COMMA=99 -DOT=100 -LBRACE=101 -RBRACE=102 -LBRACK=103 -RBRACK=104 -LPAREN=105 -RPAREN=106 -LT=107 -GT=108 -AMP=109 -EQUAL=110 -INTEGER=111 -JSON_NUMBER=112 -IDENTIFIER=113 -STRING_LITERAL=114 -LINE_COMMENT=115 -BLOCK_COMMENT=116 -WS=117 +STATIC=24 +TO=25 +PRIVATE=26 +SHARED=27 +STATE=28 +EDGE=29 +PROJECTION=30 +WITH=31 +USING=32 +VIA=33 +MATERIALIZE=34 +IF=35 +ABSENT=36 +ON=37 +POLICY=38 +DEFAULT=39 +SOURCE=40 +REPOSITORY=41 +COMMIT=42 +REVISION=43 +SEMANTIC_MAJOR=44 +ON_DELETE=45 +RETAIN_OTHER=46 +KEYED=47 +PUBLIC_TRAVERSAL=48 +ID=49 +DOC=50 +MODE=51 +EMITS=52 +RECEIVER=53 +REQUIRES=54 +ANY=55 +GET=56 +SET=57 +WATCH=58 +START=59 +STOP=60 +READ=61 +WRITE=62 +RESOLVE=63 +CONNECT=64 +DISCONNECT=65 +CALL=66 +WATCH_START=67 +WATCH_STOP=68 +SUBSCRIBE=69 +UNSUBSCRIBE=70 +OPTIMISTIC_REGISTER=71 +CRDT=72 +OPTIONAL_ONE=73 +EXACTLY_ONE=74 +MANY_UNIQUE=75 +MANY=76 +ORDERED=77 +UNIT=78 +WATCH_HANDLE=79 +MESSAGE=80 +ATOM_REF=81 +INTERFACE_REF=82 +OPTIONAL=83 +LIST=84 +RECORD=85 +BOOL=86 +BYTES=87 +DOUBLE=88 +INT32=89 +INT64=90 +STRING=91 +UINT32=92 +UINT64=93 +TRUE=94 +FALSE=95 +NULL=96 +ARROW=97 +COLON=98 +SEMI=99 +COMMA=100 +DOT=101 +LBRACE=102 +RBRACE=103 +LBRACK=104 +RBRACK=105 +LPAREN=106 +RPAREN=107 +LT=108 +GT=109 +AMP=110 +EQUAL=111 +INTEGER=112 +JSON_NUMBER=113 +IDENTIFIER=114 +STRING_LITERAL=115 +LINE_COMMENT=116 +BLOCK_COMMENT=117 +WS=118 'workspace'=1 'type'=2 'object'=3 @@ -138,90 +139,91 @@ WS=117 'conform'=21 'as'=22 'bind'=23 -'to'=24 -'private'=25 -'shared'=26 -'state'=27 -'edge'=28 -'projection'=29 -'with'=30 -'using'=31 -'via'=32 -'materialize'=33 -'if'=34 -'absent'=35 -'on'=36 -'policy'=37 -'default'=38 -'source'=39 -'repository'=40 -'commit'=41 -'revision'=42 -'semantic-major'=43 -'on-delete'=44 -'retain-other'=45 -'keyed'=46 -'public-traversal'=47 -'id'=48 -'doc'=49 -'mode'=50 -'emits'=51 -'receiver'=52 -'requires'=53 -'any'=54 -'get'=55 -'set'=56 -'watch'=57 -'start'=58 -'stop'=59 -'read'=60 -'write'=61 -'resolve'=62 -'connect'=63 -'disconnect'=64 -'call'=65 -'watch-start'=66 -'watch-stop'=67 -'subscribe'=68 -'unsubscribe'=69 -'optimistic-register'=70 -'crdt'=71 -'optional-one'=72 -'exactly-one'=73 -'many-unique'=74 -'many'=75 -'ordered'=76 -'unit'=77 -'watch-handle'=78 -'message'=79 -'atom-ref'=80 -'interface-ref'=81 -'optional'=82 -'list'=83 -'record'=84 -'bool'=85 -'bytes'=86 -'double'=87 -'int32'=88 -'int64'=89 -'string'=90 -'uint32'=91 -'uint64'=92 -'true'=93 -'false'=94 -'null'=95 -'->'=96 -':'=97 -';'=98 -','=99 -'.'=100 -'{'=101 -'}'=102 -'['=103 -']'=104 -'('=105 -')'=106 -'<'=107 -'>'=108 -'&'=109 -'='=110 +'static'=24 +'to'=25 +'private'=26 +'shared'=27 +'state'=28 +'edge'=29 +'projection'=30 +'with'=31 +'using'=32 +'via'=33 +'materialize'=34 +'if'=35 +'absent'=36 +'on'=37 +'policy'=38 +'default'=39 +'source'=40 +'repository'=41 +'commit'=42 +'revision'=43 +'semantic-major'=44 +'on-delete'=45 +'retain-other'=46 +'keyed'=47 +'public-traversal'=48 +'id'=49 +'doc'=50 +'mode'=51 +'emits'=52 +'receiver'=53 +'requires'=54 +'any'=55 +'get'=56 +'set'=57 +'watch'=58 +'start'=59 +'stop'=60 +'read'=61 +'write'=62 +'resolve'=63 +'connect'=64 +'disconnect'=65 +'call'=66 +'watch-start'=67 +'watch-stop'=68 +'subscribe'=69 +'unsubscribe'=70 +'optimistic-register'=71 +'crdt'=72 +'optional-one'=73 +'exactly-one'=74 +'many-unique'=75 +'many'=76 +'ordered'=77 +'unit'=78 +'watch-handle'=79 +'message'=80 +'atom-ref'=81 +'interface-ref'=82 +'optional'=83 +'list'=84 +'record'=85 +'bool'=86 +'bytes'=87 +'double'=88 +'int32'=89 +'int64'=90 +'string'=91 +'uint32'=92 +'uint64'=93 +'true'=94 +'false'=95 +'null'=96 +'->'=97 +':'=98 +';'=99 +','=100 +'.'=101 +'{'=102 +'}'=103 +'['=104 +']'=105 +'('=106 +')'=107 +'<'=108 +'>'=109 +'&'=110 +'='=111 diff --git a/src/capability-language/generated/QuixosCapabilityLexer.interp b/src/capability-language/generated/QuixosCapabilityLexer.interp index 4e55c58..d67bca1 100644 --- a/src/capability-language/generated/QuixosCapabilityLexer.interp +++ b/src/capability-language/generated/QuixosCapabilityLexer.interp @@ -23,6 +23,7 @@ null 'conform' 'as' 'bind' +'static' 'to' 'private' 'shared' @@ -143,6 +144,7 @@ INPUT CONFORM AS BIND +STATIC TO PRIVATE SHARED @@ -262,6 +264,7 @@ INPUT CONFORM AS BIND +STATIC TO PRIVATE SHARED @@ -367,4 +370,4 @@ mode names: DEFAULT_MODE atn: -[4, 0, 117, 1110, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 97, 1, 97, 1, 98, 1, 98, 1, 99, 1, 99, 1, 100, 1, 100, 1, 101, 1, 101, 1, 102, 1, 102, 1, 103, 1, 103, 1, 104, 1, 104, 1, 105, 1, 105, 1, 106, 1, 106, 1, 107, 1, 107, 1, 108, 1, 108, 1, 109, 1, 109, 1, 110, 3, 110, 1011, 8, 110, 1, 110, 4, 110, 1014, 8, 110, 11, 110, 12, 110, 1015, 1, 111, 3, 111, 1019, 8, 111, 1, 111, 1, 111, 1, 111, 5, 111, 1024, 8, 111, 10, 111, 12, 111, 1027, 9, 111, 3, 111, 1029, 8, 111, 1, 111, 1, 111, 4, 111, 1033, 8, 111, 11, 111, 12, 111, 1034, 3, 111, 1037, 8, 111, 1, 111, 1, 111, 3, 111, 1041, 8, 111, 1, 111, 4, 111, 1044, 8, 111, 11, 111, 12, 111, 1045, 3, 111, 1048, 8, 111, 1, 112, 1, 112, 5, 112, 1052, 8, 112, 10, 112, 12, 112, 1055, 9, 112, 1, 113, 1, 113, 1, 113, 5, 113, 1060, 8, 113, 10, 113, 12, 113, 1063, 9, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 3, 114, 1075, 8, 114, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 5, 116, 1083, 8, 116, 10, 116, 12, 116, 1086, 9, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 117, 1, 117, 5, 117, 1094, 8, 117, 10, 117, 12, 117, 1097, 9, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, 4, 118, 1105, 8, 118, 11, 118, 12, 118, 1106, 1, 118, 1, 118, 1, 1095, 0, 119, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 72, 145, 73, 147, 74, 149, 75, 151, 76, 153, 77, 155, 78, 157, 79, 159, 80, 161, 81, 163, 82, 165, 83, 167, 84, 169, 85, 171, 86, 173, 87, 175, 88, 177, 89, 179, 90, 181, 91, 183, 92, 185, 93, 187, 94, 189, 95, 191, 96, 193, 97, 195, 98, 197, 99, 199, 100, 201, 101, 203, 102, 205, 103, 207, 104, 209, 105, 211, 106, 213, 107, 215, 108, 217, 109, 219, 110, 221, 111, 223, 112, 225, 113, 227, 114, 229, 0, 231, 0, 233, 115, 235, 116, 237, 117, 1, 0, 11, 1, 0, 48, 57, 1, 0, 49, 57, 2, 0, 69, 69, 101, 101, 2, 0, 43, 43, 45, 45, 3, 0, 65, 90, 95, 95, 97, 122, 4, 0, 48, 57, 65, 90, 95, 95, 97, 122, 4, 0, 10, 10, 13, 13, 34, 34, 92, 92, 8, 0, 34, 34, 47, 47, 92, 92, 98, 98, 102, 102, 110, 110, 114, 114, 116, 116, 3, 0, 48, 57, 65, 70, 97, 102, 2, 0, 10, 10, 13, 13, 3, 0, 9, 10, 13, 13, 32, 32, 1124, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, 183, 1, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 189, 1, 0, 0, 0, 0, 191, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 197, 1, 0, 0, 0, 0, 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 203, 1, 0, 0, 0, 0, 205, 1, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 209, 1, 0, 0, 0, 0, 211, 1, 0, 0, 0, 0, 213, 1, 0, 0, 0, 0, 215, 1, 0, 0, 0, 0, 217, 1, 0, 0, 0, 0, 219, 1, 0, 0, 0, 0, 221, 1, 0, 0, 0, 0, 223, 1, 0, 0, 0, 0, 225, 1, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 233, 1, 0, 0, 0, 0, 235, 1, 0, 0, 0, 0, 237, 1, 0, 0, 0, 1, 239, 1, 0, 0, 0, 3, 249, 1, 0, 0, 0, 5, 254, 1, 0, 0, 0, 7, 261, 1, 0, 0, 0, 9, 270, 1, 0, 0, 0, 11, 281, 1, 0, 0, 0, 13, 285, 1, 0, 0, 0, 15, 294, 1, 0, 0, 0, 17, 301, 1, 0, 0, 0, 19, 310, 1, 0, 0, 0, 21, 315, 1, 0, 0, 0, 23, 325, 1, 0, 0, 0, 25, 336, 1, 0, 0, 0, 27, 344, 1, 0, 0, 0, 29, 350, 1, 0, 0, 0, 31, 359, 1, 0, 0, 0, 33, 369, 1, 0, 0, 0, 35, 378, 1, 0, 0, 0, 37, 390, 1, 0, 0, 0, 39, 401, 1, 0, 0, 0, 41, 407, 1, 0, 0, 0, 43, 415, 1, 0, 0, 0, 45, 418, 1, 0, 0, 0, 47, 423, 1, 0, 0, 0, 49, 426, 1, 0, 0, 0, 51, 434, 1, 0, 0, 0, 53, 441, 1, 0, 0, 0, 55, 447, 1, 0, 0, 0, 57, 452, 1, 0, 0, 0, 59, 463, 1, 0, 0, 0, 61, 468, 1, 0, 0, 0, 63, 474, 1, 0, 0, 0, 65, 478, 1, 0, 0, 0, 67, 490, 1, 0, 0, 0, 69, 493, 1, 0, 0, 0, 71, 500, 1, 0, 0, 0, 73, 503, 1, 0, 0, 0, 75, 510, 1, 0, 0, 0, 77, 518, 1, 0, 0, 0, 79, 525, 1, 0, 0, 0, 81, 536, 1, 0, 0, 0, 83, 543, 1, 0, 0, 0, 85, 552, 1, 0, 0, 0, 87, 567, 1, 0, 0, 0, 89, 577, 1, 0, 0, 0, 91, 590, 1, 0, 0, 0, 93, 596, 1, 0, 0, 0, 95, 613, 1, 0, 0, 0, 97, 616, 1, 0, 0, 0, 99, 620, 1, 0, 0, 0, 101, 625, 1, 0, 0, 0, 103, 631, 1, 0, 0, 0, 105, 640, 1, 0, 0, 0, 107, 649, 1, 0, 0, 0, 109, 653, 1, 0, 0, 0, 111, 657, 1, 0, 0, 0, 113, 661, 1, 0, 0, 0, 115, 667, 1, 0, 0, 0, 117, 673, 1, 0, 0, 0, 119, 678, 1, 0, 0, 0, 121, 683, 1, 0, 0, 0, 123, 689, 1, 0, 0, 0, 125, 697, 1, 0, 0, 0, 127, 705, 1, 0, 0, 0, 129, 716, 1, 0, 0, 0, 131, 721, 1, 0, 0, 0, 133, 733, 1, 0, 0, 0, 135, 744, 1, 0, 0, 0, 137, 754, 1, 0, 0, 0, 139, 766, 1, 0, 0, 0, 141, 786, 1, 0, 0, 0, 143, 791, 1, 0, 0, 0, 145, 804, 1, 0, 0, 0, 147, 816, 1, 0, 0, 0, 149, 828, 1, 0, 0, 0, 151, 833, 1, 0, 0, 0, 153, 841, 1, 0, 0, 0, 155, 846, 1, 0, 0, 0, 157, 859, 1, 0, 0, 0, 159, 867, 1, 0, 0, 0, 161, 876, 1, 0, 0, 0, 163, 890, 1, 0, 0, 0, 165, 899, 1, 0, 0, 0, 167, 904, 1, 0, 0, 0, 169, 911, 1, 0, 0, 0, 171, 916, 1, 0, 0, 0, 173, 922, 1, 0, 0, 0, 175, 929, 1, 0, 0, 0, 177, 935, 1, 0, 0, 0, 179, 941, 1, 0, 0, 0, 181, 948, 1, 0, 0, 0, 183, 955, 1, 0, 0, 0, 185, 962, 1, 0, 0, 0, 187, 967, 1, 0, 0, 0, 189, 973, 1, 0, 0, 0, 191, 978, 1, 0, 0, 0, 193, 981, 1, 0, 0, 0, 195, 983, 1, 0, 0, 0, 197, 985, 1, 0, 0, 0, 199, 987, 1, 0, 0, 0, 201, 989, 1, 0, 0, 0, 203, 991, 1, 0, 0, 0, 205, 993, 1, 0, 0, 0, 207, 995, 1, 0, 0, 0, 209, 997, 1, 0, 0, 0, 211, 999, 1, 0, 0, 0, 213, 1001, 1, 0, 0, 0, 215, 1003, 1, 0, 0, 0, 217, 1005, 1, 0, 0, 0, 219, 1007, 1, 0, 0, 0, 221, 1010, 1, 0, 0, 0, 223, 1018, 1, 0, 0, 0, 225, 1049, 1, 0, 0, 0, 227, 1056, 1, 0, 0, 0, 229, 1066, 1, 0, 0, 0, 231, 1076, 1, 0, 0, 0, 233, 1078, 1, 0, 0, 0, 235, 1089, 1, 0, 0, 0, 237, 1104, 1, 0, 0, 0, 239, 240, 5, 119, 0, 0, 240, 241, 5, 111, 0, 0, 241, 242, 5, 114, 0, 0, 242, 243, 5, 107, 0, 0, 243, 244, 5, 115, 0, 0, 244, 245, 5, 112, 0, 0, 245, 246, 5, 97, 0, 0, 246, 247, 5, 99, 0, 0, 247, 248, 5, 101, 0, 0, 248, 2, 1, 0, 0, 0, 249, 250, 5, 116, 0, 0, 250, 251, 5, 121, 0, 0, 251, 252, 5, 112, 0, 0, 252, 253, 5, 101, 0, 0, 253, 4, 1, 0, 0, 0, 254, 255, 5, 111, 0, 0, 255, 256, 5, 98, 0, 0, 256, 257, 5, 106, 0, 0, 257, 258, 5, 101, 0, 0, 258, 259, 5, 99, 0, 0, 259, 260, 5, 116, 0, 0, 260, 6, 1, 0, 0, 0, 261, 262, 5, 115, 0, 0, 262, 263, 5, 116, 0, 0, 263, 264, 5, 111, 0, 0, 264, 265, 5, 114, 0, 0, 265, 266, 5, 97, 0, 0, 266, 267, 5, 98, 0, 0, 267, 268, 5, 108, 0, 0, 268, 269, 5, 101, 0, 0, 269, 8, 1, 0, 0, 0, 270, 271, 5, 105, 0, 0, 271, 272, 5, 109, 0, 0, 272, 273, 5, 112, 0, 0, 273, 274, 5, 108, 0, 0, 274, 275, 5, 101, 0, 0, 275, 276, 5, 109, 0, 0, 276, 277, 5, 101, 0, 0, 277, 278, 5, 110, 0, 0, 278, 279, 5, 116, 0, 0, 279, 280, 5, 115, 0, 0, 280, 10, 1, 0, 0, 0, 281, 282, 5, 114, 0, 0, 282, 283, 5, 101, 0, 0, 283, 284, 5, 102, 0, 0, 284, 12, 1, 0, 0, 0, 285, 286, 5, 102, 0, 0, 286, 287, 5, 114, 0, 0, 287, 288, 5, 97, 0, 0, 288, 289, 5, 103, 0, 0, 289, 290, 5, 109, 0, 0, 290, 291, 5, 101, 0, 0, 291, 292, 5, 110, 0, 0, 292, 293, 5, 116, 0, 0, 293, 14, 1, 0, 0, 0, 294, 295, 5, 105, 0, 0, 295, 296, 5, 109, 0, 0, 296, 297, 5, 112, 0, 0, 297, 298, 5, 111, 0, 0, 298, 299, 5, 114, 0, 0, 299, 300, 5, 116, 0, 0, 300, 16, 1, 0, 0, 0, 301, 302, 5, 101, 0, 0, 302, 303, 5, 120, 0, 0, 303, 304, 5, 116, 0, 0, 304, 305, 5, 101, 0, 0, 305, 306, 5, 114, 0, 0, 306, 307, 5, 110, 0, 0, 307, 308, 5, 97, 0, 0, 308, 309, 5, 108, 0, 0, 309, 18, 1, 0, 0, 0, 310, 311, 5, 97, 0, 0, 311, 312, 5, 116, 0, 0, 312, 313, 5, 111, 0, 0, 313, 314, 5, 109, 0, 0, 314, 20, 1, 0, 0, 0, 315, 316, 5, 105, 0, 0, 316, 317, 5, 110, 0, 0, 317, 318, 5, 116, 0, 0, 318, 319, 5, 101, 0, 0, 319, 320, 5, 114, 0, 0, 320, 321, 5, 102, 0, 0, 321, 322, 5, 97, 0, 0, 322, 323, 5, 99, 0, 0, 323, 324, 5, 101, 0, 0, 324, 22, 1, 0, 0, 0, 325, 326, 5, 105, 0, 0, 326, 327, 5, 110, 0, 0, 327, 328, 5, 116, 0, 0, 328, 329, 5, 101, 0, 0, 329, 330, 5, 114, 0, 0, 330, 331, 5, 102, 0, 0, 331, 332, 5, 97, 0, 0, 332, 333, 5, 99, 0, 0, 333, 334, 5, 101, 0, 0, 334, 335, 5, 115, 0, 0, 335, 24, 1, 0, 0, 0, 336, 337, 5, 112, 0, 0, 337, 338, 5, 97, 0, 0, 338, 339, 5, 99, 0, 0, 339, 340, 5, 107, 0, 0, 340, 341, 5, 97, 0, 0, 341, 342, 5, 103, 0, 0, 342, 343, 5, 101, 0, 0, 343, 26, 1, 0, 0, 0, 344, 345, 5, 118, 0, 0, 345, 346, 5, 97, 0, 0, 346, 347, 5, 108, 0, 0, 347, 348, 5, 117, 0, 0, 348, 349, 5, 101, 0, 0, 349, 28, 1, 0, 0, 0, 350, 351, 5, 114, 0, 0, 351, 352, 5, 101, 0, 0, 352, 353, 5, 108, 0, 0, 353, 354, 5, 97, 0, 0, 354, 355, 5, 116, 0, 0, 355, 356, 5, 105, 0, 0, 356, 357, 5, 111, 0, 0, 357, 358, 5, 110, 0, 0, 358, 30, 1, 0, 0, 0, 359, 360, 5, 111, 0, 0, 360, 361, 5, 112, 0, 0, 361, 362, 5, 101, 0, 0, 362, 363, 5, 114, 0, 0, 363, 364, 5, 97, 0, 0, 364, 365, 5, 116, 0, 0, 365, 366, 5, 105, 0, 0, 366, 367, 5, 111, 0, 0, 367, 368, 5, 110, 0, 0, 368, 32, 1, 0, 0, 0, 369, 370, 5, 102, 0, 0, 370, 371, 5, 117, 0, 0, 371, 372, 5, 110, 0, 0, 372, 373, 5, 99, 0, 0, 373, 374, 5, 116, 0, 0, 374, 375, 5, 105, 0, 0, 375, 376, 5, 111, 0, 0, 376, 377, 5, 110, 0, 0, 377, 34, 1, 0, 0, 0, 378, 379, 5, 99, 0, 0, 379, 380, 5, 111, 0, 0, 380, 381, 5, 110, 0, 0, 381, 382, 5, 115, 0, 0, 382, 383, 5, 116, 0, 0, 383, 384, 5, 114, 0, 0, 384, 385, 5, 117, 0, 0, 385, 386, 5, 99, 0, 0, 386, 387, 5, 116, 0, 0, 387, 388, 5, 111, 0, 0, 388, 389, 5, 114, 0, 0, 389, 36, 1, 0, 0, 0, 390, 391, 5, 99, 0, 0, 391, 392, 5, 111, 0, 0, 392, 393, 5, 110, 0, 0, 393, 394, 5, 115, 0, 0, 394, 395, 5, 116, 0, 0, 395, 396, 5, 114, 0, 0, 396, 397, 5, 117, 0, 0, 397, 398, 5, 99, 0, 0, 398, 399, 5, 116, 0, 0, 399, 400, 5, 115, 0, 0, 400, 38, 1, 0, 0, 0, 401, 402, 5, 105, 0, 0, 402, 403, 5, 110, 0, 0, 403, 404, 5, 112, 0, 0, 404, 405, 5, 117, 0, 0, 405, 406, 5, 116, 0, 0, 406, 40, 1, 0, 0, 0, 407, 408, 5, 99, 0, 0, 408, 409, 5, 111, 0, 0, 409, 410, 5, 110, 0, 0, 410, 411, 5, 102, 0, 0, 411, 412, 5, 111, 0, 0, 412, 413, 5, 114, 0, 0, 413, 414, 5, 109, 0, 0, 414, 42, 1, 0, 0, 0, 415, 416, 5, 97, 0, 0, 416, 417, 5, 115, 0, 0, 417, 44, 1, 0, 0, 0, 418, 419, 5, 98, 0, 0, 419, 420, 5, 105, 0, 0, 420, 421, 5, 110, 0, 0, 421, 422, 5, 100, 0, 0, 422, 46, 1, 0, 0, 0, 423, 424, 5, 116, 0, 0, 424, 425, 5, 111, 0, 0, 425, 48, 1, 0, 0, 0, 426, 427, 5, 112, 0, 0, 427, 428, 5, 114, 0, 0, 428, 429, 5, 105, 0, 0, 429, 430, 5, 118, 0, 0, 430, 431, 5, 97, 0, 0, 431, 432, 5, 116, 0, 0, 432, 433, 5, 101, 0, 0, 433, 50, 1, 0, 0, 0, 434, 435, 5, 115, 0, 0, 435, 436, 5, 104, 0, 0, 436, 437, 5, 97, 0, 0, 437, 438, 5, 114, 0, 0, 438, 439, 5, 101, 0, 0, 439, 440, 5, 100, 0, 0, 440, 52, 1, 0, 0, 0, 441, 442, 5, 115, 0, 0, 442, 443, 5, 116, 0, 0, 443, 444, 5, 97, 0, 0, 444, 445, 5, 116, 0, 0, 445, 446, 5, 101, 0, 0, 446, 54, 1, 0, 0, 0, 447, 448, 5, 101, 0, 0, 448, 449, 5, 100, 0, 0, 449, 450, 5, 103, 0, 0, 450, 451, 5, 101, 0, 0, 451, 56, 1, 0, 0, 0, 452, 453, 5, 112, 0, 0, 453, 454, 5, 114, 0, 0, 454, 455, 5, 111, 0, 0, 455, 456, 5, 106, 0, 0, 456, 457, 5, 101, 0, 0, 457, 458, 5, 99, 0, 0, 458, 459, 5, 116, 0, 0, 459, 460, 5, 105, 0, 0, 460, 461, 5, 111, 0, 0, 461, 462, 5, 110, 0, 0, 462, 58, 1, 0, 0, 0, 463, 464, 5, 119, 0, 0, 464, 465, 5, 105, 0, 0, 465, 466, 5, 116, 0, 0, 466, 467, 5, 104, 0, 0, 467, 60, 1, 0, 0, 0, 468, 469, 5, 117, 0, 0, 469, 470, 5, 115, 0, 0, 470, 471, 5, 105, 0, 0, 471, 472, 5, 110, 0, 0, 472, 473, 5, 103, 0, 0, 473, 62, 1, 0, 0, 0, 474, 475, 5, 118, 0, 0, 475, 476, 5, 105, 0, 0, 476, 477, 5, 97, 0, 0, 477, 64, 1, 0, 0, 0, 478, 479, 5, 109, 0, 0, 479, 480, 5, 97, 0, 0, 480, 481, 5, 116, 0, 0, 481, 482, 5, 101, 0, 0, 482, 483, 5, 114, 0, 0, 483, 484, 5, 105, 0, 0, 484, 485, 5, 97, 0, 0, 485, 486, 5, 108, 0, 0, 486, 487, 5, 105, 0, 0, 487, 488, 5, 122, 0, 0, 488, 489, 5, 101, 0, 0, 489, 66, 1, 0, 0, 0, 490, 491, 5, 105, 0, 0, 491, 492, 5, 102, 0, 0, 492, 68, 1, 0, 0, 0, 493, 494, 5, 97, 0, 0, 494, 495, 5, 98, 0, 0, 495, 496, 5, 115, 0, 0, 496, 497, 5, 101, 0, 0, 497, 498, 5, 110, 0, 0, 498, 499, 5, 116, 0, 0, 499, 70, 1, 0, 0, 0, 500, 501, 5, 111, 0, 0, 501, 502, 5, 110, 0, 0, 502, 72, 1, 0, 0, 0, 503, 504, 5, 112, 0, 0, 504, 505, 5, 111, 0, 0, 505, 506, 5, 108, 0, 0, 506, 507, 5, 105, 0, 0, 507, 508, 5, 99, 0, 0, 508, 509, 5, 121, 0, 0, 509, 74, 1, 0, 0, 0, 510, 511, 5, 100, 0, 0, 511, 512, 5, 101, 0, 0, 512, 513, 5, 102, 0, 0, 513, 514, 5, 97, 0, 0, 514, 515, 5, 117, 0, 0, 515, 516, 5, 108, 0, 0, 516, 517, 5, 116, 0, 0, 517, 76, 1, 0, 0, 0, 518, 519, 5, 115, 0, 0, 519, 520, 5, 111, 0, 0, 520, 521, 5, 117, 0, 0, 521, 522, 5, 114, 0, 0, 522, 523, 5, 99, 0, 0, 523, 524, 5, 101, 0, 0, 524, 78, 1, 0, 0, 0, 525, 526, 5, 114, 0, 0, 526, 527, 5, 101, 0, 0, 527, 528, 5, 112, 0, 0, 528, 529, 5, 111, 0, 0, 529, 530, 5, 115, 0, 0, 530, 531, 5, 105, 0, 0, 531, 532, 5, 116, 0, 0, 532, 533, 5, 111, 0, 0, 533, 534, 5, 114, 0, 0, 534, 535, 5, 121, 0, 0, 535, 80, 1, 0, 0, 0, 536, 537, 5, 99, 0, 0, 537, 538, 5, 111, 0, 0, 538, 539, 5, 109, 0, 0, 539, 540, 5, 109, 0, 0, 540, 541, 5, 105, 0, 0, 541, 542, 5, 116, 0, 0, 542, 82, 1, 0, 0, 0, 543, 544, 5, 114, 0, 0, 544, 545, 5, 101, 0, 0, 545, 546, 5, 118, 0, 0, 546, 547, 5, 105, 0, 0, 547, 548, 5, 115, 0, 0, 548, 549, 5, 105, 0, 0, 549, 550, 5, 111, 0, 0, 550, 551, 5, 110, 0, 0, 551, 84, 1, 0, 0, 0, 552, 553, 5, 115, 0, 0, 553, 554, 5, 101, 0, 0, 554, 555, 5, 109, 0, 0, 555, 556, 5, 97, 0, 0, 556, 557, 5, 110, 0, 0, 557, 558, 5, 116, 0, 0, 558, 559, 5, 105, 0, 0, 559, 560, 5, 99, 0, 0, 560, 561, 5, 45, 0, 0, 561, 562, 5, 109, 0, 0, 562, 563, 5, 97, 0, 0, 563, 564, 5, 106, 0, 0, 564, 565, 5, 111, 0, 0, 565, 566, 5, 114, 0, 0, 566, 86, 1, 0, 0, 0, 567, 568, 5, 111, 0, 0, 568, 569, 5, 110, 0, 0, 569, 570, 5, 45, 0, 0, 570, 571, 5, 100, 0, 0, 571, 572, 5, 101, 0, 0, 572, 573, 5, 108, 0, 0, 573, 574, 5, 101, 0, 0, 574, 575, 5, 116, 0, 0, 575, 576, 5, 101, 0, 0, 576, 88, 1, 0, 0, 0, 577, 578, 5, 114, 0, 0, 578, 579, 5, 101, 0, 0, 579, 580, 5, 116, 0, 0, 580, 581, 5, 97, 0, 0, 581, 582, 5, 105, 0, 0, 582, 583, 5, 110, 0, 0, 583, 584, 5, 45, 0, 0, 584, 585, 5, 111, 0, 0, 585, 586, 5, 116, 0, 0, 586, 587, 5, 104, 0, 0, 587, 588, 5, 101, 0, 0, 588, 589, 5, 114, 0, 0, 589, 90, 1, 0, 0, 0, 590, 591, 5, 107, 0, 0, 591, 592, 5, 101, 0, 0, 592, 593, 5, 121, 0, 0, 593, 594, 5, 101, 0, 0, 594, 595, 5, 100, 0, 0, 595, 92, 1, 0, 0, 0, 596, 597, 5, 112, 0, 0, 597, 598, 5, 117, 0, 0, 598, 599, 5, 98, 0, 0, 599, 600, 5, 108, 0, 0, 600, 601, 5, 105, 0, 0, 601, 602, 5, 99, 0, 0, 602, 603, 5, 45, 0, 0, 603, 604, 5, 116, 0, 0, 604, 605, 5, 114, 0, 0, 605, 606, 5, 97, 0, 0, 606, 607, 5, 118, 0, 0, 607, 608, 5, 101, 0, 0, 608, 609, 5, 114, 0, 0, 609, 610, 5, 115, 0, 0, 610, 611, 5, 97, 0, 0, 611, 612, 5, 108, 0, 0, 612, 94, 1, 0, 0, 0, 613, 614, 5, 105, 0, 0, 614, 615, 5, 100, 0, 0, 615, 96, 1, 0, 0, 0, 616, 617, 5, 100, 0, 0, 617, 618, 5, 111, 0, 0, 618, 619, 5, 99, 0, 0, 619, 98, 1, 0, 0, 0, 620, 621, 5, 109, 0, 0, 621, 622, 5, 111, 0, 0, 622, 623, 5, 100, 0, 0, 623, 624, 5, 101, 0, 0, 624, 100, 1, 0, 0, 0, 625, 626, 5, 101, 0, 0, 626, 627, 5, 109, 0, 0, 627, 628, 5, 105, 0, 0, 628, 629, 5, 116, 0, 0, 629, 630, 5, 115, 0, 0, 630, 102, 1, 0, 0, 0, 631, 632, 5, 114, 0, 0, 632, 633, 5, 101, 0, 0, 633, 634, 5, 99, 0, 0, 634, 635, 5, 101, 0, 0, 635, 636, 5, 105, 0, 0, 636, 637, 5, 118, 0, 0, 637, 638, 5, 101, 0, 0, 638, 639, 5, 114, 0, 0, 639, 104, 1, 0, 0, 0, 640, 641, 5, 114, 0, 0, 641, 642, 5, 101, 0, 0, 642, 643, 5, 113, 0, 0, 643, 644, 5, 117, 0, 0, 644, 645, 5, 105, 0, 0, 645, 646, 5, 114, 0, 0, 646, 647, 5, 101, 0, 0, 647, 648, 5, 115, 0, 0, 648, 106, 1, 0, 0, 0, 649, 650, 5, 97, 0, 0, 650, 651, 5, 110, 0, 0, 651, 652, 5, 121, 0, 0, 652, 108, 1, 0, 0, 0, 653, 654, 5, 103, 0, 0, 654, 655, 5, 101, 0, 0, 655, 656, 5, 116, 0, 0, 656, 110, 1, 0, 0, 0, 657, 658, 5, 115, 0, 0, 658, 659, 5, 101, 0, 0, 659, 660, 5, 116, 0, 0, 660, 112, 1, 0, 0, 0, 661, 662, 5, 119, 0, 0, 662, 663, 5, 97, 0, 0, 663, 664, 5, 116, 0, 0, 664, 665, 5, 99, 0, 0, 665, 666, 5, 104, 0, 0, 666, 114, 1, 0, 0, 0, 667, 668, 5, 115, 0, 0, 668, 669, 5, 116, 0, 0, 669, 670, 5, 97, 0, 0, 670, 671, 5, 114, 0, 0, 671, 672, 5, 116, 0, 0, 672, 116, 1, 0, 0, 0, 673, 674, 5, 115, 0, 0, 674, 675, 5, 116, 0, 0, 675, 676, 5, 111, 0, 0, 676, 677, 5, 112, 0, 0, 677, 118, 1, 0, 0, 0, 678, 679, 5, 114, 0, 0, 679, 680, 5, 101, 0, 0, 680, 681, 5, 97, 0, 0, 681, 682, 5, 100, 0, 0, 682, 120, 1, 0, 0, 0, 683, 684, 5, 119, 0, 0, 684, 685, 5, 114, 0, 0, 685, 686, 5, 105, 0, 0, 686, 687, 5, 116, 0, 0, 687, 688, 5, 101, 0, 0, 688, 122, 1, 0, 0, 0, 689, 690, 5, 114, 0, 0, 690, 691, 5, 101, 0, 0, 691, 692, 5, 115, 0, 0, 692, 693, 5, 111, 0, 0, 693, 694, 5, 108, 0, 0, 694, 695, 5, 118, 0, 0, 695, 696, 5, 101, 0, 0, 696, 124, 1, 0, 0, 0, 697, 698, 5, 99, 0, 0, 698, 699, 5, 111, 0, 0, 699, 700, 5, 110, 0, 0, 700, 701, 5, 110, 0, 0, 701, 702, 5, 101, 0, 0, 702, 703, 5, 99, 0, 0, 703, 704, 5, 116, 0, 0, 704, 126, 1, 0, 0, 0, 705, 706, 5, 100, 0, 0, 706, 707, 5, 105, 0, 0, 707, 708, 5, 115, 0, 0, 708, 709, 5, 99, 0, 0, 709, 710, 5, 111, 0, 0, 710, 711, 5, 110, 0, 0, 711, 712, 5, 110, 0, 0, 712, 713, 5, 101, 0, 0, 713, 714, 5, 99, 0, 0, 714, 715, 5, 116, 0, 0, 715, 128, 1, 0, 0, 0, 716, 717, 5, 99, 0, 0, 717, 718, 5, 97, 0, 0, 718, 719, 5, 108, 0, 0, 719, 720, 5, 108, 0, 0, 720, 130, 1, 0, 0, 0, 721, 722, 5, 119, 0, 0, 722, 723, 5, 97, 0, 0, 723, 724, 5, 116, 0, 0, 724, 725, 5, 99, 0, 0, 725, 726, 5, 104, 0, 0, 726, 727, 5, 45, 0, 0, 727, 728, 5, 115, 0, 0, 728, 729, 5, 116, 0, 0, 729, 730, 5, 97, 0, 0, 730, 731, 5, 114, 0, 0, 731, 732, 5, 116, 0, 0, 732, 132, 1, 0, 0, 0, 733, 734, 5, 119, 0, 0, 734, 735, 5, 97, 0, 0, 735, 736, 5, 116, 0, 0, 736, 737, 5, 99, 0, 0, 737, 738, 5, 104, 0, 0, 738, 739, 5, 45, 0, 0, 739, 740, 5, 115, 0, 0, 740, 741, 5, 116, 0, 0, 741, 742, 5, 111, 0, 0, 742, 743, 5, 112, 0, 0, 743, 134, 1, 0, 0, 0, 744, 745, 5, 115, 0, 0, 745, 746, 5, 117, 0, 0, 746, 747, 5, 98, 0, 0, 747, 748, 5, 115, 0, 0, 748, 749, 5, 99, 0, 0, 749, 750, 5, 114, 0, 0, 750, 751, 5, 105, 0, 0, 751, 752, 5, 98, 0, 0, 752, 753, 5, 101, 0, 0, 753, 136, 1, 0, 0, 0, 754, 755, 5, 117, 0, 0, 755, 756, 5, 110, 0, 0, 756, 757, 5, 115, 0, 0, 757, 758, 5, 117, 0, 0, 758, 759, 5, 98, 0, 0, 759, 760, 5, 115, 0, 0, 760, 761, 5, 99, 0, 0, 761, 762, 5, 114, 0, 0, 762, 763, 5, 105, 0, 0, 763, 764, 5, 98, 0, 0, 764, 765, 5, 101, 0, 0, 765, 138, 1, 0, 0, 0, 766, 767, 5, 111, 0, 0, 767, 768, 5, 112, 0, 0, 768, 769, 5, 116, 0, 0, 769, 770, 5, 105, 0, 0, 770, 771, 5, 109, 0, 0, 771, 772, 5, 105, 0, 0, 772, 773, 5, 115, 0, 0, 773, 774, 5, 116, 0, 0, 774, 775, 5, 105, 0, 0, 775, 776, 5, 99, 0, 0, 776, 777, 5, 45, 0, 0, 777, 778, 5, 114, 0, 0, 778, 779, 5, 101, 0, 0, 779, 780, 5, 103, 0, 0, 780, 781, 5, 105, 0, 0, 781, 782, 5, 115, 0, 0, 782, 783, 5, 116, 0, 0, 783, 784, 5, 101, 0, 0, 784, 785, 5, 114, 0, 0, 785, 140, 1, 0, 0, 0, 786, 787, 5, 99, 0, 0, 787, 788, 5, 114, 0, 0, 788, 789, 5, 100, 0, 0, 789, 790, 5, 116, 0, 0, 790, 142, 1, 0, 0, 0, 791, 792, 5, 111, 0, 0, 792, 793, 5, 112, 0, 0, 793, 794, 5, 116, 0, 0, 794, 795, 5, 105, 0, 0, 795, 796, 5, 111, 0, 0, 796, 797, 5, 110, 0, 0, 797, 798, 5, 97, 0, 0, 798, 799, 5, 108, 0, 0, 799, 800, 5, 45, 0, 0, 800, 801, 5, 111, 0, 0, 801, 802, 5, 110, 0, 0, 802, 803, 5, 101, 0, 0, 803, 144, 1, 0, 0, 0, 804, 805, 5, 101, 0, 0, 805, 806, 5, 120, 0, 0, 806, 807, 5, 97, 0, 0, 807, 808, 5, 99, 0, 0, 808, 809, 5, 116, 0, 0, 809, 810, 5, 108, 0, 0, 810, 811, 5, 121, 0, 0, 811, 812, 5, 45, 0, 0, 812, 813, 5, 111, 0, 0, 813, 814, 5, 110, 0, 0, 814, 815, 5, 101, 0, 0, 815, 146, 1, 0, 0, 0, 816, 817, 5, 109, 0, 0, 817, 818, 5, 97, 0, 0, 818, 819, 5, 110, 0, 0, 819, 820, 5, 121, 0, 0, 820, 821, 5, 45, 0, 0, 821, 822, 5, 117, 0, 0, 822, 823, 5, 110, 0, 0, 823, 824, 5, 105, 0, 0, 824, 825, 5, 113, 0, 0, 825, 826, 5, 117, 0, 0, 826, 827, 5, 101, 0, 0, 827, 148, 1, 0, 0, 0, 828, 829, 5, 109, 0, 0, 829, 830, 5, 97, 0, 0, 830, 831, 5, 110, 0, 0, 831, 832, 5, 121, 0, 0, 832, 150, 1, 0, 0, 0, 833, 834, 5, 111, 0, 0, 834, 835, 5, 114, 0, 0, 835, 836, 5, 100, 0, 0, 836, 837, 5, 101, 0, 0, 837, 838, 5, 114, 0, 0, 838, 839, 5, 101, 0, 0, 839, 840, 5, 100, 0, 0, 840, 152, 1, 0, 0, 0, 841, 842, 5, 117, 0, 0, 842, 843, 5, 110, 0, 0, 843, 844, 5, 105, 0, 0, 844, 845, 5, 116, 0, 0, 845, 154, 1, 0, 0, 0, 846, 847, 5, 119, 0, 0, 847, 848, 5, 97, 0, 0, 848, 849, 5, 116, 0, 0, 849, 850, 5, 99, 0, 0, 850, 851, 5, 104, 0, 0, 851, 852, 5, 45, 0, 0, 852, 853, 5, 104, 0, 0, 853, 854, 5, 97, 0, 0, 854, 855, 5, 110, 0, 0, 855, 856, 5, 100, 0, 0, 856, 857, 5, 108, 0, 0, 857, 858, 5, 101, 0, 0, 858, 156, 1, 0, 0, 0, 859, 860, 5, 109, 0, 0, 860, 861, 5, 101, 0, 0, 861, 862, 5, 115, 0, 0, 862, 863, 5, 115, 0, 0, 863, 864, 5, 97, 0, 0, 864, 865, 5, 103, 0, 0, 865, 866, 5, 101, 0, 0, 866, 158, 1, 0, 0, 0, 867, 868, 5, 97, 0, 0, 868, 869, 5, 116, 0, 0, 869, 870, 5, 111, 0, 0, 870, 871, 5, 109, 0, 0, 871, 872, 5, 45, 0, 0, 872, 873, 5, 114, 0, 0, 873, 874, 5, 101, 0, 0, 874, 875, 5, 102, 0, 0, 875, 160, 1, 0, 0, 0, 876, 877, 5, 105, 0, 0, 877, 878, 5, 110, 0, 0, 878, 879, 5, 116, 0, 0, 879, 880, 5, 101, 0, 0, 880, 881, 5, 114, 0, 0, 881, 882, 5, 102, 0, 0, 882, 883, 5, 97, 0, 0, 883, 884, 5, 99, 0, 0, 884, 885, 5, 101, 0, 0, 885, 886, 5, 45, 0, 0, 886, 887, 5, 114, 0, 0, 887, 888, 5, 101, 0, 0, 888, 889, 5, 102, 0, 0, 889, 162, 1, 0, 0, 0, 890, 891, 5, 111, 0, 0, 891, 892, 5, 112, 0, 0, 892, 893, 5, 116, 0, 0, 893, 894, 5, 105, 0, 0, 894, 895, 5, 111, 0, 0, 895, 896, 5, 110, 0, 0, 896, 897, 5, 97, 0, 0, 897, 898, 5, 108, 0, 0, 898, 164, 1, 0, 0, 0, 899, 900, 5, 108, 0, 0, 900, 901, 5, 105, 0, 0, 901, 902, 5, 115, 0, 0, 902, 903, 5, 116, 0, 0, 903, 166, 1, 0, 0, 0, 904, 905, 5, 114, 0, 0, 905, 906, 5, 101, 0, 0, 906, 907, 5, 99, 0, 0, 907, 908, 5, 111, 0, 0, 908, 909, 5, 114, 0, 0, 909, 910, 5, 100, 0, 0, 910, 168, 1, 0, 0, 0, 911, 912, 5, 98, 0, 0, 912, 913, 5, 111, 0, 0, 913, 914, 5, 111, 0, 0, 914, 915, 5, 108, 0, 0, 915, 170, 1, 0, 0, 0, 916, 917, 5, 98, 0, 0, 917, 918, 5, 121, 0, 0, 918, 919, 5, 116, 0, 0, 919, 920, 5, 101, 0, 0, 920, 921, 5, 115, 0, 0, 921, 172, 1, 0, 0, 0, 922, 923, 5, 100, 0, 0, 923, 924, 5, 111, 0, 0, 924, 925, 5, 117, 0, 0, 925, 926, 5, 98, 0, 0, 926, 927, 5, 108, 0, 0, 927, 928, 5, 101, 0, 0, 928, 174, 1, 0, 0, 0, 929, 930, 5, 105, 0, 0, 930, 931, 5, 110, 0, 0, 931, 932, 5, 116, 0, 0, 932, 933, 5, 51, 0, 0, 933, 934, 5, 50, 0, 0, 934, 176, 1, 0, 0, 0, 935, 936, 5, 105, 0, 0, 936, 937, 5, 110, 0, 0, 937, 938, 5, 116, 0, 0, 938, 939, 5, 54, 0, 0, 939, 940, 5, 52, 0, 0, 940, 178, 1, 0, 0, 0, 941, 942, 5, 115, 0, 0, 942, 943, 5, 116, 0, 0, 943, 944, 5, 114, 0, 0, 944, 945, 5, 105, 0, 0, 945, 946, 5, 110, 0, 0, 946, 947, 5, 103, 0, 0, 947, 180, 1, 0, 0, 0, 948, 949, 5, 117, 0, 0, 949, 950, 5, 105, 0, 0, 950, 951, 5, 110, 0, 0, 951, 952, 5, 116, 0, 0, 952, 953, 5, 51, 0, 0, 953, 954, 5, 50, 0, 0, 954, 182, 1, 0, 0, 0, 955, 956, 5, 117, 0, 0, 956, 957, 5, 105, 0, 0, 957, 958, 5, 110, 0, 0, 958, 959, 5, 116, 0, 0, 959, 960, 5, 54, 0, 0, 960, 961, 5, 52, 0, 0, 961, 184, 1, 0, 0, 0, 962, 963, 5, 116, 0, 0, 963, 964, 5, 114, 0, 0, 964, 965, 5, 117, 0, 0, 965, 966, 5, 101, 0, 0, 966, 186, 1, 0, 0, 0, 967, 968, 5, 102, 0, 0, 968, 969, 5, 97, 0, 0, 969, 970, 5, 108, 0, 0, 970, 971, 5, 115, 0, 0, 971, 972, 5, 101, 0, 0, 972, 188, 1, 0, 0, 0, 973, 974, 5, 110, 0, 0, 974, 975, 5, 117, 0, 0, 975, 976, 5, 108, 0, 0, 976, 977, 5, 108, 0, 0, 977, 190, 1, 0, 0, 0, 978, 979, 5, 45, 0, 0, 979, 980, 5, 62, 0, 0, 980, 192, 1, 0, 0, 0, 981, 982, 5, 58, 0, 0, 982, 194, 1, 0, 0, 0, 983, 984, 5, 59, 0, 0, 984, 196, 1, 0, 0, 0, 985, 986, 5, 44, 0, 0, 986, 198, 1, 0, 0, 0, 987, 988, 5, 46, 0, 0, 988, 200, 1, 0, 0, 0, 989, 990, 5, 123, 0, 0, 990, 202, 1, 0, 0, 0, 991, 992, 5, 125, 0, 0, 992, 204, 1, 0, 0, 0, 993, 994, 5, 91, 0, 0, 994, 206, 1, 0, 0, 0, 995, 996, 5, 93, 0, 0, 996, 208, 1, 0, 0, 0, 997, 998, 5, 40, 0, 0, 998, 210, 1, 0, 0, 0, 999, 1000, 5, 41, 0, 0, 1000, 212, 1, 0, 0, 0, 1001, 1002, 5, 60, 0, 0, 1002, 214, 1, 0, 0, 0, 1003, 1004, 5, 62, 0, 0, 1004, 216, 1, 0, 0, 0, 1005, 1006, 5, 38, 0, 0, 1006, 218, 1, 0, 0, 0, 1007, 1008, 5, 61, 0, 0, 1008, 220, 1, 0, 0, 0, 1009, 1011, 5, 45, 0, 0, 1010, 1009, 1, 0, 0, 0, 1010, 1011, 1, 0, 0, 0, 1011, 1013, 1, 0, 0, 0, 1012, 1014, 7, 0, 0, 0, 1013, 1012, 1, 0, 0, 0, 1014, 1015, 1, 0, 0, 0, 1015, 1013, 1, 0, 0, 0, 1015, 1016, 1, 0, 0, 0, 1016, 222, 1, 0, 0, 0, 1017, 1019, 5, 45, 0, 0, 1018, 1017, 1, 0, 0, 0, 1018, 1019, 1, 0, 0, 0, 1019, 1028, 1, 0, 0, 0, 1020, 1029, 5, 48, 0, 0, 1021, 1025, 7, 1, 0, 0, 1022, 1024, 7, 0, 0, 0, 1023, 1022, 1, 0, 0, 0, 1024, 1027, 1, 0, 0, 0, 1025, 1023, 1, 0, 0, 0, 1025, 1026, 1, 0, 0, 0, 1026, 1029, 1, 0, 0, 0, 1027, 1025, 1, 0, 0, 0, 1028, 1020, 1, 0, 0, 0, 1028, 1021, 1, 0, 0, 0, 1029, 1036, 1, 0, 0, 0, 1030, 1032, 5, 46, 0, 0, 1031, 1033, 7, 0, 0, 0, 1032, 1031, 1, 0, 0, 0, 1033, 1034, 1, 0, 0, 0, 1034, 1032, 1, 0, 0, 0, 1034, 1035, 1, 0, 0, 0, 1035, 1037, 1, 0, 0, 0, 1036, 1030, 1, 0, 0, 0, 1036, 1037, 1, 0, 0, 0, 1037, 1047, 1, 0, 0, 0, 1038, 1040, 7, 2, 0, 0, 1039, 1041, 7, 3, 0, 0, 1040, 1039, 1, 0, 0, 0, 1040, 1041, 1, 0, 0, 0, 1041, 1043, 1, 0, 0, 0, 1042, 1044, 7, 0, 0, 0, 1043, 1042, 1, 0, 0, 0, 1044, 1045, 1, 0, 0, 0, 1045, 1043, 1, 0, 0, 0, 1045, 1046, 1, 0, 0, 0, 1046, 1048, 1, 0, 0, 0, 1047, 1038, 1, 0, 0, 0, 1047, 1048, 1, 0, 0, 0, 1048, 224, 1, 0, 0, 0, 1049, 1053, 7, 4, 0, 0, 1050, 1052, 7, 5, 0, 0, 1051, 1050, 1, 0, 0, 0, 1052, 1055, 1, 0, 0, 0, 1053, 1051, 1, 0, 0, 0, 1053, 1054, 1, 0, 0, 0, 1054, 226, 1, 0, 0, 0, 1055, 1053, 1, 0, 0, 0, 1056, 1061, 5, 34, 0, 0, 1057, 1060, 3, 229, 114, 0, 1058, 1060, 8, 6, 0, 0, 1059, 1057, 1, 0, 0, 0, 1059, 1058, 1, 0, 0, 0, 1060, 1063, 1, 0, 0, 0, 1061, 1059, 1, 0, 0, 0, 1061, 1062, 1, 0, 0, 0, 1062, 1064, 1, 0, 0, 0, 1063, 1061, 1, 0, 0, 0, 1064, 1065, 5, 34, 0, 0, 1065, 228, 1, 0, 0, 0, 1066, 1074, 5, 92, 0, 0, 1067, 1075, 7, 7, 0, 0, 1068, 1069, 5, 117, 0, 0, 1069, 1070, 3, 231, 115, 0, 1070, 1071, 3, 231, 115, 0, 1071, 1072, 3, 231, 115, 0, 1072, 1073, 3, 231, 115, 0, 1073, 1075, 1, 0, 0, 0, 1074, 1067, 1, 0, 0, 0, 1074, 1068, 1, 0, 0, 0, 1075, 230, 1, 0, 0, 0, 1076, 1077, 7, 8, 0, 0, 1077, 232, 1, 0, 0, 0, 1078, 1079, 5, 47, 0, 0, 1079, 1080, 5, 47, 0, 0, 1080, 1084, 1, 0, 0, 0, 1081, 1083, 8, 9, 0, 0, 1082, 1081, 1, 0, 0, 0, 1083, 1086, 1, 0, 0, 0, 1084, 1082, 1, 0, 0, 0, 1084, 1085, 1, 0, 0, 0, 1085, 1087, 1, 0, 0, 0, 1086, 1084, 1, 0, 0, 0, 1087, 1088, 6, 116, 0, 0, 1088, 234, 1, 0, 0, 0, 1089, 1090, 5, 47, 0, 0, 1090, 1091, 5, 42, 0, 0, 1091, 1095, 1, 0, 0, 0, 1092, 1094, 9, 0, 0, 0, 1093, 1092, 1, 0, 0, 0, 1094, 1097, 1, 0, 0, 0, 1095, 1096, 1, 0, 0, 0, 1095, 1093, 1, 0, 0, 0, 1096, 1098, 1, 0, 0, 0, 1097, 1095, 1, 0, 0, 0, 1098, 1099, 5, 42, 0, 0, 1099, 1100, 5, 47, 0, 0, 1100, 1101, 1, 0, 0, 0, 1101, 1102, 6, 117, 0, 0, 1102, 236, 1, 0, 0, 0, 1103, 1105, 7, 10, 0, 0, 1104, 1103, 1, 0, 0, 0, 1105, 1106, 1, 0, 0, 0, 1106, 1104, 1, 0, 0, 0, 1106, 1107, 1, 0, 0, 0, 1107, 1108, 1, 0, 0, 0, 1108, 1109, 6, 118, 0, 0, 1109, 238, 1, 0, 0, 0, 18, 0, 1010, 1015, 1018, 1025, 1028, 1034, 1036, 1040, 1045, 1047, 1053, 1059, 1061, 1074, 1084, 1095, 1106, 1, 0, 1, 0] \ No newline at end of file +[4, 0, 118, 1119, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 98, 1, 98, 1, 99, 1, 99, 1, 100, 1, 100, 1, 101, 1, 101, 1, 102, 1, 102, 1, 103, 1, 103, 1, 104, 1, 104, 1, 105, 1, 105, 1, 106, 1, 106, 1, 107, 1, 107, 1, 108, 1, 108, 1, 109, 1, 109, 1, 110, 1, 110, 1, 111, 3, 111, 1020, 8, 111, 1, 111, 4, 111, 1023, 8, 111, 11, 111, 12, 111, 1024, 1, 112, 3, 112, 1028, 8, 112, 1, 112, 1, 112, 1, 112, 5, 112, 1033, 8, 112, 10, 112, 12, 112, 1036, 9, 112, 3, 112, 1038, 8, 112, 1, 112, 1, 112, 4, 112, 1042, 8, 112, 11, 112, 12, 112, 1043, 3, 112, 1046, 8, 112, 1, 112, 1, 112, 3, 112, 1050, 8, 112, 1, 112, 4, 112, 1053, 8, 112, 11, 112, 12, 112, 1054, 3, 112, 1057, 8, 112, 1, 113, 1, 113, 5, 113, 1061, 8, 113, 10, 113, 12, 113, 1064, 9, 113, 1, 114, 1, 114, 1, 114, 5, 114, 1069, 8, 114, 10, 114, 12, 114, 1072, 9, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 3, 115, 1084, 8, 115, 1, 116, 1, 116, 1, 117, 1, 117, 1, 117, 1, 117, 5, 117, 1092, 8, 117, 10, 117, 12, 117, 1095, 9, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 118, 5, 118, 1103, 8, 118, 10, 118, 12, 118, 1106, 9, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 119, 4, 119, 1114, 8, 119, 11, 119, 12, 119, 1115, 1, 119, 1, 119, 1, 1104, 0, 120, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 72, 145, 73, 147, 74, 149, 75, 151, 76, 153, 77, 155, 78, 157, 79, 159, 80, 161, 81, 163, 82, 165, 83, 167, 84, 169, 85, 171, 86, 173, 87, 175, 88, 177, 89, 179, 90, 181, 91, 183, 92, 185, 93, 187, 94, 189, 95, 191, 96, 193, 97, 195, 98, 197, 99, 199, 100, 201, 101, 203, 102, 205, 103, 207, 104, 209, 105, 211, 106, 213, 107, 215, 108, 217, 109, 219, 110, 221, 111, 223, 112, 225, 113, 227, 114, 229, 115, 231, 0, 233, 0, 235, 116, 237, 117, 239, 118, 1, 0, 11, 1, 0, 48, 57, 1, 0, 49, 57, 2, 0, 69, 69, 101, 101, 2, 0, 43, 43, 45, 45, 3, 0, 65, 90, 95, 95, 97, 122, 4, 0, 48, 57, 65, 90, 95, 95, 97, 122, 4, 0, 10, 10, 13, 13, 34, 34, 92, 92, 8, 0, 34, 34, 47, 47, 92, 92, 98, 98, 102, 102, 110, 110, 114, 114, 116, 116, 3, 0, 48, 57, 65, 70, 97, 102, 2, 0, 10, 10, 13, 13, 3, 0, 9, 10, 13, 13, 32, 32, 1133, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, 183, 1, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 189, 1, 0, 0, 0, 0, 191, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 197, 1, 0, 0, 0, 0, 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 203, 1, 0, 0, 0, 0, 205, 1, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 209, 1, 0, 0, 0, 0, 211, 1, 0, 0, 0, 0, 213, 1, 0, 0, 0, 0, 215, 1, 0, 0, 0, 0, 217, 1, 0, 0, 0, 0, 219, 1, 0, 0, 0, 0, 221, 1, 0, 0, 0, 0, 223, 1, 0, 0, 0, 0, 225, 1, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 229, 1, 0, 0, 0, 0, 235, 1, 0, 0, 0, 0, 237, 1, 0, 0, 0, 0, 239, 1, 0, 0, 0, 1, 241, 1, 0, 0, 0, 3, 251, 1, 0, 0, 0, 5, 256, 1, 0, 0, 0, 7, 263, 1, 0, 0, 0, 9, 272, 1, 0, 0, 0, 11, 283, 1, 0, 0, 0, 13, 287, 1, 0, 0, 0, 15, 296, 1, 0, 0, 0, 17, 303, 1, 0, 0, 0, 19, 312, 1, 0, 0, 0, 21, 317, 1, 0, 0, 0, 23, 327, 1, 0, 0, 0, 25, 338, 1, 0, 0, 0, 27, 346, 1, 0, 0, 0, 29, 352, 1, 0, 0, 0, 31, 361, 1, 0, 0, 0, 33, 371, 1, 0, 0, 0, 35, 380, 1, 0, 0, 0, 37, 392, 1, 0, 0, 0, 39, 403, 1, 0, 0, 0, 41, 409, 1, 0, 0, 0, 43, 417, 1, 0, 0, 0, 45, 420, 1, 0, 0, 0, 47, 425, 1, 0, 0, 0, 49, 432, 1, 0, 0, 0, 51, 435, 1, 0, 0, 0, 53, 443, 1, 0, 0, 0, 55, 450, 1, 0, 0, 0, 57, 456, 1, 0, 0, 0, 59, 461, 1, 0, 0, 0, 61, 472, 1, 0, 0, 0, 63, 477, 1, 0, 0, 0, 65, 483, 1, 0, 0, 0, 67, 487, 1, 0, 0, 0, 69, 499, 1, 0, 0, 0, 71, 502, 1, 0, 0, 0, 73, 509, 1, 0, 0, 0, 75, 512, 1, 0, 0, 0, 77, 519, 1, 0, 0, 0, 79, 527, 1, 0, 0, 0, 81, 534, 1, 0, 0, 0, 83, 545, 1, 0, 0, 0, 85, 552, 1, 0, 0, 0, 87, 561, 1, 0, 0, 0, 89, 576, 1, 0, 0, 0, 91, 586, 1, 0, 0, 0, 93, 599, 1, 0, 0, 0, 95, 605, 1, 0, 0, 0, 97, 622, 1, 0, 0, 0, 99, 625, 1, 0, 0, 0, 101, 629, 1, 0, 0, 0, 103, 634, 1, 0, 0, 0, 105, 640, 1, 0, 0, 0, 107, 649, 1, 0, 0, 0, 109, 658, 1, 0, 0, 0, 111, 662, 1, 0, 0, 0, 113, 666, 1, 0, 0, 0, 115, 670, 1, 0, 0, 0, 117, 676, 1, 0, 0, 0, 119, 682, 1, 0, 0, 0, 121, 687, 1, 0, 0, 0, 123, 692, 1, 0, 0, 0, 125, 698, 1, 0, 0, 0, 127, 706, 1, 0, 0, 0, 129, 714, 1, 0, 0, 0, 131, 725, 1, 0, 0, 0, 133, 730, 1, 0, 0, 0, 135, 742, 1, 0, 0, 0, 137, 753, 1, 0, 0, 0, 139, 763, 1, 0, 0, 0, 141, 775, 1, 0, 0, 0, 143, 795, 1, 0, 0, 0, 145, 800, 1, 0, 0, 0, 147, 813, 1, 0, 0, 0, 149, 825, 1, 0, 0, 0, 151, 837, 1, 0, 0, 0, 153, 842, 1, 0, 0, 0, 155, 850, 1, 0, 0, 0, 157, 855, 1, 0, 0, 0, 159, 868, 1, 0, 0, 0, 161, 876, 1, 0, 0, 0, 163, 885, 1, 0, 0, 0, 165, 899, 1, 0, 0, 0, 167, 908, 1, 0, 0, 0, 169, 913, 1, 0, 0, 0, 171, 920, 1, 0, 0, 0, 173, 925, 1, 0, 0, 0, 175, 931, 1, 0, 0, 0, 177, 938, 1, 0, 0, 0, 179, 944, 1, 0, 0, 0, 181, 950, 1, 0, 0, 0, 183, 957, 1, 0, 0, 0, 185, 964, 1, 0, 0, 0, 187, 971, 1, 0, 0, 0, 189, 976, 1, 0, 0, 0, 191, 982, 1, 0, 0, 0, 193, 987, 1, 0, 0, 0, 195, 990, 1, 0, 0, 0, 197, 992, 1, 0, 0, 0, 199, 994, 1, 0, 0, 0, 201, 996, 1, 0, 0, 0, 203, 998, 1, 0, 0, 0, 205, 1000, 1, 0, 0, 0, 207, 1002, 1, 0, 0, 0, 209, 1004, 1, 0, 0, 0, 211, 1006, 1, 0, 0, 0, 213, 1008, 1, 0, 0, 0, 215, 1010, 1, 0, 0, 0, 217, 1012, 1, 0, 0, 0, 219, 1014, 1, 0, 0, 0, 221, 1016, 1, 0, 0, 0, 223, 1019, 1, 0, 0, 0, 225, 1027, 1, 0, 0, 0, 227, 1058, 1, 0, 0, 0, 229, 1065, 1, 0, 0, 0, 231, 1075, 1, 0, 0, 0, 233, 1085, 1, 0, 0, 0, 235, 1087, 1, 0, 0, 0, 237, 1098, 1, 0, 0, 0, 239, 1113, 1, 0, 0, 0, 241, 242, 5, 119, 0, 0, 242, 243, 5, 111, 0, 0, 243, 244, 5, 114, 0, 0, 244, 245, 5, 107, 0, 0, 245, 246, 5, 115, 0, 0, 246, 247, 5, 112, 0, 0, 247, 248, 5, 97, 0, 0, 248, 249, 5, 99, 0, 0, 249, 250, 5, 101, 0, 0, 250, 2, 1, 0, 0, 0, 251, 252, 5, 116, 0, 0, 252, 253, 5, 121, 0, 0, 253, 254, 5, 112, 0, 0, 254, 255, 5, 101, 0, 0, 255, 4, 1, 0, 0, 0, 256, 257, 5, 111, 0, 0, 257, 258, 5, 98, 0, 0, 258, 259, 5, 106, 0, 0, 259, 260, 5, 101, 0, 0, 260, 261, 5, 99, 0, 0, 261, 262, 5, 116, 0, 0, 262, 6, 1, 0, 0, 0, 263, 264, 5, 115, 0, 0, 264, 265, 5, 116, 0, 0, 265, 266, 5, 111, 0, 0, 266, 267, 5, 114, 0, 0, 267, 268, 5, 97, 0, 0, 268, 269, 5, 98, 0, 0, 269, 270, 5, 108, 0, 0, 270, 271, 5, 101, 0, 0, 271, 8, 1, 0, 0, 0, 272, 273, 5, 105, 0, 0, 273, 274, 5, 109, 0, 0, 274, 275, 5, 112, 0, 0, 275, 276, 5, 108, 0, 0, 276, 277, 5, 101, 0, 0, 277, 278, 5, 109, 0, 0, 278, 279, 5, 101, 0, 0, 279, 280, 5, 110, 0, 0, 280, 281, 5, 116, 0, 0, 281, 282, 5, 115, 0, 0, 282, 10, 1, 0, 0, 0, 283, 284, 5, 114, 0, 0, 284, 285, 5, 101, 0, 0, 285, 286, 5, 102, 0, 0, 286, 12, 1, 0, 0, 0, 287, 288, 5, 102, 0, 0, 288, 289, 5, 114, 0, 0, 289, 290, 5, 97, 0, 0, 290, 291, 5, 103, 0, 0, 291, 292, 5, 109, 0, 0, 292, 293, 5, 101, 0, 0, 293, 294, 5, 110, 0, 0, 294, 295, 5, 116, 0, 0, 295, 14, 1, 0, 0, 0, 296, 297, 5, 105, 0, 0, 297, 298, 5, 109, 0, 0, 298, 299, 5, 112, 0, 0, 299, 300, 5, 111, 0, 0, 300, 301, 5, 114, 0, 0, 301, 302, 5, 116, 0, 0, 302, 16, 1, 0, 0, 0, 303, 304, 5, 101, 0, 0, 304, 305, 5, 120, 0, 0, 305, 306, 5, 116, 0, 0, 306, 307, 5, 101, 0, 0, 307, 308, 5, 114, 0, 0, 308, 309, 5, 110, 0, 0, 309, 310, 5, 97, 0, 0, 310, 311, 5, 108, 0, 0, 311, 18, 1, 0, 0, 0, 312, 313, 5, 97, 0, 0, 313, 314, 5, 116, 0, 0, 314, 315, 5, 111, 0, 0, 315, 316, 5, 109, 0, 0, 316, 20, 1, 0, 0, 0, 317, 318, 5, 105, 0, 0, 318, 319, 5, 110, 0, 0, 319, 320, 5, 116, 0, 0, 320, 321, 5, 101, 0, 0, 321, 322, 5, 114, 0, 0, 322, 323, 5, 102, 0, 0, 323, 324, 5, 97, 0, 0, 324, 325, 5, 99, 0, 0, 325, 326, 5, 101, 0, 0, 326, 22, 1, 0, 0, 0, 327, 328, 5, 105, 0, 0, 328, 329, 5, 110, 0, 0, 329, 330, 5, 116, 0, 0, 330, 331, 5, 101, 0, 0, 331, 332, 5, 114, 0, 0, 332, 333, 5, 102, 0, 0, 333, 334, 5, 97, 0, 0, 334, 335, 5, 99, 0, 0, 335, 336, 5, 101, 0, 0, 336, 337, 5, 115, 0, 0, 337, 24, 1, 0, 0, 0, 338, 339, 5, 112, 0, 0, 339, 340, 5, 97, 0, 0, 340, 341, 5, 99, 0, 0, 341, 342, 5, 107, 0, 0, 342, 343, 5, 97, 0, 0, 343, 344, 5, 103, 0, 0, 344, 345, 5, 101, 0, 0, 345, 26, 1, 0, 0, 0, 346, 347, 5, 118, 0, 0, 347, 348, 5, 97, 0, 0, 348, 349, 5, 108, 0, 0, 349, 350, 5, 117, 0, 0, 350, 351, 5, 101, 0, 0, 351, 28, 1, 0, 0, 0, 352, 353, 5, 114, 0, 0, 353, 354, 5, 101, 0, 0, 354, 355, 5, 108, 0, 0, 355, 356, 5, 97, 0, 0, 356, 357, 5, 116, 0, 0, 357, 358, 5, 105, 0, 0, 358, 359, 5, 111, 0, 0, 359, 360, 5, 110, 0, 0, 360, 30, 1, 0, 0, 0, 361, 362, 5, 111, 0, 0, 362, 363, 5, 112, 0, 0, 363, 364, 5, 101, 0, 0, 364, 365, 5, 114, 0, 0, 365, 366, 5, 97, 0, 0, 366, 367, 5, 116, 0, 0, 367, 368, 5, 105, 0, 0, 368, 369, 5, 111, 0, 0, 369, 370, 5, 110, 0, 0, 370, 32, 1, 0, 0, 0, 371, 372, 5, 102, 0, 0, 372, 373, 5, 117, 0, 0, 373, 374, 5, 110, 0, 0, 374, 375, 5, 99, 0, 0, 375, 376, 5, 116, 0, 0, 376, 377, 5, 105, 0, 0, 377, 378, 5, 111, 0, 0, 378, 379, 5, 110, 0, 0, 379, 34, 1, 0, 0, 0, 380, 381, 5, 99, 0, 0, 381, 382, 5, 111, 0, 0, 382, 383, 5, 110, 0, 0, 383, 384, 5, 115, 0, 0, 384, 385, 5, 116, 0, 0, 385, 386, 5, 114, 0, 0, 386, 387, 5, 117, 0, 0, 387, 388, 5, 99, 0, 0, 388, 389, 5, 116, 0, 0, 389, 390, 5, 111, 0, 0, 390, 391, 5, 114, 0, 0, 391, 36, 1, 0, 0, 0, 392, 393, 5, 99, 0, 0, 393, 394, 5, 111, 0, 0, 394, 395, 5, 110, 0, 0, 395, 396, 5, 115, 0, 0, 396, 397, 5, 116, 0, 0, 397, 398, 5, 114, 0, 0, 398, 399, 5, 117, 0, 0, 399, 400, 5, 99, 0, 0, 400, 401, 5, 116, 0, 0, 401, 402, 5, 115, 0, 0, 402, 38, 1, 0, 0, 0, 403, 404, 5, 105, 0, 0, 404, 405, 5, 110, 0, 0, 405, 406, 5, 112, 0, 0, 406, 407, 5, 117, 0, 0, 407, 408, 5, 116, 0, 0, 408, 40, 1, 0, 0, 0, 409, 410, 5, 99, 0, 0, 410, 411, 5, 111, 0, 0, 411, 412, 5, 110, 0, 0, 412, 413, 5, 102, 0, 0, 413, 414, 5, 111, 0, 0, 414, 415, 5, 114, 0, 0, 415, 416, 5, 109, 0, 0, 416, 42, 1, 0, 0, 0, 417, 418, 5, 97, 0, 0, 418, 419, 5, 115, 0, 0, 419, 44, 1, 0, 0, 0, 420, 421, 5, 98, 0, 0, 421, 422, 5, 105, 0, 0, 422, 423, 5, 110, 0, 0, 423, 424, 5, 100, 0, 0, 424, 46, 1, 0, 0, 0, 425, 426, 5, 115, 0, 0, 426, 427, 5, 116, 0, 0, 427, 428, 5, 97, 0, 0, 428, 429, 5, 116, 0, 0, 429, 430, 5, 105, 0, 0, 430, 431, 5, 99, 0, 0, 431, 48, 1, 0, 0, 0, 432, 433, 5, 116, 0, 0, 433, 434, 5, 111, 0, 0, 434, 50, 1, 0, 0, 0, 435, 436, 5, 112, 0, 0, 436, 437, 5, 114, 0, 0, 437, 438, 5, 105, 0, 0, 438, 439, 5, 118, 0, 0, 439, 440, 5, 97, 0, 0, 440, 441, 5, 116, 0, 0, 441, 442, 5, 101, 0, 0, 442, 52, 1, 0, 0, 0, 443, 444, 5, 115, 0, 0, 444, 445, 5, 104, 0, 0, 445, 446, 5, 97, 0, 0, 446, 447, 5, 114, 0, 0, 447, 448, 5, 101, 0, 0, 448, 449, 5, 100, 0, 0, 449, 54, 1, 0, 0, 0, 450, 451, 5, 115, 0, 0, 451, 452, 5, 116, 0, 0, 452, 453, 5, 97, 0, 0, 453, 454, 5, 116, 0, 0, 454, 455, 5, 101, 0, 0, 455, 56, 1, 0, 0, 0, 456, 457, 5, 101, 0, 0, 457, 458, 5, 100, 0, 0, 458, 459, 5, 103, 0, 0, 459, 460, 5, 101, 0, 0, 460, 58, 1, 0, 0, 0, 461, 462, 5, 112, 0, 0, 462, 463, 5, 114, 0, 0, 463, 464, 5, 111, 0, 0, 464, 465, 5, 106, 0, 0, 465, 466, 5, 101, 0, 0, 466, 467, 5, 99, 0, 0, 467, 468, 5, 116, 0, 0, 468, 469, 5, 105, 0, 0, 469, 470, 5, 111, 0, 0, 470, 471, 5, 110, 0, 0, 471, 60, 1, 0, 0, 0, 472, 473, 5, 119, 0, 0, 473, 474, 5, 105, 0, 0, 474, 475, 5, 116, 0, 0, 475, 476, 5, 104, 0, 0, 476, 62, 1, 0, 0, 0, 477, 478, 5, 117, 0, 0, 478, 479, 5, 115, 0, 0, 479, 480, 5, 105, 0, 0, 480, 481, 5, 110, 0, 0, 481, 482, 5, 103, 0, 0, 482, 64, 1, 0, 0, 0, 483, 484, 5, 118, 0, 0, 484, 485, 5, 105, 0, 0, 485, 486, 5, 97, 0, 0, 486, 66, 1, 0, 0, 0, 487, 488, 5, 109, 0, 0, 488, 489, 5, 97, 0, 0, 489, 490, 5, 116, 0, 0, 490, 491, 5, 101, 0, 0, 491, 492, 5, 114, 0, 0, 492, 493, 5, 105, 0, 0, 493, 494, 5, 97, 0, 0, 494, 495, 5, 108, 0, 0, 495, 496, 5, 105, 0, 0, 496, 497, 5, 122, 0, 0, 497, 498, 5, 101, 0, 0, 498, 68, 1, 0, 0, 0, 499, 500, 5, 105, 0, 0, 500, 501, 5, 102, 0, 0, 501, 70, 1, 0, 0, 0, 502, 503, 5, 97, 0, 0, 503, 504, 5, 98, 0, 0, 504, 505, 5, 115, 0, 0, 505, 506, 5, 101, 0, 0, 506, 507, 5, 110, 0, 0, 507, 508, 5, 116, 0, 0, 508, 72, 1, 0, 0, 0, 509, 510, 5, 111, 0, 0, 510, 511, 5, 110, 0, 0, 511, 74, 1, 0, 0, 0, 512, 513, 5, 112, 0, 0, 513, 514, 5, 111, 0, 0, 514, 515, 5, 108, 0, 0, 515, 516, 5, 105, 0, 0, 516, 517, 5, 99, 0, 0, 517, 518, 5, 121, 0, 0, 518, 76, 1, 0, 0, 0, 519, 520, 5, 100, 0, 0, 520, 521, 5, 101, 0, 0, 521, 522, 5, 102, 0, 0, 522, 523, 5, 97, 0, 0, 523, 524, 5, 117, 0, 0, 524, 525, 5, 108, 0, 0, 525, 526, 5, 116, 0, 0, 526, 78, 1, 0, 0, 0, 527, 528, 5, 115, 0, 0, 528, 529, 5, 111, 0, 0, 529, 530, 5, 117, 0, 0, 530, 531, 5, 114, 0, 0, 531, 532, 5, 99, 0, 0, 532, 533, 5, 101, 0, 0, 533, 80, 1, 0, 0, 0, 534, 535, 5, 114, 0, 0, 535, 536, 5, 101, 0, 0, 536, 537, 5, 112, 0, 0, 537, 538, 5, 111, 0, 0, 538, 539, 5, 115, 0, 0, 539, 540, 5, 105, 0, 0, 540, 541, 5, 116, 0, 0, 541, 542, 5, 111, 0, 0, 542, 543, 5, 114, 0, 0, 543, 544, 5, 121, 0, 0, 544, 82, 1, 0, 0, 0, 545, 546, 5, 99, 0, 0, 546, 547, 5, 111, 0, 0, 547, 548, 5, 109, 0, 0, 548, 549, 5, 109, 0, 0, 549, 550, 5, 105, 0, 0, 550, 551, 5, 116, 0, 0, 551, 84, 1, 0, 0, 0, 552, 553, 5, 114, 0, 0, 553, 554, 5, 101, 0, 0, 554, 555, 5, 118, 0, 0, 555, 556, 5, 105, 0, 0, 556, 557, 5, 115, 0, 0, 557, 558, 5, 105, 0, 0, 558, 559, 5, 111, 0, 0, 559, 560, 5, 110, 0, 0, 560, 86, 1, 0, 0, 0, 561, 562, 5, 115, 0, 0, 562, 563, 5, 101, 0, 0, 563, 564, 5, 109, 0, 0, 564, 565, 5, 97, 0, 0, 565, 566, 5, 110, 0, 0, 566, 567, 5, 116, 0, 0, 567, 568, 5, 105, 0, 0, 568, 569, 5, 99, 0, 0, 569, 570, 5, 45, 0, 0, 570, 571, 5, 109, 0, 0, 571, 572, 5, 97, 0, 0, 572, 573, 5, 106, 0, 0, 573, 574, 5, 111, 0, 0, 574, 575, 5, 114, 0, 0, 575, 88, 1, 0, 0, 0, 576, 577, 5, 111, 0, 0, 577, 578, 5, 110, 0, 0, 578, 579, 5, 45, 0, 0, 579, 580, 5, 100, 0, 0, 580, 581, 5, 101, 0, 0, 581, 582, 5, 108, 0, 0, 582, 583, 5, 101, 0, 0, 583, 584, 5, 116, 0, 0, 584, 585, 5, 101, 0, 0, 585, 90, 1, 0, 0, 0, 586, 587, 5, 114, 0, 0, 587, 588, 5, 101, 0, 0, 588, 589, 5, 116, 0, 0, 589, 590, 5, 97, 0, 0, 590, 591, 5, 105, 0, 0, 591, 592, 5, 110, 0, 0, 592, 593, 5, 45, 0, 0, 593, 594, 5, 111, 0, 0, 594, 595, 5, 116, 0, 0, 595, 596, 5, 104, 0, 0, 596, 597, 5, 101, 0, 0, 597, 598, 5, 114, 0, 0, 598, 92, 1, 0, 0, 0, 599, 600, 5, 107, 0, 0, 600, 601, 5, 101, 0, 0, 601, 602, 5, 121, 0, 0, 602, 603, 5, 101, 0, 0, 603, 604, 5, 100, 0, 0, 604, 94, 1, 0, 0, 0, 605, 606, 5, 112, 0, 0, 606, 607, 5, 117, 0, 0, 607, 608, 5, 98, 0, 0, 608, 609, 5, 108, 0, 0, 609, 610, 5, 105, 0, 0, 610, 611, 5, 99, 0, 0, 611, 612, 5, 45, 0, 0, 612, 613, 5, 116, 0, 0, 613, 614, 5, 114, 0, 0, 614, 615, 5, 97, 0, 0, 615, 616, 5, 118, 0, 0, 616, 617, 5, 101, 0, 0, 617, 618, 5, 114, 0, 0, 618, 619, 5, 115, 0, 0, 619, 620, 5, 97, 0, 0, 620, 621, 5, 108, 0, 0, 621, 96, 1, 0, 0, 0, 622, 623, 5, 105, 0, 0, 623, 624, 5, 100, 0, 0, 624, 98, 1, 0, 0, 0, 625, 626, 5, 100, 0, 0, 626, 627, 5, 111, 0, 0, 627, 628, 5, 99, 0, 0, 628, 100, 1, 0, 0, 0, 629, 630, 5, 109, 0, 0, 630, 631, 5, 111, 0, 0, 631, 632, 5, 100, 0, 0, 632, 633, 5, 101, 0, 0, 633, 102, 1, 0, 0, 0, 634, 635, 5, 101, 0, 0, 635, 636, 5, 109, 0, 0, 636, 637, 5, 105, 0, 0, 637, 638, 5, 116, 0, 0, 638, 639, 5, 115, 0, 0, 639, 104, 1, 0, 0, 0, 640, 641, 5, 114, 0, 0, 641, 642, 5, 101, 0, 0, 642, 643, 5, 99, 0, 0, 643, 644, 5, 101, 0, 0, 644, 645, 5, 105, 0, 0, 645, 646, 5, 118, 0, 0, 646, 647, 5, 101, 0, 0, 647, 648, 5, 114, 0, 0, 648, 106, 1, 0, 0, 0, 649, 650, 5, 114, 0, 0, 650, 651, 5, 101, 0, 0, 651, 652, 5, 113, 0, 0, 652, 653, 5, 117, 0, 0, 653, 654, 5, 105, 0, 0, 654, 655, 5, 114, 0, 0, 655, 656, 5, 101, 0, 0, 656, 657, 5, 115, 0, 0, 657, 108, 1, 0, 0, 0, 658, 659, 5, 97, 0, 0, 659, 660, 5, 110, 0, 0, 660, 661, 5, 121, 0, 0, 661, 110, 1, 0, 0, 0, 662, 663, 5, 103, 0, 0, 663, 664, 5, 101, 0, 0, 664, 665, 5, 116, 0, 0, 665, 112, 1, 0, 0, 0, 666, 667, 5, 115, 0, 0, 667, 668, 5, 101, 0, 0, 668, 669, 5, 116, 0, 0, 669, 114, 1, 0, 0, 0, 670, 671, 5, 119, 0, 0, 671, 672, 5, 97, 0, 0, 672, 673, 5, 116, 0, 0, 673, 674, 5, 99, 0, 0, 674, 675, 5, 104, 0, 0, 675, 116, 1, 0, 0, 0, 676, 677, 5, 115, 0, 0, 677, 678, 5, 116, 0, 0, 678, 679, 5, 97, 0, 0, 679, 680, 5, 114, 0, 0, 680, 681, 5, 116, 0, 0, 681, 118, 1, 0, 0, 0, 682, 683, 5, 115, 0, 0, 683, 684, 5, 116, 0, 0, 684, 685, 5, 111, 0, 0, 685, 686, 5, 112, 0, 0, 686, 120, 1, 0, 0, 0, 687, 688, 5, 114, 0, 0, 688, 689, 5, 101, 0, 0, 689, 690, 5, 97, 0, 0, 690, 691, 5, 100, 0, 0, 691, 122, 1, 0, 0, 0, 692, 693, 5, 119, 0, 0, 693, 694, 5, 114, 0, 0, 694, 695, 5, 105, 0, 0, 695, 696, 5, 116, 0, 0, 696, 697, 5, 101, 0, 0, 697, 124, 1, 0, 0, 0, 698, 699, 5, 114, 0, 0, 699, 700, 5, 101, 0, 0, 700, 701, 5, 115, 0, 0, 701, 702, 5, 111, 0, 0, 702, 703, 5, 108, 0, 0, 703, 704, 5, 118, 0, 0, 704, 705, 5, 101, 0, 0, 705, 126, 1, 0, 0, 0, 706, 707, 5, 99, 0, 0, 707, 708, 5, 111, 0, 0, 708, 709, 5, 110, 0, 0, 709, 710, 5, 110, 0, 0, 710, 711, 5, 101, 0, 0, 711, 712, 5, 99, 0, 0, 712, 713, 5, 116, 0, 0, 713, 128, 1, 0, 0, 0, 714, 715, 5, 100, 0, 0, 715, 716, 5, 105, 0, 0, 716, 717, 5, 115, 0, 0, 717, 718, 5, 99, 0, 0, 718, 719, 5, 111, 0, 0, 719, 720, 5, 110, 0, 0, 720, 721, 5, 110, 0, 0, 721, 722, 5, 101, 0, 0, 722, 723, 5, 99, 0, 0, 723, 724, 5, 116, 0, 0, 724, 130, 1, 0, 0, 0, 725, 726, 5, 99, 0, 0, 726, 727, 5, 97, 0, 0, 727, 728, 5, 108, 0, 0, 728, 729, 5, 108, 0, 0, 729, 132, 1, 0, 0, 0, 730, 731, 5, 119, 0, 0, 731, 732, 5, 97, 0, 0, 732, 733, 5, 116, 0, 0, 733, 734, 5, 99, 0, 0, 734, 735, 5, 104, 0, 0, 735, 736, 5, 45, 0, 0, 736, 737, 5, 115, 0, 0, 737, 738, 5, 116, 0, 0, 738, 739, 5, 97, 0, 0, 739, 740, 5, 114, 0, 0, 740, 741, 5, 116, 0, 0, 741, 134, 1, 0, 0, 0, 742, 743, 5, 119, 0, 0, 743, 744, 5, 97, 0, 0, 744, 745, 5, 116, 0, 0, 745, 746, 5, 99, 0, 0, 746, 747, 5, 104, 0, 0, 747, 748, 5, 45, 0, 0, 748, 749, 5, 115, 0, 0, 749, 750, 5, 116, 0, 0, 750, 751, 5, 111, 0, 0, 751, 752, 5, 112, 0, 0, 752, 136, 1, 0, 0, 0, 753, 754, 5, 115, 0, 0, 754, 755, 5, 117, 0, 0, 755, 756, 5, 98, 0, 0, 756, 757, 5, 115, 0, 0, 757, 758, 5, 99, 0, 0, 758, 759, 5, 114, 0, 0, 759, 760, 5, 105, 0, 0, 760, 761, 5, 98, 0, 0, 761, 762, 5, 101, 0, 0, 762, 138, 1, 0, 0, 0, 763, 764, 5, 117, 0, 0, 764, 765, 5, 110, 0, 0, 765, 766, 5, 115, 0, 0, 766, 767, 5, 117, 0, 0, 767, 768, 5, 98, 0, 0, 768, 769, 5, 115, 0, 0, 769, 770, 5, 99, 0, 0, 770, 771, 5, 114, 0, 0, 771, 772, 5, 105, 0, 0, 772, 773, 5, 98, 0, 0, 773, 774, 5, 101, 0, 0, 774, 140, 1, 0, 0, 0, 775, 776, 5, 111, 0, 0, 776, 777, 5, 112, 0, 0, 777, 778, 5, 116, 0, 0, 778, 779, 5, 105, 0, 0, 779, 780, 5, 109, 0, 0, 780, 781, 5, 105, 0, 0, 781, 782, 5, 115, 0, 0, 782, 783, 5, 116, 0, 0, 783, 784, 5, 105, 0, 0, 784, 785, 5, 99, 0, 0, 785, 786, 5, 45, 0, 0, 786, 787, 5, 114, 0, 0, 787, 788, 5, 101, 0, 0, 788, 789, 5, 103, 0, 0, 789, 790, 5, 105, 0, 0, 790, 791, 5, 115, 0, 0, 791, 792, 5, 116, 0, 0, 792, 793, 5, 101, 0, 0, 793, 794, 5, 114, 0, 0, 794, 142, 1, 0, 0, 0, 795, 796, 5, 99, 0, 0, 796, 797, 5, 114, 0, 0, 797, 798, 5, 100, 0, 0, 798, 799, 5, 116, 0, 0, 799, 144, 1, 0, 0, 0, 800, 801, 5, 111, 0, 0, 801, 802, 5, 112, 0, 0, 802, 803, 5, 116, 0, 0, 803, 804, 5, 105, 0, 0, 804, 805, 5, 111, 0, 0, 805, 806, 5, 110, 0, 0, 806, 807, 5, 97, 0, 0, 807, 808, 5, 108, 0, 0, 808, 809, 5, 45, 0, 0, 809, 810, 5, 111, 0, 0, 810, 811, 5, 110, 0, 0, 811, 812, 5, 101, 0, 0, 812, 146, 1, 0, 0, 0, 813, 814, 5, 101, 0, 0, 814, 815, 5, 120, 0, 0, 815, 816, 5, 97, 0, 0, 816, 817, 5, 99, 0, 0, 817, 818, 5, 116, 0, 0, 818, 819, 5, 108, 0, 0, 819, 820, 5, 121, 0, 0, 820, 821, 5, 45, 0, 0, 821, 822, 5, 111, 0, 0, 822, 823, 5, 110, 0, 0, 823, 824, 5, 101, 0, 0, 824, 148, 1, 0, 0, 0, 825, 826, 5, 109, 0, 0, 826, 827, 5, 97, 0, 0, 827, 828, 5, 110, 0, 0, 828, 829, 5, 121, 0, 0, 829, 830, 5, 45, 0, 0, 830, 831, 5, 117, 0, 0, 831, 832, 5, 110, 0, 0, 832, 833, 5, 105, 0, 0, 833, 834, 5, 113, 0, 0, 834, 835, 5, 117, 0, 0, 835, 836, 5, 101, 0, 0, 836, 150, 1, 0, 0, 0, 837, 838, 5, 109, 0, 0, 838, 839, 5, 97, 0, 0, 839, 840, 5, 110, 0, 0, 840, 841, 5, 121, 0, 0, 841, 152, 1, 0, 0, 0, 842, 843, 5, 111, 0, 0, 843, 844, 5, 114, 0, 0, 844, 845, 5, 100, 0, 0, 845, 846, 5, 101, 0, 0, 846, 847, 5, 114, 0, 0, 847, 848, 5, 101, 0, 0, 848, 849, 5, 100, 0, 0, 849, 154, 1, 0, 0, 0, 850, 851, 5, 117, 0, 0, 851, 852, 5, 110, 0, 0, 852, 853, 5, 105, 0, 0, 853, 854, 5, 116, 0, 0, 854, 156, 1, 0, 0, 0, 855, 856, 5, 119, 0, 0, 856, 857, 5, 97, 0, 0, 857, 858, 5, 116, 0, 0, 858, 859, 5, 99, 0, 0, 859, 860, 5, 104, 0, 0, 860, 861, 5, 45, 0, 0, 861, 862, 5, 104, 0, 0, 862, 863, 5, 97, 0, 0, 863, 864, 5, 110, 0, 0, 864, 865, 5, 100, 0, 0, 865, 866, 5, 108, 0, 0, 866, 867, 5, 101, 0, 0, 867, 158, 1, 0, 0, 0, 868, 869, 5, 109, 0, 0, 869, 870, 5, 101, 0, 0, 870, 871, 5, 115, 0, 0, 871, 872, 5, 115, 0, 0, 872, 873, 5, 97, 0, 0, 873, 874, 5, 103, 0, 0, 874, 875, 5, 101, 0, 0, 875, 160, 1, 0, 0, 0, 876, 877, 5, 97, 0, 0, 877, 878, 5, 116, 0, 0, 878, 879, 5, 111, 0, 0, 879, 880, 5, 109, 0, 0, 880, 881, 5, 45, 0, 0, 881, 882, 5, 114, 0, 0, 882, 883, 5, 101, 0, 0, 883, 884, 5, 102, 0, 0, 884, 162, 1, 0, 0, 0, 885, 886, 5, 105, 0, 0, 886, 887, 5, 110, 0, 0, 887, 888, 5, 116, 0, 0, 888, 889, 5, 101, 0, 0, 889, 890, 5, 114, 0, 0, 890, 891, 5, 102, 0, 0, 891, 892, 5, 97, 0, 0, 892, 893, 5, 99, 0, 0, 893, 894, 5, 101, 0, 0, 894, 895, 5, 45, 0, 0, 895, 896, 5, 114, 0, 0, 896, 897, 5, 101, 0, 0, 897, 898, 5, 102, 0, 0, 898, 164, 1, 0, 0, 0, 899, 900, 5, 111, 0, 0, 900, 901, 5, 112, 0, 0, 901, 902, 5, 116, 0, 0, 902, 903, 5, 105, 0, 0, 903, 904, 5, 111, 0, 0, 904, 905, 5, 110, 0, 0, 905, 906, 5, 97, 0, 0, 906, 907, 5, 108, 0, 0, 907, 166, 1, 0, 0, 0, 908, 909, 5, 108, 0, 0, 909, 910, 5, 105, 0, 0, 910, 911, 5, 115, 0, 0, 911, 912, 5, 116, 0, 0, 912, 168, 1, 0, 0, 0, 913, 914, 5, 114, 0, 0, 914, 915, 5, 101, 0, 0, 915, 916, 5, 99, 0, 0, 916, 917, 5, 111, 0, 0, 917, 918, 5, 114, 0, 0, 918, 919, 5, 100, 0, 0, 919, 170, 1, 0, 0, 0, 920, 921, 5, 98, 0, 0, 921, 922, 5, 111, 0, 0, 922, 923, 5, 111, 0, 0, 923, 924, 5, 108, 0, 0, 924, 172, 1, 0, 0, 0, 925, 926, 5, 98, 0, 0, 926, 927, 5, 121, 0, 0, 927, 928, 5, 116, 0, 0, 928, 929, 5, 101, 0, 0, 929, 930, 5, 115, 0, 0, 930, 174, 1, 0, 0, 0, 931, 932, 5, 100, 0, 0, 932, 933, 5, 111, 0, 0, 933, 934, 5, 117, 0, 0, 934, 935, 5, 98, 0, 0, 935, 936, 5, 108, 0, 0, 936, 937, 5, 101, 0, 0, 937, 176, 1, 0, 0, 0, 938, 939, 5, 105, 0, 0, 939, 940, 5, 110, 0, 0, 940, 941, 5, 116, 0, 0, 941, 942, 5, 51, 0, 0, 942, 943, 5, 50, 0, 0, 943, 178, 1, 0, 0, 0, 944, 945, 5, 105, 0, 0, 945, 946, 5, 110, 0, 0, 946, 947, 5, 116, 0, 0, 947, 948, 5, 54, 0, 0, 948, 949, 5, 52, 0, 0, 949, 180, 1, 0, 0, 0, 950, 951, 5, 115, 0, 0, 951, 952, 5, 116, 0, 0, 952, 953, 5, 114, 0, 0, 953, 954, 5, 105, 0, 0, 954, 955, 5, 110, 0, 0, 955, 956, 5, 103, 0, 0, 956, 182, 1, 0, 0, 0, 957, 958, 5, 117, 0, 0, 958, 959, 5, 105, 0, 0, 959, 960, 5, 110, 0, 0, 960, 961, 5, 116, 0, 0, 961, 962, 5, 51, 0, 0, 962, 963, 5, 50, 0, 0, 963, 184, 1, 0, 0, 0, 964, 965, 5, 117, 0, 0, 965, 966, 5, 105, 0, 0, 966, 967, 5, 110, 0, 0, 967, 968, 5, 116, 0, 0, 968, 969, 5, 54, 0, 0, 969, 970, 5, 52, 0, 0, 970, 186, 1, 0, 0, 0, 971, 972, 5, 116, 0, 0, 972, 973, 5, 114, 0, 0, 973, 974, 5, 117, 0, 0, 974, 975, 5, 101, 0, 0, 975, 188, 1, 0, 0, 0, 976, 977, 5, 102, 0, 0, 977, 978, 5, 97, 0, 0, 978, 979, 5, 108, 0, 0, 979, 980, 5, 115, 0, 0, 980, 981, 5, 101, 0, 0, 981, 190, 1, 0, 0, 0, 982, 983, 5, 110, 0, 0, 983, 984, 5, 117, 0, 0, 984, 985, 5, 108, 0, 0, 985, 986, 5, 108, 0, 0, 986, 192, 1, 0, 0, 0, 987, 988, 5, 45, 0, 0, 988, 989, 5, 62, 0, 0, 989, 194, 1, 0, 0, 0, 990, 991, 5, 58, 0, 0, 991, 196, 1, 0, 0, 0, 992, 993, 5, 59, 0, 0, 993, 198, 1, 0, 0, 0, 994, 995, 5, 44, 0, 0, 995, 200, 1, 0, 0, 0, 996, 997, 5, 46, 0, 0, 997, 202, 1, 0, 0, 0, 998, 999, 5, 123, 0, 0, 999, 204, 1, 0, 0, 0, 1000, 1001, 5, 125, 0, 0, 1001, 206, 1, 0, 0, 0, 1002, 1003, 5, 91, 0, 0, 1003, 208, 1, 0, 0, 0, 1004, 1005, 5, 93, 0, 0, 1005, 210, 1, 0, 0, 0, 1006, 1007, 5, 40, 0, 0, 1007, 212, 1, 0, 0, 0, 1008, 1009, 5, 41, 0, 0, 1009, 214, 1, 0, 0, 0, 1010, 1011, 5, 60, 0, 0, 1011, 216, 1, 0, 0, 0, 1012, 1013, 5, 62, 0, 0, 1013, 218, 1, 0, 0, 0, 1014, 1015, 5, 38, 0, 0, 1015, 220, 1, 0, 0, 0, 1016, 1017, 5, 61, 0, 0, 1017, 222, 1, 0, 0, 0, 1018, 1020, 5, 45, 0, 0, 1019, 1018, 1, 0, 0, 0, 1019, 1020, 1, 0, 0, 0, 1020, 1022, 1, 0, 0, 0, 1021, 1023, 7, 0, 0, 0, 1022, 1021, 1, 0, 0, 0, 1023, 1024, 1, 0, 0, 0, 1024, 1022, 1, 0, 0, 0, 1024, 1025, 1, 0, 0, 0, 1025, 224, 1, 0, 0, 0, 1026, 1028, 5, 45, 0, 0, 1027, 1026, 1, 0, 0, 0, 1027, 1028, 1, 0, 0, 0, 1028, 1037, 1, 0, 0, 0, 1029, 1038, 5, 48, 0, 0, 1030, 1034, 7, 1, 0, 0, 1031, 1033, 7, 0, 0, 0, 1032, 1031, 1, 0, 0, 0, 1033, 1036, 1, 0, 0, 0, 1034, 1032, 1, 0, 0, 0, 1034, 1035, 1, 0, 0, 0, 1035, 1038, 1, 0, 0, 0, 1036, 1034, 1, 0, 0, 0, 1037, 1029, 1, 0, 0, 0, 1037, 1030, 1, 0, 0, 0, 1038, 1045, 1, 0, 0, 0, 1039, 1041, 5, 46, 0, 0, 1040, 1042, 7, 0, 0, 0, 1041, 1040, 1, 0, 0, 0, 1042, 1043, 1, 0, 0, 0, 1043, 1041, 1, 0, 0, 0, 1043, 1044, 1, 0, 0, 0, 1044, 1046, 1, 0, 0, 0, 1045, 1039, 1, 0, 0, 0, 1045, 1046, 1, 0, 0, 0, 1046, 1056, 1, 0, 0, 0, 1047, 1049, 7, 2, 0, 0, 1048, 1050, 7, 3, 0, 0, 1049, 1048, 1, 0, 0, 0, 1049, 1050, 1, 0, 0, 0, 1050, 1052, 1, 0, 0, 0, 1051, 1053, 7, 0, 0, 0, 1052, 1051, 1, 0, 0, 0, 1053, 1054, 1, 0, 0, 0, 1054, 1052, 1, 0, 0, 0, 1054, 1055, 1, 0, 0, 0, 1055, 1057, 1, 0, 0, 0, 1056, 1047, 1, 0, 0, 0, 1056, 1057, 1, 0, 0, 0, 1057, 226, 1, 0, 0, 0, 1058, 1062, 7, 4, 0, 0, 1059, 1061, 7, 5, 0, 0, 1060, 1059, 1, 0, 0, 0, 1061, 1064, 1, 0, 0, 0, 1062, 1060, 1, 0, 0, 0, 1062, 1063, 1, 0, 0, 0, 1063, 228, 1, 0, 0, 0, 1064, 1062, 1, 0, 0, 0, 1065, 1070, 5, 34, 0, 0, 1066, 1069, 3, 231, 115, 0, 1067, 1069, 8, 6, 0, 0, 1068, 1066, 1, 0, 0, 0, 1068, 1067, 1, 0, 0, 0, 1069, 1072, 1, 0, 0, 0, 1070, 1068, 1, 0, 0, 0, 1070, 1071, 1, 0, 0, 0, 1071, 1073, 1, 0, 0, 0, 1072, 1070, 1, 0, 0, 0, 1073, 1074, 5, 34, 0, 0, 1074, 230, 1, 0, 0, 0, 1075, 1083, 5, 92, 0, 0, 1076, 1084, 7, 7, 0, 0, 1077, 1078, 5, 117, 0, 0, 1078, 1079, 3, 233, 116, 0, 1079, 1080, 3, 233, 116, 0, 1080, 1081, 3, 233, 116, 0, 1081, 1082, 3, 233, 116, 0, 1082, 1084, 1, 0, 0, 0, 1083, 1076, 1, 0, 0, 0, 1083, 1077, 1, 0, 0, 0, 1084, 232, 1, 0, 0, 0, 1085, 1086, 7, 8, 0, 0, 1086, 234, 1, 0, 0, 0, 1087, 1088, 5, 47, 0, 0, 1088, 1089, 5, 47, 0, 0, 1089, 1093, 1, 0, 0, 0, 1090, 1092, 8, 9, 0, 0, 1091, 1090, 1, 0, 0, 0, 1092, 1095, 1, 0, 0, 0, 1093, 1091, 1, 0, 0, 0, 1093, 1094, 1, 0, 0, 0, 1094, 1096, 1, 0, 0, 0, 1095, 1093, 1, 0, 0, 0, 1096, 1097, 6, 117, 0, 0, 1097, 236, 1, 0, 0, 0, 1098, 1099, 5, 47, 0, 0, 1099, 1100, 5, 42, 0, 0, 1100, 1104, 1, 0, 0, 0, 1101, 1103, 9, 0, 0, 0, 1102, 1101, 1, 0, 0, 0, 1103, 1106, 1, 0, 0, 0, 1104, 1105, 1, 0, 0, 0, 1104, 1102, 1, 0, 0, 0, 1105, 1107, 1, 0, 0, 0, 1106, 1104, 1, 0, 0, 0, 1107, 1108, 5, 42, 0, 0, 1108, 1109, 5, 47, 0, 0, 1109, 1110, 1, 0, 0, 0, 1110, 1111, 6, 118, 0, 0, 1111, 238, 1, 0, 0, 0, 1112, 1114, 7, 10, 0, 0, 1113, 1112, 1, 0, 0, 0, 1114, 1115, 1, 0, 0, 0, 1115, 1113, 1, 0, 0, 0, 1115, 1116, 1, 0, 0, 0, 1116, 1117, 1, 0, 0, 0, 1117, 1118, 6, 119, 0, 0, 1118, 240, 1, 0, 0, 0, 18, 0, 1019, 1024, 1027, 1034, 1037, 1043, 1045, 1049, 1054, 1056, 1062, 1068, 1070, 1083, 1093, 1104, 1115, 1, 0, 1, 0] \ No newline at end of file diff --git a/src/capability-language/generated/QuixosCapabilityLexer.tokens b/src/capability-language/generated/QuixosCapabilityLexer.tokens index 75f42fb..ed12769 100644 --- a/src/capability-language/generated/QuixosCapabilityLexer.tokens +++ b/src/capability-language/generated/QuixosCapabilityLexer.tokens @@ -21,100 +21,101 @@ INPUT=20 CONFORM=21 AS=22 BIND=23 -TO=24 -PRIVATE=25 -SHARED=26 -STATE=27 -EDGE=28 -PROJECTION=29 -WITH=30 -USING=31 -VIA=32 -MATERIALIZE=33 -IF=34 -ABSENT=35 -ON=36 -POLICY=37 -DEFAULT=38 -SOURCE=39 -REPOSITORY=40 -COMMIT=41 -REVISION=42 -SEMANTIC_MAJOR=43 -ON_DELETE=44 -RETAIN_OTHER=45 -KEYED=46 -PUBLIC_TRAVERSAL=47 -ID=48 -DOC=49 -MODE=50 -EMITS=51 -RECEIVER=52 -REQUIRES=53 -ANY=54 -GET=55 -SET=56 -WATCH=57 -START=58 -STOP=59 -READ=60 -WRITE=61 -RESOLVE=62 -CONNECT=63 -DISCONNECT=64 -CALL=65 -WATCH_START=66 -WATCH_STOP=67 -SUBSCRIBE=68 -UNSUBSCRIBE=69 -OPTIMISTIC_REGISTER=70 -CRDT=71 -OPTIONAL_ONE=72 -EXACTLY_ONE=73 -MANY_UNIQUE=74 -MANY=75 -ORDERED=76 -UNIT=77 -WATCH_HANDLE=78 -MESSAGE=79 -ATOM_REF=80 -INTERFACE_REF=81 -OPTIONAL=82 -LIST=83 -RECORD=84 -BOOL=85 -BYTES=86 -DOUBLE=87 -INT32=88 -INT64=89 -STRING=90 -UINT32=91 -UINT64=92 -TRUE=93 -FALSE=94 -NULL=95 -ARROW=96 -COLON=97 -SEMI=98 -COMMA=99 -DOT=100 -LBRACE=101 -RBRACE=102 -LBRACK=103 -RBRACK=104 -LPAREN=105 -RPAREN=106 -LT=107 -GT=108 -AMP=109 -EQUAL=110 -INTEGER=111 -JSON_NUMBER=112 -IDENTIFIER=113 -STRING_LITERAL=114 -LINE_COMMENT=115 -BLOCK_COMMENT=116 -WS=117 +STATIC=24 +TO=25 +PRIVATE=26 +SHARED=27 +STATE=28 +EDGE=29 +PROJECTION=30 +WITH=31 +USING=32 +VIA=33 +MATERIALIZE=34 +IF=35 +ABSENT=36 +ON=37 +POLICY=38 +DEFAULT=39 +SOURCE=40 +REPOSITORY=41 +COMMIT=42 +REVISION=43 +SEMANTIC_MAJOR=44 +ON_DELETE=45 +RETAIN_OTHER=46 +KEYED=47 +PUBLIC_TRAVERSAL=48 +ID=49 +DOC=50 +MODE=51 +EMITS=52 +RECEIVER=53 +REQUIRES=54 +ANY=55 +GET=56 +SET=57 +WATCH=58 +START=59 +STOP=60 +READ=61 +WRITE=62 +RESOLVE=63 +CONNECT=64 +DISCONNECT=65 +CALL=66 +WATCH_START=67 +WATCH_STOP=68 +SUBSCRIBE=69 +UNSUBSCRIBE=70 +OPTIMISTIC_REGISTER=71 +CRDT=72 +OPTIONAL_ONE=73 +EXACTLY_ONE=74 +MANY_UNIQUE=75 +MANY=76 +ORDERED=77 +UNIT=78 +WATCH_HANDLE=79 +MESSAGE=80 +ATOM_REF=81 +INTERFACE_REF=82 +OPTIONAL=83 +LIST=84 +RECORD=85 +BOOL=86 +BYTES=87 +DOUBLE=88 +INT32=89 +INT64=90 +STRING=91 +UINT32=92 +UINT64=93 +TRUE=94 +FALSE=95 +NULL=96 +ARROW=97 +COLON=98 +SEMI=99 +COMMA=100 +DOT=101 +LBRACE=102 +RBRACE=103 +LBRACK=104 +RBRACK=105 +LPAREN=106 +RPAREN=107 +LT=108 +GT=109 +AMP=110 +EQUAL=111 +INTEGER=112 +JSON_NUMBER=113 +IDENTIFIER=114 +STRING_LITERAL=115 +LINE_COMMENT=116 +BLOCK_COMMENT=117 +WS=118 'workspace'=1 'type'=2 'object'=3 @@ -138,90 +139,91 @@ WS=117 'conform'=21 'as'=22 'bind'=23 -'to'=24 -'private'=25 -'shared'=26 -'state'=27 -'edge'=28 -'projection'=29 -'with'=30 -'using'=31 -'via'=32 -'materialize'=33 -'if'=34 -'absent'=35 -'on'=36 -'policy'=37 -'default'=38 -'source'=39 -'repository'=40 -'commit'=41 -'revision'=42 -'semantic-major'=43 -'on-delete'=44 -'retain-other'=45 -'keyed'=46 -'public-traversal'=47 -'id'=48 -'doc'=49 -'mode'=50 -'emits'=51 -'receiver'=52 -'requires'=53 -'any'=54 -'get'=55 -'set'=56 -'watch'=57 -'start'=58 -'stop'=59 -'read'=60 -'write'=61 -'resolve'=62 -'connect'=63 -'disconnect'=64 -'call'=65 -'watch-start'=66 -'watch-stop'=67 -'subscribe'=68 -'unsubscribe'=69 -'optimistic-register'=70 -'crdt'=71 -'optional-one'=72 -'exactly-one'=73 -'many-unique'=74 -'many'=75 -'ordered'=76 -'unit'=77 -'watch-handle'=78 -'message'=79 -'atom-ref'=80 -'interface-ref'=81 -'optional'=82 -'list'=83 -'record'=84 -'bool'=85 -'bytes'=86 -'double'=87 -'int32'=88 -'int64'=89 -'string'=90 -'uint32'=91 -'uint64'=92 -'true'=93 -'false'=94 -'null'=95 -'->'=96 -':'=97 -';'=98 -','=99 -'.'=100 -'{'=101 -'}'=102 -'['=103 -']'=104 -'('=105 -')'=106 -'<'=107 -'>'=108 -'&'=109 -'='=110 +'static'=24 +'to'=25 +'private'=26 +'shared'=27 +'state'=28 +'edge'=29 +'projection'=30 +'with'=31 +'using'=32 +'via'=33 +'materialize'=34 +'if'=35 +'absent'=36 +'on'=37 +'policy'=38 +'default'=39 +'source'=40 +'repository'=41 +'commit'=42 +'revision'=43 +'semantic-major'=44 +'on-delete'=45 +'retain-other'=46 +'keyed'=47 +'public-traversal'=48 +'id'=49 +'doc'=50 +'mode'=51 +'emits'=52 +'receiver'=53 +'requires'=54 +'any'=55 +'get'=56 +'set'=57 +'watch'=58 +'start'=59 +'stop'=60 +'read'=61 +'write'=62 +'resolve'=63 +'connect'=64 +'disconnect'=65 +'call'=66 +'watch-start'=67 +'watch-stop'=68 +'subscribe'=69 +'unsubscribe'=70 +'optimistic-register'=71 +'crdt'=72 +'optional-one'=73 +'exactly-one'=74 +'many-unique'=75 +'many'=76 +'ordered'=77 +'unit'=78 +'watch-handle'=79 +'message'=80 +'atom-ref'=81 +'interface-ref'=82 +'optional'=83 +'list'=84 +'record'=85 +'bool'=86 +'bytes'=87 +'double'=88 +'int32'=89 +'int64'=90 +'string'=91 +'uint32'=92 +'uint64'=93 +'true'=94 +'false'=95 +'null'=96 +'->'=97 +':'=98 +';'=99 +','=100 +'.'=101 +'{'=102 +'}'=103 +'['=104 +']'=105 +'('=106 +')'=107 +'<'=108 +'>'=109 +'&'=110 +'='=111 diff --git a/src/capability-language/generated/QuixosCapabilityLexer.ts b/src/capability-language/generated/QuixosCapabilityLexer.ts index 0aa0f03..c3baf4c 100644 --- a/src/capability-language/generated/QuixosCapabilityLexer.ts +++ b/src/capability-language/generated/QuixosCapabilityLexer.ts @@ -27,100 +27,101 @@ export class QuixosCapabilityLexer extends antlr.Lexer { public static readonly CONFORM = 21; public static readonly AS = 22; public static readonly BIND = 23; - public static readonly TO = 24; - public static readonly PRIVATE = 25; - public static readonly SHARED = 26; - public static readonly STATE = 27; - public static readonly EDGE = 28; - public static readonly PROJECTION = 29; - public static readonly WITH = 30; - public static readonly USING = 31; - public static readonly VIA = 32; - public static readonly MATERIALIZE = 33; - public static readonly IF = 34; - public static readonly ABSENT = 35; - public static readonly ON = 36; - public static readonly POLICY = 37; - public static readonly DEFAULT = 38; - public static readonly SOURCE = 39; - public static readonly REPOSITORY = 40; - public static readonly COMMIT = 41; - public static readonly REVISION = 42; - public static readonly SEMANTIC_MAJOR = 43; - public static readonly ON_DELETE = 44; - public static readonly RETAIN_OTHER = 45; - public static readonly KEYED = 46; - public static readonly PUBLIC_TRAVERSAL = 47; - public static readonly ID = 48; - public static readonly DOC = 49; - public static readonly MODE = 50; - public static readonly EMITS = 51; - public static readonly RECEIVER = 52; - public static readonly REQUIRES = 53; - public static readonly ANY = 54; - public static readonly GET = 55; - public static readonly SET = 56; - public static readonly WATCH = 57; - public static readonly START = 58; - public static readonly STOP = 59; - public static readonly READ = 60; - public static readonly WRITE = 61; - public static readonly RESOLVE = 62; - public static readonly CONNECT = 63; - public static readonly DISCONNECT = 64; - public static readonly CALL = 65; - public static readonly WATCH_START = 66; - public static readonly WATCH_STOP = 67; - public static readonly SUBSCRIBE = 68; - public static readonly UNSUBSCRIBE = 69; - public static readonly OPTIMISTIC_REGISTER = 70; - public static readonly CRDT = 71; - public static readonly OPTIONAL_ONE = 72; - public static readonly EXACTLY_ONE = 73; - public static readonly MANY_UNIQUE = 74; - public static readonly MANY = 75; - public static readonly ORDERED = 76; - public static readonly UNIT = 77; - public static readonly WATCH_HANDLE = 78; - public static readonly MESSAGE = 79; - public static readonly ATOM_REF = 80; - public static readonly INTERFACE_REF = 81; - public static readonly OPTIONAL = 82; - public static readonly LIST = 83; - public static readonly RECORD = 84; - public static readonly BOOL = 85; - public static readonly BYTES = 86; - public static readonly DOUBLE = 87; - public static readonly INT32 = 88; - public static readonly INT64 = 89; - public static readonly STRING = 90; - public static readonly UINT32 = 91; - public static readonly UINT64 = 92; - public static readonly TRUE = 93; - public static readonly FALSE = 94; - public static readonly NULL = 95; - public static readonly ARROW = 96; - public static readonly COLON = 97; - public static readonly SEMI = 98; - public static readonly COMMA = 99; - public static readonly DOT = 100; - public static readonly LBRACE = 101; - public static readonly RBRACE = 102; - public static readonly LBRACK = 103; - public static readonly RBRACK = 104; - public static readonly LPAREN = 105; - public static readonly RPAREN = 106; - public static readonly LT = 107; - public static readonly GT = 108; - public static readonly AMP = 109; - public static readonly EQUAL = 110; - public static readonly INTEGER = 111; - public static readonly JSON_NUMBER = 112; - public static readonly IDENTIFIER = 113; - public static readonly STRING_LITERAL = 114; - public static readonly LINE_COMMENT = 115; - public static readonly BLOCK_COMMENT = 116; - public static readonly WS = 117; + public static readonly STATIC = 24; + public static readonly TO = 25; + public static readonly PRIVATE = 26; + public static readonly SHARED = 27; + public static readonly STATE = 28; + public static readonly EDGE = 29; + public static readonly PROJECTION = 30; + public static readonly WITH = 31; + public static readonly USING = 32; + public static readonly VIA = 33; + public static readonly MATERIALIZE = 34; + public static readonly IF = 35; + public static readonly ABSENT = 36; + public static readonly ON = 37; + public static readonly POLICY = 38; + public static readonly DEFAULT = 39; + public static readonly SOURCE = 40; + public static readonly REPOSITORY = 41; + public static readonly COMMIT = 42; + public static readonly REVISION = 43; + public static readonly SEMANTIC_MAJOR = 44; + public static readonly ON_DELETE = 45; + public static readonly RETAIN_OTHER = 46; + public static readonly KEYED = 47; + public static readonly PUBLIC_TRAVERSAL = 48; + public static readonly ID = 49; + public static readonly DOC = 50; + public static readonly MODE = 51; + public static readonly EMITS = 52; + public static readonly RECEIVER = 53; + public static readonly REQUIRES = 54; + public static readonly ANY = 55; + public static readonly GET = 56; + public static readonly SET = 57; + public static readonly WATCH = 58; + public static readonly START = 59; + public static readonly STOP = 60; + public static readonly READ = 61; + public static readonly WRITE = 62; + public static readonly RESOLVE = 63; + public static readonly CONNECT = 64; + public static readonly DISCONNECT = 65; + public static readonly CALL = 66; + public static readonly WATCH_START = 67; + public static readonly WATCH_STOP = 68; + public static readonly SUBSCRIBE = 69; + public static readonly UNSUBSCRIBE = 70; + public static readonly OPTIMISTIC_REGISTER = 71; + public static readonly CRDT = 72; + public static readonly OPTIONAL_ONE = 73; + public static readonly EXACTLY_ONE = 74; + public static readonly MANY_UNIQUE = 75; + public static readonly MANY = 76; + public static readonly ORDERED = 77; + public static readonly UNIT = 78; + public static readonly WATCH_HANDLE = 79; + public static readonly MESSAGE = 80; + public static readonly ATOM_REF = 81; + public static readonly INTERFACE_REF = 82; + public static readonly OPTIONAL = 83; + public static readonly LIST = 84; + public static readonly RECORD = 85; + public static readonly BOOL = 86; + public static readonly BYTES = 87; + public static readonly DOUBLE = 88; + public static readonly INT32 = 89; + public static readonly INT64 = 90; + public static readonly STRING = 91; + public static readonly UINT32 = 92; + public static readonly UINT64 = 93; + public static readonly TRUE = 94; + public static readonly FALSE = 95; + public static readonly NULL = 96; + public static readonly ARROW = 97; + public static readonly COLON = 98; + public static readonly SEMI = 99; + public static readonly COMMA = 100; + public static readonly DOT = 101; + public static readonly LBRACE = 102; + public static readonly RBRACE = 103; + public static readonly LBRACK = 104; + public static readonly RBRACK = 105; + public static readonly LPAREN = 106; + public static readonly RPAREN = 107; + public static readonly LT = 108; + public static readonly GT = 109; + public static readonly AMP = 110; + public static readonly EQUAL = 111; + public static readonly INTEGER = 112; + public static readonly JSON_NUMBER = 113; + public static readonly IDENTIFIER = 114; + public static readonly STRING_LITERAL = 115; + public static readonly LINE_COMMENT = 116; + public static readonly BLOCK_COMMENT = 117; + public static readonly WS = 118; public static readonly channelNames = [ "DEFAULT_TOKEN_CHANNEL", "HIDDEN" @@ -131,17 +132,17 @@ export class QuixosCapabilityLexer extends antlr.Lexer { "'ref'", "'fragment'", "'import'", "'external'", "'atom'", "'interface'", "'interfaces'", "'package'", "'value'", "'relation'", "'operation'", "'function'", "'constructor'", "'constructs'", "'input'", "'conform'", - "'as'", "'bind'", "'to'", "'private'", "'shared'", "'state'", "'edge'", - "'projection'", "'with'", "'using'", "'via'", "'materialize'", "'if'", - "'absent'", "'on'", "'policy'", "'default'", "'source'", "'repository'", - "'commit'", "'revision'", "'semantic-major'", "'on-delete'", "'retain-other'", - "'keyed'", "'public-traversal'", "'id'", "'doc'", "'mode'", "'emits'", - "'receiver'", "'requires'", "'any'", "'get'", "'set'", "'watch'", - "'start'", "'stop'", "'read'", "'write'", "'resolve'", "'connect'", - "'disconnect'", "'call'", "'watch-start'", "'watch-stop'", "'subscribe'", - "'unsubscribe'", "'optimistic-register'", "'crdt'", "'optional-one'", - "'exactly-one'", "'many-unique'", "'many'", "'ordered'", "'unit'", - "'watch-handle'", "'message'", "'atom-ref'", "'interface-ref'", + "'as'", "'bind'", "'static'", "'to'", "'private'", "'shared'", "'state'", + "'edge'", "'projection'", "'with'", "'using'", "'via'", "'materialize'", + "'if'", "'absent'", "'on'", "'policy'", "'default'", "'source'", + "'repository'", "'commit'", "'revision'", "'semantic-major'", "'on-delete'", + "'retain-other'", "'keyed'", "'public-traversal'", "'id'", "'doc'", + "'mode'", "'emits'", "'receiver'", "'requires'", "'any'", "'get'", + "'set'", "'watch'", "'start'", "'stop'", "'read'", "'write'", "'resolve'", + "'connect'", "'disconnect'", "'call'", "'watch-start'", "'watch-stop'", + "'subscribe'", "'unsubscribe'", "'optimistic-register'", "'crdt'", + "'optional-one'", "'exactly-one'", "'many-unique'", "'many'", "'ordered'", + "'unit'", "'watch-handle'", "'message'", "'atom-ref'", "'interface-ref'", "'optional'", "'list'", "'record'", "'bool'", "'bytes'", "'double'", "'int32'", "'int64'", "'string'", "'uint32'", "'uint64'", "'true'", "'false'", "'null'", "'->'", "':'", "';'", "','", "'.'", "'{'", @@ -152,22 +153,22 @@ export class QuixosCapabilityLexer extends antlr.Lexer { null, "WORKSPACE", "TYPE", "OBJECT", "STORABLE", "IMPLEMENTS", "REF", "FRAGMENT", "IMPORT", "EXTERNAL", "ATOM", "INTERFACE", "INTERFACES", "PACKAGE", "VALUE", "RELATION", "OPERATION", "FUNCTION", "CONSTRUCTOR", - "CONSTRUCTS", "INPUT", "CONFORM", "AS", "BIND", "TO", "PRIVATE", - "SHARED", "STATE", "EDGE", "PROJECTION", "WITH", "USING", "VIA", - "MATERIALIZE", "IF", "ABSENT", "ON", "POLICY", "DEFAULT", "SOURCE", - "REPOSITORY", "COMMIT", "REVISION", "SEMANTIC_MAJOR", "ON_DELETE", - "RETAIN_OTHER", "KEYED", "PUBLIC_TRAVERSAL", "ID", "DOC", "MODE", - "EMITS", "RECEIVER", "REQUIRES", "ANY", "GET", "SET", "WATCH", "START", - "STOP", "READ", "WRITE", "RESOLVE", "CONNECT", "DISCONNECT", "CALL", - "WATCH_START", "WATCH_STOP", "SUBSCRIBE", "UNSUBSCRIBE", "OPTIMISTIC_REGISTER", - "CRDT", "OPTIONAL_ONE", "EXACTLY_ONE", "MANY_UNIQUE", "MANY", "ORDERED", - "UNIT", "WATCH_HANDLE", "MESSAGE", "ATOM_REF", "INTERFACE_REF", - "OPTIONAL", "LIST", "RECORD", "BOOL", "BYTES", "DOUBLE", "INT32", - "INT64", "STRING", "UINT32", "UINT64", "TRUE", "FALSE", "NULL", - "ARROW", "COLON", "SEMI", "COMMA", "DOT", "LBRACE", "RBRACE", "LBRACK", - "RBRACK", "LPAREN", "RPAREN", "LT", "GT", "AMP", "EQUAL", "INTEGER", - "JSON_NUMBER", "IDENTIFIER", "STRING_LITERAL", "LINE_COMMENT", "BLOCK_COMMENT", - "WS" + "CONSTRUCTS", "INPUT", "CONFORM", "AS", "BIND", "STATIC", "TO", + "PRIVATE", "SHARED", "STATE", "EDGE", "PROJECTION", "WITH", "USING", + "VIA", "MATERIALIZE", "IF", "ABSENT", "ON", "POLICY", "DEFAULT", + "SOURCE", "REPOSITORY", "COMMIT", "REVISION", "SEMANTIC_MAJOR", + "ON_DELETE", "RETAIN_OTHER", "KEYED", "PUBLIC_TRAVERSAL", "ID", + "DOC", "MODE", "EMITS", "RECEIVER", "REQUIRES", "ANY", "GET", "SET", + "WATCH", "START", "STOP", "READ", "WRITE", "RESOLVE", "CONNECT", + "DISCONNECT", "CALL", "WATCH_START", "WATCH_STOP", "SUBSCRIBE", + "UNSUBSCRIBE", "OPTIMISTIC_REGISTER", "CRDT", "OPTIONAL_ONE", "EXACTLY_ONE", + "MANY_UNIQUE", "MANY", "ORDERED", "UNIT", "WATCH_HANDLE", "MESSAGE", + "ATOM_REF", "INTERFACE_REF", "OPTIONAL", "LIST", "RECORD", "BOOL", + "BYTES", "DOUBLE", "INT32", "INT64", "STRING", "UINT32", "UINT64", + "TRUE", "FALSE", "NULL", "ARROW", "COLON", "SEMI", "COMMA", "DOT", + "LBRACE", "RBRACE", "LBRACK", "RBRACK", "LPAREN", "RPAREN", "LT", + "GT", "AMP", "EQUAL", "INTEGER", "JSON_NUMBER", "IDENTIFIER", "STRING_LITERAL", + "LINE_COMMENT", "BLOCK_COMMENT", "WS" ]; public static readonly modeNames = [ @@ -178,22 +179,22 @@ export class QuixosCapabilityLexer extends antlr.Lexer { "WORKSPACE", "TYPE", "OBJECT", "STORABLE", "IMPLEMENTS", "REF", "FRAGMENT", "IMPORT", "EXTERNAL", "ATOM", "INTERFACE", "INTERFACES", "PACKAGE", "VALUE", "RELATION", "OPERATION", "FUNCTION", "CONSTRUCTOR", - "CONSTRUCTS", "INPUT", "CONFORM", "AS", "BIND", "TO", "PRIVATE", - "SHARED", "STATE", "EDGE", "PROJECTION", "WITH", "USING", "VIA", - "MATERIALIZE", "IF", "ABSENT", "ON", "POLICY", "DEFAULT", "SOURCE", - "REPOSITORY", "COMMIT", "REVISION", "SEMANTIC_MAJOR", "ON_DELETE", - "RETAIN_OTHER", "KEYED", "PUBLIC_TRAVERSAL", "ID", "DOC", "MODE", - "EMITS", "RECEIVER", "REQUIRES", "ANY", "GET", "SET", "WATCH", "START", - "STOP", "READ", "WRITE", "RESOLVE", "CONNECT", "DISCONNECT", "CALL", - "WATCH_START", "WATCH_STOP", "SUBSCRIBE", "UNSUBSCRIBE", "OPTIMISTIC_REGISTER", - "CRDT", "OPTIONAL_ONE", "EXACTLY_ONE", "MANY_UNIQUE", "MANY", "ORDERED", - "UNIT", "WATCH_HANDLE", "MESSAGE", "ATOM_REF", "INTERFACE_REF", - "OPTIONAL", "LIST", "RECORD", "BOOL", "BYTES", "DOUBLE", "INT32", - "INT64", "STRING", "UINT32", "UINT64", "TRUE", "FALSE", "NULL", - "ARROW", "COLON", "SEMI", "COMMA", "DOT", "LBRACE", "RBRACE", "LBRACK", - "RBRACK", "LPAREN", "RPAREN", "LT", "GT", "AMP", "EQUAL", "INTEGER", - "JSON_NUMBER", "IDENTIFIER", "STRING_LITERAL", "ESC", "HEX", "LINE_COMMENT", - "BLOCK_COMMENT", "WS", + "CONSTRUCTS", "INPUT", "CONFORM", "AS", "BIND", "STATIC", "TO", + "PRIVATE", "SHARED", "STATE", "EDGE", "PROJECTION", "WITH", "USING", + "VIA", "MATERIALIZE", "IF", "ABSENT", "ON", "POLICY", "DEFAULT", + "SOURCE", "REPOSITORY", "COMMIT", "REVISION", "SEMANTIC_MAJOR", + "ON_DELETE", "RETAIN_OTHER", "KEYED", "PUBLIC_TRAVERSAL", "ID", + "DOC", "MODE", "EMITS", "RECEIVER", "REQUIRES", "ANY", "GET", "SET", + "WATCH", "START", "STOP", "READ", "WRITE", "RESOLVE", "CONNECT", + "DISCONNECT", "CALL", "WATCH_START", "WATCH_STOP", "SUBSCRIBE", + "UNSUBSCRIBE", "OPTIMISTIC_REGISTER", "CRDT", "OPTIONAL_ONE", "EXACTLY_ONE", + "MANY_UNIQUE", "MANY", "ORDERED", "UNIT", "WATCH_HANDLE", "MESSAGE", + "ATOM_REF", "INTERFACE_REF", "OPTIONAL", "LIST", "RECORD", "BOOL", + "BYTES", "DOUBLE", "INT32", "INT64", "STRING", "UINT32", "UINT64", + "TRUE", "FALSE", "NULL", "ARROW", "COLON", "SEMI", "COMMA", "DOT", + "LBRACE", "RBRACE", "LBRACK", "RBRACK", "LPAREN", "RPAREN", "LT", + "GT", "AMP", "EQUAL", "INTEGER", "JSON_NUMBER", "IDENTIFIER", "STRING_LITERAL", + "ESC", "HEX", "LINE_COMMENT", "BLOCK_COMMENT", "WS", ]; @@ -215,7 +216,7 @@ export class QuixosCapabilityLexer extends antlr.Lexer { public get modeNames(): string[] { return QuixosCapabilityLexer.modeNames; } public static readonly _serializedATN: number[] = [ - 4,0,117,1110,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7, + 4,0,118,1119,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7, 5,2,6,7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12, 2,13,7,13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19, 7,19,2,20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25, @@ -233,389 +234,392 @@ export class QuixosCapabilityLexer extends antlr.Lexer { 7,97,2,98,7,98,2,99,7,99,2,100,7,100,2,101,7,101,2,102,7,102,2,103, 7,103,2,104,7,104,2,105,7,105,2,106,7,106,2,107,7,107,2,108,7,108, 2,109,7,109,2,110,7,110,2,111,7,111,2,112,7,112,2,113,7,113,2,114, - 7,114,2,115,7,115,2,116,7,116,2,117,7,117,2,118,7,118,1,0,1,0,1, - 0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,2,1, - 2,1,2,1,2,1,2,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,4,1,4,1,4,1, - 4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,5,1,5,1,5,1,5,1,6,1,6,1,6,1,6,1, - 6,1,6,1,6,1,6,1,6,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,8,1,8,1,8,1,8,1, - 8,1,8,1,8,1,8,1,8,1,9,1,9,1,9,1,9,1,9,1,10,1,10,1,10,1,10,1,10,1, - 10,1,10,1,10,1,10,1,10,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1, - 11,1,11,1,11,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,13,1,13,1, - 13,1,13,1,13,1,13,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1, - 15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,16,1,16,1,16,1, - 16,1,16,1,16,1,16,1,16,1,16,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1, - 17,1,17,1,17,1,17,1,17,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1, - 18,1,18,1,18,1,19,1,19,1,19,1,19,1,19,1,19,1,20,1,20,1,20,1,20,1, - 20,1,20,1,20,1,20,1,21,1,21,1,21,1,22,1,22,1,22,1,22,1,22,1,23,1, - 23,1,23,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,25,1,25,1,25,1, - 25,1,25,1,25,1,25,1,26,1,26,1,26,1,26,1,26,1,26,1,27,1,27,1,27,1, - 27,1,27,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1, - 29,1,29,1,29,1,29,1,29,1,30,1,30,1,30,1,30,1,30,1,30,1,31,1,31,1, - 31,1,31,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1, - 32,1,33,1,33,1,33,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,35,1,35,1, - 35,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,37,1,37,1,37,1,37,1,37,1, - 37,1,37,1,37,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,39,1,39,1,39,1, - 39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,40,1,40,1,40,1,40,1,40,1, - 40,1,40,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,42,1,42,1, - 42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1, - 43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,44,1,44,1,44,1, - 44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,45,1,45,1,45,1, - 45,1,45,1,45,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1, - 46,1,46,1,46,1,46,1,46,1,46,1,46,1,47,1,47,1,47,1,48,1,48,1,48,1, - 48,1,49,1,49,1,49,1,49,1,49,1,50,1,50,1,50,1,50,1,50,1,50,1,51,1, - 51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,52,1,52,1,52,1,52,1,52,1, - 52,1,52,1,52,1,52,1,53,1,53,1,53,1,53,1,54,1,54,1,54,1,54,1,55,1, - 55,1,55,1,55,1,56,1,56,1,56,1,56,1,56,1,56,1,57,1,57,1,57,1,57,1, - 57,1,57,1,58,1,58,1,58,1,58,1,58,1,59,1,59,1,59,1,59,1,59,1,60,1, - 60,1,60,1,60,1,60,1,60,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1, - 62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,63,1,63,1,63,1,63,1,63,1, - 63,1,63,1,63,1,63,1,63,1,63,1,64,1,64,1,64,1,64,1,64,1,65,1,65,1, - 65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,66,1,66,1,66,1, - 66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,67,1,67,1,67,1,67,1,67,1, - 67,1,67,1,67,1,67,1,67,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1, - 68,1,68,1,68,1,68,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1, - 69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,70,1,70,1, - 70,1,70,1,70,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1, - 71,1,71,1,71,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1, - 72,1,72,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1, - 73,1,74,1,74,1,74,1,74,1,74,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1, - 75,1,76,1,76,1,76,1,76,1,76,1,77,1,77,1,77,1,77,1,77,1,77,1,77,1, - 77,1,77,1,77,1,77,1,77,1,77,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1, - 78,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,80,1,80,1,80,1, - 80,1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,81,1,81,1, - 81,1,81,1,81,1,81,1,81,1,81,1,81,1,82,1,82,1,82,1,82,1,82,1,83,1, - 83,1,83,1,83,1,83,1,83,1,83,1,84,1,84,1,84,1,84,1,84,1,85,1,85,1, - 85,1,85,1,85,1,85,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,87,1,87,1, - 87,1,87,1,87,1,87,1,88,1,88,1,88,1,88,1,88,1,88,1,89,1,89,1,89,1, - 89,1,89,1,89,1,89,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,91,1,91,1, - 91,1,91,1,91,1,91,1,91,1,92,1,92,1,92,1,92,1,92,1,93,1,93,1,93,1, - 93,1,93,1,93,1,94,1,94,1,94,1,94,1,94,1,95,1,95,1,95,1,96,1,96,1, - 97,1,97,1,98,1,98,1,99,1,99,1,100,1,100,1,101,1,101,1,102,1,102, - 1,103,1,103,1,104,1,104,1,105,1,105,1,106,1,106,1,107,1,107,1,108, - 1,108,1,109,1,109,1,110,3,110,1011,8,110,1,110,4,110,1014,8,110, - 11,110,12,110,1015,1,111,3,111,1019,8,111,1,111,1,111,1,111,5,111, - 1024,8,111,10,111,12,111,1027,9,111,3,111,1029,8,111,1,111,1,111, - 4,111,1033,8,111,11,111,12,111,1034,3,111,1037,8,111,1,111,1,111, - 3,111,1041,8,111,1,111,4,111,1044,8,111,11,111,12,111,1045,3,111, - 1048,8,111,1,112,1,112,5,112,1052,8,112,10,112,12,112,1055,9,112, - 1,113,1,113,1,113,5,113,1060,8,113,10,113,12,113,1063,9,113,1,113, - 1,113,1,114,1,114,1,114,1,114,1,114,1,114,1,114,1,114,3,114,1075, - 8,114,1,115,1,115,1,116,1,116,1,116,1,116,5,116,1083,8,116,10,116, - 12,116,1086,9,116,1,116,1,116,1,117,1,117,1,117,1,117,5,117,1094, - 8,117,10,117,12,117,1097,9,117,1,117,1,117,1,117,1,117,1,117,1,118, - 4,118,1105,8,118,11,118,12,118,1106,1,118,1,118,1,1095,0,119,1,1, - 3,2,5,3,7,4,9,5,11,6,13,7,15,8,17,9,19,10,21,11,23,12,25,13,27,14, - 29,15,31,16,33,17,35,18,37,19,39,20,41,21,43,22,45,23,47,24,49,25, - 51,26,53,27,55,28,57,29,59,30,61,31,63,32,65,33,67,34,69,35,71,36, - 73,37,75,38,77,39,79,40,81,41,83,42,85,43,87,44,89,45,91,46,93,47, - 95,48,97,49,99,50,101,51,103,52,105,53,107,54,109,55,111,56,113, - 57,115,58,117,59,119,60,121,61,123,62,125,63,127,64,129,65,131,66, - 133,67,135,68,137,69,139,70,141,71,143,72,145,73,147,74,149,75,151, - 76,153,77,155,78,157,79,159,80,161,81,163,82,165,83,167,84,169,85, - 171,86,173,87,175,88,177,89,179,90,181,91,183,92,185,93,187,94,189, - 95,191,96,193,97,195,98,197,99,199,100,201,101,203,102,205,103,207, - 104,209,105,211,106,213,107,215,108,217,109,219,110,221,111,223, - 112,225,113,227,114,229,0,231,0,233,115,235,116,237,117,1,0,11,1, - 0,48,57,1,0,49,57,2,0,69,69,101,101,2,0,43,43,45,45,3,0,65,90,95, - 95,97,122,4,0,48,57,65,90,95,95,97,122,4,0,10,10,13,13,34,34,92, - 92,8,0,34,34,47,47,92,92,98,98,102,102,110,110,114,114,116,116,3, - 0,48,57,65,70,97,102,2,0,10,10,13,13,3,0,9,10,13,13,32,32,1124,0, - 1,1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0,9,1,0,0,0,0,11,1, - 0,0,0,0,13,1,0,0,0,0,15,1,0,0,0,0,17,1,0,0,0,0,19,1,0,0,0,0,21,1, - 0,0,0,0,23,1,0,0,0,0,25,1,0,0,0,0,27,1,0,0,0,0,29,1,0,0,0,0,31,1, - 0,0,0,0,33,1,0,0,0,0,35,1,0,0,0,0,37,1,0,0,0,0,39,1,0,0,0,0,41,1, - 0,0,0,0,43,1,0,0,0,0,45,1,0,0,0,0,47,1,0,0,0,0,49,1,0,0,0,0,51,1, - 0,0,0,0,53,1,0,0,0,0,55,1,0,0,0,0,57,1,0,0,0,0,59,1,0,0,0,0,61,1, - 0,0,0,0,63,1,0,0,0,0,65,1,0,0,0,0,67,1,0,0,0,0,69,1,0,0,0,0,71,1, - 0,0,0,0,73,1,0,0,0,0,75,1,0,0,0,0,77,1,0,0,0,0,79,1,0,0,0,0,81,1, - 0,0,0,0,83,1,0,0,0,0,85,1,0,0,0,0,87,1,0,0,0,0,89,1,0,0,0,0,91,1, - 0,0,0,0,93,1,0,0,0,0,95,1,0,0,0,0,97,1,0,0,0,0,99,1,0,0,0,0,101, - 1,0,0,0,0,103,1,0,0,0,0,105,1,0,0,0,0,107,1,0,0,0,0,109,1,0,0,0, - 0,111,1,0,0,0,0,113,1,0,0,0,0,115,1,0,0,0,0,117,1,0,0,0,0,119,1, - 0,0,0,0,121,1,0,0,0,0,123,1,0,0,0,0,125,1,0,0,0,0,127,1,0,0,0,0, - 129,1,0,0,0,0,131,1,0,0,0,0,133,1,0,0,0,0,135,1,0,0,0,0,137,1,0, - 0,0,0,139,1,0,0,0,0,141,1,0,0,0,0,143,1,0,0,0,0,145,1,0,0,0,0,147, - 1,0,0,0,0,149,1,0,0,0,0,151,1,0,0,0,0,153,1,0,0,0,0,155,1,0,0,0, - 0,157,1,0,0,0,0,159,1,0,0,0,0,161,1,0,0,0,0,163,1,0,0,0,0,165,1, - 0,0,0,0,167,1,0,0,0,0,169,1,0,0,0,0,171,1,0,0,0,0,173,1,0,0,0,0, - 175,1,0,0,0,0,177,1,0,0,0,0,179,1,0,0,0,0,181,1,0,0,0,0,183,1,0, - 0,0,0,185,1,0,0,0,0,187,1,0,0,0,0,189,1,0,0,0,0,191,1,0,0,0,0,193, - 1,0,0,0,0,195,1,0,0,0,0,197,1,0,0,0,0,199,1,0,0,0,0,201,1,0,0,0, - 0,203,1,0,0,0,0,205,1,0,0,0,0,207,1,0,0,0,0,209,1,0,0,0,0,211,1, - 0,0,0,0,213,1,0,0,0,0,215,1,0,0,0,0,217,1,0,0,0,0,219,1,0,0,0,0, - 221,1,0,0,0,0,223,1,0,0,0,0,225,1,0,0,0,0,227,1,0,0,0,0,233,1,0, - 0,0,0,235,1,0,0,0,0,237,1,0,0,0,1,239,1,0,0,0,3,249,1,0,0,0,5,254, - 1,0,0,0,7,261,1,0,0,0,9,270,1,0,0,0,11,281,1,0,0,0,13,285,1,0,0, - 0,15,294,1,0,0,0,17,301,1,0,0,0,19,310,1,0,0,0,21,315,1,0,0,0,23, - 325,1,0,0,0,25,336,1,0,0,0,27,344,1,0,0,0,29,350,1,0,0,0,31,359, - 1,0,0,0,33,369,1,0,0,0,35,378,1,0,0,0,37,390,1,0,0,0,39,401,1,0, - 0,0,41,407,1,0,0,0,43,415,1,0,0,0,45,418,1,0,0,0,47,423,1,0,0,0, - 49,426,1,0,0,0,51,434,1,0,0,0,53,441,1,0,0,0,55,447,1,0,0,0,57,452, - 1,0,0,0,59,463,1,0,0,0,61,468,1,0,0,0,63,474,1,0,0,0,65,478,1,0, - 0,0,67,490,1,0,0,0,69,493,1,0,0,0,71,500,1,0,0,0,73,503,1,0,0,0, - 75,510,1,0,0,0,77,518,1,0,0,0,79,525,1,0,0,0,81,536,1,0,0,0,83,543, - 1,0,0,0,85,552,1,0,0,0,87,567,1,0,0,0,89,577,1,0,0,0,91,590,1,0, - 0,0,93,596,1,0,0,0,95,613,1,0,0,0,97,616,1,0,0,0,99,620,1,0,0,0, - 101,625,1,0,0,0,103,631,1,0,0,0,105,640,1,0,0,0,107,649,1,0,0,0, - 109,653,1,0,0,0,111,657,1,0,0,0,113,661,1,0,0,0,115,667,1,0,0,0, - 117,673,1,0,0,0,119,678,1,0,0,0,121,683,1,0,0,0,123,689,1,0,0,0, - 125,697,1,0,0,0,127,705,1,0,0,0,129,716,1,0,0,0,131,721,1,0,0,0, - 133,733,1,0,0,0,135,744,1,0,0,0,137,754,1,0,0,0,139,766,1,0,0,0, - 141,786,1,0,0,0,143,791,1,0,0,0,145,804,1,0,0,0,147,816,1,0,0,0, - 149,828,1,0,0,0,151,833,1,0,0,0,153,841,1,0,0,0,155,846,1,0,0,0, - 157,859,1,0,0,0,159,867,1,0,0,0,161,876,1,0,0,0,163,890,1,0,0,0, - 165,899,1,0,0,0,167,904,1,0,0,0,169,911,1,0,0,0,171,916,1,0,0,0, - 173,922,1,0,0,0,175,929,1,0,0,0,177,935,1,0,0,0,179,941,1,0,0,0, - 181,948,1,0,0,0,183,955,1,0,0,0,185,962,1,0,0,0,187,967,1,0,0,0, - 189,973,1,0,0,0,191,978,1,0,0,0,193,981,1,0,0,0,195,983,1,0,0,0, - 197,985,1,0,0,0,199,987,1,0,0,0,201,989,1,0,0,0,203,991,1,0,0,0, - 205,993,1,0,0,0,207,995,1,0,0,0,209,997,1,0,0,0,211,999,1,0,0,0, - 213,1001,1,0,0,0,215,1003,1,0,0,0,217,1005,1,0,0,0,219,1007,1,0, - 0,0,221,1010,1,0,0,0,223,1018,1,0,0,0,225,1049,1,0,0,0,227,1056, - 1,0,0,0,229,1066,1,0,0,0,231,1076,1,0,0,0,233,1078,1,0,0,0,235,1089, - 1,0,0,0,237,1104,1,0,0,0,239,240,5,119,0,0,240,241,5,111,0,0,241, - 242,5,114,0,0,242,243,5,107,0,0,243,244,5,115,0,0,244,245,5,112, - 0,0,245,246,5,97,0,0,246,247,5,99,0,0,247,248,5,101,0,0,248,2,1, - 0,0,0,249,250,5,116,0,0,250,251,5,121,0,0,251,252,5,112,0,0,252, - 253,5,101,0,0,253,4,1,0,0,0,254,255,5,111,0,0,255,256,5,98,0,0,256, - 257,5,106,0,0,257,258,5,101,0,0,258,259,5,99,0,0,259,260,5,116,0, - 0,260,6,1,0,0,0,261,262,5,115,0,0,262,263,5,116,0,0,263,264,5,111, - 0,0,264,265,5,114,0,0,265,266,5,97,0,0,266,267,5,98,0,0,267,268, - 5,108,0,0,268,269,5,101,0,0,269,8,1,0,0,0,270,271,5,105,0,0,271, - 272,5,109,0,0,272,273,5,112,0,0,273,274,5,108,0,0,274,275,5,101, - 0,0,275,276,5,109,0,0,276,277,5,101,0,0,277,278,5,110,0,0,278,279, - 5,116,0,0,279,280,5,115,0,0,280,10,1,0,0,0,281,282,5,114,0,0,282, - 283,5,101,0,0,283,284,5,102,0,0,284,12,1,0,0,0,285,286,5,102,0,0, - 286,287,5,114,0,0,287,288,5,97,0,0,288,289,5,103,0,0,289,290,5,109, - 0,0,290,291,5,101,0,0,291,292,5,110,0,0,292,293,5,116,0,0,293,14, - 1,0,0,0,294,295,5,105,0,0,295,296,5,109,0,0,296,297,5,112,0,0,297, - 298,5,111,0,0,298,299,5,114,0,0,299,300,5,116,0,0,300,16,1,0,0,0, - 301,302,5,101,0,0,302,303,5,120,0,0,303,304,5,116,0,0,304,305,5, - 101,0,0,305,306,5,114,0,0,306,307,5,110,0,0,307,308,5,97,0,0,308, - 309,5,108,0,0,309,18,1,0,0,0,310,311,5,97,0,0,311,312,5,116,0,0, - 312,313,5,111,0,0,313,314,5,109,0,0,314,20,1,0,0,0,315,316,5,105, - 0,0,316,317,5,110,0,0,317,318,5,116,0,0,318,319,5,101,0,0,319,320, - 5,114,0,0,320,321,5,102,0,0,321,322,5,97,0,0,322,323,5,99,0,0,323, - 324,5,101,0,0,324,22,1,0,0,0,325,326,5,105,0,0,326,327,5,110,0,0, - 327,328,5,116,0,0,328,329,5,101,0,0,329,330,5,114,0,0,330,331,5, - 102,0,0,331,332,5,97,0,0,332,333,5,99,0,0,333,334,5,101,0,0,334, - 335,5,115,0,0,335,24,1,0,0,0,336,337,5,112,0,0,337,338,5,97,0,0, - 338,339,5,99,0,0,339,340,5,107,0,0,340,341,5,97,0,0,341,342,5,103, - 0,0,342,343,5,101,0,0,343,26,1,0,0,0,344,345,5,118,0,0,345,346,5, - 97,0,0,346,347,5,108,0,0,347,348,5,117,0,0,348,349,5,101,0,0,349, - 28,1,0,0,0,350,351,5,114,0,0,351,352,5,101,0,0,352,353,5,108,0,0, - 353,354,5,97,0,0,354,355,5,116,0,0,355,356,5,105,0,0,356,357,5,111, - 0,0,357,358,5,110,0,0,358,30,1,0,0,0,359,360,5,111,0,0,360,361,5, - 112,0,0,361,362,5,101,0,0,362,363,5,114,0,0,363,364,5,97,0,0,364, - 365,5,116,0,0,365,366,5,105,0,0,366,367,5,111,0,0,367,368,5,110, - 0,0,368,32,1,0,0,0,369,370,5,102,0,0,370,371,5,117,0,0,371,372,5, - 110,0,0,372,373,5,99,0,0,373,374,5,116,0,0,374,375,5,105,0,0,375, - 376,5,111,0,0,376,377,5,110,0,0,377,34,1,0,0,0,378,379,5,99,0,0, - 379,380,5,111,0,0,380,381,5,110,0,0,381,382,5,115,0,0,382,383,5, - 116,0,0,383,384,5,114,0,0,384,385,5,117,0,0,385,386,5,99,0,0,386, - 387,5,116,0,0,387,388,5,111,0,0,388,389,5,114,0,0,389,36,1,0,0,0, - 390,391,5,99,0,0,391,392,5,111,0,0,392,393,5,110,0,0,393,394,5,115, - 0,0,394,395,5,116,0,0,395,396,5,114,0,0,396,397,5,117,0,0,397,398, - 5,99,0,0,398,399,5,116,0,0,399,400,5,115,0,0,400,38,1,0,0,0,401, - 402,5,105,0,0,402,403,5,110,0,0,403,404,5,112,0,0,404,405,5,117, - 0,0,405,406,5,116,0,0,406,40,1,0,0,0,407,408,5,99,0,0,408,409,5, - 111,0,0,409,410,5,110,0,0,410,411,5,102,0,0,411,412,5,111,0,0,412, - 413,5,114,0,0,413,414,5,109,0,0,414,42,1,0,0,0,415,416,5,97,0,0, - 416,417,5,115,0,0,417,44,1,0,0,0,418,419,5,98,0,0,419,420,5,105, - 0,0,420,421,5,110,0,0,421,422,5,100,0,0,422,46,1,0,0,0,423,424,5, - 116,0,0,424,425,5,111,0,0,425,48,1,0,0,0,426,427,5,112,0,0,427,428, - 5,114,0,0,428,429,5,105,0,0,429,430,5,118,0,0,430,431,5,97,0,0,431, - 432,5,116,0,0,432,433,5,101,0,0,433,50,1,0,0,0,434,435,5,115,0,0, - 435,436,5,104,0,0,436,437,5,97,0,0,437,438,5,114,0,0,438,439,5,101, - 0,0,439,440,5,100,0,0,440,52,1,0,0,0,441,442,5,115,0,0,442,443,5, - 116,0,0,443,444,5,97,0,0,444,445,5,116,0,0,445,446,5,101,0,0,446, - 54,1,0,0,0,447,448,5,101,0,0,448,449,5,100,0,0,449,450,5,103,0,0, - 450,451,5,101,0,0,451,56,1,0,0,0,452,453,5,112,0,0,453,454,5,114, - 0,0,454,455,5,111,0,0,455,456,5,106,0,0,456,457,5,101,0,0,457,458, - 5,99,0,0,458,459,5,116,0,0,459,460,5,105,0,0,460,461,5,111,0,0,461, - 462,5,110,0,0,462,58,1,0,0,0,463,464,5,119,0,0,464,465,5,105,0,0, - 465,466,5,116,0,0,466,467,5,104,0,0,467,60,1,0,0,0,468,469,5,117, - 0,0,469,470,5,115,0,0,470,471,5,105,0,0,471,472,5,110,0,0,472,473, - 5,103,0,0,473,62,1,0,0,0,474,475,5,118,0,0,475,476,5,105,0,0,476, - 477,5,97,0,0,477,64,1,0,0,0,478,479,5,109,0,0,479,480,5,97,0,0,480, - 481,5,116,0,0,481,482,5,101,0,0,482,483,5,114,0,0,483,484,5,105, - 0,0,484,485,5,97,0,0,485,486,5,108,0,0,486,487,5,105,0,0,487,488, - 5,122,0,0,488,489,5,101,0,0,489,66,1,0,0,0,490,491,5,105,0,0,491, - 492,5,102,0,0,492,68,1,0,0,0,493,494,5,97,0,0,494,495,5,98,0,0,495, - 496,5,115,0,0,496,497,5,101,0,0,497,498,5,110,0,0,498,499,5,116, - 0,0,499,70,1,0,0,0,500,501,5,111,0,0,501,502,5,110,0,0,502,72,1, - 0,0,0,503,504,5,112,0,0,504,505,5,111,0,0,505,506,5,108,0,0,506, - 507,5,105,0,0,507,508,5,99,0,0,508,509,5,121,0,0,509,74,1,0,0,0, - 510,511,5,100,0,0,511,512,5,101,0,0,512,513,5,102,0,0,513,514,5, - 97,0,0,514,515,5,117,0,0,515,516,5,108,0,0,516,517,5,116,0,0,517, - 76,1,0,0,0,518,519,5,115,0,0,519,520,5,111,0,0,520,521,5,117,0,0, - 521,522,5,114,0,0,522,523,5,99,0,0,523,524,5,101,0,0,524,78,1,0, - 0,0,525,526,5,114,0,0,526,527,5,101,0,0,527,528,5,112,0,0,528,529, - 5,111,0,0,529,530,5,115,0,0,530,531,5,105,0,0,531,532,5,116,0,0, - 532,533,5,111,0,0,533,534,5,114,0,0,534,535,5,121,0,0,535,80,1,0, - 0,0,536,537,5,99,0,0,537,538,5,111,0,0,538,539,5,109,0,0,539,540, - 5,109,0,0,540,541,5,105,0,0,541,542,5,116,0,0,542,82,1,0,0,0,543, - 544,5,114,0,0,544,545,5,101,0,0,545,546,5,118,0,0,546,547,5,105, - 0,0,547,548,5,115,0,0,548,549,5,105,0,0,549,550,5,111,0,0,550,551, - 5,110,0,0,551,84,1,0,0,0,552,553,5,115,0,0,553,554,5,101,0,0,554, - 555,5,109,0,0,555,556,5,97,0,0,556,557,5,110,0,0,557,558,5,116,0, - 0,558,559,5,105,0,0,559,560,5,99,0,0,560,561,5,45,0,0,561,562,5, - 109,0,0,562,563,5,97,0,0,563,564,5,106,0,0,564,565,5,111,0,0,565, - 566,5,114,0,0,566,86,1,0,0,0,567,568,5,111,0,0,568,569,5,110,0,0, - 569,570,5,45,0,0,570,571,5,100,0,0,571,572,5,101,0,0,572,573,5,108, - 0,0,573,574,5,101,0,0,574,575,5,116,0,0,575,576,5,101,0,0,576,88, - 1,0,0,0,577,578,5,114,0,0,578,579,5,101,0,0,579,580,5,116,0,0,580, - 581,5,97,0,0,581,582,5,105,0,0,582,583,5,110,0,0,583,584,5,45,0, - 0,584,585,5,111,0,0,585,586,5,116,0,0,586,587,5,104,0,0,587,588, - 5,101,0,0,588,589,5,114,0,0,589,90,1,0,0,0,590,591,5,107,0,0,591, - 592,5,101,0,0,592,593,5,121,0,0,593,594,5,101,0,0,594,595,5,100, - 0,0,595,92,1,0,0,0,596,597,5,112,0,0,597,598,5,117,0,0,598,599,5, - 98,0,0,599,600,5,108,0,0,600,601,5,105,0,0,601,602,5,99,0,0,602, - 603,5,45,0,0,603,604,5,116,0,0,604,605,5,114,0,0,605,606,5,97,0, - 0,606,607,5,118,0,0,607,608,5,101,0,0,608,609,5,114,0,0,609,610, - 5,115,0,0,610,611,5,97,0,0,611,612,5,108,0,0,612,94,1,0,0,0,613, - 614,5,105,0,0,614,615,5,100,0,0,615,96,1,0,0,0,616,617,5,100,0,0, - 617,618,5,111,0,0,618,619,5,99,0,0,619,98,1,0,0,0,620,621,5,109, - 0,0,621,622,5,111,0,0,622,623,5,100,0,0,623,624,5,101,0,0,624,100, - 1,0,0,0,625,626,5,101,0,0,626,627,5,109,0,0,627,628,5,105,0,0,628, - 629,5,116,0,0,629,630,5,115,0,0,630,102,1,0,0,0,631,632,5,114,0, - 0,632,633,5,101,0,0,633,634,5,99,0,0,634,635,5,101,0,0,635,636,5, - 105,0,0,636,637,5,118,0,0,637,638,5,101,0,0,638,639,5,114,0,0,639, - 104,1,0,0,0,640,641,5,114,0,0,641,642,5,101,0,0,642,643,5,113,0, - 0,643,644,5,117,0,0,644,645,5,105,0,0,645,646,5,114,0,0,646,647, - 5,101,0,0,647,648,5,115,0,0,648,106,1,0,0,0,649,650,5,97,0,0,650, - 651,5,110,0,0,651,652,5,121,0,0,652,108,1,0,0,0,653,654,5,103,0, - 0,654,655,5,101,0,0,655,656,5,116,0,0,656,110,1,0,0,0,657,658,5, - 115,0,0,658,659,5,101,0,0,659,660,5,116,0,0,660,112,1,0,0,0,661, - 662,5,119,0,0,662,663,5,97,0,0,663,664,5,116,0,0,664,665,5,99,0, - 0,665,666,5,104,0,0,666,114,1,0,0,0,667,668,5,115,0,0,668,669,5, - 116,0,0,669,670,5,97,0,0,670,671,5,114,0,0,671,672,5,116,0,0,672, - 116,1,0,0,0,673,674,5,115,0,0,674,675,5,116,0,0,675,676,5,111,0, - 0,676,677,5,112,0,0,677,118,1,0,0,0,678,679,5,114,0,0,679,680,5, - 101,0,0,680,681,5,97,0,0,681,682,5,100,0,0,682,120,1,0,0,0,683,684, - 5,119,0,0,684,685,5,114,0,0,685,686,5,105,0,0,686,687,5,116,0,0, - 687,688,5,101,0,0,688,122,1,0,0,0,689,690,5,114,0,0,690,691,5,101, - 0,0,691,692,5,115,0,0,692,693,5,111,0,0,693,694,5,108,0,0,694,695, - 5,118,0,0,695,696,5,101,0,0,696,124,1,0,0,0,697,698,5,99,0,0,698, - 699,5,111,0,0,699,700,5,110,0,0,700,701,5,110,0,0,701,702,5,101, - 0,0,702,703,5,99,0,0,703,704,5,116,0,0,704,126,1,0,0,0,705,706,5, - 100,0,0,706,707,5,105,0,0,707,708,5,115,0,0,708,709,5,99,0,0,709, - 710,5,111,0,0,710,711,5,110,0,0,711,712,5,110,0,0,712,713,5,101, - 0,0,713,714,5,99,0,0,714,715,5,116,0,0,715,128,1,0,0,0,716,717,5, - 99,0,0,717,718,5,97,0,0,718,719,5,108,0,0,719,720,5,108,0,0,720, - 130,1,0,0,0,721,722,5,119,0,0,722,723,5,97,0,0,723,724,5,116,0,0, - 724,725,5,99,0,0,725,726,5,104,0,0,726,727,5,45,0,0,727,728,5,115, - 0,0,728,729,5,116,0,0,729,730,5,97,0,0,730,731,5,114,0,0,731,732, - 5,116,0,0,732,132,1,0,0,0,733,734,5,119,0,0,734,735,5,97,0,0,735, - 736,5,116,0,0,736,737,5,99,0,0,737,738,5,104,0,0,738,739,5,45,0, - 0,739,740,5,115,0,0,740,741,5,116,0,0,741,742,5,111,0,0,742,743, - 5,112,0,0,743,134,1,0,0,0,744,745,5,115,0,0,745,746,5,117,0,0,746, - 747,5,98,0,0,747,748,5,115,0,0,748,749,5,99,0,0,749,750,5,114,0, - 0,750,751,5,105,0,0,751,752,5,98,0,0,752,753,5,101,0,0,753,136,1, - 0,0,0,754,755,5,117,0,0,755,756,5,110,0,0,756,757,5,115,0,0,757, - 758,5,117,0,0,758,759,5,98,0,0,759,760,5,115,0,0,760,761,5,99,0, - 0,761,762,5,114,0,0,762,763,5,105,0,0,763,764,5,98,0,0,764,765,5, - 101,0,0,765,138,1,0,0,0,766,767,5,111,0,0,767,768,5,112,0,0,768, - 769,5,116,0,0,769,770,5,105,0,0,770,771,5,109,0,0,771,772,5,105, - 0,0,772,773,5,115,0,0,773,774,5,116,0,0,774,775,5,105,0,0,775,776, - 5,99,0,0,776,777,5,45,0,0,777,778,5,114,0,0,778,779,5,101,0,0,779, - 780,5,103,0,0,780,781,5,105,0,0,781,782,5,115,0,0,782,783,5,116, - 0,0,783,784,5,101,0,0,784,785,5,114,0,0,785,140,1,0,0,0,786,787, - 5,99,0,0,787,788,5,114,0,0,788,789,5,100,0,0,789,790,5,116,0,0,790, - 142,1,0,0,0,791,792,5,111,0,0,792,793,5,112,0,0,793,794,5,116,0, - 0,794,795,5,105,0,0,795,796,5,111,0,0,796,797,5,110,0,0,797,798, - 5,97,0,0,798,799,5,108,0,0,799,800,5,45,0,0,800,801,5,111,0,0,801, - 802,5,110,0,0,802,803,5,101,0,0,803,144,1,0,0,0,804,805,5,101,0, - 0,805,806,5,120,0,0,806,807,5,97,0,0,807,808,5,99,0,0,808,809,5, - 116,0,0,809,810,5,108,0,0,810,811,5,121,0,0,811,812,5,45,0,0,812, - 813,5,111,0,0,813,814,5,110,0,0,814,815,5,101,0,0,815,146,1,0,0, - 0,816,817,5,109,0,0,817,818,5,97,0,0,818,819,5,110,0,0,819,820,5, - 121,0,0,820,821,5,45,0,0,821,822,5,117,0,0,822,823,5,110,0,0,823, - 824,5,105,0,0,824,825,5,113,0,0,825,826,5,117,0,0,826,827,5,101, - 0,0,827,148,1,0,0,0,828,829,5,109,0,0,829,830,5,97,0,0,830,831,5, - 110,0,0,831,832,5,121,0,0,832,150,1,0,0,0,833,834,5,111,0,0,834, - 835,5,114,0,0,835,836,5,100,0,0,836,837,5,101,0,0,837,838,5,114, - 0,0,838,839,5,101,0,0,839,840,5,100,0,0,840,152,1,0,0,0,841,842, - 5,117,0,0,842,843,5,110,0,0,843,844,5,105,0,0,844,845,5,116,0,0, - 845,154,1,0,0,0,846,847,5,119,0,0,847,848,5,97,0,0,848,849,5,116, - 0,0,849,850,5,99,0,0,850,851,5,104,0,0,851,852,5,45,0,0,852,853, - 5,104,0,0,853,854,5,97,0,0,854,855,5,110,0,0,855,856,5,100,0,0,856, - 857,5,108,0,0,857,858,5,101,0,0,858,156,1,0,0,0,859,860,5,109,0, - 0,860,861,5,101,0,0,861,862,5,115,0,0,862,863,5,115,0,0,863,864, - 5,97,0,0,864,865,5,103,0,0,865,866,5,101,0,0,866,158,1,0,0,0,867, - 868,5,97,0,0,868,869,5,116,0,0,869,870,5,111,0,0,870,871,5,109,0, - 0,871,872,5,45,0,0,872,873,5,114,0,0,873,874,5,101,0,0,874,875,5, - 102,0,0,875,160,1,0,0,0,876,877,5,105,0,0,877,878,5,110,0,0,878, - 879,5,116,0,0,879,880,5,101,0,0,880,881,5,114,0,0,881,882,5,102, - 0,0,882,883,5,97,0,0,883,884,5,99,0,0,884,885,5,101,0,0,885,886, - 5,45,0,0,886,887,5,114,0,0,887,888,5,101,0,0,888,889,5,102,0,0,889, - 162,1,0,0,0,890,891,5,111,0,0,891,892,5,112,0,0,892,893,5,116,0, - 0,893,894,5,105,0,0,894,895,5,111,0,0,895,896,5,110,0,0,896,897, - 5,97,0,0,897,898,5,108,0,0,898,164,1,0,0,0,899,900,5,108,0,0,900, - 901,5,105,0,0,901,902,5,115,0,0,902,903,5,116,0,0,903,166,1,0,0, - 0,904,905,5,114,0,0,905,906,5,101,0,0,906,907,5,99,0,0,907,908,5, - 111,0,0,908,909,5,114,0,0,909,910,5,100,0,0,910,168,1,0,0,0,911, - 912,5,98,0,0,912,913,5,111,0,0,913,914,5,111,0,0,914,915,5,108,0, - 0,915,170,1,0,0,0,916,917,5,98,0,0,917,918,5,121,0,0,918,919,5,116, - 0,0,919,920,5,101,0,0,920,921,5,115,0,0,921,172,1,0,0,0,922,923, - 5,100,0,0,923,924,5,111,0,0,924,925,5,117,0,0,925,926,5,98,0,0,926, - 927,5,108,0,0,927,928,5,101,0,0,928,174,1,0,0,0,929,930,5,105,0, - 0,930,931,5,110,0,0,931,932,5,116,0,0,932,933,5,51,0,0,933,934,5, - 50,0,0,934,176,1,0,0,0,935,936,5,105,0,0,936,937,5,110,0,0,937,938, - 5,116,0,0,938,939,5,54,0,0,939,940,5,52,0,0,940,178,1,0,0,0,941, - 942,5,115,0,0,942,943,5,116,0,0,943,944,5,114,0,0,944,945,5,105, - 0,0,945,946,5,110,0,0,946,947,5,103,0,0,947,180,1,0,0,0,948,949, - 5,117,0,0,949,950,5,105,0,0,950,951,5,110,0,0,951,952,5,116,0,0, - 952,953,5,51,0,0,953,954,5,50,0,0,954,182,1,0,0,0,955,956,5,117, - 0,0,956,957,5,105,0,0,957,958,5,110,0,0,958,959,5,116,0,0,959,960, - 5,54,0,0,960,961,5,52,0,0,961,184,1,0,0,0,962,963,5,116,0,0,963, - 964,5,114,0,0,964,965,5,117,0,0,965,966,5,101,0,0,966,186,1,0,0, - 0,967,968,5,102,0,0,968,969,5,97,0,0,969,970,5,108,0,0,970,971,5, - 115,0,0,971,972,5,101,0,0,972,188,1,0,0,0,973,974,5,110,0,0,974, - 975,5,117,0,0,975,976,5,108,0,0,976,977,5,108,0,0,977,190,1,0,0, - 0,978,979,5,45,0,0,979,980,5,62,0,0,980,192,1,0,0,0,981,982,5,58, - 0,0,982,194,1,0,0,0,983,984,5,59,0,0,984,196,1,0,0,0,985,986,5,44, - 0,0,986,198,1,0,0,0,987,988,5,46,0,0,988,200,1,0,0,0,989,990,5,123, - 0,0,990,202,1,0,0,0,991,992,5,125,0,0,992,204,1,0,0,0,993,994,5, - 91,0,0,994,206,1,0,0,0,995,996,5,93,0,0,996,208,1,0,0,0,997,998, - 5,40,0,0,998,210,1,0,0,0,999,1000,5,41,0,0,1000,212,1,0,0,0,1001, - 1002,5,60,0,0,1002,214,1,0,0,0,1003,1004,5,62,0,0,1004,216,1,0,0, - 0,1005,1006,5,38,0,0,1006,218,1,0,0,0,1007,1008,5,61,0,0,1008,220, - 1,0,0,0,1009,1011,5,45,0,0,1010,1009,1,0,0,0,1010,1011,1,0,0,0,1011, - 1013,1,0,0,0,1012,1014,7,0,0,0,1013,1012,1,0,0,0,1014,1015,1,0,0, - 0,1015,1013,1,0,0,0,1015,1016,1,0,0,0,1016,222,1,0,0,0,1017,1019, - 5,45,0,0,1018,1017,1,0,0,0,1018,1019,1,0,0,0,1019,1028,1,0,0,0,1020, - 1029,5,48,0,0,1021,1025,7,1,0,0,1022,1024,7,0,0,0,1023,1022,1,0, - 0,0,1024,1027,1,0,0,0,1025,1023,1,0,0,0,1025,1026,1,0,0,0,1026,1029, - 1,0,0,0,1027,1025,1,0,0,0,1028,1020,1,0,0,0,1028,1021,1,0,0,0,1029, - 1036,1,0,0,0,1030,1032,5,46,0,0,1031,1033,7,0,0,0,1032,1031,1,0, - 0,0,1033,1034,1,0,0,0,1034,1032,1,0,0,0,1034,1035,1,0,0,0,1035,1037, - 1,0,0,0,1036,1030,1,0,0,0,1036,1037,1,0,0,0,1037,1047,1,0,0,0,1038, - 1040,7,2,0,0,1039,1041,7,3,0,0,1040,1039,1,0,0,0,1040,1041,1,0,0, - 0,1041,1043,1,0,0,0,1042,1044,7,0,0,0,1043,1042,1,0,0,0,1044,1045, - 1,0,0,0,1045,1043,1,0,0,0,1045,1046,1,0,0,0,1046,1048,1,0,0,0,1047, - 1038,1,0,0,0,1047,1048,1,0,0,0,1048,224,1,0,0,0,1049,1053,7,4,0, - 0,1050,1052,7,5,0,0,1051,1050,1,0,0,0,1052,1055,1,0,0,0,1053,1051, - 1,0,0,0,1053,1054,1,0,0,0,1054,226,1,0,0,0,1055,1053,1,0,0,0,1056, - 1061,5,34,0,0,1057,1060,3,229,114,0,1058,1060,8,6,0,0,1059,1057, - 1,0,0,0,1059,1058,1,0,0,0,1060,1063,1,0,0,0,1061,1059,1,0,0,0,1061, - 1062,1,0,0,0,1062,1064,1,0,0,0,1063,1061,1,0,0,0,1064,1065,5,34, - 0,0,1065,228,1,0,0,0,1066,1074,5,92,0,0,1067,1075,7,7,0,0,1068,1069, - 5,117,0,0,1069,1070,3,231,115,0,1070,1071,3,231,115,0,1071,1072, - 3,231,115,0,1072,1073,3,231,115,0,1073,1075,1,0,0,0,1074,1067,1, - 0,0,0,1074,1068,1,0,0,0,1075,230,1,0,0,0,1076,1077,7,8,0,0,1077, - 232,1,0,0,0,1078,1079,5,47,0,0,1079,1080,5,47,0,0,1080,1084,1,0, - 0,0,1081,1083,8,9,0,0,1082,1081,1,0,0,0,1083,1086,1,0,0,0,1084,1082, - 1,0,0,0,1084,1085,1,0,0,0,1085,1087,1,0,0,0,1086,1084,1,0,0,0,1087, - 1088,6,116,0,0,1088,234,1,0,0,0,1089,1090,5,47,0,0,1090,1091,5,42, - 0,0,1091,1095,1,0,0,0,1092,1094,9,0,0,0,1093,1092,1,0,0,0,1094,1097, - 1,0,0,0,1095,1096,1,0,0,0,1095,1093,1,0,0,0,1096,1098,1,0,0,0,1097, - 1095,1,0,0,0,1098,1099,5,42,0,0,1099,1100,5,47,0,0,1100,1101,1,0, - 0,0,1101,1102,6,117,0,0,1102,236,1,0,0,0,1103,1105,7,10,0,0,1104, - 1103,1,0,0,0,1105,1106,1,0,0,0,1106,1104,1,0,0,0,1106,1107,1,0,0, - 0,1107,1108,1,0,0,0,1108,1109,6,118,0,0,1109,238,1,0,0,0,18,0,1010, - 1015,1018,1025,1028,1034,1036,1040,1045,1047,1053,1059,1061,1074, - 1084,1095,1106,1,0,1,0 + 7,114,2,115,7,115,2,116,7,116,2,117,7,117,2,118,7,118,2,119,7,119, + 1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,2, + 1,2,1,2,1,2,1,2,1,2,1,2,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,4, + 1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,5,1,5,1,5,1,5,1,6,1,6, + 1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,8,1,8, + 1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,9,1,9,1,9,1,9,1,9,1,10,1,10,1,10,1, + 10,1,10,1,10,1,10,1,10,1,10,1,10,1,11,1,11,1,11,1,11,1,11,1,11,1, + 11,1,11,1,11,1,11,1,11,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1, + 13,1,13,1,13,1,13,1,13,1,13,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1, + 14,1,14,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,16,1, + 16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,17,1,17,1,17,1,17,1,17,1, + 17,1,17,1,17,1,17,1,17,1,17,1,17,1,18,1,18,1,18,1,18,1,18,1,18,1, + 18,1,18,1,18,1,18,1,18,1,19,1,19,1,19,1,19,1,19,1,19,1,20,1,20,1, + 20,1,20,1,20,1,20,1,20,1,20,1,21,1,21,1,21,1,22,1,22,1,22,1,22,1, + 22,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,24,1,24,1,24,1,25,1,25,1, + 25,1,25,1,25,1,25,1,25,1,25,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1, + 27,1,27,1,27,1,27,1,27,1,27,1,28,1,28,1,28,1,28,1,28,1,29,1,29,1, + 29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,30,1,30,1,30,1,30,1, + 30,1,31,1,31,1,31,1,31,1,31,1,31,1,32,1,32,1,32,1,32,1,33,1,33,1, + 33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,34,1,34,1,34,1, + 35,1,35,1,35,1,35,1,35,1,35,1,35,1,36,1,36,1,36,1,37,1,37,1,37,1, + 37,1,37,1,37,1,37,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,39,1, + 39,1,39,1,39,1,39,1,39,1,39,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1, + 40,1,40,1,40,1,40,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,42,1,42,1, + 42,1,42,1,42,1,42,1,42,1,42,1,42,1,43,1,43,1,43,1,43,1,43,1,43,1, + 43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,44,1,44,1,44,1,44,1, + 44,1,44,1,44,1,44,1,44,1,44,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1, + 45,1,45,1,45,1,45,1,45,1,45,1,46,1,46,1,46,1,46,1,46,1,46,1,47,1, + 47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1, + 47,1,47,1,47,1,48,1,48,1,48,1,49,1,49,1,49,1,49,1,50,1,50,1,50,1, + 50,1,50,1,51,1,51,1,51,1,51,1,51,1,51,1,52,1,52,1,52,1,52,1,52,1, + 52,1,52,1,52,1,52,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1, + 54,1,54,1,54,1,54,1,55,1,55,1,55,1,55,1,56,1,56,1,56,1,56,1,57,1, + 57,1,57,1,57,1,57,1,57,1,58,1,58,1,58,1,58,1,58,1,58,1,59,1,59,1, + 59,1,59,1,59,1,60,1,60,1,60,1,60,1,60,1,61,1,61,1,61,1,61,1,61,1, + 61,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,63,1,63,1,63,1,63,1, + 63,1,63,1,63,1,63,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1, + 64,1,64,1,65,1,65,1,65,1,65,1,65,1,66,1,66,1,66,1,66,1,66,1,66,1, + 66,1,66,1,66,1,66,1,66,1,66,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1, + 67,1,67,1,67,1,67,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1, + 68,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1, + 70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1, + 70,1,70,1,70,1,70,1,70,1,70,1,70,1,71,1,71,1,71,1,71,1,71,1,72,1, + 72,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,73,1, + 73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,74,1,74,1, + 74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,75,1,75,1,75,1, + 75,1,75,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,77,1,77,1,77,1, + 77,1,77,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1, + 78,1,78,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,80,1,80,1,80,1, + 80,1,80,1,80,1,80,1,80,1,80,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1, + 81,1,81,1,81,1,81,1,81,1,81,1,81,1,82,1,82,1,82,1,82,1,82,1,82,1, + 82,1,82,1,82,1,83,1,83,1,83,1,83,1,83,1,84,1,84,1,84,1,84,1,84,1, + 84,1,84,1,85,1,85,1,85,1,85,1,85,1,86,1,86,1,86,1,86,1,86,1,86,1, + 87,1,87,1,87,1,87,1,87,1,87,1,87,1,88,1,88,1,88,1,88,1,88,1,88,1, + 89,1,89,1,89,1,89,1,89,1,89,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1, + 91,1,91,1,91,1,91,1,91,1,91,1,91,1,92,1,92,1,92,1,92,1,92,1,92,1, + 92,1,93,1,93,1,93,1,93,1,93,1,94,1,94,1,94,1,94,1,94,1,94,1,95,1, + 95,1,95,1,95,1,95,1,96,1,96,1,96,1,97,1,97,1,98,1,98,1,99,1,99,1, + 100,1,100,1,101,1,101,1,102,1,102,1,103,1,103,1,104,1,104,1,105, + 1,105,1,106,1,106,1,107,1,107,1,108,1,108,1,109,1,109,1,110,1,110, + 1,111,3,111,1020,8,111,1,111,4,111,1023,8,111,11,111,12,111,1024, + 1,112,3,112,1028,8,112,1,112,1,112,1,112,5,112,1033,8,112,10,112, + 12,112,1036,9,112,3,112,1038,8,112,1,112,1,112,4,112,1042,8,112, + 11,112,12,112,1043,3,112,1046,8,112,1,112,1,112,3,112,1050,8,112, + 1,112,4,112,1053,8,112,11,112,12,112,1054,3,112,1057,8,112,1,113, + 1,113,5,113,1061,8,113,10,113,12,113,1064,9,113,1,114,1,114,1,114, + 5,114,1069,8,114,10,114,12,114,1072,9,114,1,114,1,114,1,115,1,115, + 1,115,1,115,1,115,1,115,1,115,1,115,3,115,1084,8,115,1,116,1,116, + 1,117,1,117,1,117,1,117,5,117,1092,8,117,10,117,12,117,1095,9,117, + 1,117,1,117,1,118,1,118,1,118,1,118,5,118,1103,8,118,10,118,12,118, + 1106,9,118,1,118,1,118,1,118,1,118,1,118,1,119,4,119,1114,8,119, + 11,119,12,119,1115,1,119,1,119,1,1104,0,120,1,1,3,2,5,3,7,4,9,5, + 11,6,13,7,15,8,17,9,19,10,21,11,23,12,25,13,27,14,29,15,31,16,33, + 17,35,18,37,19,39,20,41,21,43,22,45,23,47,24,49,25,51,26,53,27,55, + 28,57,29,59,30,61,31,63,32,65,33,67,34,69,35,71,36,73,37,75,38,77, + 39,79,40,81,41,83,42,85,43,87,44,89,45,91,46,93,47,95,48,97,49,99, + 50,101,51,103,52,105,53,107,54,109,55,111,56,113,57,115,58,117,59, + 119,60,121,61,123,62,125,63,127,64,129,65,131,66,133,67,135,68,137, + 69,139,70,141,71,143,72,145,73,147,74,149,75,151,76,153,77,155,78, + 157,79,159,80,161,81,163,82,165,83,167,84,169,85,171,86,173,87,175, + 88,177,89,179,90,181,91,183,92,185,93,187,94,189,95,191,96,193,97, + 195,98,197,99,199,100,201,101,203,102,205,103,207,104,209,105,211, + 106,213,107,215,108,217,109,219,110,221,111,223,112,225,113,227, + 114,229,115,231,0,233,0,235,116,237,117,239,118,1,0,11,1,0,48,57, + 1,0,49,57,2,0,69,69,101,101,2,0,43,43,45,45,3,0,65,90,95,95,97,122, + 4,0,48,57,65,90,95,95,97,122,4,0,10,10,13,13,34,34,92,92,8,0,34, + 34,47,47,92,92,98,98,102,102,110,110,114,114,116,116,3,0,48,57,65, + 70,97,102,2,0,10,10,13,13,3,0,9,10,13,13,32,32,1133,0,1,1,0,0,0, + 0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0,9,1,0,0,0,0,11,1,0,0,0,0,13, + 1,0,0,0,0,15,1,0,0,0,0,17,1,0,0,0,0,19,1,0,0,0,0,21,1,0,0,0,0,23, + 1,0,0,0,0,25,1,0,0,0,0,27,1,0,0,0,0,29,1,0,0,0,0,31,1,0,0,0,0,33, + 1,0,0,0,0,35,1,0,0,0,0,37,1,0,0,0,0,39,1,0,0,0,0,41,1,0,0,0,0,43, + 1,0,0,0,0,45,1,0,0,0,0,47,1,0,0,0,0,49,1,0,0,0,0,51,1,0,0,0,0,53, + 1,0,0,0,0,55,1,0,0,0,0,57,1,0,0,0,0,59,1,0,0,0,0,61,1,0,0,0,0,63, + 1,0,0,0,0,65,1,0,0,0,0,67,1,0,0,0,0,69,1,0,0,0,0,71,1,0,0,0,0,73, + 1,0,0,0,0,75,1,0,0,0,0,77,1,0,0,0,0,79,1,0,0,0,0,81,1,0,0,0,0,83, + 1,0,0,0,0,85,1,0,0,0,0,87,1,0,0,0,0,89,1,0,0,0,0,91,1,0,0,0,0,93, + 1,0,0,0,0,95,1,0,0,0,0,97,1,0,0,0,0,99,1,0,0,0,0,101,1,0,0,0,0,103, + 1,0,0,0,0,105,1,0,0,0,0,107,1,0,0,0,0,109,1,0,0,0,0,111,1,0,0,0, + 0,113,1,0,0,0,0,115,1,0,0,0,0,117,1,0,0,0,0,119,1,0,0,0,0,121,1, + 0,0,0,0,123,1,0,0,0,0,125,1,0,0,0,0,127,1,0,0,0,0,129,1,0,0,0,0, + 131,1,0,0,0,0,133,1,0,0,0,0,135,1,0,0,0,0,137,1,0,0,0,0,139,1,0, + 0,0,0,141,1,0,0,0,0,143,1,0,0,0,0,145,1,0,0,0,0,147,1,0,0,0,0,149, + 1,0,0,0,0,151,1,0,0,0,0,153,1,0,0,0,0,155,1,0,0,0,0,157,1,0,0,0, + 0,159,1,0,0,0,0,161,1,0,0,0,0,163,1,0,0,0,0,165,1,0,0,0,0,167,1, + 0,0,0,0,169,1,0,0,0,0,171,1,0,0,0,0,173,1,0,0,0,0,175,1,0,0,0,0, + 177,1,0,0,0,0,179,1,0,0,0,0,181,1,0,0,0,0,183,1,0,0,0,0,185,1,0, + 0,0,0,187,1,0,0,0,0,189,1,0,0,0,0,191,1,0,0,0,0,193,1,0,0,0,0,195, + 1,0,0,0,0,197,1,0,0,0,0,199,1,0,0,0,0,201,1,0,0,0,0,203,1,0,0,0, + 0,205,1,0,0,0,0,207,1,0,0,0,0,209,1,0,0,0,0,211,1,0,0,0,0,213,1, + 0,0,0,0,215,1,0,0,0,0,217,1,0,0,0,0,219,1,0,0,0,0,221,1,0,0,0,0, + 223,1,0,0,0,0,225,1,0,0,0,0,227,1,0,0,0,0,229,1,0,0,0,0,235,1,0, + 0,0,0,237,1,0,0,0,0,239,1,0,0,0,1,241,1,0,0,0,3,251,1,0,0,0,5,256, + 1,0,0,0,7,263,1,0,0,0,9,272,1,0,0,0,11,283,1,0,0,0,13,287,1,0,0, + 0,15,296,1,0,0,0,17,303,1,0,0,0,19,312,1,0,0,0,21,317,1,0,0,0,23, + 327,1,0,0,0,25,338,1,0,0,0,27,346,1,0,0,0,29,352,1,0,0,0,31,361, + 1,0,0,0,33,371,1,0,0,0,35,380,1,0,0,0,37,392,1,0,0,0,39,403,1,0, + 0,0,41,409,1,0,0,0,43,417,1,0,0,0,45,420,1,0,0,0,47,425,1,0,0,0, + 49,432,1,0,0,0,51,435,1,0,0,0,53,443,1,0,0,0,55,450,1,0,0,0,57,456, + 1,0,0,0,59,461,1,0,0,0,61,472,1,0,0,0,63,477,1,0,0,0,65,483,1,0, + 0,0,67,487,1,0,0,0,69,499,1,0,0,0,71,502,1,0,0,0,73,509,1,0,0,0, + 75,512,1,0,0,0,77,519,1,0,0,0,79,527,1,0,0,0,81,534,1,0,0,0,83,545, + 1,0,0,0,85,552,1,0,0,0,87,561,1,0,0,0,89,576,1,0,0,0,91,586,1,0, + 0,0,93,599,1,0,0,0,95,605,1,0,0,0,97,622,1,0,0,0,99,625,1,0,0,0, + 101,629,1,0,0,0,103,634,1,0,0,0,105,640,1,0,0,0,107,649,1,0,0,0, + 109,658,1,0,0,0,111,662,1,0,0,0,113,666,1,0,0,0,115,670,1,0,0,0, + 117,676,1,0,0,0,119,682,1,0,0,0,121,687,1,0,0,0,123,692,1,0,0,0, + 125,698,1,0,0,0,127,706,1,0,0,0,129,714,1,0,0,0,131,725,1,0,0,0, + 133,730,1,0,0,0,135,742,1,0,0,0,137,753,1,0,0,0,139,763,1,0,0,0, + 141,775,1,0,0,0,143,795,1,0,0,0,145,800,1,0,0,0,147,813,1,0,0,0, + 149,825,1,0,0,0,151,837,1,0,0,0,153,842,1,0,0,0,155,850,1,0,0,0, + 157,855,1,0,0,0,159,868,1,0,0,0,161,876,1,0,0,0,163,885,1,0,0,0, + 165,899,1,0,0,0,167,908,1,0,0,0,169,913,1,0,0,0,171,920,1,0,0,0, + 173,925,1,0,0,0,175,931,1,0,0,0,177,938,1,0,0,0,179,944,1,0,0,0, + 181,950,1,0,0,0,183,957,1,0,0,0,185,964,1,0,0,0,187,971,1,0,0,0, + 189,976,1,0,0,0,191,982,1,0,0,0,193,987,1,0,0,0,195,990,1,0,0,0, + 197,992,1,0,0,0,199,994,1,0,0,0,201,996,1,0,0,0,203,998,1,0,0,0, + 205,1000,1,0,0,0,207,1002,1,0,0,0,209,1004,1,0,0,0,211,1006,1,0, + 0,0,213,1008,1,0,0,0,215,1010,1,0,0,0,217,1012,1,0,0,0,219,1014, + 1,0,0,0,221,1016,1,0,0,0,223,1019,1,0,0,0,225,1027,1,0,0,0,227,1058, + 1,0,0,0,229,1065,1,0,0,0,231,1075,1,0,0,0,233,1085,1,0,0,0,235,1087, + 1,0,0,0,237,1098,1,0,0,0,239,1113,1,0,0,0,241,242,5,119,0,0,242, + 243,5,111,0,0,243,244,5,114,0,0,244,245,5,107,0,0,245,246,5,115, + 0,0,246,247,5,112,0,0,247,248,5,97,0,0,248,249,5,99,0,0,249,250, + 5,101,0,0,250,2,1,0,0,0,251,252,5,116,0,0,252,253,5,121,0,0,253, + 254,5,112,0,0,254,255,5,101,0,0,255,4,1,0,0,0,256,257,5,111,0,0, + 257,258,5,98,0,0,258,259,5,106,0,0,259,260,5,101,0,0,260,261,5,99, + 0,0,261,262,5,116,0,0,262,6,1,0,0,0,263,264,5,115,0,0,264,265,5, + 116,0,0,265,266,5,111,0,0,266,267,5,114,0,0,267,268,5,97,0,0,268, + 269,5,98,0,0,269,270,5,108,0,0,270,271,5,101,0,0,271,8,1,0,0,0,272, + 273,5,105,0,0,273,274,5,109,0,0,274,275,5,112,0,0,275,276,5,108, + 0,0,276,277,5,101,0,0,277,278,5,109,0,0,278,279,5,101,0,0,279,280, + 5,110,0,0,280,281,5,116,0,0,281,282,5,115,0,0,282,10,1,0,0,0,283, + 284,5,114,0,0,284,285,5,101,0,0,285,286,5,102,0,0,286,12,1,0,0,0, + 287,288,5,102,0,0,288,289,5,114,0,0,289,290,5,97,0,0,290,291,5,103, + 0,0,291,292,5,109,0,0,292,293,5,101,0,0,293,294,5,110,0,0,294,295, + 5,116,0,0,295,14,1,0,0,0,296,297,5,105,0,0,297,298,5,109,0,0,298, + 299,5,112,0,0,299,300,5,111,0,0,300,301,5,114,0,0,301,302,5,116, + 0,0,302,16,1,0,0,0,303,304,5,101,0,0,304,305,5,120,0,0,305,306,5, + 116,0,0,306,307,5,101,0,0,307,308,5,114,0,0,308,309,5,110,0,0,309, + 310,5,97,0,0,310,311,5,108,0,0,311,18,1,0,0,0,312,313,5,97,0,0,313, + 314,5,116,0,0,314,315,5,111,0,0,315,316,5,109,0,0,316,20,1,0,0,0, + 317,318,5,105,0,0,318,319,5,110,0,0,319,320,5,116,0,0,320,321,5, + 101,0,0,321,322,5,114,0,0,322,323,5,102,0,0,323,324,5,97,0,0,324, + 325,5,99,0,0,325,326,5,101,0,0,326,22,1,0,0,0,327,328,5,105,0,0, + 328,329,5,110,0,0,329,330,5,116,0,0,330,331,5,101,0,0,331,332,5, + 114,0,0,332,333,5,102,0,0,333,334,5,97,0,0,334,335,5,99,0,0,335, + 336,5,101,0,0,336,337,5,115,0,0,337,24,1,0,0,0,338,339,5,112,0,0, + 339,340,5,97,0,0,340,341,5,99,0,0,341,342,5,107,0,0,342,343,5,97, + 0,0,343,344,5,103,0,0,344,345,5,101,0,0,345,26,1,0,0,0,346,347,5, + 118,0,0,347,348,5,97,0,0,348,349,5,108,0,0,349,350,5,117,0,0,350, + 351,5,101,0,0,351,28,1,0,0,0,352,353,5,114,0,0,353,354,5,101,0,0, + 354,355,5,108,0,0,355,356,5,97,0,0,356,357,5,116,0,0,357,358,5,105, + 0,0,358,359,5,111,0,0,359,360,5,110,0,0,360,30,1,0,0,0,361,362,5, + 111,0,0,362,363,5,112,0,0,363,364,5,101,0,0,364,365,5,114,0,0,365, + 366,5,97,0,0,366,367,5,116,0,0,367,368,5,105,0,0,368,369,5,111,0, + 0,369,370,5,110,0,0,370,32,1,0,0,0,371,372,5,102,0,0,372,373,5,117, + 0,0,373,374,5,110,0,0,374,375,5,99,0,0,375,376,5,116,0,0,376,377, + 5,105,0,0,377,378,5,111,0,0,378,379,5,110,0,0,379,34,1,0,0,0,380, + 381,5,99,0,0,381,382,5,111,0,0,382,383,5,110,0,0,383,384,5,115,0, + 0,384,385,5,116,0,0,385,386,5,114,0,0,386,387,5,117,0,0,387,388, + 5,99,0,0,388,389,5,116,0,0,389,390,5,111,0,0,390,391,5,114,0,0,391, + 36,1,0,0,0,392,393,5,99,0,0,393,394,5,111,0,0,394,395,5,110,0,0, + 395,396,5,115,0,0,396,397,5,116,0,0,397,398,5,114,0,0,398,399,5, + 117,0,0,399,400,5,99,0,0,400,401,5,116,0,0,401,402,5,115,0,0,402, + 38,1,0,0,0,403,404,5,105,0,0,404,405,5,110,0,0,405,406,5,112,0,0, + 406,407,5,117,0,0,407,408,5,116,0,0,408,40,1,0,0,0,409,410,5,99, + 0,0,410,411,5,111,0,0,411,412,5,110,0,0,412,413,5,102,0,0,413,414, + 5,111,0,0,414,415,5,114,0,0,415,416,5,109,0,0,416,42,1,0,0,0,417, + 418,5,97,0,0,418,419,5,115,0,0,419,44,1,0,0,0,420,421,5,98,0,0,421, + 422,5,105,0,0,422,423,5,110,0,0,423,424,5,100,0,0,424,46,1,0,0,0, + 425,426,5,115,0,0,426,427,5,116,0,0,427,428,5,97,0,0,428,429,5,116, + 0,0,429,430,5,105,0,0,430,431,5,99,0,0,431,48,1,0,0,0,432,433,5, + 116,0,0,433,434,5,111,0,0,434,50,1,0,0,0,435,436,5,112,0,0,436,437, + 5,114,0,0,437,438,5,105,0,0,438,439,5,118,0,0,439,440,5,97,0,0,440, + 441,5,116,0,0,441,442,5,101,0,0,442,52,1,0,0,0,443,444,5,115,0,0, + 444,445,5,104,0,0,445,446,5,97,0,0,446,447,5,114,0,0,447,448,5,101, + 0,0,448,449,5,100,0,0,449,54,1,0,0,0,450,451,5,115,0,0,451,452,5, + 116,0,0,452,453,5,97,0,0,453,454,5,116,0,0,454,455,5,101,0,0,455, + 56,1,0,0,0,456,457,5,101,0,0,457,458,5,100,0,0,458,459,5,103,0,0, + 459,460,5,101,0,0,460,58,1,0,0,0,461,462,5,112,0,0,462,463,5,114, + 0,0,463,464,5,111,0,0,464,465,5,106,0,0,465,466,5,101,0,0,466,467, + 5,99,0,0,467,468,5,116,0,0,468,469,5,105,0,0,469,470,5,111,0,0,470, + 471,5,110,0,0,471,60,1,0,0,0,472,473,5,119,0,0,473,474,5,105,0,0, + 474,475,5,116,0,0,475,476,5,104,0,0,476,62,1,0,0,0,477,478,5,117, + 0,0,478,479,5,115,0,0,479,480,5,105,0,0,480,481,5,110,0,0,481,482, + 5,103,0,0,482,64,1,0,0,0,483,484,5,118,0,0,484,485,5,105,0,0,485, + 486,5,97,0,0,486,66,1,0,0,0,487,488,5,109,0,0,488,489,5,97,0,0,489, + 490,5,116,0,0,490,491,5,101,0,0,491,492,5,114,0,0,492,493,5,105, + 0,0,493,494,5,97,0,0,494,495,5,108,0,0,495,496,5,105,0,0,496,497, + 5,122,0,0,497,498,5,101,0,0,498,68,1,0,0,0,499,500,5,105,0,0,500, + 501,5,102,0,0,501,70,1,0,0,0,502,503,5,97,0,0,503,504,5,98,0,0,504, + 505,5,115,0,0,505,506,5,101,0,0,506,507,5,110,0,0,507,508,5,116, + 0,0,508,72,1,0,0,0,509,510,5,111,0,0,510,511,5,110,0,0,511,74,1, + 0,0,0,512,513,5,112,0,0,513,514,5,111,0,0,514,515,5,108,0,0,515, + 516,5,105,0,0,516,517,5,99,0,0,517,518,5,121,0,0,518,76,1,0,0,0, + 519,520,5,100,0,0,520,521,5,101,0,0,521,522,5,102,0,0,522,523,5, + 97,0,0,523,524,5,117,0,0,524,525,5,108,0,0,525,526,5,116,0,0,526, + 78,1,0,0,0,527,528,5,115,0,0,528,529,5,111,0,0,529,530,5,117,0,0, + 530,531,5,114,0,0,531,532,5,99,0,0,532,533,5,101,0,0,533,80,1,0, + 0,0,534,535,5,114,0,0,535,536,5,101,0,0,536,537,5,112,0,0,537,538, + 5,111,0,0,538,539,5,115,0,0,539,540,5,105,0,0,540,541,5,116,0,0, + 541,542,5,111,0,0,542,543,5,114,0,0,543,544,5,121,0,0,544,82,1,0, + 0,0,545,546,5,99,0,0,546,547,5,111,0,0,547,548,5,109,0,0,548,549, + 5,109,0,0,549,550,5,105,0,0,550,551,5,116,0,0,551,84,1,0,0,0,552, + 553,5,114,0,0,553,554,5,101,0,0,554,555,5,118,0,0,555,556,5,105, + 0,0,556,557,5,115,0,0,557,558,5,105,0,0,558,559,5,111,0,0,559,560, + 5,110,0,0,560,86,1,0,0,0,561,562,5,115,0,0,562,563,5,101,0,0,563, + 564,5,109,0,0,564,565,5,97,0,0,565,566,5,110,0,0,566,567,5,116,0, + 0,567,568,5,105,0,0,568,569,5,99,0,0,569,570,5,45,0,0,570,571,5, + 109,0,0,571,572,5,97,0,0,572,573,5,106,0,0,573,574,5,111,0,0,574, + 575,5,114,0,0,575,88,1,0,0,0,576,577,5,111,0,0,577,578,5,110,0,0, + 578,579,5,45,0,0,579,580,5,100,0,0,580,581,5,101,0,0,581,582,5,108, + 0,0,582,583,5,101,0,0,583,584,5,116,0,0,584,585,5,101,0,0,585,90, + 1,0,0,0,586,587,5,114,0,0,587,588,5,101,0,0,588,589,5,116,0,0,589, + 590,5,97,0,0,590,591,5,105,0,0,591,592,5,110,0,0,592,593,5,45,0, + 0,593,594,5,111,0,0,594,595,5,116,0,0,595,596,5,104,0,0,596,597, + 5,101,0,0,597,598,5,114,0,0,598,92,1,0,0,0,599,600,5,107,0,0,600, + 601,5,101,0,0,601,602,5,121,0,0,602,603,5,101,0,0,603,604,5,100, + 0,0,604,94,1,0,0,0,605,606,5,112,0,0,606,607,5,117,0,0,607,608,5, + 98,0,0,608,609,5,108,0,0,609,610,5,105,0,0,610,611,5,99,0,0,611, + 612,5,45,0,0,612,613,5,116,0,0,613,614,5,114,0,0,614,615,5,97,0, + 0,615,616,5,118,0,0,616,617,5,101,0,0,617,618,5,114,0,0,618,619, + 5,115,0,0,619,620,5,97,0,0,620,621,5,108,0,0,621,96,1,0,0,0,622, + 623,5,105,0,0,623,624,5,100,0,0,624,98,1,0,0,0,625,626,5,100,0,0, + 626,627,5,111,0,0,627,628,5,99,0,0,628,100,1,0,0,0,629,630,5,109, + 0,0,630,631,5,111,0,0,631,632,5,100,0,0,632,633,5,101,0,0,633,102, + 1,0,0,0,634,635,5,101,0,0,635,636,5,109,0,0,636,637,5,105,0,0,637, + 638,5,116,0,0,638,639,5,115,0,0,639,104,1,0,0,0,640,641,5,114,0, + 0,641,642,5,101,0,0,642,643,5,99,0,0,643,644,5,101,0,0,644,645,5, + 105,0,0,645,646,5,118,0,0,646,647,5,101,0,0,647,648,5,114,0,0,648, + 106,1,0,0,0,649,650,5,114,0,0,650,651,5,101,0,0,651,652,5,113,0, + 0,652,653,5,117,0,0,653,654,5,105,0,0,654,655,5,114,0,0,655,656, + 5,101,0,0,656,657,5,115,0,0,657,108,1,0,0,0,658,659,5,97,0,0,659, + 660,5,110,0,0,660,661,5,121,0,0,661,110,1,0,0,0,662,663,5,103,0, + 0,663,664,5,101,0,0,664,665,5,116,0,0,665,112,1,0,0,0,666,667,5, + 115,0,0,667,668,5,101,0,0,668,669,5,116,0,0,669,114,1,0,0,0,670, + 671,5,119,0,0,671,672,5,97,0,0,672,673,5,116,0,0,673,674,5,99,0, + 0,674,675,5,104,0,0,675,116,1,0,0,0,676,677,5,115,0,0,677,678,5, + 116,0,0,678,679,5,97,0,0,679,680,5,114,0,0,680,681,5,116,0,0,681, + 118,1,0,0,0,682,683,5,115,0,0,683,684,5,116,0,0,684,685,5,111,0, + 0,685,686,5,112,0,0,686,120,1,0,0,0,687,688,5,114,0,0,688,689,5, + 101,0,0,689,690,5,97,0,0,690,691,5,100,0,0,691,122,1,0,0,0,692,693, + 5,119,0,0,693,694,5,114,0,0,694,695,5,105,0,0,695,696,5,116,0,0, + 696,697,5,101,0,0,697,124,1,0,0,0,698,699,5,114,0,0,699,700,5,101, + 0,0,700,701,5,115,0,0,701,702,5,111,0,0,702,703,5,108,0,0,703,704, + 5,118,0,0,704,705,5,101,0,0,705,126,1,0,0,0,706,707,5,99,0,0,707, + 708,5,111,0,0,708,709,5,110,0,0,709,710,5,110,0,0,710,711,5,101, + 0,0,711,712,5,99,0,0,712,713,5,116,0,0,713,128,1,0,0,0,714,715,5, + 100,0,0,715,716,5,105,0,0,716,717,5,115,0,0,717,718,5,99,0,0,718, + 719,5,111,0,0,719,720,5,110,0,0,720,721,5,110,0,0,721,722,5,101, + 0,0,722,723,5,99,0,0,723,724,5,116,0,0,724,130,1,0,0,0,725,726,5, + 99,0,0,726,727,5,97,0,0,727,728,5,108,0,0,728,729,5,108,0,0,729, + 132,1,0,0,0,730,731,5,119,0,0,731,732,5,97,0,0,732,733,5,116,0,0, + 733,734,5,99,0,0,734,735,5,104,0,0,735,736,5,45,0,0,736,737,5,115, + 0,0,737,738,5,116,0,0,738,739,5,97,0,0,739,740,5,114,0,0,740,741, + 5,116,0,0,741,134,1,0,0,0,742,743,5,119,0,0,743,744,5,97,0,0,744, + 745,5,116,0,0,745,746,5,99,0,0,746,747,5,104,0,0,747,748,5,45,0, + 0,748,749,5,115,0,0,749,750,5,116,0,0,750,751,5,111,0,0,751,752, + 5,112,0,0,752,136,1,0,0,0,753,754,5,115,0,0,754,755,5,117,0,0,755, + 756,5,98,0,0,756,757,5,115,0,0,757,758,5,99,0,0,758,759,5,114,0, + 0,759,760,5,105,0,0,760,761,5,98,0,0,761,762,5,101,0,0,762,138,1, + 0,0,0,763,764,5,117,0,0,764,765,5,110,0,0,765,766,5,115,0,0,766, + 767,5,117,0,0,767,768,5,98,0,0,768,769,5,115,0,0,769,770,5,99,0, + 0,770,771,5,114,0,0,771,772,5,105,0,0,772,773,5,98,0,0,773,774,5, + 101,0,0,774,140,1,0,0,0,775,776,5,111,0,0,776,777,5,112,0,0,777, + 778,5,116,0,0,778,779,5,105,0,0,779,780,5,109,0,0,780,781,5,105, + 0,0,781,782,5,115,0,0,782,783,5,116,0,0,783,784,5,105,0,0,784,785, + 5,99,0,0,785,786,5,45,0,0,786,787,5,114,0,0,787,788,5,101,0,0,788, + 789,5,103,0,0,789,790,5,105,0,0,790,791,5,115,0,0,791,792,5,116, + 0,0,792,793,5,101,0,0,793,794,5,114,0,0,794,142,1,0,0,0,795,796, + 5,99,0,0,796,797,5,114,0,0,797,798,5,100,0,0,798,799,5,116,0,0,799, + 144,1,0,0,0,800,801,5,111,0,0,801,802,5,112,0,0,802,803,5,116,0, + 0,803,804,5,105,0,0,804,805,5,111,0,0,805,806,5,110,0,0,806,807, + 5,97,0,0,807,808,5,108,0,0,808,809,5,45,0,0,809,810,5,111,0,0,810, + 811,5,110,0,0,811,812,5,101,0,0,812,146,1,0,0,0,813,814,5,101,0, + 0,814,815,5,120,0,0,815,816,5,97,0,0,816,817,5,99,0,0,817,818,5, + 116,0,0,818,819,5,108,0,0,819,820,5,121,0,0,820,821,5,45,0,0,821, + 822,5,111,0,0,822,823,5,110,0,0,823,824,5,101,0,0,824,148,1,0,0, + 0,825,826,5,109,0,0,826,827,5,97,0,0,827,828,5,110,0,0,828,829,5, + 121,0,0,829,830,5,45,0,0,830,831,5,117,0,0,831,832,5,110,0,0,832, + 833,5,105,0,0,833,834,5,113,0,0,834,835,5,117,0,0,835,836,5,101, + 0,0,836,150,1,0,0,0,837,838,5,109,0,0,838,839,5,97,0,0,839,840,5, + 110,0,0,840,841,5,121,0,0,841,152,1,0,0,0,842,843,5,111,0,0,843, + 844,5,114,0,0,844,845,5,100,0,0,845,846,5,101,0,0,846,847,5,114, + 0,0,847,848,5,101,0,0,848,849,5,100,0,0,849,154,1,0,0,0,850,851, + 5,117,0,0,851,852,5,110,0,0,852,853,5,105,0,0,853,854,5,116,0,0, + 854,156,1,0,0,0,855,856,5,119,0,0,856,857,5,97,0,0,857,858,5,116, + 0,0,858,859,5,99,0,0,859,860,5,104,0,0,860,861,5,45,0,0,861,862, + 5,104,0,0,862,863,5,97,0,0,863,864,5,110,0,0,864,865,5,100,0,0,865, + 866,5,108,0,0,866,867,5,101,0,0,867,158,1,0,0,0,868,869,5,109,0, + 0,869,870,5,101,0,0,870,871,5,115,0,0,871,872,5,115,0,0,872,873, + 5,97,0,0,873,874,5,103,0,0,874,875,5,101,0,0,875,160,1,0,0,0,876, + 877,5,97,0,0,877,878,5,116,0,0,878,879,5,111,0,0,879,880,5,109,0, + 0,880,881,5,45,0,0,881,882,5,114,0,0,882,883,5,101,0,0,883,884,5, + 102,0,0,884,162,1,0,0,0,885,886,5,105,0,0,886,887,5,110,0,0,887, + 888,5,116,0,0,888,889,5,101,0,0,889,890,5,114,0,0,890,891,5,102, + 0,0,891,892,5,97,0,0,892,893,5,99,0,0,893,894,5,101,0,0,894,895, + 5,45,0,0,895,896,5,114,0,0,896,897,5,101,0,0,897,898,5,102,0,0,898, + 164,1,0,0,0,899,900,5,111,0,0,900,901,5,112,0,0,901,902,5,116,0, + 0,902,903,5,105,0,0,903,904,5,111,0,0,904,905,5,110,0,0,905,906, + 5,97,0,0,906,907,5,108,0,0,907,166,1,0,0,0,908,909,5,108,0,0,909, + 910,5,105,0,0,910,911,5,115,0,0,911,912,5,116,0,0,912,168,1,0,0, + 0,913,914,5,114,0,0,914,915,5,101,0,0,915,916,5,99,0,0,916,917,5, + 111,0,0,917,918,5,114,0,0,918,919,5,100,0,0,919,170,1,0,0,0,920, + 921,5,98,0,0,921,922,5,111,0,0,922,923,5,111,0,0,923,924,5,108,0, + 0,924,172,1,0,0,0,925,926,5,98,0,0,926,927,5,121,0,0,927,928,5,116, + 0,0,928,929,5,101,0,0,929,930,5,115,0,0,930,174,1,0,0,0,931,932, + 5,100,0,0,932,933,5,111,0,0,933,934,5,117,0,0,934,935,5,98,0,0,935, + 936,5,108,0,0,936,937,5,101,0,0,937,176,1,0,0,0,938,939,5,105,0, + 0,939,940,5,110,0,0,940,941,5,116,0,0,941,942,5,51,0,0,942,943,5, + 50,0,0,943,178,1,0,0,0,944,945,5,105,0,0,945,946,5,110,0,0,946,947, + 5,116,0,0,947,948,5,54,0,0,948,949,5,52,0,0,949,180,1,0,0,0,950, + 951,5,115,0,0,951,952,5,116,0,0,952,953,5,114,0,0,953,954,5,105, + 0,0,954,955,5,110,0,0,955,956,5,103,0,0,956,182,1,0,0,0,957,958, + 5,117,0,0,958,959,5,105,0,0,959,960,5,110,0,0,960,961,5,116,0,0, + 961,962,5,51,0,0,962,963,5,50,0,0,963,184,1,0,0,0,964,965,5,117, + 0,0,965,966,5,105,0,0,966,967,5,110,0,0,967,968,5,116,0,0,968,969, + 5,54,0,0,969,970,5,52,0,0,970,186,1,0,0,0,971,972,5,116,0,0,972, + 973,5,114,0,0,973,974,5,117,0,0,974,975,5,101,0,0,975,188,1,0,0, + 0,976,977,5,102,0,0,977,978,5,97,0,0,978,979,5,108,0,0,979,980,5, + 115,0,0,980,981,5,101,0,0,981,190,1,0,0,0,982,983,5,110,0,0,983, + 984,5,117,0,0,984,985,5,108,0,0,985,986,5,108,0,0,986,192,1,0,0, + 0,987,988,5,45,0,0,988,989,5,62,0,0,989,194,1,0,0,0,990,991,5,58, + 0,0,991,196,1,0,0,0,992,993,5,59,0,0,993,198,1,0,0,0,994,995,5,44, + 0,0,995,200,1,0,0,0,996,997,5,46,0,0,997,202,1,0,0,0,998,999,5,123, + 0,0,999,204,1,0,0,0,1000,1001,5,125,0,0,1001,206,1,0,0,0,1002,1003, + 5,91,0,0,1003,208,1,0,0,0,1004,1005,5,93,0,0,1005,210,1,0,0,0,1006, + 1007,5,40,0,0,1007,212,1,0,0,0,1008,1009,5,41,0,0,1009,214,1,0,0, + 0,1010,1011,5,60,0,0,1011,216,1,0,0,0,1012,1013,5,62,0,0,1013,218, + 1,0,0,0,1014,1015,5,38,0,0,1015,220,1,0,0,0,1016,1017,5,61,0,0,1017, + 222,1,0,0,0,1018,1020,5,45,0,0,1019,1018,1,0,0,0,1019,1020,1,0,0, + 0,1020,1022,1,0,0,0,1021,1023,7,0,0,0,1022,1021,1,0,0,0,1023,1024, + 1,0,0,0,1024,1022,1,0,0,0,1024,1025,1,0,0,0,1025,224,1,0,0,0,1026, + 1028,5,45,0,0,1027,1026,1,0,0,0,1027,1028,1,0,0,0,1028,1037,1,0, + 0,0,1029,1038,5,48,0,0,1030,1034,7,1,0,0,1031,1033,7,0,0,0,1032, + 1031,1,0,0,0,1033,1036,1,0,0,0,1034,1032,1,0,0,0,1034,1035,1,0,0, + 0,1035,1038,1,0,0,0,1036,1034,1,0,0,0,1037,1029,1,0,0,0,1037,1030, + 1,0,0,0,1038,1045,1,0,0,0,1039,1041,5,46,0,0,1040,1042,7,0,0,0,1041, + 1040,1,0,0,0,1042,1043,1,0,0,0,1043,1041,1,0,0,0,1043,1044,1,0,0, + 0,1044,1046,1,0,0,0,1045,1039,1,0,0,0,1045,1046,1,0,0,0,1046,1056, + 1,0,0,0,1047,1049,7,2,0,0,1048,1050,7,3,0,0,1049,1048,1,0,0,0,1049, + 1050,1,0,0,0,1050,1052,1,0,0,0,1051,1053,7,0,0,0,1052,1051,1,0,0, + 0,1053,1054,1,0,0,0,1054,1052,1,0,0,0,1054,1055,1,0,0,0,1055,1057, + 1,0,0,0,1056,1047,1,0,0,0,1056,1057,1,0,0,0,1057,226,1,0,0,0,1058, + 1062,7,4,0,0,1059,1061,7,5,0,0,1060,1059,1,0,0,0,1061,1064,1,0,0, + 0,1062,1060,1,0,0,0,1062,1063,1,0,0,0,1063,228,1,0,0,0,1064,1062, + 1,0,0,0,1065,1070,5,34,0,0,1066,1069,3,231,115,0,1067,1069,8,6,0, + 0,1068,1066,1,0,0,0,1068,1067,1,0,0,0,1069,1072,1,0,0,0,1070,1068, + 1,0,0,0,1070,1071,1,0,0,0,1071,1073,1,0,0,0,1072,1070,1,0,0,0,1073, + 1074,5,34,0,0,1074,230,1,0,0,0,1075,1083,5,92,0,0,1076,1084,7,7, + 0,0,1077,1078,5,117,0,0,1078,1079,3,233,116,0,1079,1080,3,233,116, + 0,1080,1081,3,233,116,0,1081,1082,3,233,116,0,1082,1084,1,0,0,0, + 1083,1076,1,0,0,0,1083,1077,1,0,0,0,1084,232,1,0,0,0,1085,1086,7, + 8,0,0,1086,234,1,0,0,0,1087,1088,5,47,0,0,1088,1089,5,47,0,0,1089, + 1093,1,0,0,0,1090,1092,8,9,0,0,1091,1090,1,0,0,0,1092,1095,1,0,0, + 0,1093,1091,1,0,0,0,1093,1094,1,0,0,0,1094,1096,1,0,0,0,1095,1093, + 1,0,0,0,1096,1097,6,117,0,0,1097,236,1,0,0,0,1098,1099,5,47,0,0, + 1099,1100,5,42,0,0,1100,1104,1,0,0,0,1101,1103,9,0,0,0,1102,1101, + 1,0,0,0,1103,1106,1,0,0,0,1104,1105,1,0,0,0,1104,1102,1,0,0,0,1105, + 1107,1,0,0,0,1106,1104,1,0,0,0,1107,1108,5,42,0,0,1108,1109,5,47, + 0,0,1109,1110,1,0,0,0,1110,1111,6,118,0,0,1111,238,1,0,0,0,1112, + 1114,7,10,0,0,1113,1112,1,0,0,0,1114,1115,1,0,0,0,1115,1113,1,0, + 0,0,1115,1116,1,0,0,0,1116,1117,1,0,0,0,1117,1118,6,119,0,0,1118, + 240,1,0,0,0,18,0,1019,1024,1027,1034,1037,1043,1045,1049,1054,1056, + 1062,1068,1070,1083,1093,1104,1115,1,0,1,0 ]; private static __ATN: antlr.ATN; diff --git a/src/capability-language/generated/QuixosCapabilityParser.ts b/src/capability-language/generated/QuixosCapabilityParser.ts index 2ab5291..5fcc69b 100644 --- a/src/capability-language/generated/QuixosCapabilityParser.ts +++ b/src/capability-language/generated/QuixosCapabilityParser.ts @@ -33,100 +33,101 @@ export class QuixosCapabilityParser extends antlr.Parser { public static readonly CONFORM = 21; public static readonly AS = 22; public static readonly BIND = 23; - public static readonly TO = 24; - public static readonly PRIVATE = 25; - public static readonly SHARED = 26; - public static readonly STATE = 27; - public static readonly EDGE = 28; - public static readonly PROJECTION = 29; - public static readonly WITH = 30; - public static readonly USING = 31; - public static readonly VIA = 32; - public static readonly MATERIALIZE = 33; - public static readonly IF = 34; - public static readonly ABSENT = 35; - public static readonly ON = 36; - public static readonly POLICY = 37; - public static readonly DEFAULT = 38; - public static readonly SOURCE = 39; - public static readonly REPOSITORY = 40; - public static readonly COMMIT = 41; - public static readonly REVISION = 42; - public static readonly SEMANTIC_MAJOR = 43; - public static readonly ON_DELETE = 44; - public static readonly RETAIN_OTHER = 45; - public static readonly KEYED = 46; - public static readonly PUBLIC_TRAVERSAL = 47; - public static readonly ID = 48; - public static readonly DOC = 49; - public static readonly MODE = 50; - public static readonly EMITS = 51; - public static readonly RECEIVER = 52; - public static readonly REQUIRES = 53; - public static readonly ANY = 54; - public static readonly GET = 55; - public static readonly SET = 56; - public static readonly WATCH = 57; - public static readonly START = 58; - public static readonly STOP = 59; - public static readonly READ = 60; - public static readonly WRITE = 61; - public static readonly RESOLVE = 62; - public static readonly CONNECT = 63; - public static readonly DISCONNECT = 64; - public static readonly CALL = 65; - public static readonly WATCH_START = 66; - public static readonly WATCH_STOP = 67; - public static readonly SUBSCRIBE = 68; - public static readonly UNSUBSCRIBE = 69; - public static readonly OPTIMISTIC_REGISTER = 70; - public static readonly CRDT = 71; - public static readonly OPTIONAL_ONE = 72; - public static readonly EXACTLY_ONE = 73; - public static readonly MANY_UNIQUE = 74; - public static readonly MANY = 75; - public static readonly ORDERED = 76; - public static readonly UNIT = 77; - public static readonly WATCH_HANDLE = 78; - public static readonly MESSAGE = 79; - public static readonly ATOM_REF = 80; - public static readonly INTERFACE_REF = 81; - public static readonly OPTIONAL = 82; - public static readonly LIST = 83; - public static readonly RECORD = 84; - public static readonly BOOL = 85; - public static readonly BYTES = 86; - public static readonly DOUBLE = 87; - public static readonly INT32 = 88; - public static readonly INT64 = 89; - public static readonly STRING = 90; - public static readonly UINT32 = 91; - public static readonly UINT64 = 92; - public static readonly TRUE = 93; - public static readonly FALSE = 94; - public static readonly NULL = 95; - public static readonly ARROW = 96; - public static readonly COLON = 97; - public static readonly SEMI = 98; - public static readonly COMMA = 99; - public static readonly DOT = 100; - public static readonly LBRACE = 101; - public static readonly RBRACE = 102; - public static readonly LBRACK = 103; - public static readonly RBRACK = 104; - public static readonly LPAREN = 105; - public static readonly RPAREN = 106; - public static readonly LT = 107; - public static readonly GT = 108; - public static readonly AMP = 109; - public static readonly EQUAL = 110; - public static readonly INTEGER = 111; - public static readonly JSON_NUMBER = 112; - public static readonly IDENTIFIER = 113; - public static readonly STRING_LITERAL = 114; - public static readonly LINE_COMMENT = 115; - public static readonly BLOCK_COMMENT = 116; - public static readonly WS = 117; + public static readonly STATIC = 24; + public static readonly TO = 25; + public static readonly PRIVATE = 26; + public static readonly SHARED = 27; + public static readonly STATE = 28; + public static readonly EDGE = 29; + public static readonly PROJECTION = 30; + public static readonly WITH = 31; + public static readonly USING = 32; + public static readonly VIA = 33; + public static readonly MATERIALIZE = 34; + public static readonly IF = 35; + public static readonly ABSENT = 36; + public static readonly ON = 37; + public static readonly POLICY = 38; + public static readonly DEFAULT = 39; + public static readonly SOURCE = 40; + public static readonly REPOSITORY = 41; + public static readonly COMMIT = 42; + public static readonly REVISION = 43; + public static readonly SEMANTIC_MAJOR = 44; + public static readonly ON_DELETE = 45; + public static readonly RETAIN_OTHER = 46; + public static readonly KEYED = 47; + public static readonly PUBLIC_TRAVERSAL = 48; + public static readonly ID = 49; + public static readonly DOC = 50; + public static readonly MODE = 51; + public static readonly EMITS = 52; + public static readonly RECEIVER = 53; + public static readonly REQUIRES = 54; + public static readonly ANY = 55; + public static readonly GET = 56; + public static readonly SET = 57; + public static readonly WATCH = 58; + public static readonly START = 59; + public static readonly STOP = 60; + public static readonly READ = 61; + public static readonly WRITE = 62; + public static readonly RESOLVE = 63; + public static readonly CONNECT = 64; + public static readonly DISCONNECT = 65; + public static readonly CALL = 66; + public static readonly WATCH_START = 67; + public static readonly WATCH_STOP = 68; + public static readonly SUBSCRIBE = 69; + public static readonly UNSUBSCRIBE = 70; + public static readonly OPTIMISTIC_REGISTER = 71; + public static readonly CRDT = 72; + public static readonly OPTIONAL_ONE = 73; + public static readonly EXACTLY_ONE = 74; + public static readonly MANY_UNIQUE = 75; + public static readonly MANY = 76; + public static readonly ORDERED = 77; + public static readonly UNIT = 78; + public static readonly WATCH_HANDLE = 79; + public static readonly MESSAGE = 80; + public static readonly ATOM_REF = 81; + public static readonly INTERFACE_REF = 82; + public static readonly OPTIONAL = 83; + public static readonly LIST = 84; + public static readonly RECORD = 85; + public static readonly BOOL = 86; + public static readonly BYTES = 87; + public static readonly DOUBLE = 88; + public static readonly INT32 = 89; + public static readonly INT64 = 90; + public static readonly STRING = 91; + public static readonly UINT32 = 92; + public static readonly UINT64 = 93; + public static readonly TRUE = 94; + public static readonly FALSE = 95; + public static readonly NULL = 96; + public static readonly ARROW = 97; + public static readonly COLON = 98; + public static readonly SEMI = 99; + public static readonly COMMA = 100; + public static readonly DOT = 101; + public static readonly LBRACE = 102; + public static readonly RBRACE = 103; + public static readonly LBRACK = 104; + public static readonly RBRACK = 105; + public static readonly LPAREN = 106; + public static readonly RPAREN = 107; + public static readonly LT = 108; + public static readonly GT = 109; + public static readonly AMP = 110; + public static readonly EQUAL = 111; + public static readonly INTEGER = 112; + public static readonly JSON_NUMBER = 113; + public static readonly IDENTIFIER = 114; + public static readonly STRING_LITERAL = 115; + public static readonly LINE_COMMENT = 116; + public static readonly BLOCK_COMMENT = 117; + public static readonly WS = 118; public static readonly RULE_document = 0; public static readonly RULE_fragmentDecl = 1; public static readonly RULE_sourceImportDecl = 2; @@ -172,43 +173,44 @@ export class QuixosCapabilityParser extends antlr.Parser { public static readonly RULE_edgeEndpoint = 42; public static readonly RULE_conformanceDecl = 43; public static readonly RULE_conformanceItem = 44; - public static readonly RULE_relationshipMaterializationDecl = 45; - public static readonly RULE_operationBindingDecl = 46; - public static readonly RULE_memberOperationRef = 47; - public static readonly RULE_operationName = 48; - public static readonly RULE_operationProvider = 49; - public static readonly RULE_statePrimitive = 50; - public static readonly RULE_edgePrimitive = 51; - public static readonly RULE_dependencyBindingBlock = 52; - public static readonly RULE_dependencyBinding = 53; - public static readonly RULE_constructorBindingDecl = 54; - public static readonly RULE_valueType = 55; - public static readonly RULE_recordField = 56; - public static readonly RULE_scalarType = 57; - public static readonly RULE_cardinality = 58; - public static readonly RULE_jsonLiteral = 59; - public static readonly RULE_jsonObject = 60; - public static readonly RULE_jsonMember = 61; - public static readonly RULE_jsonArray = 62; - public static readonly RULE_identifier = 63; - public static readonly RULE_stringLiteral = 64; + public static readonly RULE_stateFieldBindingDecl = 45; + public static readonly RULE_relationshipMaterializationDecl = 46; + public static readonly RULE_operationBindingDecl = 47; + public static readonly RULE_memberOperationRef = 48; + public static readonly RULE_operationName = 49; + public static readonly RULE_operationProvider = 50; + public static readonly RULE_statePrimitive = 51; + public static readonly RULE_edgePrimitive = 52; + public static readonly RULE_dependencyBindingBlock = 53; + public static readonly RULE_dependencyBinding = 54; + public static readonly RULE_constructorBindingDecl = 55; + public static readonly RULE_valueType = 56; + public static readonly RULE_recordField = 57; + public static readonly RULE_scalarType = 58; + public static readonly RULE_cardinality = 59; + public static readonly RULE_jsonLiteral = 60; + public static readonly RULE_jsonObject = 61; + public static readonly RULE_jsonMember = 62; + public static readonly RULE_jsonArray = 63; + public static readonly RULE_identifier = 64; + public static readonly RULE_stringLiteral = 65; public static readonly literalNames = [ null, "'workspace'", "'type'", "'object'", "'storable'", "'implements'", "'ref'", "'fragment'", "'import'", "'external'", "'atom'", "'interface'", "'interfaces'", "'package'", "'value'", "'relation'", "'operation'", "'function'", "'constructor'", "'constructs'", "'input'", "'conform'", - "'as'", "'bind'", "'to'", "'private'", "'shared'", "'state'", "'edge'", - "'projection'", "'with'", "'using'", "'via'", "'materialize'", "'if'", - "'absent'", "'on'", "'policy'", "'default'", "'source'", "'repository'", - "'commit'", "'revision'", "'semantic-major'", "'on-delete'", "'retain-other'", - "'keyed'", "'public-traversal'", "'id'", "'doc'", "'mode'", "'emits'", - "'receiver'", "'requires'", "'any'", "'get'", "'set'", "'watch'", - "'start'", "'stop'", "'read'", "'write'", "'resolve'", "'connect'", - "'disconnect'", "'call'", "'watch-start'", "'watch-stop'", "'subscribe'", - "'unsubscribe'", "'optimistic-register'", "'crdt'", "'optional-one'", - "'exactly-one'", "'many-unique'", "'many'", "'ordered'", "'unit'", - "'watch-handle'", "'message'", "'atom-ref'", "'interface-ref'", + "'as'", "'bind'", "'static'", "'to'", "'private'", "'shared'", "'state'", + "'edge'", "'projection'", "'with'", "'using'", "'via'", "'materialize'", + "'if'", "'absent'", "'on'", "'policy'", "'default'", "'source'", + "'repository'", "'commit'", "'revision'", "'semantic-major'", "'on-delete'", + "'retain-other'", "'keyed'", "'public-traversal'", "'id'", "'doc'", + "'mode'", "'emits'", "'receiver'", "'requires'", "'any'", "'get'", + "'set'", "'watch'", "'start'", "'stop'", "'read'", "'write'", "'resolve'", + "'connect'", "'disconnect'", "'call'", "'watch-start'", "'watch-stop'", + "'subscribe'", "'unsubscribe'", "'optimistic-register'", "'crdt'", + "'optional-one'", "'exactly-one'", "'many-unique'", "'many'", "'ordered'", + "'unit'", "'watch-handle'", "'message'", "'atom-ref'", "'interface-ref'", "'optional'", "'list'", "'record'", "'bool'", "'bytes'", "'double'", "'int32'", "'int64'", "'string'", "'uint32'", "'uint64'", "'true'", "'false'", "'null'", "'->'", "':'", "';'", "','", "'.'", "'{'", @@ -219,22 +221,22 @@ export class QuixosCapabilityParser extends antlr.Parser { null, "WORKSPACE", "TYPE", "OBJECT", "STORABLE", "IMPLEMENTS", "REF", "FRAGMENT", "IMPORT", "EXTERNAL", "ATOM", "INTERFACE", "INTERFACES", "PACKAGE", "VALUE", "RELATION", "OPERATION", "FUNCTION", "CONSTRUCTOR", - "CONSTRUCTS", "INPUT", "CONFORM", "AS", "BIND", "TO", "PRIVATE", - "SHARED", "STATE", "EDGE", "PROJECTION", "WITH", "USING", "VIA", - "MATERIALIZE", "IF", "ABSENT", "ON", "POLICY", "DEFAULT", "SOURCE", - "REPOSITORY", "COMMIT", "REVISION", "SEMANTIC_MAJOR", "ON_DELETE", - "RETAIN_OTHER", "KEYED", "PUBLIC_TRAVERSAL", "ID", "DOC", "MODE", - "EMITS", "RECEIVER", "REQUIRES", "ANY", "GET", "SET", "WATCH", "START", - "STOP", "READ", "WRITE", "RESOLVE", "CONNECT", "DISCONNECT", "CALL", - "WATCH_START", "WATCH_STOP", "SUBSCRIBE", "UNSUBSCRIBE", "OPTIMISTIC_REGISTER", - "CRDT", "OPTIONAL_ONE", "EXACTLY_ONE", "MANY_UNIQUE", "MANY", "ORDERED", - "UNIT", "WATCH_HANDLE", "MESSAGE", "ATOM_REF", "INTERFACE_REF", - "OPTIONAL", "LIST", "RECORD", "BOOL", "BYTES", "DOUBLE", "INT32", - "INT64", "STRING", "UINT32", "UINT64", "TRUE", "FALSE", "NULL", - "ARROW", "COLON", "SEMI", "COMMA", "DOT", "LBRACE", "RBRACE", "LBRACK", - "RBRACK", "LPAREN", "RPAREN", "LT", "GT", "AMP", "EQUAL", "INTEGER", - "JSON_NUMBER", "IDENTIFIER", "STRING_LITERAL", "LINE_COMMENT", "BLOCK_COMMENT", - "WS" + "CONSTRUCTS", "INPUT", "CONFORM", "AS", "BIND", "STATIC", "TO", + "PRIVATE", "SHARED", "STATE", "EDGE", "PROJECTION", "WITH", "USING", + "VIA", "MATERIALIZE", "IF", "ABSENT", "ON", "POLICY", "DEFAULT", + "SOURCE", "REPOSITORY", "COMMIT", "REVISION", "SEMANTIC_MAJOR", + "ON_DELETE", "RETAIN_OTHER", "KEYED", "PUBLIC_TRAVERSAL", "ID", + "DOC", "MODE", "EMITS", "RECEIVER", "REQUIRES", "ANY", "GET", "SET", + "WATCH", "START", "STOP", "READ", "WRITE", "RESOLVE", "CONNECT", + "DISCONNECT", "CALL", "WATCH_START", "WATCH_STOP", "SUBSCRIBE", + "UNSUBSCRIBE", "OPTIMISTIC_REGISTER", "CRDT", "OPTIONAL_ONE", "EXACTLY_ONE", + "MANY_UNIQUE", "MANY", "ORDERED", "UNIT", "WATCH_HANDLE", "MESSAGE", + "ATOM_REF", "INTERFACE_REF", "OPTIONAL", "LIST", "RECORD", "BOOL", + "BYTES", "DOUBLE", "INT32", "INT64", "STRING", "UINT32", "UINT64", + "TRUE", "FALSE", "NULL", "ARROW", "COLON", "SEMI", "COMMA", "DOT", + "LBRACE", "RBRACE", "LBRACK", "RBRACK", "LPAREN", "RPAREN", "LT", + "GT", "AMP", "EQUAL", "INTEGER", "JSON_NUMBER", "IDENTIFIER", "STRING_LITERAL", + "LINE_COMMENT", "BLOCK_COMMENT", "WS" ]; public static readonly ruleNames = [ "document", "fragmentDecl", "sourceImportDecl", "workspaceDecl", @@ -248,7 +250,7 @@ export class QuixosCapabilityParser extends antlr.Parser { "operationMode", "receiverRequirement", "identifierList", "dependencyBlock", "dependencyPort", "primitiveList", "primitive", "sharedAttachmentDecl", "attachmentDecl", "stateDecl", "storagePolicy", "edgeDecl", "edgeEndpoint", - "conformanceDecl", "conformanceItem", "relationshipMaterializationDecl", + "conformanceDecl", "conformanceItem", "stateFieldBindingDecl", "relationshipMaterializationDecl", "operationBindingDecl", "memberOperationRef", "operationName", "operationProvider", "statePrimitive", "edgePrimitive", "dependencyBindingBlock", "dependencyBinding", "constructorBindingDecl", "valueType", "recordField", "scalarType", @@ -274,42 +276,42 @@ export class QuixosCapabilityParser extends antlr.Parser { let localContext = new DocumentContext(this.context, this.state); this.enterRule(localContext, 0, QuixosCapabilityParser.RULE_document); try { - this.state = 142; + this.state = 144; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 0, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 130; + this.state = 132; this.workspaceDecl(); - this.state = 131; + this.state = 133; this.match(QuixosCapabilityParser.EOF); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 133; + this.state = 135; this.interfaceResourceDecl(); - this.state = 134; + this.state = 136; this.match(QuixosCapabilityParser.EOF); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 136; + this.state = 138; this.packageResourceDecl(); - this.state = 137; + this.state = 139; this.match(QuixosCapabilityParser.EOF); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 139; + this.state = 141; this.fragmentDecl(); - this.state = 140; + this.state = 142; this.match(QuixosCapabilityParser.EOF); } break; @@ -335,25 +337,25 @@ export class QuixosCapabilityParser extends antlr.Parser { try { this.enterOuterAlt(localContext, 1); { - this.state = 144; + this.state = 146; this.match(QuixosCapabilityParser.FRAGMENT); - this.state = 145; + this.state = 147; this.match(QuixosCapabilityParser.LBRACE); - this.state = 149; + this.state = 151; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - while ((((_la) & ~0x1F) === 0 && ((1 << _la) & 69469444) !== 0)) { + while ((((_la) & ~0x1F) === 0 && ((1 << _la) & 136578308) !== 0)) { { { - this.state = 146; + this.state = 148; this.workspaceItem(); } } - this.state = 151; + this.state = 153; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 152; + this.state = 154; this.match(QuixosCapabilityParser.RBRACE); } } @@ -376,11 +378,11 @@ export class QuixosCapabilityParser extends antlr.Parser { try { this.enterOuterAlt(localContext, 1); { - this.state = 154; - this.match(QuixosCapabilityParser.IMPORT); - this.state = 155; - this.stringLiteral(); this.state = 156; + this.match(QuixosCapabilityParser.IMPORT); + this.state = 157; + this.stringLiteral(); + this.state = 158; this.match(QuixosCapabilityParser.SEMI); } } @@ -404,39 +406,39 @@ export class QuixosCapabilityParser extends antlr.Parser { try { this.enterOuterAlt(localContext, 1); { - this.state = 158; - this.match(QuixosCapabilityParser.WORKSPACE); - this.state = 159; - this.identifier(); this.state = 160; - this.match(QuixosCapabilityParser.ID); + this.match(QuixosCapabilityParser.WORKSPACE); this.state = 161; - this.stringLiteral(); + this.identifier(); this.state = 162; - this.match(QuixosCapabilityParser.REVISION); + this.match(QuixosCapabilityParser.ID); this.state = 163; this.stringLiteral(); this.state = 164; - this.match(QuixosCapabilityParser.COMMIT); + this.match(QuixosCapabilityParser.REVISION); this.state = 165; this.stringLiteral(); this.state = 166; + this.match(QuixosCapabilityParser.COMMIT); + this.state = 167; + this.stringLiteral(); + this.state = 168; this.match(QuixosCapabilityParser.LBRACE); - this.state = 170; + this.state = 172; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - while ((((_la) & ~0x1F) === 0 && ((1 << _la) & 69469444) !== 0)) { + while ((((_la) & ~0x1F) === 0 && ((1 << _la) & 136578308) !== 0)) { { { - this.state = 167; + this.state = 169; this.workspaceItem(); } } - this.state = 172; + this.state = 174; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 173; + this.state = 175; this.match(QuixosCapabilityParser.RBRACE); } } @@ -457,55 +459,55 @@ export class QuixosCapabilityParser extends antlr.Parser { let localContext = new WorkspaceItemContext(this.context, this.state); this.enterRule(localContext, 8, QuixosCapabilityParser.RULE_workspaceItem); try { - this.state = 182; + this.state = 184; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 3, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 175; + this.state = 177; this.sourceImportDecl(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 176; + this.state = 178; this.atomDecl(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 177; + this.state = 179; this.resourceImportDecl(); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 178; + this.state = 180; this.sharedAttachmentDecl(); } break; case 5: this.enterOuterAlt(localContext, 5); { - this.state = 179; + this.state = 181; this.conformanceDecl(); } break; case 6: this.enterOuterAlt(localContext, 6); { - this.state = 180; + this.state = 182; this.constructorBindingDecl(); } break; case 7: this.enterOuterAlt(localContext, 7); { - this.state = 181; + this.state = 183; this.typeAliasDecl(); } break; @@ -528,32 +530,32 @@ export class QuixosCapabilityParser extends antlr.Parser { let localContext = new ResourceImportDeclContext(this.context, this.state); this.enterRule(localContext, 10, QuixosCapabilityParser.RULE_resourceImportDecl); try { - this.state = 194; + this.state = 196; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 4, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 184; - this.match(QuixosCapabilityParser.IMPORT); - this.state = 185; - this.match(QuixosCapabilityParser.INTERFACE); this.state = 186; - this.identifier(); + this.match(QuixosCapabilityParser.IMPORT); this.state = 187; + this.match(QuixosCapabilityParser.INTERFACE); + this.state = 188; + this.identifier(); + this.state = 189; this.match(QuixosCapabilityParser.SEMI); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 189; - this.match(QuixosCapabilityParser.IMPORT); - this.state = 190; - this.match(QuixosCapabilityParser.PACKAGE); this.state = 191; - this.identifier(); + this.match(QuixosCapabilityParser.IMPORT); this.state = 192; + this.match(QuixosCapabilityParser.PACKAGE); + this.state = 193; + this.identifier(); + this.state = 194; this.match(QuixosCapabilityParser.SEMI); } break; @@ -578,17 +580,17 @@ export class QuixosCapabilityParser extends antlr.Parser { try { this.enterOuterAlt(localContext, 1); { - this.state = 196; - this.match(QuixosCapabilityParser.EXTERNAL); - this.state = 197; - this.match(QuixosCapabilityParser.ATOM); this.state = 198; - this.identifier(); + this.match(QuixosCapabilityParser.EXTERNAL); this.state = 199; - this.match(QuixosCapabilityParser.ID); + this.match(QuixosCapabilityParser.ATOM); this.state = 200; - this.stringLiteral(); + this.identifier(); this.state = 201; + this.match(QuixosCapabilityParser.ID); + this.state = 202; + this.stringLiteral(); + this.state = 203; this.match(QuixosCapabilityParser.SEMI); } } @@ -611,17 +613,17 @@ export class QuixosCapabilityParser extends antlr.Parser { try { this.enterOuterAlt(localContext, 1); { - this.state = 203; - this.match(QuixosCapabilityParser.EXTERNAL); - this.state = 204; - this.match(QuixosCapabilityParser.INTERFACE); this.state = 205; - this.identifier(); + this.match(QuixosCapabilityParser.EXTERNAL); this.state = 206; - this.match(QuixosCapabilityParser.REVISION); + this.match(QuixosCapabilityParser.INTERFACE); this.state = 207; - this.stringLiteral(); + this.identifier(); this.state = 208; + this.match(QuixosCapabilityParser.REVISION); + this.state = 209; + this.stringLiteral(); + this.state = 210; this.match(QuixosCapabilityParser.SEMI); } } @@ -642,34 +644,34 @@ export class QuixosCapabilityParser extends antlr.Parser { let localContext = new ResourcePreambleContext(this.context, this.state); this.enterRule(localContext, 16, QuixosCapabilityParser.RULE_resourcePreamble); try { - this.state = 214; + this.state = 216; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 5, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 210; + this.state = 212; this.resourceImportDecl(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 211; + this.state = 213; this.externalAtomDecl(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 212; + this.state = 214; this.externalInterfaceDecl(); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 213; + this.state = 215; this.typeAliasDecl(); } break; @@ -695,27 +697,27 @@ export class QuixosCapabilityParser extends antlr.Parser { try { this.enterOuterAlt(localContext, 1); { - this.state = 216; - this.match(QuixosCapabilityParser.ATOM); - this.state = 217; - this.identifier(); this.state = 218; - this.match(QuixosCapabilityParser.ID); + this.match(QuixosCapabilityParser.ATOM); this.state = 219; + this.identifier(); + this.state = 220; + this.match(QuixosCapabilityParser.ID); + this.state = 221; this.stringLiteral(); - this.state = 222; + this.state = 224; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if (_la === 49) { + if (_la === 50) { { - this.state = 220; + this.state = 222; this.match(QuixosCapabilityParser.DOC); - this.state = 221; + this.state = 223; this.stringLiteral(); } } - this.state = 224; + this.state = 226; this.match(QuixosCapabilityParser.SEMI); } } @@ -739,87 +741,87 @@ export class QuixosCapabilityParser extends antlr.Parser { try { this.enterOuterAlt(localContext, 1); { - this.state = 229; + this.state = 231; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while ((((_la) & ~0x1F) === 0 && ((1 << _la) & 772) !== 0)) { { { - this.state = 226; + this.state = 228; this.resourcePreamble(); } } - this.state = 231; + this.state = 233; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 232; + this.state = 234; this.match(QuixosCapabilityParser.INTERFACE); - this.state = 233; - this.identifier(); this.state = 235; + this.identifier(); + this.state = 237; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if (_la === 107) { + if (_la === 108) { { - this.state = 234; + this.state = 236; this.typeParameters(); } } - this.state = 237; - this.match(QuixosCapabilityParser.ID); - this.state = 238; - this.stringLiteral(); this.state = 239; - this.match(QuixosCapabilityParser.REVISION); + this.match(QuixosCapabilityParser.ID); this.state = 240; this.stringLiteral(); - this.state = 250; + this.state = 241; + this.match(QuixosCapabilityParser.REVISION); + this.state = 242; + this.stringLiteral(); + this.state = 252; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if (_la === 53) { + if (_la === 54) { { - this.state = 241; + this.state = 243; this.match(QuixosCapabilityParser.REQUIRES); - this.state = 242; + this.state = 244; this.interfaceType(); - this.state = 247; + this.state = 249; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - while (_la === 99) { + while (_la === 100) { { { - this.state = 243; + this.state = 245; this.match(QuixosCapabilityParser.COMMA); - this.state = 244; + this.state = 246; this.interfaceType(); } } - this.state = 249; + this.state = 251; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } } } - this.state = 252; + this.state = 254; this.match(QuixosCapabilityParser.LBRACE); - this.state = 256; + this.state = 258; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - while ((((_la) & ~0x1F) === 0 && ((1 << _la) & 114688) !== 0)) { + while ((((_la) & ~0x1F) === 0 && ((1 << _la) & 16891904) !== 0)) { { { - this.state = 253; + this.state = 255; this.interfaceMember(); } } - this.state = 258; + this.state = 260; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 259; + this.state = 261; this.match(QuixosCapabilityParser.RBRACE); } } @@ -843,27 +845,27 @@ export class QuixosCapabilityParser extends antlr.Parser { try { this.enterOuterAlt(localContext, 1); { - this.state = 261; + this.state = 263; this.match(QuixosCapabilityParser.LT); - this.state = 262; + this.state = 264; this.typeParameter(); - this.state = 267; + this.state = 269; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - while (_la === 99) { + while (_la === 100) { { { - this.state = 263; + this.state = 265; this.match(QuixosCapabilityParser.COMMA); - this.state = 264; + this.state = 266; this.typeParameter(); } } - this.state = 269; + this.state = 271; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 270; + this.state = 272; this.match(QuixosCapabilityParser.GT); } } @@ -885,24 +887,24 @@ export class QuixosCapabilityParser extends antlr.Parser { this.enterRule(localContext, 24, QuixosCapabilityParser.RULE_typeParameter); let _la: number; try { - this.state = 291; + this.state = 293; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case QuixosCapabilityParser.VALUE: this.enterOuterAlt(localContext, 1); { - this.state = 272; + this.state = 274; this.match(QuixosCapabilityParser.VALUE); - this.state = 273; + this.state = 275; this.identifier(); - this.state = 276; + this.state = 278; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if (_la === 97) { + if (_la === 98) { { - this.state = 274; + this.state = 276; this.match(QuixosCapabilityParser.COLON); - this.state = 275; + this.state = 277; this.match(QuixosCapabilityParser.STORABLE); } } @@ -912,32 +914,32 @@ export class QuixosCapabilityParser extends antlr.Parser { case QuixosCapabilityParser.OBJECT: this.enterOuterAlt(localContext, 2); { - this.state = 278; + this.state = 280; this.match(QuixosCapabilityParser.OBJECT); - this.state = 279; + this.state = 281; this.identifier(); - this.state = 289; + this.state = 291; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 5) { { - this.state = 280; + this.state = 282; this.match(QuixosCapabilityParser.IMPLEMENTS); - this.state = 281; + this.state = 283; this.interfaceType(); - this.state = 286; + this.state = 288; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - while (_la === 109) { + while (_la === 110) { { { - this.state = 282; + this.state = 284; this.match(QuixosCapabilityParser.AMP); - this.state = 283; + this.state = 285; this.interfaceType(); } } - this.state = 288; + this.state = 290; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -970,14 +972,14 @@ export class QuixosCapabilityParser extends antlr.Parser { try { this.enterOuterAlt(localContext, 1); { - this.state = 293; - this.identifier(); this.state = 295; + this.identifier(); + this.state = 297; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if (_la === 107) { + if (_la === 108) { { - this.state = 294; + this.state = 296; this.typeArguments(); } } @@ -1004,27 +1006,27 @@ export class QuixosCapabilityParser extends antlr.Parser { try { this.enterOuterAlt(localContext, 1); { - this.state = 297; + this.state = 299; this.match(QuixosCapabilityParser.LT); - this.state = 298; + this.state = 300; this.typeArgument(); - this.state = 303; + this.state = 305; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - while (_la === 99) { + while (_la === 100) { { { - this.state = 299; + this.state = 301; this.match(QuixosCapabilityParser.COMMA); - this.state = 300; + this.state = 302; this.typeArgument(); } } - this.state = 305; + this.state = 307; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 306; + this.state = 308; this.match(QuixosCapabilityParser.GT); } } @@ -1045,33 +1047,33 @@ export class QuixosCapabilityParser extends antlr.Parser { let localContext = new TypeArgumentContext(this.context, this.state); this.enterRule(localContext, 30, QuixosCapabilityParser.RULE_typeArgument); try { - this.state = 315; + this.state = 317; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case QuixosCapabilityParser.ATOM: this.enterOuterAlt(localContext, 1); { - this.state = 308; + this.state = 310; this.match(QuixosCapabilityParser.ATOM); - this.state = 309; + this.state = 311; this.identifier(); } break; case QuixosCapabilityParser.INTERFACE: this.enterOuterAlt(localContext, 2); { - this.state = 310; + this.state = 312; this.match(QuixosCapabilityParser.INTERFACE); - this.state = 311; + this.state = 313; this.interfaceType(); } break; case QuixosCapabilityParser.OBJECT: this.enterOuterAlt(localContext, 3); { - this.state = 312; + this.state = 314; this.match(QuixosCapabilityParser.OBJECT); - this.state = 313; + this.state = 315; this.identifier(); } break; @@ -1096,7 +1098,7 @@ export class QuixosCapabilityParser extends antlr.Parser { case QuixosCapabilityParser.IDENTIFIER: this.enterOuterAlt(localContext, 4); { - this.state = 314; + this.state = 316; this.valueType(); } break; @@ -1124,25 +1126,25 @@ export class QuixosCapabilityParser extends antlr.Parser { try { this.enterOuterAlt(localContext, 1); { - this.state = 317; + this.state = 319; this.match(QuixosCapabilityParser.TYPE); - this.state = 318; - this.identifier(); this.state = 320; + this.identifier(); + this.state = 322; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if (_la === 107) { + if (_la === 108) { { - this.state = 319; + this.state = 321; this.typeParameters(); } } - this.state = 322; - this.match(QuixosCapabilityParser.EQUAL); - this.state = 323; - this.valueType(); this.state = 324; + this.match(QuixosCapabilityParser.EQUAL); + this.state = 325; + this.valueType(); + this.state = 326; this.match(QuixosCapabilityParser.SEMI); } } @@ -1163,27 +1165,28 @@ export class QuixosCapabilityParser extends antlr.Parser { let localContext = new InterfaceMemberContext(this.context, this.state); this.enterRule(localContext, 34, QuixosCapabilityParser.RULE_interfaceMember); try { - this.state = 329; + this.state = 331; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case QuixosCapabilityParser.VALUE: this.enterOuterAlt(localContext, 1); { - this.state = 326; + this.state = 328; this.valueMember(); } break; case QuixosCapabilityParser.RELATION: this.enterOuterAlt(localContext, 2); { - this.state = 327; + this.state = 329; this.relationshipMember(); } break; case QuixosCapabilityParser.OPERATION: + case QuixosCapabilityParser.STATIC: this.enterOuterAlt(localContext, 3); { - this.state = 328; + this.state = 330; this.operationMember(); } break; @@ -1207,36 +1210,47 @@ export class QuixosCapabilityParser extends antlr.Parser { public operationMember(): OperationMemberContext { let localContext = new OperationMemberContext(this.context, this.state); this.enterRule(localContext, 36, QuixosCapabilityParser.RULE_operationMember); + let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 331; - this.match(QuixosCapabilityParser.OPERATION); - this.state = 332; - this.identifier(); - this.state = 333; - this.match(QuixosCapabilityParser.ID); this.state = 334; - this.stringLiteral(); - this.state = 335; - this.match(QuixosCapabilityParser.COLON); + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 24) { + { + this.state = 333; + this.match(QuixosCapabilityParser.STATIC); + } + } + this.state = 336; - this.valueType(); + this.match(QuixosCapabilityParser.OPERATION); this.state = 337; - this.match(QuixosCapabilityParser.ARROW); + this.identifier(); this.state = 338; - this.valueType(); - this.state = 339; - this.match(QuixosCapabilityParser.LBRACE); - this.state = 340; - this.match(QuixosCapabilityParser.CALL); - this.state = 341; this.match(QuixosCapabilityParser.ID); - this.state = 342; + this.state = 339; this.stringLiteral(); + this.state = 340; + this.match(QuixosCapabilityParser.COLON); + this.state = 341; + this.valueType(); + this.state = 342; + this.match(QuixosCapabilityParser.ARROW); this.state = 343; - this.match(QuixosCapabilityParser.SEMI); + this.valueType(); this.state = 344; + this.match(QuixosCapabilityParser.LBRACE); + this.state = 345; + this.match(QuixosCapabilityParser.CALL); + this.state = 346; + this.match(QuixosCapabilityParser.ID); + this.state = 347; + this.stringLiteral(); + this.state = 348; + this.match(QuixosCapabilityParser.SEMI); + this.state = 349; this.match(QuixosCapabilityParser.RBRACE); } } @@ -1260,35 +1274,35 @@ export class QuixosCapabilityParser extends antlr.Parser { try { this.enterOuterAlt(localContext, 1); { - this.state = 346; - this.match(QuixosCapabilityParser.VALUE); - this.state = 347; - this.identifier(); - this.state = 348; - this.match(QuixosCapabilityParser.ID); - this.state = 349; - this.stringLiteral(); - this.state = 350; - this.match(QuixosCapabilityParser.COLON); this.state = 351; - this.valueType(); + this.match(QuixosCapabilityParser.VALUE); this.state = 352; - this.match(QuixosCapabilityParser.LBRACE); + this.identifier(); + this.state = 353; + this.match(QuixosCapabilityParser.ID); + this.state = 354; + this.stringLiteral(); + this.state = 355; + this.match(QuixosCapabilityParser.COLON); this.state = 356; + this.valueType(); + this.state = 357; + this.match(QuixosCapabilityParser.LBRACE); + this.state = 361; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - while (((((_la - 55)) & ~0x1F) === 0 && ((1 << (_la - 55)) & 7) !== 0)) { + while (((((_la - 56)) & ~0x1F) === 0 && ((1 << (_la - 56)) & 7) !== 0)) { { { - this.state = 353; + this.state = 358; this.valueMemberOperation(); } } - this.state = 358; + this.state = 363; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 359; + this.state = 364; this.match(QuixosCapabilityParser.RBRACE); } } @@ -1309,27 +1323,14 @@ export class QuixosCapabilityParser extends antlr.Parser { let localContext = new ValueMemberOperationContext(this.context, this.state); this.enterRule(localContext, 40, QuixosCapabilityParser.RULE_valueMemberOperation); try { - this.state = 380; + this.state = 385; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case QuixosCapabilityParser.GET: this.enterOuterAlt(localContext, 1); { - this.state = 361; - this.match(QuixosCapabilityParser.GET); - this.state = 362; - this.match(QuixosCapabilityParser.ID); - this.state = 363; - this.stringLiteral(); - this.state = 364; - this.match(QuixosCapabilityParser.SEMI); - } - break; - case QuixosCapabilityParser.SET: - this.enterOuterAlt(localContext, 2); - { this.state = 366; - this.match(QuixosCapabilityParser.SET); + this.match(QuixosCapabilityParser.GET); this.state = 367; this.match(QuixosCapabilityParser.ID); this.state = 368; @@ -1338,24 +1339,37 @@ export class QuixosCapabilityParser extends antlr.Parser { this.match(QuixosCapabilityParser.SEMI); } break; + case QuixosCapabilityParser.SET: + this.enterOuterAlt(localContext, 2); + { + this.state = 371; + this.match(QuixosCapabilityParser.SET); + this.state = 372; + this.match(QuixosCapabilityParser.ID); + this.state = 373; + this.stringLiteral(); + this.state = 374; + this.match(QuixosCapabilityParser.SEMI); + } + break; case QuixosCapabilityParser.WATCH: this.enterOuterAlt(localContext, 3); { - this.state = 371; - this.match(QuixosCapabilityParser.WATCH); - this.state = 372; - this.match(QuixosCapabilityParser.START); - this.state = 373; - this.match(QuixosCapabilityParser.ID); - this.state = 374; - this.stringLiteral(); - this.state = 375; - this.match(QuixosCapabilityParser.STOP); this.state = 376; - this.match(QuixosCapabilityParser.ID); + this.match(QuixosCapabilityParser.WATCH); this.state = 377; - this.stringLiteral(); + this.match(QuixosCapabilityParser.START); this.state = 378; + this.match(QuixosCapabilityParser.ID); + this.state = 379; + this.stringLiteral(); + this.state = 380; + this.match(QuixosCapabilityParser.STOP); + this.state = 381; + this.match(QuixosCapabilityParser.ID); + this.state = 382; + this.stringLiteral(); + this.state = 383; this.match(QuixosCapabilityParser.SEMI); } break; @@ -1383,47 +1397,47 @@ export class QuixosCapabilityParser extends antlr.Parser { try { this.enterOuterAlt(localContext, 1); { - this.state = 382; - this.match(QuixosCapabilityParser.RELATION); - this.state = 383; - this.identifier(); - this.state = 384; - this.match(QuixosCapabilityParser.ID); - this.state = 385; - this.stringLiteral(); - this.state = 386; - this.match(QuixosCapabilityParser.COLON); this.state = 387; - this.cardinality(); + this.match(QuixosCapabilityParser.RELATION); this.state = 388; - this.targetConstraint(); + this.identifier(); + this.state = 389; + this.match(QuixosCapabilityParser.ID); this.state = 390; + this.stringLiteral(); + this.state = 391; + this.match(QuixosCapabilityParser.COLON); + this.state = 392; + this.cardinality(); + this.state = 393; + this.targetConstraint(); + this.state = 395; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if (_la === 76) { + if (_la === 77) { { - this.state = 389; + this.state = 394; this.match(QuixosCapabilityParser.ORDERED); } } - this.state = 392; + this.state = 397; this.match(QuixosCapabilityParser.LBRACE); - this.state = 396; + this.state = 401; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - while (((((_la - 57)) & ~0x1F) === 0 && ((1 << (_la - 57)) & 225) !== 0)) { + while (((((_la - 58)) & ~0x1F) === 0 && ((1 << (_la - 58)) & 225) !== 0)) { { { - this.state = 393; + this.state = 398; this.relationshipOperation(); } } - this.state = 398; + this.state = 403; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 399; + this.state = 404; this.match(QuixosCapabilityParser.RBRACE); } } @@ -1444,27 +1458,14 @@ export class QuixosCapabilityParser extends antlr.Parser { let localContext = new RelationshipOperationContext(this.context, this.state); this.enterRule(localContext, 44, QuixosCapabilityParser.RULE_relationshipOperation); try { - this.state = 425; + this.state = 430; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case QuixosCapabilityParser.RESOLVE: this.enterOuterAlt(localContext, 1); { - this.state = 401; - this.match(QuixosCapabilityParser.RESOLVE); - this.state = 402; - this.match(QuixosCapabilityParser.ID); - this.state = 403; - this.stringLiteral(); - this.state = 404; - this.match(QuixosCapabilityParser.SEMI); - } - break; - case QuixosCapabilityParser.CONNECT: - this.enterOuterAlt(localContext, 2); - { this.state = 406; - this.match(QuixosCapabilityParser.CONNECT); + this.match(QuixosCapabilityParser.RESOLVE); this.state = 407; this.match(QuixosCapabilityParser.ID); this.state = 408; @@ -1473,11 +1474,11 @@ export class QuixosCapabilityParser extends antlr.Parser { this.match(QuixosCapabilityParser.SEMI); } break; - case QuixosCapabilityParser.DISCONNECT: - this.enterOuterAlt(localContext, 3); + case QuixosCapabilityParser.CONNECT: + this.enterOuterAlt(localContext, 2); { this.state = 411; - this.match(QuixosCapabilityParser.DISCONNECT); + this.match(QuixosCapabilityParser.CONNECT); this.state = 412; this.match(QuixosCapabilityParser.ID); this.state = 413; @@ -1486,24 +1487,37 @@ export class QuixosCapabilityParser extends antlr.Parser { this.match(QuixosCapabilityParser.SEMI); } break; + case QuixosCapabilityParser.DISCONNECT: + this.enterOuterAlt(localContext, 3); + { + this.state = 416; + this.match(QuixosCapabilityParser.DISCONNECT); + this.state = 417; + this.match(QuixosCapabilityParser.ID); + this.state = 418; + this.stringLiteral(); + this.state = 419; + this.match(QuixosCapabilityParser.SEMI); + } + break; case QuixosCapabilityParser.WATCH: this.enterOuterAlt(localContext, 4); { - this.state = 416; - this.match(QuixosCapabilityParser.WATCH); - this.state = 417; - this.match(QuixosCapabilityParser.START); - this.state = 418; - this.match(QuixosCapabilityParser.ID); - this.state = 419; - this.stringLiteral(); - this.state = 420; - this.match(QuixosCapabilityParser.STOP); this.state = 421; - this.match(QuixosCapabilityParser.ID); + this.match(QuixosCapabilityParser.WATCH); this.state = 422; - this.stringLiteral(); + this.match(QuixosCapabilityParser.START); this.state = 423; + this.match(QuixosCapabilityParser.ID); + this.state = 424; + this.stringLiteral(); + this.state = 425; + this.match(QuixosCapabilityParser.STOP); + this.state = 426; + this.match(QuixosCapabilityParser.ID); + this.state = 427; + this.stringLiteral(); + this.state = 428; this.match(QuixosCapabilityParser.SEMI); } break; @@ -1529,31 +1543,31 @@ export class QuixosCapabilityParser extends antlr.Parser { this.enterRule(localContext, 46, QuixosCapabilityParser.RULE_targetConstraint); let _la: number; try { - this.state = 436; + this.state = 441; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case QuixosCapabilityParser.ATOM: this.enterOuterAlt(localContext, 1); { - this.state = 427; + this.state = 432; this.match(QuixosCapabilityParser.ATOM); - this.state = 428; + this.state = 433; this.identifier(); } break; case QuixosCapabilityParser.INTERFACE: this.enterOuterAlt(localContext, 2); { - this.state = 429; + this.state = 434; this.match(QuixosCapabilityParser.INTERFACE); - this.state = 430; + this.state = 435; this.identifier(); - this.state = 432; + this.state = 437; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if (_la === 107) { + if (_la === 108) { { - this.state = 431; + this.state = 436; this.typeArguments(); } } @@ -1563,9 +1577,9 @@ export class QuixosCapabilityParser extends antlr.Parser { case QuixosCapabilityParser.OBJECT: this.enterOuterAlt(localContext, 3); { - this.state = 434; + this.state = 439; this.match(QuixosCapabilityParser.OBJECT); - this.state = 435; + this.state = 440; this.identifier(); } break; @@ -1593,61 +1607,61 @@ export class QuixosCapabilityParser extends antlr.Parser { try { this.enterOuterAlt(localContext, 1); { - this.state = 441; + this.state = 446; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while ((((_la) & ~0x1F) === 0 && ((1 << _la) & 772) !== 0)) { { { - this.state = 438; + this.state = 443; this.resourcePreamble(); } } - this.state = 443; + this.state = 448; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 444; - this.match(QuixosCapabilityParser.PACKAGE); - this.state = 445; - this.identifier(); - this.state = 446; - this.match(QuixosCapabilityParser.ID); - this.state = 447; - this.stringLiteral(); - this.state = 448; - this.match(QuixosCapabilityParser.REVISION); this.state = 449; - this.stringLiteral(); + this.match(QuixosCapabilityParser.PACKAGE); + this.state = 450; + this.identifier(); + this.state = 451; + this.match(QuixosCapabilityParser.ID); this.state = 452; + this.stringLiteral(); + this.state = 453; + this.match(QuixosCapabilityParser.REVISION); + this.state = 454; + this.stringLiteral(); + this.state = 457; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if (_la === 43) { + if (_la === 44) { { - this.state = 450; + this.state = 455; this.match(QuixosCapabilityParser.SEMANTIC_MAJOR); - this.state = 451; + this.state = 456; this.match(QuixosCapabilityParser.INTEGER); } } - this.state = 454; + this.state = 459; this.match(QuixosCapabilityParser.LBRACE); - this.state = 458; + this.state = 463; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while ((((_la) & ~0x1F) === 0 && ((1 << _la) & 458752) !== 0)) { { { - this.state = 455; + this.state = 460; this.packageExport(); } } - this.state = 460; + this.state = 465; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 461; + this.state = 466; this.match(QuixosCapabilityParser.RBRACE); } } @@ -1668,27 +1682,27 @@ export class QuixosCapabilityParser extends antlr.Parser { let localContext = new PackageExportContext(this.context, this.state); this.enterRule(localContext, 50, QuixosCapabilityParser.RULE_packageExport); try { - this.state = 466; + this.state = 471; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case QuixosCapabilityParser.OPERATION: this.enterOuterAlt(localContext, 1); { - this.state = 463; + this.state = 468; this.packageOperationExport(); } break; case QuixosCapabilityParser.FUNCTION: this.enterOuterAlt(localContext, 2); { - this.state = 464; + this.state = 469; this.packageFunctionExport(); } break; case QuixosCapabilityParser.CONSTRUCTOR: this.enterOuterAlt(localContext, 3); { - this.state = 465; + this.state = 470; this.packageConstructorExport(); } break; @@ -1716,61 +1730,61 @@ export class QuixosCapabilityParser extends antlr.Parser { try { this.enterOuterAlt(localContext, 1); { - this.state = 468; + this.state = 473; this.match(QuixosCapabilityParser.OPERATION); - this.state = 469; + this.state = 474; this.identifier(); - this.state = 471; + this.state = 476; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if (_la === 107) { + if (_la === 108) { { - this.state = 470; + this.state = 475; this.typeParameters(); } } - this.state = 473; - this.match(QuixosCapabilityParser.ID); - this.state = 474; - this.stringLiteral(); - this.state = 475; - this.match(QuixosCapabilityParser.COLON); - this.state = 476; - this.valueType(); - this.state = 477; - this.match(QuixosCapabilityParser.ARROW); this.state = 478; - this.valueType(); + this.match(QuixosCapabilityParser.ID); this.state = 479; - this.match(QuixosCapabilityParser.MODE); + this.stringLiteral(); this.state = 480; - this.operationMode(); + this.match(QuixosCapabilityParser.COLON); + this.state = 481; + this.valueType(); this.state = 482; + this.match(QuixosCapabilityParser.ARROW); + this.state = 483; + this.valueType(); + this.state = 484; + this.match(QuixosCapabilityParser.MODE); + this.state = 485; + this.operationMode(); + this.state = 487; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if (_la === 51) { + if (_la === 52) { { - this.state = 481; + this.state = 486; this.eventClause(); } } - this.state = 484; + this.state = 489; this.match(QuixosCapabilityParser.RECEIVER); - this.state = 485; + this.state = 490; this.receiverRequirement(); - this.state = 487; + this.state = 492; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if (_la === 53) { + if (_la === 54) { { - this.state = 486; + this.state = 491; this.dependencyBlock(); } } - this.state = 489; + this.state = 494; this.match(QuixosCapabilityParser.SEMI); } } @@ -1794,43 +1808,43 @@ export class QuixosCapabilityParser extends antlr.Parser { try { this.enterOuterAlt(localContext, 1); { - this.state = 491; + this.state = 496; this.match(QuixosCapabilityParser.FUNCTION); - this.state = 492; + this.state = 497; this.identifier(); - this.state = 494; + this.state = 499; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if (_la === 107) { + if (_la === 108) { { - this.state = 493; + this.state = 498; this.typeParameters(); } } - this.state = 496; - this.match(QuixosCapabilityParser.ID); - this.state = 497; - this.stringLiteral(); - this.state = 498; - this.match(QuixosCapabilityParser.COLON); - this.state = 499; - this.valueType(); - this.state = 500; - this.match(QuixosCapabilityParser.ARROW); this.state = 501; - this.valueType(); + this.match(QuixosCapabilityParser.ID); + this.state = 502; + this.stringLiteral(); this.state = 503; + this.match(QuixosCapabilityParser.COLON); + this.state = 504; + this.valueType(); + this.state = 505; + this.match(QuixosCapabilityParser.ARROW); + this.state = 506; + this.valueType(); + this.state = 508; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if (_la === 53) { + if (_la === 54) { { - this.state = 502; + this.state = 507; this.dependencyBlock(); } } - this.state = 505; + this.state = 510; this.match(QuixosCapabilityParser.SEMI); } } @@ -1854,33 +1868,33 @@ export class QuixosCapabilityParser extends antlr.Parser { try { this.enterOuterAlt(localContext, 1); { - this.state = 507; - this.match(QuixosCapabilityParser.CONSTRUCTOR); - this.state = 508; - this.identifier(); - this.state = 509; - this.match(QuixosCapabilityParser.ID); - this.state = 510; - this.stringLiteral(); - this.state = 511; - this.match(QuixosCapabilityParser.CONSTRUCTS); this.state = 512; - this.identifier(); + this.match(QuixosCapabilityParser.CONSTRUCTOR); this.state = 513; - this.match(QuixosCapabilityParser.COLON); + this.identifier(); this.state = 514; - this.valueType(); + this.match(QuixosCapabilityParser.ID); + this.state = 515; + this.stringLiteral(); this.state = 516; + this.match(QuixosCapabilityParser.CONSTRUCTS); + this.state = 517; + this.identifier(); + this.state = 518; + this.match(QuixosCapabilityParser.COLON); + this.state = 519; + this.valueType(); + this.state = 521; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if (_la === 53) { + if (_la === 54) { { - this.state = 515; + this.state = 520; this.dependencyBlock(); } } - this.state = 518; + this.state = 523; this.match(QuixosCapabilityParser.SEMI); } } @@ -1903,9 +1917,9 @@ export class QuixosCapabilityParser extends antlr.Parser { try { this.enterOuterAlt(localContext, 1); { - this.state = 520; + this.state = 525; this.match(QuixosCapabilityParser.EMITS); - this.state = 521; + this.state = 526; this.valueType(); } } @@ -1929,9 +1943,9 @@ export class QuixosCapabilityParser extends antlr.Parser { try { this.enterOuterAlt(localContext, 1); { - this.state = 523; + this.state = 528; _la = this.tokenStream.LA(1); - if(!(((((_la - 65)) & ~0x1F) === 0 && ((1 << (_la - 65)) & 31) !== 0))) { + if(!(((((_la - 66)) & ~0x1F) === 0 && ((1 << (_la - 66)) & 31) !== 0))) { this.errorHandler.recoverInline(this); } else { @@ -1958,68 +1972,68 @@ export class QuixosCapabilityParser extends antlr.Parser { this.enterRule(localContext, 62, QuixosCapabilityParser.RULE_receiverRequirement); let _la: number; try { - this.state = 543; + this.state = 548; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case QuixosCapabilityParser.ANY: this.enterOuterAlt(localContext, 1); { - this.state = 525; + this.state = 530; this.match(QuixosCapabilityParser.ANY); } break; case QuixosCapabilityParser.ATOM: this.enterOuterAlt(localContext, 2); { - this.state = 526; + this.state = 531; this.match(QuixosCapabilityParser.ATOM); - this.state = 527; + this.state = 532; this.identifier(); } break; case QuixosCapabilityParser.OBJECT: this.enterOuterAlt(localContext, 3); { - this.state = 528; + this.state = 533; this.match(QuixosCapabilityParser.OBJECT); - this.state = 529; + this.state = 534; this.identifier(); } break; case QuixosCapabilityParser.INTERFACES: this.enterOuterAlt(localContext, 4); { - this.state = 530; + this.state = 535; this.match(QuixosCapabilityParser.INTERFACES); - this.state = 531; + this.state = 536; this.match(QuixosCapabilityParser.LBRACK); - this.state = 540; + this.state = 545; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if (_la === 39 || _la === 113) { + if (_la === 40 || _la === 114) { { - this.state = 532; - this.interfaceType(); this.state = 537; + this.interfaceType(); + this.state = 542; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - while (_la === 99) { + while (_la === 100) { { { - this.state = 533; + this.state = 538; this.match(QuixosCapabilityParser.COMMA); - this.state = 534; + this.state = 539; this.interfaceType(); } } - this.state = 539; + this.state = 544; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } } } - this.state = 542; + this.state = 547; this.match(QuixosCapabilityParser.RBRACK); } break; @@ -2047,21 +2061,21 @@ export class QuixosCapabilityParser extends antlr.Parser { try { this.enterOuterAlt(localContext, 1); { - this.state = 545; - this.identifier(); this.state = 550; + this.identifier(); + this.state = 555; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - while (_la === 99) { + while (_la === 100) { { { - this.state = 546; + this.state = 551; this.match(QuixosCapabilityParser.COMMA); - this.state = 547; + this.state = 552; this.identifier(); } } - this.state = 552; + this.state = 557; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -2087,25 +2101,25 @@ export class QuixosCapabilityParser extends antlr.Parser { try { this.enterOuterAlt(localContext, 1); { - this.state = 553; - this.match(QuixosCapabilityParser.REQUIRES); - this.state = 554; - this.match(QuixosCapabilityParser.LBRACE); this.state = 558; + this.match(QuixosCapabilityParser.REQUIRES); + this.state = 559; + this.match(QuixosCapabilityParser.LBRACE); + this.state = 563; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - while ((((_la) & ~0x1F) === 0 && ((1 << _la) & 402917376) !== 0)) { + while ((((_la) & ~0x1F) === 0 && ((1 << _la) & 805570560) !== 0)) { { { - this.state = 555; + this.state = 560; this.dependencyPort(); } } - this.state = 560; + this.state = 565; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 561; + this.state = 566; this.match(QuixosCapabilityParser.RBRACE); } } @@ -2127,110 +2141,110 @@ export class QuixosCapabilityParser extends antlr.Parser { this.enterRule(localContext, 68, QuixosCapabilityParser.RULE_dependencyPort); let _la: number; try { - this.state = 605; + this.state = 610; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case QuixosCapabilityParser.STATE: this.enterOuterAlt(localContext, 1); { - this.state = 563; - this.match(QuixosCapabilityParser.STATE); - this.state = 564; - this.identifier(); - this.state = 565; - this.match(QuixosCapabilityParser.ID); - this.state = 566; - this.stringLiteral(); - this.state = 567; - this.match(QuixosCapabilityParser.COLON); this.state = 568; - this.valueType(); + this.match(QuixosCapabilityParser.STATE); this.state = 569; - this.primitiveList(); + this.identifier(); this.state = 570; + this.match(QuixosCapabilityParser.ID); + this.state = 571; + this.stringLiteral(); + this.state = 572; + this.match(QuixosCapabilityParser.COLON); + this.state = 573; + this.valueType(); + this.state = 574; + this.primitiveList(); + this.state = 575; this.match(QuixosCapabilityParser.SEMI); } break; case QuixosCapabilityParser.EDGE: this.enterOuterAlt(localContext, 2); { - this.state = 572; - this.match(QuixosCapabilityParser.EDGE); - this.state = 573; - this.identifier(); - this.state = 574; - this.match(QuixosCapabilityParser.ID); - this.state = 575; - this.stringLiteral(); - this.state = 576; - this.match(QuixosCapabilityParser.COLON); this.state = 577; - this.cardinality(); + this.match(QuixosCapabilityParser.EDGE); this.state = 578; - this.targetConstraint(); + this.identifier(); this.state = 579; - this.primitiveList(); + this.match(QuixosCapabilityParser.ID); this.state = 580; + this.stringLiteral(); + this.state = 581; + this.match(QuixosCapabilityParser.COLON); + this.state = 582; + this.cardinality(); + this.state = 583; + this.targetConstraint(); + this.state = 584; + this.primitiveList(); + this.state = 585; this.match(QuixosCapabilityParser.SEMI); } break; case QuixosCapabilityParser.INTERFACE: this.enterOuterAlt(localContext, 3); { - this.state = 582; - this.match(QuixosCapabilityParser.INTERFACE); - this.state = 583; - this.identifier(); - this.state = 584; - this.match(QuixosCapabilityParser.ID); - this.state = 585; - this.stringLiteral(); - this.state = 586; - this.match(QuixosCapabilityParser.COLON); this.state = 587; + this.match(QuixosCapabilityParser.INTERFACE); + this.state = 588; this.identifier(); this.state = 589; + this.match(QuixosCapabilityParser.ID); + this.state = 590; + this.stringLiteral(); + this.state = 591; + this.match(QuixosCapabilityParser.COLON); + this.state = 592; + this.identifier(); + this.state = 594; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if (_la === 107) { + if (_la === 108) { { - this.state = 588; + this.state = 593; this.typeArguments(); } } - this.state = 591; + this.state = 596; this.match(QuixosCapabilityParser.SEMI); } break; case QuixosCapabilityParser.CONSTRUCTOR: this.enterOuterAlt(localContext, 4); { - this.state = 593; - this.match(QuixosCapabilityParser.CONSTRUCTOR); - this.state = 594; - this.identifier(); - this.state = 595; - this.match(QuixosCapabilityParser.ID); - this.state = 596; - this.stringLiteral(); - this.state = 597; - this.match(QuixosCapabilityParser.COLON); this.state = 598; + this.match(QuixosCapabilityParser.CONSTRUCTOR); + this.state = 599; this.identifier(); + this.state = 600; + this.match(QuixosCapabilityParser.ID); this.state = 601; + this.stringLiteral(); + this.state = 602; + this.match(QuixosCapabilityParser.COLON); + this.state = 603; + this.identifier(); + this.state = 606; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 20) { { - this.state = 599; + this.state = 604; this.match(QuixosCapabilityParser.INPUT); - this.state = 600; + this.state = 605; this.valueType(); } } - this.state = 603; + this.state = 608; this.match(QuixosCapabilityParser.SEMI); } break; @@ -2258,27 +2272,27 @@ export class QuixosCapabilityParser extends antlr.Parser { try { this.enterOuterAlt(localContext, 1); { - this.state = 607; + this.state = 612; this.match(QuixosCapabilityParser.LBRACK); - this.state = 608; - this.primitive(); this.state = 613; + this.primitive(); + this.state = 618; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - while (_la === 99) { + while (_la === 100) { { { - this.state = 609; + this.state = 614; this.match(QuixosCapabilityParser.COMMA); - this.state = 610; + this.state = 615; this.primitive(); } } - this.state = 615; + this.state = 620; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 616; + this.state = 621; this.match(QuixosCapabilityParser.RBRACK); } } @@ -2302,9 +2316,9 @@ export class QuixosCapabilityParser extends antlr.Parser { try { this.enterOuterAlt(localContext, 1); { - this.state = 618; + this.state = 623; _la = this.tokenStream.LA(1); - if(!(((((_la - 60)) & ~0x1F) === 0 && ((1 << (_la - 60)) & 223) !== 0))) { + if(!(((((_la - 61)) & ~0x1F) === 0 && ((1 << (_la - 61)) & 223) !== 0))) { this.errorHandler.recoverInline(this); } else { @@ -2332,9 +2346,9 @@ export class QuixosCapabilityParser extends antlr.Parser { try { this.enterOuterAlt(localContext, 1); { - this.state = 620; + this.state = 625; this.match(QuixosCapabilityParser.SHARED); - this.state = 621; + this.state = 626; this.attachmentDecl(); } } @@ -2355,20 +2369,20 @@ export class QuixosCapabilityParser extends antlr.Parser { let localContext = new AttachmentDeclContext(this.context, this.state); this.enterRule(localContext, 76, QuixosCapabilityParser.RULE_attachmentDecl); try { - this.state = 625; + this.state = 630; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case QuixosCapabilityParser.STATE: this.enterOuterAlt(localContext, 1); { - this.state = 623; + this.state = 628; this.stateDecl(); } break; case QuixosCapabilityParser.EDGE: this.enterOuterAlt(localContext, 2); { - this.state = 624; + this.state = 629; this.edgeDecl(); } break; @@ -2396,39 +2410,39 @@ export class QuixosCapabilityParser extends antlr.Parser { try { this.enterOuterAlt(localContext, 1); { - this.state = 627; - this.match(QuixosCapabilityParser.STATE); - this.state = 628; - this.identifier(); - this.state = 629; - this.match(QuixosCapabilityParser.ID); - this.state = 630; - this.stringLiteral(); - this.state = 631; - this.match(QuixosCapabilityParser.ON); this.state = 632; - this.identifier(); + this.match(QuixosCapabilityParser.STATE); this.state = 633; - this.match(QuixosCapabilityParser.COLON); + this.identifier(); this.state = 634; - this.valueType(); + this.match(QuixosCapabilityParser.ID); this.state = 635; - this.match(QuixosCapabilityParser.POLICY); + this.stringLiteral(); this.state = 636; - this.storagePolicy(); + this.match(QuixosCapabilityParser.ON); + this.state = 637; + this.identifier(); + this.state = 638; + this.match(QuixosCapabilityParser.COLON); this.state = 639; + this.valueType(); + this.state = 640; + this.match(QuixosCapabilityParser.POLICY); + this.state = 641; + this.storagePolicy(); + this.state = 644; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if (_la === 38) { + if (_la === 39) { { - this.state = 637; + this.state = 642; this.match(QuixosCapabilityParser.DEFAULT); - this.state = 638; + this.state = 643; this.jsonLiteral(); } } - this.state = 641; + this.state = 646; this.match(QuixosCapabilityParser.SEMI); } } @@ -2449,26 +2463,26 @@ export class QuixosCapabilityParser extends antlr.Parser { let localContext = new StoragePolicyContext(this.context, this.state); this.enterRule(localContext, 80, QuixosCapabilityParser.RULE_storagePolicy); try { - this.state = 649; + this.state = 654; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case QuixosCapabilityParser.OPTIMISTIC_REGISTER: this.enterOuterAlt(localContext, 1); { - this.state = 643; + this.state = 648; this.match(QuixosCapabilityParser.OPTIMISTIC_REGISTER); } break; case QuixosCapabilityParser.CRDT: this.enterOuterAlt(localContext, 2); { - this.state = 644; + this.state = 649; this.match(QuixosCapabilityParser.CRDT); - this.state = 645; + this.state = 650; this.match(QuixosCapabilityParser.LPAREN); - this.state = 646; + this.state = 651; this.valueType(); - this.state = 647; + this.state = 652; this.match(QuixosCapabilityParser.RPAREN); } break; @@ -2495,21 +2509,21 @@ export class QuixosCapabilityParser extends antlr.Parser { try { this.enterOuterAlt(localContext, 1); { - this.state = 651; - this.match(QuixosCapabilityParser.EDGE); - this.state = 652; - this.identifier(); - this.state = 653; - this.match(QuixosCapabilityParser.ID); - this.state = 654; - this.stringLiteral(); - this.state = 655; - this.match(QuixosCapabilityParser.LBRACE); this.state = 656; - this.edgeEndpoint(); + this.match(QuixosCapabilityParser.EDGE); this.state = 657; - this.edgeEndpoint(); + this.identifier(); this.state = 658; + this.match(QuixosCapabilityParser.ID); + this.state = 659; + this.stringLiteral(); + this.state = 660; + this.match(QuixosCapabilityParser.LBRACE); + this.state = 661; + this.edgeEndpoint(); + this.state = 662; + this.edgeEndpoint(); + this.state = 663; this.match(QuixosCapabilityParser.RBRACE); } } @@ -2533,73 +2547,73 @@ export class QuixosCapabilityParser extends antlr.Parser { try { this.enterOuterAlt(localContext, 1); { - this.state = 660; - this.targetConstraint(); - this.state = 661; - this.match(QuixosCapabilityParser.PROJECTION); - this.state = 662; - this.identifier(); - this.state = 663; - this.match(QuixosCapabilityParser.ID); - this.state = 664; - this.stringLiteral(); this.state = 665; - this.cardinality(); + this.targetConstraint(); + this.state = 666; + this.match(QuixosCapabilityParser.PROJECTION); this.state = 667; + this.identifier(); + this.state = 668; + this.match(QuixosCapabilityParser.ID); + this.state = 669; + this.stringLiteral(); + this.state = 670; + this.cardinality(); + this.state = 672; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if (_la === 76) { + if (_la === 77) { { - this.state = 666; + this.state = 671; this.match(QuixosCapabilityParser.ORDERED); } } - this.state = 671; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 44) { - { - this.state = 669; - this.match(QuixosCapabilityParser.ON_DELETE); - this.state = 670; - this.stringLiteral(); - } - } - - this.state = 674; + this.state = 676; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 45) { { - this.state = 673; - this.match(QuixosCapabilityParser.RETAIN_OTHER); - } - } - - this.state = 678; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 46) { - { - this.state = 676; - this.match(QuixosCapabilityParser.KEYED); - this.state = 677; + this.state = 674; + this.match(QuixosCapabilityParser.ON_DELETE); + this.state = 675; this.stringLiteral(); } } - this.state = 681; + this.state = 679; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if (_la === 47) { + if (_la === 46) { { - this.state = 680; - this.match(QuixosCapabilityParser.PUBLIC_TRAVERSAL); + this.state = 678; + this.match(QuixosCapabilityParser.RETAIN_OTHER); } } this.state = 683; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 47) { + { + this.state = 681; + this.match(QuixosCapabilityParser.KEYED); + this.state = 682; + this.stringLiteral(); + } + } + + this.state = 686; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 48) { + { + this.state = 685; + this.match(QuixosCapabilityParser.PUBLIC_TRAVERSAL); + } + } + + this.state = 688; this.match(QuixosCapabilityParser.SEMI); } } @@ -2623,65 +2637,65 @@ export class QuixosCapabilityParser extends antlr.Parser { try { this.enterOuterAlt(localContext, 1); { - this.state = 685; - this.match(QuixosCapabilityParser.CONFORM); - this.state = 686; - this.identifier(); - this.state = 687; - this.match(QuixosCapabilityParser.AS); - this.state = 688; - this.identifier(); this.state = 690; + this.match(QuixosCapabilityParser.CONFORM); + this.state = 691; + this.identifier(); + this.state = 692; + this.match(QuixosCapabilityParser.AS); + this.state = 693; + this.identifier(); + this.state = 695; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if (_la === 107) { + if (_la === 108) { { - this.state = 689; + this.state = 694; this.typeArguments(); } } - this.state = 694; + this.state = 699; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if (_la === 48) { + if (_la === 49) { { - this.state = 692; + this.state = 697; this.match(QuixosCapabilityParser.ID); - this.state = 693; + this.state = 698; this.stringLiteral(); } } - this.state = 698; + this.state = 703; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if (_la === 43) { + if (_la === 44) { { - this.state = 696; + this.state = 701; this.match(QuixosCapabilityParser.SEMANTIC_MAJOR); - this.state = 697; + this.state = 702; this.match(QuixosCapabilityParser.INTEGER); } } - this.state = 700; + this.state = 705; this.match(QuixosCapabilityParser.LBRACE); - this.state = 704; + this.state = 709; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - while (((((_la - 23)) & ~0x1F) === 0 && ((1 << (_la - 23)) & 1029) !== 0)) { + while (((((_la - 23)) & ~0x1F) === 0 && ((1 << (_la - 23)) & 2057) !== 0)) { { { - this.state = 701; + this.state = 706; this.conformanceItem(); } } - this.state = 706; + this.state = 711; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 707; + this.state = 712; this.match(QuixosCapabilityParser.RBRACE); } } @@ -2702,34 +2716,72 @@ export class QuixosCapabilityParser extends antlr.Parser { let localContext = new ConformanceItemContext(this.context, this.state); this.enterRule(localContext, 88, QuixosCapabilityParser.RULE_conformanceItem); try { - this.state = 713; + this.state = 719; this.errorHandler.sync(this); - switch (this.tokenStream.LA(1)) { - case QuixosCapabilityParser.PRIVATE: + switch (this.interpreter.adaptivePredict(this.tokenStream, 61, this.context) ) { + case 1: this.enterOuterAlt(localContext, 1); { - this.state = 709; + this.state = 714; this.match(QuixosCapabilityParser.PRIVATE); - this.state = 710; + this.state = 715; this.attachmentDecl(); } break; - case QuixosCapabilityParser.BIND: + case 2: this.enterOuterAlt(localContext, 2); { - this.state = 711; + this.state = 716; this.operationBindingDecl(); } break; - case QuixosCapabilityParser.MATERIALIZE: + case 3: this.enterOuterAlt(localContext, 3); { - this.state = 712; + this.state = 717; + this.stateFieldBindingDecl(); + } + break; + case 4: + this.enterOuterAlt(localContext, 4); + { + this.state = 718; this.relationshipMaterializationDecl(); } break; - default: - throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public stateFieldBindingDecl(): StateFieldBindingDeclContext { + let localContext = new StateFieldBindingDeclContext(this.context, this.state); + this.enterRule(localContext, 90, QuixosCapabilityParser.RULE_stateFieldBindingDecl); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 721; + this.match(QuixosCapabilityParser.BIND); + this.state = 722; + this.identifier(); + this.state = 723; + this.match(QuixosCapabilityParser.TO); + this.state = 724; + this.match(QuixosCapabilityParser.STATE); + this.state = 725; + this.identifier(); + this.state = 726; + this.match(QuixosCapabilityParser.SEMI); } } catch (re) { @@ -2747,35 +2799,35 @@ export class QuixosCapabilityParser extends antlr.Parser { } public relationshipMaterializationDecl(): RelationshipMaterializationDeclContext { let localContext = new RelationshipMaterializationDeclContext(this.context, this.state); - this.enterRule(localContext, 90, QuixosCapabilityParser.RULE_relationshipMaterializationDecl); + this.enterRule(localContext, 92, QuixosCapabilityParser.RULE_relationshipMaterializationDecl); try { this.enterOuterAlt(localContext, 1); { - this.state = 715; + this.state = 728; this.match(QuixosCapabilityParser.MATERIALIZE); - this.state = 716; + this.state = 729; this.identifier(); - this.state = 717; + this.state = 730; this.match(QuixosCapabilityParser.IF); - this.state = 718; + this.state = 731; this.match(QuixosCapabilityParser.ABSENT); - this.state = 719; + this.state = 732; this.match(QuixosCapabilityParser.USING); - this.state = 720; + this.state = 733; this.match(QuixosCapabilityParser.CONSTRUCTOR); - this.state = 721; + this.state = 734; this.identifier(); - this.state = 722; + this.state = 735; this.match(QuixosCapabilityParser.VIA); - this.state = 723; + this.state = 736; this.match(QuixosCapabilityParser.EDGE); - this.state = 724; + this.state = 737; this.identifier(); - this.state = 725; + this.state = 738; this.match(QuixosCapabilityParser.DOT); - this.state = 726; + this.state = 739; this.identifier(); - this.state = 727; + this.state = 740; this.match(QuixosCapabilityParser.SEMI); } } @@ -2794,19 +2846,19 @@ export class QuixosCapabilityParser extends antlr.Parser { } public operationBindingDecl(): OperationBindingDeclContext { let localContext = new OperationBindingDeclContext(this.context, this.state); - this.enterRule(localContext, 92, QuixosCapabilityParser.RULE_operationBindingDecl); + this.enterRule(localContext, 94, QuixosCapabilityParser.RULE_operationBindingDecl); try { this.enterOuterAlt(localContext, 1); { - this.state = 729; + this.state = 742; this.match(QuixosCapabilityParser.BIND); - this.state = 730; + this.state = 743; this.memberOperationRef(); - this.state = 731; + this.state = 744; this.match(QuixosCapabilityParser.TO); - this.state = 732; + this.state = 745; this.operationProvider(); - this.state = 733; + this.state = 746; this.match(QuixosCapabilityParser.SEMI); } } @@ -2825,15 +2877,15 @@ export class QuixosCapabilityParser extends antlr.Parser { } public memberOperationRef(): MemberOperationRefContext { let localContext = new MemberOperationRefContext(this.context, this.state); - this.enterRule(localContext, 94, QuixosCapabilityParser.RULE_memberOperationRef); + this.enterRule(localContext, 96, QuixosCapabilityParser.RULE_memberOperationRef); try { this.enterOuterAlt(localContext, 1); { - this.state = 735; + this.state = 748; this.identifier(); - this.state = 736; + this.state = 749; this.match(QuixosCapabilityParser.DOT); - this.state = 737; + this.state = 750; this.operationName(); } } @@ -2852,86 +2904,86 @@ export class QuixosCapabilityParser extends antlr.Parser { } public operationName(): OperationNameContext { let localContext = new OperationNameContext(this.context, this.state); - this.enterRule(localContext, 96, QuixosCapabilityParser.RULE_operationName); + this.enterRule(localContext, 98, QuixosCapabilityParser.RULE_operationName); try { - this.state = 750; + this.state = 763; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case QuixosCapabilityParser.SOURCE: case QuixosCapabilityParser.IDENTIFIER: this.enterOuterAlt(localContext, 1); { - this.state = 739; + this.state = 752; this.identifier(); } break; case QuixosCapabilityParser.CALL: this.enterOuterAlt(localContext, 2); { - this.state = 740; + this.state = 753; this.match(QuixosCapabilityParser.CALL); } break; case QuixosCapabilityParser.GET: this.enterOuterAlt(localContext, 3); { - this.state = 741; + this.state = 754; this.match(QuixosCapabilityParser.GET); } break; case QuixosCapabilityParser.SET: this.enterOuterAlt(localContext, 4); { - this.state = 742; + this.state = 755; this.match(QuixosCapabilityParser.SET); } break; case QuixosCapabilityParser.RESOLVE: this.enterOuterAlt(localContext, 5); { - this.state = 743; + this.state = 756; this.match(QuixosCapabilityParser.RESOLVE); } break; case QuixosCapabilityParser.CONNECT: this.enterOuterAlt(localContext, 6); { - this.state = 744; + this.state = 757; this.match(QuixosCapabilityParser.CONNECT); } break; case QuixosCapabilityParser.DISCONNECT: this.enterOuterAlt(localContext, 7); { - this.state = 745; + this.state = 758; this.match(QuixosCapabilityParser.DISCONNECT); } break; case QuixosCapabilityParser.WATCH_START: this.enterOuterAlt(localContext, 8); { - this.state = 746; + this.state = 759; this.match(QuixosCapabilityParser.WATCH_START); } break; case QuixosCapabilityParser.WATCH_STOP: this.enterOuterAlt(localContext, 9); { - this.state = 747; + this.state = 760; this.match(QuixosCapabilityParser.WATCH_STOP); } break; case QuixosCapabilityParser.SUBSCRIBE: this.enterOuterAlt(localContext, 10); { - this.state = 748; + this.state = 761; this.match(QuixosCapabilityParser.SUBSCRIBE); } break; case QuixosCapabilityParser.UNSUBSCRIBE: this.enterOuterAlt(localContext, 11); { - this.state = 749; + this.state = 762; this.match(QuixosCapabilityParser.UNSUBSCRIBE); } break; @@ -2954,69 +3006,69 @@ export class QuixosCapabilityParser extends antlr.Parser { } public operationProvider(): OperationProviderContext { let localContext = new OperationProviderContext(this.context, this.state); - this.enterRule(localContext, 98, QuixosCapabilityParser.RULE_operationProvider); + this.enterRule(localContext, 100, QuixosCapabilityParser.RULE_operationProvider); let _la: number; try { - this.state = 774; + this.state = 787; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case QuixosCapabilityParser.STATE: this.enterOuterAlt(localContext, 1); { - this.state = 752; + this.state = 765; this.match(QuixosCapabilityParser.STATE); - this.state = 753; + this.state = 766; this.identifier(); - this.state = 754; + this.state = 767; this.match(QuixosCapabilityParser.DOT); - this.state = 755; + this.state = 768; this.statePrimitive(); } break; case QuixosCapabilityParser.EDGE: this.enterOuterAlt(localContext, 2); { - this.state = 757; + this.state = 770; this.match(QuixosCapabilityParser.EDGE); - this.state = 758; + this.state = 771; this.identifier(); - this.state = 759; + this.state = 772; this.match(QuixosCapabilityParser.DOT); - this.state = 760; + this.state = 773; this.identifier(); - this.state = 761; + this.state = 774; this.match(QuixosCapabilityParser.DOT); - this.state = 762; + this.state = 775; this.edgePrimitive(); } break; case QuixosCapabilityParser.PACKAGE: this.enterOuterAlt(localContext, 3); { - this.state = 764; + this.state = 777; this.match(QuixosCapabilityParser.PACKAGE); - this.state = 765; + this.state = 778; this.identifier(); - this.state = 766; + this.state = 779; this.match(QuixosCapabilityParser.DOT); - this.state = 767; + this.state = 780; this.identifier(); - this.state = 769; + this.state = 782; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if (_la === 107) { + if (_la === 108) { { - this.state = 768; + this.state = 781; this.typeArguments(); } } - this.state = 772; + this.state = 785; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if (_la === 30) { + if (_la === 31) { { - this.state = 771; + this.state = 784; this.dependencyBindingBlock(); } } @@ -3042,14 +3094,14 @@ export class QuixosCapabilityParser extends antlr.Parser { } public statePrimitive(): StatePrimitiveContext { let localContext = new StatePrimitiveContext(this.context, this.state); - this.enterRule(localContext, 100, QuixosCapabilityParser.RULE_statePrimitive); + this.enterRule(localContext, 102, QuixosCapabilityParser.RULE_statePrimitive); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 776; + this.state = 789; _la = this.tokenStream.LA(1); - if(!(((((_la - 60)) & ~0x1F) === 0 && ((1 << (_la - 60)) & 195) !== 0))) { + if(!(((((_la - 61)) & ~0x1F) === 0 && ((1 << (_la - 61)) & 195) !== 0))) { this.errorHandler.recoverInline(this); } else { @@ -3073,14 +3125,14 @@ export class QuixosCapabilityParser extends antlr.Parser { } public edgePrimitive(): EdgePrimitiveContext { let localContext = new EdgePrimitiveContext(this.context, this.state); - this.enterRule(localContext, 102, QuixosCapabilityParser.RULE_edgePrimitive); + this.enterRule(localContext, 104, QuixosCapabilityParser.RULE_edgePrimitive); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 778; + this.state = 791; _la = this.tokenStream.LA(1); - if(!(((((_la - 62)) & ~0x1F) === 0 && ((1 << (_la - 62)) & 55) !== 0))) { + if(!(((((_la - 63)) & ~0x1F) === 0 && ((1 << (_la - 63)) & 55) !== 0))) { this.errorHandler.recoverInline(this); } else { @@ -3104,30 +3156,30 @@ export class QuixosCapabilityParser extends antlr.Parser { } public dependencyBindingBlock(): DependencyBindingBlockContext { let localContext = new DependencyBindingBlockContext(this.context, this.state); - this.enterRule(localContext, 104, QuixosCapabilityParser.RULE_dependencyBindingBlock); + this.enterRule(localContext, 106, QuixosCapabilityParser.RULE_dependencyBindingBlock); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 780; + this.state = 793; this.match(QuixosCapabilityParser.WITH); - this.state = 781; + this.state = 794; this.match(QuixosCapabilityParser.LBRACE); - this.state = 785; + this.state = 798; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - while (_la === 39 || _la === 113) { + while (_la === 40 || _la === 114) { { { - this.state = 782; + this.state = 795; this.dependencyBinding(); } } - this.state = 787; + this.state = 800; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 788; + this.state = 801; this.match(QuixosCapabilityParser.RBRACE); } } @@ -3146,137 +3198,137 @@ export class QuixosCapabilityParser extends antlr.Parser { } public dependencyBinding(): DependencyBindingContext { let localContext = new DependencyBindingContext(this.context, this.state); - this.enterRule(localContext, 106, QuixosCapabilityParser.RULE_dependencyBinding); + this.enterRule(localContext, 108, QuixosCapabilityParser.RULE_dependencyBinding); let _la: number; try { - this.state = 843; + this.state = 856; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 70, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 71, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 790; + this.state = 803; this.identifier(); - this.state = 791; + this.state = 804; this.match(QuixosCapabilityParser.TO); - this.state = 792; + this.state = 805; this.match(QuixosCapabilityParser.STATE); - this.state = 793; + this.state = 806; this.identifier(); - this.state = 800; + this.state = 813; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if (_la === 32) { + if (_la === 33) { { - this.state = 794; + this.state = 807; this.match(QuixosCapabilityParser.VIA); - this.state = 795; + this.state = 808; this.match(QuixosCapabilityParser.EDGE); - this.state = 796; + this.state = 809; this.identifier(); - this.state = 797; + this.state = 810; this.match(QuixosCapabilityParser.DOT); - this.state = 798; + this.state = 811; this.identifier(); } } - this.state = 802; + this.state = 815; this.match(QuixosCapabilityParser.SEMI); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 804; + this.state = 817; this.identifier(); - this.state = 805; + this.state = 818; this.match(QuixosCapabilityParser.TO); - this.state = 806; + this.state = 819; this.match(QuixosCapabilityParser.EDGE); - this.state = 807; + this.state = 820; this.identifier(); - this.state = 808; + this.state = 821; this.match(QuixosCapabilityParser.DOT); - this.state = 809; + this.state = 822; this.identifier(); - this.state = 816; + this.state = 829; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if (_la === 32) { + if (_la === 33) { { - this.state = 810; + this.state = 823; this.match(QuixosCapabilityParser.VIA); - this.state = 811; + this.state = 824; this.match(QuixosCapabilityParser.EDGE); - this.state = 812; + this.state = 825; this.identifier(); - this.state = 813; + this.state = 826; this.match(QuixosCapabilityParser.DOT); - this.state = 814; + this.state = 827; this.identifier(); } } - this.state = 818; + this.state = 831; this.match(QuixosCapabilityParser.SEMI); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 820; + this.state = 833; this.identifier(); - this.state = 821; + this.state = 834; this.match(QuixosCapabilityParser.TO); - this.state = 822; + this.state = 835; this.match(QuixosCapabilityParser.INTERFACE); - this.state = 823; + this.state = 836; this.identifier(); - this.state = 825; + this.state = 838; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if (_la === 107) { + if (_la === 108) { { - this.state = 824; + this.state = 837; this.typeArguments(); } } - this.state = 833; + this.state = 846; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if (_la === 32) { + if (_la === 33) { { - this.state = 827; + this.state = 840; this.match(QuixosCapabilityParser.VIA); - this.state = 828; + this.state = 841; this.match(QuixosCapabilityParser.EDGE); - this.state = 829; + this.state = 842; this.identifier(); - this.state = 830; + this.state = 843; this.match(QuixosCapabilityParser.DOT); - this.state = 831; + this.state = 844; this.identifier(); } } - this.state = 835; + this.state = 848; this.match(QuixosCapabilityParser.SEMI); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 837; + this.state = 850; this.identifier(); - this.state = 838; + this.state = 851; this.match(QuixosCapabilityParser.TO); - this.state = 839; + this.state = 852; this.match(QuixosCapabilityParser.CONSTRUCTOR); - this.state = 840; + this.state = 853; this.identifier(); - this.state = 841; + this.state = 854; this.match(QuixosCapabilityParser.SEMI); } break; @@ -3297,34 +3349,34 @@ export class QuixosCapabilityParser extends antlr.Parser { } public constructorBindingDecl(): ConstructorBindingDeclContext { let localContext = new ConstructorBindingDeclContext(this.context, this.state); - this.enterRule(localContext, 108, QuixosCapabilityParser.RULE_constructorBindingDecl); + this.enterRule(localContext, 110, QuixosCapabilityParser.RULE_constructorBindingDecl); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 845; + this.state = 858; this.match(QuixosCapabilityParser.CONSTRUCTOR); - this.state = 846; + this.state = 859; this.identifier(); - this.state = 847; + this.state = 860; this.match(QuixosCapabilityParser.TO); - this.state = 848; + this.state = 861; this.identifier(); - this.state = 849; + this.state = 862; this.match(QuixosCapabilityParser.DOT); - this.state = 850; + this.state = 863; this.identifier(); - this.state = 852; + this.state = 865; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if (_la === 30) { + if (_la === 31) { { - this.state = 851; + this.state = 864; this.dependencyBindingBlock(); } } - this.state = 854; + this.state = 867; this.match(QuixosCapabilityParser.SEMI); } } @@ -3343,10 +3395,10 @@ export class QuixosCapabilityParser extends antlr.Parser { } public valueType(): ValueTypeContext { let localContext = new ValueTypeContext(this.context, this.state); - this.enterRule(localContext, 110, QuixosCapabilityParser.RULE_valueType); + this.enterRule(localContext, 112, QuixosCapabilityParser.RULE_valueType); let _la: number; try { - this.state = 902; + this.state = 915; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case QuixosCapabilityParser.BOOL: @@ -3359,74 +3411,38 @@ export class QuixosCapabilityParser extends antlr.Parser { case QuixosCapabilityParser.UINT64: this.enterOuterAlt(localContext, 1); { - this.state = 856; + this.state = 869; this.scalarType(); } break; case QuixosCapabilityParser.UNIT: this.enterOuterAlt(localContext, 2); { - this.state = 857; + this.state = 870; this.match(QuixosCapabilityParser.UNIT); } break; case QuixosCapabilityParser.WATCH_HANDLE: this.enterOuterAlt(localContext, 3); { - this.state = 858; + this.state = 871; this.match(QuixosCapabilityParser.WATCH_HANDLE); } break; case QuixosCapabilityParser.MESSAGE: this.enterOuterAlt(localContext, 4); { - this.state = 859; + this.state = 872; this.match(QuixosCapabilityParser.MESSAGE); - this.state = 860; + this.state = 873; this.stringLiteral(); } break; case QuixosCapabilityParser.ATOM_REF: this.enterOuterAlt(localContext, 5); { - this.state = 861; - this.match(QuixosCapabilityParser.ATOM_REF); - this.state = 862; - this.match(QuixosCapabilityParser.LT); - this.state = 863; - this.identifier(); - this.state = 864; - this.match(QuixosCapabilityParser.GT); - } - break; - case QuixosCapabilityParser.INTERFACE_REF: - this.enterOuterAlt(localContext, 6); - { - this.state = 866; - this.match(QuixosCapabilityParser.INTERFACE_REF); - this.state = 867; - this.match(QuixosCapabilityParser.LT); - this.state = 868; - this.identifier(); - this.state = 870; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 107) { - { - this.state = 869; - this.typeArguments(); - } - } - - this.state = 872; - this.match(QuixosCapabilityParser.GT); - } - break; - case QuixosCapabilityParser.REF: - this.enterOuterAlt(localContext, 7); - { this.state = 874; - this.match(QuixosCapabilityParser.REF); + this.match(QuixosCapabilityParser.ATOM_REF); this.state = 875; this.match(QuixosCapabilityParser.LT); this.state = 876; @@ -3435,54 +3451,90 @@ export class QuixosCapabilityParser extends antlr.Parser { this.match(QuixosCapabilityParser.GT); } break; - case QuixosCapabilityParser.OPTIONAL: - this.enterOuterAlt(localContext, 8); + case QuixosCapabilityParser.INTERFACE_REF: + this.enterOuterAlt(localContext, 6); { this.state = 879; - this.match(QuixosCapabilityParser.OPTIONAL); + this.match(QuixosCapabilityParser.INTERFACE_REF); this.state = 880; this.match(QuixosCapabilityParser.LT); this.state = 881; + this.identifier(); + this.state = 883; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 108) { + { + this.state = 882; + this.typeArguments(); + } + } + + this.state = 885; + this.match(QuixosCapabilityParser.GT); + } + break; + case QuixosCapabilityParser.REF: + this.enterOuterAlt(localContext, 7); + { + this.state = 887; + this.match(QuixosCapabilityParser.REF); + this.state = 888; + this.match(QuixosCapabilityParser.LT); + this.state = 889; + this.identifier(); + this.state = 890; + this.match(QuixosCapabilityParser.GT); + } + break; + case QuixosCapabilityParser.OPTIONAL: + this.enterOuterAlt(localContext, 8); + { + this.state = 892; + this.match(QuixosCapabilityParser.OPTIONAL); + this.state = 893; + this.match(QuixosCapabilityParser.LT); + this.state = 894; this.valueType(); - this.state = 882; + this.state = 895; this.match(QuixosCapabilityParser.GT); } break; case QuixosCapabilityParser.LIST: this.enterOuterAlt(localContext, 9); { - this.state = 884; + this.state = 897; this.match(QuixosCapabilityParser.LIST); - this.state = 885; + this.state = 898; this.match(QuixosCapabilityParser.LT); - this.state = 886; + this.state = 899; this.valueType(); - this.state = 887; + this.state = 900; this.match(QuixosCapabilityParser.GT); } break; case QuixosCapabilityParser.RECORD: this.enterOuterAlt(localContext, 10); { - this.state = 889; + this.state = 902; this.match(QuixosCapabilityParser.RECORD); - this.state = 890; + this.state = 903; this.match(QuixosCapabilityParser.LBRACE); - this.state = 894; + this.state = 907; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - while (_la === 39 || _la === 113) { + while (_la === 40 || _la === 114) { { { - this.state = 891; + this.state = 904; this.recordField(); } } - this.state = 896; + this.state = 909; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 897; + this.state = 910; this.match(QuixosCapabilityParser.RBRACE); } break; @@ -3490,14 +3542,14 @@ export class QuixosCapabilityParser extends antlr.Parser { case QuixosCapabilityParser.IDENTIFIER: this.enterOuterAlt(localContext, 11); { - this.state = 898; + this.state = 911; this.identifier(); - this.state = 900; + this.state = 913; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if (_la === 107) { + if (_la === 108) { { - this.state = 899; + this.state = 912; this.typeArguments(); } } @@ -3523,17 +3575,17 @@ export class QuixosCapabilityParser extends antlr.Parser { } public recordField(): RecordFieldContext { let localContext = new RecordFieldContext(this.context, this.state); - this.enterRule(localContext, 112, QuixosCapabilityParser.RULE_recordField); + this.enterRule(localContext, 114, QuixosCapabilityParser.RULE_recordField); try { this.enterOuterAlt(localContext, 1); { - this.state = 904; + this.state = 917; this.identifier(); - this.state = 905; + this.state = 918; this.match(QuixosCapabilityParser.COLON); - this.state = 906; + this.state = 919; this.valueType(); - this.state = 907; + this.state = 920; this.match(QuixosCapabilityParser.SEMI); } } @@ -3552,14 +3604,14 @@ export class QuixosCapabilityParser extends antlr.Parser { } public scalarType(): ScalarTypeContext { let localContext = new ScalarTypeContext(this.context, this.state); - this.enterRule(localContext, 114, QuixosCapabilityParser.RULE_scalarType); + this.enterRule(localContext, 116, QuixosCapabilityParser.RULE_scalarType); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 909; + this.state = 922; _la = this.tokenStream.LA(1); - if(!(((((_la - 85)) & ~0x1F) === 0 && ((1 << (_la - 85)) & 255) !== 0))) { + if(!(((((_la - 86)) & ~0x1F) === 0 && ((1 << (_la - 86)) & 255) !== 0))) { this.errorHandler.recoverInline(this); } else { @@ -3583,14 +3635,14 @@ export class QuixosCapabilityParser extends antlr.Parser { } public cardinality(): CardinalityContext { let localContext = new CardinalityContext(this.context, this.state); - this.enterRule(localContext, 116, QuixosCapabilityParser.RULE_cardinality); + this.enterRule(localContext, 118, QuixosCapabilityParser.RULE_cardinality); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 911; + this.state = 924; _la = this.tokenStream.LA(1); - if(!(((((_la - 72)) & ~0x1F) === 0 && ((1 << (_la - 72)) & 15) !== 0))) { + if(!(((((_la - 73)) & ~0x1F) === 0 && ((1 << (_la - 73)) & 15) !== 0))) { this.errorHandler.recoverInline(this); } else { @@ -3614,64 +3666,64 @@ export class QuixosCapabilityParser extends antlr.Parser { } public jsonLiteral(): JsonLiteralContext { let localContext = new JsonLiteralContext(this.context, this.state); - this.enterRule(localContext, 118, QuixosCapabilityParser.RULE_jsonLiteral); + this.enterRule(localContext, 120, QuixosCapabilityParser.RULE_jsonLiteral); try { - this.state = 921; + this.state = 934; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case QuixosCapabilityParser.STRING_LITERAL: this.enterOuterAlt(localContext, 1); { - this.state = 913; + this.state = 926; this.stringLiteral(); } break; case QuixosCapabilityParser.INTEGER: this.enterOuterAlt(localContext, 2); { - this.state = 914; + this.state = 927; this.match(QuixosCapabilityParser.INTEGER); } break; case QuixosCapabilityParser.JSON_NUMBER: this.enterOuterAlt(localContext, 3); { - this.state = 915; + this.state = 928; this.match(QuixosCapabilityParser.JSON_NUMBER); } break; case QuixosCapabilityParser.TRUE: this.enterOuterAlt(localContext, 4); { - this.state = 916; + this.state = 929; this.match(QuixosCapabilityParser.TRUE); } break; case QuixosCapabilityParser.FALSE: this.enterOuterAlt(localContext, 5); { - this.state = 917; + this.state = 930; this.match(QuixosCapabilityParser.FALSE); } break; case QuixosCapabilityParser.NULL: this.enterOuterAlt(localContext, 6); { - this.state = 918; + this.state = 931; this.match(QuixosCapabilityParser.NULL); } break; case QuixosCapabilityParser.LBRACE: this.enterOuterAlt(localContext, 7); { - this.state = 919; + this.state = 932; this.jsonObject(); } break; case QuixosCapabilityParser.LBRACK: this.enterOuterAlt(localContext, 8); { - this.state = 920; + this.state = 933; this.jsonArray(); } break; @@ -3694,40 +3746,40 @@ export class QuixosCapabilityParser extends antlr.Parser { } public jsonObject(): JsonObjectContext { let localContext = new JsonObjectContext(this.context, this.state); - this.enterRule(localContext, 120, QuixosCapabilityParser.RULE_jsonObject); + this.enterRule(localContext, 122, QuixosCapabilityParser.RULE_jsonObject); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 923; + this.state = 936; this.match(QuixosCapabilityParser.LBRACE); - this.state = 932; + this.state = 945; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if (_la === 114) { + if (_la === 115) { { - this.state = 924; + this.state = 937; this.jsonMember(); - this.state = 929; + this.state = 942; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - while (_la === 99) { + while (_la === 100) { { { - this.state = 925; + this.state = 938; this.match(QuixosCapabilityParser.COMMA); - this.state = 926; + this.state = 939; this.jsonMember(); } } - this.state = 931; + this.state = 944; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } } } - this.state = 934; + this.state = 947; this.match(QuixosCapabilityParser.RBRACE); } } @@ -3746,15 +3798,15 @@ export class QuixosCapabilityParser extends antlr.Parser { } public jsonMember(): JsonMemberContext { let localContext = new JsonMemberContext(this.context, this.state); - this.enterRule(localContext, 122, QuixosCapabilityParser.RULE_jsonMember); + this.enterRule(localContext, 124, QuixosCapabilityParser.RULE_jsonMember); try { this.enterOuterAlt(localContext, 1); { - this.state = 936; + this.state = 949; this.stringLiteral(); - this.state = 937; + this.state = 950; this.match(QuixosCapabilityParser.COLON); - this.state = 938; + this.state = 951; this.jsonLiteral(); } } @@ -3773,40 +3825,40 @@ export class QuixosCapabilityParser extends antlr.Parser { } public jsonArray(): JsonArrayContext { let localContext = new JsonArrayContext(this.context, this.state); - this.enterRule(localContext, 124, QuixosCapabilityParser.RULE_jsonArray); + this.enterRule(localContext, 126, QuixosCapabilityParser.RULE_jsonArray); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 940; + this.state = 953; this.match(QuixosCapabilityParser.LBRACK); - this.state = 949; + this.state = 962; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if (((((_la - 93)) & ~0x1F) === 0 && ((1 << (_la - 93)) & 2884871) !== 0)) { + if (((((_la - 94)) & ~0x1F) === 0 && ((1 << (_la - 94)) & 2884871) !== 0)) { { - this.state = 941; + this.state = 954; this.jsonLiteral(); - this.state = 946; + this.state = 959; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - while (_la === 99) { + while (_la === 100) { { { - this.state = 942; + this.state = 955; this.match(QuixosCapabilityParser.COMMA); - this.state = 943; + this.state = 956; this.jsonLiteral(); } } - this.state = 948; + this.state = 961; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } } } - this.state = 951; + this.state = 964; this.match(QuixosCapabilityParser.RBRACK); } } @@ -3825,14 +3877,14 @@ export class QuixosCapabilityParser extends antlr.Parser { } public identifier(): IdentifierContext { let localContext = new IdentifierContext(this.context, this.state); - this.enterRule(localContext, 126, QuixosCapabilityParser.RULE_identifier); + this.enterRule(localContext, 128, QuixosCapabilityParser.RULE_identifier); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 953; + this.state = 966; _la = this.tokenStream.LA(1); - if(!(_la === 39 || _la === 113)) { + if(!(_la === 40 || _la === 114)) { this.errorHandler.recoverInline(this); } else { @@ -3856,11 +3908,11 @@ export class QuixosCapabilityParser extends antlr.Parser { } public stringLiteral(): StringLiteralContext { let localContext = new StringLiteralContext(this.context, this.state); - this.enterRule(localContext, 128, QuixosCapabilityParser.RULE_stringLiteral); + this.enterRule(localContext, 130, QuixosCapabilityParser.RULE_stringLiteral); try { this.enterOuterAlt(localContext, 1); { - this.state = 955; + this.state = 968; this.match(QuixosCapabilityParser.STRING_LITERAL); } } @@ -3879,7 +3931,7 @@ export class QuixosCapabilityParser extends antlr.Parser { } public static readonly _serializedATN: number[] = [ - 4,1,117,958,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6, + 4,1,118,971,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6, 7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7, 13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2, 20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,7, @@ -3888,351 +3940,357 @@ export class QuixosCapabilityParser extends antlr.Parser { 39,2,40,7,40,2,41,7,41,2,42,7,42,2,43,7,43,2,44,7,44,2,45,7,45,2, 46,7,46,2,47,7,47,2,48,7,48,2,49,7,49,2,50,7,50,2,51,7,51,2,52,7, 52,2,53,7,53,2,54,7,54,2,55,7,55,2,56,7,56,2,57,7,57,2,58,7,58,2, - 59,7,59,2,60,7,60,2,61,7,61,2,62,7,62,2,63,7,63,2,64,7,64,1,0,1, - 0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,3,0,143,8,0,1,1,1,1,1, - 1,5,1,148,8,1,10,1,12,1,151,9,1,1,1,1,1,1,2,1,2,1,2,1,2,1,3,1,3, - 1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,5,3,169,8,3,10,3,12,3,172,9,3,1, - 3,1,3,1,4,1,4,1,4,1,4,1,4,1,4,1,4,3,4,183,8,4,1,5,1,5,1,5,1,5,1, - 5,1,5,1,5,1,5,1,5,1,5,3,5,195,8,5,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1, - 7,1,7,1,7,1,7,1,7,1,7,1,7,1,8,1,8,1,8,1,8,3,8,215,8,8,1,9,1,9,1, - 9,1,9,1,9,1,9,3,9,223,8,9,1,9,1,9,1,10,5,10,228,8,10,10,10,12,10, - 231,9,10,1,10,1,10,1,10,3,10,236,8,10,1,10,1,10,1,10,1,10,1,10,1, - 10,1,10,1,10,5,10,246,8,10,10,10,12,10,249,9,10,3,10,251,8,10,1, - 10,1,10,5,10,255,8,10,10,10,12,10,258,9,10,1,10,1,10,1,11,1,11,1, - 11,1,11,5,11,266,8,11,10,11,12,11,269,9,11,1,11,1,11,1,12,1,12,1, - 12,1,12,3,12,277,8,12,1,12,1,12,1,12,1,12,1,12,1,12,5,12,285,8,12, - 10,12,12,12,288,9,12,3,12,290,8,12,3,12,292,8,12,1,13,1,13,3,13, - 296,8,13,1,14,1,14,1,14,1,14,5,14,302,8,14,10,14,12,14,305,9,14, - 1,14,1,14,1,15,1,15,1,15,1,15,1,15,1,15,1,15,3,15,316,8,15,1,16, - 1,16,1,16,3,16,321,8,16,1,16,1,16,1,16,1,16,1,17,1,17,1,17,3,17, - 330,8,17,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18, - 1,18,1,18,1,18,1,18,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,5,19, - 355,8,19,10,19,12,19,358,9,19,1,19,1,19,1,20,1,20,1,20,1,20,1,20, - 1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20, - 1,20,3,20,381,8,20,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,3,21, - 391,8,21,1,21,1,21,5,21,395,8,21,10,21,12,21,398,9,21,1,21,1,21, - 1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22, - 1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,3,22,426, - 8,22,1,23,1,23,1,23,1,23,1,23,3,23,433,8,23,1,23,1,23,3,23,437,8, - 23,1,24,5,24,440,8,24,10,24,12,24,443,9,24,1,24,1,24,1,24,1,24,1, - 24,1,24,1,24,1,24,3,24,453,8,24,1,24,1,24,5,24,457,8,24,10,24,12, - 24,460,9,24,1,24,1,24,1,25,1,25,1,25,3,25,467,8,25,1,26,1,26,1,26, - 3,26,472,8,26,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,26,3,26, - 483,8,26,1,26,1,26,1,26,3,26,488,8,26,1,26,1,26,1,27,1,27,1,27,3, - 27,495,8,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,3,27,504,8,27,1,27, - 1,27,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,3,28,517,8,28, - 1,28,1,28,1,29,1,29,1,29,1,30,1,30,1,31,1,31,1,31,1,31,1,31,1,31, - 1,31,1,31,1,31,1,31,5,31,536,8,31,10,31,12,31,539,9,31,3,31,541, - 8,31,1,31,3,31,544,8,31,1,32,1,32,1,32,5,32,549,8,32,10,32,12,32, - 552,9,32,1,33,1,33,1,33,5,33,557,8,33,10,33,12,33,560,9,33,1,33, - 1,33,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34, - 1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34, - 1,34,3,34,590,8,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34, - 1,34,3,34,602,8,34,1,34,1,34,3,34,606,8,34,1,35,1,35,1,35,1,35,5, - 35,612,8,35,10,35,12,35,615,9,35,1,35,1,35,1,36,1,36,1,37,1,37,1, - 37,1,38,1,38,3,38,626,8,38,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1, - 39,1,39,1,39,1,39,1,39,3,39,640,8,39,1,39,1,39,1,40,1,40,1,40,1, - 40,1,40,1,40,3,40,650,8,40,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1, - 41,1,41,1,42,1,42,1,42,1,42,1,42,1,42,1,42,3,42,668,8,42,1,42,1, - 42,3,42,672,8,42,1,42,3,42,675,8,42,1,42,1,42,3,42,679,8,42,1,42, - 3,42,682,8,42,1,42,1,42,1,43,1,43,1,43,1,43,1,43,3,43,691,8,43,1, - 43,1,43,3,43,695,8,43,1,43,1,43,3,43,699,8,43,1,43,1,43,5,43,703, - 8,43,10,43,12,43,706,9,43,1,43,1,43,1,44,1,44,1,44,1,44,3,44,714, - 8,44,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45, - 1,45,1,45,1,46,1,46,1,46,1,46,1,46,1,46,1,47,1,47,1,47,1,47,1,48, - 1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,48,3,48,751,8,48, - 1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49, - 1,49,1,49,1,49,1,49,3,49,770,8,49,1,49,3,49,773,8,49,3,49,775,8, - 49,1,50,1,50,1,51,1,51,1,52,1,52,1,52,5,52,784,8,52,10,52,12,52, - 787,9,52,1,52,1,52,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53, - 1,53,3,53,801,8,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53, - 1,53,1,53,1,53,1,53,1,53,3,53,817,8,53,1,53,1,53,1,53,1,53,1,53, - 1,53,1,53,3,53,826,8,53,1,53,1,53,1,53,1,53,1,53,1,53,3,53,834,8, - 53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,3,53,844,8,53,1,54,1, - 54,1,54,1,54,1,54,1,54,1,54,3,54,853,8,54,1,54,1,54,1,55,1,55,1, - 55,1,55,1,55,1,55,1,55,1,55,1,55,1,55,1,55,1,55,1,55,1,55,3,55,871, - 8,55,1,55,1,55,1,55,1,55,1,55,1,55,1,55,1,55,1,55,1,55,1,55,1,55, - 1,55,1,55,1,55,1,55,1,55,1,55,1,55,1,55,5,55,893,8,55,10,55,12,55, - 896,9,55,1,55,1,55,1,55,3,55,901,8,55,3,55,903,8,55,1,56,1,56,1, - 56,1,56,1,56,1,57,1,57,1,58,1,58,1,59,1,59,1,59,1,59,1,59,1,59,1, - 59,1,59,3,59,922,8,59,1,60,1,60,1,60,1,60,5,60,928,8,60,10,60,12, - 60,931,9,60,3,60,933,8,60,1,60,1,60,1,61,1,61,1,61,1,61,1,62,1,62, - 1,62,1,62,5,62,945,8,62,10,62,12,62,948,9,62,3,62,950,8,62,1,62, - 1,62,1,63,1,63,1,64,1,64,1,64,0,0,65,0,2,4,6,8,10,12,14,16,18,20, + 59,7,59,2,60,7,60,2,61,7,61,2,62,7,62,2,63,7,63,2,64,7,64,2,65,7, + 65,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,3,0,145,8,0,1, + 1,1,1,1,1,5,1,150,8,1,10,1,12,1,153,9,1,1,1,1,1,1,2,1,2,1,2,1,2, + 1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,5,3,171,8,3,10,3,12,3,174, + 9,3,1,3,1,3,1,4,1,4,1,4,1,4,1,4,1,4,1,4,3,4,185,8,4,1,5,1,5,1,5, + 1,5,1,5,1,5,1,5,1,5,1,5,1,5,3,5,197,8,5,1,6,1,6,1,6,1,6,1,6,1,6, + 1,6,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,8,1,8,1,8,1,8,3,8,217,8,8,1,9, + 1,9,1,9,1,9,1,9,1,9,3,9,225,8,9,1,9,1,9,1,10,5,10,230,8,10,10,10, + 12,10,233,9,10,1,10,1,10,1,10,3,10,238,8,10,1,10,1,10,1,10,1,10, + 1,10,1,10,1,10,1,10,5,10,248,8,10,10,10,12,10,251,9,10,3,10,253, + 8,10,1,10,1,10,5,10,257,8,10,10,10,12,10,260,9,10,1,10,1,10,1,11, + 1,11,1,11,1,11,5,11,268,8,11,10,11,12,11,271,9,11,1,11,1,11,1,12, + 1,12,1,12,1,12,3,12,279,8,12,1,12,1,12,1,12,1,12,1,12,1,12,5,12, + 287,8,12,10,12,12,12,290,9,12,3,12,292,8,12,3,12,294,8,12,1,13,1, + 13,3,13,298,8,13,1,14,1,14,1,14,1,14,5,14,304,8,14,10,14,12,14,307, + 9,14,1,14,1,14,1,15,1,15,1,15,1,15,1,15,1,15,1,15,3,15,318,8,15, + 1,16,1,16,1,16,3,16,323,8,16,1,16,1,16,1,16,1,16,1,17,1,17,1,17, + 3,17,332,8,17,1,18,3,18,335,8,18,1,18,1,18,1,18,1,18,1,18,1,18,1, + 18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,19,1,19,1,19,1,19,1, + 19,1,19,1,19,1,19,5,19,360,8,19,10,19,12,19,363,9,19,1,19,1,19,1, + 20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1, + 20,1,20,1,20,1,20,1,20,1,20,3,20,386,8,20,1,21,1,21,1,21,1,21,1, + 21,1,21,1,21,1,21,3,21,396,8,21,1,21,1,21,5,21,400,8,21,10,21,12, + 21,403,9,21,1,21,1,21,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1, + 22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1, + 22,1,22,1,22,3,22,431,8,22,1,23,1,23,1,23,1,23,1,23,3,23,438,8,23, + 1,23,1,23,3,23,442,8,23,1,24,5,24,445,8,24,10,24,12,24,448,9,24, + 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,3,24,458,8,24,1,24,1,24, + 5,24,462,8,24,10,24,12,24,465,9,24,1,24,1,24,1,25,1,25,1,25,3,25, + 472,8,25,1,26,1,26,1,26,3,26,477,8,26,1,26,1,26,1,26,1,26,1,26,1, + 26,1,26,1,26,1,26,3,26,488,8,26,1,26,1,26,1,26,3,26,493,8,26,1,26, + 1,26,1,27,1,27,1,27,3,27,500,8,27,1,27,1,27,1,27,1,27,1,27,1,27, + 1,27,3,27,509,8,27,1,27,1,27,1,28,1,28,1,28,1,28,1,28,1,28,1,28, + 1,28,1,28,3,28,522,8,28,1,28,1,28,1,29,1,29,1,29,1,30,1,30,1,31, + 1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,5,31,541,8,31,10,31, + 12,31,544,9,31,3,31,546,8,31,1,31,3,31,549,8,31,1,32,1,32,1,32,5, + 32,554,8,32,10,32,12,32,557,9,32,1,33,1,33,1,33,5,33,562,8,33,10, + 33,12,33,565,9,33,1,33,1,33,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1, + 34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1, + 34,1,34,1,34,1,34,1,34,1,34,3,34,595,8,34,1,34,1,34,1,34,1,34,1, + 34,1,34,1,34,1,34,1,34,1,34,3,34,607,8,34,1,34,1,34,3,34,611,8,34, + 1,35,1,35,1,35,1,35,5,35,617,8,35,10,35,12,35,620,9,35,1,35,1,35, + 1,36,1,36,1,37,1,37,1,37,1,38,1,38,3,38,631,8,38,1,39,1,39,1,39, + 1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,3,39,645,8,39,1,39, + 1,39,1,40,1,40,1,40,1,40,1,40,1,40,3,40,655,8,40,1,41,1,41,1,41, + 1,41,1,41,1,41,1,41,1,41,1,41,1,42,1,42,1,42,1,42,1,42,1,42,1,42, + 3,42,673,8,42,1,42,1,42,3,42,677,8,42,1,42,3,42,680,8,42,1,42,1, + 42,3,42,684,8,42,1,42,3,42,687,8,42,1,42,1,42,1,43,1,43,1,43,1,43, + 1,43,3,43,696,8,43,1,43,1,43,3,43,700,8,43,1,43,1,43,3,43,704,8, + 43,1,43,1,43,5,43,708,8,43,10,43,12,43,711,9,43,1,43,1,43,1,44,1, + 44,1,44,1,44,1,44,3,44,720,8,44,1,45,1,45,1,45,1,45,1,45,1,45,1, + 45,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1, + 46,1,46,1,47,1,47,1,47,1,47,1,47,1,47,1,48,1,48,1,48,1,48,1,49,1, + 49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,3,49,764,8,49,1, + 50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1, + 50,1,50,1,50,1,50,3,50,783,8,50,1,50,3,50,786,8,50,3,50,788,8,50, + 1,51,1,51,1,52,1,52,1,53,1,53,1,53,5,53,797,8,53,10,53,12,53,800, + 9,53,1,53,1,53,1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,54, + 3,54,814,8,54,1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,54, + 1,54,1,54,1,54,1,54,3,54,830,8,54,1,54,1,54,1,54,1,54,1,54,1,54, + 1,54,3,54,839,8,54,1,54,1,54,1,54,1,54,1,54,1,54,3,54,847,8,54,1, + 54,1,54,1,54,1,54,1,54,1,54,1,54,1,54,3,54,857,8,54,1,55,1,55,1, + 55,1,55,1,55,1,55,1,55,3,55,866,8,55,1,55,1,55,1,56,1,56,1,56,1, + 56,1,56,1,56,1,56,1,56,1,56,1,56,1,56,1,56,1,56,1,56,3,56,884,8, + 56,1,56,1,56,1,56,1,56,1,56,1,56,1,56,1,56,1,56,1,56,1,56,1,56,1, + 56,1,56,1,56,1,56,1,56,1,56,1,56,1,56,5,56,906,8,56,10,56,12,56, + 909,9,56,1,56,1,56,1,56,3,56,914,8,56,3,56,916,8,56,1,57,1,57,1, + 57,1,57,1,57,1,58,1,58,1,59,1,59,1,60,1,60,1,60,1,60,1,60,1,60,1, + 60,1,60,3,60,935,8,60,1,61,1,61,1,61,1,61,5,61,941,8,61,10,61,12, + 61,944,9,61,3,61,946,8,61,1,61,1,61,1,62,1,62,1,62,1,62,1,63,1,63, + 1,63,1,63,5,63,958,8,63,10,63,12,63,961,9,63,3,63,963,8,63,1,63, + 1,63,1,64,1,64,1,65,1,65,1,65,0,0,66,0,2,4,6,8,10,12,14,16,18,20, 22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64, 66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106, - 108,110,112,114,116,118,120,122,124,126,128,0,7,1,0,65,69,2,0,60, - 64,66,67,2,0,60,61,66,67,2,0,62,64,66,67,1,0,85,92,1,0,72,75,2,0, - 39,39,113,113,1022,0,142,1,0,0,0,2,144,1,0,0,0,4,154,1,0,0,0,6,158, - 1,0,0,0,8,182,1,0,0,0,10,194,1,0,0,0,12,196,1,0,0,0,14,203,1,0,0, - 0,16,214,1,0,0,0,18,216,1,0,0,0,20,229,1,0,0,0,22,261,1,0,0,0,24, - 291,1,0,0,0,26,293,1,0,0,0,28,297,1,0,0,0,30,315,1,0,0,0,32,317, - 1,0,0,0,34,329,1,0,0,0,36,331,1,0,0,0,38,346,1,0,0,0,40,380,1,0, - 0,0,42,382,1,0,0,0,44,425,1,0,0,0,46,436,1,0,0,0,48,441,1,0,0,0, - 50,466,1,0,0,0,52,468,1,0,0,0,54,491,1,0,0,0,56,507,1,0,0,0,58,520, - 1,0,0,0,60,523,1,0,0,0,62,543,1,0,0,0,64,545,1,0,0,0,66,553,1,0, - 0,0,68,605,1,0,0,0,70,607,1,0,0,0,72,618,1,0,0,0,74,620,1,0,0,0, - 76,625,1,0,0,0,78,627,1,0,0,0,80,649,1,0,0,0,82,651,1,0,0,0,84,660, - 1,0,0,0,86,685,1,0,0,0,88,713,1,0,0,0,90,715,1,0,0,0,92,729,1,0, - 0,0,94,735,1,0,0,0,96,750,1,0,0,0,98,774,1,0,0,0,100,776,1,0,0,0, - 102,778,1,0,0,0,104,780,1,0,0,0,106,843,1,0,0,0,108,845,1,0,0,0, - 110,902,1,0,0,0,112,904,1,0,0,0,114,909,1,0,0,0,116,911,1,0,0,0, - 118,921,1,0,0,0,120,923,1,0,0,0,122,936,1,0,0,0,124,940,1,0,0,0, - 126,953,1,0,0,0,128,955,1,0,0,0,130,131,3,6,3,0,131,132,5,0,0,1, - 132,143,1,0,0,0,133,134,3,20,10,0,134,135,5,0,0,1,135,143,1,0,0, - 0,136,137,3,48,24,0,137,138,5,0,0,1,138,143,1,0,0,0,139,140,3,2, - 1,0,140,141,5,0,0,1,141,143,1,0,0,0,142,130,1,0,0,0,142,133,1,0, - 0,0,142,136,1,0,0,0,142,139,1,0,0,0,143,1,1,0,0,0,144,145,5,7,0, - 0,145,149,5,101,0,0,146,148,3,8,4,0,147,146,1,0,0,0,148,151,1,0, - 0,0,149,147,1,0,0,0,149,150,1,0,0,0,150,152,1,0,0,0,151,149,1,0, - 0,0,152,153,5,102,0,0,153,3,1,0,0,0,154,155,5,8,0,0,155,156,3,128, - 64,0,156,157,5,98,0,0,157,5,1,0,0,0,158,159,5,1,0,0,159,160,3,126, - 63,0,160,161,5,48,0,0,161,162,3,128,64,0,162,163,5,42,0,0,163,164, - 3,128,64,0,164,165,5,41,0,0,165,166,3,128,64,0,166,170,5,101,0,0, - 167,169,3,8,4,0,168,167,1,0,0,0,169,172,1,0,0,0,170,168,1,0,0,0, - 170,171,1,0,0,0,171,173,1,0,0,0,172,170,1,0,0,0,173,174,5,102,0, - 0,174,7,1,0,0,0,175,183,3,4,2,0,176,183,3,18,9,0,177,183,3,10,5, - 0,178,183,3,74,37,0,179,183,3,86,43,0,180,183,3,108,54,0,181,183, - 3,32,16,0,182,175,1,0,0,0,182,176,1,0,0,0,182,177,1,0,0,0,182,178, - 1,0,0,0,182,179,1,0,0,0,182,180,1,0,0,0,182,181,1,0,0,0,183,9,1, - 0,0,0,184,185,5,8,0,0,185,186,5,11,0,0,186,187,3,126,63,0,187,188, - 5,98,0,0,188,195,1,0,0,0,189,190,5,8,0,0,190,191,5,13,0,0,191,192, - 3,126,63,0,192,193,5,98,0,0,193,195,1,0,0,0,194,184,1,0,0,0,194, - 189,1,0,0,0,195,11,1,0,0,0,196,197,5,9,0,0,197,198,5,10,0,0,198, - 199,3,126,63,0,199,200,5,48,0,0,200,201,3,128,64,0,201,202,5,98, - 0,0,202,13,1,0,0,0,203,204,5,9,0,0,204,205,5,11,0,0,205,206,3,126, - 63,0,206,207,5,42,0,0,207,208,3,128,64,0,208,209,5,98,0,0,209,15, - 1,0,0,0,210,215,3,10,5,0,211,215,3,12,6,0,212,215,3,14,7,0,213,215, - 3,32,16,0,214,210,1,0,0,0,214,211,1,0,0,0,214,212,1,0,0,0,214,213, - 1,0,0,0,215,17,1,0,0,0,216,217,5,10,0,0,217,218,3,126,63,0,218,219, - 5,48,0,0,219,222,3,128,64,0,220,221,5,49,0,0,221,223,3,128,64,0, - 222,220,1,0,0,0,222,223,1,0,0,0,223,224,1,0,0,0,224,225,5,98,0,0, - 225,19,1,0,0,0,226,228,3,16,8,0,227,226,1,0,0,0,228,231,1,0,0,0, - 229,227,1,0,0,0,229,230,1,0,0,0,230,232,1,0,0,0,231,229,1,0,0,0, - 232,233,5,11,0,0,233,235,3,126,63,0,234,236,3,22,11,0,235,234,1, - 0,0,0,235,236,1,0,0,0,236,237,1,0,0,0,237,238,5,48,0,0,238,239,3, - 128,64,0,239,240,5,42,0,0,240,250,3,128,64,0,241,242,5,53,0,0,242, - 247,3,26,13,0,243,244,5,99,0,0,244,246,3,26,13,0,245,243,1,0,0,0, - 246,249,1,0,0,0,247,245,1,0,0,0,247,248,1,0,0,0,248,251,1,0,0,0, - 249,247,1,0,0,0,250,241,1,0,0,0,250,251,1,0,0,0,251,252,1,0,0,0, - 252,256,5,101,0,0,253,255,3,34,17,0,254,253,1,0,0,0,255,258,1,0, - 0,0,256,254,1,0,0,0,256,257,1,0,0,0,257,259,1,0,0,0,258,256,1,0, - 0,0,259,260,5,102,0,0,260,21,1,0,0,0,261,262,5,107,0,0,262,267,3, - 24,12,0,263,264,5,99,0,0,264,266,3,24,12,0,265,263,1,0,0,0,266,269, - 1,0,0,0,267,265,1,0,0,0,267,268,1,0,0,0,268,270,1,0,0,0,269,267, - 1,0,0,0,270,271,5,108,0,0,271,23,1,0,0,0,272,273,5,14,0,0,273,276, - 3,126,63,0,274,275,5,97,0,0,275,277,5,4,0,0,276,274,1,0,0,0,276, - 277,1,0,0,0,277,292,1,0,0,0,278,279,5,3,0,0,279,289,3,126,63,0,280, - 281,5,5,0,0,281,286,3,26,13,0,282,283,5,109,0,0,283,285,3,26,13, - 0,284,282,1,0,0,0,285,288,1,0,0,0,286,284,1,0,0,0,286,287,1,0,0, - 0,287,290,1,0,0,0,288,286,1,0,0,0,289,280,1,0,0,0,289,290,1,0,0, - 0,290,292,1,0,0,0,291,272,1,0,0,0,291,278,1,0,0,0,292,25,1,0,0,0, - 293,295,3,126,63,0,294,296,3,28,14,0,295,294,1,0,0,0,295,296,1,0, - 0,0,296,27,1,0,0,0,297,298,5,107,0,0,298,303,3,30,15,0,299,300,5, - 99,0,0,300,302,3,30,15,0,301,299,1,0,0,0,302,305,1,0,0,0,303,301, - 1,0,0,0,303,304,1,0,0,0,304,306,1,0,0,0,305,303,1,0,0,0,306,307, - 5,108,0,0,307,29,1,0,0,0,308,309,5,10,0,0,309,316,3,126,63,0,310, - 311,5,11,0,0,311,316,3,26,13,0,312,313,5,3,0,0,313,316,3,126,63, - 0,314,316,3,110,55,0,315,308,1,0,0,0,315,310,1,0,0,0,315,312,1,0, - 0,0,315,314,1,0,0,0,316,31,1,0,0,0,317,318,5,2,0,0,318,320,3,126, - 63,0,319,321,3,22,11,0,320,319,1,0,0,0,320,321,1,0,0,0,321,322,1, - 0,0,0,322,323,5,110,0,0,323,324,3,110,55,0,324,325,5,98,0,0,325, - 33,1,0,0,0,326,330,3,38,19,0,327,330,3,42,21,0,328,330,3,36,18,0, - 329,326,1,0,0,0,329,327,1,0,0,0,329,328,1,0,0,0,330,35,1,0,0,0,331, - 332,5,16,0,0,332,333,3,126,63,0,333,334,5,48,0,0,334,335,3,128,64, - 0,335,336,5,97,0,0,336,337,3,110,55,0,337,338,5,96,0,0,338,339,3, - 110,55,0,339,340,5,101,0,0,340,341,5,65,0,0,341,342,5,48,0,0,342, - 343,3,128,64,0,343,344,5,98,0,0,344,345,5,102,0,0,345,37,1,0,0,0, - 346,347,5,14,0,0,347,348,3,126,63,0,348,349,5,48,0,0,349,350,3,128, - 64,0,350,351,5,97,0,0,351,352,3,110,55,0,352,356,5,101,0,0,353,355, - 3,40,20,0,354,353,1,0,0,0,355,358,1,0,0,0,356,354,1,0,0,0,356,357, - 1,0,0,0,357,359,1,0,0,0,358,356,1,0,0,0,359,360,5,102,0,0,360,39, - 1,0,0,0,361,362,5,55,0,0,362,363,5,48,0,0,363,364,3,128,64,0,364, - 365,5,98,0,0,365,381,1,0,0,0,366,367,5,56,0,0,367,368,5,48,0,0,368, - 369,3,128,64,0,369,370,5,98,0,0,370,381,1,0,0,0,371,372,5,57,0,0, - 372,373,5,58,0,0,373,374,5,48,0,0,374,375,3,128,64,0,375,376,5,59, - 0,0,376,377,5,48,0,0,377,378,3,128,64,0,378,379,5,98,0,0,379,381, - 1,0,0,0,380,361,1,0,0,0,380,366,1,0,0,0,380,371,1,0,0,0,381,41,1, - 0,0,0,382,383,5,15,0,0,383,384,3,126,63,0,384,385,5,48,0,0,385,386, - 3,128,64,0,386,387,5,97,0,0,387,388,3,116,58,0,388,390,3,46,23,0, - 389,391,5,76,0,0,390,389,1,0,0,0,390,391,1,0,0,0,391,392,1,0,0,0, - 392,396,5,101,0,0,393,395,3,44,22,0,394,393,1,0,0,0,395,398,1,0, - 0,0,396,394,1,0,0,0,396,397,1,0,0,0,397,399,1,0,0,0,398,396,1,0, - 0,0,399,400,5,102,0,0,400,43,1,0,0,0,401,402,5,62,0,0,402,403,5, - 48,0,0,403,404,3,128,64,0,404,405,5,98,0,0,405,426,1,0,0,0,406,407, - 5,63,0,0,407,408,5,48,0,0,408,409,3,128,64,0,409,410,5,98,0,0,410, - 426,1,0,0,0,411,412,5,64,0,0,412,413,5,48,0,0,413,414,3,128,64,0, - 414,415,5,98,0,0,415,426,1,0,0,0,416,417,5,57,0,0,417,418,5,58,0, - 0,418,419,5,48,0,0,419,420,3,128,64,0,420,421,5,59,0,0,421,422,5, - 48,0,0,422,423,3,128,64,0,423,424,5,98,0,0,424,426,1,0,0,0,425,401, - 1,0,0,0,425,406,1,0,0,0,425,411,1,0,0,0,425,416,1,0,0,0,426,45,1, - 0,0,0,427,428,5,10,0,0,428,437,3,126,63,0,429,430,5,11,0,0,430,432, - 3,126,63,0,431,433,3,28,14,0,432,431,1,0,0,0,432,433,1,0,0,0,433, - 437,1,0,0,0,434,435,5,3,0,0,435,437,3,126,63,0,436,427,1,0,0,0,436, - 429,1,0,0,0,436,434,1,0,0,0,437,47,1,0,0,0,438,440,3,16,8,0,439, - 438,1,0,0,0,440,443,1,0,0,0,441,439,1,0,0,0,441,442,1,0,0,0,442, - 444,1,0,0,0,443,441,1,0,0,0,444,445,5,13,0,0,445,446,3,126,63,0, - 446,447,5,48,0,0,447,448,3,128,64,0,448,449,5,42,0,0,449,452,3,128, - 64,0,450,451,5,43,0,0,451,453,5,111,0,0,452,450,1,0,0,0,452,453, - 1,0,0,0,453,454,1,0,0,0,454,458,5,101,0,0,455,457,3,50,25,0,456, - 455,1,0,0,0,457,460,1,0,0,0,458,456,1,0,0,0,458,459,1,0,0,0,459, - 461,1,0,0,0,460,458,1,0,0,0,461,462,5,102,0,0,462,49,1,0,0,0,463, - 467,3,52,26,0,464,467,3,54,27,0,465,467,3,56,28,0,466,463,1,0,0, - 0,466,464,1,0,0,0,466,465,1,0,0,0,467,51,1,0,0,0,468,469,5,16,0, - 0,469,471,3,126,63,0,470,472,3,22,11,0,471,470,1,0,0,0,471,472,1, - 0,0,0,472,473,1,0,0,0,473,474,5,48,0,0,474,475,3,128,64,0,475,476, - 5,97,0,0,476,477,3,110,55,0,477,478,5,96,0,0,478,479,3,110,55,0, - 479,480,5,50,0,0,480,482,3,60,30,0,481,483,3,58,29,0,482,481,1,0, - 0,0,482,483,1,0,0,0,483,484,1,0,0,0,484,485,5,52,0,0,485,487,3,62, - 31,0,486,488,3,66,33,0,487,486,1,0,0,0,487,488,1,0,0,0,488,489,1, - 0,0,0,489,490,5,98,0,0,490,53,1,0,0,0,491,492,5,17,0,0,492,494,3, - 126,63,0,493,495,3,22,11,0,494,493,1,0,0,0,494,495,1,0,0,0,495,496, - 1,0,0,0,496,497,5,48,0,0,497,498,3,128,64,0,498,499,5,97,0,0,499, - 500,3,110,55,0,500,501,5,96,0,0,501,503,3,110,55,0,502,504,3,66, - 33,0,503,502,1,0,0,0,503,504,1,0,0,0,504,505,1,0,0,0,505,506,5,98, - 0,0,506,55,1,0,0,0,507,508,5,18,0,0,508,509,3,126,63,0,509,510,5, - 48,0,0,510,511,3,128,64,0,511,512,5,19,0,0,512,513,3,126,63,0,513, - 514,5,97,0,0,514,516,3,110,55,0,515,517,3,66,33,0,516,515,1,0,0, - 0,516,517,1,0,0,0,517,518,1,0,0,0,518,519,5,98,0,0,519,57,1,0,0, - 0,520,521,5,51,0,0,521,522,3,110,55,0,522,59,1,0,0,0,523,524,7,0, - 0,0,524,61,1,0,0,0,525,544,5,54,0,0,526,527,5,10,0,0,527,544,3,126, - 63,0,528,529,5,3,0,0,529,544,3,126,63,0,530,531,5,12,0,0,531,540, - 5,103,0,0,532,537,3,26,13,0,533,534,5,99,0,0,534,536,3,26,13,0,535, - 533,1,0,0,0,536,539,1,0,0,0,537,535,1,0,0,0,537,538,1,0,0,0,538, - 541,1,0,0,0,539,537,1,0,0,0,540,532,1,0,0,0,540,541,1,0,0,0,541, - 542,1,0,0,0,542,544,5,104,0,0,543,525,1,0,0,0,543,526,1,0,0,0,543, - 528,1,0,0,0,543,530,1,0,0,0,544,63,1,0,0,0,545,550,3,126,63,0,546, - 547,5,99,0,0,547,549,3,126,63,0,548,546,1,0,0,0,549,552,1,0,0,0, - 550,548,1,0,0,0,550,551,1,0,0,0,551,65,1,0,0,0,552,550,1,0,0,0,553, - 554,5,53,0,0,554,558,5,101,0,0,555,557,3,68,34,0,556,555,1,0,0,0, - 557,560,1,0,0,0,558,556,1,0,0,0,558,559,1,0,0,0,559,561,1,0,0,0, - 560,558,1,0,0,0,561,562,5,102,0,0,562,67,1,0,0,0,563,564,5,27,0, - 0,564,565,3,126,63,0,565,566,5,48,0,0,566,567,3,128,64,0,567,568, - 5,97,0,0,568,569,3,110,55,0,569,570,3,70,35,0,570,571,5,98,0,0,571, - 606,1,0,0,0,572,573,5,28,0,0,573,574,3,126,63,0,574,575,5,48,0,0, - 575,576,3,128,64,0,576,577,5,97,0,0,577,578,3,116,58,0,578,579,3, - 46,23,0,579,580,3,70,35,0,580,581,5,98,0,0,581,606,1,0,0,0,582,583, - 5,11,0,0,583,584,3,126,63,0,584,585,5,48,0,0,585,586,3,128,64,0, - 586,587,5,97,0,0,587,589,3,126,63,0,588,590,3,28,14,0,589,588,1, - 0,0,0,589,590,1,0,0,0,590,591,1,0,0,0,591,592,5,98,0,0,592,606,1, - 0,0,0,593,594,5,18,0,0,594,595,3,126,63,0,595,596,5,48,0,0,596,597, - 3,128,64,0,597,598,5,97,0,0,598,601,3,126,63,0,599,600,5,20,0,0, - 600,602,3,110,55,0,601,599,1,0,0,0,601,602,1,0,0,0,602,603,1,0,0, - 0,603,604,5,98,0,0,604,606,1,0,0,0,605,563,1,0,0,0,605,572,1,0,0, - 0,605,582,1,0,0,0,605,593,1,0,0,0,606,69,1,0,0,0,607,608,5,103,0, - 0,608,613,3,72,36,0,609,610,5,99,0,0,610,612,3,72,36,0,611,609,1, - 0,0,0,612,615,1,0,0,0,613,611,1,0,0,0,613,614,1,0,0,0,614,616,1, - 0,0,0,615,613,1,0,0,0,616,617,5,104,0,0,617,71,1,0,0,0,618,619,7, - 1,0,0,619,73,1,0,0,0,620,621,5,26,0,0,621,622,3,76,38,0,622,75,1, - 0,0,0,623,626,3,78,39,0,624,626,3,82,41,0,625,623,1,0,0,0,625,624, - 1,0,0,0,626,77,1,0,0,0,627,628,5,27,0,0,628,629,3,126,63,0,629,630, - 5,48,0,0,630,631,3,128,64,0,631,632,5,36,0,0,632,633,3,126,63,0, - 633,634,5,97,0,0,634,635,3,110,55,0,635,636,5,37,0,0,636,639,3,80, - 40,0,637,638,5,38,0,0,638,640,3,118,59,0,639,637,1,0,0,0,639,640, - 1,0,0,0,640,641,1,0,0,0,641,642,5,98,0,0,642,79,1,0,0,0,643,650, - 5,70,0,0,644,645,5,71,0,0,645,646,5,105,0,0,646,647,3,110,55,0,647, - 648,5,106,0,0,648,650,1,0,0,0,649,643,1,0,0,0,649,644,1,0,0,0,650, - 81,1,0,0,0,651,652,5,28,0,0,652,653,3,126,63,0,653,654,5,48,0,0, - 654,655,3,128,64,0,655,656,5,101,0,0,656,657,3,84,42,0,657,658,3, - 84,42,0,658,659,5,102,0,0,659,83,1,0,0,0,660,661,3,46,23,0,661,662, - 5,29,0,0,662,663,3,126,63,0,663,664,5,48,0,0,664,665,3,128,64,0, - 665,667,3,116,58,0,666,668,5,76,0,0,667,666,1,0,0,0,667,668,1,0, - 0,0,668,671,1,0,0,0,669,670,5,44,0,0,670,672,3,128,64,0,671,669, - 1,0,0,0,671,672,1,0,0,0,672,674,1,0,0,0,673,675,5,45,0,0,674,673, - 1,0,0,0,674,675,1,0,0,0,675,678,1,0,0,0,676,677,5,46,0,0,677,679, - 3,128,64,0,678,676,1,0,0,0,678,679,1,0,0,0,679,681,1,0,0,0,680,682, - 5,47,0,0,681,680,1,0,0,0,681,682,1,0,0,0,682,683,1,0,0,0,683,684, - 5,98,0,0,684,85,1,0,0,0,685,686,5,21,0,0,686,687,3,126,63,0,687, - 688,5,22,0,0,688,690,3,126,63,0,689,691,3,28,14,0,690,689,1,0,0, - 0,690,691,1,0,0,0,691,694,1,0,0,0,692,693,5,48,0,0,693,695,3,128, - 64,0,694,692,1,0,0,0,694,695,1,0,0,0,695,698,1,0,0,0,696,697,5,43, - 0,0,697,699,5,111,0,0,698,696,1,0,0,0,698,699,1,0,0,0,699,700,1, - 0,0,0,700,704,5,101,0,0,701,703,3,88,44,0,702,701,1,0,0,0,703,706, - 1,0,0,0,704,702,1,0,0,0,704,705,1,0,0,0,705,707,1,0,0,0,706,704, - 1,0,0,0,707,708,5,102,0,0,708,87,1,0,0,0,709,710,5,25,0,0,710,714, - 3,76,38,0,711,714,3,92,46,0,712,714,3,90,45,0,713,709,1,0,0,0,713, - 711,1,0,0,0,713,712,1,0,0,0,714,89,1,0,0,0,715,716,5,33,0,0,716, - 717,3,126,63,0,717,718,5,34,0,0,718,719,5,35,0,0,719,720,5,31,0, - 0,720,721,5,18,0,0,721,722,3,126,63,0,722,723,5,32,0,0,723,724,5, - 28,0,0,724,725,3,126,63,0,725,726,5,100,0,0,726,727,3,126,63,0,727, - 728,5,98,0,0,728,91,1,0,0,0,729,730,5,23,0,0,730,731,3,94,47,0,731, - 732,5,24,0,0,732,733,3,98,49,0,733,734,5,98,0,0,734,93,1,0,0,0,735, - 736,3,126,63,0,736,737,5,100,0,0,737,738,3,96,48,0,738,95,1,0,0, - 0,739,751,3,126,63,0,740,751,5,65,0,0,741,751,5,55,0,0,742,751,5, - 56,0,0,743,751,5,62,0,0,744,751,5,63,0,0,745,751,5,64,0,0,746,751, - 5,66,0,0,747,751,5,67,0,0,748,751,5,68,0,0,749,751,5,69,0,0,750, - 739,1,0,0,0,750,740,1,0,0,0,750,741,1,0,0,0,750,742,1,0,0,0,750, - 743,1,0,0,0,750,744,1,0,0,0,750,745,1,0,0,0,750,746,1,0,0,0,750, - 747,1,0,0,0,750,748,1,0,0,0,750,749,1,0,0,0,751,97,1,0,0,0,752,753, - 5,27,0,0,753,754,3,126,63,0,754,755,5,100,0,0,755,756,3,100,50,0, - 756,775,1,0,0,0,757,758,5,28,0,0,758,759,3,126,63,0,759,760,5,100, - 0,0,760,761,3,126,63,0,761,762,5,100,0,0,762,763,3,102,51,0,763, - 775,1,0,0,0,764,765,5,13,0,0,765,766,3,126,63,0,766,767,5,100,0, - 0,767,769,3,126,63,0,768,770,3,28,14,0,769,768,1,0,0,0,769,770,1, - 0,0,0,770,772,1,0,0,0,771,773,3,104,52,0,772,771,1,0,0,0,772,773, - 1,0,0,0,773,775,1,0,0,0,774,752,1,0,0,0,774,757,1,0,0,0,774,764, - 1,0,0,0,775,99,1,0,0,0,776,777,7,2,0,0,777,101,1,0,0,0,778,779,7, - 3,0,0,779,103,1,0,0,0,780,781,5,30,0,0,781,785,5,101,0,0,782,784, - 3,106,53,0,783,782,1,0,0,0,784,787,1,0,0,0,785,783,1,0,0,0,785,786, - 1,0,0,0,786,788,1,0,0,0,787,785,1,0,0,0,788,789,5,102,0,0,789,105, - 1,0,0,0,790,791,3,126,63,0,791,792,5,24,0,0,792,793,5,27,0,0,793, - 800,3,126,63,0,794,795,5,32,0,0,795,796,5,28,0,0,796,797,3,126,63, - 0,797,798,5,100,0,0,798,799,3,126,63,0,799,801,1,0,0,0,800,794,1, - 0,0,0,800,801,1,0,0,0,801,802,1,0,0,0,802,803,5,98,0,0,803,844,1, - 0,0,0,804,805,3,126,63,0,805,806,5,24,0,0,806,807,5,28,0,0,807,808, - 3,126,63,0,808,809,5,100,0,0,809,816,3,126,63,0,810,811,5,32,0,0, - 811,812,5,28,0,0,812,813,3,126,63,0,813,814,5,100,0,0,814,815,3, - 126,63,0,815,817,1,0,0,0,816,810,1,0,0,0,816,817,1,0,0,0,817,818, - 1,0,0,0,818,819,5,98,0,0,819,844,1,0,0,0,820,821,3,126,63,0,821, - 822,5,24,0,0,822,823,5,11,0,0,823,825,3,126,63,0,824,826,3,28,14, - 0,825,824,1,0,0,0,825,826,1,0,0,0,826,833,1,0,0,0,827,828,5,32,0, - 0,828,829,5,28,0,0,829,830,3,126,63,0,830,831,5,100,0,0,831,832, - 3,126,63,0,832,834,1,0,0,0,833,827,1,0,0,0,833,834,1,0,0,0,834,835, - 1,0,0,0,835,836,5,98,0,0,836,844,1,0,0,0,837,838,3,126,63,0,838, - 839,5,24,0,0,839,840,5,18,0,0,840,841,3,126,63,0,841,842,5,98,0, - 0,842,844,1,0,0,0,843,790,1,0,0,0,843,804,1,0,0,0,843,820,1,0,0, - 0,843,837,1,0,0,0,844,107,1,0,0,0,845,846,5,18,0,0,846,847,3,126, - 63,0,847,848,5,24,0,0,848,849,3,126,63,0,849,850,5,100,0,0,850,852, - 3,126,63,0,851,853,3,104,52,0,852,851,1,0,0,0,852,853,1,0,0,0,853, - 854,1,0,0,0,854,855,5,98,0,0,855,109,1,0,0,0,856,903,3,114,57,0, - 857,903,5,77,0,0,858,903,5,78,0,0,859,860,5,79,0,0,860,903,3,128, - 64,0,861,862,5,80,0,0,862,863,5,107,0,0,863,864,3,126,63,0,864,865, - 5,108,0,0,865,903,1,0,0,0,866,867,5,81,0,0,867,868,5,107,0,0,868, - 870,3,126,63,0,869,871,3,28,14,0,870,869,1,0,0,0,870,871,1,0,0,0, - 871,872,1,0,0,0,872,873,5,108,0,0,873,903,1,0,0,0,874,875,5,6,0, - 0,875,876,5,107,0,0,876,877,3,126,63,0,877,878,5,108,0,0,878,903, - 1,0,0,0,879,880,5,82,0,0,880,881,5,107,0,0,881,882,3,110,55,0,882, - 883,5,108,0,0,883,903,1,0,0,0,884,885,5,83,0,0,885,886,5,107,0,0, - 886,887,3,110,55,0,887,888,5,108,0,0,888,903,1,0,0,0,889,890,5,84, - 0,0,890,894,5,101,0,0,891,893,3,112,56,0,892,891,1,0,0,0,893,896, - 1,0,0,0,894,892,1,0,0,0,894,895,1,0,0,0,895,897,1,0,0,0,896,894, - 1,0,0,0,897,903,5,102,0,0,898,900,3,126,63,0,899,901,3,28,14,0,900, - 899,1,0,0,0,900,901,1,0,0,0,901,903,1,0,0,0,902,856,1,0,0,0,902, - 857,1,0,0,0,902,858,1,0,0,0,902,859,1,0,0,0,902,861,1,0,0,0,902, - 866,1,0,0,0,902,874,1,0,0,0,902,879,1,0,0,0,902,884,1,0,0,0,902, - 889,1,0,0,0,902,898,1,0,0,0,903,111,1,0,0,0,904,905,3,126,63,0,905, - 906,5,97,0,0,906,907,3,110,55,0,907,908,5,98,0,0,908,113,1,0,0,0, - 909,910,7,4,0,0,910,115,1,0,0,0,911,912,7,5,0,0,912,117,1,0,0,0, - 913,922,3,128,64,0,914,922,5,111,0,0,915,922,5,112,0,0,916,922,5, - 93,0,0,917,922,5,94,0,0,918,922,5,95,0,0,919,922,3,120,60,0,920, - 922,3,124,62,0,921,913,1,0,0,0,921,914,1,0,0,0,921,915,1,0,0,0,921, - 916,1,0,0,0,921,917,1,0,0,0,921,918,1,0,0,0,921,919,1,0,0,0,921, - 920,1,0,0,0,922,119,1,0,0,0,923,932,5,101,0,0,924,929,3,122,61,0, - 925,926,5,99,0,0,926,928,3,122,61,0,927,925,1,0,0,0,928,931,1,0, - 0,0,929,927,1,0,0,0,929,930,1,0,0,0,930,933,1,0,0,0,931,929,1,0, - 0,0,932,924,1,0,0,0,932,933,1,0,0,0,933,934,1,0,0,0,934,935,5,102, - 0,0,935,121,1,0,0,0,936,937,3,128,64,0,937,938,5,97,0,0,938,939, - 3,118,59,0,939,123,1,0,0,0,940,949,5,103,0,0,941,946,3,118,59,0, - 942,943,5,99,0,0,943,945,3,118,59,0,944,942,1,0,0,0,945,948,1,0, - 0,0,946,944,1,0,0,0,946,947,1,0,0,0,947,950,1,0,0,0,948,946,1,0, - 0,0,949,941,1,0,0,0,949,950,1,0,0,0,950,951,1,0,0,0,951,952,5,104, - 0,0,952,125,1,0,0,0,953,954,7,6,0,0,954,127,1,0,0,0,955,956,5,114, - 0,0,956,129,1,0,0,0,81,142,149,170,182,194,214,222,229,235,247,250, - 256,267,276,286,289,291,295,303,315,320,329,356,380,390,396,425, - 432,436,441,452,458,466,471,482,487,494,503,516,537,540,543,550, - 558,589,601,605,613,625,639,649,667,671,674,678,681,690,694,698, - 704,713,750,769,772,774,785,800,816,825,833,843,852,870,894,900, - 902,921,929,932,946,949 + 108,110,112,114,116,118,120,122,124,126,128,130,0,7,1,0,66,70,2, + 0,61,65,67,68,2,0,61,62,67,68,2,0,63,65,67,68,1,0,86,93,1,0,73,76, + 2,0,40,40,114,114,1036,0,144,1,0,0,0,2,146,1,0,0,0,4,156,1,0,0,0, + 6,160,1,0,0,0,8,184,1,0,0,0,10,196,1,0,0,0,12,198,1,0,0,0,14,205, + 1,0,0,0,16,216,1,0,0,0,18,218,1,0,0,0,20,231,1,0,0,0,22,263,1,0, + 0,0,24,293,1,0,0,0,26,295,1,0,0,0,28,299,1,0,0,0,30,317,1,0,0,0, + 32,319,1,0,0,0,34,331,1,0,0,0,36,334,1,0,0,0,38,351,1,0,0,0,40,385, + 1,0,0,0,42,387,1,0,0,0,44,430,1,0,0,0,46,441,1,0,0,0,48,446,1,0, + 0,0,50,471,1,0,0,0,52,473,1,0,0,0,54,496,1,0,0,0,56,512,1,0,0,0, + 58,525,1,0,0,0,60,528,1,0,0,0,62,548,1,0,0,0,64,550,1,0,0,0,66,558, + 1,0,0,0,68,610,1,0,0,0,70,612,1,0,0,0,72,623,1,0,0,0,74,625,1,0, + 0,0,76,630,1,0,0,0,78,632,1,0,0,0,80,654,1,0,0,0,82,656,1,0,0,0, + 84,665,1,0,0,0,86,690,1,0,0,0,88,719,1,0,0,0,90,721,1,0,0,0,92,728, + 1,0,0,0,94,742,1,0,0,0,96,748,1,0,0,0,98,763,1,0,0,0,100,787,1,0, + 0,0,102,789,1,0,0,0,104,791,1,0,0,0,106,793,1,0,0,0,108,856,1,0, + 0,0,110,858,1,0,0,0,112,915,1,0,0,0,114,917,1,0,0,0,116,922,1,0, + 0,0,118,924,1,0,0,0,120,934,1,0,0,0,122,936,1,0,0,0,124,949,1,0, + 0,0,126,953,1,0,0,0,128,966,1,0,0,0,130,968,1,0,0,0,132,133,3,6, + 3,0,133,134,5,0,0,1,134,145,1,0,0,0,135,136,3,20,10,0,136,137,5, + 0,0,1,137,145,1,0,0,0,138,139,3,48,24,0,139,140,5,0,0,1,140,145, + 1,0,0,0,141,142,3,2,1,0,142,143,5,0,0,1,143,145,1,0,0,0,144,132, + 1,0,0,0,144,135,1,0,0,0,144,138,1,0,0,0,144,141,1,0,0,0,145,1,1, + 0,0,0,146,147,5,7,0,0,147,151,5,102,0,0,148,150,3,8,4,0,149,148, + 1,0,0,0,150,153,1,0,0,0,151,149,1,0,0,0,151,152,1,0,0,0,152,154, + 1,0,0,0,153,151,1,0,0,0,154,155,5,103,0,0,155,3,1,0,0,0,156,157, + 5,8,0,0,157,158,3,130,65,0,158,159,5,99,0,0,159,5,1,0,0,0,160,161, + 5,1,0,0,161,162,3,128,64,0,162,163,5,49,0,0,163,164,3,130,65,0,164, + 165,5,43,0,0,165,166,3,130,65,0,166,167,5,42,0,0,167,168,3,130,65, + 0,168,172,5,102,0,0,169,171,3,8,4,0,170,169,1,0,0,0,171,174,1,0, + 0,0,172,170,1,0,0,0,172,173,1,0,0,0,173,175,1,0,0,0,174,172,1,0, + 0,0,175,176,5,103,0,0,176,7,1,0,0,0,177,185,3,4,2,0,178,185,3,18, + 9,0,179,185,3,10,5,0,180,185,3,74,37,0,181,185,3,86,43,0,182,185, + 3,110,55,0,183,185,3,32,16,0,184,177,1,0,0,0,184,178,1,0,0,0,184, + 179,1,0,0,0,184,180,1,0,0,0,184,181,1,0,0,0,184,182,1,0,0,0,184, + 183,1,0,0,0,185,9,1,0,0,0,186,187,5,8,0,0,187,188,5,11,0,0,188,189, + 3,128,64,0,189,190,5,99,0,0,190,197,1,0,0,0,191,192,5,8,0,0,192, + 193,5,13,0,0,193,194,3,128,64,0,194,195,5,99,0,0,195,197,1,0,0,0, + 196,186,1,0,0,0,196,191,1,0,0,0,197,11,1,0,0,0,198,199,5,9,0,0,199, + 200,5,10,0,0,200,201,3,128,64,0,201,202,5,49,0,0,202,203,3,130,65, + 0,203,204,5,99,0,0,204,13,1,0,0,0,205,206,5,9,0,0,206,207,5,11,0, + 0,207,208,3,128,64,0,208,209,5,43,0,0,209,210,3,130,65,0,210,211, + 5,99,0,0,211,15,1,0,0,0,212,217,3,10,5,0,213,217,3,12,6,0,214,217, + 3,14,7,0,215,217,3,32,16,0,216,212,1,0,0,0,216,213,1,0,0,0,216,214, + 1,0,0,0,216,215,1,0,0,0,217,17,1,0,0,0,218,219,5,10,0,0,219,220, + 3,128,64,0,220,221,5,49,0,0,221,224,3,130,65,0,222,223,5,50,0,0, + 223,225,3,130,65,0,224,222,1,0,0,0,224,225,1,0,0,0,225,226,1,0,0, + 0,226,227,5,99,0,0,227,19,1,0,0,0,228,230,3,16,8,0,229,228,1,0,0, + 0,230,233,1,0,0,0,231,229,1,0,0,0,231,232,1,0,0,0,232,234,1,0,0, + 0,233,231,1,0,0,0,234,235,5,11,0,0,235,237,3,128,64,0,236,238,3, + 22,11,0,237,236,1,0,0,0,237,238,1,0,0,0,238,239,1,0,0,0,239,240, + 5,49,0,0,240,241,3,130,65,0,241,242,5,43,0,0,242,252,3,130,65,0, + 243,244,5,54,0,0,244,249,3,26,13,0,245,246,5,100,0,0,246,248,3,26, + 13,0,247,245,1,0,0,0,248,251,1,0,0,0,249,247,1,0,0,0,249,250,1,0, + 0,0,250,253,1,0,0,0,251,249,1,0,0,0,252,243,1,0,0,0,252,253,1,0, + 0,0,253,254,1,0,0,0,254,258,5,102,0,0,255,257,3,34,17,0,256,255, + 1,0,0,0,257,260,1,0,0,0,258,256,1,0,0,0,258,259,1,0,0,0,259,261, + 1,0,0,0,260,258,1,0,0,0,261,262,5,103,0,0,262,21,1,0,0,0,263,264, + 5,108,0,0,264,269,3,24,12,0,265,266,5,100,0,0,266,268,3,24,12,0, + 267,265,1,0,0,0,268,271,1,0,0,0,269,267,1,0,0,0,269,270,1,0,0,0, + 270,272,1,0,0,0,271,269,1,0,0,0,272,273,5,109,0,0,273,23,1,0,0,0, + 274,275,5,14,0,0,275,278,3,128,64,0,276,277,5,98,0,0,277,279,5,4, + 0,0,278,276,1,0,0,0,278,279,1,0,0,0,279,294,1,0,0,0,280,281,5,3, + 0,0,281,291,3,128,64,0,282,283,5,5,0,0,283,288,3,26,13,0,284,285, + 5,110,0,0,285,287,3,26,13,0,286,284,1,0,0,0,287,290,1,0,0,0,288, + 286,1,0,0,0,288,289,1,0,0,0,289,292,1,0,0,0,290,288,1,0,0,0,291, + 282,1,0,0,0,291,292,1,0,0,0,292,294,1,0,0,0,293,274,1,0,0,0,293, + 280,1,0,0,0,294,25,1,0,0,0,295,297,3,128,64,0,296,298,3,28,14,0, + 297,296,1,0,0,0,297,298,1,0,0,0,298,27,1,0,0,0,299,300,5,108,0,0, + 300,305,3,30,15,0,301,302,5,100,0,0,302,304,3,30,15,0,303,301,1, + 0,0,0,304,307,1,0,0,0,305,303,1,0,0,0,305,306,1,0,0,0,306,308,1, + 0,0,0,307,305,1,0,0,0,308,309,5,109,0,0,309,29,1,0,0,0,310,311,5, + 10,0,0,311,318,3,128,64,0,312,313,5,11,0,0,313,318,3,26,13,0,314, + 315,5,3,0,0,315,318,3,128,64,0,316,318,3,112,56,0,317,310,1,0,0, + 0,317,312,1,0,0,0,317,314,1,0,0,0,317,316,1,0,0,0,318,31,1,0,0,0, + 319,320,5,2,0,0,320,322,3,128,64,0,321,323,3,22,11,0,322,321,1,0, + 0,0,322,323,1,0,0,0,323,324,1,0,0,0,324,325,5,111,0,0,325,326,3, + 112,56,0,326,327,5,99,0,0,327,33,1,0,0,0,328,332,3,38,19,0,329,332, + 3,42,21,0,330,332,3,36,18,0,331,328,1,0,0,0,331,329,1,0,0,0,331, + 330,1,0,0,0,332,35,1,0,0,0,333,335,5,24,0,0,334,333,1,0,0,0,334, + 335,1,0,0,0,335,336,1,0,0,0,336,337,5,16,0,0,337,338,3,128,64,0, + 338,339,5,49,0,0,339,340,3,130,65,0,340,341,5,98,0,0,341,342,3,112, + 56,0,342,343,5,97,0,0,343,344,3,112,56,0,344,345,5,102,0,0,345,346, + 5,66,0,0,346,347,5,49,0,0,347,348,3,130,65,0,348,349,5,99,0,0,349, + 350,5,103,0,0,350,37,1,0,0,0,351,352,5,14,0,0,352,353,3,128,64,0, + 353,354,5,49,0,0,354,355,3,130,65,0,355,356,5,98,0,0,356,357,3,112, + 56,0,357,361,5,102,0,0,358,360,3,40,20,0,359,358,1,0,0,0,360,363, + 1,0,0,0,361,359,1,0,0,0,361,362,1,0,0,0,362,364,1,0,0,0,363,361, + 1,0,0,0,364,365,5,103,0,0,365,39,1,0,0,0,366,367,5,56,0,0,367,368, + 5,49,0,0,368,369,3,130,65,0,369,370,5,99,0,0,370,386,1,0,0,0,371, + 372,5,57,0,0,372,373,5,49,0,0,373,374,3,130,65,0,374,375,5,99,0, + 0,375,386,1,0,0,0,376,377,5,58,0,0,377,378,5,59,0,0,378,379,5,49, + 0,0,379,380,3,130,65,0,380,381,5,60,0,0,381,382,5,49,0,0,382,383, + 3,130,65,0,383,384,5,99,0,0,384,386,1,0,0,0,385,366,1,0,0,0,385, + 371,1,0,0,0,385,376,1,0,0,0,386,41,1,0,0,0,387,388,5,15,0,0,388, + 389,3,128,64,0,389,390,5,49,0,0,390,391,3,130,65,0,391,392,5,98, + 0,0,392,393,3,118,59,0,393,395,3,46,23,0,394,396,5,77,0,0,395,394, + 1,0,0,0,395,396,1,0,0,0,396,397,1,0,0,0,397,401,5,102,0,0,398,400, + 3,44,22,0,399,398,1,0,0,0,400,403,1,0,0,0,401,399,1,0,0,0,401,402, + 1,0,0,0,402,404,1,0,0,0,403,401,1,0,0,0,404,405,5,103,0,0,405,43, + 1,0,0,0,406,407,5,63,0,0,407,408,5,49,0,0,408,409,3,130,65,0,409, + 410,5,99,0,0,410,431,1,0,0,0,411,412,5,64,0,0,412,413,5,49,0,0,413, + 414,3,130,65,0,414,415,5,99,0,0,415,431,1,0,0,0,416,417,5,65,0,0, + 417,418,5,49,0,0,418,419,3,130,65,0,419,420,5,99,0,0,420,431,1,0, + 0,0,421,422,5,58,0,0,422,423,5,59,0,0,423,424,5,49,0,0,424,425,3, + 130,65,0,425,426,5,60,0,0,426,427,5,49,0,0,427,428,3,130,65,0,428, + 429,5,99,0,0,429,431,1,0,0,0,430,406,1,0,0,0,430,411,1,0,0,0,430, + 416,1,0,0,0,430,421,1,0,0,0,431,45,1,0,0,0,432,433,5,10,0,0,433, + 442,3,128,64,0,434,435,5,11,0,0,435,437,3,128,64,0,436,438,3,28, + 14,0,437,436,1,0,0,0,437,438,1,0,0,0,438,442,1,0,0,0,439,440,5,3, + 0,0,440,442,3,128,64,0,441,432,1,0,0,0,441,434,1,0,0,0,441,439,1, + 0,0,0,442,47,1,0,0,0,443,445,3,16,8,0,444,443,1,0,0,0,445,448,1, + 0,0,0,446,444,1,0,0,0,446,447,1,0,0,0,447,449,1,0,0,0,448,446,1, + 0,0,0,449,450,5,13,0,0,450,451,3,128,64,0,451,452,5,49,0,0,452,453, + 3,130,65,0,453,454,5,43,0,0,454,457,3,130,65,0,455,456,5,44,0,0, + 456,458,5,112,0,0,457,455,1,0,0,0,457,458,1,0,0,0,458,459,1,0,0, + 0,459,463,5,102,0,0,460,462,3,50,25,0,461,460,1,0,0,0,462,465,1, + 0,0,0,463,461,1,0,0,0,463,464,1,0,0,0,464,466,1,0,0,0,465,463,1, + 0,0,0,466,467,5,103,0,0,467,49,1,0,0,0,468,472,3,52,26,0,469,472, + 3,54,27,0,470,472,3,56,28,0,471,468,1,0,0,0,471,469,1,0,0,0,471, + 470,1,0,0,0,472,51,1,0,0,0,473,474,5,16,0,0,474,476,3,128,64,0,475, + 477,3,22,11,0,476,475,1,0,0,0,476,477,1,0,0,0,477,478,1,0,0,0,478, + 479,5,49,0,0,479,480,3,130,65,0,480,481,5,98,0,0,481,482,3,112,56, + 0,482,483,5,97,0,0,483,484,3,112,56,0,484,485,5,51,0,0,485,487,3, + 60,30,0,486,488,3,58,29,0,487,486,1,0,0,0,487,488,1,0,0,0,488,489, + 1,0,0,0,489,490,5,53,0,0,490,492,3,62,31,0,491,493,3,66,33,0,492, + 491,1,0,0,0,492,493,1,0,0,0,493,494,1,0,0,0,494,495,5,99,0,0,495, + 53,1,0,0,0,496,497,5,17,0,0,497,499,3,128,64,0,498,500,3,22,11,0, + 499,498,1,0,0,0,499,500,1,0,0,0,500,501,1,0,0,0,501,502,5,49,0,0, + 502,503,3,130,65,0,503,504,5,98,0,0,504,505,3,112,56,0,505,506,5, + 97,0,0,506,508,3,112,56,0,507,509,3,66,33,0,508,507,1,0,0,0,508, + 509,1,0,0,0,509,510,1,0,0,0,510,511,5,99,0,0,511,55,1,0,0,0,512, + 513,5,18,0,0,513,514,3,128,64,0,514,515,5,49,0,0,515,516,3,130,65, + 0,516,517,5,19,0,0,517,518,3,128,64,0,518,519,5,98,0,0,519,521,3, + 112,56,0,520,522,3,66,33,0,521,520,1,0,0,0,521,522,1,0,0,0,522,523, + 1,0,0,0,523,524,5,99,0,0,524,57,1,0,0,0,525,526,5,52,0,0,526,527, + 3,112,56,0,527,59,1,0,0,0,528,529,7,0,0,0,529,61,1,0,0,0,530,549, + 5,55,0,0,531,532,5,10,0,0,532,549,3,128,64,0,533,534,5,3,0,0,534, + 549,3,128,64,0,535,536,5,12,0,0,536,545,5,104,0,0,537,542,3,26,13, + 0,538,539,5,100,0,0,539,541,3,26,13,0,540,538,1,0,0,0,541,544,1, + 0,0,0,542,540,1,0,0,0,542,543,1,0,0,0,543,546,1,0,0,0,544,542,1, + 0,0,0,545,537,1,0,0,0,545,546,1,0,0,0,546,547,1,0,0,0,547,549,5, + 105,0,0,548,530,1,0,0,0,548,531,1,0,0,0,548,533,1,0,0,0,548,535, + 1,0,0,0,549,63,1,0,0,0,550,555,3,128,64,0,551,552,5,100,0,0,552, + 554,3,128,64,0,553,551,1,0,0,0,554,557,1,0,0,0,555,553,1,0,0,0,555, + 556,1,0,0,0,556,65,1,0,0,0,557,555,1,0,0,0,558,559,5,54,0,0,559, + 563,5,102,0,0,560,562,3,68,34,0,561,560,1,0,0,0,562,565,1,0,0,0, + 563,561,1,0,0,0,563,564,1,0,0,0,564,566,1,0,0,0,565,563,1,0,0,0, + 566,567,5,103,0,0,567,67,1,0,0,0,568,569,5,28,0,0,569,570,3,128, + 64,0,570,571,5,49,0,0,571,572,3,130,65,0,572,573,5,98,0,0,573,574, + 3,112,56,0,574,575,3,70,35,0,575,576,5,99,0,0,576,611,1,0,0,0,577, + 578,5,29,0,0,578,579,3,128,64,0,579,580,5,49,0,0,580,581,3,130,65, + 0,581,582,5,98,0,0,582,583,3,118,59,0,583,584,3,46,23,0,584,585, + 3,70,35,0,585,586,5,99,0,0,586,611,1,0,0,0,587,588,5,11,0,0,588, + 589,3,128,64,0,589,590,5,49,0,0,590,591,3,130,65,0,591,592,5,98, + 0,0,592,594,3,128,64,0,593,595,3,28,14,0,594,593,1,0,0,0,594,595, + 1,0,0,0,595,596,1,0,0,0,596,597,5,99,0,0,597,611,1,0,0,0,598,599, + 5,18,0,0,599,600,3,128,64,0,600,601,5,49,0,0,601,602,3,130,65,0, + 602,603,5,98,0,0,603,606,3,128,64,0,604,605,5,20,0,0,605,607,3,112, + 56,0,606,604,1,0,0,0,606,607,1,0,0,0,607,608,1,0,0,0,608,609,5,99, + 0,0,609,611,1,0,0,0,610,568,1,0,0,0,610,577,1,0,0,0,610,587,1,0, + 0,0,610,598,1,0,0,0,611,69,1,0,0,0,612,613,5,104,0,0,613,618,3,72, + 36,0,614,615,5,100,0,0,615,617,3,72,36,0,616,614,1,0,0,0,617,620, + 1,0,0,0,618,616,1,0,0,0,618,619,1,0,0,0,619,621,1,0,0,0,620,618, + 1,0,0,0,621,622,5,105,0,0,622,71,1,0,0,0,623,624,7,1,0,0,624,73, + 1,0,0,0,625,626,5,27,0,0,626,627,3,76,38,0,627,75,1,0,0,0,628,631, + 3,78,39,0,629,631,3,82,41,0,630,628,1,0,0,0,630,629,1,0,0,0,631, + 77,1,0,0,0,632,633,5,28,0,0,633,634,3,128,64,0,634,635,5,49,0,0, + 635,636,3,130,65,0,636,637,5,37,0,0,637,638,3,128,64,0,638,639,5, + 98,0,0,639,640,3,112,56,0,640,641,5,38,0,0,641,644,3,80,40,0,642, + 643,5,39,0,0,643,645,3,120,60,0,644,642,1,0,0,0,644,645,1,0,0,0, + 645,646,1,0,0,0,646,647,5,99,0,0,647,79,1,0,0,0,648,655,5,71,0,0, + 649,650,5,72,0,0,650,651,5,106,0,0,651,652,3,112,56,0,652,653,5, + 107,0,0,653,655,1,0,0,0,654,648,1,0,0,0,654,649,1,0,0,0,655,81,1, + 0,0,0,656,657,5,29,0,0,657,658,3,128,64,0,658,659,5,49,0,0,659,660, + 3,130,65,0,660,661,5,102,0,0,661,662,3,84,42,0,662,663,3,84,42,0, + 663,664,5,103,0,0,664,83,1,0,0,0,665,666,3,46,23,0,666,667,5,30, + 0,0,667,668,3,128,64,0,668,669,5,49,0,0,669,670,3,130,65,0,670,672, + 3,118,59,0,671,673,5,77,0,0,672,671,1,0,0,0,672,673,1,0,0,0,673, + 676,1,0,0,0,674,675,5,45,0,0,675,677,3,130,65,0,676,674,1,0,0,0, + 676,677,1,0,0,0,677,679,1,0,0,0,678,680,5,46,0,0,679,678,1,0,0,0, + 679,680,1,0,0,0,680,683,1,0,0,0,681,682,5,47,0,0,682,684,3,130,65, + 0,683,681,1,0,0,0,683,684,1,0,0,0,684,686,1,0,0,0,685,687,5,48,0, + 0,686,685,1,0,0,0,686,687,1,0,0,0,687,688,1,0,0,0,688,689,5,99,0, + 0,689,85,1,0,0,0,690,691,5,21,0,0,691,692,3,128,64,0,692,693,5,22, + 0,0,693,695,3,128,64,0,694,696,3,28,14,0,695,694,1,0,0,0,695,696, + 1,0,0,0,696,699,1,0,0,0,697,698,5,49,0,0,698,700,3,130,65,0,699, + 697,1,0,0,0,699,700,1,0,0,0,700,703,1,0,0,0,701,702,5,44,0,0,702, + 704,5,112,0,0,703,701,1,0,0,0,703,704,1,0,0,0,704,705,1,0,0,0,705, + 709,5,102,0,0,706,708,3,88,44,0,707,706,1,0,0,0,708,711,1,0,0,0, + 709,707,1,0,0,0,709,710,1,0,0,0,710,712,1,0,0,0,711,709,1,0,0,0, + 712,713,5,103,0,0,713,87,1,0,0,0,714,715,5,26,0,0,715,720,3,76,38, + 0,716,720,3,94,47,0,717,720,3,90,45,0,718,720,3,92,46,0,719,714, + 1,0,0,0,719,716,1,0,0,0,719,717,1,0,0,0,719,718,1,0,0,0,720,89,1, + 0,0,0,721,722,5,23,0,0,722,723,3,128,64,0,723,724,5,25,0,0,724,725, + 5,28,0,0,725,726,3,128,64,0,726,727,5,99,0,0,727,91,1,0,0,0,728, + 729,5,34,0,0,729,730,3,128,64,0,730,731,5,35,0,0,731,732,5,36,0, + 0,732,733,5,32,0,0,733,734,5,18,0,0,734,735,3,128,64,0,735,736,5, + 33,0,0,736,737,5,29,0,0,737,738,3,128,64,0,738,739,5,101,0,0,739, + 740,3,128,64,0,740,741,5,99,0,0,741,93,1,0,0,0,742,743,5,23,0,0, + 743,744,3,96,48,0,744,745,5,25,0,0,745,746,3,100,50,0,746,747,5, + 99,0,0,747,95,1,0,0,0,748,749,3,128,64,0,749,750,5,101,0,0,750,751, + 3,98,49,0,751,97,1,0,0,0,752,764,3,128,64,0,753,764,5,66,0,0,754, + 764,5,56,0,0,755,764,5,57,0,0,756,764,5,63,0,0,757,764,5,64,0,0, + 758,764,5,65,0,0,759,764,5,67,0,0,760,764,5,68,0,0,761,764,5,69, + 0,0,762,764,5,70,0,0,763,752,1,0,0,0,763,753,1,0,0,0,763,754,1,0, + 0,0,763,755,1,0,0,0,763,756,1,0,0,0,763,757,1,0,0,0,763,758,1,0, + 0,0,763,759,1,0,0,0,763,760,1,0,0,0,763,761,1,0,0,0,763,762,1,0, + 0,0,764,99,1,0,0,0,765,766,5,28,0,0,766,767,3,128,64,0,767,768,5, + 101,0,0,768,769,3,102,51,0,769,788,1,0,0,0,770,771,5,29,0,0,771, + 772,3,128,64,0,772,773,5,101,0,0,773,774,3,128,64,0,774,775,5,101, + 0,0,775,776,3,104,52,0,776,788,1,0,0,0,777,778,5,13,0,0,778,779, + 3,128,64,0,779,780,5,101,0,0,780,782,3,128,64,0,781,783,3,28,14, + 0,782,781,1,0,0,0,782,783,1,0,0,0,783,785,1,0,0,0,784,786,3,106, + 53,0,785,784,1,0,0,0,785,786,1,0,0,0,786,788,1,0,0,0,787,765,1,0, + 0,0,787,770,1,0,0,0,787,777,1,0,0,0,788,101,1,0,0,0,789,790,7,2, + 0,0,790,103,1,0,0,0,791,792,7,3,0,0,792,105,1,0,0,0,793,794,5,31, + 0,0,794,798,5,102,0,0,795,797,3,108,54,0,796,795,1,0,0,0,797,800, + 1,0,0,0,798,796,1,0,0,0,798,799,1,0,0,0,799,801,1,0,0,0,800,798, + 1,0,0,0,801,802,5,103,0,0,802,107,1,0,0,0,803,804,3,128,64,0,804, + 805,5,25,0,0,805,806,5,28,0,0,806,813,3,128,64,0,807,808,5,33,0, + 0,808,809,5,29,0,0,809,810,3,128,64,0,810,811,5,101,0,0,811,812, + 3,128,64,0,812,814,1,0,0,0,813,807,1,0,0,0,813,814,1,0,0,0,814,815, + 1,0,0,0,815,816,5,99,0,0,816,857,1,0,0,0,817,818,3,128,64,0,818, + 819,5,25,0,0,819,820,5,29,0,0,820,821,3,128,64,0,821,822,5,101,0, + 0,822,829,3,128,64,0,823,824,5,33,0,0,824,825,5,29,0,0,825,826,3, + 128,64,0,826,827,5,101,0,0,827,828,3,128,64,0,828,830,1,0,0,0,829, + 823,1,0,0,0,829,830,1,0,0,0,830,831,1,0,0,0,831,832,5,99,0,0,832, + 857,1,0,0,0,833,834,3,128,64,0,834,835,5,25,0,0,835,836,5,11,0,0, + 836,838,3,128,64,0,837,839,3,28,14,0,838,837,1,0,0,0,838,839,1,0, + 0,0,839,846,1,0,0,0,840,841,5,33,0,0,841,842,5,29,0,0,842,843,3, + 128,64,0,843,844,5,101,0,0,844,845,3,128,64,0,845,847,1,0,0,0,846, + 840,1,0,0,0,846,847,1,0,0,0,847,848,1,0,0,0,848,849,5,99,0,0,849, + 857,1,0,0,0,850,851,3,128,64,0,851,852,5,25,0,0,852,853,5,18,0,0, + 853,854,3,128,64,0,854,855,5,99,0,0,855,857,1,0,0,0,856,803,1,0, + 0,0,856,817,1,0,0,0,856,833,1,0,0,0,856,850,1,0,0,0,857,109,1,0, + 0,0,858,859,5,18,0,0,859,860,3,128,64,0,860,861,5,25,0,0,861,862, + 3,128,64,0,862,863,5,101,0,0,863,865,3,128,64,0,864,866,3,106,53, + 0,865,864,1,0,0,0,865,866,1,0,0,0,866,867,1,0,0,0,867,868,5,99,0, + 0,868,111,1,0,0,0,869,916,3,116,58,0,870,916,5,78,0,0,871,916,5, + 79,0,0,872,873,5,80,0,0,873,916,3,130,65,0,874,875,5,81,0,0,875, + 876,5,108,0,0,876,877,3,128,64,0,877,878,5,109,0,0,878,916,1,0,0, + 0,879,880,5,82,0,0,880,881,5,108,0,0,881,883,3,128,64,0,882,884, + 3,28,14,0,883,882,1,0,0,0,883,884,1,0,0,0,884,885,1,0,0,0,885,886, + 5,109,0,0,886,916,1,0,0,0,887,888,5,6,0,0,888,889,5,108,0,0,889, + 890,3,128,64,0,890,891,5,109,0,0,891,916,1,0,0,0,892,893,5,83,0, + 0,893,894,5,108,0,0,894,895,3,112,56,0,895,896,5,109,0,0,896,916, + 1,0,0,0,897,898,5,84,0,0,898,899,5,108,0,0,899,900,3,112,56,0,900, + 901,5,109,0,0,901,916,1,0,0,0,902,903,5,85,0,0,903,907,5,102,0,0, + 904,906,3,114,57,0,905,904,1,0,0,0,906,909,1,0,0,0,907,905,1,0,0, + 0,907,908,1,0,0,0,908,910,1,0,0,0,909,907,1,0,0,0,910,916,5,103, + 0,0,911,913,3,128,64,0,912,914,3,28,14,0,913,912,1,0,0,0,913,914, + 1,0,0,0,914,916,1,0,0,0,915,869,1,0,0,0,915,870,1,0,0,0,915,871, + 1,0,0,0,915,872,1,0,0,0,915,874,1,0,0,0,915,879,1,0,0,0,915,887, + 1,0,0,0,915,892,1,0,0,0,915,897,1,0,0,0,915,902,1,0,0,0,915,911, + 1,0,0,0,916,113,1,0,0,0,917,918,3,128,64,0,918,919,5,98,0,0,919, + 920,3,112,56,0,920,921,5,99,0,0,921,115,1,0,0,0,922,923,7,4,0,0, + 923,117,1,0,0,0,924,925,7,5,0,0,925,119,1,0,0,0,926,935,3,130,65, + 0,927,935,5,112,0,0,928,935,5,113,0,0,929,935,5,94,0,0,930,935,5, + 95,0,0,931,935,5,96,0,0,932,935,3,122,61,0,933,935,3,126,63,0,934, + 926,1,0,0,0,934,927,1,0,0,0,934,928,1,0,0,0,934,929,1,0,0,0,934, + 930,1,0,0,0,934,931,1,0,0,0,934,932,1,0,0,0,934,933,1,0,0,0,935, + 121,1,0,0,0,936,945,5,102,0,0,937,942,3,124,62,0,938,939,5,100,0, + 0,939,941,3,124,62,0,940,938,1,0,0,0,941,944,1,0,0,0,942,940,1,0, + 0,0,942,943,1,0,0,0,943,946,1,0,0,0,944,942,1,0,0,0,945,937,1,0, + 0,0,945,946,1,0,0,0,946,947,1,0,0,0,947,948,5,103,0,0,948,123,1, + 0,0,0,949,950,3,130,65,0,950,951,5,98,0,0,951,952,3,120,60,0,952, + 125,1,0,0,0,953,962,5,104,0,0,954,959,3,120,60,0,955,956,5,100,0, + 0,956,958,3,120,60,0,957,955,1,0,0,0,958,961,1,0,0,0,959,957,1,0, + 0,0,959,960,1,0,0,0,960,963,1,0,0,0,961,959,1,0,0,0,962,954,1,0, + 0,0,962,963,1,0,0,0,963,964,1,0,0,0,964,965,5,105,0,0,965,127,1, + 0,0,0,966,967,7,6,0,0,967,129,1,0,0,0,968,969,5,115,0,0,969,131, + 1,0,0,0,82,144,151,172,184,196,216,224,231,237,249,252,258,269,278, + 288,291,293,297,305,317,322,331,334,361,385,395,401,430,437,441, + 446,457,463,471,476,487,492,499,508,521,542,545,548,555,563,594, + 606,610,618,630,644,654,672,676,679,683,686,695,699,703,709,719, + 763,782,785,787,798,813,829,838,846,856,865,883,907,913,915,934, + 942,945,959,962 ]; private static __ATN: antlr.ATN; @@ -5008,6 +5066,9 @@ export class OperationMemberContext extends antlr.ParserRuleContext { public RBRACE(): antlr.TerminalNode { return this.getToken(QuixosCapabilityParser.RBRACE, 0)!; } + public STATIC(): antlr.TerminalNode | null { + return this.getToken(QuixosCapabilityParser.STATIC, 0); + } public override get ruleIndex(): number { return QuixosCapabilityParser.RULE_operationMember; } @@ -6176,6 +6237,9 @@ export class ConformanceItemContext extends antlr.ParserRuleContext { public operationBindingDecl(): OperationBindingDeclContext | null { return this.getRuleContext(0, OperationBindingDeclContext); } + public stateFieldBindingDecl(): StateFieldBindingDeclContext | null { + return this.getRuleContext(0, StateFieldBindingDeclContext); + } public relationshipMaterializationDecl(): RelationshipMaterializationDeclContext | null { return this.getRuleContext(0, RelationshipMaterializationDeclContext); } @@ -6192,6 +6256,44 @@ export class ConformanceItemContext extends antlr.ParserRuleContext { } +export class StateFieldBindingDeclContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public BIND(): antlr.TerminalNode { + return this.getToken(QuixosCapabilityParser.BIND, 0)!; + } + public identifier(): IdentifierContext[]; + public identifier(i: number): IdentifierContext | null; + public identifier(i?: number): IdentifierContext[] | IdentifierContext | null { + if (i === undefined) { + return this.getRuleContexts(IdentifierContext); + } + + return this.getRuleContext(i, IdentifierContext); + } + public TO(): antlr.TerminalNode { + return this.getToken(QuixosCapabilityParser.TO, 0)!; + } + public STATE(): antlr.TerminalNode { + return this.getToken(QuixosCapabilityParser.STATE, 0)!; + } + public SEMI(): antlr.TerminalNode { + return this.getToken(QuixosCapabilityParser.SEMI, 0)!; + } + public override get ruleIndex(): number { + return QuixosCapabilityParser.RULE_stateFieldBindingDecl; + } + public override accept(visitor: QuixosCapabilityVisitor): Result | null { + if (visitor.visitStateFieldBindingDecl) { + return visitor.visitStateFieldBindingDecl(this); + } else { + return visitor.visitChildren(this); + } + } +} + + export class RelationshipMaterializationDeclContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); diff --git a/src/capability-language/generated/QuixosCapabilityVisitor.ts b/src/capability-language/generated/QuixosCapabilityVisitor.ts index 83fca76..d0a54ca 100644 --- a/src/capability-language/generated/QuixosCapabilityVisitor.ts +++ b/src/capability-language/generated/QuixosCapabilityVisitor.ts @@ -47,6 +47,7 @@ import { EdgeDeclContext } from "./QuixosCapabilityParser.js"; import { EdgeEndpointContext } from "./QuixosCapabilityParser.js"; import { ConformanceDeclContext } from "./QuixosCapabilityParser.js"; import { ConformanceItemContext } from "./QuixosCapabilityParser.js"; +import { StateFieldBindingDeclContext } from "./QuixosCapabilityParser.js"; import { RelationshipMaterializationDeclContext } from "./QuixosCapabilityParser.js"; import { OperationBindingDeclContext } from "./QuixosCapabilityParser.js"; import { MemberOperationRefContext } from "./QuixosCapabilityParser.js"; @@ -347,6 +348,12 @@ export class QuixosCapabilityVisitor extends AbstractParseTreeVisitor Result; + /** + * Visit a parse tree produced by `QuixosCapabilityParser.stateFieldBindingDecl`. + * @param ctx the parse tree + * @return the visitor result + */ + visitStateFieldBindingDecl?: (ctx: StateFieldBindingDeclContext) => Result; /** * Visit a parse tree produced by `QuixosCapabilityParser.relationshipMaterializationDecl`. * @param ctx the parse tree diff --git a/src/capability-language/parser.ts b/src/capability-language/parser.ts index d8f1747..4a83b3a 100644 --- a/src/capability-language/parser.ts +++ b/src/capability-language/parser.ts @@ -552,6 +552,7 @@ const lowerOperationMember = (state: LoweringState, context: OperationMemberCont inputType, outputType, mode: "call", + ...(context.STATIC() ? { scope: "class" as const } : {}), }, ], }; @@ -702,7 +703,15 @@ const lowerInterfaceTemplate = ( inputType, outputType, operations: [ - signature("call", capabilityId.operation(stringValue(operation.stringLiteral(1))), inputType, outputType), + { + ...signature( + "call", + capabilityId.operation(stringValue(operation.stringLiteral(1))), + inputType, + outputType, + ), + ...(operation.STATIC() ? { scope: "class" as const } : {}), + }, ], }; } @@ -1430,6 +1439,42 @@ const lowerConformance = ( const operationBindings = context .conformanceItem() .flatMap((item) => { + const field = item.stateFieldBindingDecl(); + if (field) { + const memberName = identifier(field.identifier(0)); + const member = interfaceSymbol.definition?.members.find((entry) => entry.displayName === memberName); + const attachment = requireSymbol( + state, + state.attachments, + identifier(field.identifier(1)), + field, + "attachment", + ); + if (!member || member.kind !== "value" || attachment?.attachment.kind !== "state") { + loweringIssue( + state, + field, + "invalid-state-field-binding", + "Field shorthand requires a value member and a state slot", + ); + return []; + } + const primitives = { + get: "read", + set: "write", + "watch-start": "watch-start", + "watch-stop": "watch-stop", + } as const; + const slotId = attachment.attachment.id; + return member.operations.map((operation) => ({ + operationId: operation.id, + binding: { + kind: "state" as const, + slotId, + primitive: primitives[operation.displayName as keyof typeof primitives], + }, + })); + } const bindingContext = item.operationBindingDecl(); if (!bindingContext) { return []; diff --git a/src/capability-language/scaffold-recipes.ts b/src/capability-language/scaffold-recipes.ts index 7a3dd20..13f6f07 100644 --- a/src/capability-language/scaffold-recipes.ts +++ b/src/capability-language/scaffold-recipes.ts @@ -142,7 +142,7 @@ export const scaffoldRecipe = async ( if (react) { create( "src/component.tsx", - `// Props are opaque at the platform boundary until capability generics exist.\nexport default function Component(_props: {camino: unknown; render: unknown; dispatch: (action: unknown) => void}) {\n return

${name}

Edit this component, then run qx-workspace check.

;\n}\n`, + `// Add a checked props export, select it in quixos.check.json options.react,\n// then use its generated ReactResults type. Scaffold bundle does this for you.\nexport default function Component(_props: {camino: Record; render: unknown; dispatch: (action: unknown) => void}) {\n return

${name}

;\n}\n`, ); create( "src/impl/sourceGet.ts", @@ -180,14 +180,7 @@ export const scaffoldRecipe = async ( bindingOutput: "src/gen/qx.ts", ...(react ? { - options: { - messages: { - "org.quixos.web-studio.ReactProps": { - module: "@quixos/camino-package-runtime", - export: "opaqueReactPropsBinding", - }, - }, - }, + options: { react: { propsExports: [] } }, } : {}), }), @@ -394,9 +387,20 @@ export const scaffoldRecipe = async ( for (const [file, content] of Object.entries(spec.initialFiles)) { if ( typeof content !== "string" || - ["quixos.lock", "flake.nix", "quixos.toolchain.json", "quixos.check.json", "package.json"].includes(file) + ["quixos.lock", "flake.nix", "quixos.toolchain.json", "package.json"].includes(file) ) throw new Error(`Not an initial authored file: ${file}`); + if (file === "quixos.check.json") { + const check = JSON.parse(content); + if ( + check.backend !== "typescript" || + check.bindingOutput !== "src/gen/qx.ts" || + Object.keys(check).some((key) => !["backend", "bindingOutput", "options"].includes(key)) + ) + throw new Error( + "Initial check configuration may customize binding options, not the scaffold verification backend or output", + ); + } const existing = files.findIndex((entry) => entry.file === prefix + file); if (existing >= 0) files.splice(existing, 1); create(file, content); diff --git a/src/capability-language/tool-cli.ts b/src/capability-language/tool-cli.ts index feae14a..c407d07 100644 --- a/src/capability-language/tool-cli.ts +++ b/src/capability-language/tool-cli.ts @@ -310,6 +310,9 @@ const main = async () => { throw new Error("Interface scaffold requires name, id, revision and Quixos toolchain source"); const request: StructuralRequest = { kind: "interface", + // Like package scaffolding, declaration creation is provisional. Imports + // can be attached next; the normal check verifies the complete graph. + validation: "syntax", source: spec.source, files: [ { diff --git a/src/capability-model/types.ts b/src/capability-model/types.ts index 2f2c7aa..00602f6 100644 --- a/src/capability-model/types.ts +++ b/src/capability-model/types.ts @@ -110,6 +110,8 @@ export interface InterfaceOperation { inputType: Type; outputType: Type; mode: InterfaceOperationMode; + /** Class capabilities have no object receiver and bind free functions. */ + scope?: "class"; /** Required for watch-start/subscribe and absent for other modes. */ eventType?: Type; } diff --git a/src/capability-model/validation.ts b/src/capability-model/validation.ts index 65c1b47..bcd3e73 100644 --- a/src/capability-model/validation.ts +++ b/src/capability-model/validation.ts @@ -23,6 +23,7 @@ import type { OwnedAttachment, PackageExport, PackageOperationExport, + PackageFunctionExport, PackageRevision, PackageRevisionId, PersistentAttachment, @@ -1423,6 +1424,24 @@ const validateConformances = ( } const operation = operationEntry.operation; const binding = entry.binding; + if (operation.scope === "class" && (!conformance.id || operation.mode !== "call")) { + issue( + issues, + "invalid-package-binding", + bindingPath, + "Class capabilities require an explicit conformance ID and call mode", + ); + continue; + } + if (operation.scope === "class" && binding.kind !== "package") { + issue( + issues, + "invalid-package-binding", + bindingPath, + "Class capabilities must bind a free package function, not instance storage", + ); + continue; + } if (binding.kind === "state") { const attachment = findAttachment(indexes, "state", binding.slotId); if (!attachment || attachment.attachment.kind !== "state") { @@ -1562,31 +1581,49 @@ const validateConformances = ( ); continue; } - if (packageExport.kind !== "operation") { + if (operation.scope === "class" ? packageExport.kind !== "function" : packageExport.kind !== "operation") { issue( issues, "invalid-package-binding", `${bindingPath}.binding.exportId`, - `Package export ${binding.exportId} is ${packageExport.kind}, not an operation`, + `Package export ${binding.exportId} must be ${operation.scope === "class" ? "a free function" : "an instance operation"}`, ); continue; } - if (!signaturesMatch(operation, packageExport)) { + if ( + !signaturesMatch(operation, { + ...packageExport, + mode: packageExport.kind === "operation" ? packageExport.mode : "call", + }) + ) { issue( issues, "invalid-package-binding", `${bindingPath}.binding.exportId`, - `Package export provides ${describeSignature(packageExport)}, but operation requires ${describeSignature(operation)}`, + `Package export signature does not match ${describeSignature(operation)}`, + ); + } + if (packageExport.kind === "operation") + validatePackageReceiver(issues, { + entry: packageExport, + atomId: conformance.atomId, + path: `${bindingPath}.binding.exportId`, + indexes, + requirementGraph, + graphSourceKey: key, + }); + if ( + operation.scope === "class" && + (binding.dependencies.some((entry) => entry.binding.kind !== "constructor") || + packageExport.dependencyPorts.some((entry) => entry.requirement.kind !== "constructor")) + ) { + issue( + issues, + "invalid-package-binding", + bindingPath, + "Class functions may inject constructors, not instance-dependent ports", ); } - validatePackageReceiver(issues, { - entry: packageExport, - atomId: conformance.atomId, - path: `${bindingPath}.binding.exportId`, - indexes, - requirementGraph, - graphSourceKey: key, - }); validateBoundDependencies(issues, { dependencies: binding.dependencies, dependencyPorts: packageExport.dependencyPorts, @@ -1919,7 +1956,7 @@ export type ResolvedOperationPlan = kind: "package"; binding: Extract; packageRevision: PackageRevision; - packageExport: PackageOperationExport; + packageExport: PackageOperationExport | PackageFunctionExport; dependencies: Array<{ port: DependencyPort; binding: DependencyBinding; @@ -1962,7 +1999,8 @@ export const resolveOperationPlan = ( } const packageRevision = plan.packages.get(binding.packageRevisionId); const packageExport = packageRevision?.exports.find( - (entry): entry is PackageOperationExport => entry.id === binding.exportId && entry.kind === "operation", + (entry): entry is PackageOperationExport | PackageFunctionExport => + entry.id === binding.exportId && (entry.kind === "operation" || entry.kind === "function"), ); if (!packageRevision || !packageExport) { return undefined; diff --git a/src/gen/quixos/orch_pb.ts b/src/gen/quixos/orch_pb.ts index 94bcf1b..3b5f13a 100644 --- a/src/gen/quixos/orch_pb.ts +++ b/src/gen/quixos/orch_pb.ts @@ -4,7 +4,7 @@ import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2"; import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; -import type { CaminoObject, Value } from "../camino/api_pb.js"; +import type { CaminoObject, CrdtValue, Value } from "../camino/api_pb.js"; import { file_camino_api } from "../camino/api_pb.js"; import type { PackageDescriptor } from "./package_pb.js"; import { file_quixos_package } from "./package_pb.js"; @@ -18,7 +18,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file quixos/orch.proto. */ export const file_quixos_orch: GenFile = /*@__PURE__*/ - fileDesc("ChFxdWl4b3Mvb3JjaC5wcm90bxILcXVpeG9zLm9yY2gipQEKFkNvbnN0cnVjdE9iamVjdFJlcXVlc3QSDwoHYXRvbV9pZBgBIAEoCRI9CgVpbnB1dBgCIAMoCzIuLnF1aXhvcy5vcmNoLkNvbnN0cnVjdE9iamVjdFJlcXVlc3QuSW5wdXRFbnRyeRo7CgpJbnB1dEVudHJ5EgsKA2tleRgBIAEoCRIcCgV2YWx1ZRgCIAEoCzINLmNhbWluby5WYWx1ZToCOAEiPwoXQ29uc3RydWN0T2JqZWN0UmVzcG9uc2USJAoGb2JqZWN0GAEgASgLMhQuY2FtaW5vLkNhbWlub09iamVjdCJtCiZSZXNvbHZlT3JDb25zdHJ1Y3RSZWxhdGVkT2JqZWN0UmVxdWVzdBIRCglvYmplY3RfaWQYASABKAkSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAIgASgJEhEKCW1lbWJlcl9pZBgDIAEoCSJkCidSZXNvbHZlT3JDb25zdHJ1Y3RSZWxhdGVkT2JqZWN0UmVzcG9uc2USJAoGb2JqZWN0GAEgASgLMhQuY2FtaW5vLkNhbWlub09iamVjdBITCgtjb25zdHJ1Y3RlZBgCIAEoCCLwAQoXSW52b2tlQ2FwYWJpbGl0eVJlcXVlc3QSKQoKY2FwYWJpbGl0eRgBIAEoCzIVLnF1aXhvcy5DYXBhYmlsaXR5UmVmEhEKCW9iamVjdF9pZBgCIAEoCRI+CgVpbnB1dBgDIAMoCzIvLnF1aXhvcy5vcmNoLkludm9rZUNhcGFiaWxpdHlSZXF1ZXN0LklucHV0RW50cnkSGgoSY2xpZW50X211dGF0aW9uX2lkGAQgASgJGjsKCklucHV0RW50cnkSCwoDa2V5GAEgASgJEhwKBXZhbHVlGAIgASgLMg0uY2FtaW5vLlZhbHVlOgI4ASLRAQoYSW52b2tlQ2FwYWJpbGl0eVJlc3BvbnNlEhUKDWludm9jYXRpb25faWQYASABKAkSKwoKYWN0aXZhdGlvbhgCIAEoCzIXLnF1aXhvcy5vcmNoLkFjdGl2YXRpb24SCgoCb2sYAyABKAgSHQoGcmVzdWx0GAQgASgLMg0uY2FtaW5vLlZhbHVlEg0KBWVycm9yGAUgASgJEjcKDGRlcGVuZGVuY2llcxgGIAMoCzIhLnF1aXhvcy5ydW50aW1lLkRlcml2ZWREZXBlbmRlbmN5ItIBChZXYXRjaENhcGFiaWxpdHlSZXF1ZXN0EikKCmNhcGFiaWxpdHkYASABKAsyFS5xdWl4b3MuQ2FwYWJpbGl0eVJlZhIRCglvYmplY3RfaWQYAiABKAkSPQoFaW5wdXQYAyADKAsyLi5xdWl4b3Mub3JjaC5XYXRjaENhcGFiaWxpdHlSZXF1ZXN0LklucHV0RW50cnkaOwoKSW5wdXRFbnRyeRILCgNrZXkYASABKAkSHAoFdmFsdWUYAiABKAsyDS5jYW1pbm8uVmFsdWU6AjgBIuMBChRXYXRjaENhcGFiaWxpdHlFdmVudBIVCg1pbnZvY2F0aW9uX2lkGAEgASgJEisKCmFjdGl2YXRpb24YAiABKAsyFy5xdWl4b3Mub3JjaC5BY3RpdmF0aW9uEhAKCHdhdGNoX2lkGAMgASgJEhwKBXZhbHVlGAQgASgLMg0uY2FtaW5vLlZhbHVlEjcKDGRlcGVuZGVuY2llcxgFIAMoCzIhLnF1aXhvcy5ydW50aW1lLkRlcml2ZWREZXBlbmRlbmN5Eg0KBWVycm9yGAYgASgJEg8KB2luaXRpYWwYByABKAgiFQoTR2V0V29ya3NwYWNlUmVxdWVzdCKXAgoUR2V0V29ya3NwYWNlUmVzcG9uc2USFAoMd29ya3NwYWNlX2lkGAEgASgJEh0KFXdvcmtzcGFjZV9yZXZpc2lvbl9pZBgCIAEoCRIaChJzb3VyY2Vfcm9vdF9jb21taXQYAyABKAkSKgoiZW1wdHlfaW5wdXRfY29uc3RydWN0aWJsZV9hdG9tX2lkcxgEIAMoCRI/ChFjYXBhYmlsaXR5X2lucHV0cxgFIAMoCzIkLnF1aXhvcy5vcmNoLkNhcGFiaWxpdHlJbnB1dENvbnRyYWN0EkEKEmNvbnN0cnVjdG9yX2lucHV0cxgGIAMoCzIlLnF1aXhvcy5vcmNoLkNvbnN0cnVjdG9ySW5wdXRDb250cmFjdCJhChdDYXBhYmlsaXR5SW5wdXRDb250cmFjdBIdChVpbnRlcmZhY2VfcmV2aXNpb25faWQYASABKAkSFAoMb3BlcmF0aW9uX2lkGAIgASgJEhEKCXR5cGVfanNvbhgDIAEoCSI+ChhDb25zdHJ1Y3RvcklucHV0Q29udHJhY3QSDwoHYXRvbV9pZBgBIAEoCRIRCgl0eXBlX2pzb24YAiABKAkiGAoWTGlzdEFjdGl2YXRpb25zUmVxdWVzdCIfCh1MaXN0UGFja2FnZURlc2NyaXB0b3JzUmVxdWVzdCJQCh5MaXN0UGFja2FnZURlc2NyaXB0b3JzUmVzcG9uc2USLgoLZGVzY3JpcHRvcnMYASADKAsyGS5xdWl4b3MuUGFja2FnZURlc2NyaXB0b3IiHAoaTGlzdFBhY2thZ2VSdW50aW1lc1JlcXVlc3QiUgobTGlzdFBhY2thZ2VSdW50aW1lc1Jlc3BvbnNlEjMKCHJ1bnRpbWVzGAEgAygLMiEucXVpeG9zLm9yY2guUGFja2FnZVJ1bnRpbWVTdGF0dXMiRwoXTGlzdEFjdGl2YXRpb25zUmVzcG9uc2USLAoLYWN0aXZhdGlvbnMYASADKAsyFy5xdWl4b3Mub3JjaC5BY3RpdmF0aW9uIj8KFkNsb3NlQWN0aXZhdGlvblJlcXVlc3QSFQoNYWN0aXZhdGlvbl9pZBgBIAEoCRIOCgZyZWFzb24YAiABKAkiRgoXQ2xvc2VBY3RpdmF0aW9uUmVzcG9uc2USKwoKYWN0aXZhdGlvbhgBIAEoCzIXLnF1aXhvcy5vcmNoLkFjdGl2YXRpb24i6wEKCkFjdGl2YXRpb24SFQoNYWN0aXZhdGlvbl9pZBgBIAEoCRIoCgZleHBvcnQYAiABKAsyGC5xdWl4b3MuUGFja2FnZUV4cG9ydFJlZhIRCglvYmplY3RfaWQYAyABKAkSDQoFc3RhdGUYBCABKAkSDgoGZGVtYW5kGAUgASgNEhEKCW9wZW5lZF9hdBgGIAEoCRIUCgxsYXN0X3VzZWRfYXQYByABKAkSGAoQaWRsZV9kZWFkbGluZV9hdBgIIAEoCRIRCgljbG9zZWRfYXQYCSABKAkSFAoMY2xvc2VfcmVhc29uGAogASgJIrMCChRQYWNrYWdlUnVudGltZVN0YXR1cxITCgtydW50aW1lX2tleRgBIAEoCRIbChNwYWNrYWdlX3JldmlzaW9uX2lkGAIgASgJEhkKEXNvdXJjZV9yZXBvc2l0b3J5GAMgASgJEhUKDXNvdXJjZV9jb21taXQYBCABKAkSFAoMYnVpbGRfdGFyZ2V0GAUgASgJEhMKC3NlcnZlcl9wYXRoGAYgASgJEgsKA3BpZBgHIAEoDRINCgVzdGF0ZRgIIAEoCRISCgpzdGFydGVkX2F0GAkgASgJEhkKEWxhc3RfaGFuZHNoYWtlX2F0GAogASgJEiAKGHJ1bnRpbWVfcHJvdG9jb2xfdmVyc2lvbhgLIAEoCRIfChdhZHZlcnRpc2VkX2V4cG9ydF9jb3VudBgMIAEoDTKuBwoTT3JjaGVzdHJhdG9yUnVudGltZRJfChBJbnZva2VDYXBhYmlsaXR5EiQucXVpeG9zLm9yY2guSW52b2tlQ2FwYWJpbGl0eVJlcXVlc3QaJS5xdWl4b3Mub3JjaC5JbnZva2VDYXBhYmlsaXR5UmVzcG9uc2USWwoPV2F0Y2hDYXBhYmlsaXR5EiMucXVpeG9zLm9yY2guV2F0Y2hDYXBhYmlsaXR5UmVxdWVzdBohLnF1aXhvcy5vcmNoLldhdGNoQ2FwYWJpbGl0eUV2ZW50MAESXAoPQ29uc3RydWN0T2JqZWN0EiMucXVpeG9zLm9yY2guQ29uc3RydWN0T2JqZWN0UmVxdWVzdBokLnF1aXhvcy5vcmNoLkNvbnN0cnVjdE9iamVjdFJlc3BvbnNlEowBCh9SZXNvbHZlT3JDb25zdHJ1Y3RSZWxhdGVkT2JqZWN0EjMucXVpeG9zLm9yY2guUmVzb2x2ZU9yQ29uc3RydWN0UmVsYXRlZE9iamVjdFJlcXVlc3QaNC5xdWl4b3Mub3JjaC5SZXNvbHZlT3JDb25zdHJ1Y3RSZWxhdGVkT2JqZWN0UmVzcG9uc2USUwoMR2V0V29ya3NwYWNlEiAucXVpeG9zLm9yY2guR2V0V29ya3NwYWNlUmVxdWVzdBohLnF1aXhvcy5vcmNoLkdldFdvcmtzcGFjZVJlc3BvbnNlEnEKFkxpc3RQYWNrYWdlRGVzY3JpcHRvcnMSKi5xdWl4b3Mub3JjaC5MaXN0UGFja2FnZURlc2NyaXB0b3JzUmVxdWVzdBorLnF1aXhvcy5vcmNoLkxpc3RQYWNrYWdlRGVzY3JpcHRvcnNSZXNwb25zZRJoChNMaXN0UGFja2FnZVJ1bnRpbWVzEicucXVpeG9zLm9yY2guTGlzdFBhY2thZ2VSdW50aW1lc1JlcXVlc3QaKC5xdWl4b3Mub3JjaC5MaXN0UGFja2FnZVJ1bnRpbWVzUmVzcG9uc2USXAoPTGlzdEFjdGl2YXRpb25zEiMucXVpeG9zLm9yY2guTGlzdEFjdGl2YXRpb25zUmVxdWVzdBokLnF1aXhvcy5vcmNoLkxpc3RBY3RpdmF0aW9uc1Jlc3BvbnNlElwKD0Nsb3NlQWN0aXZhdGlvbhIjLnF1aXhvcy5vcmNoLkNsb3NlQWN0aXZhdGlvblJlcXVlc3QaJC5xdWl4b3Mub3JjaC5DbG9zZUFjdGl2YXRpb25SZXNwb25zZWIGcHJvdG8z", [file_camino_api, file_quixos_package, file_quixos_refs, file_quixos_runtime]); + fileDesc("ChFxdWl4b3Mvb3JjaC5wcm90bxILcXVpeG9zLm9yY2gipQEKFkNvbnN0cnVjdE9iamVjdFJlcXVlc3QSDwoHYXRvbV9pZBgBIAEoCRI9CgVpbnB1dBgCIAMoCzIuLnF1aXhvcy5vcmNoLkNvbnN0cnVjdE9iamVjdFJlcXVlc3QuSW5wdXRFbnRyeRo7CgpJbnB1dEVudHJ5EgsKA2tleRgBIAEoCRIcCgV2YWx1ZRgCIAEoCzINLmNhbWluby5WYWx1ZToCOAEiPwoXQ29uc3RydWN0T2JqZWN0UmVzcG9uc2USJAoGb2JqZWN0GAEgASgLMhQuY2FtaW5vLkNhbWlub09iamVjdCJtCiZSZXNvbHZlT3JDb25zdHJ1Y3RSZWxhdGVkT2JqZWN0UmVxdWVzdBIRCglvYmplY3RfaWQYASABKAkSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAIgASgJEhEKCW1lbWJlcl9pZBgDIAEoCSJkCidSZXNvbHZlT3JDb25zdHJ1Y3RSZWxhdGVkT2JqZWN0UmVzcG9uc2USJAoGb2JqZWN0GAEgASgLMhQuY2FtaW5vLkNhbWlub09iamVjdBITCgtjb25zdHJ1Y3RlZBgCIAEoCCLwAQoXSW52b2tlQ2FwYWJpbGl0eVJlcXVlc3QSKQoKY2FwYWJpbGl0eRgBIAEoCzIVLnF1aXhvcy5DYXBhYmlsaXR5UmVmEhEKCW9iamVjdF9pZBgCIAEoCRI+CgVpbnB1dBgDIAMoCzIvLnF1aXhvcy5vcmNoLkludm9rZUNhcGFiaWxpdHlSZXF1ZXN0LklucHV0RW50cnkSGgoSY2xpZW50X211dGF0aW9uX2lkGAQgASgJGjsKCklucHV0RW50cnkSCwoDa2V5GAEgASgJEhwKBXZhbHVlGAIgASgLMg0uY2FtaW5vLlZhbHVlOgI4ASLOAQocSW52b2tlQ2xhc3NDYXBhYmlsaXR5UmVxdWVzdBIWCg5jb25mb3JtYW5jZV9pZBgBIAEoCRIUCgxvcGVyYXRpb25faWQYAiABKAkSQwoFaW5wdXQYAyADKAsyNC5xdWl4b3Mub3JjaC5JbnZva2VDbGFzc0NhcGFiaWxpdHlSZXF1ZXN0LklucHV0RW50cnkaOwoKSW5wdXRFbnRyeRILCgNrZXkYASABKAkSHAoFdmFsdWUYAiABKAsyDS5jYW1pbm8uVmFsdWU6AjgBIoMCChhJbnZva2VDYXBhYmlsaXR5UmVzcG9uc2USFQoNaW52b2NhdGlvbl9pZBgBIAEoCRIrCgphY3RpdmF0aW9uGAIgASgLMhcucXVpeG9zLm9yY2guQWN0aXZhdGlvbhIKCgJvaxgDIAEoCBIdCgZyZXN1bHQYBCABKAsyDS5jYW1pbm8uVmFsdWUSDQoFZXJyb3IYBSABKAkSNwoMZGVwZW5kZW5jaWVzGAYgAygLMiEucXVpeG9zLnJ1bnRpbWUuRGVyaXZlZERlcGVuZGVuY3kSMAoNZmllbGRfZWRpdGluZxgHIAEoCzIZLnF1aXhvcy5vcmNoLkZpZWxkRWRpdGluZyJ3CgxGaWVsZEVkaXRpbmcSGwoTZ2V0dGVyX29wZXJhdGlvbl9pZBgBIAEoCRIbChNzZXR0ZXJfb3BlcmF0aW9uX2lkGAIgASgJEhUKDWRvY3VtZW50X3R5cGUYAyABKAkSFgoOYmluZGluZ19kaWdlc3QYBCABKAkizgEKGkVkaXRDYXBhYmlsaXR5RmllbGRSZXF1ZXN0EikKCmNhcGFiaWxpdHkYASABKAsyFS5xdWl4b3MuQ2FwYWJpbGl0eVJlZhIRCglvYmplY3RfaWQYAiABKAkSGwoTc2V0dGVyX29wZXJhdGlvbl9pZBgDIAEoCRIWCg5iaW5kaW5nX2RpZ2VzdBgEIAEoCRIhCgZ1cGRhdGUYBSABKAsyES5jYW1pbm8uQ3JkdFZhbHVlEhoKEmNsaWVudF9tdXRhdGlvbl9pZBgGIAEoCSLSAQoWV2F0Y2hDYXBhYmlsaXR5UmVxdWVzdBIpCgpjYXBhYmlsaXR5GAEgASgLMhUucXVpeG9zLkNhcGFiaWxpdHlSZWYSEQoJb2JqZWN0X2lkGAIgASgJEj0KBWlucHV0GAMgAygLMi4ucXVpeG9zLm9yY2guV2F0Y2hDYXBhYmlsaXR5UmVxdWVzdC5JbnB1dEVudHJ5GjsKCklucHV0RW50cnkSCwoDa2V5GAEgASgJEhwKBXZhbHVlGAIgASgLMg0uY2FtaW5vLlZhbHVlOgI4ASKVAgoUV2F0Y2hDYXBhYmlsaXR5RXZlbnQSFQoNaW52b2NhdGlvbl9pZBgBIAEoCRIrCgphY3RpdmF0aW9uGAIgASgLMhcucXVpeG9zLm9yY2guQWN0aXZhdGlvbhIQCgh3YXRjaF9pZBgDIAEoCRIcCgV2YWx1ZRgEIAEoCzINLmNhbWluby5WYWx1ZRI3CgxkZXBlbmRlbmNpZXMYBSADKAsyIS5xdWl4b3MucnVudGltZS5EZXJpdmVkRGVwZW5kZW5jeRINCgVlcnJvchgGIAEoCRIPCgdpbml0aWFsGAcgASgIEjAKDWZpZWxkX2VkaXRpbmcYCCABKAsyGS5xdWl4b3Mub3JjaC5GaWVsZEVkaXRpbmciOgoTR2V0V29ya3NwYWNlUmVxdWVzdBIjChtpbmNsdWRlX2ludGVyZmFjZV9jb250cmFjdHMYASABKAgi6gIKFEdldFdvcmtzcGFjZVJlc3BvbnNlEhQKDHdvcmtzcGFjZV9pZBgBIAEoCRIdChV3b3Jrc3BhY2VfcmV2aXNpb25faWQYAiABKAkSGgoSc291cmNlX3Jvb3RfY29tbWl0GAMgASgJEioKImVtcHR5X2lucHV0X2NvbnN0cnVjdGlibGVfYXRvbV9pZHMYBCADKAkSPwoRY2FwYWJpbGl0eV9pbnB1dHMYBSADKAsyJC5xdWl4b3Mub3JjaC5DYXBhYmlsaXR5SW5wdXRDb250cmFjdBJBChJjb25zdHJ1Y3Rvcl9pbnB1dHMYBiADKAsyJS5xdWl4b3Mub3JjaC5Db25zdHJ1Y3RvcklucHV0Q29udHJhY3QSFwoPaW50ZXJmYWNlc19qc29uGAcgASgJEjgKEmNsYXNzX2NhcGFiaWxpdGllcxgIIAMoCzIcLnF1aXhvcy5vcmNoLkNsYXNzQ2FwYWJpbGl0eSK5AQoPQ2xhc3NDYXBhYmlsaXR5EhYKDmNvbmZvcm1hbmNlX2lkGAEgASgJEg8KB2F0b21faWQYAiABKAkSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAMgASgJEhUKDWRlZmluaXRpb25faWQYBCABKAkSFAoMb3BlcmF0aW9uX2lkGAUgASgJEhcKD2lucHV0X3R5cGVfanNvbhgGIAEoCRIYChBvdXRwdXRfdHlwZV9qc29uGAcgASgJImEKF0NhcGFiaWxpdHlJbnB1dENvbnRyYWN0Eh0KFWludGVyZmFjZV9yZXZpc2lvbl9pZBgBIAEoCRIUCgxvcGVyYXRpb25faWQYAiABKAkSEQoJdHlwZV9qc29uGAMgASgJIj4KGENvbnN0cnVjdG9ySW5wdXRDb250cmFjdBIPCgdhdG9tX2lkGAEgASgJEhEKCXR5cGVfanNvbhgCIAEoCSIYChZMaXN0QWN0aXZhdGlvbnNSZXF1ZXN0Ih8KHUxpc3RQYWNrYWdlRGVzY3JpcHRvcnNSZXF1ZXN0IlAKHkxpc3RQYWNrYWdlRGVzY3JpcHRvcnNSZXNwb25zZRIuCgtkZXNjcmlwdG9ycxgBIAMoCzIZLnF1aXhvcy5QYWNrYWdlRGVzY3JpcHRvciIcChpMaXN0UGFja2FnZVJ1bnRpbWVzUmVxdWVzdCJSChtMaXN0UGFja2FnZVJ1bnRpbWVzUmVzcG9uc2USMwoIcnVudGltZXMYASADKAsyIS5xdWl4b3Mub3JjaC5QYWNrYWdlUnVudGltZVN0YXR1cyJHChdMaXN0QWN0aXZhdGlvbnNSZXNwb25zZRIsCgthY3RpdmF0aW9ucxgBIAMoCzIXLnF1aXhvcy5vcmNoLkFjdGl2YXRpb24iPwoWQ2xvc2VBY3RpdmF0aW9uUmVxdWVzdBIVCg1hY3RpdmF0aW9uX2lkGAEgASgJEg4KBnJlYXNvbhgCIAEoCSJGChdDbG9zZUFjdGl2YXRpb25SZXNwb25zZRIrCgphY3RpdmF0aW9uGAEgASgLMhcucXVpeG9zLm9yY2guQWN0aXZhdGlvbiLrAQoKQWN0aXZhdGlvbhIVCg1hY3RpdmF0aW9uX2lkGAEgASgJEigKBmV4cG9ydBgCIAEoCzIYLnF1aXhvcy5QYWNrYWdlRXhwb3J0UmVmEhEKCW9iamVjdF9pZBgDIAEoCRINCgVzdGF0ZRgEIAEoCRIOCgZkZW1hbmQYBSABKA0SEQoJb3BlbmVkX2F0GAYgASgJEhQKDGxhc3RfdXNlZF9hdBgHIAEoCRIYChBpZGxlX2RlYWRsaW5lX2F0GAggASgJEhEKCWNsb3NlZF9hdBgJIAEoCRIUCgxjbG9zZV9yZWFzb24YCiABKAkiswIKFFBhY2thZ2VSdW50aW1lU3RhdHVzEhMKC3J1bnRpbWVfa2V5GAEgASgJEhsKE3BhY2thZ2VfcmV2aXNpb25faWQYAiABKAkSGQoRc291cmNlX3JlcG9zaXRvcnkYAyABKAkSFQoNc291cmNlX2NvbW1pdBgEIAEoCRIUCgxidWlsZF90YXJnZXQYBSABKAkSEwoLc2VydmVyX3BhdGgYBiABKAkSCwoDcGlkGAcgASgNEg0KBXN0YXRlGAggASgJEhIKCnN0YXJ0ZWRfYXQYCSABKAkSGQoRbGFzdF9oYW5kc2hha2VfYXQYCiABKAkSIAoYcnVudGltZV9wcm90b2NvbF92ZXJzaW9uGAsgASgJEh8KF2FkdmVydGlzZWRfZXhwb3J0X2NvdW50GAwgASgNMoAJChNPcmNoZXN0cmF0b3JSdW50aW1lEl8KEEludm9rZUNhcGFiaWxpdHkSJC5xdWl4b3Mub3JjaC5JbnZva2VDYXBhYmlsaXR5UmVxdWVzdBolLnF1aXhvcy5vcmNoLkludm9rZUNhcGFiaWxpdHlSZXNwb25zZRJlChNFZGl0Q2FwYWJpbGl0eUZpZWxkEicucXVpeG9zLm9yY2guRWRpdENhcGFiaWxpdHlGaWVsZFJlcXVlc3QaJS5xdWl4b3Mub3JjaC5JbnZva2VDYXBhYmlsaXR5UmVzcG9uc2USaQoVSW52b2tlQ2xhc3NDYXBhYmlsaXR5EikucXVpeG9zLm9yY2guSW52b2tlQ2xhc3NDYXBhYmlsaXR5UmVxdWVzdBolLnF1aXhvcy5vcmNoLkludm9rZUNhcGFiaWxpdHlSZXNwb25zZRJbCg9XYXRjaENhcGFiaWxpdHkSIy5xdWl4b3Mub3JjaC5XYXRjaENhcGFiaWxpdHlSZXF1ZXN0GiEucXVpeG9zLm9yY2guV2F0Y2hDYXBhYmlsaXR5RXZlbnQwARJcCg9Db25zdHJ1Y3RPYmplY3QSIy5xdWl4b3Mub3JjaC5Db25zdHJ1Y3RPYmplY3RSZXF1ZXN0GiQucXVpeG9zLm9yY2guQ29uc3RydWN0T2JqZWN0UmVzcG9uc2USjAEKH1Jlc29sdmVPckNvbnN0cnVjdFJlbGF0ZWRPYmplY3QSMy5xdWl4b3Mub3JjaC5SZXNvbHZlT3JDb25zdHJ1Y3RSZWxhdGVkT2JqZWN0UmVxdWVzdBo0LnF1aXhvcy5vcmNoLlJlc29sdmVPckNvbnN0cnVjdFJlbGF0ZWRPYmplY3RSZXNwb25zZRJTCgxHZXRXb3Jrc3BhY2USIC5xdWl4b3Mub3JjaC5HZXRXb3Jrc3BhY2VSZXF1ZXN0GiEucXVpeG9zLm9yY2guR2V0V29ya3NwYWNlUmVzcG9uc2UScQoWTGlzdFBhY2thZ2VEZXNjcmlwdG9ycxIqLnF1aXhvcy5vcmNoLkxpc3RQYWNrYWdlRGVzY3JpcHRvcnNSZXF1ZXN0GisucXVpeG9zLm9yY2guTGlzdFBhY2thZ2VEZXNjcmlwdG9yc1Jlc3BvbnNlEmgKE0xpc3RQYWNrYWdlUnVudGltZXMSJy5xdWl4b3Mub3JjaC5MaXN0UGFja2FnZVJ1bnRpbWVzUmVxdWVzdBooLnF1aXhvcy5vcmNoLkxpc3RQYWNrYWdlUnVudGltZXNSZXNwb25zZRJcCg9MaXN0QWN0aXZhdGlvbnMSIy5xdWl4b3Mub3JjaC5MaXN0QWN0aXZhdGlvbnNSZXF1ZXN0GiQucXVpeG9zLm9yY2guTGlzdEFjdGl2YXRpb25zUmVzcG9uc2USXAoPQ2xvc2VBY3RpdmF0aW9uEiMucXVpeG9zLm9yY2guQ2xvc2VBY3RpdmF0aW9uUmVxdWVzdBokLnF1aXhvcy5vcmNoLkNsb3NlQWN0aXZhdGlvblJlc3BvbnNlYgZwcm90bzM", [file_camino_api, file_quixos_package, file_quixos_refs, file_quixos_runtime]); /** * @generated from message quixos.orch.ConstructObjectRequest @@ -143,6 +143,33 @@ export type InvokeCapabilityRequest = Message<"quixos.orch.InvokeCapabilityReque export const InvokeCapabilityRequestSchema: GenMessage = /*@__PURE__*/ messageDesc(file_quixos_orch, 4); +/** + * @generated from message quixos.orch.InvokeClassCapabilityRequest + */ +export type InvokeClassCapabilityRequest = Message<"quixos.orch.InvokeClassCapabilityRequest"> & { + /** + * @generated from field: string conformance_id = 1; + */ + conformanceId: string; + + /** + * @generated from field: string operation_id = 2; + */ + operationId: string; + + /** + * @generated from field: map input = 3; + */ + input: { [key: string]: Value }; +}; + +/** + * Describes the message quixos.orch.InvokeClassCapabilityRequest. + * Use `create(InvokeClassCapabilityRequestSchema)` to create a new message. + */ +export const InvokeClassCapabilityRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_quixos_orch, 5); + /** * @generated from message quixos.orch.InvokeCapabilityResponse */ @@ -176,6 +203,11 @@ export type InvokeCapabilityResponse = Message<"quixos.orch.InvokeCapabilityResp * @generated from field: repeated quixos.runtime.DerivedDependency dependencies = 6; */ dependencies: DerivedDependency[]; + + /** + * @generated from field: quixos.orch.FieldEditing field_editing = 7; + */ + fieldEditing?: FieldEditing | undefined; }; /** @@ -183,7 +215,85 @@ export type InvokeCapabilityResponse = Message<"quixos.orch.InvokeCapabilityResp * Use `create(InvokeCapabilityResponseSchema)` to create a new message. */ export const InvokeCapabilityResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 5); + messageDesc(file_quixos_orch, 6); + +/** + * Resolved from the checked native getter/setter binding, not Value.source. + * + * @generated from message quixos.orch.FieldEditing + */ +export type FieldEditing = Message<"quixos.orch.FieldEditing"> & { + /** + * @generated from field: string getter_operation_id = 1; + */ + getterOperationId: string; + + /** + * @generated from field: string setter_operation_id = 2; + */ + setterOperationId: string; + + /** + * @generated from field: string document_type = 3; + */ + documentType: string; + + /** + * @generated from field: string binding_digest = 4; + */ + bindingDigest: string; +}; + +/** + * Describes the message quixos.orch.FieldEditing. + * Use `create(FieldEditingSchema)` to create a new message. + */ +export const FieldEditingSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_quixos_orch, 7); + +/** + * @generated from message quixos.orch.EditCapabilityFieldRequest + */ +export type EditCapabilityFieldRequest = Message<"quixos.orch.EditCapabilityFieldRequest"> & { + /** + * The public getter; setter must belong to the same value member. + * + * @generated from field: quixos.CapabilityRef capability = 1; + */ + capability?: CapabilityRef | undefined; + + /** + * @generated from field: string object_id = 2; + */ + objectId: string; + + /** + * @generated from field: string setter_operation_id = 3; + */ + setterOperationId: string; + + /** + * @generated from field: string binding_digest = 4; + */ + bindingDigest: string; + + /** + * @generated from field: camino.CrdtValue update = 5; + */ + update?: CrdtValue | undefined; + + /** + * @generated from field: string client_mutation_id = 6; + */ + clientMutationId: string; +}; + +/** + * Describes the message quixos.orch.EditCapabilityFieldRequest. + * Use `create(EditCapabilityFieldRequestSchema)` to create a new message. + */ +export const EditCapabilityFieldRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_quixos_orch, 8); /** * @generated from message quixos.orch.WatchCapabilityRequest @@ -210,7 +320,7 @@ export type WatchCapabilityRequest = Message<"quixos.orch.WatchCapabilityRequest * Use `create(WatchCapabilityRequestSchema)` to create a new message. */ export const WatchCapabilityRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 6); + messageDesc(file_quixos_orch, 9); /** * @generated from message quixos.orch.WatchCapabilityEvent @@ -250,6 +360,11 @@ export type WatchCapabilityEvent = Message<"quixos.orch.WatchCapabilityEvent"> & * @generated from field: bool initial = 7; */ initial: boolean; + + /** + * @generated from field: quixos.orch.FieldEditing field_editing = 8; + */ + fieldEditing?: FieldEditing | undefined; }; /** @@ -257,12 +372,18 @@ export type WatchCapabilityEvent = Message<"quixos.orch.WatchCapabilityEvent"> & * Use `create(WatchCapabilityEventSchema)` to create a new message. */ export const WatchCapabilityEventSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 7); + messageDesc(file_quixos_orch, 10); /** * @generated from message quixos.orch.GetWorkspaceRequest */ export type GetWorkspaceRequest = Message<"quixos.orch.GetWorkspaceRequest"> & { + /** + * Revision polling must not download the entire interface graph. + * + * @generated from field: bool include_interface_contracts = 1; + */ + includeInterfaceContracts: boolean; }; /** @@ -270,7 +391,7 @@ export type GetWorkspaceRequest = Message<"quixos.orch.GetWorkspaceRequest"> & { * Use `create(GetWorkspaceRequestSchema)` to create a new message. */ export const GetWorkspaceRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 8); + messageDesc(file_quixos_orch, 11); /** * @generated from message quixos.orch.GetWorkspaceResponse @@ -292,8 +413,8 @@ export type GetWorkspaceResponse = Message<"quixos.orch.GetWorkspaceResponse"> & sourceRootCommit: string; /** - * Checked constructors whose wire input can be empty. Web Studio intersects - * this with its temporary Createable marker; the marker is not a factory. + * Checked constructors whose wire input can be empty. The create panel uses + * class factory conformances instead of this constructor inventory. * * @generated from field: repeated string empty_input_constructible_atom_ids = 4; */ @@ -308,6 +429,18 @@ export type GetWorkspaceResponse = Message<"quixos.orch.GetWorkspaceResponse"> & * @generated from field: repeated quixos.orch.ConstructorInputContract constructor_inputs = 6; */ constructorInputs: ConstructorInputContract[]; + + /** + * Exact closed interface contracts used by checked presentation consumers. + * + * @generated from field: string interfaces_json = 7; + */ + interfacesJson: string; + + /** + * @generated from field: repeated quixos.orch.ClassCapability class_capabilities = 8; + */ + classCapabilities: ClassCapability[]; }; /** @@ -315,7 +448,54 @@ export type GetWorkspaceResponse = Message<"quixos.orch.GetWorkspaceResponse"> & * Use `create(GetWorkspaceResponseSchema)` to create a new message. */ export const GetWorkspaceResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 9); + messageDesc(file_quixos_orch, 12); + +/** + * @generated from message quixos.orch.ClassCapability + */ +export type ClassCapability = Message<"quixos.orch.ClassCapability"> & { + /** + * @generated from field: string conformance_id = 1; + */ + conformanceId: string; + + /** + * @generated from field: string atom_id = 2; + */ + atomId: string; + + /** + * @generated from field: string interface_revision_id = 3; + */ + interfaceRevisionId: string; + + /** + * @generated from field: string definition_id = 4; + */ + definitionId: string; + + /** + * @generated from field: string operation_id = 5; + */ + operationId: string; + + /** + * @generated from field: string input_type_json = 6; + */ + inputTypeJson: string; + + /** + * @generated from field: string output_type_json = 7; + */ + outputTypeJson: string; +}; + +/** + * Describes the message quixos.orch.ClassCapability. + * Use `create(ClassCapabilitySchema)` to create a new message. + */ +export const ClassCapabilitySchema: GenMessage = /*@__PURE__*/ + messageDesc(file_quixos_orch, 13); /** * @generated from message quixos.orch.CapabilityInputContract @@ -342,7 +522,7 @@ export type CapabilityInputContract = Message<"quixos.orch.CapabilityInputContra * Use `create(CapabilityInputContractSchema)` to create a new message. */ export const CapabilityInputContractSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 10); + messageDesc(file_quixos_orch, 14); /** * @generated from message quixos.orch.ConstructorInputContract @@ -364,7 +544,7 @@ export type ConstructorInputContract = Message<"quixos.orch.ConstructorInputCont * Use `create(ConstructorInputContractSchema)` to create a new message. */ export const ConstructorInputContractSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 11); + messageDesc(file_quixos_orch, 15); /** * @generated from message quixos.orch.ListActivationsRequest @@ -377,7 +557,7 @@ export type ListActivationsRequest = Message<"quixos.orch.ListActivationsRequest * Use `create(ListActivationsRequestSchema)` to create a new message. */ export const ListActivationsRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 12); + messageDesc(file_quixos_orch, 16); /** * @generated from message quixos.orch.ListPackageDescriptorsRequest @@ -390,7 +570,7 @@ export type ListPackageDescriptorsRequest = Message<"quixos.orch.ListPackageDesc * Use `create(ListPackageDescriptorsRequestSchema)` to create a new message. */ export const ListPackageDescriptorsRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 13); + messageDesc(file_quixos_orch, 17); /** * @generated from message quixos.orch.ListPackageDescriptorsResponse @@ -407,7 +587,7 @@ export type ListPackageDescriptorsResponse = Message<"quixos.orch.ListPackageDes * Use `create(ListPackageDescriptorsResponseSchema)` to create a new message. */ export const ListPackageDescriptorsResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 14); + messageDesc(file_quixos_orch, 18); /** * @generated from message quixos.orch.ListPackageRuntimesRequest @@ -420,7 +600,7 @@ export type ListPackageRuntimesRequest = Message<"quixos.orch.ListPackageRuntime * Use `create(ListPackageRuntimesRequestSchema)` to create a new message. */ export const ListPackageRuntimesRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 15); + messageDesc(file_quixos_orch, 19); /** * @generated from message quixos.orch.ListPackageRuntimesResponse @@ -437,7 +617,7 @@ export type ListPackageRuntimesResponse = Message<"quixos.orch.ListPackageRuntim * Use `create(ListPackageRuntimesResponseSchema)` to create a new message. */ export const ListPackageRuntimesResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 16); + messageDesc(file_quixos_orch, 20); /** * @generated from message quixos.orch.ListActivationsResponse @@ -454,7 +634,7 @@ export type ListActivationsResponse = Message<"quixos.orch.ListActivationsRespon * Use `create(ListActivationsResponseSchema)` to create a new message. */ export const ListActivationsResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 17); + messageDesc(file_quixos_orch, 21); /** * @generated from message quixos.orch.CloseActivationRequest @@ -476,7 +656,7 @@ export type CloseActivationRequest = Message<"quixos.orch.CloseActivationRequest * Use `create(CloseActivationRequestSchema)` to create a new message. */ export const CloseActivationRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 18); + messageDesc(file_quixos_orch, 22); /** * @generated from message quixos.orch.CloseActivationResponse @@ -493,7 +673,7 @@ export type CloseActivationResponse = Message<"quixos.orch.CloseActivationRespon * Use `create(CloseActivationResponseSchema)` to create a new message. */ export const CloseActivationResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 19); + messageDesc(file_quixos_orch, 23); /** * @generated from message quixos.orch.Activation @@ -555,7 +735,7 @@ export type Activation = Message<"quixos.orch.Activation"> & { * Use `create(ActivationSchema)` to create a new message. */ export const ActivationSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 20); + messageDesc(file_quixos_orch, 24); /** * @generated from message quixos.orch.PackageRuntimeStatus @@ -627,7 +807,7 @@ export type PackageRuntimeStatus = Message<"quixos.orch.PackageRuntimeStatus"> & * Use `create(PackageRuntimeStatusSchema)` to create a new message. */ export const PackageRuntimeStatusSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 21); + messageDesc(file_quixos_orch, 25); /** * @generated from service quixos.orch.OrchestratorRuntime @@ -641,6 +821,22 @@ export const OrchestratorRuntime: GenService<{ input: typeof InvokeCapabilityRequestSchema; output: typeof InvokeCapabilityResponseSchema; }, + /** + * @generated from rpc quixos.orch.OrchestratorRuntime.EditCapabilityField + */ + editCapabilityField: { + methodKind: "unary"; + input: typeof EditCapabilityFieldRequestSchema; + output: typeof InvokeCapabilityResponseSchema; + }, + /** + * @generated from rpc quixos.orch.OrchestratorRuntime.InvokeClassCapability + */ + invokeClassCapability: { + methodKind: "unary"; + input: typeof InvokeClassCapabilityRequestSchema; + output: typeof InvokeCapabilityResponseSchema; + }, /** * @generated from rpc quixos.orch.OrchestratorRuntime.WatchCapability */ diff --git a/test/react-fields.test.ts b/test/react-fields.test.ts new file mode 100644 index 0000000..40f34ab --- /dev/null +++ b/test/react-fields.test.ts @@ -0,0 +1,187 @@ +import assert from "node:assert/strict"; +import test from "node:test"; +import fs from "node:fs/promises"; +import os from "node:os"; +import path from "node:path"; +import { spawnSync } from "node:child_process"; +import { compileCapabilityResourceSource, compileCapabilitySource } from "../src/capability-language/parser.js"; +import { generateReactBindings } from "../src/bindings/react.js"; +import { reactPlatformTypes } from "../src/bindings/react-platform.js"; + +const source = { repository: "https://example.test/fields.git", commit: "a".repeat(40) }; +test("React bindings preserve read-only, writable and nested reference contracts", async (t) => { + const iface = compileCapabilityResourceSource( + `interface Fields id "fields" revision "fields@1" { + value title id "title" : string { get id "title:get"; set id "title:set"; watch start id "watch" stop id "stop"; } + value summary id "summary" : string { get id "summary:get"; } + }`, + { source }, + ); + assert.ok(iface.ok && iface.resource.kind === "interface"); + if (!iface.ok || iface.resource.kind !== "interface") throw new Error("interface failed"); + const pkg = compileCapabilityResourceSource( + `import interface Fields; package P id "p" revision "p@1" { + function props id "props" : unit -> record {fields: interface-ref; caption: string;}; + }`, + { source, environment: { interfaces: new Map([["Fields", iface.resource.revision]]) } }, + ); + assert.ok(pkg.ok && pkg.resource.kind === "package"); + if (!pkg.ok || pkg.resource.kind !== "package") throw new Error("package failed"); + const schema = { + format: "quixos-bindings", + version: 1, + interfaces: [iface.resource.revision], + packages: [pkg.resource.revision], + } as const; + const generated = generateReactBindings( + { ...schema, interfaces: [...schema.interfaces], packages: [...schema.packages] }, + "p@1", + ["props"], + ); + assert.match(generated, /"title": WritableField/); + assert.match(generated, /"summary": ReadableField/); + assert.throws( + () => generateReactBindings({ ...schema, interfaces: [], packages: [...schema.packages] }, "p@1", ["props"]), + /Missing React reference/, + ); + const root = await fs.mkdtemp(path.join(os.tmpdir(), "qx-react-types-")); + t.after(() => fs.rm(root, { recursive: true, force: true })); + await fs.writeFile(path.join(root, "react-props.gen.ts"), generated); + await fs.writeFile( + path.join(root, "platform.d.ts"), + reactPlatformTypes + + '\ndeclare module "react" {export type ReactNode = unknown; export type CSSProperties = {}; export function createElement(...args: unknown[]): unknown;}\n', + ); + await fs.writeFile( + path.join(root, "consumer.ts"), + `import {useLiveField, type ReadableField, type WritableField} from "@quixos/web-studio-react-runtime"; +import type {ReactResults} from "./react-props.gen.js"; +declare const props: ReactResults["props"]; +const [title, setTitle] = useLiveField(props.fields.fields.title); +setTitle("new"); +// @ts-expect-error wrong setter value +setTitle(123); +// @ts-expect-error read-only hook has no setter +const [summary, setSummary] = useLiveField(props.fields.fields.summary); +const [manual, write] = useLiveField(props.fields.fields.summary, {write: async (value: string) => {}}); +write("new"); +const readonly: ReadableField = props.fields.fields.title; +// @ts-expect-error read-only does not satisfy writable +const writable: WritableField = props.fields.fields.summary; +declare const narrow: WritableField<"only">; +// @ts-expect-error writable references are invariant +const widened: WritableField = narrow; +// @ts-expect-error callbacks must accept the field's type +useLiveField(props.fields.fields.summary, {write: async (value: number) => {}}); +`, + ); + const result = spawnSync( + process.execPath, + [ + path.resolve("node_modules/typescript/bin/tsc"), + "--strict", + "--noEmit", + "--skipLibCheck", + "--target", + "ES2022", + path.join(root, "platform.d.ts"), + path.join(root, "consumer.ts"), + ], + { encoding: "utf8", cwd: root }, + ); + assert.equal(result.status, 0, result.stdout + result.stderr); + await fs.writeFile( + path.join(root, "react-props.gen.ts"), + generateReactBindings( + { ...schema, interfaces: [...schema.interfaces], packages: [...schema.packages] }, + "p@1", + ["props"], + [{ module: "./component.js", propsExport: "props" }], + ), + ); + const checkComponent = () => + spawnSync( + process.execPath, + [ + path.resolve("node_modules/typescript/bin/tsc"), + "--strict", + "--noEmit", + "--skipLibCheck", + "--target", + "ES2022", + path.join(root, "platform.d.ts"), + path.join(root, "react-props.gen.ts"), + path.join(root, "component.ts"), + ], + { encoding: "utf8", cwd: root }, + ); + await fs.writeFile( + path.join(root, "component.ts"), + 'import type {ReactResults} from "./react-props.gen.js"; export default function Component(props: {camino: ReactResults["props"]}) {return null;}', + ); + const matching = checkComponent(); + assert.equal(matching.status, 0, matching.stdout + matching.stderr); + await fs.writeFile( + path.join(root, "component.ts"), + 'import type {WritableField} from "@quixos/web-studio-react-runtime"; export default function Component(props: {camino: {fields: {fields: {summary: WritableField}}}}) {return null;}', + ); + const incompatible = checkComponent(); + assert.notEqual(incompatible.status, 0, "component cannot strengthen a read-only prop into a writable field"); + assert.match(incompatible.stdout + incompatible.stderr, /writable|WritableField/); +}); + +test("class factories specialize return types and reject instance implementations or mismatched inputs", () => { + const factory = compileCapabilityResourceSource( + 'interface Factory id "factory" revision "factory@1" {static operation create id "create" : unit -> ref {call id "call";}}', + { source }, + ); + assert.ok(factory.ok && factory.resource.kind === "interface"); + if (!factory.ok || factory.resource.kind !== "interface") throw new Error("factory failed"); + const factoryRevision = factory.resource.revision; + const compile = (declaration: string) => { + const pkg = compileCapabilityResourceSource( + `external atom Note id "note"; package P id "p" revision "p@1" {${declaration}}`, + { source }, + ); + assert.ok(pkg.ok && pkg.resource.kind === "package", JSON.stringify(pkg.diagnostics)); + if (!pkg.ok || pkg.resource.kind !== "package") throw new Error("package failed"); + return compileCapabilitySource( + `workspace W id "w" revision "w@1" commit "${source.commit}" { + atom Note id "note"; import interface Factory; import package P; + conform Note as Factory id "factory-conformance" {bind create.call to package P.make;} + }`, + "workspace.qx", + { interfaces: new Map([["Factory", factoryRevision]]), packages: new Map([["P", pkg.resource.revision]]) }, + ); + }; + const good = compile('function make id "make" : unit -> atom-ref;'); + assert.ok(good.ok, JSON.stringify(good.diagnostics)); + assert.equal(good.workspace.interfaceImports[0].members[0].operations[0].scope, "class"); + const wrongInput = compile('function make id "make" : string -> atom-ref;'); + assert.equal(wrongInput.ok, false); + const wrongReceiver = compile('operation make id "make" : unit -> atom-ref mode call receiver atom Note;'); + assert.equal(wrongReceiver.ok, false); + assert.match(JSON.stringify(wrongReceiver.diagnostics), /free function/); +}); + +test("state-field shorthand binds exactly the declared accessors, never invents writes", () => { + const iface = compileCapabilityResourceSource( + 'interface Reader id "reader" revision "reader@1" {value title id "title" : string {get id "get"; watch start id "watch" stop id "stop";}}', + { source }, + ); + assert.ok(iface.ok && iface.resource.kind === "interface"); + if (!iface.ok || iface.resource.kind !== "interface") throw new Error("interface failed"); + const result = compileCapabilitySource( + `workspace W id "w" revision "w@1" commit "${source.commit}" { + atom Note id "note"; import interface Reader; + conform Note as Reader id "reader-conformance" {private state Title id "title-slot" on Note : string policy crdt(string) default ""; bind title to state Title;} + }`, + "workspace.qx", + { interfaces: new Map([["Reader", iface.resource.revision]]) }, + ); + assert.ok(result.ok, JSON.stringify(result.diagnostics)); + assert.deepEqual( + result.workspace.conformances[0].operationBindings.map((binding) => binding.operationId), + ["get", "watch", "stop"], + ); +}); diff --git a/test/scaffold-recipes.test.ts b/test/scaffold-recipes.test.ts index f933301..ba51e34 100644 --- a/test/scaffold-recipes.test.ts +++ b/test/scaffold-recipes.test.ts @@ -30,11 +30,9 @@ test("React preset applies its browser build script and shared-platform imports" assert.match(await fs.readFile(path.join(root, "flake.nix"), "utf8"), /browserSources = true/); assert.equal(await fs.readFile(path.join(root, "src/gen/web-studio-react-runtime.d.ts"), "utf8"), reactPlatformTypes); assert.match(await fs.readFile(path.join(root, "src/browser-assets.d.ts"), "utf8"), /declare module "\*\.css"/); - assert.equal( - JSON.parse(await fs.readFile(path.join(root, "quixos.check.json"), "utf8")).options.messages[ - "org.quixos.web-studio.ReactProps" - ].export, - "opaqueReactPropsBinding", + assert.deepEqual( + JSON.parse(await fs.readFile(path.join(root, "quixos.check.json"), "utf8")).options.react.propsExports, + [], ); await assert.rejects(fs.access(path.join(root, "quixos.scaffold.json"))); assert.equal(