From c8b1a18e9cd124f555ee0fa907e7e49480c550ba Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Wed, 7 Oct 2026 22:29:37 -0700 Subject: [PATCH 1/5] Reproduce recursive declaration naming failures Recursive values should retain their structure across declaration emit and downstream consumption instead of failing emit or acquiring any. Cover functions, object members, containers, and generic aliases, with repeated builds and displays at different expansion levels. Broader annotations and inaccessible names must not silently weaken recursive types. Preserve coverage of declaration error reporting even when formerly unrepresentable structural types become nameable. Declaration and call-site displays should agree on recursive boundaries without losing the selected overload or generic specialization. Recursive generic owners must remain reusable with new type arguments. A captured specialization must not change a method's own generic contract or leak into declarations consumed by downstream projects. For 55832 --- tsc/internal/checker/checker_test.go | 74 + tsc/internal/execute/tsctests/tsc_test.go | 182 +- ...oVerbosityConstMergedWithNamespace_test.go | 4 + .../quickinfoVerbosityRecursiveType_test.go | 23 +- .../quickinfoVerbosityTruncation1_test.go | 18 + .../tests/recursiveFunctionQuickInfo_test.go | 133 + .../typeToStringMergedNamespace.baseline | 10 + ...tedDeclarationErrorsReturnTypes.errors.txt | 235 +- .../isolatedDeclarationErrorsReturnTypes.js | 21 + ...olatedDeclarationErrorsReturnTypes.symbols | 579 ++-- ...isolatedDeclarationErrorsReturnTypes.types | 55 + ...unctionDeclarationSerialization.errors.txt | 437 +++ ...cursiveFunctionDeclarationSerialization.js | 470 +++ ...veFunctionDeclarationSerialization.symbols | 1189 ++++++++ ...siveFunctionDeclarationSerialization.types | 1372 +++++++++ ...VerbosityConstMergedWithNamespace.baseline | 248 ++ ...erbosityInstantiationTruncation20.baseline | 120 + ...erbosityInstantiationTruncation40.baseline | 120 + ...erbosityInstantiationTruncation80.baseline | 120 + .../quickinfoVerbosityRecursiveType.baseline | 1466 ++++++++++ .../recursiveFunctionCallQuickInfo.baseline | 2556 +++++++++++++++++ ...-dts-generation-errors-with-incremental.js | 69 +- .../reports-dts-generation-errors.js | 29 +- ...ursive-function-declaration-consumption.js | 1960 +++++++++++++ ...-dts-generation-errors-with-incremental.js | 82 +- .../reports-dts-generation-errors.js | 42 +- .../isolatedDeclarationErrorsReturnTypes.ts | 12 + ...cursiveFunctionDeclarationSerialization.ts | 245 ++ 28 files changed, 11467 insertions(+), 404 deletions(-) create mode 100644 tsc/internal/fourslash/tests/recursiveFunctionQuickInfo_test.go create mode 100644 tsc/testdata/baselines/reference/checker/typeToStringMergedNamespace.baseline create mode 100644 tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.errors.txt create mode 100644 tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.js create mode 100644 tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.symbols create mode 100644 tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.types create mode 100644 tsc/testdata/baselines/reference/fourslash/quickInfo/quickinfoVerbosityInstantiationTruncation20.baseline create mode 100644 tsc/testdata/baselines/reference/fourslash/quickInfo/quickinfoVerbosityInstantiationTruncation40.baseline create mode 100644 tsc/testdata/baselines/reference/fourslash/quickInfo/quickinfoVerbosityInstantiationTruncation80.baseline create mode 100644 tsc/testdata/baselines/reference/fourslash/quickInfo/recursiveFunctionCallQuickInfo.baseline create mode 100644 tsc/testdata/baselines/reference/tsbuild/incremental/recursive-function-declaration-consumption.js create mode 100644 tsc/testdata/tests/cases/compiler/recursiveFunctionDeclarationSerialization.ts diff --git a/tsc/internal/checker/checker_test.go b/tsc/internal/checker/checker_test.go index 2ed189904d64b..bcfab20058783 100644 --- a/tsc/internal/checker/checker_test.go +++ b/tsc/internal/checker/checker_test.go @@ -1,7 +1,10 @@ package checker_test import ( + "fmt" "path/filepath" + "strconv" + "strings" "testing" "github.com/microsoft/TypeScript/tsc/internal/ast" @@ -10,6 +13,7 @@ import ( "github.com/microsoft/TypeScript/tsc/internal/compiler" "github.com/microsoft/TypeScript/tsc/internal/core" "github.com/microsoft/TypeScript/tsc/internal/repo" + "github.com/microsoft/TypeScript/tsc/internal/testutil/baseline" "github.com/microsoft/TypeScript/tsc/internal/tsoptions" "github.com/microsoft/TypeScript/tsc/internal/tspath" "github.com/microsoft/TypeScript/tsc/internal/vfs/osvfs" @@ -115,6 +119,76 @@ export type E = D;`, assert.Equal(t, defaultClause, defaultReference) } +func TestTypeToStringMergedNamespace(t *testing.T) { + t.Parallel() + const content = `declare function f(value: T): T; +declare namespace f { const extra: number; } +type Sample = typeof f;` + fs := bundled.WrapFS(vfstest.FromMap(map[string]string{ + "/foo.ts": content, + "/tsconfig.json": `{"files":["foo.ts"]}`, + }, tspath.CaseInsensitive)) + host := compiler.NewCompilerHost(fs, bundled.LibPath(), nil, nil, nil) + parsed, errors := tsoptions.GetParsedCommandLineOfConfigFile("/tsconfig.json", &core.CompilerOptions{}, nil, fs, nil) + assert.Equal(t, len(errors), 0) + p := compiler.NewProgram(compiler.ProgramOptions{Config: parsed, Host: host}) + p.BindSourceFiles() + c, done := p.GetTypeChecker(t.Context()) + defer done() + node := p.GetSourceFile("/foo.ts").Statements.Nodes[2] + typ := c.GetTypeAtLocation(node) + var result strings.Builder + result.WriteString(content + "\n\n") + for _, useTypeOf := range []bool{false, true} { + flags := checker.TypeFormatFlagsInTypeAlias + if useTypeOf { + flags |= checker.TypeFormatFlagsUseTypeOfFunction + } + for level := range 3 { + vc := &checker.VerbosityContext{Level: level} + fmt.Fprintf(&result, "useTypeOfFunction=%t, verbosity=%d: %s\n", useTypeOf, level, c.TypeToStringEx(typ, node, flags, vc)) + } + } + baseline.Run(t, "typeToStringMergedNamespace.baseline", result.String(), baseline.Options{Subfolder: "checker"}) +} + +func TestTypeToStringRecursivePrototype(t *testing.T) { + t.Parallel() + for _, count := range []int{4, 8, 16, 32} { + t.Run(strconv.Itoa(count), func(t *testing.T) { + t.Parallel() + var content strings.Builder + content.WriteString("function Color(obj) { this.example = true; }\nColor.prototype = {\n") + for i := range count { + parameters := "ratio" + if i == 0 { + parameters = "" + } + fmt.Fprintf(&content, "m%03d: function(%s) { return this; },\n", i, parameters) + } + content.WriteString("toJSON: function() { return this.rgb(); }\n};") + fs := bundled.WrapFS(vfstest.FromMap(map[string]string{ + "/foo.js": content.String(), + "/tsconfig.json": `{"compilerOptions":{"target":"es2015","allowJs":true,"checkJs":true,"noImplicitAny":true},"files":["foo.js"]}`, + }, tspath.CaseInsensitive)) + host := compiler.NewCompilerHost(fs, bundled.LibPath(), nil, nil, nil) + parsed, errors := tsoptions.GetParsedCommandLineOfConfigFile("/tsconfig.json", &core.CompilerOptions{}, nil, fs, nil) + assert.Equal(t, len(errors), 0) + p := compiler.NewProgram(compiler.ProgramOptions{Config: parsed, Host: host}) + p.BindSourceFiles() + c, done := p.GetTypeChecker(t.Context()) + defer done() + node := p.GetSourceFile("/foo.js").Statements.Nodes[1].Expression().AsBinaryExpression().Left + typ := c.GetTypeAtLocation(node) + display := c.TypeToStringEx(typ, node.Parent, checker.TypeFormatFlagsNoTruncation|checker.TypeFormatFlagsGenerateNamesForShadowedTypeParams, nil) + t.Logf("methods=%d, bytes=%d, first method occurrences=%d", count, len(display), strings.Count(display, "m000:")) + for i := range count { + assert.Equal(t, strings.Count(display, fmt.Sprintf("m%03d:", i)), 2) + } + }) + } +} + func BenchmarkNewChecker(b *testing.B) { fs := bundled.WrapFS(osvfs.FS()) rootPath := tspath.RootedDirectoryPathFromAbsolute(filepath.Join(repo.TestDataPath(), "fixtures/compiler")) diff --git a/tsc/internal/execute/tsctests/tsc_test.go b/tsc/internal/execute/tsctests/tsc_test.go index aff5f93620582..360a2ded0e52e 100644 --- a/tsc/internal/execute/tsctests/tsc_test.go +++ b/tsc/internal/execute/tsctests/tsc_test.go @@ -610,7 +610,8 @@ func TestTscDeclarationEmit(t *testing.T) { "type": "module" }`), "/home/src/workspaces/project/node_modules/ky/distribution/index.d.ts": stringtestutil.Dedent(` - type KyInstance = { + declare class KyInstance { + private brand; extend(options: Record): KyInstance; } declare const ky: KyInstance; @@ -2481,6 +2482,185 @@ func TestTscIncremental(t *testing.T) { noChange, }, }, + { + subScenario: "recursive function declaration consumption", + files: FileMap{ + "/home/src/workspaces/project/producer/tsconfig.json": `{ + "compilerOptions": { "strict": true, "composite": true, "outDir": "dist" } + }`, + "/home/src/workspaces/project/producer/index.ts": stringtestutil.Dedent(` + export const arrow = () => arrow; + export const expression = function self() { return self; }; + export const first = () => second; + export const second = () => first; + export const generic = (value: T) => generic; + export const objectReturn = () => ({ call: objectReturn }); + export const tupleReturn = () => [tupleReturn] as const; + export const shadowed = function self(shadowed: number) { return self; }; + export const object = { value: 1, next: () => object }; + export const method = { value: 1, next() { return method; } }; + export const accessor = { value: 1, get next() { return accessor; } }; + export const tuple = [() => tuple] as const; + export const array = [() => array]; + export const nested = { inner: { next() { return nested.inner; } } }; + export const memberTuple = [function self() { return self; }] as const; + export const memberArray = [function self() { return self; }]; + export const quoted = { "a-b": function self() { return self; } }; + export const numeric = { 0: function self() { return self; } }; + export const key = Symbol(); + export const computed = { [key]: function self() { return self; } }; + export const union = true as boolean ? { next: () => union } : undefined; + function create(value: T) { + const result = { value, next: () => result }; + return result; + } + export const specialized = create("text"); + function createIndexed() { + const value: { [key: string]: typeof value } = {}; + return value; + } + export const indexed = createIndexed(); + function createMapped() { + const value: { [K in keyof T]: typeof value } = null!; + return value; + } + export const mapped = createMapped<{ next: unknown }>(); + function createAnnotated(value: T) { + const node: { value: T; next: () => typeof node } = { value, next: () => node }; + return node; + } + export const viaAnnotation = createAnnotated("text"); + export type Link = { value: T; next: Link }; + export type Callable = { (value: T): Callable; link: Link }; + export declare const link: Link; + export declare const callable: Callable; + export const nextLink = link.next; + export const nextCallable = callable(1); + function createHidden(value: T) { + type Hidden = { value: T; next: Hidden }; + return null! as Hidden; + } + export const hiddenAlias = createHidden("text"); + export const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias }; + export const parenthesized = (function self() { return self; }); + export const asserted = (function self() { return self; }) satisfies () => unknown; + export class Methods { + static recur() { return Methods.recur; } + static "a-b"() { return Methods["a-b"]; } + static [key]() { return Methods[key]; } + recur() { return this.recur; } + } + export function overloaded(value: string): typeof overloaded; + export function overloaded(value: number): typeof overloaded; + export function overloaded(value: string | number) { return overloaded; } + export const nestedOwner = { + make(outer: T) { + return { + nested(inner: U) { return { outer, inner, owner: nestedOwner }; }, + constrained(inner: U) { return { outer, inner, owner: nestedOwner }; }, + copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } { + return { outer, inner, owner: nestedOwner }; + }, + rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; }, + }; + }, + }; + export const nestedNumber = nestedOwner.make(1); + `), + "/home/src/workspaces/project/consumer/tsconfig.json": `{ + "compilerOptions": { "strict": true, "noEmit": true }, + "references": [{ "path": "../producer" }] + }`, + "/home/src/workspaces/project/consumer/index.ts": stringtestutil.Dedent(` + import { arrow, expression, first, generic, objectReturn, tupleReturn, shadowed } from "../producer/dist/index.js"; + import { object, method, accessor, tuple, array, nested } from "../producer/dist/index.js"; + import { memberTuple, memberArray, quoted, numeric, key, computed, union, specialized } from "../producer/dist/index.js"; + import { indexed, mapped, viaAnnotation } from "../producer/dist/index.js"; + import { nextLink, nextCallable, parenthesized, asserted, Methods, overloaded } from "../producer/dist/index.js"; + import { hiddenAlias, siblingHiddenAliases } from "../producer/dist/index.js"; + import { nestedNumber } from "../producer/dist/index.js"; + const a: typeof arrow = arrow()()(); + const b: typeof expression = expression()()(); + const c: typeof first = first()()(); + const d: typeof generic = generic(1)("text")(true); + const objectCall: typeof objectReturn = objectReturn().call().call; + const tupleCall: typeof tupleReturn = tupleReturn()[0]()[0]; + const shadowedCall: typeof shadowed = shadowed(1)(2); + const objectValue: number = object.next().next().value; + const methodValue: number = method.next().next().value; + const accessorValue: number = accessor.next.next.value; + const tupleValue: typeof tuple = tuple[0]()[0](); + const arrayValue: typeof array = array[0]()[0](); + const nestedValue: typeof nested.inner = nested.inner.next().next(); + const memberTupleValue: typeof memberTuple[0] = memberTuple[0]()(); + const memberArrayValue: typeof memberArray[0] = memberArray[0]()(); + const quotedValue: typeof quoted["a-b"] = quoted["a-b"]()(); + const numericValue: typeof numeric[0] = numeric[0]()(); + const computedValue: typeof computed[typeof key] = computed[key]()(); + const unionValue: typeof union = union?.next()?.next(); + const specializedValue: string = specialized.next().next().value; + const indexedValue: typeof indexed = indexed["next"]["next"]; + const mappedValue: typeof mapped = mapped.next.next; + const annotationValue: string = viaAnnotation.next().next().value; + const linkValue: string = nextLink.next.next.value; + const callableValue: number = nextCallable(1)(2).link.next.value; + const parenthesizedValue: typeof parenthesized = parenthesized()()(); + const assertedValue: typeof asserted = asserted()()(); + const methodReference: typeof Methods.recur = Methods.recur()()(); + const quotedMethodReference: typeof Methods["a-b"] = Methods["a-b"]()()(); + const computedMethodReference: typeof Methods[typeof key] = Methods[key]()()(); + const instance = new Methods(); + const instanceMethodReference: typeof instance.recur = instance.recur()()(); + const overloadReference: typeof overloaded = overloaded(1)("text")(2); + const hiddenValue: string = hiddenAlias.next.next.value; + const siblingHiddenValue: string = siblingHiddenAliases.second.next.next.value; + const nestedString = nestedNumber.nested(true).owner.make("text").nested(2); + const nestedBoolean = nestedString.owner.make(true).nested("inner"); + const nestedStringOuter: string = nestedString.outer; + const nestedStringInner: number = nestedString.inner; + const nestedBooleanOuter: boolean = nestedBoolean.outer; + const nestedBooleanInner: string = nestedBoolean.inner; + const constrainedOuter: number = nestedNumber.constrained(2).outer; + const constrainedInner: number = nestedNumber.constrained(2).inner; + const copiedOuter: number = nestedNumber.copied("inner").outer; + const copiedInner: string = nestedNumber.copied("inner").inner; + const restOuter: number = nestedNumber.rest(true).outer; + const restInner: boolean = nestedNumber.rest(true).inner; + type IsAny = 0 extends (1 & T) ? true : false; + const result = arrow()()(); + const notAny: false = null as unknown as IsAny; + const invalid: number = arrow()()(); + const invalidExpression: number = expression()()(); + const invalidObject: number = objectReturn().call; + const invalidTuple: number = tupleReturn()[0]; + const invalidShadowed: number = shadowed(1); + const invalidObjectValue: string = object.next().value; + const invalidTupleValue: number = tuple[0](); + const invalidSpecialized: number = specialized.next().value; + const invalidMapped: number = mapped.next; + const invalidAnnotation: number = viaAnnotation.next().value; + const invalidLink: number = nextLink.next.value; + const invalidCallable: string = nextCallable(1).link.value; + const invalidHiddenValue: number = hiddenAlias.next.next.value; + const invalidMethod: number = Methods.recur()(); + const invalidComputedMethod: number = Methods[key]()(); + const invalidNestedOuter: boolean = nestedString.outer; + const invalidNestedInner: string = nestedString.inner; + nestedNumber.constrained("wrong"); + `), + }, + commandLineArgs: []string{"--build", "consumer"}, + edits: []*tscEdit{ + noChange, + { + caption: "add a comment to the producer", + edit: func(sys *TestSys) { + sys.appendFile("/home/src/workspaces/project/producer/index.ts", "\n// comment-only edit\n") + }, + }, + noChange, + }, + }, { subScenario: "json module diagnostics are cleared after fixing the json file", files: FileMap{ diff --git a/tsc/internal/fourslash/tests/quickinfoVerbosityConstMergedWithNamespace_test.go b/tsc/internal/fourslash/tests/quickinfoVerbosityConstMergedWithNamespace_test.go index 0a25de873eb43..7253aad2f9ef1 100644 --- a/tsc/internal/fourslash/tests/quickinfoVerbosityConstMergedWithNamespace_test.go +++ b/tsc/internal/fourslash/tests/quickinfoVerbosityConstMergedWithNamespace_test.go @@ -17,11 +17,15 @@ declare namespace create/*2*/ { var version: string; function reset(): void; } +type Factory/*3*/ = typeof create; +declare const factory/*4*/: typeof create; ` f, done := fourslash.NewFourslash(t, nil /*capabilities*/, content) defer done() f.VerifyBaselineHoverWithVerbosity(t, map[string][]int{ "1": {0, 1}, "2": {0, 1}, + "3": {0, 1, 2}, + "4": {0, 1, 2}, }) } diff --git a/tsc/internal/fourslash/tests/quickinfoVerbosityRecursiveType_test.go b/tsc/internal/fourslash/tests/quickinfoVerbosityRecursiveType_test.go index 999e58183d7ff..fe67d9a34bb4d 100644 --- a/tsc/internal/fourslash/tests/quickinfoVerbosityRecursiveType_test.go +++ b/tsc/internal/fourslash/tests/quickinfoVerbosityRecursiveType_test.go @@ -35,8 +35,29 @@ const m/*m*/: TreeNode = { left: undefined, right: undefined, orange: { name: "orange" }, +} +type Wrapped/*wrapped*/ = ({ value: T; next: Wrapped }); +declare const wrappedValue/*wrappedValue*/: Wrapped; +type Callable/*callable*/ = { (value: T): Callable; link: Wrapped }; +declare const callableValue/*callableValue*/: Callable; +const recur/*recur*/ = () => recur; +type RecursiveArray/*recursiveArray*/ = RecursiveArray[]; +type RecursiveTuple/*recursiveTuple*/ = [RecursiveTuple?]; +type RecursiveUnion/*recursiveUnion*/ = { next: RecursiveUnion } | undefined; +declare const aliasOwner/*aliasOwner*/: Wrapped; +const siblingOwners/*siblingOwners*/ = { first: aliasOwner, second: aliasOwner }; +function local() { + const object/*localObject*/ = { next: () => object }; + const broad: unknown = function self/*localSelf*/() { return self; }; }` f, done := fourslash.NewFourslash(t, nil /*capabilities*/, content) defer done() - f.VerifyBaselineHoverWithVerbosity(t, map[string][]int{"N": {0}, "n": {0, 1}, "t": {0, 1}, "m": {0, 1, 2}}) + f.VerifyBaselineHoverWithVerbosity(t, map[string][]int{ + "N": {0}, "n": {0, 1}, "t": {0, 1}, "m": {0, 1, 2}, + "wrapped": {0, 1, 2}, "wrappedValue": {0, 1, 2}, + "callable": {0, 1, 2}, "callableValue": {0, 1, 2}, + "recur": {0, 1, 2}, "localObject": {0, 1, 2}, "localSelf": {0, 1, 2}, + "recursiveArray": {0, 1, 2}, "recursiveTuple": {0, 1, 2}, "recursiveUnion": {0, 1, 2}, + "aliasOwner": {0, 1, 2}, "siblingOwners": {0, 1, 2}, + }) } diff --git a/tsc/internal/fourslash/tests/quickinfoVerbosityTruncation1_test.go b/tsc/internal/fourslash/tests/quickinfoVerbosityTruncation1_test.go index 03459d13b8038..a8c1ae8300438 100644 --- a/tsc/internal/fourslash/tests/quickinfoVerbosityTruncation1_test.go +++ b/tsc/internal/fourslash/tests/quickinfoVerbosityTruncation1_test.go @@ -1,9 +1,11 @@ package fourslash_test import ( + "strconv" "testing" "github.com/microsoft/TypeScript/tsc/internal/fourslash" + "github.com/microsoft/TypeScript/tsc/internal/ls/lsutil" "github.com/microsoft/TypeScript/tsc/internal/testutil" ) @@ -39,3 +41,19 @@ const obj1/*o1*/: LotsOfProps = undefined as any as LotsOfProps;` defer done() f.VerifyBaselineHoverWithVerbosity(t, map[string][]int{"o1": {0, 1}}) } + +func TestQuickinfoVerbosityInstantiationTruncation(t *testing.T) { + t.Parallel() + for _, length := range []int{20, 40, 80} { + t.Run("quickinfoVerbosityInstantiationTruncation"+strconv.Itoa(length), func(t *testing.T) { + t.Parallel() + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `declare function f(value: T): T; +type Sample/*sample*/ = (aVeryLongParameterNameThatExceedsTheBudget: string) => typeof f;` + f, done := fourslash.NewFourslash(t, nil /*capabilities*/, content) + defer done() + f.Configure(t, lsutil.UserPreferences{MaximumHoverLength: length}) + f.VerifyBaselineHoverWithVerbosity(t, map[string][]int{"sample": {0, 1, 2}}) + }) + } +} diff --git a/tsc/internal/fourslash/tests/recursiveFunctionQuickInfo_test.go b/tsc/internal/fourslash/tests/recursiveFunctionQuickInfo_test.go new file mode 100644 index 0000000000000..d2f3a63cdddfd --- /dev/null +++ b/tsc/internal/fourslash/tests/recursiveFunctionQuickInfo_test.go @@ -0,0 +1,133 @@ +package fourslash_test + +import ( + "testing" + + "github.com/microsoft/TypeScript/tsc/internal/fourslash" + "github.com/microsoft/TypeScript/tsc/internal/testutil" +) + +func TestRecursiveFunctionQuickInfo(t *testing.T) { + t.Parallel() + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = ` +const arrow/*arrow*/ = () => arrow; +const broad: unknown = function self/*self*/() { return self; }; +arrow/*use*/()(); +const object/*object*/ = { next: () => object }; +const tuple/*tuple*/ = [() => tuple] as const; +arrow/*reference*/; +const alias = arrow; +alias/*aliasUse*/(); +` + f, done := fourslash.NewFourslash(t, nil, content) + defer done() + f.VerifyQuickInfoAt(t, "arrow", "const arrow: () => typeof arrow", "") + f.VerifyQuickInfoAt(t, "use", "const arrow: () => () => typeof arrow", "") + f.VerifyQuickInfoAt(t, "self", "function self(): () => typeof broad", "") + f.VerifyQuickInfoAt(t, "object", "const object: {\n next: () => ...;\n}", "") + f.VerifyQuickInfoAt(t, "tuple", "const tuple: readonly [() => ...]", "") + f.VerifyQuickInfoAt(t, "reference", "const arrow: () => typeof arrow", "") + f.VerifyQuickInfoAt(t, "aliasUse", "const alias: () => () => typeof arrow", "") + f.VerifyNoErrors(t) +} + +func TestRecursiveFunctionCallQuickInfo(t *testing.T) { + t.Parallel() + defer testutil.RecoverAndFail(t, "Panic on fourslash test") + const content = `// @strict: true +const arrow/*declaration*/ = () => arrow; +arrow/*call*/(); +const named = function self() { return self; }; +named/*namedCall*/(); +function recur() { return recur; } +recur/*functionCall*/(); +const generic = (value: T) => generic; +generic/*genericCall*/(1); +const specialized = generic; +specialized/*specializedCall*/("text"); +declare let narrowed: typeof arrow | undefined; +if (narrowed) narrowed/*narrowedCall*/(); +declare const broad: () => unknown; +broad/*broadCall*/(); +function overloaded(value: string): string; +function overloaded(value: number): typeof overloaded; +function overloaded(value: string | number): string | typeof overloaded { + return typeof value === "string" ? value : overloaded; +} +overloaded/*stringCall*/("text"); +overloaded/*numberCall*/(1); +const object = { recur() { return object.recur; } }; +object.recur/*methodCall*/(); +const first/*firstDeclaration*/ = () => second; +const second = () => first; +first/*firstCall*/(); +function genericFunction(value: T) { return genericFunction; } +genericFunction/*genericFunctionCall*/(1); +const callable = () => callable; +callable.property = 1; +callable/*callableCall*/(); +const other = () => 1; +const producer/*producerDeclaration*/ = () => other; +producer/*producerCall*/(); +function make(value: T) { + return { value, next: () => make("text") }; +} +const different/*differentInstantiations*/ = make(1); +const scoped/*scopedDeclaration*/ = { + first(outer: T) { + return { + nested(inner: T) { return { outer, inner, next: scoped }; }, + sibling(inner: T) { return { outer, inner, next: scoped }; }, + }; + }, + second(value: T) { return { value, next: scoped }; }, +}; +const numberScope = scoped.first/*scopedFirst*/(1); +numberScope.nested/*scopedNested*/("inner"); +numberScope.sibling/*scopedSibling*/(true); +scoped.second/*scopedSecond*/("text"); +const nestedOwner = { + make(outer: T) { + return { + nested(inner: U) { return { outer, inner, owner: nestedOwner }; }, + constrained(inner: U) { return { outer, inner, owner: nestedOwner }; }, + copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } { + return { outer, inner, owner: nestedOwner }; + }, + rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; }, + }; + }, +}; +const nestedNumber/*nestedNumber*/ = nestedOwner.make(1); +nestedNumber.nested/*nestedGeneric*/(true).owner.make/*nestedOwnerMake*/("text"); +nestedNumber.constrained/*nestedConstrained*/(2); +nestedNumber.copied/*nestedCopied*/("inner"); +nestedNumber.rest/*nestedRest*/(true); +declare const reused: { + first(...values: [T]): { value: T; next: typeof reused }; + second(value: T): { value: T; next: typeof reused }; + shadowed(reused: T): { value: T; next: typeof reused }; +}; +const copy/*reusedDeclaration*/ = reused; +copy.first/*reusedFirst*/(1); +copy.shadowed/*reusedShadowed*/(1);` + f, done := fourslash.NewFourslash(t, nil, content) + defer done() + f.VerifyNoErrors(t) + f.VerifyBaselineHoverWithVerbosity(t, map[string][]int{ + "declaration": {0, 1, 2}, "call": {0, 1, 2}, "namedCall": {0, 1, 2}, + "functionCall": {0, 1, 2}, "genericCall": {0}, "specializedCall": {0}, + "narrowedCall": {0, 1, 2}, "broadCall": {0, 1, 2}, + "stringCall": {0, 1, 2}, "numberCall": {0}, "methodCall": {0, 1, 2}, + "firstDeclaration": {0, 1, 2}, "firstCall": {0, 1, 2}, + "genericFunctionCall": {0}, "callableCall": {0, 1, 2}, + "producerDeclaration": {0, 1, 2}, "producerCall": {0, 1, 2}, + "differentInstantiations": {0}, + "scopedDeclaration": {0}, "scopedFirst": {0}, "scopedNested": {0}, + "scopedSibling": {0}, "scopedSecond": {0}, "reusedDeclaration": {0}, + "reusedFirst": {0}, "reusedShadowed": {0}, + "nestedNumber": {0}, "nestedGeneric": {0}, "nestedOwnerMake": {0}, + "nestedConstrained": {0}, "nestedCopied": {0}, "nestedRest": {0}, + }) +} diff --git a/tsc/testdata/baselines/reference/checker/typeToStringMergedNamespace.baseline b/tsc/testdata/baselines/reference/checker/typeToStringMergedNamespace.baseline new file mode 100644 index 0000000000000..18d189376e1ae --- /dev/null +++ b/tsc/testdata/baselines/reference/checker/typeToStringMergedNamespace.baseline @@ -0,0 +1,10 @@ +declare function f(value: T): T; +declare namespace f { const extra: number; } +type Sample = typeof f; + +useTypeOfFunction=false, verbosity=0: typeof f +useTypeOfFunction=false, verbosity=1: { (value: T): T; readonly extra: number; } +useTypeOfFunction=false, verbosity=2: { (value: T): T; readonly extra: number; } +useTypeOfFunction=true, verbosity=0: typeof f +useTypeOfFunction=true, verbosity=1: { (value: T): T; readonly extra: number; } +useTypeOfFunction=true, verbosity=2: { (value: T): T; readonly extra: number; } diff --git a/tsc/testdata/baselines/reference/compiler/isolatedDeclarationErrorsReturnTypes.errors.txt b/tsc/testdata/baselines/reference/compiler/isolatedDeclarationErrorsReturnTypes.errors.txt index 4981a650dbc48..cf9aaeeb43748 100644 --- a/tsc/testdata/baselines/reference/compiler/isolatedDeclarationErrorsReturnTypes.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/isolatedDeclarationErrorsReturnTypes.errors.txt @@ -1,38 +1,85 @@ -isolatedDeclarationErrorsReturnTypes.ts(13,45): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -isolatedDeclarationErrorsReturnTypes.ts(16,41): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -isolatedDeclarationErrorsReturnTypes.ts(19,41): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -isolatedDeclarationErrorsReturnTypes.ts(109,65): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -isolatedDeclarationErrorsReturnTypes.ts(112,61): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -isolatedDeclarationErrorsReturnTypes.ts(115,61): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -isolatedDeclarationErrorsReturnTypes.ts(119,83): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -isolatedDeclarationErrorsReturnTypes.ts(120,66): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -isolatedDeclarationErrorsReturnTypes.ts(122,79): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -isolatedDeclarationErrorsReturnTypes.ts(123,62): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -isolatedDeclarationErrorsReturnTypes.ts(125,79): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -isolatedDeclarationErrorsReturnTypes.ts(126,62): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -isolatedDeclarationErrorsReturnTypes.ts(138,73): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -isolatedDeclarationErrorsReturnTypes.ts(141,69): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -isolatedDeclarationErrorsReturnTypes.ts(144,69): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -isolatedDeclarationErrorsReturnTypes.ts(151,38): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -isolatedDeclarationErrorsReturnTypes.ts(152,21): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -isolatedDeclarationErrorsReturnTypes.ts(153,57): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -isolatedDeclarationErrorsReturnTypes.ts(154,40): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -isolatedDeclarationErrorsReturnTypes.ts(156,51): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -isolatedDeclarationErrorsReturnTypes.ts(157,34): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -isolatedDeclarationErrorsReturnTypes.ts(158,70): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -isolatedDeclarationErrorsReturnTypes.ts(159,53): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -isolatedDeclarationErrorsReturnTypes.ts(162,53): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -isolatedDeclarationErrorsReturnTypes.ts(163,36): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -isolatedDeclarationErrorsReturnTypes.ts(164,72): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -isolatedDeclarationErrorsReturnTypes.ts(165,55): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -isolatedDeclarationErrorsReturnTypes.ts(167,66): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -isolatedDeclarationErrorsReturnTypes.ts(168,49): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -isolatedDeclarationErrorsReturnTypes.ts(169,85): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -isolatedDeclarationErrorsReturnTypes.ts(170,68): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. +isolatedDeclarationErrorsReturnTypes.ts(2,14): error TS5088: The inferred type of 'recursiveArrow' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +isolatedDeclarationErrorsReturnTypes.ts(2,31): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. +isolatedDeclarationErrorsReturnTypes.ts(3,49): error TS9039: Type containing private name 'recursiveDeclaration' can't be used with --isolatedDeclarations. +isolatedDeclarationErrorsReturnTypes.ts(4,14): error TS5088: The inferred type of 'recursiveObject' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +isolatedDeclarationErrorsReturnTypes.ts(4,40): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. +isolatedDeclarationErrorsReturnTypes.ts(5,14): error TS5088: The inferred type of 'recursiveTuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +isolatedDeclarationErrorsReturnTypes.ts(5,32): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. +isolatedDeclarationErrorsReturnTypes.ts(6,14): error TS5088: The inferred type of 'recursiveNamed' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +isolatedDeclarationErrorsReturnTypes.ts(6,56): error TS9039: Type containing private name 'self' can't be used with --isolatedDeclarations. +isolatedDeclarationErrorsReturnTypes.ts(25,45): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. +isolatedDeclarationErrorsReturnTypes.ts(28,41): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. +isolatedDeclarationErrorsReturnTypes.ts(31,41): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. +isolatedDeclarationErrorsReturnTypes.ts(121,65): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. +isolatedDeclarationErrorsReturnTypes.ts(124,61): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. +isolatedDeclarationErrorsReturnTypes.ts(127,61): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. +isolatedDeclarationErrorsReturnTypes.ts(131,83): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. +isolatedDeclarationErrorsReturnTypes.ts(132,66): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. +isolatedDeclarationErrorsReturnTypes.ts(134,79): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. +isolatedDeclarationErrorsReturnTypes.ts(135,62): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. +isolatedDeclarationErrorsReturnTypes.ts(137,79): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. +isolatedDeclarationErrorsReturnTypes.ts(138,62): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. +isolatedDeclarationErrorsReturnTypes.ts(150,73): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. +isolatedDeclarationErrorsReturnTypes.ts(153,69): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. +isolatedDeclarationErrorsReturnTypes.ts(156,69): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. +isolatedDeclarationErrorsReturnTypes.ts(163,38): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. +isolatedDeclarationErrorsReturnTypes.ts(164,21): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. +isolatedDeclarationErrorsReturnTypes.ts(165,57): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. +isolatedDeclarationErrorsReturnTypes.ts(166,40): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. +isolatedDeclarationErrorsReturnTypes.ts(168,51): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. +isolatedDeclarationErrorsReturnTypes.ts(169,34): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. +isolatedDeclarationErrorsReturnTypes.ts(170,70): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. +isolatedDeclarationErrorsReturnTypes.ts(171,53): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. +isolatedDeclarationErrorsReturnTypes.ts(174,53): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. +isolatedDeclarationErrorsReturnTypes.ts(175,36): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. +isolatedDeclarationErrorsReturnTypes.ts(176,72): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. +isolatedDeclarationErrorsReturnTypes.ts(177,55): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. +isolatedDeclarationErrorsReturnTypes.ts(179,66): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. +isolatedDeclarationErrorsReturnTypes.ts(180,49): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. +isolatedDeclarationErrorsReturnTypes.ts(181,85): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. +isolatedDeclarationErrorsReturnTypes.ts(182,68): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -==== isolatedDeclarationErrorsReturnTypes.ts (31 errors) ==== +==== isolatedDeclarationErrorsReturnTypes.ts (40 errors) ==== // Function Variables + export const recursiveArrow = () => recursiveArrow; + ~~~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'recursiveArrow' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + ~~~~~~~~~~~~~~~~~~~~ +!!! error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. +!!! related TS9027 isolatedDeclarationErrorsReturnTypes.ts:2:14: Add a type annotation to the variable recursiveArrow. +!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:2:31: Add a return type to the function expression. + export function recursiveDeclaration() { return recursiveDeclaration; } + ~~~~~~~~~~~~~~~~~~~~ +!!! error TS9039: Type containing private name 'recursiveDeclaration' can't be used with --isolatedDeclarations. +!!! related TS9031 isolatedDeclarationErrorsReturnTypes.ts:3:17: Add a return type to the function declaration. + export const recursiveObject = { next: () => recursiveObject }; + ~~~~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'recursiveObject' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + ~~~~~~~~~~~~~~~~~~~~~ +!!! error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. +!!! related TS9027 isolatedDeclarationErrorsReturnTypes.ts:4:14: Add a type annotation to the variable recursiveObject. +!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:4:40: Add a return type to the function expression. + export const recursiveTuple = [() => recursiveTuple] as const; + ~~~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'recursiveTuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + ~~~~~~~~~~~~~~~~~~~~ +!!! error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. +!!! related TS9027 isolatedDeclarationErrorsReturnTypes.ts:5:14: Add a type annotation to the variable recursiveTuple. +!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:5:32: Add a return type to the function expression. + export const recursiveNamed = function self() { return self; }; + ~~~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'recursiveNamed' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + ~~~~ +!!! error TS9039: Type containing private name 'self' can't be used with --isolatedDeclarations. +!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:6:40: Add a return type to the function expression. + export const annotatedRecursiveArrow: () => typeof annotatedRecursiveArrow = () => annotatedRecursiveArrow; + export const annotatedRecursiveObject: { next: () => typeof annotatedRecursiveObject } = { + next: () => annotatedRecursiveObject, + }; + export type RecursiveLink = { value: T; next: RecursiveLink }; + export declare const recursiveLink: RecursiveLink; + export const fnExpressionConstVariable = function foo() { return 0;} export const fnArrowConstVariable = () => "S"; @@ -47,22 +94,22 @@ isolatedDeclarationErrorsReturnTypes.ts(170,68): error TS9007: Function must hav export const fnArrowConstVariableOk = (cb = function(){ }): string => "S"; ~~~~~~~~ !!! error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:13:40: Add a type annotation to the parameter cb. -!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:13:45: Add a return type to the function expression. +!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:25:40: Add a type annotation to the parameter cb. +!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:25:45: Add a return type to the function expression. export let fnExpressionLetVariableOk = function foo(): number { return 0;} export let fnArrowLetVariableOk = (cb = function(){ }): string => "S"; ~~~~~~~~ !!! error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:16:36: Add a type annotation to the parameter cb. -!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:16:41: Add a return type to the function expression. +!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:28:36: Add a type annotation to the parameter cb. +!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:28:41: Add a return type to the function expression. export var fnExpressionVarVariableOk = function foo(): number { return 0;} export var fnArrowVarVariableOk = (cb = function(){ }): string => "S"; ~~~~~~~~ !!! error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:19:36: Add a type annotation to the parameter cb. -!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:19:41: Add a return type to the function expression. +!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:31:36: Add a type annotation to the parameter cb. +!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:31:41: Add a return type to the function expression. // Not exported const fnExpressionConstVariableInternal = function foo() { return 0;} @@ -155,57 +202,57 @@ isolatedDeclarationErrorsReturnTypes.ts(170,68): error TS9007: Function must hav export const fnParamExpressionConstVariable = function foo(cb = function(){ }) { return 0;} ~~~~~~~~ !!! error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:109:60: Add a type annotation to the parameter cb. -!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:109:65: Add a return type to the function expression. +!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:121:60: Add a type annotation to the parameter cb. +!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:121:65: Add a return type to the function expression. export const fnParamArrowConstVariable = (cb = () => 1) => "S"; export let fnParamExpressionLetVariable = function foo(cb = function(){ }) { return 0;} ~~~~~~~~ !!! error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:112:56: Add a type annotation to the parameter cb. -!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:112:61: Add a return type to the function expression. +!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:124:56: Add a type annotation to the parameter cb. +!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:124:61: Add a return type to the function expression. export let fnParamArrowLetVariable = (cb = () => 1) => "S"; export var fnParamExpressionVarVariable = function foo(cb = function(){ }) { return 0;} ~~~~~~~~ !!! error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:115:56: Add a type annotation to the parameter cb. -!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:115:61: Add a return type to the function expression. +!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:127:56: Add a type annotation to the parameter cb. +!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:127:61: Add a return type to the function expression. export var fnParamArrowVarVariable = (cb = () => 1) => "S"; // In Function Variables - No annotations on parameter export const fnParamExpressionConstVariableOwnerHasReturnType = function foo(cb = function(){ }): number { return 0;} ~~~~~~~~ !!! error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:119:78: Add a type annotation to the parameter cb. -!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:119:83: Add a return type to the function expression. +!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:131:78: Add a type annotation to the parameter cb. +!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:131:83: Add a return type to the function expression. export const fnParamArrowConstVariableOwnerHasReturnType = (cb = function(){ }): string => "S"; ~~~~~~~~ !!! error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:120:61: Add a type annotation to the parameter cb. -!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:120:66: Add a return type to the function expression. +!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:132:61: Add a type annotation to the parameter cb. +!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:132:66: Add a return type to the function expression. export let fnParamExpressionLetVariableOwnerHasReturnType = function foo(cb = function(){ }): number { return 0;} ~~~~~~~~ !!! error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:122:74: Add a type annotation to the parameter cb. -!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:122:79: Add a return type to the function expression. +!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:134:74: Add a type annotation to the parameter cb. +!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:134:79: Add a return type to the function expression. export let fnParamArrowLetVariableOwnerHasReturnType = (cb = function(){ }): string => "S"; ~~~~~~~~ !!! error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:123:57: Add a type annotation to the parameter cb. -!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:123:62: Add a return type to the function expression. +!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:135:57: Add a type annotation to the parameter cb. +!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:135:62: Add a return type to the function expression. export var fnParamExpressionVarVariableOwnerHasReturnType = function foo(cb = function(){ }): number { return 0;} ~~~~~~~~ !!! error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:125:74: Add a type annotation to the parameter cb. -!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:125:79: Add a return type to the function expression. +!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:137:74: Add a type annotation to the parameter cb. +!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:137:79: Add a return type to the function expression. export var fnParamArrowVarVariableOwnerHasReturnType = (cb = function(){ }): string => "S"; ~~~~~~~~ !!! error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:126:57: Add a type annotation to the parameter cb. -!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:126:62: Add a return type to the function expression. +!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:138:57: Add a type annotation to the parameter cb. +!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:138:62: Add a return type to the function expression. // No Errors export const fnParamExpressionConstVariableOk = function foo(cb = function(): void{ }): number { return 0;} @@ -220,22 +267,22 @@ isolatedDeclarationErrorsReturnTypes.ts(170,68): error TS9007: Function must hav export const fnParamExpressionConstVariableInternal = function foo(cb = function(){ }) { return 0;} ~~~~~~~~ !!! error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:138:68: Add a type annotation to the parameter cb. -!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:138:73: Add a return type to the function expression. +!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:150:68: Add a type annotation to the parameter cb. +!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:150:73: Add a return type to the function expression. export const fnParamArrowConstVariableInternal = (cb = () => 1) => "S"; export let fnParamExpressionLetVariableInternal = function foo(cb = function(){ }) { return 0;} ~~~~~~~~ !!! error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:141:64: Add a type annotation to the parameter cb. -!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:141:69: Add a return type to the function expression. +!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:153:64: Add a type annotation to the parameter cb. +!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:153:69: Add a return type to the function expression. export let fnParamArrowLetVariableInternal = (cb = () => 1) => "S"; export var fnParamExpressionVarVariableInternal = function foo(cb = function(){ }) { return 0;} ~~~~~~~~ !!! error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:144:64: Add a type annotation to the parameter cb. -!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:144:69: Add a return type to the function expression. +!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:156:64: Add a type annotation to the parameter cb. +!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:156:69: Add a return type to the function expression. export var fnParamArrowVarVariableInternal = (cb = () => 1) => "S"; @@ -245,87 +292,87 @@ isolatedDeclarationErrorsReturnTypes.ts(170,68): error TS9007: Function must hav fnExpression = function foo(cb = function(){ }) { return 0; } ~~~~~~~~ !!! error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:151:33: Add a type annotation to the parameter cb. -!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:151:38: Add a return type to the function expression. +!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:163:33: Add a type annotation to the parameter cb. +!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:163:38: Add a return type to the function expression. fnArrow = (cb = function(){ }) => "S"; ~~~~~~~~ !!! error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:152:16: Add a type annotation to the parameter cb. -!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:152:21: Add a return type to the function expression. +!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:164:16: Add a type annotation to the parameter cb. +!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:164:21: Add a return type to the function expression. protected fnExpressionProtected = function foo(cb = function(){ }) { return 0; } ~~~~~~~~ !!! error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:153:52: Add a type annotation to the parameter cb. -!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:153:57: Add a return type to the function expression. +!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:165:52: Add a type annotation to the parameter cb. +!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:165:57: Add a return type to the function expression. protected fnArrowProtected = (cb = function(){ }) => "S"; ~~~~~~~~ !!! error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:154:35: Add a type annotation to the parameter cb. -!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:154:40: Add a return type to the function expression. +!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:166:35: Add a type annotation to the parameter cb. +!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:166:40: Add a return type to the function expression. static fnStaticExpression = function foo(cb = function(){ }) { return 0; } ~~~~~~~~ !!! error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:156:46: Add a type annotation to the parameter cb. -!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:156:51: Add a return type to the function expression. +!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:168:46: Add a type annotation to the parameter cb. +!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:168:51: Add a return type to the function expression. static fnStaticArrow = (cb = function(){ }) => "S"; ~~~~~~~~ !!! error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:157:29: Add a type annotation to the parameter cb. -!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:157:34: Add a return type to the function expression. +!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:169:29: Add a type annotation to the parameter cb. +!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:169:34: Add a return type to the function expression. protected static fnStaticExpressionProtected = function foo(cb = function(){ }) { return 0; } ~~~~~~~~ !!! error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:158:65: Add a type annotation to the parameter cb. -!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:158:70: Add a return type to the function expression. +!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:170:65: Add a type annotation to the parameter cb. +!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:170:70: Add a return type to the function expression. protected static fnStaticArrowProtected = (cb = function(){ }) => "S"; ~~~~~~~~ !!! error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:159:48: Add a type annotation to the parameter cb. -!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:159:53: Add a return type to the function expression. +!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:171:48: Add a type annotation to the parameter cb. +!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:171:53: Add a return type to the function expression. // Have annotation on owner fnExpressionMethodHasReturn = function foo(cb = function(){ }): number { return 0; } ~~~~~~~~ !!! error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:162:48: Add a type annotation to the parameter cb. -!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:162:53: Add a return type to the function expression. +!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:174:48: Add a type annotation to the parameter cb. +!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:174:53: Add a return type to the function expression. fnArrowMethodHasReturn = (cb = function(){ }): string => "S"; ~~~~~~~~ !!! error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:163:31: Add a type annotation to the parameter cb. -!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:163:36: Add a return type to the function expression. +!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:175:31: Add a type annotation to the parameter cb. +!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:175:36: Add a return type to the function expression. protected fnExpressionProtectedMethodHasReturn = function foo(cb = function(){ }): number { return 0; } ~~~~~~~~ !!! error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:164:67: Add a type annotation to the parameter cb. -!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:164:72: Add a return type to the function expression. +!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:176:67: Add a type annotation to the parameter cb. +!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:176:72: Add a return type to the function expression. protected fnArrowProtectedMethodHasReturn = (cb = function(){ }): string => "S"; ~~~~~~~~ !!! error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:165:50: Add a type annotation to the parameter cb. -!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:165:55: Add a return type to the function expression. +!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:177:50: Add a type annotation to the parameter cb. +!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:177:55: Add a return type to the function expression. static fnStaticExpressionMethodHasReturn = function foo(cb = function(){ }): number { return 0; } ~~~~~~~~ !!! error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:167:61: Add a type annotation to the parameter cb. -!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:167:66: Add a return type to the function expression. +!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:179:61: Add a type annotation to the parameter cb. +!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:179:66: Add a return type to the function expression. static fnStaticArrowMethodHasReturn = (cb = function(){ }): string => "S"; ~~~~~~~~ !!! error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:168:44: Add a type annotation to the parameter cb. -!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:168:49: Add a return type to the function expression. +!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:180:44: Add a type annotation to the parameter cb. +!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:180:49: Add a return type to the function expression. protected static fnStaticExpressionProtectedMethodHasReturn = function foo(cb = function(){ }): number { return 0; } ~~~~~~~~ !!! error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:169:80: Add a type annotation to the parameter cb. -!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:169:85: Add a return type to the function expression. +!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:181:80: Add a type annotation to the parameter cb. +!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:181:85: Add a return type to the function expression. protected static fnStaticArrowProtectedMethodHasReturn = (cb = function(){ }): string => "S"; ~~~~~~~~ !!! error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:170:63: Add a type annotation to the parameter cb. -!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:170:68: Add a return type to the function expression. +!!! related TS9028 isolatedDeclarationErrorsReturnTypes.ts:182:63: Add a type annotation to the parameter cb. +!!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:182:68: Add a return type to the function expression. // Have annotation only on parameter fnExpressionOnlyOnParam = function foo(cb = function(): void { }) { return 0; } diff --git a/tsc/testdata/baselines/reference/compiler/isolatedDeclarationErrorsReturnTypes.js b/tsc/testdata/baselines/reference/compiler/isolatedDeclarationErrorsReturnTypes.js index 8dd9ad0d8a0c6..43d6f423b7eab 100644 --- a/tsc/testdata/baselines/reference/compiler/isolatedDeclarationErrorsReturnTypes.js +++ b/tsc/testdata/baselines/reference/compiler/isolatedDeclarationErrorsReturnTypes.js @@ -2,6 +2,18 @@ //// [isolatedDeclarationErrorsReturnTypes.ts] // Function Variables +export const recursiveArrow = () => recursiveArrow; +export function recursiveDeclaration() { return recursiveDeclaration; } +export const recursiveObject = { next: () => recursiveObject }; +export const recursiveTuple = [() => recursiveTuple] as const; +export const recursiveNamed = function self() { return self; }; +export const annotatedRecursiveArrow: () => typeof annotatedRecursiveArrow = () => annotatedRecursiveArrow; +export const annotatedRecursiveObject: { next: () => typeof annotatedRecursiveObject } = { + next: () => annotatedRecursiveObject, +}; +export type RecursiveLink = { value: T; next: RecursiveLink }; +export declare const recursiveLink: RecursiveLink; + export const fnExpressionConstVariable = function foo() { return 0;} export const fnArrowConstVariable = () => "S"; @@ -207,6 +219,15 @@ export class FnParamsExportedClass { //// [isolatedDeclarationErrorsReturnTypes.js] // Function Variables +export const recursiveArrow = () => recursiveArrow; +export function recursiveDeclaration() { return recursiveDeclaration; } +export const recursiveObject = { next: () => recursiveObject }; +export const recursiveTuple = [() => recursiveTuple]; +export const recursiveNamed = function self() { return self; }; +export const annotatedRecursiveArrow = () => annotatedRecursiveArrow; +export const annotatedRecursiveObject = { + next: () => annotatedRecursiveObject, +}; export const fnExpressionConstVariable = function foo() { return 0; }; export const fnArrowConstVariable = () => "S"; export let fnExpressionLetVariable = function foo() { return 0; }; diff --git a/tsc/testdata/baselines/reference/compiler/isolatedDeclarationErrorsReturnTypes.symbols b/tsc/testdata/baselines/reference/compiler/isolatedDeclarationErrorsReturnTypes.symbols index 73fc1948025e5..d23a1522bd9af 100644 --- a/tsc/testdata/baselines/reference/compiler/isolatedDeclarationErrorsReturnTypes.symbols +++ b/tsc/testdata/baselines/reference/compiler/isolatedDeclarationErrorsReturnTypes.symbols @@ -2,556 +2,607 @@ === isolatedDeclarationErrorsReturnTypes.ts === // Function Variables +export const recursiveArrow = () => recursiveArrow; +>recursiveArrow : Symbol(recursiveArrow, Decl(isolatedDeclarationErrorsReturnTypes.ts, 1, 12)) +>recursiveArrow : Symbol(recursiveArrow, Decl(isolatedDeclarationErrorsReturnTypes.ts, 1, 12)) + +export function recursiveDeclaration() { return recursiveDeclaration; } +>recursiveDeclaration : Symbol(recursiveDeclaration, Decl(isolatedDeclarationErrorsReturnTypes.ts, 1, 51)) +>recursiveDeclaration : Symbol(recursiveDeclaration, Decl(isolatedDeclarationErrorsReturnTypes.ts, 1, 51)) + +export const recursiveObject = { next: () => recursiveObject }; +>recursiveObject : Symbol(recursiveObject, Decl(isolatedDeclarationErrorsReturnTypes.ts, 3, 12)) +>next : Symbol(next, Decl(isolatedDeclarationErrorsReturnTypes.ts, 3, 32)) +>recursiveObject : Symbol(recursiveObject, Decl(isolatedDeclarationErrorsReturnTypes.ts, 3, 12)) + +export const recursiveTuple = [() => recursiveTuple] as const; +>recursiveTuple : Symbol(recursiveTuple, Decl(isolatedDeclarationErrorsReturnTypes.ts, 4, 12)) +>recursiveTuple : Symbol(recursiveTuple, Decl(isolatedDeclarationErrorsReturnTypes.ts, 4, 12)) +>const : Symbol(const) + +export const recursiveNamed = function self() { return self; }; +>recursiveNamed : Symbol(recursiveNamed, Decl(isolatedDeclarationErrorsReturnTypes.ts, 5, 12)) +>self : Symbol(self, Decl(isolatedDeclarationErrorsReturnTypes.ts, 5, 29)) +>self : Symbol(self, Decl(isolatedDeclarationErrorsReturnTypes.ts, 5, 29)) + +export const annotatedRecursiveArrow: () => typeof annotatedRecursiveArrow = () => annotatedRecursiveArrow; +>annotatedRecursiveArrow : Symbol(annotatedRecursiveArrow, Decl(isolatedDeclarationErrorsReturnTypes.ts, 6, 12)) +>annotatedRecursiveArrow : Symbol(annotatedRecursiveArrow, Decl(isolatedDeclarationErrorsReturnTypes.ts, 6, 12)) +>annotatedRecursiveArrow : Symbol(annotatedRecursiveArrow, Decl(isolatedDeclarationErrorsReturnTypes.ts, 6, 12)) + +export const annotatedRecursiveObject: { next: () => typeof annotatedRecursiveObject } = { +>annotatedRecursiveObject : Symbol(annotatedRecursiveObject, Decl(isolatedDeclarationErrorsReturnTypes.ts, 7, 12)) +>next : Symbol(next, Decl(isolatedDeclarationErrorsReturnTypes.ts, 7, 40)) +>annotatedRecursiveObject : Symbol(annotatedRecursiveObject, Decl(isolatedDeclarationErrorsReturnTypes.ts, 7, 12)) + + next: () => annotatedRecursiveObject, +>next : Symbol(next, Decl(isolatedDeclarationErrorsReturnTypes.ts, 7, 90)) +>annotatedRecursiveObject : Symbol(annotatedRecursiveObject, Decl(isolatedDeclarationErrorsReturnTypes.ts, 7, 12)) + +}; +export type RecursiveLink = { value: T; next: RecursiveLink }; +>RecursiveLink : Symbol(RecursiveLink, Decl(isolatedDeclarationErrorsReturnTypes.ts, 9, 2)) +>T : Symbol(T, Decl(isolatedDeclarationErrorsReturnTypes.ts, 10, 26)) +>value : Symbol(value, Decl(isolatedDeclarationErrorsReturnTypes.ts, 10, 32)) +>T : Symbol(T, Decl(isolatedDeclarationErrorsReturnTypes.ts, 10, 26)) +>next : Symbol(next, Decl(isolatedDeclarationErrorsReturnTypes.ts, 10, 42)) +>RecursiveLink : Symbol(RecursiveLink, Decl(isolatedDeclarationErrorsReturnTypes.ts, 9, 2)) +>T : Symbol(T, Decl(isolatedDeclarationErrorsReturnTypes.ts, 10, 26)) + +export declare const recursiveLink: RecursiveLink; +>recursiveLink : Symbol(recursiveLink, Decl(isolatedDeclarationErrorsReturnTypes.ts, 11, 20)) +>RecursiveLink : Symbol(RecursiveLink, Decl(isolatedDeclarationErrorsReturnTypes.ts, 9, 2)) + export const fnExpressionConstVariable = function foo() { return 0;} ->fnExpressionConstVariable : Symbol(fnExpressionConstVariable, Decl(isolatedDeclarationErrorsReturnTypes.ts, 1, 12)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 1, 40)) +>fnExpressionConstVariable : Symbol(fnExpressionConstVariable, Decl(isolatedDeclarationErrorsReturnTypes.ts, 13, 12)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 13, 40)) export const fnArrowConstVariable = () => "S"; ->fnArrowConstVariable : Symbol(fnArrowConstVariable, Decl(isolatedDeclarationErrorsReturnTypes.ts, 2, 12)) +>fnArrowConstVariable : Symbol(fnArrowConstVariable, Decl(isolatedDeclarationErrorsReturnTypes.ts, 14, 12)) export let fnExpressionLetVariable = function foo() { return 0;} ->fnExpressionLetVariable : Symbol(fnExpressionLetVariable, Decl(isolatedDeclarationErrorsReturnTypes.ts, 4, 10)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 4, 36)) +>fnExpressionLetVariable : Symbol(fnExpressionLetVariable, Decl(isolatedDeclarationErrorsReturnTypes.ts, 16, 10)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 16, 36)) export let fnArrowLetVariable = () => "S"; ->fnArrowLetVariable : Symbol(fnArrowLetVariable, Decl(isolatedDeclarationErrorsReturnTypes.ts, 5, 10)) +>fnArrowLetVariable : Symbol(fnArrowLetVariable, Decl(isolatedDeclarationErrorsReturnTypes.ts, 17, 10)) export var fnExpressionVarVariable = function foo() { return 0;} ->fnExpressionVarVariable : Symbol(fnExpressionVarVariable, Decl(isolatedDeclarationErrorsReturnTypes.ts, 7, 10)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 7, 36)) +>fnExpressionVarVariable : Symbol(fnExpressionVarVariable, Decl(isolatedDeclarationErrorsReturnTypes.ts, 19, 10)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 19, 36)) export var fnArrowVarVariable = () => "S"; ->fnArrowVarVariable : Symbol(fnArrowVarVariable, Decl(isolatedDeclarationErrorsReturnTypes.ts, 8, 10)) +>fnArrowVarVariable : Symbol(fnArrowVarVariable, Decl(isolatedDeclarationErrorsReturnTypes.ts, 20, 10)) // No Errors export const fnExpressionConstVariableOk = function foo(): number { return 0;} ->fnExpressionConstVariableOk : Symbol(fnExpressionConstVariableOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 11, 12)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 11, 42)) +>fnExpressionConstVariableOk : Symbol(fnExpressionConstVariableOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 23, 12)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 23, 42)) export const fnArrowConstVariableOk = (cb = function(){ }): string => "S"; ->fnArrowConstVariableOk : Symbol(fnArrowConstVariableOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 12, 12)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 12, 39)) +>fnArrowConstVariableOk : Symbol(fnArrowConstVariableOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 24, 12)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 24, 39)) export let fnExpressionLetVariableOk = function foo(): number { return 0;} ->fnExpressionLetVariableOk : Symbol(fnExpressionLetVariableOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 14, 10)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 14, 38)) +>fnExpressionLetVariableOk : Symbol(fnExpressionLetVariableOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 26, 10)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 26, 38)) export let fnArrowLetVariableOk = (cb = function(){ }): string => "S"; ->fnArrowLetVariableOk : Symbol(fnArrowLetVariableOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 15, 10)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 15, 35)) +>fnArrowLetVariableOk : Symbol(fnArrowLetVariableOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 27, 10)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 27, 35)) export var fnExpressionVarVariableOk = function foo(): number { return 0;} ->fnExpressionVarVariableOk : Symbol(fnExpressionVarVariableOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 17, 10)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 17, 38)) +>fnExpressionVarVariableOk : Symbol(fnExpressionVarVariableOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 29, 10)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 29, 38)) export var fnArrowVarVariableOk = (cb = function(){ }): string => "S"; ->fnArrowVarVariableOk : Symbol(fnArrowVarVariableOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 18, 10)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 18, 35)) +>fnArrowVarVariableOk : Symbol(fnArrowVarVariableOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 30, 10)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 30, 35)) // Not exported const fnExpressionConstVariableInternal = function foo() { return 0;} ->fnExpressionConstVariableInternal : Symbol(fnExpressionConstVariableInternal, Decl(isolatedDeclarationErrorsReturnTypes.ts, 21, 5)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 21, 41)) +>fnExpressionConstVariableInternal : Symbol(fnExpressionConstVariableInternal, Decl(isolatedDeclarationErrorsReturnTypes.ts, 33, 5)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 33, 41)) const fnArrowConstVariableInternal = () => "S"; ->fnArrowConstVariableInternal : Symbol(fnArrowConstVariableInternal, Decl(isolatedDeclarationErrorsReturnTypes.ts, 22, 5)) +>fnArrowConstVariableInternal : Symbol(fnArrowConstVariableInternal, Decl(isolatedDeclarationErrorsReturnTypes.ts, 34, 5)) let fnExpressionLetVariableInternal = function foo() { return 0;} ->fnExpressionLetVariableInternal : Symbol(fnExpressionLetVariableInternal, Decl(isolatedDeclarationErrorsReturnTypes.ts, 24, 3)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 24, 37)) +>fnExpressionLetVariableInternal : Symbol(fnExpressionLetVariableInternal, Decl(isolatedDeclarationErrorsReturnTypes.ts, 36, 3)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 36, 37)) let fnArrowLetVariableInternal = () => "S"; ->fnArrowLetVariableInternal : Symbol(fnArrowLetVariableInternal, Decl(isolatedDeclarationErrorsReturnTypes.ts, 25, 3)) +>fnArrowLetVariableInternal : Symbol(fnArrowLetVariableInternal, Decl(isolatedDeclarationErrorsReturnTypes.ts, 37, 3)) var fnExpressionVarVariableInternal = function foo() { return 0;} ->fnExpressionVarVariableInternal : Symbol(fnExpressionVarVariableInternal, Decl(isolatedDeclarationErrorsReturnTypes.ts, 27, 3)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 27, 37)) +>fnExpressionVarVariableInternal : Symbol(fnExpressionVarVariableInternal, Decl(isolatedDeclarationErrorsReturnTypes.ts, 39, 3)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 39, 37)) var fnArrowVarVariableInternal = () => "S"; ->fnArrowVarVariableInternal : Symbol(fnArrowVarVariableInternal, Decl(isolatedDeclarationErrorsReturnTypes.ts, 28, 3)) +>fnArrowVarVariableInternal : Symbol(fnArrowVarVariableInternal, Decl(isolatedDeclarationErrorsReturnTypes.ts, 40, 3)) // Function Fields export class ExportedClass { ->ExportedClass : Symbol(ExportedClass, Decl(isolatedDeclarationErrorsReturnTypes.ts, 28, 43)) +>ExportedClass : Symbol(ExportedClass, Decl(isolatedDeclarationErrorsReturnTypes.ts, 40, 43)) // Should Error fnExpression = function foo() { return 0; } ->fnExpression : Symbol(ExportedClass.fnExpression, Decl(isolatedDeclarationErrorsReturnTypes.ts, 31, 28)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 33, 18)) +>fnExpression : Symbol(ExportedClass.fnExpression, Decl(isolatedDeclarationErrorsReturnTypes.ts, 43, 28)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 45, 18)) fnArrow = () => "S"; ->fnArrow : Symbol(ExportedClass.fnArrow, Decl(isolatedDeclarationErrorsReturnTypes.ts, 33, 47)) +>fnArrow : Symbol(ExportedClass.fnArrow, Decl(isolatedDeclarationErrorsReturnTypes.ts, 45, 47)) protected fnExpressionProtected = function foo() { return 0; } ->fnExpressionProtected : Symbol(ExportedClass.fnExpressionProtected, Decl(isolatedDeclarationErrorsReturnTypes.ts, 34, 24)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 35, 37)) +>fnExpressionProtected : Symbol(ExportedClass.fnExpressionProtected, Decl(isolatedDeclarationErrorsReturnTypes.ts, 46, 24)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 47, 37)) protected fnArrowProtected = () => "S"; ->fnArrowProtected : Symbol(ExportedClass.fnArrowProtected, Decl(isolatedDeclarationErrorsReturnTypes.ts, 35, 66)) +>fnArrowProtected : Symbol(ExportedClass.fnArrowProtected, Decl(isolatedDeclarationErrorsReturnTypes.ts, 47, 66)) static fnStaticExpression = function foo() { return 0; } ->fnStaticExpression : Symbol(ExportedClass.fnStaticExpression, Decl(isolatedDeclarationErrorsReturnTypes.ts, 36, 43)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 38, 31)) +>fnStaticExpression : Symbol(ExportedClass.fnStaticExpression, Decl(isolatedDeclarationErrorsReturnTypes.ts, 48, 43)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 50, 31)) static fnStaticArrow = () => "S"; ->fnStaticArrow : Symbol(ExportedClass.fnStaticArrow, Decl(isolatedDeclarationErrorsReturnTypes.ts, 38, 60)) +>fnStaticArrow : Symbol(ExportedClass.fnStaticArrow, Decl(isolatedDeclarationErrorsReturnTypes.ts, 50, 60)) protected static fnStaticExpressionProtected = function foo() { return 0; } ->fnStaticExpressionProtected : Symbol(ExportedClass.fnStaticExpressionProtected, Decl(isolatedDeclarationErrorsReturnTypes.ts, 39, 37)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 40, 50)) +>fnStaticExpressionProtected : Symbol(ExportedClass.fnStaticExpressionProtected, Decl(isolatedDeclarationErrorsReturnTypes.ts, 51, 37)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 52, 50)) protected static fnStaticArrowProtected = () => "S"; ->fnStaticArrowProtected : Symbol(ExportedClass.fnStaticArrowProtected, Decl(isolatedDeclarationErrorsReturnTypes.ts, 40, 79)) +>fnStaticArrowProtected : Symbol(ExportedClass.fnStaticArrowProtected, Decl(isolatedDeclarationErrorsReturnTypes.ts, 52, 79)) // Have annotation, so ok fnExpressionOk = function foo(): number { return 0; } ->fnExpressionOk : Symbol(ExportedClass.fnExpressionOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 41, 56)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 44, 20)) +>fnExpressionOk : Symbol(ExportedClass.fnExpressionOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 53, 56)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 56, 20)) fnArrowOK = (): string => "S"; ->fnArrowOK : Symbol(ExportedClass.fnArrowOK, Decl(isolatedDeclarationErrorsReturnTypes.ts, 44, 57)) +>fnArrowOK : Symbol(ExportedClass.fnArrowOK, Decl(isolatedDeclarationErrorsReturnTypes.ts, 56, 57)) protected fnExpressionProtectedOk = function foo(): number { return 0; } ->fnExpressionProtectedOk : Symbol(ExportedClass.fnExpressionProtectedOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 45, 34)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 46, 39)) +>fnExpressionProtectedOk : Symbol(ExportedClass.fnExpressionProtectedOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 57, 34)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 58, 39)) protected fnArrowProtectedOK = (): string => "S"; ->fnArrowProtectedOK : Symbol(ExportedClass.fnArrowProtectedOK, Decl(isolatedDeclarationErrorsReturnTypes.ts, 46, 76)) +>fnArrowProtectedOK : Symbol(ExportedClass.fnArrowProtectedOK, Decl(isolatedDeclarationErrorsReturnTypes.ts, 58, 76)) static fnStaticExpressionOk = function foo(): number { return 0; } ->fnStaticExpressionOk : Symbol(ExportedClass.fnStaticExpressionOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 47, 53)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 49, 33)) +>fnStaticExpressionOk : Symbol(ExportedClass.fnStaticExpressionOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 59, 53)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 61, 33)) static fnStaticArrowOk = (): string => "S"; ->fnStaticArrowOk : Symbol(ExportedClass.fnStaticArrowOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 49, 70)) +>fnStaticArrowOk : Symbol(ExportedClass.fnStaticArrowOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 61, 70)) protected static fnStaticExpressionProtectedOk = function foo(): number { return 0; } ->fnStaticExpressionProtectedOk : Symbol(ExportedClass.fnStaticExpressionProtectedOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 50, 47)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 51, 52)) +>fnStaticExpressionProtectedOk : Symbol(ExportedClass.fnStaticExpressionProtectedOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 62, 47)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 63, 52)) protected static fnStaticArrowProtectedOk = (): string => "S"; ->fnStaticArrowProtectedOk : Symbol(ExportedClass.fnStaticArrowProtectedOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 51, 89)) +>fnStaticArrowProtectedOk : Symbol(ExportedClass.fnStaticArrowProtectedOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 63, 89)) // No Error not in declarations private fnExpressionPrivate = function foo() { return 0; } ->fnExpressionPrivate : Symbol(ExportedClass.fnExpressionPrivate, Decl(isolatedDeclarationErrorsReturnTypes.ts, 52, 66)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 56, 33)) +>fnExpressionPrivate : Symbol(ExportedClass.fnExpressionPrivate, Decl(isolatedDeclarationErrorsReturnTypes.ts, 64, 66)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 68, 33)) private fnArrowPrivate = () => "S"; ->fnArrowPrivate : Symbol(ExportedClass.fnArrowPrivate, Decl(isolatedDeclarationErrorsReturnTypes.ts, 56, 62)) +>fnArrowPrivate : Symbol(ExportedClass.fnArrowPrivate, Decl(isolatedDeclarationErrorsReturnTypes.ts, 68, 62)) #fnArrow = () => "S"; ->#fnArrow : Symbol(ExportedClass.#fnArrow, Decl(isolatedDeclarationErrorsReturnTypes.ts, 57, 39)) +>#fnArrow : Symbol(ExportedClass.#fnArrow, Decl(isolatedDeclarationErrorsReturnTypes.ts, 69, 39)) #fnExpression = function foo() { return 0;} ->#fnExpression : Symbol(ExportedClass.#fnExpression, Decl(isolatedDeclarationErrorsReturnTypes.ts, 58, 25)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 59, 19)) +>#fnExpression : Symbol(ExportedClass.#fnExpression, Decl(isolatedDeclarationErrorsReturnTypes.ts, 70, 25)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 71, 19)) private static fnStaticExpressionPrivate = function foo() { return 0; } ->fnStaticExpressionPrivate : Symbol(ExportedClass.fnStaticExpressionPrivate, Decl(isolatedDeclarationErrorsReturnTypes.ts, 59, 47)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 60, 46)) +>fnStaticExpressionPrivate : Symbol(ExportedClass.fnStaticExpressionPrivate, Decl(isolatedDeclarationErrorsReturnTypes.ts, 71, 47)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 72, 46)) private static fnStaticArrowPrivate = () => "S"; ->fnStaticArrowPrivate : Symbol(ExportedClass.fnStaticArrowPrivate, Decl(isolatedDeclarationErrorsReturnTypes.ts, 60, 75)) +>fnStaticArrowPrivate : Symbol(ExportedClass.fnStaticArrowPrivate, Decl(isolatedDeclarationErrorsReturnTypes.ts, 72, 75)) } // Should error class IndirectlyExportedClass { ->IndirectlyExportedClass : Symbol(IndirectlyExportedClass, Decl(isolatedDeclarationErrorsReturnTypes.ts, 62, 1)) +>IndirectlyExportedClass : Symbol(IndirectlyExportedClass, Decl(isolatedDeclarationErrorsReturnTypes.ts, 74, 1)) fnExpression = function foo() { return 0; } ->fnExpression : Symbol(IndirectlyExportedClass.fnExpression, Decl(isolatedDeclarationErrorsReturnTypes.ts, 65, 31)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 66, 18)) +>fnExpression : Symbol(IndirectlyExportedClass.fnExpression, Decl(isolatedDeclarationErrorsReturnTypes.ts, 77, 31)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 78, 18)) fnArrow = () => "S"; ->fnArrow : Symbol(IndirectlyExportedClass.fnArrow, Decl(isolatedDeclarationErrorsReturnTypes.ts, 66, 47)) +>fnArrow : Symbol(IndirectlyExportedClass.fnArrow, Decl(isolatedDeclarationErrorsReturnTypes.ts, 78, 47)) static fnStaticExpression = function foo() { return 0; } ->fnStaticExpression : Symbol(IndirectlyExportedClass.fnStaticExpression, Decl(isolatedDeclarationErrorsReturnTypes.ts, 67, 24)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 69, 31)) +>fnStaticExpression : Symbol(IndirectlyExportedClass.fnStaticExpression, Decl(isolatedDeclarationErrorsReturnTypes.ts, 79, 24)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 81, 31)) static fnStaticArrow = () => "S"; ->fnStaticArrow : Symbol(IndirectlyExportedClass.fnStaticArrow, Decl(isolatedDeclarationErrorsReturnTypes.ts, 69, 60)) +>fnStaticArrow : Symbol(IndirectlyExportedClass.fnStaticArrow, Decl(isolatedDeclarationErrorsReturnTypes.ts, 81, 60)) protected static fnStaticExpressionProtected = function foo() { return 0; } ->fnStaticExpressionProtected : Symbol(IndirectlyExportedClass.fnStaticExpressionProtected, Decl(isolatedDeclarationErrorsReturnTypes.ts, 70, 37)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 72, 50)) +>fnStaticExpressionProtected : Symbol(IndirectlyExportedClass.fnStaticExpressionProtected, Decl(isolatedDeclarationErrorsReturnTypes.ts, 82, 37)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 84, 50)) protected static fnStaticArrowProtected = () => "S"; ->fnStaticArrowProtected : Symbol(IndirectlyExportedClass.fnStaticArrowProtected, Decl(isolatedDeclarationErrorsReturnTypes.ts, 72, 79)) +>fnStaticArrowProtected : Symbol(IndirectlyExportedClass.fnStaticArrowProtected, Decl(isolatedDeclarationErrorsReturnTypes.ts, 84, 79)) private fnExpressionPrivate = function foo() { return 0; } ->fnExpressionPrivate : Symbol(IndirectlyExportedClass.fnExpressionPrivate, Decl(isolatedDeclarationErrorsReturnTypes.ts, 73, 56)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 75, 33)) +>fnExpressionPrivate : Symbol(IndirectlyExportedClass.fnExpressionPrivate, Decl(isolatedDeclarationErrorsReturnTypes.ts, 85, 56)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 87, 33)) private fnArrowPrivate = () => "S"; ->fnArrowPrivate : Symbol(IndirectlyExportedClass.fnArrowPrivate, Decl(isolatedDeclarationErrorsReturnTypes.ts, 75, 62)) +>fnArrowPrivate : Symbol(IndirectlyExportedClass.fnArrowPrivate, Decl(isolatedDeclarationErrorsReturnTypes.ts, 87, 62)) #fnArrow = () => "S"; ->#fnArrow : Symbol(IndirectlyExportedClass.#fnArrow, Decl(isolatedDeclarationErrorsReturnTypes.ts, 76, 39)) +>#fnArrow : Symbol(IndirectlyExportedClass.#fnArrow, Decl(isolatedDeclarationErrorsReturnTypes.ts, 88, 39)) #fnExpression = function foo() { return 0;} ->#fnExpression : Symbol(IndirectlyExportedClass.#fnExpression, Decl(isolatedDeclarationErrorsReturnTypes.ts, 77, 25)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 78, 19)) +>#fnExpression : Symbol(IndirectlyExportedClass.#fnExpression, Decl(isolatedDeclarationErrorsReturnTypes.ts, 89, 25)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 90, 19)) private static fnStaticExpressionPrivate = function foo() { return 0; } ->fnStaticExpressionPrivate : Symbol(IndirectlyExportedClass.fnStaticExpressionPrivate, Decl(isolatedDeclarationErrorsReturnTypes.ts, 78, 47)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 79, 46)) +>fnStaticExpressionPrivate : Symbol(IndirectlyExportedClass.fnStaticExpressionPrivate, Decl(isolatedDeclarationErrorsReturnTypes.ts, 90, 47)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 91, 46)) private static fnStaticArrowPrivate = () => "S"; ->fnStaticArrowPrivate : Symbol(IndirectlyExportedClass.fnStaticArrowPrivate, Decl(isolatedDeclarationErrorsReturnTypes.ts, 79, 75)) +>fnStaticArrowPrivate : Symbol(IndirectlyExportedClass.fnStaticArrowPrivate, Decl(isolatedDeclarationErrorsReturnTypes.ts, 91, 75)) } export const instance: IndirectlyExportedClass = new IndirectlyExportedClass(); ->instance : Symbol(instance, Decl(isolatedDeclarationErrorsReturnTypes.ts, 82, 12)) ->IndirectlyExportedClass : Symbol(IndirectlyExportedClass, Decl(isolatedDeclarationErrorsReturnTypes.ts, 62, 1)) ->IndirectlyExportedClass : Symbol(IndirectlyExportedClass, Decl(isolatedDeclarationErrorsReturnTypes.ts, 62, 1)) +>instance : Symbol(instance, Decl(isolatedDeclarationErrorsReturnTypes.ts, 94, 12)) +>IndirectlyExportedClass : Symbol(IndirectlyExportedClass, Decl(isolatedDeclarationErrorsReturnTypes.ts, 74, 1)) +>IndirectlyExportedClass : Symbol(IndirectlyExportedClass, Decl(isolatedDeclarationErrorsReturnTypes.ts, 74, 1)) // No Errors class InternalClass { ->InternalClass : Symbol(InternalClass, Decl(isolatedDeclarationErrorsReturnTypes.ts, 82, 79)) +>InternalClass : Symbol(InternalClass, Decl(isolatedDeclarationErrorsReturnTypes.ts, 94, 79)) fnExpression = function foo() { return 0; } ->fnExpression : Symbol(InternalClass.fnExpression, Decl(isolatedDeclarationErrorsReturnTypes.ts, 85, 21)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 86, 18)) +>fnExpression : Symbol(InternalClass.fnExpression, Decl(isolatedDeclarationErrorsReturnTypes.ts, 97, 21)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 98, 18)) fnArrow = () => "S"; ->fnArrow : Symbol(InternalClass.fnArrow, Decl(isolatedDeclarationErrorsReturnTypes.ts, 86, 47)) +>fnArrow : Symbol(InternalClass.fnArrow, Decl(isolatedDeclarationErrorsReturnTypes.ts, 98, 47)) static fnStaticExpression = function foo() { return 0; } ->fnStaticExpression : Symbol(InternalClass.fnStaticExpression, Decl(isolatedDeclarationErrorsReturnTypes.ts, 87, 24)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 89, 31)) +>fnStaticExpression : Symbol(InternalClass.fnStaticExpression, Decl(isolatedDeclarationErrorsReturnTypes.ts, 99, 24)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 101, 31)) static fnStaticArrow = () => "S"; ->fnStaticArrow : Symbol(InternalClass.fnStaticArrow, Decl(isolatedDeclarationErrorsReturnTypes.ts, 89, 60)) +>fnStaticArrow : Symbol(InternalClass.fnStaticArrow, Decl(isolatedDeclarationErrorsReturnTypes.ts, 101, 60)) protected static fnStaticExpressionProtected = function foo() { return 0; } ->fnStaticExpressionProtected : Symbol(InternalClass.fnStaticExpressionProtected, Decl(isolatedDeclarationErrorsReturnTypes.ts, 90, 37)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 92, 50)) +>fnStaticExpressionProtected : Symbol(InternalClass.fnStaticExpressionProtected, Decl(isolatedDeclarationErrorsReturnTypes.ts, 102, 37)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 104, 50)) protected static fnStaticArrowProtected = () => "S"; ->fnStaticArrowProtected : Symbol(InternalClass.fnStaticArrowProtected, Decl(isolatedDeclarationErrorsReturnTypes.ts, 92, 79)) +>fnStaticArrowProtected : Symbol(InternalClass.fnStaticArrowProtected, Decl(isolatedDeclarationErrorsReturnTypes.ts, 104, 79)) private fnExpressionPrivate = function foo() { return 0; } ->fnExpressionPrivate : Symbol(InternalClass.fnExpressionPrivate, Decl(isolatedDeclarationErrorsReturnTypes.ts, 93, 56)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 95, 33)) +>fnExpressionPrivate : Symbol(InternalClass.fnExpressionPrivate, Decl(isolatedDeclarationErrorsReturnTypes.ts, 105, 56)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 107, 33)) private fnArrowPrivate = () => "S"; ->fnArrowPrivate : Symbol(InternalClass.fnArrowPrivate, Decl(isolatedDeclarationErrorsReturnTypes.ts, 95, 62)) +>fnArrowPrivate : Symbol(InternalClass.fnArrowPrivate, Decl(isolatedDeclarationErrorsReturnTypes.ts, 107, 62)) #fnArrow = () => "S"; ->#fnArrow : Symbol(InternalClass.#fnArrow, Decl(isolatedDeclarationErrorsReturnTypes.ts, 96, 39)) +>#fnArrow : Symbol(InternalClass.#fnArrow, Decl(isolatedDeclarationErrorsReturnTypes.ts, 108, 39)) #fnExpression = function foo() { return 0;} ->#fnExpression : Symbol(InternalClass.#fnExpression, Decl(isolatedDeclarationErrorsReturnTypes.ts, 97, 25)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 98, 19)) +>#fnExpression : Symbol(InternalClass.#fnExpression, Decl(isolatedDeclarationErrorsReturnTypes.ts, 109, 25)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 110, 19)) private static fnStaticExpressionPrivate = function foo() { return 0; } ->fnStaticExpressionPrivate : Symbol(InternalClass.fnStaticExpressionPrivate, Decl(isolatedDeclarationErrorsReturnTypes.ts, 98, 47)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 99, 46)) +>fnStaticExpressionPrivate : Symbol(InternalClass.fnStaticExpressionPrivate, Decl(isolatedDeclarationErrorsReturnTypes.ts, 110, 47)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 111, 46)) private static fnStaticArrowPrivate = () => "S"; ->fnStaticArrowPrivate : Symbol(InternalClass.fnStaticArrowPrivate, Decl(isolatedDeclarationErrorsReturnTypes.ts, 99, 75)) +>fnStaticArrowPrivate : Symbol(InternalClass.fnStaticArrowPrivate, Decl(isolatedDeclarationErrorsReturnTypes.ts, 111, 75)) } const internalInstance: InternalClass = new InternalClass(); ->internalInstance : Symbol(internalInstance, Decl(isolatedDeclarationErrorsReturnTypes.ts, 102, 5)) ->InternalClass : Symbol(InternalClass, Decl(isolatedDeclarationErrorsReturnTypes.ts, 82, 79)) ->InternalClass : Symbol(InternalClass, Decl(isolatedDeclarationErrorsReturnTypes.ts, 82, 79)) +>internalInstance : Symbol(internalInstance, Decl(isolatedDeclarationErrorsReturnTypes.ts, 114, 5)) +>InternalClass : Symbol(InternalClass, Decl(isolatedDeclarationErrorsReturnTypes.ts, 94, 79)) +>InternalClass : Symbol(InternalClass, Decl(isolatedDeclarationErrorsReturnTypes.ts, 94, 79)) // Function parameters // In Function Variables - No annotations export const fnParamExpressionConstVariable = function foo(cb = function(){ }) { return 0;} ->fnParamExpressionConstVariable : Symbol(fnParamExpressionConstVariable, Decl(isolatedDeclarationErrorsReturnTypes.ts, 108, 12)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 108, 45)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 108, 59)) +>fnParamExpressionConstVariable : Symbol(fnParamExpressionConstVariable, Decl(isolatedDeclarationErrorsReturnTypes.ts, 120, 12)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 120, 45)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 120, 59)) export const fnParamArrowConstVariable = (cb = () => 1) => "S"; ->fnParamArrowConstVariable : Symbol(fnParamArrowConstVariable, Decl(isolatedDeclarationErrorsReturnTypes.ts, 109, 12)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 109, 42)) +>fnParamArrowConstVariable : Symbol(fnParamArrowConstVariable, Decl(isolatedDeclarationErrorsReturnTypes.ts, 121, 12)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 121, 42)) export let fnParamExpressionLetVariable = function foo(cb = function(){ }) { return 0;} ->fnParamExpressionLetVariable : Symbol(fnParamExpressionLetVariable, Decl(isolatedDeclarationErrorsReturnTypes.ts, 111, 10)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 111, 41)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 111, 55)) +>fnParamExpressionLetVariable : Symbol(fnParamExpressionLetVariable, Decl(isolatedDeclarationErrorsReturnTypes.ts, 123, 10)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 123, 41)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 123, 55)) export let fnParamArrowLetVariable = (cb = () => 1) => "S"; ->fnParamArrowLetVariable : Symbol(fnParamArrowLetVariable, Decl(isolatedDeclarationErrorsReturnTypes.ts, 112, 10)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 112, 38)) +>fnParamArrowLetVariable : Symbol(fnParamArrowLetVariable, Decl(isolatedDeclarationErrorsReturnTypes.ts, 124, 10)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 124, 38)) export var fnParamExpressionVarVariable = function foo(cb = function(){ }) { return 0;} ->fnParamExpressionVarVariable : Symbol(fnParamExpressionVarVariable, Decl(isolatedDeclarationErrorsReturnTypes.ts, 114, 10)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 114, 41)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 114, 55)) +>fnParamExpressionVarVariable : Symbol(fnParamExpressionVarVariable, Decl(isolatedDeclarationErrorsReturnTypes.ts, 126, 10)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 126, 41)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 126, 55)) export var fnParamArrowVarVariable = (cb = () => 1) => "S"; ->fnParamArrowVarVariable : Symbol(fnParamArrowVarVariable, Decl(isolatedDeclarationErrorsReturnTypes.ts, 115, 10)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 115, 38)) +>fnParamArrowVarVariable : Symbol(fnParamArrowVarVariable, Decl(isolatedDeclarationErrorsReturnTypes.ts, 127, 10)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 127, 38)) // In Function Variables - No annotations on parameter export const fnParamExpressionConstVariableOwnerHasReturnType = function foo(cb = function(){ }): number { return 0;} ->fnParamExpressionConstVariableOwnerHasReturnType : Symbol(fnParamExpressionConstVariableOwnerHasReturnType, Decl(isolatedDeclarationErrorsReturnTypes.ts, 118, 12)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 118, 63)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 118, 77)) +>fnParamExpressionConstVariableOwnerHasReturnType : Symbol(fnParamExpressionConstVariableOwnerHasReturnType, Decl(isolatedDeclarationErrorsReturnTypes.ts, 130, 12)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 130, 63)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 130, 77)) export const fnParamArrowConstVariableOwnerHasReturnType = (cb = function(){ }): string => "S"; ->fnParamArrowConstVariableOwnerHasReturnType : Symbol(fnParamArrowConstVariableOwnerHasReturnType, Decl(isolatedDeclarationErrorsReturnTypes.ts, 119, 12)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 119, 60)) +>fnParamArrowConstVariableOwnerHasReturnType : Symbol(fnParamArrowConstVariableOwnerHasReturnType, Decl(isolatedDeclarationErrorsReturnTypes.ts, 131, 12)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 131, 60)) export let fnParamExpressionLetVariableOwnerHasReturnType = function foo(cb = function(){ }): number { return 0;} ->fnParamExpressionLetVariableOwnerHasReturnType : Symbol(fnParamExpressionLetVariableOwnerHasReturnType, Decl(isolatedDeclarationErrorsReturnTypes.ts, 121, 10)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 121, 59)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 121, 73)) +>fnParamExpressionLetVariableOwnerHasReturnType : Symbol(fnParamExpressionLetVariableOwnerHasReturnType, Decl(isolatedDeclarationErrorsReturnTypes.ts, 133, 10)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 133, 59)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 133, 73)) export let fnParamArrowLetVariableOwnerHasReturnType = (cb = function(){ }): string => "S"; ->fnParamArrowLetVariableOwnerHasReturnType : Symbol(fnParamArrowLetVariableOwnerHasReturnType, Decl(isolatedDeclarationErrorsReturnTypes.ts, 122, 10)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 122, 56)) +>fnParamArrowLetVariableOwnerHasReturnType : Symbol(fnParamArrowLetVariableOwnerHasReturnType, Decl(isolatedDeclarationErrorsReturnTypes.ts, 134, 10)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 134, 56)) export var fnParamExpressionVarVariableOwnerHasReturnType = function foo(cb = function(){ }): number { return 0;} ->fnParamExpressionVarVariableOwnerHasReturnType : Symbol(fnParamExpressionVarVariableOwnerHasReturnType, Decl(isolatedDeclarationErrorsReturnTypes.ts, 124, 10)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 124, 59)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 124, 73)) +>fnParamExpressionVarVariableOwnerHasReturnType : Symbol(fnParamExpressionVarVariableOwnerHasReturnType, Decl(isolatedDeclarationErrorsReturnTypes.ts, 136, 10)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 136, 59)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 136, 73)) export var fnParamArrowVarVariableOwnerHasReturnType = (cb = function(){ }): string => "S"; ->fnParamArrowVarVariableOwnerHasReturnType : Symbol(fnParamArrowVarVariableOwnerHasReturnType, Decl(isolatedDeclarationErrorsReturnTypes.ts, 125, 10)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 125, 56)) +>fnParamArrowVarVariableOwnerHasReturnType : Symbol(fnParamArrowVarVariableOwnerHasReturnType, Decl(isolatedDeclarationErrorsReturnTypes.ts, 137, 10)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 137, 56)) // No Errors export const fnParamExpressionConstVariableOk = function foo(cb = function(): void{ }): number { return 0;} ->fnParamExpressionConstVariableOk : Symbol(fnParamExpressionConstVariableOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 128, 12)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 128, 47)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 128, 61)) +>fnParamExpressionConstVariableOk : Symbol(fnParamExpressionConstVariableOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 140, 12)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 140, 47)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 140, 61)) export const fnParamArrowConstVariableOk = (cb = function(): void{ }): string => "S"; ->fnParamArrowConstVariableOk : Symbol(fnParamArrowConstVariableOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 129, 12)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 129, 44)) +>fnParamArrowConstVariableOk : Symbol(fnParamArrowConstVariableOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 141, 12)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 141, 44)) export let fnParamExpressionLetVariableOk = function foo(cb = function(): void{ }): number { return 0;} ->fnParamExpressionLetVariableOk : Symbol(fnParamExpressionLetVariableOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 131, 10)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 131, 43)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 131, 57)) +>fnParamExpressionLetVariableOk : Symbol(fnParamExpressionLetVariableOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 143, 10)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 143, 43)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 143, 57)) export let fnParamArrowLetVariableOk = (cb = function(): void{ }): string => "S"; ->fnParamArrowLetVariableOk : Symbol(fnParamArrowLetVariableOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 132, 10)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 132, 40)) +>fnParamArrowLetVariableOk : Symbol(fnParamArrowLetVariableOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 144, 10)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 144, 40)) export var fnParamExpressionVarVariableOk = function foo(cb = function(): void{ }): number { return 0;} ->fnParamExpressionVarVariableOk : Symbol(fnParamExpressionVarVariableOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 134, 10)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 134, 43)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 134, 57)) +>fnParamExpressionVarVariableOk : Symbol(fnParamExpressionVarVariableOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 146, 10)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 146, 43)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 146, 57)) export var fnParamArrowVarVariableOk = (cb = function(): void{ }): string => "S"; ->fnParamArrowVarVariableOk : Symbol(fnParamArrowVarVariableOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 135, 10)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 135, 40)) +>fnParamArrowVarVariableOk : Symbol(fnParamArrowVarVariableOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 147, 10)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 147, 40)) export const fnParamExpressionConstVariableInternal = function foo(cb = function(){ }) { return 0;} ->fnParamExpressionConstVariableInternal : Symbol(fnParamExpressionConstVariableInternal, Decl(isolatedDeclarationErrorsReturnTypes.ts, 137, 12)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 137, 53)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 137, 67)) +>fnParamExpressionConstVariableInternal : Symbol(fnParamExpressionConstVariableInternal, Decl(isolatedDeclarationErrorsReturnTypes.ts, 149, 12)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 149, 53)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 149, 67)) export const fnParamArrowConstVariableInternal = (cb = () => 1) => "S"; ->fnParamArrowConstVariableInternal : Symbol(fnParamArrowConstVariableInternal, Decl(isolatedDeclarationErrorsReturnTypes.ts, 138, 12)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 138, 50)) +>fnParamArrowConstVariableInternal : Symbol(fnParamArrowConstVariableInternal, Decl(isolatedDeclarationErrorsReturnTypes.ts, 150, 12)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 150, 50)) export let fnParamExpressionLetVariableInternal = function foo(cb = function(){ }) { return 0;} ->fnParamExpressionLetVariableInternal : Symbol(fnParamExpressionLetVariableInternal, Decl(isolatedDeclarationErrorsReturnTypes.ts, 140, 10)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 140, 49)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 140, 63)) +>fnParamExpressionLetVariableInternal : Symbol(fnParamExpressionLetVariableInternal, Decl(isolatedDeclarationErrorsReturnTypes.ts, 152, 10)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 152, 49)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 152, 63)) export let fnParamArrowLetVariableInternal = (cb = () => 1) => "S"; ->fnParamArrowLetVariableInternal : Symbol(fnParamArrowLetVariableInternal, Decl(isolatedDeclarationErrorsReturnTypes.ts, 141, 10)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 141, 46)) +>fnParamArrowLetVariableInternal : Symbol(fnParamArrowLetVariableInternal, Decl(isolatedDeclarationErrorsReturnTypes.ts, 153, 10)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 153, 46)) export var fnParamExpressionVarVariableInternal = function foo(cb = function(){ }) { return 0;} ->fnParamExpressionVarVariableInternal : Symbol(fnParamExpressionVarVariableInternal, Decl(isolatedDeclarationErrorsReturnTypes.ts, 143, 10)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 143, 49)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 143, 63)) +>fnParamExpressionVarVariableInternal : Symbol(fnParamExpressionVarVariableInternal, Decl(isolatedDeclarationErrorsReturnTypes.ts, 155, 10)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 155, 49)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 155, 63)) export var fnParamArrowVarVariableInternal = (cb = () => 1) => "S"; ->fnParamArrowVarVariableInternal : Symbol(fnParamArrowVarVariableInternal, Decl(isolatedDeclarationErrorsReturnTypes.ts, 144, 10)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 144, 46)) +>fnParamArrowVarVariableInternal : Symbol(fnParamArrowVarVariableInternal, Decl(isolatedDeclarationErrorsReturnTypes.ts, 156, 10)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 156, 46)) // In Function Fields export class FnParamsExportedClass { ->FnParamsExportedClass : Symbol(FnParamsExportedClass, Decl(isolatedDeclarationErrorsReturnTypes.ts, 144, 67)) +>FnParamsExportedClass : Symbol(FnParamsExportedClass, Decl(isolatedDeclarationErrorsReturnTypes.ts, 156, 67)) // Should Error fnExpression = function foo(cb = function(){ }) { return 0; } ->fnExpression : Symbol(FnParamsExportedClass.fnExpression, Decl(isolatedDeclarationErrorsReturnTypes.ts, 148, 36)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 150, 18)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 150, 32)) +>fnExpression : Symbol(FnParamsExportedClass.fnExpression, Decl(isolatedDeclarationErrorsReturnTypes.ts, 160, 36)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 162, 18)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 162, 32)) fnArrow = (cb = function(){ }) => "S"; ->fnArrow : Symbol(FnParamsExportedClass.fnArrow, Decl(isolatedDeclarationErrorsReturnTypes.ts, 150, 65)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 151, 15)) +>fnArrow : Symbol(FnParamsExportedClass.fnArrow, Decl(isolatedDeclarationErrorsReturnTypes.ts, 162, 65)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 163, 15)) protected fnExpressionProtected = function foo(cb = function(){ }) { return 0; } ->fnExpressionProtected : Symbol(FnParamsExportedClass.fnExpressionProtected, Decl(isolatedDeclarationErrorsReturnTypes.ts, 151, 42)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 152, 37)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 152, 51)) +>fnExpressionProtected : Symbol(FnParamsExportedClass.fnExpressionProtected, Decl(isolatedDeclarationErrorsReturnTypes.ts, 163, 42)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 164, 37)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 164, 51)) protected fnArrowProtected = (cb = function(){ }) => "S"; ->fnArrowProtected : Symbol(FnParamsExportedClass.fnArrowProtected, Decl(isolatedDeclarationErrorsReturnTypes.ts, 152, 84)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 153, 34)) +>fnArrowProtected : Symbol(FnParamsExportedClass.fnArrowProtected, Decl(isolatedDeclarationErrorsReturnTypes.ts, 164, 84)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 165, 34)) static fnStaticExpression = function foo(cb = function(){ }) { return 0; } ->fnStaticExpression : Symbol(FnParamsExportedClass.fnStaticExpression, Decl(isolatedDeclarationErrorsReturnTypes.ts, 153, 61)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 155, 31)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 155, 45)) +>fnStaticExpression : Symbol(FnParamsExportedClass.fnStaticExpression, Decl(isolatedDeclarationErrorsReturnTypes.ts, 165, 61)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 167, 31)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 167, 45)) static fnStaticArrow = (cb = function(){ }) => "S"; ->fnStaticArrow : Symbol(FnParamsExportedClass.fnStaticArrow, Decl(isolatedDeclarationErrorsReturnTypes.ts, 155, 78)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 156, 28)) +>fnStaticArrow : Symbol(FnParamsExportedClass.fnStaticArrow, Decl(isolatedDeclarationErrorsReturnTypes.ts, 167, 78)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 168, 28)) protected static fnStaticExpressionProtected = function foo(cb = function(){ }) { return 0; } ->fnStaticExpressionProtected : Symbol(FnParamsExportedClass.fnStaticExpressionProtected, Decl(isolatedDeclarationErrorsReturnTypes.ts, 156, 55)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 157, 50)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 157, 64)) +>fnStaticExpressionProtected : Symbol(FnParamsExportedClass.fnStaticExpressionProtected, Decl(isolatedDeclarationErrorsReturnTypes.ts, 168, 55)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 169, 50)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 169, 64)) protected static fnStaticArrowProtected = (cb = function(){ }) => "S"; ->fnStaticArrowProtected : Symbol(FnParamsExportedClass.fnStaticArrowProtected, Decl(isolatedDeclarationErrorsReturnTypes.ts, 157, 97)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 158, 47)) +>fnStaticArrowProtected : Symbol(FnParamsExportedClass.fnStaticArrowProtected, Decl(isolatedDeclarationErrorsReturnTypes.ts, 169, 97)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 170, 47)) // Have annotation on owner fnExpressionMethodHasReturn = function foo(cb = function(){ }): number { return 0; } ->fnExpressionMethodHasReturn : Symbol(FnParamsExportedClass.fnExpressionMethodHasReturn, Decl(isolatedDeclarationErrorsReturnTypes.ts, 158, 74)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 161, 33)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 161, 47)) +>fnExpressionMethodHasReturn : Symbol(FnParamsExportedClass.fnExpressionMethodHasReturn, Decl(isolatedDeclarationErrorsReturnTypes.ts, 170, 74)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 173, 33)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 173, 47)) fnArrowMethodHasReturn = (cb = function(){ }): string => "S"; ->fnArrowMethodHasReturn : Symbol(FnParamsExportedClass.fnArrowMethodHasReturn, Decl(isolatedDeclarationErrorsReturnTypes.ts, 161, 88)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 162, 30)) +>fnArrowMethodHasReturn : Symbol(FnParamsExportedClass.fnArrowMethodHasReturn, Decl(isolatedDeclarationErrorsReturnTypes.ts, 173, 88)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 174, 30)) protected fnExpressionProtectedMethodHasReturn = function foo(cb = function(){ }): number { return 0; } ->fnExpressionProtectedMethodHasReturn : Symbol(FnParamsExportedClass.fnExpressionProtectedMethodHasReturn, Decl(isolatedDeclarationErrorsReturnTypes.ts, 162, 65)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 163, 52)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 163, 66)) +>fnExpressionProtectedMethodHasReturn : Symbol(FnParamsExportedClass.fnExpressionProtectedMethodHasReturn, Decl(isolatedDeclarationErrorsReturnTypes.ts, 174, 65)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 175, 52)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 175, 66)) protected fnArrowProtectedMethodHasReturn = (cb = function(){ }): string => "S"; ->fnArrowProtectedMethodHasReturn : Symbol(FnParamsExportedClass.fnArrowProtectedMethodHasReturn, Decl(isolatedDeclarationErrorsReturnTypes.ts, 163, 107)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 164, 49)) +>fnArrowProtectedMethodHasReturn : Symbol(FnParamsExportedClass.fnArrowProtectedMethodHasReturn, Decl(isolatedDeclarationErrorsReturnTypes.ts, 175, 107)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 176, 49)) static fnStaticExpressionMethodHasReturn = function foo(cb = function(){ }): number { return 0; } ->fnStaticExpressionMethodHasReturn : Symbol(FnParamsExportedClass.fnStaticExpressionMethodHasReturn, Decl(isolatedDeclarationErrorsReturnTypes.ts, 164, 84)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 166, 46)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 166, 60)) +>fnStaticExpressionMethodHasReturn : Symbol(FnParamsExportedClass.fnStaticExpressionMethodHasReturn, Decl(isolatedDeclarationErrorsReturnTypes.ts, 176, 84)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 178, 46)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 178, 60)) static fnStaticArrowMethodHasReturn = (cb = function(){ }): string => "S"; ->fnStaticArrowMethodHasReturn : Symbol(FnParamsExportedClass.fnStaticArrowMethodHasReturn, Decl(isolatedDeclarationErrorsReturnTypes.ts, 166, 101)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 167, 43)) +>fnStaticArrowMethodHasReturn : Symbol(FnParamsExportedClass.fnStaticArrowMethodHasReturn, Decl(isolatedDeclarationErrorsReturnTypes.ts, 178, 101)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 179, 43)) protected static fnStaticExpressionProtectedMethodHasReturn = function foo(cb = function(){ }): number { return 0; } ->fnStaticExpressionProtectedMethodHasReturn : Symbol(FnParamsExportedClass.fnStaticExpressionProtectedMethodHasReturn, Decl(isolatedDeclarationErrorsReturnTypes.ts, 167, 78)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 168, 65)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 168, 79)) +>fnStaticExpressionProtectedMethodHasReturn : Symbol(FnParamsExportedClass.fnStaticExpressionProtectedMethodHasReturn, Decl(isolatedDeclarationErrorsReturnTypes.ts, 179, 78)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 180, 65)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 180, 79)) protected static fnStaticArrowProtectedMethodHasReturn = (cb = function(){ }): string => "S"; ->fnStaticArrowProtectedMethodHasReturn : Symbol(FnParamsExportedClass.fnStaticArrowProtectedMethodHasReturn, Decl(isolatedDeclarationErrorsReturnTypes.ts, 168, 120)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 169, 62)) +>fnStaticArrowProtectedMethodHasReturn : Symbol(FnParamsExportedClass.fnStaticArrowProtectedMethodHasReturn, Decl(isolatedDeclarationErrorsReturnTypes.ts, 180, 120)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 181, 62)) // Have annotation only on parameter fnExpressionOnlyOnParam = function foo(cb = function(): void { }) { return 0; } ->fnExpressionOnlyOnParam : Symbol(FnParamsExportedClass.fnExpressionOnlyOnParam, Decl(isolatedDeclarationErrorsReturnTypes.ts, 169, 97)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 172, 29)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 172, 43)) +>fnExpressionOnlyOnParam : Symbol(FnParamsExportedClass.fnExpressionOnlyOnParam, Decl(isolatedDeclarationErrorsReturnTypes.ts, 181, 97)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 184, 29)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 184, 43)) fnArrowOnlyOnParam = (cb = function(): void { }) => "S"; ->fnArrowOnlyOnParam : Symbol(FnParamsExportedClass.fnArrowOnlyOnParam, Decl(isolatedDeclarationErrorsReturnTypes.ts, 172, 83)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 173, 26)) +>fnArrowOnlyOnParam : Symbol(FnParamsExportedClass.fnArrowOnlyOnParam, Decl(isolatedDeclarationErrorsReturnTypes.ts, 184, 83)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 185, 26)) protected fnExpressionProtectedOnlyOnParam = function foo(cb = function(): void { }) { return 0; } ->fnExpressionProtectedOnlyOnParam : Symbol(FnParamsExportedClass.fnExpressionProtectedOnlyOnParam, Decl(isolatedDeclarationErrorsReturnTypes.ts, 173, 60)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 174, 48)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 174, 62)) +>fnExpressionProtectedOnlyOnParam : Symbol(FnParamsExportedClass.fnExpressionProtectedOnlyOnParam, Decl(isolatedDeclarationErrorsReturnTypes.ts, 185, 60)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 186, 48)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 186, 62)) protected fnArrowProtectedOnlyOnParam = (cb = function(): void { }) => "S"; ->fnArrowProtectedOnlyOnParam : Symbol(FnParamsExportedClass.fnArrowProtectedOnlyOnParam, Decl(isolatedDeclarationErrorsReturnTypes.ts, 174, 102)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 175, 45)) +>fnArrowProtectedOnlyOnParam : Symbol(FnParamsExportedClass.fnArrowProtectedOnlyOnParam, Decl(isolatedDeclarationErrorsReturnTypes.ts, 186, 102)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 187, 45)) static fnStaticExpressionOnlyOnParam = function foo(cb = function(): void{ }) { return 0; } ->fnStaticExpressionOnlyOnParam : Symbol(FnParamsExportedClass.fnStaticExpressionOnlyOnParam, Decl(isolatedDeclarationErrorsReturnTypes.ts, 175, 79)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 177, 42)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 177, 56)) +>fnStaticExpressionOnlyOnParam : Symbol(FnParamsExportedClass.fnStaticExpressionOnlyOnParam, Decl(isolatedDeclarationErrorsReturnTypes.ts, 187, 79)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 189, 42)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 189, 56)) static fnStaticArrowOnlyOnParam = (cb = function(): void{ }) => "S"; ->fnStaticArrowOnlyOnParam : Symbol(FnParamsExportedClass.fnStaticArrowOnlyOnParam, Decl(isolatedDeclarationErrorsReturnTypes.ts, 177, 95)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 178, 39)) +>fnStaticArrowOnlyOnParam : Symbol(FnParamsExportedClass.fnStaticArrowOnlyOnParam, Decl(isolatedDeclarationErrorsReturnTypes.ts, 189, 95)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 190, 39)) protected static fnStaticExpressionProtectedOnlyOnParam = function foo(cb = function(): void{ }) { return 0; } ->fnStaticExpressionProtectedOnlyOnParam : Symbol(FnParamsExportedClass.fnStaticExpressionProtectedOnlyOnParam, Decl(isolatedDeclarationErrorsReturnTypes.ts, 178, 72)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 179, 61)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 179, 75)) +>fnStaticExpressionProtectedOnlyOnParam : Symbol(FnParamsExportedClass.fnStaticExpressionProtectedOnlyOnParam, Decl(isolatedDeclarationErrorsReturnTypes.ts, 190, 72)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 191, 61)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 191, 75)) protected static fnStaticArrowProtectedOnlyOnParam = (cb = function(): void{ }) => "S"; ->fnStaticArrowProtectedOnlyOnParam : Symbol(FnParamsExportedClass.fnStaticArrowProtectedOnlyOnParam, Decl(isolatedDeclarationErrorsReturnTypes.ts, 179, 114)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 180, 58)) +>fnStaticArrowProtectedOnlyOnParam : Symbol(FnParamsExportedClass.fnStaticArrowProtectedOnlyOnParam, Decl(isolatedDeclarationErrorsReturnTypes.ts, 191, 114)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 192, 58)) // Have annotation, so ok fnExpressionOk = function foo(cb = function(): void { }): number { return 0; } ->fnExpressionOk : Symbol(FnParamsExportedClass.fnExpressionOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 180, 91)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 183, 20)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 183, 34)) +>fnExpressionOk : Symbol(FnParamsExportedClass.fnExpressionOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 192, 91)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 195, 20)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 195, 34)) fnArrowOK = (cb = function(): void { }): string => "S"; ->fnArrowOK : Symbol(FnParamsExportedClass.fnArrowOK, Decl(isolatedDeclarationErrorsReturnTypes.ts, 183, 82)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 184, 17)) +>fnArrowOK : Symbol(FnParamsExportedClass.fnArrowOK, Decl(isolatedDeclarationErrorsReturnTypes.ts, 195, 82)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 196, 17)) protected fnExpressionProtectedOk = function foo(cb = function(): void { }): number { return 0; } ->fnExpressionProtectedOk : Symbol(FnParamsExportedClass.fnExpressionProtectedOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 184, 59)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 185, 39)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 185, 53)) +>fnExpressionProtectedOk : Symbol(FnParamsExportedClass.fnExpressionProtectedOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 196, 59)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 197, 39)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 197, 53)) protected fnArrowProtectedOK = (cb = function(): void { }): string => "S"; ->fnArrowProtectedOK : Symbol(FnParamsExportedClass.fnArrowProtectedOK, Decl(isolatedDeclarationErrorsReturnTypes.ts, 185, 101)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 186, 36)) +>fnArrowProtectedOK : Symbol(FnParamsExportedClass.fnArrowProtectedOK, Decl(isolatedDeclarationErrorsReturnTypes.ts, 197, 101)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 198, 36)) static fnStaticExpressionOk = function foo(cb = function(): void{ }): number { return 0; } ->fnStaticExpressionOk : Symbol(FnParamsExportedClass.fnStaticExpressionOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 186, 78)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 188, 33)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 188, 47)) +>fnStaticExpressionOk : Symbol(FnParamsExportedClass.fnStaticExpressionOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 198, 78)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 200, 33)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 200, 47)) static fnStaticArrowOk = (cb = function(): void{ }): string => "S"; ->fnStaticArrowOk : Symbol(FnParamsExportedClass.fnStaticArrowOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 188, 94)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 189, 30)) +>fnStaticArrowOk : Symbol(FnParamsExportedClass.fnStaticArrowOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 200, 94)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 201, 30)) protected static fnStaticExpressionProtectedOk = function foo(cb = function(): void{ }): number { return 0; } ->fnStaticExpressionProtectedOk : Symbol(FnParamsExportedClass.fnStaticExpressionProtectedOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 189, 71)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 190, 52)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 190, 66)) +>fnStaticExpressionProtectedOk : Symbol(FnParamsExportedClass.fnStaticExpressionProtectedOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 201, 71)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 202, 52)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 202, 66)) protected static fnStaticArrowProtectedOk = (cb = function(): void{ }): string => "S"; ->fnStaticArrowProtectedOk : Symbol(FnParamsExportedClass.fnStaticArrowProtectedOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 190, 113)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 191, 49)) +>fnStaticArrowProtectedOk : Symbol(FnParamsExportedClass.fnStaticArrowProtectedOk, Decl(isolatedDeclarationErrorsReturnTypes.ts, 202, 113)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 203, 49)) // No Error, not in declarations private fnExpressionPrivate = function foo(cb = function(){ }) { return 0; } ->fnExpressionPrivate : Symbol(FnParamsExportedClass.fnExpressionPrivate, Decl(isolatedDeclarationErrorsReturnTypes.ts, 191, 90)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 195, 33)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 195, 47)) +>fnExpressionPrivate : Symbol(FnParamsExportedClass.fnExpressionPrivate, Decl(isolatedDeclarationErrorsReturnTypes.ts, 203, 90)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 207, 33)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 207, 47)) private fnArrowPrivate = (cb = function(){ }) => "S"; ->fnArrowPrivate : Symbol(FnParamsExportedClass.fnArrowPrivate, Decl(isolatedDeclarationErrorsReturnTypes.ts, 195, 80)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 196, 30)) +>fnArrowPrivate : Symbol(FnParamsExportedClass.fnArrowPrivate, Decl(isolatedDeclarationErrorsReturnTypes.ts, 207, 80)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 208, 30)) #fnArrow = (cb = function(){ }) => "S"; ->#fnArrow : Symbol(FnParamsExportedClass.#fnArrow, Decl(isolatedDeclarationErrorsReturnTypes.ts, 196, 57)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 197, 16)) +>#fnArrow : Symbol(FnParamsExportedClass.#fnArrow, Decl(isolatedDeclarationErrorsReturnTypes.ts, 208, 57)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 209, 16)) #fnExpression = function foo(cb = function(){ }) { return 0;} ->#fnExpression : Symbol(FnParamsExportedClass.#fnExpression, Decl(isolatedDeclarationErrorsReturnTypes.ts, 197, 43)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 198, 19)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 198, 33)) +>#fnExpression : Symbol(FnParamsExportedClass.#fnExpression, Decl(isolatedDeclarationErrorsReturnTypes.ts, 209, 43)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 210, 19)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 210, 33)) private static fnStaticExpressionPrivate = function foo(cb = function(){ }) { return 0; } ->fnStaticExpressionPrivate : Symbol(FnParamsExportedClass.fnStaticExpressionPrivate, Decl(isolatedDeclarationErrorsReturnTypes.ts, 198, 65)) ->foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 199, 46)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 199, 60)) +>fnStaticExpressionPrivate : Symbol(FnParamsExportedClass.fnStaticExpressionPrivate, Decl(isolatedDeclarationErrorsReturnTypes.ts, 210, 65)) +>foo : Symbol(foo, Decl(isolatedDeclarationErrorsReturnTypes.ts, 211, 46)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 211, 60)) private static fnStaticArrowPrivate = (cb = function(){ }) => "S"; ->fnStaticArrowPrivate : Symbol(FnParamsExportedClass.fnStaticArrowPrivate, Decl(isolatedDeclarationErrorsReturnTypes.ts, 199, 93)) ->cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 200, 43)) +>fnStaticArrowPrivate : Symbol(FnParamsExportedClass.fnStaticArrowPrivate, Decl(isolatedDeclarationErrorsReturnTypes.ts, 211, 93)) +>cb : Symbol(cb, Decl(isolatedDeclarationErrorsReturnTypes.ts, 212, 43)) } diff --git a/tsc/testdata/baselines/reference/compiler/isolatedDeclarationErrorsReturnTypes.types b/tsc/testdata/baselines/reference/compiler/isolatedDeclarationErrorsReturnTypes.types index 9cecf5a8c253e..028b55832e213 100644 --- a/tsc/testdata/baselines/reference/compiler/isolatedDeclarationErrorsReturnTypes.types +++ b/tsc/testdata/baselines/reference/compiler/isolatedDeclarationErrorsReturnTypes.types @@ -2,6 +2,61 @@ === isolatedDeclarationErrorsReturnTypes.ts === // Function Variables +export const recursiveArrow = () => recursiveArrow; +>recursiveArrow : () => typeof recursiveArrow +>() => recursiveArrow : () => typeof recursiveArrow +>recursiveArrow : () => typeof recursiveArrow + +export function recursiveDeclaration() { return recursiveDeclaration; } +>recursiveDeclaration : () => typeof recursiveDeclaration +>recursiveDeclaration : () => typeof recursiveDeclaration + +export const recursiveObject = { next: () => recursiveObject }; +>recursiveObject : { next: () => any; } +>{ next: () => recursiveObject } : { next: () => { next: () => any; }; } +>next : () => { next: () => any; } +>() => recursiveObject : () => { next: () => any; } +>recursiveObject : { next: () => any; } + +export const recursiveTuple = [() => recursiveTuple] as const; +>recursiveTuple : readonly [() => any] +>[() => recursiveTuple] as const : readonly [() => any] +>[() => recursiveTuple] : readonly [() => any] +>() => recursiveTuple : () => readonly [any] +>recursiveTuple : readonly [() => any] + +export const recursiveNamed = function self() { return self; }; +>recursiveNamed : () => typeof self +>function self() { return self; } : () => typeof self +>self : () => typeof recursiveNamed +>self : () => typeof recursiveNamed + +export const annotatedRecursiveArrow: () => typeof annotatedRecursiveArrow = () => annotatedRecursiveArrow; +>annotatedRecursiveArrow : () => typeof annotatedRecursiveArrow +>annotatedRecursiveArrow : () => typeof annotatedRecursiveArrow +>() => annotatedRecursiveArrow : () => () => typeof annotatedRecursiveArrow +>annotatedRecursiveArrow : () => typeof annotatedRecursiveArrow + +export const annotatedRecursiveObject: { next: () => typeof annotatedRecursiveObject } = { +>annotatedRecursiveObject : { next: () => typeof annotatedRecursiveObject; } +>next : () => typeof annotatedRecursiveObject +>annotatedRecursiveObject : { next: () => typeof annotatedRecursiveObject; } +>{ next: () => annotatedRecursiveObject,} : { next: () => { next: () => typeof annotatedRecursiveObject; }; } + + next: () => annotatedRecursiveObject, +>next : () => { next: () => typeof annotatedRecursiveObject; } +>() => annotatedRecursiveObject : () => { next: () => typeof annotatedRecursiveObject; } +>annotatedRecursiveObject : { next: () => typeof annotatedRecursiveObject; } + +}; +export type RecursiveLink = { value: T; next: RecursiveLink }; +>RecursiveLink : RecursiveLink +>value : T +>next : RecursiveLink + +export declare const recursiveLink: RecursiveLink; +>recursiveLink : RecursiveLink + export const fnExpressionConstVariable = function foo() { return 0;} >fnExpressionConstVariable : () => number >function foo() { return 0;} : () => number diff --git a/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.errors.txt b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.errors.txt new file mode 100644 index 0000000000000..83c4e162312f0 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.errors.txt @@ -0,0 +1,437 @@ +consumer.ts(11,7): error TS2322: Type '() => typeof arrow' is not assignable to type 'number'. +consumer.ts(13,25): error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. +exported.ts(1,14): error TS5088: The inferred type of 'arrow' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +exported.ts(2,14): error TS5088: The inferred type of 'expression' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +exported.ts(11,14): error TS5088: The inferred type of 'named' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +exported.ts(19,14): error TS5088: The inferred type of 'nestedReturn' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +exported.ts(26,14): error TS5088: The inferred type of 'objectReturn' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +exported.ts(27,14): error TS5088: The inferred type of 'tupleReturn' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +hiddenReferences.ts(4,15): error TS5088: The inferred type of 'next' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +hiddenReferences.ts(5,5): error TS5088: The inferred type of 'expose' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +namedReferences.ts(8,14): error TS5088: The inferred type of 'parenthesized' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +namedReferences.ts(9,14): error TS5088: The inferred type of 'asserted' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +namedReferences.ts(15,14): error TS4025: Exported variable 'hiddenAlias' has or is using private name 'Hidden'. +namedReferences.ts(16,14): error TS4025: Exported variable 'siblingHiddenAliases' has or is using private name 'Hidden'. +namedReferences.ts(20,12): error TS5088: The inferred type of '"a-b"' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +namedReferences.ts(21,12): error TS5088: The inferred type of '[methodKey]' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +namedReferences.ts(22,5): error TS5088: The inferred type of 'recur' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +namedReferences.ts(28,7): error TS2322: Type 'string' is not assignable to type 'number'. +namedReferences.ts(29,14): error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. +nestedNamedFunctions.ts(1,14): error TS5088: The inferred type of 'nestedObject' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +nestedNamedFunctions.ts(2,14): error TS5088: The inferred type of 'nestedTuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +nestedNamedFunctions.ts(3,14): error TS5088: The inferred type of 'object' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +nestedNamedFunctions.ts(4,14): error TS5088: The inferred type of 'tuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +nestedNamedFunctions.ts(5,14): error TS5088: The inferred type of 'factory' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +nestedNamedFunctions.ts(6,14): error TS5088: The inferred type of 'method' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +nestedNamedFunctions.ts(7,14): error TS5088: The inferred type of 'accessor' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +nestedNamedFunctions.ts(8,17): error TS5088: The inferred type of 'local' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +recursiveAnnotations.ts(2,15): error TS2502: 'tuple' is referenced directly or indirectly in its own type annotation. +recursiveAnnotations.ts(3,15): error TS2502: 'array' is referenced directly or indirectly in its own type annotation. +recursiveAnnotations.ts(8,15): error TS2502: 'union' is referenced directly or indirectly in its own type annotation. +recursiveAnnotations.ts(9,15): error TS2502: 'conditional' is referenced directly or indirectly in its own type annotation. +recursiveObject.ts(1,17): error TS5088: The inferred type of 'recursiveObject' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +recursiveObject.ts(12,7): error TS2322: Type '(arg: U) => { call: any; consume: (arg: number) => any; }' is not assignable to type 'number'. +recursiveObject.ts(13,16): error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. +recursiveStructures.ts(1,14): error TS5088: The inferred type of 'object' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +recursiveStructures.ts(2,14): error TS5088: The inferred type of 'method' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +recursiveStructures.ts(3,14): error TS5088: The inferred type of 'accessor' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +recursiveStructures.ts(4,14): error TS5088: The inferred type of 'tuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +recursiveStructures.ts(5,14): error TS5088: The inferred type of 'tupleObject' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +recursiveStructures.ts(6,14): error TS5088: The inferred type of 'array' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +recursiveStructures.ts(7,14): error TS5088: The inferred type of 'first' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +recursiveStructures.ts(8,14): error TS5088: The inferred type of 'second' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +recursiveStructures.ts(9,14): error TS5088: The inferred type of 'nested' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +recursiveStructures.ts(10,14): error TS5088: The inferred type of 'shadowed' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +recursiveStructures.ts(11,14): error TS5088: The inferred type of 'memberTuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +recursiveStructures.ts(12,14): error TS5088: The inferred type of 'memberArray' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +recursiveStructures.ts(13,14): error TS5088: The inferred type of 'quoted' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +recursiveStructures.ts(14,14): error TS5088: The inferred type of 'numeric' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +recursiveStructures.ts(16,14): error TS5088: The inferred type of 'computed' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +recursiveStructures.ts(17,14): error TS5088: The inferred type of 'union' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +recursiveStructures.ts(23,14): error TS5088: The inferred type of 'specialized' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +recursiveStructures.ts(29,14): error TS5088: The inferred type of 'indexed' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +recursiveStructures.ts(34,14): error TS5088: The inferred type of 'mapped' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +recursiveStructures.ts(39,14): error TS5088: The inferred type of 'viaAnnotation' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +recursiveStructures.ts(47,7): error TS2322: Type 'string' is not assignable to type 'number'. +script.ts(1,7): error TS5088: The inferred type of 'scriptArrow' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +script.ts(2,7): error TS5088: The inferred type of 'scriptExpression' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +signatureScopes.ts(1,14): error TS5088: The inferred type of 'scoped' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +signatureScopes.ts(10,14): error TS5088: The inferred type of 'numberScope' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +signatureScopes.ts(11,14): error TS5088: The inferred type of 'stringScope' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +signatureScopes.ts(21,14): error TS5088: The inferred type of 'nestedOwner' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +signatureScopes.ts(33,14): error TS5088: The inferred type of 'nestedNumber' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +signatureScopes.ts(34,14): error TS5088: The inferred type of 'nestedString' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +signatureScopes.ts(35,14): error TS5088: The inferred type of 'nestedBoolean' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + + +==== script.ts (2 errors) ==== + const scriptArrow = () => scriptArrow; + ~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'scriptArrow' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + const scriptExpression = function () { return scriptExpression; }; + ~~~~~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'scriptExpression' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + function scriptDeclaration() { return scriptDeclaration; } + +==== exported.ts (6 errors) ==== + export const arrow = () => arrow; + ~~~~~ +!!! error TS5088: The inferred type of 'arrow' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + export const expression = function () { return expression; }; + ~~~~~~~~~~ +!!! error TS5088: The inferred type of 'expression' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + export function declaration() { return declaration; } + export const annotated: () => typeof annotated = () => annotated; + export const first = () => second; + export const second = () => first; + export const generic = (value: T) => generic; + export const finite = () => () => 1; + export const wrapped = { arrow }; + export const tuple = [arrow] as const; + export const named = function self() { return self; }; + ~~~~~ +!!! error TS5088: The inferred type of 'named' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + export const broad: unknown = function self() { return self; }; + export const contextual: () => unknown = function self() { return self; }; + export const specialized = generic; + export const annotatedParameter = (value: string | number) => annotatedParameter; + export const renamedParameter = (other: number | string) => renamedParameter; + export const optionalParameter = (value?: string) => optionalParameter; + export const restParameter = (...values: string[]) => restParameter; + export const nestedReturn = () => () => nestedReturn; + ~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'nestedReturn' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + export const finiteObject = { call: (value: string) => ({ value }) }; + export const finiteTuple = [(value: number) => [value] as const] as const; + export const nestedGeneric = (value: T) => ({ + call: (other: T) => [value, other] as const, + }); + export const instantiatedNested = nestedGeneric("text"); + export const objectReturn = () => ({ call: objectReturn }); + ~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'objectReturn' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + export const tupleReturn = () => [tupleReturn] as const; + ~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'tupleReturn' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + export const shadowed = function self(shadowed: number) { return self; }; + +==== consumer.ts (2 errors) ==== + import { arrow, expression, declaration, first, generic, finite, wrapped, tuple } from "./exported"; + import { instantiatedNested, objectReturn, tupleReturn, shadowed } from "./exported"; + const a: typeof arrow = arrow()()(); + const b: typeof expression = expression()()(); + const c: typeof declaration = declaration()()(); + const d: typeof first = first()()(); + const e: typeof generic = generic(1)("text")(true); + const f: number = finite()(); + const g: typeof arrow = wrapped.arrow()(); + const h: typeof arrow = tuple[0]()(); + const invalid: number = arrow()()(); + ~~~~~~~ +!!! error TS2322: Type '() => typeof arrow' is not assignable to type 'number'. + const nestedResult: readonly [string, string] = instantiatedNested.call("other"); + instantiatedNested.call(1); + ~ +!!! error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. + const objectCall: typeof objectReturn = objectReturn().call().call; + const tupleCall: typeof tupleReturn = tupleReturn()[0]()[0]; + const shadowedCall: typeof shadowed = shadowed(1)(2); + +==== recursiveObject.ts (3 errors) ==== + export function recursiveObject() { + ~~~~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'recursiveObject' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + const value = { + call: (arg: U) => value, + consume: (arg: T) => value, + }; + return value; + } + + const result = recursiveObject().call("hello").consume(1); + type IsAny = 0 extends (1 & T) ? true : false; + const notAny: false = null as unknown as IsAny; + const invalidCall: number = result.call; + ~~~~~~~~~~~ +!!! error TS2322: Type '(arg: U) => { call: any; consume: (arg: number) => any; }' is not assignable to type 'number'. + result.consume("wrong"); + ~~~~~~~ +!!! error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. + +==== nestedNamedFunctions.ts (8 errors) ==== + export const nestedObject = { recur: () => nestedObject.recur }; + ~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'nestedObject' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + export const nestedTuple = [() => nestedTuple[0]] as const; + ~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'nestedTuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + export const object = { recur: function self() { return self; } }; + ~~~~~~ +!!! error TS5088: The inferred type of 'object' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + export const tuple = [function self() { return self; }] as const; + ~~~~~ +!!! error TS5088: The inferred type of 'tuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + export const factory = () => function self() { return self; }; + ~~~~~~~ +!!! error TS5088: The inferred type of 'factory' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + export const method = { recur() { return method; } }; + ~~~~~~ +!!! error TS5088: The inferred type of 'method' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + export const accessor = { get recur() { return accessor; } }; + ~~~~~~~~ +!!! error TS5088: The inferred type of 'accessor' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + export function local() { + ~~~~~ +!!! error TS5088: The inferred type of 'local' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + function recur() { return recur; } + return recur; + } + +==== recursiveStructures.ts (21 errors) ==== + export const object = { value: 1, next: () => object }; + ~~~~~~ +!!! error TS5088: The inferred type of 'object' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + export const method = { value: 1, next() { return method; } }; + ~~~~~~ +!!! error TS5088: The inferred type of 'method' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + export const accessor = { value: 1, get next() { return accessor; } }; + ~~~~~~~~ +!!! error TS5088: The inferred type of 'accessor' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + export const tuple = [() => tuple] as const; + ~~~~~ +!!! error TS5088: The inferred type of 'tuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + export const tupleObject = [{ next: () => tupleObject }] as const; + ~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'tupleObject' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + export const array = [() => array]; + ~~~~~ +!!! error TS5088: The inferred type of 'array' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + export const first = { next: () => second }; + ~~~~~ +!!! error TS5088: The inferred type of 'first' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + export const second = { next: () => first }; + ~~~~~~ +!!! error TS5088: The inferred type of 'second' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + export const nested = { inner: { next() { return nested.inner; } } }; + ~~~~~~ +!!! error TS5088: The inferred type of 'nested' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + export const shadowed = { next: function self(shadowed: number) { return self; } }; + ~~~~~~~~ +!!! error TS5088: The inferred type of 'shadowed' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + export const memberTuple = [function self() { return self; }] as const; + ~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'memberTuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + export const memberArray = [function self() { return self; }]; + ~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'memberArray' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + export const quoted = { "a-b": function self() { return self; } }; + ~~~~~~ +!!! error TS5088: The inferred type of 'quoted' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + export const numeric = { 0: function self() { return self; } }; + ~~~~~~~ +!!! error TS5088: The inferred type of 'numeric' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + export const key = Symbol(); + export const computed = { [key]: function self() { return self; } }; + ~~~~~~~~ +!!! error TS5088: The inferred type of 'computed' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + export const union = Math.random() ? { next: () => union } : undefined; + ~~~~~ +!!! error TS5088: The inferred type of 'union' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + + function create(value: T) { + const result = { value, next: () => result }; + return result; + } + export const specialized = create("text"); + ~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'specialized' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + export const broad: unknown = { next() { return this; } }; + function createIndexed() { + const value: { [key: string]: typeof value } = {}; + return value; + } + export const indexed = createIndexed(); + ~~~~~~~ +!!! error TS5088: The inferred type of 'indexed' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + function createMapped() { + const value: { [K in keyof T]: typeof value } = null!; + return value; + } + export const mapped = createMapped<{ next: unknown }>(); + ~~~~~~ +!!! error TS5088: The inferred type of 'mapped' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + function createAnnotated(value: T) { + const node: { value: T; next: () => typeof node } = { value, next: () => node }; + return node; + } + export const viaAnnotation = createAnnotated("text"); + ~~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'viaAnnotation' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + + const objectValue: number = object.next().next().value; + const tupleValue: typeof tuple = tuple[0]()[0](); + const tupleObjectValue: typeof tupleObject = tupleObject[0].next(); + const arrayValue: typeof array = array[0]()[0](); + const nestedValue: typeof nested.inner = nested.inner.next().next(); + const specializedValue: string = specialized.next().next().value; + const invalidValue: number = specialized.next().value; + ~~~~~~~~~~~~ +!!! error TS2322: Type 'string' is not assignable to type 'number'. + +==== recursiveAnnotations.ts (4 errors) ==== + declare const object: { next: typeof object }; + declare const tuple: readonly [typeof tuple]; + ~~~~~ +!!! error TS2502: 'tuple' is referenced directly or indirectly in its own type annotation. + declare const array: Array; + ~~~~~ +!!! error TS2502: 'array' is referenced directly or indirectly in its own type annotation. + declare const tupleFunction: readonly [() => typeof tupleFunction]; + declare const tupleObject: readonly [{ next: typeof tupleObject }]; + declare const objectTuple: { next: readonly [typeof objectTuple] }; + declare const mapped: { [K in "next"]: typeof mapped }; + declare const union: typeof union | undefined; + ~~~~~ +!!! error TS2502: 'union' is referenced directly or indirectly in its own type annotation. + declare const conditional: true extends false ? never : typeof conditional; + ~~~~~~~~~~~ +!!! error TS2502: 'conditional' is referenced directly or indirectly in its own type annotation. + +==== namedReferences.ts (9 errors) ==== + export type Link = { value: T; next: Link }; + export type Callable = { (value: T): Callable; link: Link }; + export type Wrapped = ( { next: Wrapped } ); + export declare const link: Link; + export declare const callable: Callable; + export const nextLink = link.next; + export const nextCallable = callable(1); + export const parenthesized = (function self() { return self; }); + ~~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'parenthesized' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + export const asserted = (function self() { return self; }) satisfies () => unknown; + ~~~~~~~~ +!!! error TS5088: The inferred type of 'asserted' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + export const widened: () => unknown = (function self() { return self; }); + function createHidden(value: T) { + type Hidden = { value: T; next: Hidden }; + return null! as Hidden; + } + export const hiddenAlias = createHidden("text"); + ~~~~~~~~~~~ +!!! error TS4025: Exported variable 'hiddenAlias' has or is using private name 'Hidden'. + export const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias }; + ~~~~~~~~~~~~~~~~~~~~ +!!! error TS4025: Exported variable 'siblingHiddenAliases' has or is using private name 'Hidden'. + export const methodKey = Symbol(); + export class Methods { + static recur() { return Methods.recur; } + static "a-b"() { return Methods["a-b"]; } + ~~~~~ +!!! error TS5088: The inferred type of '"a-b"' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + static [methodKey]() { return Methods[methodKey]; } + ~~~~~~~~~~~ +!!! error TS5088: The inferred type of '[methodKey]' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + recur() { return this.recur; } + ~~~~~ +!!! error TS5088: The inferred type of 'recur' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + } + export function overloaded(value: string): typeof overloaded; + export function overloaded(value: number): typeof overloaded; + export function overloaded(value: string | number) { return overloaded; } + const text: string = nextLink.next.value; + const invalid: number = nextLink.next.value; + ~~~~~~~ +!!! error TS2322: Type 'string' is not assignable to type 'number'. + nextCallable("wrong"); + ~~~~~~~ +!!! error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. + +==== hiddenReferences.ts (2 errors) ==== + export class Hidden { + private static recur() { return Hidden.recur; } + static expose() { return Hidden.recur; } + protected next() { return this.next; } + ~~~~ +!!! error TS5088: The inferred type of 'next' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + expose() { return this.next; } + ~~~~~~ +!!! error TS5088: The inferred type of 'expose' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + } + +==== signatureScopes.ts (7 errors) ==== + export const scoped = { + ~~~~~~ +!!! error TS5088: The inferred type of 'scoped' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + first(outer: T) { + return { + nested(inner: T) { return { outer, inner, next: scoped }; }, + sibling(inner: T) { return { outer, inner, next: scoped }; }, + }; + }, + second(value: T) { return { value, next: scoped }; }, + }; + export const numberScope = scoped.first(1); + ~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'numberScope' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + export const stringScope = scoped.first("outer"); + ~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'stringScope' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + const nested = numberScope.nested("inner"); + const sibling = numberScope.sibling(true); + const nestedOuter: number = nested.outer; + const nestedInner: string = nested.inner; + const siblingOuter: number = sibling.outer; + const siblingInner: boolean = sibling.inner; + const stringOuter: string = stringScope.nested(1).outer; + const again: number = nested.next.second(1).value; + + export const nestedOwner = { + ~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'nestedOwner' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + make(outer: T) { + return { + nested(inner: U) { return { outer, inner, owner: nestedOwner }; }, + constrained(inner: U) { return { outer, inner, owner: nestedOwner }; }, + copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } { + return { outer, inner, owner: nestedOwner }; + }, + rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; }, + }; + }, + }; + export const nestedNumber = nestedOwner.make(1); + ~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'nestedNumber' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + export const nestedString = nestedNumber.nested(true).owner.make("text").nested(2); + ~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'nestedString' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + export const nestedBoolean = nestedString.owner.make(true).nested("inner"); + ~~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'nestedBoolean' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + const nestedStringOuter: string = nestedString.outer; + const nestedStringInner: number = nestedString.inner; + const nestedBooleanOuter: boolean = nestedBoolean.outer; + const nestedBooleanInner: string = nestedBoolean.inner; + const constrainedOuter: number = nestedNumber.constrained(2).outer; + const constrainedInner: number = nestedNumber.constrained(2).inner; + const copiedOuter: number = nestedNumber.copied("inner").outer; + const copiedInner: string = nestedNumber.copied("inner").inner; + const restOuter: number = nestedNumber.rest(true).outer; + const restInner: boolean = nestedNumber.rest(true).inner; + + export declare const reused: { + first(...values: [T]): { value: T; next: typeof reused }; + second(value: T): { value: T; next: typeof reused }; + shadowed(reused: T): { value: T; next: typeof reused }; + }; + export const copy = reused; + const restValue: number = copy.first(1).next.second(2).value; + const shadowedValue: number = copy.shadowed(1).next; + + export type Inferred = T extends (value: infer U) => infer R + ? { [K in keyof R]: (value: U) => R[K] } + : never; + export declare const inferred: Inferred<(value: number) => { next: typeof reused }>; + export const inferredCopy = inferred; + const inferredValue: string = inferredCopy.next(1).second("text").value; + \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.js b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.js new file mode 100644 index 0000000000000..6222c87f660d4 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.js @@ -0,0 +1,470 @@ +//// [tests/cases/compiler/recursiveFunctionDeclarationSerialization.ts] //// + +//// [script.ts] +const scriptArrow = () => scriptArrow; +const scriptExpression = function () { return scriptExpression; }; +function scriptDeclaration() { return scriptDeclaration; } + +//// [exported.ts] +export const arrow = () => arrow; +export const expression = function () { return expression; }; +export function declaration() { return declaration; } +export const annotated: () => typeof annotated = () => annotated; +export const first = () => second; +export const second = () => first; +export const generic = (value: T) => generic; +export const finite = () => () => 1; +export const wrapped = { arrow }; +export const tuple = [arrow] as const; +export const named = function self() { return self; }; +export const broad: unknown = function self() { return self; }; +export const contextual: () => unknown = function self() { return self; }; +export const specialized = generic; +export const annotatedParameter = (value: string | number) => annotatedParameter; +export const renamedParameter = (other: number | string) => renamedParameter; +export const optionalParameter = (value?: string) => optionalParameter; +export const restParameter = (...values: string[]) => restParameter; +export const nestedReturn = () => () => nestedReturn; +export const finiteObject = { call: (value: string) => ({ value }) }; +export const finiteTuple = [(value: number) => [value] as const] as const; +export const nestedGeneric = (value: T) => ({ + call: (other: T) => [value, other] as const, +}); +export const instantiatedNested = nestedGeneric("text"); +export const objectReturn = () => ({ call: objectReturn }); +export const tupleReturn = () => [tupleReturn] as const; +export const shadowed = function self(shadowed: number) { return self; }; + +//// [consumer.ts] +import { arrow, expression, declaration, first, generic, finite, wrapped, tuple } from "./exported"; +import { instantiatedNested, objectReturn, tupleReturn, shadowed } from "./exported"; +const a: typeof arrow = arrow()()(); +const b: typeof expression = expression()()(); +const c: typeof declaration = declaration()()(); +const d: typeof first = first()()(); +const e: typeof generic = generic(1)("text")(true); +const f: number = finite()(); +const g: typeof arrow = wrapped.arrow()(); +const h: typeof arrow = tuple[0]()(); +const invalid: number = arrow()()(); +const nestedResult: readonly [string, string] = instantiatedNested.call("other"); +instantiatedNested.call(1); +const objectCall: typeof objectReturn = objectReturn().call().call; +const tupleCall: typeof tupleReturn = tupleReturn()[0]()[0]; +const shadowedCall: typeof shadowed = shadowed(1)(2); + +//// [recursiveObject.ts] +export function recursiveObject() { + const value = { + call: (arg: U) => value, + consume: (arg: T) => value, + }; + return value; +} + +const result = recursiveObject().call("hello").consume(1); +type IsAny = 0 extends (1 & T) ? true : false; +const notAny: false = null as unknown as IsAny; +const invalidCall: number = result.call; +result.consume("wrong"); + +//// [nestedNamedFunctions.ts] +export const nestedObject = { recur: () => nestedObject.recur }; +export const nestedTuple = [() => nestedTuple[0]] as const; +export const object = { recur: function self() { return self; } }; +export const tuple = [function self() { return self; }] as const; +export const factory = () => function self() { return self; }; +export const method = { recur() { return method; } }; +export const accessor = { get recur() { return accessor; } }; +export function local() { + function recur() { return recur; } + return recur; +} + +//// [recursiveStructures.ts] +export const object = { value: 1, next: () => object }; +export const method = { value: 1, next() { return method; } }; +export const accessor = { value: 1, get next() { return accessor; } }; +export const tuple = [() => tuple] as const; +export const tupleObject = [{ next: () => tupleObject }] as const; +export const array = [() => array]; +export const first = { next: () => second }; +export const second = { next: () => first }; +export const nested = { inner: { next() { return nested.inner; } } }; +export const shadowed = { next: function self(shadowed: number) { return self; } }; +export const memberTuple = [function self() { return self; }] as const; +export const memberArray = [function self() { return self; }]; +export const quoted = { "a-b": function self() { return self; } }; +export const numeric = { 0: function self() { return self; } }; +export const key = Symbol(); +export const computed = { [key]: function self() { return self; } }; +export const union = Math.random() ? { next: () => union } : undefined; + +function create(value: T) { + const result = { value, next: () => result }; + return result; +} +export const specialized = create("text"); +export const broad: unknown = { next() { return this; } }; +function createIndexed() { + const value: { [key: string]: typeof value } = {}; + return value; +} +export const indexed = createIndexed(); +function createMapped() { + const value: { [K in keyof T]: typeof value } = null!; + return value; +} +export const mapped = createMapped<{ next: unknown }>(); +function createAnnotated(value: T) { + const node: { value: T; next: () => typeof node } = { value, next: () => node }; + return node; +} +export const viaAnnotation = createAnnotated("text"); + +const objectValue: number = object.next().next().value; +const tupleValue: typeof tuple = tuple[0]()[0](); +const tupleObjectValue: typeof tupleObject = tupleObject[0].next(); +const arrayValue: typeof array = array[0]()[0](); +const nestedValue: typeof nested.inner = nested.inner.next().next(); +const specializedValue: string = specialized.next().next().value; +const invalidValue: number = specialized.next().value; + +//// [recursiveAnnotations.ts] +declare const object: { next: typeof object }; +declare const tuple: readonly [typeof tuple]; +declare const array: Array; +declare const tupleFunction: readonly [() => typeof tupleFunction]; +declare const tupleObject: readonly [{ next: typeof tupleObject }]; +declare const objectTuple: { next: readonly [typeof objectTuple] }; +declare const mapped: { [K in "next"]: typeof mapped }; +declare const union: typeof union | undefined; +declare const conditional: true extends false ? never : typeof conditional; + +//// [namedReferences.ts] +export type Link = { value: T; next: Link }; +export type Callable = { (value: T): Callable; link: Link }; +export type Wrapped = ( { next: Wrapped } ); +export declare const link: Link; +export declare const callable: Callable; +export const nextLink = link.next; +export const nextCallable = callable(1); +export const parenthesized = (function self() { return self; }); +export const asserted = (function self() { return self; }) satisfies () => unknown; +export const widened: () => unknown = (function self() { return self; }); +function createHidden(value: T) { + type Hidden = { value: T; next: Hidden }; + return null! as Hidden; +} +export const hiddenAlias = createHidden("text"); +export const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias }; +export const methodKey = Symbol(); +export class Methods { + static recur() { return Methods.recur; } + static "a-b"() { return Methods["a-b"]; } + static [methodKey]() { return Methods[methodKey]; } + recur() { return this.recur; } +} +export function overloaded(value: string): typeof overloaded; +export function overloaded(value: number): typeof overloaded; +export function overloaded(value: string | number) { return overloaded; } +const text: string = nextLink.next.value; +const invalid: number = nextLink.next.value; +nextCallable("wrong"); + +//// [hiddenReferences.ts] +export class Hidden { + private static recur() { return Hidden.recur; } + static expose() { return Hidden.recur; } + protected next() { return this.next; } + expose() { return this.next; } +} + +//// [signatureScopes.ts] +export const scoped = { + first(outer: T) { + return { + nested(inner: T) { return { outer, inner, next: scoped }; }, + sibling(inner: T) { return { outer, inner, next: scoped }; }, + }; + }, + second(value: T) { return { value, next: scoped }; }, +}; +export const numberScope = scoped.first(1); +export const stringScope = scoped.first("outer"); +const nested = numberScope.nested("inner"); +const sibling = numberScope.sibling(true); +const nestedOuter: number = nested.outer; +const nestedInner: string = nested.inner; +const siblingOuter: number = sibling.outer; +const siblingInner: boolean = sibling.inner; +const stringOuter: string = stringScope.nested(1).outer; +const again: number = nested.next.second(1).value; + +export const nestedOwner = { + make(outer: T) { + return { + nested(inner: U) { return { outer, inner, owner: nestedOwner }; }, + constrained(inner: U) { return { outer, inner, owner: nestedOwner }; }, + copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } { + return { outer, inner, owner: nestedOwner }; + }, + rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; }, + }; + }, +}; +export const nestedNumber = nestedOwner.make(1); +export const nestedString = nestedNumber.nested(true).owner.make("text").nested(2); +export const nestedBoolean = nestedString.owner.make(true).nested("inner"); +const nestedStringOuter: string = nestedString.outer; +const nestedStringInner: number = nestedString.inner; +const nestedBooleanOuter: boolean = nestedBoolean.outer; +const nestedBooleanInner: string = nestedBoolean.inner; +const constrainedOuter: number = nestedNumber.constrained(2).outer; +const constrainedInner: number = nestedNumber.constrained(2).inner; +const copiedOuter: number = nestedNumber.copied("inner").outer; +const copiedInner: string = nestedNumber.copied("inner").inner; +const restOuter: number = nestedNumber.rest(true).outer; +const restInner: boolean = nestedNumber.rest(true).inner; + +export declare const reused: { + first(...values: [T]): { value: T; next: typeof reused }; + second(value: T): { value: T; next: typeof reused }; + shadowed(reused: T): { value: T; next: typeof reused }; +}; +export const copy = reused; +const restValue: number = copy.first(1).next.second(2).value; +const shadowedValue: number = copy.shadowed(1).next; + +export type Inferred = T extends (value: infer U) => infer R + ? { [K in keyof R]: (value: U) => R[K] } + : never; +export declare const inferred: Inferred<(value: number) => { next: typeof reused }>; +export const inferredCopy = inferred; +const inferredValue: string = inferredCopy.next(1).second("text").value; + + +//// [script.js] +"use strict"; +const scriptArrow = () => scriptArrow; +const scriptExpression = function () { return scriptExpression; }; +function scriptDeclaration() { return scriptDeclaration; } +//// [exported.js] +export const arrow = () => arrow; +export const expression = function () { return expression; }; +export function declaration() { return declaration; } +export const annotated = () => annotated; +export const first = () => second; +export const second = () => first; +export const generic = (value) => generic; +export const finite = () => () => 1; +export const wrapped = { arrow }; +export const tuple = [arrow]; +export const named = function self() { return self; }; +export const broad = function self() { return self; }; +export const contextual = function self() { return self; }; +export const specialized = generic; +export const annotatedParameter = (value) => annotatedParameter; +export const renamedParameter = (other) => renamedParameter; +export const optionalParameter = (value) => optionalParameter; +export const restParameter = (...values) => restParameter; +export const nestedReturn = () => () => nestedReturn; +export const finiteObject = { call: (value) => ({ value }) }; +export const finiteTuple = [(value) => [value]]; +export const nestedGeneric = (value) => ({ + call: (other) => [value, other], +}); +export const instantiatedNested = nestedGeneric("text"); +export const objectReturn = () => ({ call: objectReturn }); +export const tupleReturn = () => [tupleReturn]; +export const shadowed = function self(shadowed) { return self; }; +//// [consumer.js] +import { arrow, expression, declaration, first, generic, finite, wrapped, tuple } from "./exported"; +import { instantiatedNested, objectReturn, tupleReturn, shadowed } from "./exported"; +const a = arrow()()(); +const b = expression()()(); +const c = declaration()()(); +const d = first()()(); +const e = generic(1)("text")(true); +const f = finite()(); +const g = wrapped.arrow()(); +const h = tuple[0]()(); +const invalid = arrow()()(); +const nestedResult = instantiatedNested.call("other"); +instantiatedNested.call(1); +const objectCall = objectReturn().call().call; +const tupleCall = tupleReturn()[0]()[0]; +const shadowedCall = shadowed(1)(2); +//// [recursiveObject.js] +export function recursiveObject() { + const value = { + call: (arg) => value, + consume: (arg) => value, + }; + return value; +} +const result = recursiveObject().call("hello").consume(1); +const notAny = null; +const invalidCall = result.call; +result.consume("wrong"); +//// [nestedNamedFunctions.js] +export const nestedObject = { recur: () => nestedObject.recur }; +export const nestedTuple = [() => nestedTuple[0]]; +export const object = { recur: function self() { return self; } }; +export const tuple = [function self() { return self; }]; +export const factory = () => function self() { return self; }; +export const method = { recur() { return method; } }; +export const accessor = { get recur() { return accessor; } }; +export function local() { + function recur() { return recur; } + return recur; +} +//// [recursiveStructures.js] +export const object = { value: 1, next: () => object }; +export const method = { value: 1, next() { return method; } }; +export const accessor = { value: 1, get next() { return accessor; } }; +export const tuple = [() => tuple]; +export const tupleObject = [{ next: () => tupleObject }]; +export const array = [() => array]; +export const first = { next: () => second }; +export const second = { next: () => first }; +export const nested = { inner: { next() { return nested.inner; } } }; +export const shadowed = { next: function self(shadowed) { return self; } }; +export const memberTuple = [function self() { return self; }]; +export const memberArray = [function self() { return self; }]; +export const quoted = { "a-b": function self() { return self; } }; +export const numeric = { 0: function self() { return self; } }; +export const key = Symbol(); +export const computed = { [key]: function self() { return self; } }; +export const union = Math.random() ? { next: () => union } : undefined; +function create(value) { + const result = { value, next: () => result }; + return result; +} +export const specialized = create("text"); +export const broad = { next() { return this; } }; +function createIndexed() { + const value = {}; + return value; +} +export const indexed = createIndexed(); +function createMapped() { + const value = null; + return value; +} +export const mapped = createMapped(); +function createAnnotated(value) { + const node = { value, next: () => node }; + return node; +} +export const viaAnnotation = createAnnotated("text"); +const objectValue = object.next().next().value; +const tupleValue = tuple[0]()[0](); +const tupleObjectValue = tupleObject[0].next(); +const arrayValue = array[0]()[0](); +const nestedValue = nested.inner.next().next(); +const specializedValue = specialized.next().next().value; +const invalidValue = specialized.next().value; +//// [recursiveAnnotations.js] +"use strict"; +//// [namedReferences.js] +export const nextLink = link.next; +export const nextCallable = callable(1); +export const parenthesized = (function self() { return self; }); +export const asserted = (function self() { return self; }); +export const widened = (function self() { return self; }); +function createHidden(value) { + return null; +} +export const hiddenAlias = createHidden("text"); +export const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias }; +export const methodKey = Symbol(); +export class Methods { + static recur() { return Methods.recur; } + static "a-b"() { return Methods["a-b"]; } + static [methodKey]() { return Methods[methodKey]; } + recur() { return this.recur; } +} +export function overloaded(value) { return overloaded; } +const text = nextLink.next.value; +const invalid = nextLink.next.value; +nextCallable("wrong"); +//// [hiddenReferences.js] +export class Hidden { + static recur() { return Hidden.recur; } + static expose() { return Hidden.recur; } + next() { return this.next; } + expose() { return this.next; } +} +//// [signatureScopes.js] +export const scoped = { + first(outer) { + return { + nested(inner) { return { outer, inner, next: scoped }; }, + sibling(inner) { return { outer, inner, next: scoped }; }, + }; + }, + second(value) { return { value, next: scoped }; }, +}; +export const numberScope = scoped.first(1); +export const stringScope = scoped.first("outer"); +const nested = numberScope.nested("inner"); +const sibling = numberScope.sibling(true); +const nestedOuter = nested.outer; +const nestedInner = nested.inner; +const siblingOuter = sibling.outer; +const siblingInner = sibling.inner; +const stringOuter = stringScope.nested(1).outer; +const again = nested.next.second(1).value; +export const nestedOwner = { + make(outer) { + return { + nested(inner) { return { outer, inner, owner: nestedOwner }; }, + constrained(inner) { return { outer, inner, owner: nestedOwner }; }, + copied(inner) { + return { outer, inner, owner: nestedOwner }; + }, + rest(...values) { return { outer, inner: values[0], owner: nestedOwner }; }, + }; + }, +}; +export const nestedNumber = nestedOwner.make(1); +export const nestedString = nestedNumber.nested(true).owner.make("text").nested(2); +export const nestedBoolean = nestedString.owner.make(true).nested("inner"); +const nestedStringOuter = nestedString.outer; +const nestedStringInner = nestedString.inner; +const nestedBooleanOuter = nestedBoolean.outer; +const nestedBooleanInner = nestedBoolean.inner; +const constrainedOuter = nestedNumber.constrained(2).outer; +const constrainedInner = nestedNumber.constrained(2).inner; +const copiedOuter = nestedNumber.copied("inner").outer; +const copiedInner = nestedNumber.copied("inner").inner; +const restOuter = nestedNumber.rest(true).outer; +const restInner = nestedNumber.rest(true).inner; +export const copy = reused; +const restValue = copy.first(1).next.second(2).value; +const shadowedValue = copy.shadowed(1).next; +export const inferredCopy = inferred; +const inferredValue = inferredCopy.next(1).second("text").value; + + +//// [consumer.d.ts] +export {}; +//// [recursiveAnnotations.d.ts] +declare const object: { + next: typeof object; +}; +declare const tuple: readonly [typeof tuple]; +declare const array: Array; +declare const tupleFunction: readonly [() => typeof tupleFunction]; +declare const tupleObject: readonly [{ + next: typeof tupleObject; +}]; +declare const objectTuple: { + next: readonly [typeof objectTuple]; +}; +declare const mapped: { + [K in "next"]: typeof mapped; +}; +declare const union: typeof union | undefined; +declare const conditional: true extends false ? never : typeof conditional; diff --git a/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.symbols b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.symbols new file mode 100644 index 0000000000000..21c1a7c50fbca --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.symbols @@ -0,0 +1,1189 @@ +//// [tests/cases/compiler/recursiveFunctionDeclarationSerialization.ts] //// + +=== script.ts === +const scriptArrow = () => scriptArrow; +>scriptArrow : Symbol(scriptArrow, Decl(script.ts, 0, 5)) +>scriptArrow : Symbol(scriptArrow, Decl(script.ts, 0, 5)) + +const scriptExpression = function () { return scriptExpression; }; +>scriptExpression : Symbol(scriptExpression, Decl(script.ts, 1, 5)) +>scriptExpression : Symbol(scriptExpression, Decl(script.ts, 1, 5)) + +function scriptDeclaration() { return scriptDeclaration; } +>scriptDeclaration : Symbol(scriptDeclaration, Decl(script.ts, 1, 66)) +>scriptDeclaration : Symbol(scriptDeclaration, Decl(script.ts, 1, 66)) + +=== exported.ts === +export const arrow = () => arrow; +>arrow : Symbol(arrow, Decl(exported.ts, 0, 12)) +>arrow : Symbol(arrow, Decl(exported.ts, 0, 12)) + +export const expression = function () { return expression; }; +>expression : Symbol(expression, Decl(exported.ts, 1, 12)) +>expression : Symbol(expression, Decl(exported.ts, 1, 12)) + +export function declaration() { return declaration; } +>declaration : Symbol(declaration, Decl(exported.ts, 1, 61)) +>declaration : Symbol(declaration, Decl(exported.ts, 1, 61)) + +export const annotated: () => typeof annotated = () => annotated; +>annotated : Symbol(annotated, Decl(exported.ts, 3, 12)) +>annotated : Symbol(annotated, Decl(exported.ts, 3, 12)) +>annotated : Symbol(annotated, Decl(exported.ts, 3, 12)) + +export const first = () => second; +>first : Symbol(first, Decl(exported.ts, 4, 12)) +>second : Symbol(second, Decl(exported.ts, 5, 12)) + +export const second = () => first; +>second : Symbol(second, Decl(exported.ts, 5, 12)) +>first : Symbol(first, Decl(exported.ts, 4, 12)) + +export const generic = (value: T) => generic; +>generic : Symbol(generic, Decl(exported.ts, 6, 12)) +>T : Symbol(T, Decl(exported.ts, 6, 24)) +>value : Symbol(value, Decl(exported.ts, 6, 27)) +>T : Symbol(T, Decl(exported.ts, 6, 24)) +>generic : Symbol(generic, Decl(exported.ts, 6, 12)) + +export const finite = () => () => 1; +>finite : Symbol(finite, Decl(exported.ts, 7, 12)) + +export const wrapped = { arrow }; +>wrapped : Symbol(wrapped, Decl(exported.ts, 8, 12)) +>arrow : Symbol(arrow, Decl(exported.ts, 8, 24)) + +export const tuple = [arrow] as const; +>tuple : Symbol(tuple, Decl(exported.ts, 9, 12)) +>arrow : Symbol(arrow, Decl(exported.ts, 0, 12)) +>const : Symbol(const) + +export const named = function self() { return self; }; +>named : Symbol(named, Decl(exported.ts, 10, 12)) +>self : Symbol(self, Decl(exported.ts, 10, 20)) +>self : Symbol(self, Decl(exported.ts, 10, 20)) + +export const broad: unknown = function self() { return self; }; +>broad : Symbol(broad, Decl(exported.ts, 11, 12)) +>self : Symbol(self, Decl(exported.ts, 11, 29)) +>self : Symbol(self, Decl(exported.ts, 11, 29)) + +export const contextual: () => unknown = function self() { return self; }; +>contextual : Symbol(contextual, Decl(exported.ts, 12, 12)) +>self : Symbol(self, Decl(exported.ts, 12, 40)) +>self : Symbol(self, Decl(exported.ts, 12, 40)) + +export const specialized = generic; +>specialized : Symbol(specialized, Decl(exported.ts, 13, 12)) +>generic : Symbol(generic, Decl(exported.ts, 6, 12)) + +export const annotatedParameter = (value: string | number) => annotatedParameter; +>annotatedParameter : Symbol(annotatedParameter, Decl(exported.ts, 14, 12)) +>value : Symbol(value, Decl(exported.ts, 14, 35)) +>annotatedParameter : Symbol(annotatedParameter, Decl(exported.ts, 14, 12)) + +export const renamedParameter = (other: number | string) => renamedParameter; +>renamedParameter : Symbol(renamedParameter, Decl(exported.ts, 15, 12)) +>other : Symbol(other, Decl(exported.ts, 15, 33)) +>renamedParameter : Symbol(renamedParameter, Decl(exported.ts, 15, 12)) + +export const optionalParameter = (value?: string) => optionalParameter; +>optionalParameter : Symbol(optionalParameter, Decl(exported.ts, 16, 12)) +>value : Symbol(value, Decl(exported.ts, 16, 34)) +>optionalParameter : Symbol(optionalParameter, Decl(exported.ts, 16, 12)) + +export const restParameter = (...values: string[]) => restParameter; +>restParameter : Symbol(restParameter, Decl(exported.ts, 17, 12)) +>values : Symbol(values, Decl(exported.ts, 17, 30)) +>restParameter : Symbol(restParameter, Decl(exported.ts, 17, 12)) + +export const nestedReturn = () => () => nestedReturn; +>nestedReturn : Symbol(nestedReturn, Decl(exported.ts, 18, 12)) +>nestedReturn : Symbol(nestedReturn, Decl(exported.ts, 18, 12)) + +export const finiteObject = { call: (value: string) => ({ value }) }; +>finiteObject : Symbol(finiteObject, Decl(exported.ts, 19, 12)) +>call : Symbol(call, Decl(exported.ts, 19, 29)) +>value : Symbol(value, Decl(exported.ts, 19, 37)) +>value : Symbol(value, Decl(exported.ts, 19, 57)) + +export const finiteTuple = [(value: number) => [value] as const] as const; +>finiteTuple : Symbol(finiteTuple, Decl(exported.ts, 20, 12)) +>value : Symbol(value, Decl(exported.ts, 20, 29)) +>value : Symbol(value, Decl(exported.ts, 20, 29)) +>const : Symbol(const) +>const : Symbol(const) + +export const nestedGeneric = (value: T) => ({ +>nestedGeneric : Symbol(nestedGeneric, Decl(exported.ts, 21, 12)) +>T : Symbol(T, Decl(exported.ts, 21, 30)) +>value : Symbol(value, Decl(exported.ts, 21, 33)) +>T : Symbol(T, Decl(exported.ts, 21, 30)) + + call: (other: T) => [value, other] as const, +>call : Symbol(call, Decl(exported.ts, 21, 48)) +>other : Symbol(other, Decl(exported.ts, 22, 11)) +>T : Symbol(T, Decl(exported.ts, 21, 30)) +>value : Symbol(value, Decl(exported.ts, 21, 33)) +>other : Symbol(other, Decl(exported.ts, 22, 11)) +>const : Symbol(const) + +}); +export const instantiatedNested = nestedGeneric("text"); +>instantiatedNested : Symbol(instantiatedNested, Decl(exported.ts, 24, 12)) +>nestedGeneric : Symbol(nestedGeneric, Decl(exported.ts, 21, 12)) + +export const objectReturn = () => ({ call: objectReturn }); +>objectReturn : Symbol(objectReturn, Decl(exported.ts, 25, 12)) +>call : Symbol(call, Decl(exported.ts, 25, 36)) +>objectReturn : Symbol(objectReturn, Decl(exported.ts, 25, 12)) + +export const tupleReturn = () => [tupleReturn] as const; +>tupleReturn : Symbol(tupleReturn, Decl(exported.ts, 26, 12)) +>tupleReturn : Symbol(tupleReturn, Decl(exported.ts, 26, 12)) +>const : Symbol(const) + +export const shadowed = function self(shadowed: number) { return self; }; +>shadowed : Symbol(shadowed, Decl(exported.ts, 27, 12)) +>self : Symbol(self, Decl(exported.ts, 27, 23)) +>shadowed : Symbol(shadowed, Decl(exported.ts, 27, 38)) +>self : Symbol(self, Decl(exported.ts, 27, 23)) + +=== consumer.ts === +import { arrow, expression, declaration, first, generic, finite, wrapped, tuple } from "./exported"; +>arrow : Symbol(arrow, Decl(consumer.ts, 0, 8)) +>expression : Symbol(expression, Decl(consumer.ts, 0, 15)) +>declaration : Symbol(declaration, Decl(consumer.ts, 0, 27)) +>first : Symbol(first, Decl(consumer.ts, 0, 40)) +>generic : Symbol(generic, Decl(consumer.ts, 0, 47)) +>finite : Symbol(finite, Decl(consumer.ts, 0, 56)) +>wrapped : Symbol(wrapped, Decl(consumer.ts, 0, 64)) +>tuple : Symbol(tuple, Decl(consumer.ts, 0, 73)) + +import { instantiatedNested, objectReturn, tupleReturn, shadowed } from "./exported"; +>instantiatedNested : Symbol(instantiatedNested, Decl(consumer.ts, 1, 8)) +>objectReturn : Symbol(objectReturn, Decl(consumer.ts, 1, 28)) +>tupleReturn : Symbol(tupleReturn, Decl(consumer.ts, 1, 42)) +>shadowed : Symbol(shadowed, Decl(consumer.ts, 1, 55)) + +const a: typeof arrow = arrow()()(); +>a : Symbol(a, Decl(consumer.ts, 2, 5)) +>arrow : Symbol(arrow, Decl(consumer.ts, 0, 8)) +>arrow : Symbol(arrow, Decl(consumer.ts, 0, 8)) + +const b: typeof expression = expression()()(); +>b : Symbol(b, Decl(consumer.ts, 3, 5)) +>expression : Symbol(expression, Decl(consumer.ts, 0, 15)) +>expression : Symbol(expression, Decl(consumer.ts, 0, 15)) + +const c: typeof declaration = declaration()()(); +>c : Symbol(c, Decl(consumer.ts, 4, 5)) +>declaration : Symbol(declaration, Decl(consumer.ts, 0, 27)) +>declaration : Symbol(declaration, Decl(consumer.ts, 0, 27)) + +const d: typeof first = first()()(); +>d : Symbol(d, Decl(consumer.ts, 5, 5)) +>first : Symbol(first, Decl(consumer.ts, 0, 40)) +>first : Symbol(first, Decl(consumer.ts, 0, 40)) + +const e: typeof generic = generic(1)("text")(true); +>e : Symbol(e, Decl(consumer.ts, 6, 5)) +>generic : Symbol(generic, Decl(consumer.ts, 0, 47)) +>generic : Symbol(generic, Decl(consumer.ts, 0, 47)) + +const f: number = finite()(); +>f : Symbol(f, Decl(consumer.ts, 7, 5)) +>finite : Symbol(finite, Decl(consumer.ts, 0, 56)) + +const g: typeof arrow = wrapped.arrow()(); +>g : Symbol(g, Decl(consumer.ts, 8, 5)) +>arrow : Symbol(arrow, Decl(consumer.ts, 0, 8)) +>wrapped.arrow : Symbol(arrow, Decl(exported.ts, 8, 24)) +>wrapped : Symbol(wrapped, Decl(consumer.ts, 0, 64)) +>arrow : Symbol(arrow, Decl(exported.ts, 8, 24)) + +const h: typeof arrow = tuple[0]()(); +>h : Symbol(h, Decl(consumer.ts, 9, 5)) +>arrow : Symbol(arrow, Decl(consumer.ts, 0, 8)) +>tuple : Symbol(tuple, Decl(consumer.ts, 0, 73)) +>0 : Symbol(0) + +const invalid: number = arrow()()(); +>invalid : Symbol(invalid, Decl(consumer.ts, 10, 5)) +>arrow : Symbol(arrow, Decl(consumer.ts, 0, 8)) + +const nestedResult: readonly [string, string] = instantiatedNested.call("other"); +>nestedResult : Symbol(nestedResult, Decl(consumer.ts, 11, 5)) +>instantiatedNested.call : Symbol(call, Decl(exported.ts, 21, 48)) +>instantiatedNested : Symbol(instantiatedNested, Decl(consumer.ts, 1, 8)) +>call : Symbol(call, Decl(exported.ts, 21, 48)) + +instantiatedNested.call(1); +>instantiatedNested.call : Symbol(call, Decl(exported.ts, 21, 48)) +>instantiatedNested : Symbol(instantiatedNested, Decl(consumer.ts, 1, 8)) +>call : Symbol(call, Decl(exported.ts, 21, 48)) + +const objectCall: typeof objectReturn = objectReturn().call().call; +>objectCall : Symbol(objectCall, Decl(consumer.ts, 13, 5)) +>objectReturn : Symbol(objectReturn, Decl(consumer.ts, 1, 28)) +>objectReturn().call().call : Symbol(call, Decl(exported.ts, 25, 36)) +>objectReturn().call : Symbol(call, Decl(exported.ts, 25, 36)) +>objectReturn : Symbol(objectReturn, Decl(consumer.ts, 1, 28)) +>call : Symbol(call, Decl(exported.ts, 25, 36)) +>call : Symbol(call, Decl(exported.ts, 25, 36)) + +const tupleCall: typeof tupleReturn = tupleReturn()[0]()[0]; +>tupleCall : Symbol(tupleCall, Decl(consumer.ts, 14, 5)) +>tupleReturn : Symbol(tupleReturn, Decl(consumer.ts, 1, 42)) +>tupleReturn : Symbol(tupleReturn, Decl(consumer.ts, 1, 42)) +>0 : Symbol(0) +>0 : Symbol(0) + +const shadowedCall: typeof shadowed = shadowed(1)(2); +>shadowedCall : Symbol(shadowedCall, Decl(consumer.ts, 15, 5)) +>shadowed : Symbol(shadowed, Decl(consumer.ts, 1, 55)) +>shadowed : Symbol(shadowed, Decl(consumer.ts, 1, 55)) + +=== recursiveObject.ts === +export function recursiveObject() { +>recursiveObject : Symbol(recursiveObject, Decl(recursiveObject.ts, 0, 0)) +>T : Symbol(T, Decl(recursiveObject.ts, 0, 32)) + + const value = { +>value : Symbol(value, Decl(recursiveObject.ts, 1, 9)) + + call: (arg: U) => value, +>call : Symbol(call, Decl(recursiveObject.ts, 1, 19)) +>U : Symbol(U, Decl(recursiveObject.ts, 2, 15)) +>arg : Symbol(arg, Decl(recursiveObject.ts, 2, 18)) +>U : Symbol(U, Decl(recursiveObject.ts, 2, 15)) +>value : Symbol(value, Decl(recursiveObject.ts, 1, 9)) + + consume: (arg: T) => value, +>consume : Symbol(consume, Decl(recursiveObject.ts, 2, 35)) +>arg : Symbol(arg, Decl(recursiveObject.ts, 3, 18)) +>T : Symbol(T, Decl(recursiveObject.ts, 0, 32)) +>value : Symbol(value, Decl(recursiveObject.ts, 1, 9)) + + }; + return value; +>value : Symbol(value, Decl(recursiveObject.ts, 1, 9)) +} + +const result = recursiveObject().call("hello").consume(1); +>result : Symbol(result, Decl(recursiveObject.ts, 8, 5)) +>recursiveObject().call("hello").consume : Symbol(consume, Decl(recursiveObject.ts, 2, 35)) +>recursiveObject().call : Symbol(call, Decl(recursiveObject.ts, 1, 19)) +>recursiveObject : Symbol(recursiveObject, Decl(recursiveObject.ts, 0, 0)) +>call : Symbol(call, Decl(recursiveObject.ts, 1, 19)) +>consume : Symbol(consume, Decl(recursiveObject.ts, 2, 35)) + +type IsAny = 0 extends (1 & T) ? true : false; +>IsAny : Symbol(IsAny, Decl(recursiveObject.ts, 8, 66)) +>T : Symbol(T, Decl(recursiveObject.ts, 9, 11)) +>T : Symbol(T, Decl(recursiveObject.ts, 9, 11)) + +const notAny: false = null as unknown as IsAny; +>notAny : Symbol(notAny, Decl(recursiveObject.ts, 10, 5)) +>IsAny : Symbol(IsAny, Decl(recursiveObject.ts, 8, 66)) +>result.call : Symbol(call, Decl(recursiveObject.ts, 1, 19)) +>result : Symbol(result, Decl(recursiveObject.ts, 8, 5)) +>call : Symbol(call, Decl(recursiveObject.ts, 1, 19)) + +const invalidCall: number = result.call; +>invalidCall : Symbol(invalidCall, Decl(recursiveObject.ts, 11, 5)) +>result.call : Symbol(call, Decl(recursiveObject.ts, 1, 19)) +>result : Symbol(result, Decl(recursiveObject.ts, 8, 5)) +>call : Symbol(call, Decl(recursiveObject.ts, 1, 19)) + +result.consume("wrong"); +>result.consume : Symbol(consume, Decl(recursiveObject.ts, 2, 35)) +>result : Symbol(result, Decl(recursiveObject.ts, 8, 5)) +>consume : Symbol(consume, Decl(recursiveObject.ts, 2, 35)) + +=== nestedNamedFunctions.ts === +export const nestedObject = { recur: () => nestedObject.recur }; +>nestedObject : Symbol(nestedObject, Decl(nestedNamedFunctions.ts, 0, 12)) +>recur : Symbol(recur, Decl(nestedNamedFunctions.ts, 0, 29)) +>nestedObject.recur : Symbol(recur, Decl(nestedNamedFunctions.ts, 0, 29)) +>nestedObject : Symbol(nestedObject, Decl(nestedNamedFunctions.ts, 0, 12)) +>recur : Symbol(recur, Decl(nestedNamedFunctions.ts, 0, 29)) + +export const nestedTuple = [() => nestedTuple[0]] as const; +>nestedTuple : Symbol(nestedTuple, Decl(nestedNamedFunctions.ts, 1, 12)) +>nestedTuple : Symbol(nestedTuple, Decl(nestedNamedFunctions.ts, 1, 12)) +>0 : Symbol(0) +>const : Symbol(const) + +export const object = { recur: function self() { return self; } }; +>object : Symbol(object, Decl(nestedNamedFunctions.ts, 2, 12)) +>recur : Symbol(recur, Decl(nestedNamedFunctions.ts, 2, 23)) +>self : Symbol(self, Decl(nestedNamedFunctions.ts, 2, 30)) +>self : Symbol(self, Decl(nestedNamedFunctions.ts, 2, 30)) + +export const tuple = [function self() { return self; }] as const; +>tuple : Symbol(tuple, Decl(nestedNamedFunctions.ts, 3, 12)) +>self : Symbol(self, Decl(nestedNamedFunctions.ts, 3, 22)) +>self : Symbol(self, Decl(nestedNamedFunctions.ts, 3, 22)) +>const : Symbol(const) + +export const factory = () => function self() { return self; }; +>factory : Symbol(factory, Decl(nestedNamedFunctions.ts, 4, 12)) +>self : Symbol(self, Decl(nestedNamedFunctions.ts, 4, 28)) +>self : Symbol(self, Decl(nestedNamedFunctions.ts, 4, 28)) + +export const method = { recur() { return method; } }; +>method : Symbol(method, Decl(nestedNamedFunctions.ts, 5, 12)) +>recur : Symbol(recur, Decl(nestedNamedFunctions.ts, 5, 23)) +>method : Symbol(method, Decl(nestedNamedFunctions.ts, 5, 12)) + +export const accessor = { get recur() { return accessor; } }; +>accessor : Symbol(accessor, Decl(nestedNamedFunctions.ts, 6, 12)) +>recur : Symbol(recur, Decl(nestedNamedFunctions.ts, 6, 25)) +>accessor : Symbol(accessor, Decl(nestedNamedFunctions.ts, 6, 12)) + +export function local() { +>local : Symbol(local, Decl(nestedNamedFunctions.ts, 6, 61)) + + function recur() { return recur; } +>recur : Symbol(recur, Decl(nestedNamedFunctions.ts, 7, 25)) +>recur : Symbol(recur, Decl(nestedNamedFunctions.ts, 7, 25)) + + return recur; +>recur : Symbol(recur, Decl(nestedNamedFunctions.ts, 7, 25)) +} + +=== recursiveStructures.ts === +export const object = { value: 1, next: () => object }; +>object : Symbol(object, Decl(recursiveStructures.ts, 0, 12)) +>value : Symbol(value, Decl(recursiveStructures.ts, 0, 23)) +>next : Symbol(next, Decl(recursiveStructures.ts, 0, 33)) +>object : Symbol(object, Decl(recursiveStructures.ts, 0, 12)) + +export const method = { value: 1, next() { return method; } }; +>method : Symbol(method, Decl(recursiveStructures.ts, 1, 12)) +>value : Symbol(value, Decl(recursiveStructures.ts, 1, 23)) +>next : Symbol(next, Decl(recursiveStructures.ts, 1, 33)) +>method : Symbol(method, Decl(recursiveStructures.ts, 1, 12)) + +export const accessor = { value: 1, get next() { return accessor; } }; +>accessor : Symbol(accessor, Decl(recursiveStructures.ts, 2, 12)) +>value : Symbol(value, Decl(recursiveStructures.ts, 2, 25)) +>next : Symbol(next, Decl(recursiveStructures.ts, 2, 35)) +>accessor : Symbol(accessor, Decl(recursiveStructures.ts, 2, 12)) + +export const tuple = [() => tuple] as const; +>tuple : Symbol(tuple, Decl(recursiveStructures.ts, 3, 12)) +>tuple : Symbol(tuple, Decl(recursiveStructures.ts, 3, 12)) +>const : Symbol(const) + +export const tupleObject = [{ next: () => tupleObject }] as const; +>tupleObject : Symbol(tupleObject, Decl(recursiveStructures.ts, 4, 12)) +>next : Symbol(next, Decl(recursiveStructures.ts, 4, 29)) +>tupleObject : Symbol(tupleObject, Decl(recursiveStructures.ts, 4, 12)) +>const : Symbol(const) + +export const array = [() => array]; +>array : Symbol(array, Decl(recursiveStructures.ts, 5, 12)) +>array : Symbol(array, Decl(recursiveStructures.ts, 5, 12)) + +export const first = { next: () => second }; +>first : Symbol(first, Decl(recursiveStructures.ts, 6, 12)) +>next : Symbol(next, Decl(recursiveStructures.ts, 6, 22)) +>second : Symbol(second, Decl(recursiveStructures.ts, 7, 12)) + +export const second = { next: () => first }; +>second : Symbol(second, Decl(recursiveStructures.ts, 7, 12)) +>next : Symbol(next, Decl(recursiveStructures.ts, 7, 23)) +>first : Symbol(first, Decl(recursiveStructures.ts, 6, 12)) + +export const nested = { inner: { next() { return nested.inner; } } }; +>nested : Symbol(nested, Decl(recursiveStructures.ts, 8, 12)) +>inner : Symbol(inner, Decl(recursiveStructures.ts, 8, 23)) +>next : Symbol(next, Decl(recursiveStructures.ts, 8, 32)) +>nested.inner : Symbol(inner, Decl(recursiveStructures.ts, 8, 23)) +>nested : Symbol(nested, Decl(recursiveStructures.ts, 8, 12)) +>inner : Symbol(inner, Decl(recursiveStructures.ts, 8, 23)) + +export const shadowed = { next: function self(shadowed: number) { return self; } }; +>shadowed : Symbol(shadowed, Decl(recursiveStructures.ts, 9, 12)) +>next : Symbol(next, Decl(recursiveStructures.ts, 9, 25)) +>self : Symbol(self, Decl(recursiveStructures.ts, 9, 31)) +>shadowed : Symbol(shadowed, Decl(recursiveStructures.ts, 9, 46)) +>self : Symbol(self, Decl(recursiveStructures.ts, 9, 31)) + +export const memberTuple = [function self() { return self; }] as const; +>memberTuple : Symbol(memberTuple, Decl(recursiveStructures.ts, 10, 12)) +>self : Symbol(self, Decl(recursiveStructures.ts, 10, 28)) +>self : Symbol(self, Decl(recursiveStructures.ts, 10, 28)) +>const : Symbol(const) + +export const memberArray = [function self() { return self; }]; +>memberArray : Symbol(memberArray, Decl(recursiveStructures.ts, 11, 12)) +>self : Symbol(self, Decl(recursiveStructures.ts, 11, 28)) +>self : Symbol(self, Decl(recursiveStructures.ts, 11, 28)) + +export const quoted = { "a-b": function self() { return self; } }; +>quoted : Symbol(quoted, Decl(recursiveStructures.ts, 12, 12)) +>"a-b" : Symbol("a-b", Decl(recursiveStructures.ts, 12, 23)) +>self : Symbol(self, Decl(recursiveStructures.ts, 12, 30)) +>self : Symbol(self, Decl(recursiveStructures.ts, 12, 30)) + +export const numeric = { 0: function self() { return self; } }; +>numeric : Symbol(numeric, Decl(recursiveStructures.ts, 13, 12)) +>0 : Symbol(0, Decl(recursiveStructures.ts, 13, 24)) +>self : Symbol(self, Decl(recursiveStructures.ts, 13, 27)) +>self : Symbol(self, Decl(recursiveStructures.ts, 13, 27)) + +export const key = Symbol(); +>key : Symbol(key, Decl(recursiveStructures.ts, 14, 12)) +>Symbol : Symbol(Symbol, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2019.symbol.d.ts, --, --)) + +export const computed = { [key]: function self() { return self; } }; +>computed : Symbol(computed, Decl(recursiveStructures.ts, 15, 12)) +>[key] : Symbol([key], Decl(recursiveStructures.ts, 15, 25)) +>key : Symbol(key, Decl(recursiveStructures.ts, 14, 12)) +>self : Symbol(self, Decl(recursiveStructures.ts, 15, 32)) +>self : Symbol(self, Decl(recursiveStructures.ts, 15, 32)) + +export const union = Math.random() ? { next: () => union } : undefined; +>union : Symbol(union, Decl(recursiveStructures.ts, 16, 12)) +>Math.random : Symbol(Math.random, Decl(lib.es5.d.ts, --, --)) +>Math : Symbol(Math, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2025.float16.d.ts, --, --) ... and 1 more) +>random : Symbol(Math.random, Decl(lib.es5.d.ts, --, --)) +>next : Symbol(next, Decl(recursiveStructures.ts, 16, 38)) +>union : Symbol(union, Decl(recursiveStructures.ts, 16, 12)) +>undefined : Symbol(undefined) + +function create(value: T) { +>create : Symbol(create, Decl(recursiveStructures.ts, 16, 71)) +>T : Symbol(T, Decl(recursiveStructures.ts, 18, 16)) +>value : Symbol(value, Decl(recursiveStructures.ts, 18, 19)) +>T : Symbol(T, Decl(recursiveStructures.ts, 18, 16)) + + const result = { value, next: () => result }; +>result : Symbol(result, Decl(recursiveStructures.ts, 19, 9)) +>value : Symbol(value, Decl(recursiveStructures.ts, 19, 20)) +>next : Symbol(next, Decl(recursiveStructures.ts, 19, 27)) +>result : Symbol(result, Decl(recursiveStructures.ts, 19, 9)) + + return result; +>result : Symbol(result, Decl(recursiveStructures.ts, 19, 9)) +} +export const specialized = create("text"); +>specialized : Symbol(specialized, Decl(recursiveStructures.ts, 22, 12)) +>create : Symbol(create, Decl(recursiveStructures.ts, 16, 71)) + +export const broad: unknown = { next() { return this; } }; +>broad : Symbol(broad, Decl(recursiveStructures.ts, 23, 12)) +>next : Symbol(next, Decl(recursiveStructures.ts, 23, 31)) + +function createIndexed() { +>createIndexed : Symbol(createIndexed, Decl(recursiveStructures.ts, 23, 58)) + + const value: { [key: string]: typeof value } = {}; +>value : Symbol(value, Decl(recursiveStructures.ts, 25, 9)) +>key : Symbol(key, Decl(recursiveStructures.ts, 25, 20)) +>value : Symbol(value, Decl(recursiveStructures.ts, 25, 9)) + + return value; +>value : Symbol(value, Decl(recursiveStructures.ts, 25, 9)) +} +export const indexed = createIndexed(); +>indexed : Symbol(indexed, Decl(recursiveStructures.ts, 28, 12)) +>createIndexed : Symbol(createIndexed, Decl(recursiveStructures.ts, 23, 58)) + +function createMapped() { +>createMapped : Symbol(createMapped, Decl(recursiveStructures.ts, 28, 39)) +>T : Symbol(T, Decl(recursiveStructures.ts, 29, 22)) + + const value: { [K in keyof T]: typeof value } = null!; +>value : Symbol(value, Decl(recursiveStructures.ts, 30, 9)) +>K : Symbol(K, Decl(recursiveStructures.ts, 30, 20)) +>T : Symbol(T, Decl(recursiveStructures.ts, 29, 22)) +>value : Symbol(value, Decl(recursiveStructures.ts, 30, 9)) + + return value; +>value : Symbol(value, Decl(recursiveStructures.ts, 30, 9)) +} +export const mapped = createMapped<{ next: unknown }>(); +>mapped : Symbol(mapped, Decl(recursiveStructures.ts, 33, 12)) +>createMapped : Symbol(createMapped, Decl(recursiveStructures.ts, 28, 39)) +>next : Symbol(next, Decl(recursiveStructures.ts, 33, 36)) + +function createAnnotated(value: T) { +>createAnnotated : Symbol(createAnnotated, Decl(recursiveStructures.ts, 33, 56)) +>T : Symbol(T, Decl(recursiveStructures.ts, 34, 25)) +>value : Symbol(value, Decl(recursiveStructures.ts, 34, 28)) +>T : Symbol(T, Decl(recursiveStructures.ts, 34, 25)) + + const node: { value: T; next: () => typeof node } = { value, next: () => node }; +>node : Symbol(node, Decl(recursiveStructures.ts, 35, 9)) +>value : Symbol(value, Decl(recursiveStructures.ts, 35, 17)) +>T : Symbol(T, Decl(recursiveStructures.ts, 34, 25)) +>next : Symbol(next, Decl(recursiveStructures.ts, 35, 27)) +>node : Symbol(node, Decl(recursiveStructures.ts, 35, 9)) +>value : Symbol(value, Decl(recursiveStructures.ts, 35, 57)) +>next : Symbol(next, Decl(recursiveStructures.ts, 35, 64)) +>node : Symbol(node, Decl(recursiveStructures.ts, 35, 9)) + + return node; +>node : Symbol(node, Decl(recursiveStructures.ts, 35, 9)) +} +export const viaAnnotation = createAnnotated("text"); +>viaAnnotation : Symbol(viaAnnotation, Decl(recursiveStructures.ts, 38, 12)) +>createAnnotated : Symbol(createAnnotated, Decl(recursiveStructures.ts, 33, 56)) + +const objectValue: number = object.next().next().value; +>objectValue : Symbol(objectValue, Decl(recursiveStructures.ts, 40, 5)) +>object.next().next().value : Symbol(value, Decl(recursiveStructures.ts, 0, 23)) +>object.next().next : Symbol(next, Decl(recursiveStructures.ts, 0, 33)) +>object.next : Symbol(next, Decl(recursiveStructures.ts, 0, 33)) +>object : Symbol(object, Decl(recursiveStructures.ts, 0, 12)) +>next : Symbol(next, Decl(recursiveStructures.ts, 0, 33)) +>next : Symbol(next, Decl(recursiveStructures.ts, 0, 33)) +>value : Symbol(value, Decl(recursiveStructures.ts, 0, 23)) + +const tupleValue: typeof tuple = tuple[0]()[0](); +>tupleValue : Symbol(tupleValue, Decl(recursiveStructures.ts, 41, 5)) +>tuple : Symbol(tuple, Decl(recursiveStructures.ts, 3, 12)) +>tuple : Symbol(tuple, Decl(recursiveStructures.ts, 3, 12)) +>0 : Symbol(0) +>0 : Symbol(0) + +const tupleObjectValue: typeof tupleObject = tupleObject[0].next(); +>tupleObjectValue : Symbol(tupleObjectValue, Decl(recursiveStructures.ts, 42, 5)) +>tupleObject : Symbol(tupleObject, Decl(recursiveStructures.ts, 4, 12)) +>tupleObject[0].next : Symbol(next, Decl(recursiveStructures.ts, 4, 29)) +>tupleObject : Symbol(tupleObject, Decl(recursiveStructures.ts, 4, 12)) +>0 : Symbol(0) +>next : Symbol(next, Decl(recursiveStructures.ts, 4, 29)) + +const arrayValue: typeof array = array[0]()[0](); +>arrayValue : Symbol(arrayValue, Decl(recursiveStructures.ts, 43, 5)) +>array : Symbol(array, Decl(recursiveStructures.ts, 5, 12)) +>array : Symbol(array, Decl(recursiveStructures.ts, 5, 12)) + +const nestedValue: typeof nested.inner = nested.inner.next().next(); +>nestedValue : Symbol(nestedValue, Decl(recursiveStructures.ts, 44, 5)) +>nested.inner : Symbol(inner, Decl(recursiveStructures.ts, 8, 23)) +>nested : Symbol(nested, Decl(recursiveStructures.ts, 8, 12)) +>inner : Symbol(inner, Decl(recursiveStructures.ts, 8, 23)) +>nested.inner.next().next : Symbol(next, Decl(recursiveStructures.ts, 8, 32)) +>nested.inner.next : Symbol(next, Decl(recursiveStructures.ts, 8, 32)) +>nested.inner : Symbol(inner, Decl(recursiveStructures.ts, 8, 23)) +>nested : Symbol(nested, Decl(recursiveStructures.ts, 8, 12)) +>inner : Symbol(inner, Decl(recursiveStructures.ts, 8, 23)) +>next : Symbol(next, Decl(recursiveStructures.ts, 8, 32)) +>next : Symbol(next, Decl(recursiveStructures.ts, 8, 32)) + +const specializedValue: string = specialized.next().next().value; +>specializedValue : Symbol(specializedValue, Decl(recursiveStructures.ts, 45, 5)) +>specialized.next().next().value : Symbol(value, Decl(recursiveStructures.ts, 19, 20)) +>specialized.next().next : Symbol(next, Decl(recursiveStructures.ts, 19, 27)) +>specialized.next : Symbol(next, Decl(recursiveStructures.ts, 19, 27)) +>specialized : Symbol(specialized, Decl(recursiveStructures.ts, 22, 12)) +>next : Symbol(next, Decl(recursiveStructures.ts, 19, 27)) +>next : Symbol(next, Decl(recursiveStructures.ts, 19, 27)) +>value : Symbol(value, Decl(recursiveStructures.ts, 19, 20)) + +const invalidValue: number = specialized.next().value; +>invalidValue : Symbol(invalidValue, Decl(recursiveStructures.ts, 46, 5)) +>specialized.next().value : Symbol(value, Decl(recursiveStructures.ts, 19, 20)) +>specialized.next : Symbol(next, Decl(recursiveStructures.ts, 19, 27)) +>specialized : Symbol(specialized, Decl(recursiveStructures.ts, 22, 12)) +>next : Symbol(next, Decl(recursiveStructures.ts, 19, 27)) +>value : Symbol(value, Decl(recursiveStructures.ts, 19, 20)) + +=== recursiveAnnotations.ts === +declare const object: { next: typeof object }; +>object : Symbol(object, Decl(recursiveAnnotations.ts, 0, 13)) +>next : Symbol(next, Decl(recursiveAnnotations.ts, 0, 23)) +>object : Symbol(object, Decl(recursiveAnnotations.ts, 0, 13)) + +declare const tuple: readonly [typeof tuple]; +>tuple : Symbol(tuple, Decl(recursiveAnnotations.ts, 1, 13)) +>tuple : Symbol(tuple, Decl(recursiveAnnotations.ts, 1, 13)) + +declare const array: Array; +>array : Symbol(array, Decl(recursiveAnnotations.ts, 2, 13)) +>Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --) ... and 4 more) +>array : Symbol(array, Decl(recursiveAnnotations.ts, 2, 13)) + +declare const tupleFunction: readonly [() => typeof tupleFunction]; +>tupleFunction : Symbol(tupleFunction, Decl(recursiveAnnotations.ts, 3, 13)) +>tupleFunction : Symbol(tupleFunction, Decl(recursiveAnnotations.ts, 3, 13)) + +declare const tupleObject: readonly [{ next: typeof tupleObject }]; +>tupleObject : Symbol(tupleObject, Decl(recursiveAnnotations.ts, 4, 13)) +>next : Symbol(next, Decl(recursiveAnnotations.ts, 4, 38)) +>tupleObject : Symbol(tupleObject, Decl(recursiveAnnotations.ts, 4, 13)) + +declare const objectTuple: { next: readonly [typeof objectTuple] }; +>objectTuple : Symbol(objectTuple, Decl(recursiveAnnotations.ts, 5, 13)) +>next : Symbol(next, Decl(recursiveAnnotations.ts, 5, 28)) +>objectTuple : Symbol(objectTuple, Decl(recursiveAnnotations.ts, 5, 13)) + +declare const mapped: { [K in "next"]: typeof mapped }; +>mapped : Symbol(mapped, Decl(recursiveAnnotations.ts, 6, 13)) +>K : Symbol(K, Decl(recursiveAnnotations.ts, 6, 25)) +>mapped : Symbol(mapped, Decl(recursiveAnnotations.ts, 6, 13)) + +declare const union: typeof union | undefined; +>union : Symbol(union, Decl(recursiveAnnotations.ts, 7, 13)) +>union : Symbol(union, Decl(recursiveAnnotations.ts, 7, 13)) + +declare const conditional: true extends false ? never : typeof conditional; +>conditional : Symbol(conditional, Decl(recursiveAnnotations.ts, 8, 13)) +>conditional : Symbol(conditional, Decl(recursiveAnnotations.ts, 8, 13)) + +=== namedReferences.ts === +export type Link = { value: T; next: Link }; +>Link : Symbol(Link, Decl(namedReferences.ts, 0, 0)) +>T : Symbol(T, Decl(namedReferences.ts, 0, 17)) +>value : Symbol(value, Decl(namedReferences.ts, 0, 23)) +>T : Symbol(T, Decl(namedReferences.ts, 0, 17)) +>next : Symbol(next, Decl(namedReferences.ts, 0, 33)) +>Link : Symbol(Link, Decl(namedReferences.ts, 0, 0)) +>T : Symbol(T, Decl(namedReferences.ts, 0, 17)) + +export type Callable = { (value: T): Callable; link: Link }; +>Callable : Symbol(Callable, Decl(namedReferences.ts, 0, 50)) +>T : Symbol(T, Decl(namedReferences.ts, 1, 21)) +>value : Symbol(value, Decl(namedReferences.ts, 1, 29)) +>T : Symbol(T, Decl(namedReferences.ts, 1, 21)) +>Callable : Symbol(Callable, Decl(namedReferences.ts, 0, 50)) +>T : Symbol(T, Decl(namedReferences.ts, 1, 21)) +>link : Symbol(link, Decl(namedReferences.ts, 1, 52)) +>Link : Symbol(Link, Decl(namedReferences.ts, 0, 0)) +>T : Symbol(T, Decl(namedReferences.ts, 1, 21)) + +export type Wrapped = ( { next: Wrapped } ); +>Wrapped : Symbol(Wrapped, Decl(namedReferences.ts, 1, 69)) +>next : Symbol(next, Decl(namedReferences.ts, 2, 25)) +>Wrapped : Symbol(Wrapped, Decl(namedReferences.ts, 1, 69)) + +export declare const link: Link; +>link : Symbol(link, Decl(namedReferences.ts, 3, 20)) +>Link : Symbol(Link, Decl(namedReferences.ts, 0, 0)) + +export declare const callable: Callable; +>callable : Symbol(callable, Decl(namedReferences.ts, 4, 20)) +>Callable : Symbol(Callable, Decl(namedReferences.ts, 0, 50)) + +export const nextLink = link.next; +>nextLink : Symbol(nextLink, Decl(namedReferences.ts, 5, 12)) +>link.next : Symbol(next, Decl(namedReferences.ts, 0, 33)) +>link : Symbol(link, Decl(namedReferences.ts, 3, 20)) +>next : Symbol(next, Decl(namedReferences.ts, 0, 33)) + +export const nextCallable = callable(1); +>nextCallable : Symbol(nextCallable, Decl(namedReferences.ts, 6, 12)) +>callable : Symbol(callable, Decl(namedReferences.ts, 4, 20)) + +export const parenthesized = (function self() { return self; }); +>parenthesized : Symbol(parenthesized, Decl(namedReferences.ts, 7, 12)) +>self : Symbol(self, Decl(namedReferences.ts, 7, 30)) +>self : Symbol(self, Decl(namedReferences.ts, 7, 30)) + +export const asserted = (function self() { return self; }) satisfies () => unknown; +>asserted : Symbol(asserted, Decl(namedReferences.ts, 8, 12)) +>self : Symbol(self, Decl(namedReferences.ts, 8, 25)) +>self : Symbol(self, Decl(namedReferences.ts, 8, 25)) + +export const widened: () => unknown = (function self() { return self; }); +>widened : Symbol(widened, Decl(namedReferences.ts, 9, 12)) +>self : Symbol(self, Decl(namedReferences.ts, 9, 39)) +>self : Symbol(self, Decl(namedReferences.ts, 9, 39)) + +function createHidden(value: T) { +>createHidden : Symbol(createHidden, Decl(namedReferences.ts, 9, 73)) +>T : Symbol(T, Decl(namedReferences.ts, 10, 22)) +>value : Symbol(value, Decl(namedReferences.ts, 10, 25)) +>T : Symbol(T, Decl(namedReferences.ts, 10, 22)) + + type Hidden = { value: T; next: Hidden }; +>Hidden : Symbol(Hidden, Decl(namedReferences.ts, 10, 36)) +>value : Symbol(value, Decl(namedReferences.ts, 11, 19)) +>T : Symbol(T, Decl(namedReferences.ts, 10, 22)) +>next : Symbol(next, Decl(namedReferences.ts, 11, 29)) +>Hidden : Symbol(Hidden, Decl(namedReferences.ts, 10, 36)) + + return null! as Hidden; +>Hidden : Symbol(Hidden, Decl(namedReferences.ts, 10, 36)) +} +export const hiddenAlias = createHidden("text"); +>hiddenAlias : Symbol(hiddenAlias, Decl(namedReferences.ts, 14, 12)) +>createHidden : Symbol(createHidden, Decl(namedReferences.ts, 9, 73)) + +export const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias }; +>siblingHiddenAliases : Symbol(siblingHiddenAliases, Decl(namedReferences.ts, 15, 12)) +>first : Symbol(first, Decl(namedReferences.ts, 15, 37)) +>hiddenAlias : Symbol(hiddenAlias, Decl(namedReferences.ts, 14, 12)) +>second : Symbol(second, Decl(namedReferences.ts, 15, 57)) +>hiddenAlias : Symbol(hiddenAlias, Decl(namedReferences.ts, 14, 12)) + +export const methodKey = Symbol(); +>methodKey : Symbol(methodKey, Decl(namedReferences.ts, 16, 12)) +>Symbol : Symbol(Symbol, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2019.symbol.d.ts, --, --)) + +export class Methods { +>Methods : Symbol(Methods, Decl(namedReferences.ts, 16, 34)) + + static recur() { return Methods.recur; } +>recur : Symbol(Methods.recur, Decl(namedReferences.ts, 17, 22)) +>Methods.recur : Symbol(Methods.recur, Decl(namedReferences.ts, 17, 22)) +>Methods : Symbol(Methods, Decl(namedReferences.ts, 16, 34)) +>recur : Symbol(Methods.recur, Decl(namedReferences.ts, 17, 22)) + + static "a-b"() { return Methods["a-b"]; } +>"a-b" : Symbol(Methods["a-b"], Decl(namedReferences.ts, 18, 44)) +>Methods : Symbol(Methods, Decl(namedReferences.ts, 16, 34)) +>"a-b" : Symbol(Methods["a-b"], Decl(namedReferences.ts, 18, 44)) + + static [methodKey]() { return Methods[methodKey]; } +>[methodKey] : Symbol(Methods[methodKey], Decl(namedReferences.ts, 19, 45)) +>methodKey : Symbol(methodKey, Decl(namedReferences.ts, 16, 12)) +>Methods : Symbol(Methods, Decl(namedReferences.ts, 16, 34)) +>methodKey : Symbol(methodKey, Decl(namedReferences.ts, 16, 12)) + + recur() { return this.recur; } +>recur : Symbol(Methods.recur, Decl(namedReferences.ts, 20, 55)) +>this.recur : Symbol(Methods.recur, Decl(namedReferences.ts, 20, 55)) +>this : Symbol(Methods, Decl(namedReferences.ts, 16, 34)) +>recur : Symbol(Methods.recur, Decl(namedReferences.ts, 20, 55)) +} +export function overloaded(value: string): typeof overloaded; +>overloaded : Symbol(overloaded, Decl(namedReferences.ts, 22, 1), Decl(namedReferences.ts, 23, 61), Decl(namedReferences.ts, 24, 61)) +>value : Symbol(value, Decl(namedReferences.ts, 23, 27)) +>overloaded : Symbol(overloaded, Decl(namedReferences.ts, 22, 1), Decl(namedReferences.ts, 23, 61), Decl(namedReferences.ts, 24, 61)) + +export function overloaded(value: number): typeof overloaded; +>overloaded : Symbol(overloaded, Decl(namedReferences.ts, 22, 1), Decl(namedReferences.ts, 23, 61), Decl(namedReferences.ts, 24, 61)) +>value : Symbol(value, Decl(namedReferences.ts, 24, 27)) +>overloaded : Symbol(overloaded, Decl(namedReferences.ts, 22, 1), Decl(namedReferences.ts, 23, 61), Decl(namedReferences.ts, 24, 61)) + +export function overloaded(value: string | number) { return overloaded; } +>overloaded : Symbol(overloaded, Decl(namedReferences.ts, 22, 1), Decl(namedReferences.ts, 23, 61), Decl(namedReferences.ts, 24, 61)) +>value : Symbol(value, Decl(namedReferences.ts, 25, 27)) +>overloaded : Symbol(overloaded, Decl(namedReferences.ts, 22, 1), Decl(namedReferences.ts, 23, 61), Decl(namedReferences.ts, 24, 61)) + +const text: string = nextLink.next.value; +>text : Symbol(text, Decl(namedReferences.ts, 26, 5)) +>nextLink.next.value : Symbol(value, Decl(namedReferences.ts, 0, 23)) +>nextLink.next : Symbol(next, Decl(namedReferences.ts, 0, 33)) +>nextLink : Symbol(nextLink, Decl(namedReferences.ts, 5, 12)) +>next : Symbol(next, Decl(namedReferences.ts, 0, 33)) +>value : Symbol(value, Decl(namedReferences.ts, 0, 23)) + +const invalid: number = nextLink.next.value; +>invalid : Symbol(invalid, Decl(namedReferences.ts, 27, 5)) +>nextLink.next.value : Symbol(value, Decl(namedReferences.ts, 0, 23)) +>nextLink.next : Symbol(next, Decl(namedReferences.ts, 0, 33)) +>nextLink : Symbol(nextLink, Decl(namedReferences.ts, 5, 12)) +>next : Symbol(next, Decl(namedReferences.ts, 0, 33)) +>value : Symbol(value, Decl(namedReferences.ts, 0, 23)) + +nextCallable("wrong"); +>nextCallable : Symbol(nextCallable, Decl(namedReferences.ts, 6, 12)) + +=== hiddenReferences.ts === +export class Hidden { +>Hidden : Symbol(Hidden, Decl(hiddenReferences.ts, 0, 0)) + + private static recur() { return Hidden.recur; } +>recur : Symbol(Hidden.recur, Decl(hiddenReferences.ts, 0, 21)) +>Hidden.recur : Symbol(Hidden.recur, Decl(hiddenReferences.ts, 0, 21)) +>Hidden : Symbol(Hidden, Decl(hiddenReferences.ts, 0, 0)) +>recur : Symbol(Hidden.recur, Decl(hiddenReferences.ts, 0, 21)) + + static expose() { return Hidden.recur; } +>expose : Symbol(Hidden.expose, Decl(hiddenReferences.ts, 1, 51)) +>Hidden.recur : Symbol(Hidden.recur, Decl(hiddenReferences.ts, 0, 21)) +>Hidden : Symbol(Hidden, Decl(hiddenReferences.ts, 0, 0)) +>recur : Symbol(Hidden.recur, Decl(hiddenReferences.ts, 0, 21)) + + protected next() { return this.next; } +>next : Symbol(Hidden.next, Decl(hiddenReferences.ts, 2, 44)) +>this.next : Symbol(Hidden.next, Decl(hiddenReferences.ts, 2, 44)) +>this : Symbol(Hidden, Decl(hiddenReferences.ts, 0, 0)) +>next : Symbol(Hidden.next, Decl(hiddenReferences.ts, 2, 44)) + + expose() { return this.next; } +>expose : Symbol(Hidden.expose, Decl(hiddenReferences.ts, 3, 42)) +>this.next : Symbol(Hidden.next, Decl(hiddenReferences.ts, 2, 44)) +>this : Symbol(Hidden, Decl(hiddenReferences.ts, 0, 0)) +>next : Symbol(Hidden.next, Decl(hiddenReferences.ts, 2, 44)) +} + +=== signatureScopes.ts === +export const scoped = { +>scoped : Symbol(scoped, Decl(signatureScopes.ts, 0, 12)) + + first(outer: T) { +>first : Symbol(first, Decl(signatureScopes.ts, 0, 23)) +>T : Symbol(T, Decl(signatureScopes.ts, 1, 10)) +>outer : Symbol(outer, Decl(signatureScopes.ts, 1, 13)) +>T : Symbol(T, Decl(signatureScopes.ts, 1, 10)) + + return { + nested(inner: T) { return { outer, inner, next: scoped }; }, +>nested : Symbol(nested, Decl(signatureScopes.ts, 2, 16)) +>T : Symbol(T, Decl(signatureScopes.ts, 3, 19)) +>inner : Symbol(inner, Decl(signatureScopes.ts, 3, 22)) +>T : Symbol(T, Decl(signatureScopes.ts, 3, 19)) +>outer : Symbol(outer, Decl(signatureScopes.ts, 3, 42)) +>inner : Symbol(inner, Decl(signatureScopes.ts, 3, 49)) +>next : Symbol(next, Decl(signatureScopes.ts, 3, 56)) +>scoped : Symbol(scoped, Decl(signatureScopes.ts, 0, 12)) + + sibling(inner: T) { return { outer, inner, next: scoped }; }, +>sibling : Symbol(sibling, Decl(signatureScopes.ts, 3, 75)) +>T : Symbol(T, Decl(signatureScopes.ts, 4, 20)) +>inner : Symbol(inner, Decl(signatureScopes.ts, 4, 23)) +>T : Symbol(T, Decl(signatureScopes.ts, 4, 20)) +>outer : Symbol(outer, Decl(signatureScopes.ts, 4, 43)) +>inner : Symbol(inner, Decl(signatureScopes.ts, 4, 50)) +>next : Symbol(next, Decl(signatureScopes.ts, 4, 57)) +>scoped : Symbol(scoped, Decl(signatureScopes.ts, 0, 12)) + + }; + }, + second(value: T) { return { value, next: scoped }; }, +>second : Symbol(second, Decl(signatureScopes.ts, 6, 6)) +>T : Symbol(T, Decl(signatureScopes.ts, 7, 11)) +>value : Symbol(value, Decl(signatureScopes.ts, 7, 14)) +>T : Symbol(T, Decl(signatureScopes.ts, 7, 11)) +>value : Symbol(value, Decl(signatureScopes.ts, 7, 34)) +>next : Symbol(next, Decl(signatureScopes.ts, 7, 41)) +>scoped : Symbol(scoped, Decl(signatureScopes.ts, 0, 12)) + +}; +export const numberScope = scoped.first(1); +>numberScope : Symbol(numberScope, Decl(signatureScopes.ts, 9, 12)) +>scoped.first : Symbol(first, Decl(signatureScopes.ts, 0, 23)) +>scoped : Symbol(scoped, Decl(signatureScopes.ts, 0, 12)) +>first : Symbol(first, Decl(signatureScopes.ts, 0, 23)) + +export const stringScope = scoped.first("outer"); +>stringScope : Symbol(stringScope, Decl(signatureScopes.ts, 10, 12)) +>scoped.first : Symbol(first, Decl(signatureScopes.ts, 0, 23)) +>scoped : Symbol(scoped, Decl(signatureScopes.ts, 0, 12)) +>first : Symbol(first, Decl(signatureScopes.ts, 0, 23)) + +const nested = numberScope.nested("inner"); +>nested : Symbol(nested, Decl(signatureScopes.ts, 11, 5)) +>numberScope.nested : Symbol(nested, Decl(signatureScopes.ts, 2, 16)) +>numberScope : Symbol(numberScope, Decl(signatureScopes.ts, 9, 12)) +>nested : Symbol(nested, Decl(signatureScopes.ts, 2, 16)) + +const sibling = numberScope.sibling(true); +>sibling : Symbol(sibling, Decl(signatureScopes.ts, 12, 5)) +>numberScope.sibling : Symbol(sibling, Decl(signatureScopes.ts, 3, 75)) +>numberScope : Symbol(numberScope, Decl(signatureScopes.ts, 9, 12)) +>sibling : Symbol(sibling, Decl(signatureScopes.ts, 3, 75)) + +const nestedOuter: number = nested.outer; +>nestedOuter : Symbol(nestedOuter, Decl(signatureScopes.ts, 13, 5)) +>nested.outer : Symbol(outer, Decl(signatureScopes.ts, 3, 42)) +>nested : Symbol(nested, Decl(signatureScopes.ts, 11, 5)) +>outer : Symbol(outer, Decl(signatureScopes.ts, 3, 42)) + +const nestedInner: string = nested.inner; +>nestedInner : Symbol(nestedInner, Decl(signatureScopes.ts, 14, 5)) +>nested.inner : Symbol(inner, Decl(signatureScopes.ts, 3, 49)) +>nested : Symbol(nested, Decl(signatureScopes.ts, 11, 5)) +>inner : Symbol(inner, Decl(signatureScopes.ts, 3, 49)) + +const siblingOuter: number = sibling.outer; +>siblingOuter : Symbol(siblingOuter, Decl(signatureScopes.ts, 15, 5)) +>sibling.outer : Symbol(outer, Decl(signatureScopes.ts, 4, 43)) +>sibling : Symbol(sibling, Decl(signatureScopes.ts, 12, 5)) +>outer : Symbol(outer, Decl(signatureScopes.ts, 4, 43)) + +const siblingInner: boolean = sibling.inner; +>siblingInner : Symbol(siblingInner, Decl(signatureScopes.ts, 16, 5)) +>sibling.inner : Symbol(inner, Decl(signatureScopes.ts, 4, 50)) +>sibling : Symbol(sibling, Decl(signatureScopes.ts, 12, 5)) +>inner : Symbol(inner, Decl(signatureScopes.ts, 4, 50)) + +const stringOuter: string = stringScope.nested(1).outer; +>stringOuter : Symbol(stringOuter, Decl(signatureScopes.ts, 17, 5)) +>stringScope.nested(1).outer : Symbol(outer, Decl(signatureScopes.ts, 3, 42)) +>stringScope.nested : Symbol(nested, Decl(signatureScopes.ts, 2, 16)) +>stringScope : Symbol(stringScope, Decl(signatureScopes.ts, 10, 12)) +>nested : Symbol(nested, Decl(signatureScopes.ts, 2, 16)) +>outer : Symbol(outer, Decl(signatureScopes.ts, 3, 42)) + +const again: number = nested.next.second(1).value; +>again : Symbol(again, Decl(signatureScopes.ts, 18, 5)) +>nested.next.second(1).value : Symbol(value, Decl(signatureScopes.ts, 7, 34)) +>nested.next.second : Symbol(second, Decl(signatureScopes.ts, 6, 6)) +>nested.next : Symbol(next, Decl(signatureScopes.ts, 3, 56)) +>nested : Symbol(nested, Decl(signatureScopes.ts, 11, 5)) +>next : Symbol(next, Decl(signatureScopes.ts, 3, 56)) +>second : Symbol(second, Decl(signatureScopes.ts, 6, 6)) +>value : Symbol(value, Decl(signatureScopes.ts, 7, 34)) + +export const nestedOwner = { +>nestedOwner : Symbol(nestedOwner, Decl(signatureScopes.ts, 20, 12)) + + make(outer: T) { +>make : Symbol(make, Decl(signatureScopes.ts, 20, 28)) +>T : Symbol(T, Decl(signatureScopes.ts, 21, 9)) +>outer : Symbol(outer, Decl(signatureScopes.ts, 21, 12)) +>T : Symbol(T, Decl(signatureScopes.ts, 21, 9)) + + return { + nested(inner: U) { return { outer, inner, owner: nestedOwner }; }, +>nested : Symbol(nested, Decl(signatureScopes.ts, 22, 16)) +>U : Symbol(U, Decl(signatureScopes.ts, 23, 19)) +>inner : Symbol(inner, Decl(signatureScopes.ts, 23, 22)) +>U : Symbol(U, Decl(signatureScopes.ts, 23, 19)) +>outer : Symbol(outer, Decl(signatureScopes.ts, 23, 42)) +>inner : Symbol(inner, Decl(signatureScopes.ts, 23, 49)) +>owner : Symbol(owner, Decl(signatureScopes.ts, 23, 56)) +>nestedOwner : Symbol(nestedOwner, Decl(signatureScopes.ts, 20, 12)) + + constrained(inner: U) { return { outer, inner, owner: nestedOwner }; }, +>constrained : Symbol(constrained, Decl(signatureScopes.ts, 23, 81)) +>U : Symbol(U, Decl(signatureScopes.ts, 24, 24)) +>T : Symbol(T, Decl(signatureScopes.ts, 21, 9)) +>T : Symbol(T, Decl(signatureScopes.ts, 21, 9)) +>inner : Symbol(inner, Decl(signatureScopes.ts, 24, 41)) +>U : Symbol(U, Decl(signatureScopes.ts, 24, 24)) +>outer : Symbol(outer, Decl(signatureScopes.ts, 24, 61)) +>inner : Symbol(inner, Decl(signatureScopes.ts, 24, 68)) +>owner : Symbol(owner, Decl(signatureScopes.ts, 24, 75)) +>nestedOwner : Symbol(nestedOwner, Decl(signatureScopes.ts, 20, 12)) + + copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } { +>copied : Symbol(copied, Decl(signatureScopes.ts, 24, 100)) +>U : Symbol(U, Decl(signatureScopes.ts, 25, 19)) +>inner : Symbol(inner, Decl(signatureScopes.ts, 25, 22)) +>U : Symbol(U, Decl(signatureScopes.ts, 25, 19)) +>outer : Symbol(outer, Decl(signatureScopes.ts, 25, 34)) +>T : Symbol(T, Decl(signatureScopes.ts, 21, 9)) +>inner : Symbol(inner, Decl(signatureScopes.ts, 25, 44)) +>U : Symbol(U, Decl(signatureScopes.ts, 25, 19)) +>owner : Symbol(owner, Decl(signatureScopes.ts, 25, 54)) +>nestedOwner : Symbol(nestedOwner, Decl(signatureScopes.ts, 20, 12)) + + return { outer, inner, owner: nestedOwner }; +>outer : Symbol(outer, Decl(signatureScopes.ts, 26, 24)) +>inner : Symbol(inner, Decl(signatureScopes.ts, 26, 31)) +>owner : Symbol(owner, Decl(signatureScopes.ts, 26, 38)) +>nestedOwner : Symbol(nestedOwner, Decl(signatureScopes.ts, 20, 12)) + + }, + rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; }, +>rest : Symbol(rest, Decl(signatureScopes.ts, 27, 14)) +>U : Symbol(U, Decl(signatureScopes.ts, 28, 17)) +>values : Symbol(values, Decl(signatureScopes.ts, 28, 20)) +>U : Symbol(U, Decl(signatureScopes.ts, 28, 17)) +>outer : Symbol(outer, Decl(signatureScopes.ts, 28, 46)) +>inner : Symbol(inner, Decl(signatureScopes.ts, 28, 53)) +>values : Symbol(values, Decl(signatureScopes.ts, 28, 20)) +>0 : Symbol(0) +>owner : Symbol(owner, Decl(signatureScopes.ts, 28, 71)) +>nestedOwner : Symbol(nestedOwner, Decl(signatureScopes.ts, 20, 12)) + + }; + }, +}; +export const nestedNumber = nestedOwner.make(1); +>nestedNumber : Symbol(nestedNumber, Decl(signatureScopes.ts, 32, 12)) +>nestedOwner.make : Symbol(make, Decl(signatureScopes.ts, 20, 28)) +>nestedOwner : Symbol(nestedOwner, Decl(signatureScopes.ts, 20, 12)) +>make : Symbol(make, Decl(signatureScopes.ts, 20, 28)) + +export const nestedString = nestedNumber.nested(true).owner.make("text").nested(2); +>nestedString : Symbol(nestedString, Decl(signatureScopes.ts, 33, 12)) +>nestedNumber.nested(true).owner.make("text").nested : Symbol(nested, Decl(signatureScopes.ts, 22, 16)) +>nestedNumber.nested(true).owner.make : Symbol(make, Decl(signatureScopes.ts, 20, 28)) +>nestedNumber.nested(true).owner : Symbol(owner, Decl(signatureScopes.ts, 23, 56)) +>nestedNumber.nested : Symbol(nested, Decl(signatureScopes.ts, 22, 16)) +>nestedNumber : Symbol(nestedNumber, Decl(signatureScopes.ts, 32, 12)) +>nested : Symbol(nested, Decl(signatureScopes.ts, 22, 16)) +>owner : Symbol(owner, Decl(signatureScopes.ts, 23, 56)) +>make : Symbol(make, Decl(signatureScopes.ts, 20, 28)) +>nested : Symbol(nested, Decl(signatureScopes.ts, 22, 16)) + +export const nestedBoolean = nestedString.owner.make(true).nested("inner"); +>nestedBoolean : Symbol(nestedBoolean, Decl(signatureScopes.ts, 34, 12)) +>nestedString.owner.make(true).nested : Symbol(nested, Decl(signatureScopes.ts, 22, 16)) +>nestedString.owner.make : Symbol(make, Decl(signatureScopes.ts, 20, 28)) +>nestedString.owner : Symbol(owner, Decl(signatureScopes.ts, 23, 56)) +>nestedString : Symbol(nestedString, Decl(signatureScopes.ts, 33, 12)) +>owner : Symbol(owner, Decl(signatureScopes.ts, 23, 56)) +>make : Symbol(make, Decl(signatureScopes.ts, 20, 28)) +>nested : Symbol(nested, Decl(signatureScopes.ts, 22, 16)) + +const nestedStringOuter: string = nestedString.outer; +>nestedStringOuter : Symbol(nestedStringOuter, Decl(signatureScopes.ts, 35, 5)) +>nestedString.outer : Symbol(outer, Decl(signatureScopes.ts, 23, 42)) +>nestedString : Symbol(nestedString, Decl(signatureScopes.ts, 33, 12)) +>outer : Symbol(outer, Decl(signatureScopes.ts, 23, 42)) + +const nestedStringInner: number = nestedString.inner; +>nestedStringInner : Symbol(nestedStringInner, Decl(signatureScopes.ts, 36, 5)) +>nestedString.inner : Symbol(inner, Decl(signatureScopes.ts, 23, 49)) +>nestedString : Symbol(nestedString, Decl(signatureScopes.ts, 33, 12)) +>inner : Symbol(inner, Decl(signatureScopes.ts, 23, 49)) + +const nestedBooleanOuter: boolean = nestedBoolean.outer; +>nestedBooleanOuter : Symbol(nestedBooleanOuter, Decl(signatureScopes.ts, 37, 5)) +>nestedBoolean.outer : Symbol(outer, Decl(signatureScopes.ts, 23, 42)) +>nestedBoolean : Symbol(nestedBoolean, Decl(signatureScopes.ts, 34, 12)) +>outer : Symbol(outer, Decl(signatureScopes.ts, 23, 42)) + +const nestedBooleanInner: string = nestedBoolean.inner; +>nestedBooleanInner : Symbol(nestedBooleanInner, Decl(signatureScopes.ts, 38, 5)) +>nestedBoolean.inner : Symbol(inner, Decl(signatureScopes.ts, 23, 49)) +>nestedBoolean : Symbol(nestedBoolean, Decl(signatureScopes.ts, 34, 12)) +>inner : Symbol(inner, Decl(signatureScopes.ts, 23, 49)) + +const constrainedOuter: number = nestedNumber.constrained(2).outer; +>constrainedOuter : Symbol(constrainedOuter, Decl(signatureScopes.ts, 39, 5)) +>nestedNumber.constrained(2).outer : Symbol(outer, Decl(signatureScopes.ts, 24, 61)) +>nestedNumber.constrained : Symbol(constrained, Decl(signatureScopes.ts, 23, 81)) +>nestedNumber : Symbol(nestedNumber, Decl(signatureScopes.ts, 32, 12)) +>constrained : Symbol(constrained, Decl(signatureScopes.ts, 23, 81)) +>outer : Symbol(outer, Decl(signatureScopes.ts, 24, 61)) + +const constrainedInner: number = nestedNumber.constrained(2).inner; +>constrainedInner : Symbol(constrainedInner, Decl(signatureScopes.ts, 40, 5)) +>nestedNumber.constrained(2).inner : Symbol(inner, Decl(signatureScopes.ts, 24, 68)) +>nestedNumber.constrained : Symbol(constrained, Decl(signatureScopes.ts, 23, 81)) +>nestedNumber : Symbol(nestedNumber, Decl(signatureScopes.ts, 32, 12)) +>constrained : Symbol(constrained, Decl(signatureScopes.ts, 23, 81)) +>inner : Symbol(inner, Decl(signatureScopes.ts, 24, 68)) + +const copiedOuter: number = nestedNumber.copied("inner").outer; +>copiedOuter : Symbol(copiedOuter, Decl(signatureScopes.ts, 41, 5)) +>nestedNumber.copied("inner").outer : Symbol(outer, Decl(signatureScopes.ts, 25, 34)) +>nestedNumber.copied : Symbol(copied, Decl(signatureScopes.ts, 24, 100)) +>nestedNumber : Symbol(nestedNumber, Decl(signatureScopes.ts, 32, 12)) +>copied : Symbol(copied, Decl(signatureScopes.ts, 24, 100)) +>outer : Symbol(outer, Decl(signatureScopes.ts, 25, 34)) + +const copiedInner: string = nestedNumber.copied("inner").inner; +>copiedInner : Symbol(copiedInner, Decl(signatureScopes.ts, 42, 5)) +>nestedNumber.copied("inner").inner : Symbol(inner, Decl(signatureScopes.ts, 25, 44)) +>nestedNumber.copied : Symbol(copied, Decl(signatureScopes.ts, 24, 100)) +>nestedNumber : Symbol(nestedNumber, Decl(signatureScopes.ts, 32, 12)) +>copied : Symbol(copied, Decl(signatureScopes.ts, 24, 100)) +>inner : Symbol(inner, Decl(signatureScopes.ts, 25, 44)) + +const restOuter: number = nestedNumber.rest(true).outer; +>restOuter : Symbol(restOuter, Decl(signatureScopes.ts, 43, 5)) +>nestedNumber.rest(true).outer : Symbol(outer, Decl(signatureScopes.ts, 28, 46)) +>nestedNumber.rest : Symbol(rest, Decl(signatureScopes.ts, 27, 14)) +>nestedNumber : Symbol(nestedNumber, Decl(signatureScopes.ts, 32, 12)) +>rest : Symbol(rest, Decl(signatureScopes.ts, 27, 14)) +>outer : Symbol(outer, Decl(signatureScopes.ts, 28, 46)) + +const restInner: boolean = nestedNumber.rest(true).inner; +>restInner : Symbol(restInner, Decl(signatureScopes.ts, 44, 5)) +>nestedNumber.rest(true).inner : Symbol(inner, Decl(signatureScopes.ts, 28, 53)) +>nestedNumber.rest : Symbol(rest, Decl(signatureScopes.ts, 27, 14)) +>nestedNumber : Symbol(nestedNumber, Decl(signatureScopes.ts, 32, 12)) +>rest : Symbol(rest, Decl(signatureScopes.ts, 27, 14)) +>inner : Symbol(inner, Decl(signatureScopes.ts, 28, 53)) + +export declare const reused: { +>reused : Symbol(reused, Decl(signatureScopes.ts, 46, 20)) + + first(...values: [T]): { value: T; next: typeof reused }; +>first : Symbol(first, Decl(signatureScopes.ts, 46, 30)) +>T : Symbol(T, Decl(signatureScopes.ts, 47, 10)) +>values : Symbol(values, Decl(signatureScopes.ts, 47, 13)) +>T : Symbol(T, Decl(signatureScopes.ts, 47, 10)) +>value : Symbol(value, Decl(signatureScopes.ts, 47, 31)) +>T : Symbol(T, Decl(signatureScopes.ts, 47, 10)) +>next : Symbol(next, Decl(signatureScopes.ts, 47, 41)) +>reused : Symbol(reused, Decl(signatureScopes.ts, 46, 20)) + + second(value: T): { value: T; next: typeof reused }; +>second : Symbol(second, Decl(signatureScopes.ts, 47, 64)) +>T : Symbol(T, Decl(signatureScopes.ts, 48, 11)) +>value : Symbol(value, Decl(signatureScopes.ts, 48, 14)) +>T : Symbol(T, Decl(signatureScopes.ts, 48, 11)) +>value : Symbol(value, Decl(signatureScopes.ts, 48, 26)) +>T : Symbol(T, Decl(signatureScopes.ts, 48, 11)) +>next : Symbol(next, Decl(signatureScopes.ts, 48, 36)) +>reused : Symbol(reused, Decl(signatureScopes.ts, 46, 20)) + + shadowed(reused: T): { value: T; next: typeof reused }; +>shadowed : Symbol(shadowed, Decl(signatureScopes.ts, 48, 59)) +>T : Symbol(T, Decl(signatureScopes.ts, 49, 13)) +>reused : Symbol(reused, Decl(signatureScopes.ts, 49, 16)) +>T : Symbol(T, Decl(signatureScopes.ts, 49, 13)) +>value : Symbol(value, Decl(signatureScopes.ts, 49, 29)) +>T : Symbol(T, Decl(signatureScopes.ts, 49, 13)) +>next : Symbol(next, Decl(signatureScopes.ts, 49, 39)) +>reused : Symbol(reused, Decl(signatureScopes.ts, 49, 16)) + +}; +export const copy = reused; +>copy : Symbol(copy, Decl(signatureScopes.ts, 51, 12)) +>reused : Symbol(reused, Decl(signatureScopes.ts, 46, 20)) + +const restValue: number = copy.first(1).next.second(2).value; +>restValue : Symbol(restValue, Decl(signatureScopes.ts, 52, 5)) +>copy.first(1).next.second(2).value : Symbol(value, Decl(signatureScopes.ts, 48, 26)) +>copy.first(1).next.second : Symbol(second, Decl(signatureScopes.ts, 47, 64)) +>copy.first(1).next : Symbol(next, Decl(signatureScopes.ts, 47, 41)) +>copy.first : Symbol(first, Decl(signatureScopes.ts, 46, 30)) +>copy : Symbol(copy, Decl(signatureScopes.ts, 51, 12)) +>first : Symbol(first, Decl(signatureScopes.ts, 46, 30)) +>next : Symbol(next, Decl(signatureScopes.ts, 47, 41)) +>second : Symbol(second, Decl(signatureScopes.ts, 47, 64)) +>value : Symbol(value, Decl(signatureScopes.ts, 48, 26)) + +const shadowedValue: number = copy.shadowed(1).next; +>shadowedValue : Symbol(shadowedValue, Decl(signatureScopes.ts, 53, 5)) +>copy.shadowed(1).next : Symbol(next, Decl(signatureScopes.ts, 49, 39)) +>copy.shadowed : Symbol(shadowed, Decl(signatureScopes.ts, 48, 59)) +>copy : Symbol(copy, Decl(signatureScopes.ts, 51, 12)) +>shadowed : Symbol(shadowed, Decl(signatureScopes.ts, 48, 59)) +>next : Symbol(next, Decl(signatureScopes.ts, 49, 39)) + +export type Inferred = T extends (value: infer U) => infer R +>Inferred : Symbol(Inferred, Decl(signatureScopes.ts, 53, 52)) +>T : Symbol(T, Decl(signatureScopes.ts, 55, 21)) +>T : Symbol(T, Decl(signatureScopes.ts, 55, 21)) +>value : Symbol(value, Decl(signatureScopes.ts, 55, 37)) +>U : Symbol(U, Decl(signatureScopes.ts, 55, 49)) +>R : Symbol(R, Decl(signatureScopes.ts, 55, 61)) + + ? { [K in keyof R]: (value: U) => R[K] } +>K : Symbol(K, Decl(signatureScopes.ts, 56, 9)) +>R : Symbol(R, Decl(signatureScopes.ts, 55, 61)) +>value : Symbol(value, Decl(signatureScopes.ts, 56, 25)) +>U : Symbol(U, Decl(signatureScopes.ts, 55, 49)) +>R : Symbol(R, Decl(signatureScopes.ts, 55, 61)) +>K : Symbol(K, Decl(signatureScopes.ts, 56, 9)) + + : never; +export declare const inferred: Inferred<(value: number) => { next: typeof reused }>; +>inferred : Symbol(inferred, Decl(signatureScopes.ts, 58, 20)) +>Inferred : Symbol(Inferred, Decl(signatureScopes.ts, 53, 52)) +>value : Symbol(value, Decl(signatureScopes.ts, 58, 41)) +>next : Symbol(next, Decl(signatureScopes.ts, 58, 60)) +>reused : Symbol(reused, Decl(signatureScopes.ts, 46, 20)) + +export const inferredCopy = inferred; +>inferredCopy : Symbol(inferredCopy, Decl(signatureScopes.ts, 59, 12)) +>inferred : Symbol(inferred, Decl(signatureScopes.ts, 58, 20)) + +const inferredValue: string = inferredCopy.next(1).second("text").value; +>inferredValue : Symbol(inferredValue, Decl(signatureScopes.ts, 60, 5)) +>inferredCopy.next(1).second("text").value : Symbol(value, Decl(signatureScopes.ts, 48, 26)) +>inferredCopy.next(1).second : Symbol(second, Decl(signatureScopes.ts, 47, 64)) +>inferredCopy.next : Symbol(next, Decl(signatureScopes.ts, 58, 60)) +>inferredCopy : Symbol(inferredCopy, Decl(signatureScopes.ts, 59, 12)) +>next : Symbol(next, Decl(signatureScopes.ts, 58, 60)) +>second : Symbol(second, Decl(signatureScopes.ts, 47, 64)) +>value : Symbol(value, Decl(signatureScopes.ts, 48, 26)) + diff --git a/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.types b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.types new file mode 100644 index 0000000000000..7767f0447a3c0 --- /dev/null +++ b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.types @@ -0,0 +1,1372 @@ +//// [tests/cases/compiler/recursiveFunctionDeclarationSerialization.ts] //// + +=== script.ts === +const scriptArrow = () => scriptArrow; +>scriptArrow : () => typeof scriptArrow +>() => scriptArrow : () => typeof scriptArrow +>scriptArrow : () => typeof scriptArrow + +const scriptExpression = function () { return scriptExpression; }; +>scriptExpression : () => typeof scriptExpression +>function () { return scriptExpression; } : () => typeof scriptExpression +>scriptExpression : () => typeof scriptExpression + +function scriptDeclaration() { return scriptDeclaration; } +>scriptDeclaration : () => typeof scriptDeclaration +>scriptDeclaration : () => typeof scriptDeclaration + +=== exported.ts === +export const arrow = () => arrow; +>arrow : () => typeof arrow +>() => arrow : () => typeof arrow +>arrow : () => typeof arrow + +export const expression = function () { return expression; }; +>expression : () => typeof expression +>function () { return expression; } : () => typeof expression +>expression : () => typeof expression + +export function declaration() { return declaration; } +>declaration : () => typeof declaration +>declaration : () => typeof declaration + +export const annotated: () => typeof annotated = () => annotated; +>annotated : () => typeof annotated +>annotated : () => typeof annotated +>() => annotated : () => () => typeof annotated +>annotated : () => typeof annotated + +export const first = () => second; +>first : () => () => typeof first +>() => second : () => () => typeof first +>second : () => () => typeof second + +export const second = () => first; +>second : () => () => typeof second +>() => first : () => () => typeof second +>first : () => () => typeof first + +export const generic = (value: T) => generic; +>generic : (value: T) => typeof generic +>(value: T) => generic : (value: T) => typeof generic +>value : T +>generic : (value: T) => typeof generic + +export const finite = () => () => 1; +>finite : () => () => number +>() => () => 1 : () => () => number +>() => 1 : () => number +>1 : 1 + +export const wrapped = { arrow }; +>wrapped : { arrow: () => typeof arrow; } +>{ arrow } : { arrow: () => typeof arrow; } +>arrow : () => typeof arrow + +export const tuple = [arrow] as const; +>tuple : readonly [() => typeof arrow] +>[arrow] as const : readonly [() => typeof arrow] +>[arrow] : readonly [() => typeof arrow] +>arrow : () => typeof arrow + +export const named = function self() { return self; }; +>named : () => typeof self +>function self() { return self; } : () => typeof self +>self : () => typeof named +>self : () => typeof named + +export const broad: unknown = function self() { return self; }; +>broad : unknown +>function self() { return self; } : () => typeof self +>self : () => typeof broad +>self : () => typeof broad + +export const contextual: () => unknown = function self() { return self; }; +>contextual : () => unknown +>function self() { return self; } : () => typeof self +>self : () => typeof contextual +>self : () => typeof contextual + +export const specialized = generic; +>specialized : (value: number) => (value: number) => typeof generic +>generic : (value: number) => (value: number) => typeof generic +>generic : (value: T) => typeof generic + +export const annotatedParameter = (value: string | number) => annotatedParameter; +>annotatedParameter : (value: string | number) => typeof annotatedParameter +>(value: string | number) => annotatedParameter : (value: string | number) => typeof annotatedParameter +>value : string | number +>annotatedParameter : (value: string | number) => typeof annotatedParameter + +export const renamedParameter = (other: number | string) => renamedParameter; +>renamedParameter : (other: number | string) => typeof renamedParameter +>(other: number | string) => renamedParameter : (other: number | string) => typeof renamedParameter +>other : string | number +>renamedParameter : (other: number | string) => typeof renamedParameter + +export const optionalParameter = (value?: string) => optionalParameter; +>optionalParameter : (value?: string) => typeof optionalParameter +>(value?: string) => optionalParameter : (value?: string) => typeof optionalParameter +>value : string | undefined +>optionalParameter : (value?: string) => typeof optionalParameter + +export const restParameter = (...values: string[]) => restParameter; +>restParameter : (...values: string[]) => typeof restParameter +>(...values: string[]) => restParameter : (...values: string[]) => typeof restParameter +>values : string[] +>restParameter : (...values: string[]) => typeof restParameter + +export const nestedReturn = () => () => nestedReturn; +>nestedReturn : () => () => typeof nestedReturn +>() => () => nestedReturn : () => () => typeof nestedReturn +>() => nestedReturn : () => () => () => typeof nestedReturn +>nestedReturn : () => () => typeof nestedReturn + +export const finiteObject = { call: (value: string) => ({ value }) }; +>finiteObject : { call: (value: string) => { value: string; }; } +>{ call: (value: string) => ({ value }) } : { call: (value: string) => { value: string; }; } +>call : (value: string) => { value: string; } +>(value: string) => ({ value }) : (value: string) => { value: string; } +>value : string +>({ value }) : { value: string; } +>{ value } : { value: string; } +>value : string + +export const finiteTuple = [(value: number) => [value] as const] as const; +>finiteTuple : readonly [(value: number) => readonly [number]] +>[(value: number) => [value] as const] as const : readonly [(value: number) => readonly [number]] +>[(value: number) => [value] as const] : readonly [(value: number) => readonly [number]] +>(value: number) => [value] as const : (value: number) => readonly [number] +>value : number +>[value] as const : readonly [number] +>[value] : readonly [number] +>value : number + +export const nestedGeneric = (value: T) => ({ +>nestedGeneric : (value: T) => { call: (other: T) => readonly [T, T]; } +>(value: T) => ({ call: (other: T) => [value, other] as const,}) : (value: T) => { call: (other: T) => readonly [T, T]; } +>value : T +>({ call: (other: T) => [value, other] as const,}) : { call: (other: T) => readonly [T, T]; } +>{ call: (other: T) => [value, other] as const,} : { call: (other: T) => readonly [T, T]; } + + call: (other: T) => [value, other] as const, +>call : (other: T) => readonly [T, T] +>(other: T) => [value, other] as const : (other: T) => readonly [T, T] +>other : T +>[value, other] as const : readonly [T, T] +>[value, other] : readonly [T, T] +>value : T +>other : T + +}); +export const instantiatedNested = nestedGeneric("text"); +>instantiatedNested : { call: (other: string) => readonly [string, string]; } +>nestedGeneric("text") : { call: (other: string) => readonly [string, string]; } +>nestedGeneric : (value: T) => { call: (other: T) => readonly [T, T]; } +>"text" : "text" + +export const objectReturn = () => ({ call: objectReturn }); +>objectReturn : () => { call: typeof objectReturn; } +>() => ({ call: objectReturn }) : () => { call: typeof objectReturn; } +>({ call: objectReturn }) : { call: () => { call: typeof objectReturn; }; } +>{ call: objectReturn } : { call: () => { call: typeof objectReturn; }; } +>call : () => { call: typeof objectReturn; } +>objectReturn : () => { call: typeof objectReturn; } + +export const tupleReturn = () => [tupleReturn] as const; +>tupleReturn : () => readonly [typeof tupleReturn] +>() => [tupleReturn] as const : () => readonly [typeof tupleReturn] +>[tupleReturn] as const : readonly [() => readonly [typeof tupleReturn]] +>[tupleReturn] : readonly [() => readonly [typeof tupleReturn]] +>tupleReturn : () => readonly [typeof tupleReturn] + +export const shadowed = function self(shadowed: number) { return self; }; +>shadowed : (shadowed: number) => typeof import("./exported").shadowed +>function self(shadowed: number) { return self; } : (shadowed: number) => typeof import("./exported").shadowed +>self : (shadowed: number) => typeof import("./exported").shadowed +>shadowed : number +>self : (shadowed: number) => typeof import("./exported").shadowed + +=== consumer.ts === +import { arrow, expression, declaration, first, generic, finite, wrapped, tuple } from "./exported"; +>arrow : () => typeof arrow +>expression : () => typeof expression +>declaration : () => typeof declaration +>first : () => () => typeof first +>generic : (value: T) => typeof generic +>finite : () => () => number +>wrapped : { arrow: () => typeof arrow; } +>tuple : readonly [() => typeof arrow] + +import { instantiatedNested, objectReturn, tupleReturn, shadowed } from "./exported"; +>instantiatedNested : { call: (other: string) => readonly [string, string]; } +>objectReturn : () => { call: typeof objectReturn; } +>tupleReturn : () => readonly [typeof tupleReturn] +>shadowed : (shadowed: number) => typeof import("./exported").shadowed + +const a: typeof arrow = arrow()()(); +>a : () => typeof arrow +>arrow : () => typeof arrow +>arrow()()() : () => typeof arrow +>arrow()() : () => typeof arrow +>arrow() : () => typeof arrow +>arrow : () => typeof arrow + +const b: typeof expression = expression()()(); +>b : () => typeof expression +>expression : () => typeof expression +>expression()()() : () => typeof expression +>expression()() : () => typeof expression +>expression() : () => typeof expression +>expression : () => typeof expression + +const c: typeof declaration = declaration()()(); +>c : () => typeof declaration +>declaration : () => typeof declaration +>declaration()()() : () => typeof declaration +>declaration()() : () => typeof declaration +>declaration() : () => typeof declaration +>declaration : () => typeof declaration + +const d: typeof first = first()()(); +>d : () => () => typeof first +>first : () => () => typeof first +>first()()() : () => () => typeof import("./exported").second +>first()() : () => () => typeof first +>first() : () => () => typeof import("./exported").second +>first : () => () => typeof first + +const e: typeof generic = generic(1)("text")(true); +>e : (value: T) => typeof generic +>generic : (value: T) => typeof generic +>generic(1)("text")(true) : (value: T) => typeof generic +>generic(1)("text") : (value: T) => typeof generic +>generic(1) : (value: T) => typeof generic +>generic : (value: T) => typeof generic +>1 : 1 +>"text" : "text" +>true : true + +const f: number = finite()(); +>f : number +>finite()() : number +>finite() : () => number +>finite : () => () => number + +const g: typeof arrow = wrapped.arrow()(); +>g : () => typeof arrow +>arrow : () => typeof arrow +>wrapped.arrow()() : () => typeof arrow +>wrapped.arrow() : () => typeof arrow +>wrapped.arrow : () => typeof arrow +>wrapped : { arrow: () => typeof arrow; } +>arrow : () => typeof arrow + +const h: typeof arrow = tuple[0]()(); +>h : () => typeof arrow +>arrow : () => typeof arrow +>tuple[0]()() : () => typeof arrow +>tuple[0]() : () => typeof arrow +>tuple[0] : () => typeof arrow +>tuple : readonly [() => typeof arrow] +>0 : 0 + +const invalid: number = arrow()()(); +>invalid : number +>arrow()()() : () => typeof arrow +>arrow()() : () => typeof arrow +>arrow() : () => typeof arrow +>arrow : () => typeof arrow + +const nestedResult: readonly [string, string] = instantiatedNested.call("other"); +>nestedResult : readonly [string, string] +>instantiatedNested.call("other") : readonly [string, string] +>instantiatedNested.call : (other: string) => readonly [string, string] +>instantiatedNested : { call: (other: string) => readonly [string, string]; } +>call : (other: string) => readonly [string, string] +>"other" : "other" + +instantiatedNested.call(1); +>instantiatedNested.call(1) : readonly [string, string] +>instantiatedNested.call : (other: string) => readonly [string, string] +>instantiatedNested : { call: (other: string) => readonly [string, string]; } +>call : (other: string) => readonly [string, string] +>1 : 1 + +const objectCall: typeof objectReturn = objectReturn().call().call; +>objectCall : () => { call: typeof objectReturn; } +>objectReturn : () => { call: typeof objectReturn; } +>objectReturn().call().call : () => { call: typeof objectReturn; } +>objectReturn().call() : { call: () => { call: typeof objectReturn; }; } +>objectReturn().call : () => { call: typeof objectReturn; } +>objectReturn() : { call: () => { call: typeof objectReturn; }; } +>objectReturn : () => { call: typeof objectReturn; } +>call : () => { call: typeof objectReturn; } +>call : () => { call: typeof objectReturn; } + +const tupleCall: typeof tupleReturn = tupleReturn()[0]()[0]; +>tupleCall : () => readonly [typeof tupleReturn] +>tupleReturn : () => readonly [typeof tupleReturn] +>tupleReturn()[0]()[0] : () => readonly [typeof tupleReturn] +>tupleReturn()[0]() : readonly [() => readonly [typeof tupleReturn]] +>tupleReturn()[0] : () => readonly [typeof tupleReturn] +>tupleReturn() : readonly [() => readonly [typeof tupleReturn]] +>tupleReturn : () => readonly [typeof tupleReturn] +>0 : 0 +>0 : 0 + +const shadowedCall: typeof shadowed = shadowed(1)(2); +>shadowedCall : (shadowed: number) => typeof import("./exported").shadowed +>shadowed : (shadowed: number) => typeof import("./exported").shadowed +>shadowed(1)(2) : (shadowed: number) => typeof import("./exported").shadowed +>shadowed(1) : (shadowed: number) => typeof import("./exported").shadowed +>shadowed : (shadowed: number) => typeof import("./exported").shadowed +>1 : 1 +>2 : 2 + +=== recursiveObject.ts === +export function recursiveObject() { +>recursiveObject : () => { call: (arg: U) => any; consume: (arg: T) => any; } + + const value = { +>value : { call: (arg: U) => any; consume: (arg: T) => any; } +>{ call: (arg: U) => value, consume: (arg: T) => value, } : { call: (arg: U) => { call: (arg: U) => any; consume: (arg: T) => any; }; consume: (arg: T) => { call: (arg: U) => any; consume: (arg: T) => any; }; } + + call: (arg: U) => value, +>call : (arg: U) => { call: (arg: U) => any; consume: (arg: T) => any; } +>(arg: U) => value : (arg: U) => { call: (arg: U) => any; consume: (arg: T) => any; } +>arg : U +>value : { call: (arg: U) => any; consume: (arg: T) => any; } + + consume: (arg: T) => value, +>consume : (arg: T) => { call: (arg: U) => any; consume: (arg: T) => any; } +>(arg: T) => value : (arg: T) => { call: (arg: U) => any; consume: (arg: T) => any; } +>arg : T +>value : { call: (arg: U) => any; consume: (arg: T) => any; } + + }; + return value; +>value : { call: (arg: U) => any; consume: (arg: T) => any; } +} + +const result = recursiveObject().call("hello").consume(1); +>result : { call: (arg: U) => any; consume: (arg: number) => any; } +>recursiveObject().call("hello").consume(1) : { call: (arg: U) => any; consume: (arg: number) => any; } +>recursiveObject().call("hello").consume : (arg: number) => { call: (arg: U) => any; consume: any; } +>recursiveObject().call("hello") : { call: (arg: U) => any; consume: (arg: number) => any; } +>recursiveObject().call : (arg: U) => { call: any; consume: (arg: number) => any; } +>recursiveObject() : { call: (arg: U) => any; consume: (arg: number) => any; } +>recursiveObject : () => { call: (arg: U) => any; consume: (arg: T) => any; } +>call : (arg: U) => { call: any; consume: (arg: number) => any; } +>"hello" : "hello" +>consume : (arg: number) => { call: (arg: U) => any; consume: any; } +>1 : 1 + +type IsAny = 0 extends (1 & T) ? true : false; +>IsAny : IsAny +>true : true +>false : false + +const notAny: false = null as unknown as IsAny; +>notAny : false +>false : false +>null as unknown as IsAny : false +>null as unknown : unknown +>result.call : (arg: U) => { call: any; consume: (arg: number) => any; } +>result : { call: (arg: U) => any; consume: (arg: number) => any; } +>call : (arg: U) => { call: any; consume: (arg: number) => any; } + +const invalidCall: number = result.call; +>invalidCall : number +>result.call : (arg: U) => { call: any; consume: (arg: number) => any; } +>result : { call: (arg: U) => any; consume: (arg: number) => any; } +>call : (arg: U) => { call: any; consume: (arg: number) => any; } + +result.consume("wrong"); +>result.consume("wrong") : { call: (arg: U) => any; consume: (arg: number) => any; } +>result.consume : (arg: number) => { call: (arg: U) => any; consume: any; } +>result : { call: (arg: U) => any; consume: (arg: number) => any; } +>consume : (arg: number) => { call: (arg: U) => any; consume: any; } +>"wrong" : "wrong" + +=== nestedNamedFunctions.ts === +export const nestedObject = { recur: () => nestedObject.recur }; +>nestedObject : { recur: () => () => any; } +>{ recur: () => nestedObject.recur } : { recur: () => () => any; } +>recur : () => any +>() => nestedObject.recur : () => any +>nestedObject.recur : () => any +>nestedObject : { recur: () => () => any; } +>recur : () => any + +export const nestedTuple = [() => nestedTuple[0]] as const; +>nestedTuple : readonly [() => any] +>[() => nestedTuple[0]] as const : readonly [() => any] +>[() => nestedTuple[0]] : readonly [() => any] +>() => nestedTuple[0] : () => any +>nestedTuple[0] : () => any +>nestedTuple : readonly [() => any] +>0 : 0 + +export const object = { recur: function self() { return self; } }; +>object : { recur: () => () => any; } +>{ recur: function self() { return self; } } : { recur: () => () => any; } +>recur : () => any +>function self() { return self; } : () => any +>self : () => any +>self : () => any + +export const tuple = [function self() { return self; }] as const; +>tuple : readonly [() => any] +>[function self() { return self; }] as const : readonly [() => any] +>[function self() { return self; }] : readonly [() => any] +>function self() { return self; } : () => any +>self : () => any +>self : () => any + +export const factory = () => function self() { return self; }; +>factory : () => () => () => any +>() => function self() { return self; } : () => () => () => any +>function self() { return self; } : () => any +>self : () => any +>self : () => any + +export const method = { recur() { return method; } }; +>method : { recur(): any; } +>{ recur() { return method; } } : { recur(): { recur(): any; }; } +>recur : () => { recur(): any; } +>method : { recur(): any; } + +export const accessor = { get recur() { return accessor; } }; +>accessor : { readonly recur: any; } +>{ get recur() { return accessor; } } : { readonly recur: { readonly recur: any; }; } +>recur : { readonly recur: any; } +>accessor : { readonly recur: any; } + +export function local() { +>local : () => () => any + + function recur() { return recur; } +>recur : () => any +>recur : () => any + + return recur; +>recur : () => any +} + +=== recursiveStructures.ts === +export const object = { value: 1, next: () => object }; +>object : { value: number; next: () => any; } +>{ value: 1, next: () => object } : { value: number; next: () => { value: number; next: () => any; }; } +>value : number +>1 : 1 +>next : () => { value: number; next: () => any; } +>() => object : () => { value: number; next: () => any; } +>object : { value: number; next: () => any; } + +export const method = { value: 1, next() { return method; } }; +>method : { value: number; next(): any; } +>{ value: 1, next() { return method; } } : { value: number; next(): { value: number; next(): any; }; } +>value : number +>1 : 1 +>next : () => { value: number; next(): any; } +>method : { value: number; next(): any; } + +export const accessor = { value: 1, get next() { return accessor; } }; +>accessor : { value: number; readonly next: any; } +>{ value: 1, get next() { return accessor; } } : { value: number; readonly next: { value: number; readonly next: any; }; } +>value : number +>1 : 1 +>next : { value: number; readonly next: any; } +>accessor : { value: number; readonly next: any; } + +export const tuple = [() => tuple] as const; +>tuple : readonly [() => any] +>[() => tuple] as const : readonly [() => any] +>[() => tuple] : readonly [() => any] +>() => tuple : () => readonly [any] +>tuple : readonly [() => any] + +export const tupleObject = [{ next: () => tupleObject }] as const; +>tupleObject : readonly [{ readonly next: () => any; }] +>[{ next: () => tupleObject }] as const : readonly [{ readonly next: () => readonly [{ readonly next: () => any; }]; }] +>[{ next: () => tupleObject }] : readonly [{ readonly next: () => readonly [{ readonly next: () => any; }]; }] +>{ next: () => tupleObject } : { readonly next: () => readonly [{ readonly next: () => any; }]; } +>next : () => readonly [{ readonly next: () => any; }] +>() => tupleObject : () => readonly [{ readonly next: () => any; }] +>tupleObject : readonly [{ readonly next: () => any; }] + +export const array = [() => array]; +>array : (() => any)[] +>[() => array] : (() => any)[] +>() => array : () => any[] +>array : (() => any)[] + +export const first = { next: () => second }; +>first : { next: () => { next: () => any; }; } +>{ next: () => second } : { next: () => { next: () => { next: () => any; }; }; } +>next : () => { next: () => { next: () => any; }; } +>() => second : () => { next: () => { next: () => any; }; } +>second : { next: () => { next: () => any; }; } + +export const second = { next: () => first }; +>second : { next: () => { next: () => any; }; } +>{ next: () => first } : { next: () => { next: () => { next: () => any; }; }; } +>next : () => { next: () => { next: () => any; }; } +>() => first : () => { next: () => { next: () => any; }; } +>first : { next: () => { next: () => any; }; } + +export const nested = { inner: { next() { return nested.inner; } } }; +>nested : { inner: { next(): { next(): any; }; }; } +>{ inner: { next() { return nested.inner; } } } : { inner: { next(): { next(): any; }; }; } +>inner : { next(): { next(): any; }; } +>{ next() { return nested.inner; } } : { next(): { next(): any; }; } +>next : () => { next(): any; } +>nested.inner : { next(): any; } +>nested : { inner: { next(): { next(): any; }; }; } +>inner : { next(): any; } + +export const shadowed = { next: function self(shadowed: number) { return self; } }; +>shadowed : { next: (shadowed: number) => (shadowed: number) => any; } +>{ next: function self(shadowed: number) { return self; } } : { next: (shadowed: number) => (shadowed: number) => any; } +>next : (shadowed: number) => any +>function self(shadowed: number) { return self; } : (shadowed: number) => any +>self : (shadowed: number) => any +>shadowed : number +>self : (shadowed: number) => any + +export const memberTuple = [function self() { return self; }] as const; +>memberTuple : readonly [() => any] +>[function self() { return self; }] as const : readonly [() => any] +>[function self() { return self; }] : readonly [() => any] +>function self() { return self; } : () => any +>self : () => any +>self : () => any + +export const memberArray = [function self() { return self; }]; +>memberArray : (() => any)[] +>[function self() { return self; }] : (() => any)[] +>function self() { return self; } : () => any +>self : () => any +>self : () => any + +export const quoted = { "a-b": function self() { return self; } }; +>quoted : { "a-b": () => () => any; } +>{ "a-b": function self() { return self; } } : { "a-b": () => () => any; } +>"a-b" : () => any +>function self() { return self; } : () => any +>self : () => any +>self : () => any + +export const numeric = { 0: function self() { return self; } }; +>numeric : { 0: () => () => any; } +>{ 0: function self() { return self; } } : { 0: () => () => any; } +>0 : () => any +>function self() { return self; } : () => any +>self : () => any +>self : () => any + +export const key = Symbol(); +>key : unique symbol +>Symbol() : unique symbol +>Symbol : SymbolConstructor + +export const computed = { [key]: function self() { return self; } }; +>computed : { [key]: () => () => any; } +>{ [key]: function self() { return self; } } : { [key]: () => () => any; } +>[key] : () => any +>key : unique symbol +>function self() { return self; } : () => any +>self : () => any +>self : () => any + +export const union = Math.random() ? { next: () => union } : undefined; +>union : { next: () => any | undefined; } | undefined +>Math.random() ? { next: () => union } : undefined : { next: () => { next: () => any | undefined; } | undefined; } | undefined +>Math.random() : number +>Math.random : () => number +>Math : Math +>random : () => number +>{ next: () => union } : { next: () => { next: () => any | undefined; } | undefined; } +>next : () => { next: () => any | undefined; } | undefined +>() => union : () => { next: () => any | undefined; } | undefined +>union : { next: () => any | undefined; } | undefined +>undefined : undefined + +function create(value: T) { +>create : (value: T) => { value: T; next: () => any; } +>value : T + + const result = { value, next: () => result }; +>result : { value: T; next: () => any; } +>{ value, next: () => result } : { value: T; next: () => { value: T; next: () => any; }; } +>value : T +>next : () => { value: T; next: () => any; } +>() => result : () => { value: T; next: () => any; } +>result : { value: T; next: () => any; } + + return result; +>result : { value: T; next: () => any; } +} +export const specialized = create("text"); +>specialized : { value: string; next: () => any; } +>create("text") : { value: string; next: () => any; } +>create : (value: T) => { value: T; next: () => any; } +>"text" : "text" + +export const broad: unknown = { next() { return this; } }; +>broad : unknown +>{ next() { return this; } } : { next(): {}; } +>next : () => {} +>this : {} + +function createIndexed() { +>createIndexed : () => { [key: string]: any; } + + const value: { [key: string]: typeof value } = {}; +>value : { [key: string]: any; } +>key : string +>value : { [key: string]: any; } +>{} : {} + + return value; +>value : { [key: string]: any; } +} +export const indexed = createIndexed(); +>indexed : { [key: string]: any; } +>createIndexed() : { [key: string]: any; } +>createIndexed : () => { [key: string]: any; } + +function createMapped() { +>createMapped : () => { [K in keyof T]: any; } + + const value: { [K in keyof T]: typeof value } = null!; +>value : { [K in keyof T]: any; } +>value : { [K in keyof T]: any; } +>null! : never + + return value; +>value : { [K in keyof T]: any; } +} +export const mapped = createMapped<{ next: unknown }>(); +>mapped : { next: any; } +>createMapped<{ next: unknown }>() : { next: any; } +>createMapped : () => { [K in keyof T]: any; } +>next : unknown + +function createAnnotated(value: T) { +>createAnnotated : (value: T) => { value: T; next: () => any; } +>value : T + + const node: { value: T; next: () => typeof node } = { value, next: () => node }; +>node : { value: T; next: () => any; } +>value : T +>next : () => { value: T; next: () => any; } +>node : { value: T; next: () => any; } +>{ value, next: () => node } : { value: T; next: () => { value: T; next: () => any; }; } +>value : T +>next : () => { value: T; next: () => any; } +>() => node : () => { value: T; next: () => any; } +>node : { value: T; next: () => any; } + + return node; +>node : { value: T; next: () => any; } +} +export const viaAnnotation = createAnnotated("text"); +>viaAnnotation : { value: string; next: () => any; } +>createAnnotated("text") : { value: string; next: () => any; } +>createAnnotated : (value: T) => { value: T; next: () => any; } +>"text" : "text" + +const objectValue: number = object.next().next().value; +>objectValue : number +>object.next().next().value : number +>object.next().next() : { value: number; next: () => any; } +>object.next().next : () => { value: number; next: () => any; } +>object.next() : { value: number; next: () => any; } +>object.next : () => { value: number; next: () => any; } +>object : { value: number; next: () => any; } +>next : () => { value: number; next: () => any; } +>next : () => { value: number; next: () => any; } +>value : number + +const tupleValue: typeof tuple = tuple[0]()[0](); +>tupleValue : readonly [() => any] +>tuple : readonly [() => any] +>tuple[0]()[0]() : readonly [() => any] +>tuple[0]()[0] : () => readonly [any] +>tuple[0]() : readonly [() => any] +>tuple[0] : () => readonly [any] +>tuple : readonly [() => any] +>0 : 0 +>0 : 0 + +const tupleObjectValue: typeof tupleObject = tupleObject[0].next(); +>tupleObjectValue : readonly [{ readonly next: () => any; }] +>tupleObject : readonly [{ readonly next: () => any; }] +>tupleObject[0].next() : readonly [{ readonly next: () => any; }] +>tupleObject[0].next : () => readonly [{ readonly next: () => any; }] +>tupleObject[0] : { readonly next: () => readonly [any]; } +>tupleObject : readonly [{ readonly next: () => any; }] +>0 : 0 +>next : () => readonly [{ readonly next: () => any; }] + +const arrayValue: typeof array = array[0]()[0](); +>arrayValue : (() => any)[] +>array : (() => any)[] +>array[0]()[0]() : (() => any)[] +>array[0]()[0] : () => any[] +>array[0]() : (() => any)[] +>array[0] : () => any[] +>array : (() => any)[] +>0 : 0 +>0 : 0 + +const nestedValue: typeof nested.inner = nested.inner.next().next(); +>nestedValue : { next(): any; } +>nested.inner : { next(): any; } +>nested : { inner: { next(): { next(): any; }; }; } +>inner : { next(): any; } +>nested.inner.next().next() : { next(): any; } +>nested.inner.next().next : () => { next(): any; } +>nested.inner.next() : { next(): any; } +>nested.inner.next : () => { next(): any; } +>nested.inner : { next(): any; } +>nested : { inner: { next(): { next(): any; }; }; } +>inner : { next(): any; } +>next : () => { next(): any; } +>next : () => { next(): any; } + +const specializedValue: string = specialized.next().next().value; +>specializedValue : string +>specialized.next().next().value : string +>specialized.next().next() : { value: string; next: () => any; } +>specialized.next().next : () => { value: string; next: any; } +>specialized.next() : { value: string; next: () => any; } +>specialized.next : () => { value: string; next: any; } +>specialized : { value: string; next: () => any; } +>next : () => { value: string; next: any; } +>next : () => { value: string; next: any; } +>value : string + +const invalidValue: number = specialized.next().value; +>invalidValue : number +>specialized.next().value : string +>specialized.next() : { value: string; next: () => any; } +>specialized.next : () => { value: string; next: any; } +>specialized : { value: string; next: () => any; } +>next : () => { value: string; next: any; } +>value : string + +=== recursiveAnnotations.ts === +declare const object: { next: typeof object }; +>object : { next: typeof object; } +>next : { next: typeof object; } +>object : { next: typeof object; } + +declare const tuple: readonly [typeof tuple]; +>tuple : any +>tuple : any + +declare const array: Array; +>array : any +>array : any + +declare const tupleFunction: readonly [() => typeof tupleFunction]; +>tupleFunction : readonly [() => typeof tupleFunction] +>tupleFunction : readonly [() => typeof tupleFunction] + +declare const tupleObject: readonly [{ next: typeof tupleObject }]; +>tupleObject : readonly [{ next: typeof tupleObject; }] +>next : readonly [{ next: typeof tupleObject; }] +>tupleObject : readonly [{ next: typeof tupleObject; }] + +declare const objectTuple: { next: readonly [typeof objectTuple] }; +>objectTuple : { next: readonly [typeof objectTuple]; } +>next : readonly [{ next: readonly [typeof objectTuple]; }] +>objectTuple : { next: readonly [typeof objectTuple]; } + +declare const mapped: { [K in "next"]: typeof mapped }; +>mapped : { next: any; } +>mapped : { next: any; } + +declare const union: typeof union | undefined; +>union : any +>union : any + +declare const conditional: true extends false ? never : typeof conditional; +>conditional : any +>true : true +>false : false +>conditional : any + +=== namedReferences.ts === +export type Link = { value: T; next: Link }; +>Link : Link +>value : T +>next : Link + +export type Callable = { (value: T): Callable; link: Link }; +>Callable : Callable +>value : T +>link : Link + +export type Wrapped = ( { next: Wrapped } ); +>Wrapped : Wrapped +>next : Wrapped + +export declare const link: Link; +>link : Link + +export declare const callable: Callable; +>callable : Callable + +export const nextLink = link.next; +>nextLink : Link +>link.next : Link +>link : Link +>next : Link + +export const nextCallable = callable(1); +>nextCallable : Callable +>callable(1) : Callable +>callable : Callable +>1 : 1 + +export const parenthesized = (function self() { return self; }); +>parenthesized : () => any +>(function self() { return self; }) : () => any +>function self() { return self; } : () => any +>self : () => any +>self : () => any + +export const asserted = (function self() { return self; }) satisfies () => unknown; +>asserted : () => any +>(function self() { return self; }) satisfies () => unknown : () => any +>(function self() { return self; }) : () => any +>function self() { return self; } : () => any +>self : () => any +>self : () => any + +export const widened: () => unknown = (function self() { return self; }); +>widened : () => unknown +>(function self() { return self; }) : () => any +>function self() { return self; } : () => any +>self : () => any +>self : () => any + +function createHidden(value: T) { +>createHidden : (value: T) => { value: T; next: Hidden; } +>value : T + + type Hidden = { value: T; next: Hidden }; +>Hidden : { value: T; next: Hidden; } +>value : T +>next : { value: T; next: Hidden; } + + return null! as Hidden; +>null! as Hidden : { value: T; next: Hidden; } +>null! : never +} +export const hiddenAlias = createHidden("text"); +>hiddenAlias : { value: string; next: Hidden; } +>createHidden("text") : { value: string; next: Hidden; } +>createHidden : (value: T) => { value: T; next: Hidden; } +>"text" : "text" + +export const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias }; +>siblingHiddenAliases : { first: { value: string; next: Hidden; }; second: { value: string; next: Hidden; }; } +>{ first: hiddenAlias, second: hiddenAlias } : { first: { value: string; next: Hidden; }; second: { value: string; next: Hidden; }; } +>first : { value: string; next: Hidden; } +>hiddenAlias : { value: string; next: Hidden; } +>second : { value: string; next: Hidden; } +>hiddenAlias : { value: string; next: Hidden; } + +export const methodKey = Symbol(); +>methodKey : unique symbol +>Symbol() : unique symbol +>Symbol : SymbolConstructor + +export class Methods { +>Methods : Methods + + static recur() { return Methods.recur; } +>recur : () => typeof Methods.recur +>Methods.recur : () => typeof Methods.recur +>Methods : typeof Methods +>recur : () => typeof Methods.recur + + static "a-b"() { return Methods["a-b"]; } +>"a-b" : () => any +>Methods["a-b"] : () => any +>Methods : typeof Methods +>"a-b" : "a-b" + + static [methodKey]() { return Methods[methodKey]; } +>[methodKey] : () => any +>methodKey : unique symbol +>Methods[methodKey] : () => any +>Methods : typeof Methods +>methodKey : unique symbol + + recur() { return this.recur; } +>recur : () => any +>this.recur : () => any +>this : this +>recur : () => any +} +export function overloaded(value: string): typeof overloaded; +>overloaded : { (value: string): typeof overloaded; (value: number): typeof overloaded; } +>value : string +>overloaded : { (value: string): typeof overloaded; (value: number): typeof overloaded; } + +export function overloaded(value: number): typeof overloaded; +>overloaded : { (value: string): typeof overloaded; (value: number): typeof overloaded; } +>value : number +>overloaded : { (value: string): typeof overloaded; (value: number): typeof overloaded; } + +export function overloaded(value: string | number) { return overloaded; } +>overloaded : { (value: string): typeof overloaded; (value: number): typeof overloaded; } +>value : string | number +>overloaded : { (value: string): typeof overloaded; (value: number): typeof overloaded; } + +const text: string = nextLink.next.value; +>text : string +>nextLink.next.value : string +>nextLink.next : Link +>nextLink : Link +>next : Link +>value : string + +const invalid: number = nextLink.next.value; +>invalid : number +>nextLink.next.value : string +>nextLink.next : Link +>nextLink : Link +>next : Link +>value : string + +nextCallable("wrong"); +>nextCallable("wrong") : Callable +>nextCallable : Callable +>"wrong" : "wrong" + +=== hiddenReferences.ts === +export class Hidden { +>Hidden : Hidden + + private static recur() { return Hidden.recur; } +>recur : () => typeof Hidden.recur +>Hidden.recur : () => typeof Hidden.recur +>Hidden : typeof Hidden +>recur : () => typeof Hidden.recur + + static expose() { return Hidden.recur; } +>expose : () => () => typeof Hidden.recur +>Hidden.recur : () => typeof Hidden.recur +>Hidden : typeof Hidden +>recur : () => typeof Hidden.recur + + protected next() { return this.next; } +>next : () => any +>this.next : () => any +>this : this +>next : () => any + + expose() { return this.next; } +>expose : () => () => any +>this.next : () => any +>this : this +>next : () => any +} + +=== signatureScopes.ts === +export const scoped = { +>scoped : { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: any; }; sibling(inner: T_1): { outer: T; inner: T_1; next: any; }; }; second(value: T): { value: T; next: any; }; } +>{ first(outer: T) { return { nested(inner: T) { return { outer, inner, next: scoped }; }, sibling(inner: T) { return { outer, inner, next: scoped }; }, }; }, second(value: T) { return { value, next: scoped }; },} : { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: { first(outer: T): any; second(value: T_2): { value: T_2; next: any; }; }; }; sibling(inner: T_1): { outer: T; inner: T_1; next: { first(outer: T): any; second(value: T_2): { value: T_2; next: any; }; }; }; }; second(value: T): { value: T; next: { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: any; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: any; }; }; second(value: T): any; }; }; } + + first(outer: T) { +>first : (outer: T) => { nested(inner: T_1): { outer: T; inner: T_1; next: { first(outer: T): any; second(value: T_2): { value: T_2; next: any; }; }; }; sibling(inner: T_1): { outer: T; inner: T_1; next: { first(outer: T): any; second(value: T_2): { value: T_2; next: any; }; }; }; } +>outer : T + + return { +>{ nested(inner: T) { return { outer, inner, next: scoped }; }, sibling(inner: T) { return { outer, inner, next: scoped }; }, } : { nested(inner: T_1): { outer: T; inner: T_1; next: { first(outer: T): { nested(inner: T_1): any; sibling(inner: T_2): { outer: T; inner: T_2; next: any; }; }; second(value: T_2): { value: T_2; next: any; }; }; }; sibling(inner: T_1): { outer: T; inner: T_1; next: { first(outer: T): { nested(inner: T_2): { outer: T; inner: T_2; next: any; }; sibling(inner: T_1): any; }; second(value: T_2): { value: T_2; next: any; }; }; }; } + + nested(inner: T) { return { outer, inner, next: scoped }; }, +>nested : (inner: T) => { outer: T_1; inner: T; next: { first(outer: T_1): { nested(inner: T): any; sibling(inner: T_2): { outer: T_1; inner: T_2; next: any; }; }; second(value: T_2): { value: T_2; next: any; }; }; } +>inner : T +>{ outer, inner, next: scoped } : { outer: T_1; inner: T; next: { first(outer: T_1): { nested(inner: T): { outer: T_1; inner: T; next: any; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: any; }; }; second(value: T_2): { value: T_2; next: any; }; }; } +>outer : T_1 +>inner : T +>next : { first(outer: T_1): { nested(inner: T): { outer: T_1; inner: T; next: any; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: any; }; }; second(value: T_1): { value: T_1; next: any; }; } +>scoped : { first(outer: T_1): { nested(inner: T): { outer: T_1; inner: T; next: any; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: any; }; }; second(value: T_1): { value: T_1; next: any; }; } + + sibling(inner: T) { return { outer, inner, next: scoped }; }, +>sibling : (inner: T) => { outer: T_1; inner: T; next: { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: any; }; sibling(inner: T): any; }; second(value: T_2): { value: T_2; next: any; }; }; } +>inner : T +>{ outer, inner, next: scoped } : { outer: T_1; inner: T; next: { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: any; }; sibling(inner: T): { outer: T_1; inner: T; next: any; }; }; second(value: T_2): { value: T_2; next: any; }; }; } +>outer : T_1 +>inner : T +>next : { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: any; }; sibling(inner: T): { outer: T_1; inner: T; next: any; }; }; second(value: T_1): { value: T_1; next: any; }; } +>scoped : { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: any; }; sibling(inner: T): { outer: T_1; inner: T; next: any; }; }; second(value: T_1): { value: T_1; next: any; }; } + + }; + }, + second(value: T) { return { value, next: scoped }; }, +>second : (value: T) => { value: T; next: { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: any; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: any; }; }; second(value: T): any; }; } +>value : T +>{ value, next: scoped } : { value: T; next: { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: any; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: any; }; }; second(value: T): { value: T; next: any; }; }; } +>value : T +>next : { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: any; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: any; }; }; second(value: T): { value: T; next: any; }; } +>scoped : { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: any; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: any; }; }; second(value: T): { value: T; next: any; }; } + +}; +export const numberScope = scoped.first(1); +>numberScope : { nested(inner: T): { outer: number; inner: T; next: { first(outer: number): any; second(value: T_1): { value: T_1; next: any; }; }; }; sibling(inner: T): { outer: number; inner: T; next: { first(outer: number): any; second(value: T_1): { value: T_1; next: any; }; }; }; } +>scoped.first(1) : { nested(inner: T): { outer: number; inner: T; next: { first(outer: number): any; second(value: T_1): { value: T_1; next: any; }; }; }; sibling(inner: T): { outer: number; inner: T; next: { first(outer: number): any; second(value: T_1): { value: T_1; next: any; }; }; }; } +>scoped.first : (outer: T) => { nested(inner: T_1): { outer: T; inner: T_1; next: { first(outer: T): any; second(value: T_2): { value: T_2; next: any; }; }; }; sibling(inner: T_1): { outer: T; inner: T_1; next: { first(outer: T): any; second(value: T_2): { value: T_2; next: any; }; }; }; } +>scoped : { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: any; }; sibling(inner: T_1): { outer: T; inner: T_1; next: any; }; }; second(value: T): { value: T; next: any; }; } +>first : (outer: T) => { nested(inner: T_1): { outer: T; inner: T_1; next: { first(outer: T): any; second(value: T_2): { value: T_2; next: any; }; }; }; sibling(inner: T_1): { outer: T; inner: T_1; next: { first(outer: T): any; second(value: T_2): { value: T_2; next: any; }; }; }; } +>1 : 1 + +export const stringScope = scoped.first("outer"); +>stringScope : { nested(inner: T): { outer: string; inner: T; next: { first(outer: string): any; second(value: T_1): { value: T_1; next: any; }; }; }; sibling(inner: T): { outer: string; inner: T; next: { first(outer: string): any; second(value: T_1): { value: T_1; next: any; }; }; }; } +>scoped.first("outer") : { nested(inner: T): { outer: string; inner: T; next: { first(outer: string): any; second(value: T_1): { value: T_1; next: any; }; }; }; sibling(inner: T): { outer: string; inner: T; next: { first(outer: string): any; second(value: T_1): { value: T_1; next: any; }; }; }; } +>scoped.first : (outer: T) => { nested(inner: T_1): { outer: T; inner: T_1; next: { first(outer: T): any; second(value: T_2): { value: T_2; next: any; }; }; }; sibling(inner: T_1): { outer: T; inner: T_1; next: { first(outer: T): any; second(value: T_2): { value: T_2; next: any; }; }; }; } +>scoped : { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: any; }; sibling(inner: T_1): { outer: T; inner: T_1; next: any; }; }; second(value: T): { value: T; next: any; }; } +>first : (outer: T) => { nested(inner: T_1): { outer: T; inner: T_1; next: { first(outer: T): any; second(value: T_2): { value: T_2; next: any; }; }; }; sibling(inner: T_1): { outer: T; inner: T_1; next: { first(outer: T): any; second(value: T_2): { value: T_2; next: any; }; }; }; } +>"outer" : "outer" + +const nested = numberScope.nested("inner"); +>nested : { outer: number; inner: string; next: { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: any; }; sibling(inner: T_1): { outer: T; inner: T_1; next: any; }; }; second(value: T): { value: T; next: any; }; }; } +>numberScope.nested("inner") : { outer: number; inner: string; next: { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: any; }; sibling(inner: T_1): { outer: T; inner: T_1; next: any; }; }; second(value: T): { value: T; next: any; }; }; } +>numberScope.nested : (inner: T) => { outer: number; inner: T; next: { first(outer: number): { nested(inner: T): any; sibling(inner: T_2): { outer: number; inner: T_2; next: any; }; }; second(value: T_1): { value: T_1; next: any; }; }; } +>numberScope : { nested(inner: T): { outer: number; inner: T; next: { first(outer: number): any; second(value: T_1): { value: T_1; next: any; }; }; }; sibling(inner: T): { outer: number; inner: T; next: { first(outer: number): any; second(value: T_1): { value: T_1; next: any; }; }; }; } +>nested : (inner: T) => { outer: number; inner: T; next: { first(outer: number): { nested(inner: T): any; sibling(inner: T_2): { outer: number; inner: T_2; next: any; }; }; second(value: T_1): { value: T_1; next: any; }; }; } +>"inner" : "inner" + +const sibling = numberScope.sibling(true); +>sibling : { outer: number; inner: boolean; next: { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: any; }; sibling(inner: T_1): { outer: T; inner: T_1; next: any; }; }; second(value: T): { value: T; next: any; }; }; } +>numberScope.sibling(true) : { outer: number; inner: boolean; next: { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: any; }; sibling(inner: T_1): { outer: T; inner: T_1; next: any; }; }; second(value: T): { value: T; next: any; }; }; } +>numberScope.sibling : (inner: T) => { outer: number; inner: T; next: { first(outer: number): { nested(inner: T_2): { outer: number; inner: T_2; next: any; }; sibling(inner: T): any; }; second(value: T_1): { value: T_1; next: any; }; }; } +>numberScope : { nested(inner: T): { outer: number; inner: T; next: { first(outer: number): any; second(value: T_1): { value: T_1; next: any; }; }; }; sibling(inner: T): { outer: number; inner: T; next: { first(outer: number): any; second(value: T_1): { value: T_1; next: any; }; }; }; } +>sibling : (inner: T) => { outer: number; inner: T; next: { first(outer: number): { nested(inner: T_2): { outer: number; inner: T_2; next: any; }; sibling(inner: T): any; }; second(value: T_1): { value: T_1; next: any; }; }; } +>true : true + +const nestedOuter: number = nested.outer; +>nestedOuter : number +>nested.outer : number +>nested : { outer: number; inner: string; next: { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: any; }; sibling(inner: T_1): { outer: T; inner: T_1; next: any; }; }; second(value: T): { value: T; next: any; }; }; } +>outer : number + +const nestedInner: string = nested.inner; +>nestedInner : string +>nested.inner : string +>nested : { outer: number; inner: string; next: { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: any; }; sibling(inner: T_1): { outer: T; inner: T_1; next: any; }; }; second(value: T): { value: T; next: any; }; }; } +>inner : string + +const siblingOuter: number = sibling.outer; +>siblingOuter : number +>sibling.outer : number +>sibling : { outer: number; inner: boolean; next: { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: any; }; sibling(inner: T_1): { outer: T; inner: T_1; next: any; }; }; second(value: T): { value: T; next: any; }; }; } +>outer : number + +const siblingInner: boolean = sibling.inner; +>siblingInner : boolean +>sibling.inner : boolean +>sibling : { outer: number; inner: boolean; next: { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: any; }; sibling(inner: T_1): { outer: T; inner: T_1; next: any; }; }; second(value: T): { value: T; next: any; }; }; } +>inner : boolean + +const stringOuter: string = stringScope.nested(1).outer; +>stringOuter : string +>stringScope.nested(1).outer : string +>stringScope.nested(1) : { outer: string; inner: number; next: { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: any; }; sibling(inner: T_1): { outer: T; inner: T_1; next: any; }; }; second(value: T): { value: T; next: any; }; }; } +>stringScope.nested : (inner: T) => { outer: string; inner: T; next: { first(outer: string): { nested(inner: T): any; sibling(inner: T_2): { outer: string; inner: T_2; next: any; }; }; second(value: T_1): { value: T_1; next: any; }; }; } +>stringScope : { nested(inner: T): { outer: string; inner: T; next: { first(outer: string): any; second(value: T_1): { value: T_1; next: any; }; }; }; sibling(inner: T): { outer: string; inner: T; next: { first(outer: string): any; second(value: T_1): { value: T_1; next: any; }; }; }; } +>nested : (inner: T) => { outer: string; inner: T; next: { first(outer: string): { nested(inner: T): any; sibling(inner: T_2): { outer: string; inner: T_2; next: any; }; }; second(value: T_1): { value: T_1; next: any; }; }; } +>1 : 1 +>outer : string + +const again: number = nested.next.second(1).value; +>again : number +>nested.next.second(1).value : number +>nested.next.second(1) : { value: number; next: { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: any; }; sibling(inner: T_1): { outer: T; inner: T_1; next: any; }; }; second(value: T): { value: T; next: any; }; }; } +>nested.next.second : (value: T) => { value: T; next: { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: any; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: any; }; }; second(value: T): any; }; } +>nested.next : { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: any; }; sibling(inner: T_1): { outer: T; inner: T_1; next: any; }; }; second(value: T): { value: T; next: any; }; } +>nested : { outer: number; inner: string; next: { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: any; }; sibling(inner: T_1): { outer: T; inner: T_1; next: any; }; }; second(value: T): { value: T; next: any; }; }; } +>next : { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: any; }; sibling(inner: T_1): { outer: T; inner: T_1; next: any; }; }; second(value: T): { value: T; next: any; }; } +>second : (value: T) => { value: T; next: { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: any; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: any; }; }; second(value: T): any; }; } +>1 : 1 +>value : number + +export const nestedOwner = { +>nestedOwner : { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; } +>{ make(outer: T) { return { nested(inner: U) { return { outer, inner, owner: nestedOwner }; }, constrained(inner: U) { return { outer, inner, owner: nestedOwner }; }, copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } { return { outer, inner, owner: nestedOwner }; }, rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; }, }; },} : { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; constrained(inner: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; }; } + + make(outer: T) { +>make : (outer: T) => { nested(inner: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; constrained(inner: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; } +>outer : T + + return { +>{ nested(inner: U) { return { outer, inner, owner: nestedOwner }; }, constrained(inner: U) { return { outer, inner, owner: nestedOwner }; }, copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } { return { outer, inner, owner: nestedOwner }; }, rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; }, } : { nested(inner: U): { outer: T; inner: U; owner: { make(outer: T): { nested(inner: U): any; constrained(inner: U_1): { outer: T; inner: U_1; owner: any; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: any; }; }; }; }; constrained(inner: U): { outer: T; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: any; }; constrained(inner: U): any; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: any; }; }; }; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: any; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: any; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U): any; }; }; }; } + + nested(inner: U) { return { outer, inner, owner: nestedOwner }; }, +>nested : (inner: U) => { outer: T; inner: U; owner: { make(outer: T): { nested(inner: U): any; constrained(inner: U_1): { outer: T; inner: U_1; owner: any; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: any; }; }; }; } +>inner : U +>{ outer, inner, owner: nestedOwner } : { outer: T; inner: U; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: any; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: any; }; }; }; } +>outer : T +>inner : U +>owner : { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: any; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: any; }; }; } +>nestedOwner : { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: any; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: any; }; }; } + + constrained(inner: U) { return { outer, inner, owner: nestedOwner }; }, +>constrained : (inner: U) => { outer: T; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: any; }; constrained(inner: U): any; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: any; }; }; }; } +>inner : U +>{ outer, inner, owner: nestedOwner } : { outer: T; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: any; }; }; }; } +>outer : T +>inner : U +>owner : { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: any; }; }; } +>nestedOwner : { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: any; }; }; } + + copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } { +>copied : (inner: U) => { outer: T; inner: U; owner: typeof nestedOwner; } +>inner : U +>outer : T +>inner : U +>owner : { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: any; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: any; }; }; } +>nestedOwner : { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: any; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: any; }; }; } + + return { outer, inner, owner: nestedOwner }; +>{ outer, inner, owner: nestedOwner } : { outer: T; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: any; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: any; }; }; }; } +>outer : T +>inner : U +>owner : { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: any; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: any; }; }; } +>nestedOwner : { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: any; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: any; }; }; } + + }, + rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; }, +>rest : (values_0: U) => { outer: T; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: any; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: any; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U): any; }; }; } +>values : [U] +>{ outer, inner: values[0], owner: nestedOwner } : { outer: T; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: any; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: any; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; }; } +>outer : T +>inner : U +>values[0] : U +>values : [U] +>0 : 0 +>owner : { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: any; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: any; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; } +>nestedOwner : { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: any; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: any; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; } + + }; + }, +}; +export const nestedNumber = nestedOwner.make(1); +>nestedNumber : { nested(inner: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; constrained(inner: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; copied(inner: U): { outer: number; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; } +>nestedOwner.make(1) : { nested(inner: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; constrained(inner: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; copied(inner: U): { outer: number; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; } +>nestedOwner.make : (outer: T) => { nested(inner: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; constrained(inner: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; } +>nestedOwner : { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; } +>make : (outer: T) => { nested(inner: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; constrained(inner: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; } +>1 : 1 + +export const nestedString = nestedNumber.nested(true).owner.make("text").nested(2); +>nestedString : { outer: string; inner: number; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; }; } +>nestedNumber.nested(true).owner.make("text").nested(2) : { outer: string; inner: number; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; }; } +>nestedNumber.nested(true).owner.make("text").nested : (inner: U) => { outer: string; inner: U; owner: { make(outer: string): { nested(inner: U): any; constrained(inner: U_1): { outer: string; inner: U_1; owner: any; }; copied(inner: U_1): { outer: string; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: string; inner: U_1; owner: any; }; }; }; } +>nestedNumber.nested(true).owner.make("text") : { nested(inner: U): { outer: string; inner: U; owner: { make(outer: string): any; }; }; constrained(inner: U): { outer: string; inner: U; owner: { make(outer: string): any; }; }; copied(inner: U): { outer: string; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: string; inner: U; owner: { make(outer: string): any; }; }; } +>nestedNumber.nested(true).owner.make : (outer: T) => { nested(inner: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; constrained(inner: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; } +>nestedNumber.nested(true).owner : { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; } +>nestedNumber.nested(true) : { outer: number; inner: boolean; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; }; } +>nestedNumber.nested : (inner: U) => { outer: number; inner: U; owner: { make(outer: number): { nested(inner: U): any; constrained(inner: U_1): { outer: number; inner: U_1; owner: any; }; copied(inner: U_1): { outer: number; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: number; inner: U_1; owner: any; }; }; }; } +>nestedNumber : { nested(inner: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; constrained(inner: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; copied(inner: U): { outer: number; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; } +>nested : (inner: U) => { outer: number; inner: U; owner: { make(outer: number): { nested(inner: U): any; constrained(inner: U_1): { outer: number; inner: U_1; owner: any; }; copied(inner: U_1): { outer: number; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: number; inner: U_1; owner: any; }; }; }; } +>true : true +>owner : { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; } +>make : (outer: T) => { nested(inner: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; constrained(inner: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; } +>"text" : "text" +>nested : (inner: U) => { outer: string; inner: U; owner: { make(outer: string): { nested(inner: U): any; constrained(inner: U_1): { outer: string; inner: U_1; owner: any; }; copied(inner: U_1): { outer: string; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: string; inner: U_1; owner: any; }; }; }; } +>2 : 2 + +export const nestedBoolean = nestedString.owner.make(true).nested("inner"); +>nestedBoolean : { outer: boolean; inner: string; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; }; } +>nestedString.owner.make(true).nested("inner") : { outer: boolean; inner: string; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; }; } +>nestedString.owner.make(true).nested : (inner: U) => { outer: boolean; inner: U; owner: { make(outer: boolean): { nested(inner: U): any; constrained(inner: U_1): { outer: boolean; inner: U_1; owner: any; }; copied(inner: U_1): { outer: boolean; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: boolean; inner: U_1; owner: any; }; }; }; } +>nestedString.owner.make(true) : { nested(inner: U): { outer: boolean; inner: U; owner: { make(outer: boolean): any; }; }; constrained(inner: U): { outer: boolean; inner: U; owner: { make(outer: boolean): any; }; }; copied(inner: U): { outer: boolean; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: boolean; inner: U; owner: { make(outer: boolean): any; }; }; } +>nestedString.owner.make : (outer: T) => { nested(inner: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; constrained(inner: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; } +>nestedString.owner : { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; } +>nestedString : { outer: string; inner: number; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; }; } +>owner : { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; } +>make : (outer: T) => { nested(inner: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; constrained(inner: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; } +>true : true +>nested : (inner: U) => { outer: boolean; inner: U; owner: { make(outer: boolean): { nested(inner: U): any; constrained(inner: U_1): { outer: boolean; inner: U_1; owner: any; }; copied(inner: U_1): { outer: boolean; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: boolean; inner: U_1; owner: any; }; }; }; } +>"inner" : "inner" + +const nestedStringOuter: string = nestedString.outer; +>nestedStringOuter : string +>nestedString.outer : string +>nestedString : { outer: string; inner: number; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; }; } +>outer : string + +const nestedStringInner: number = nestedString.inner; +>nestedStringInner : number +>nestedString.inner : number +>nestedString : { outer: string; inner: number; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; }; } +>inner : number + +const nestedBooleanOuter: boolean = nestedBoolean.outer; +>nestedBooleanOuter : boolean +>nestedBoolean.outer : boolean +>nestedBoolean : { outer: boolean; inner: string; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; }; } +>outer : boolean + +const nestedBooleanInner: string = nestedBoolean.inner; +>nestedBooleanInner : string +>nestedBoolean.inner : string +>nestedBoolean : { outer: boolean; inner: string; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; }; } +>inner : string + +const constrainedOuter: number = nestedNumber.constrained(2).outer; +>constrainedOuter : number +>nestedNumber.constrained(2).outer : number +>nestedNumber.constrained(2) : { outer: number; inner: 2; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; }; } +>nestedNumber.constrained : (inner: U) => { outer: number; inner: U; owner: { make(outer: number): { nested(inner: U_1): { outer: number; inner: U_1; owner: any; }; constrained(inner: U): any; copied(inner: U_1): { outer: number; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: number; inner: U_1; owner: any; }; }; }; } +>nestedNumber : { nested(inner: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; constrained(inner: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; copied(inner: U): { outer: number; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; } +>constrained : (inner: U) => { outer: number; inner: U; owner: { make(outer: number): { nested(inner: U_1): { outer: number; inner: U_1; owner: any; }; constrained(inner: U): any; copied(inner: U_1): { outer: number; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: number; inner: U_1; owner: any; }; }; }; } +>2 : 2 +>outer : number + +const constrainedInner: number = nestedNumber.constrained(2).inner; +>constrainedInner : number +>nestedNumber.constrained(2).inner : 2 +>nestedNumber.constrained(2) : { outer: number; inner: 2; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; }; } +>nestedNumber.constrained : (inner: U) => { outer: number; inner: U; owner: { make(outer: number): { nested(inner: U_1): { outer: number; inner: U_1; owner: any; }; constrained(inner: U): any; copied(inner: U_1): { outer: number; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: number; inner: U_1; owner: any; }; }; }; } +>nestedNumber : { nested(inner: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; constrained(inner: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; copied(inner: U): { outer: number; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; } +>constrained : (inner: U) => { outer: number; inner: U; owner: { make(outer: number): { nested(inner: U_1): { outer: number; inner: U_1; owner: any; }; constrained(inner: U): any; copied(inner: U_1): { outer: number; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: number; inner: U_1; owner: any; }; }; }; } +>2 : 2 +>inner : 2 + +const copiedOuter: number = nestedNumber.copied("inner").outer; +>copiedOuter : number +>nestedNumber.copied("inner").outer : number +>nestedNumber.copied("inner") : { outer: number; inner: string; owner: typeof nestedOwner; } +>nestedNumber.copied : (inner: U) => { outer: number; inner: U; owner: typeof nestedOwner; } +>nestedNumber : { nested(inner: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; constrained(inner: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; copied(inner: U): { outer: number; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; } +>copied : (inner: U) => { outer: number; inner: U; owner: typeof nestedOwner; } +>"inner" : "inner" +>outer : number + +const copiedInner: string = nestedNumber.copied("inner").inner; +>copiedInner : string +>nestedNumber.copied("inner").inner : string +>nestedNumber.copied("inner") : { outer: number; inner: string; owner: typeof nestedOwner; } +>nestedNumber.copied : (inner: U) => { outer: number; inner: U; owner: typeof nestedOwner; } +>nestedNumber : { nested(inner: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; constrained(inner: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; copied(inner: U): { outer: number; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; } +>copied : (inner: U) => { outer: number; inner: U; owner: typeof nestedOwner; } +>"inner" : "inner" +>inner : string + +const restOuter: number = nestedNumber.rest(true).outer; +>restOuter : number +>nestedNumber.rest(true).outer : number +>nestedNumber.rest(true) : { outer: number; inner: boolean; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; }; } +>nestedNumber.rest : (values_0: U) => { outer: number; inner: U; owner: { make(outer: number): { nested(inner: U_1): { outer: number; inner: U_1; owner: any; }; constrained(inner: U_1): { outer: number; inner: U_1; owner: any; }; copied(inner: U_1): { outer: number; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U): any; }; }; } +>nestedNumber : { nested(inner: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; constrained(inner: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; copied(inner: U): { outer: number; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; } +>rest : (values_0: U) => { outer: number; inner: U; owner: { make(outer: number): { nested(inner: U_1): { outer: number; inner: U_1; owner: any; }; constrained(inner: U_1): { outer: number; inner: U_1; owner: any; }; copied(inner: U_1): { outer: number; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U): any; }; }; } +>true : true +>outer : number + +const restInner: boolean = nestedNumber.rest(true).inner; +>restInner : boolean +>nestedNumber.rest(true).inner : boolean +>nestedNumber.rest(true) : { outer: number; inner: boolean; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; }; } +>nestedNumber.rest : (values_0: U) => { outer: number; inner: U; owner: { make(outer: number): { nested(inner: U_1): { outer: number; inner: U_1; owner: any; }; constrained(inner: U_1): { outer: number; inner: U_1; owner: any; }; copied(inner: U_1): { outer: number; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U): any; }; }; } +>nestedNumber : { nested(inner: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; constrained(inner: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; copied(inner: U): { outer: number; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; } +>rest : (values_0: U) => { outer: number; inner: U; owner: { make(outer: number): { nested(inner: U_1): { outer: number; inner: U_1; owner: any; }; constrained(inner: U_1): { outer: number; inner: U_1; owner: any; }; copied(inner: U_1): { outer: number; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U): any; }; }; } +>true : true +>inner : boolean + +export declare const reused: { +>reused : { first(values_0: T): { value: T; next: typeof reused; }; second(value: T): { value: T; next: typeof reused; }; shadowed(reused: T): { value: T; next: typeof reused; }; } + + first(...values: [T]): { value: T; next: typeof reused }; +>first : (values_0: T) => { value: T; next: typeof reused; } +>values : [T] +>value : T +>next : { first(values_0: T): { value: T; next: typeof reused; }; second(value: T_1): { value: T_1; next: typeof reused; }; shadowed(reused: T_1): { value: T_1; next: typeof reused; }; } +>reused : { first(values_0: T): { value: T; next: typeof reused; }; second(value: T_1): { value: T_1; next: typeof reused; }; shadowed(reused: T_1): { value: T_1; next: typeof reused; }; } + + second(value: T): { value: T; next: typeof reused }; +>second : (value: T) => { value: T; next: typeof reused; } +>value : T +>value : T +>next : { first(values_0: T_1): { value: T_1; next: typeof reused; }; second(value: T): { value: T; next: typeof reused; }; shadowed(reused: T_1): { value: T_1; next: typeof reused; }; } +>reused : { first(values_0: T_1): { value: T_1; next: typeof reused; }; second(value: T): { value: T; next: typeof reused; }; shadowed(reused: T_1): { value: T_1; next: typeof reused; }; } + + shadowed(reused: T): { value: T; next: typeof reused }; +>shadowed : (reused: T) => { value: T; next: typeof reused; } +>reused : T +>value : T +>next : T +>reused : T + +}; +export const copy = reused; +>copy : { first(values_0: T): { value: T; next: typeof reused; }; second(value: T): { value: T; next: typeof reused; }; shadowed(reused: T): { value: T; next: typeof reused; }; } +>reused : { first(values_0: T): { value: T; next: typeof reused; }; second(value: T): { value: T; next: typeof reused; }; shadowed(reused: T): { value: T; next: typeof reused; }; } + +const restValue: number = copy.first(1).next.second(2).value; +>restValue : number +>copy.first(1).next.second(2).value : number +>copy.first(1).next.second(2) : { value: number; next: typeof reused; } +>copy.first(1).next.second : (value: T) => { value: T; next: typeof reused; } +>copy.first(1).next : { first(values_0: T): { value: T; next: typeof reused; }; second(value: T): { value: T; next: typeof reused; }; shadowed(reused: T): { value: T; next: typeof reused; }; } +>copy.first(1) : { value: number; next: typeof reused; } +>copy.first : (values_0: T) => { value: T; next: typeof reused; } +>copy : { first(values_0: T): { value: T; next: typeof reused; }; second(value: T): { value: T; next: typeof reused; }; shadowed(reused: T): { value: T; next: typeof reused; }; } +>first : (values_0: T) => { value: T; next: typeof reused; } +>1 : 1 +>next : { first(values_0: T): { value: T; next: typeof reused; }; second(value: T): { value: T; next: typeof reused; }; shadowed(reused: T): { value: T; next: typeof reused; }; } +>second : (value: T) => { value: T; next: typeof reused; } +>2 : 2 +>value : number + +const shadowedValue: number = copy.shadowed(1).next; +>shadowedValue : number +>copy.shadowed(1).next : number +>copy.shadowed(1) : { value: number; next: number; } +>copy.shadowed : (reused: T) => { value: T; next: typeof reused; } +>copy : { first(values_0: T): { value: T; next: typeof reused; }; second(value: T): { value: T; next: typeof reused; }; shadowed(reused: T): { value: T; next: typeof reused; }; } +>shadowed : (reused: T) => { value: T; next: typeof reused; } +>1 : 1 +>next : number + +export type Inferred = T extends (value: infer U) => infer R +>Inferred : Inferred +>value : U + + ? { [K in keyof R]: (value: U) => R[K] } +>value : U + + : never; +export declare const inferred: Inferred<(value: number) => { next: typeof reused }>; +>inferred : { next: (value: number) => { first(values_0: T): { value: T; next: typeof reused; }; second(value: T): { value: T; next: typeof reused; }; shadowed(reused: T): { value: T; next: typeof reused; }; }; } +>value : number +>next : { first(values_0: T): { value: T; next: typeof reused; }; second(value: T): { value: T; next: typeof reused; }; shadowed(reused: T): { value: T; next: typeof reused; }; } +>reused : { first(values_0: T): { value: T; next: typeof reused; }; second(value: T): { value: T; next: typeof reused; }; shadowed(reused: T): { value: T; next: typeof reused; }; } + +export const inferredCopy = inferred; +>inferredCopy : { next: (value: number) => { first(values_0: T): { value: T; next: typeof reused; }; second(value: T): { value: T; next: typeof reused; }; shadowed(reused: T): { value: T; next: typeof reused; }; }; } +>inferred : { next: (value: number) => { first(values_0: T): { value: T; next: typeof reused; }; second(value: T): { value: T; next: typeof reused; }; shadowed(reused: T): { value: T; next: typeof reused; }; }; } + +const inferredValue: string = inferredCopy.next(1).second("text").value; +>inferredValue : string +>inferredCopy.next(1).second("text").value : string +>inferredCopy.next(1).second("text") : { value: string; next: typeof reused; } +>inferredCopy.next(1).second : (value: T) => { value: T; next: typeof reused; } +>inferredCopy.next(1) : { first(values_0: T): { value: T; next: typeof reused; }; second(value: T): { value: T; next: typeof reused; }; shadowed(reused: T): { value: T; next: typeof reused; }; } +>inferredCopy.next : (value: number) => { first(values_0: T): { value: T; next: typeof reused; }; second(value: T): { value: T; next: typeof reused; }; shadowed(reused: T): { value: T; next: typeof reused; }; } +>inferredCopy : { next: (value: number) => { first(values_0: T): { value: T; next: typeof reused; }; second(value: T): { value: T; next: typeof reused; }; shadowed(reused: T): { value: T; next: typeof reused; }; }; } +>next : (value: number) => { first(values_0: T): { value: T; next: typeof reused; }; second(value: T): { value: T; next: typeof reused; }; shadowed(reused: T): { value: T; next: typeof reused; }; } +>1 : 1 +>second : (value: T) => { value: T; next: typeof reused; } +>"text" : "text" +>value : string + diff --git a/tsc/testdata/baselines/reference/fourslash/quickInfo/quickinfoVerbosityConstMergedWithNamespace.baseline b/tsc/testdata/baselines/reference/fourslash/quickInfo/quickinfoVerbosityConstMergedWithNamespace.baseline index 9ad1379eb38b0..45bad93bd2a9d 100644 --- a/tsc/testdata/baselines/reference/fourslash/quickInfo/quickinfoVerbosityConstMergedWithNamespace.baseline +++ b/tsc/testdata/baselines/reference/fourslash/quickInfo/quickinfoVerbosityConstMergedWithNamespace.baseline @@ -50,6 +50,72 @@ // var version: string; // function reset(): void; // } +// type Factory = typeof create; +// ^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | type Factory = { +// | (x: string): number; +// | version: string; +// | reset(): void; +// | } +// | ``` +// | +// | (verbosity level: 2) +// | ---------------------------------------------------------------------- +// ^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | type Factory = { +// | (x: string): number; +// | version: string; +// | reset(): void; +// | } +// | ``` +// | +// | (verbosity level: 1) +// | ---------------------------------------------------------------------- +// ^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | type Factory = typeof create +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// declare const factory: typeof create; +// ^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const factory: { +// | (x: string): number; +// | version: string; +// | reset(): void; +// | } +// | ``` +// | +// | (verbosity level: 2) +// | ---------------------------------------------------------------------- +// ^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const factory: { +// | (x: string): number; +// | version: string; +// | reset(): void; +// | } +// | ``` +// | +// | (verbosity level: 1) +// | ---------------------------------------------------------------------- +// ^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const factory: typeof create +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- // [ { @@ -173,5 +239,187 @@ }, "verbosityLevel": 1 } + }, + { + "marker": { + "Position": 139, + "LSPosition": { + "line": 6, + "character": 12 + }, + "Name": "3", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\ntype Factory = typeof create\n```\n" + }, + "range": { + "start": { + "line": 6, + "character": 5 + }, + "end": { + "line": 6, + "character": 12 + } + }, + "canIncreaseVerbosity": true + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 139, + "LSPosition": { + "line": 6, + "character": 12 + }, + "Name": "3", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\ntype Factory = {\n (x: string): number;\n version: string;\n reset(): void;\n}\n```\n" + }, + "range": { + "start": { + "line": 6, + "character": 5 + }, + "end": { + "line": 6, + "character": 12 + } + } + }, + "verbosityLevel": 1 + } + }, + { + "marker": { + "Position": 139, + "LSPosition": { + "line": 6, + "character": 12 + }, + "Name": "3", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\ntype Factory = {\n (x: string): number;\n version: string;\n reset(): void;\n}\n```\n" + }, + "range": { + "start": { + "line": 6, + "character": 5 + }, + "end": { + "line": 6, + "character": 12 + } + } + }, + "verbosityLevel": 2 + } + }, + { + "marker": { + "Position": 178, + "LSPosition": { + "line": 7, + "character": 21 + }, + "Name": "4", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst factory: typeof create\n```\n" + }, + "range": { + "start": { + "line": 7, + "character": 14 + }, + "end": { + "line": 7, + "character": 21 + } + }, + "canIncreaseVerbosity": true + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 178, + "LSPosition": { + "line": 7, + "character": 21 + }, + "Name": "4", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst factory: {\n (x: string): number;\n version: string;\n reset(): void;\n}\n```\n" + }, + "range": { + "start": { + "line": 7, + "character": 14 + }, + "end": { + "line": 7, + "character": 21 + } + } + }, + "verbosityLevel": 1 + } + }, + { + "marker": { + "Position": 178, + "LSPosition": { + "line": 7, + "character": 21 + }, + "Name": "4", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst factory: {\n (x: string): number;\n version: string;\n reset(): void;\n}\n```\n" + }, + "range": { + "start": { + "line": 7, + "character": 14 + }, + "end": { + "line": 7, + "character": 21 + } + } + }, + "verbosityLevel": 2 + } } ] \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/fourslash/quickInfo/quickinfoVerbosityInstantiationTruncation20.baseline b/tsc/testdata/baselines/reference/fourslash/quickInfo/quickinfoVerbosityInstantiationTruncation20.baseline new file mode 100644 index 0000000000000..3872429fb6284 --- /dev/null +++ b/tsc/testdata/baselines/reference/fourslash/quickInfo/quickinfoVerbosityInstantiationTruncation20.baseline @@ -0,0 +1,120 @@ +// === QuickInfo === +=== /quickinfoVerbosityInstantiationTruncation20.ts === +// declare function f(value: T): T; +// type Sample = (aVeryLongParameterNameThatExceedsTheBudget: string) => typeof f; +// ^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | type Sample = (aVeryLongParameterNameThatExceedsTheBudget: string) => typeof f +// | ``` +// | +// | (verbosity level: 2) +// | ---------------------------------------------------------------------- +// ^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | type Sample = (aVeryLongParameterNameThatExceedsTheBudget: string) => typeof f +// | ``` +// | +// | (verbosity level: 1) +// | ---------------------------------------------------------------------- +// ^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | type Sample = (aVeryLongParameterNameThatExceedsTheBudget: string) => typeof f +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +[ + { + "marker": { + "Position": 47, + "LSPosition": { + "line": 1, + "character": 11 + }, + "Name": "sample", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\ntype Sample = (aVeryLongParameterNameThatExceedsTheBudget: string) => typeof f\n```\n" + }, + "range": { + "start": { + "line": 1, + "character": 5 + }, + "end": { + "line": 1, + "character": 11 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 47, + "LSPosition": { + "line": 1, + "character": 11 + }, + "Name": "sample", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\ntype Sample = (aVeryLongParameterNameThatExceedsTheBudget: string) => typeof f\n```\n" + }, + "range": { + "start": { + "line": 1, + "character": 5 + }, + "end": { + "line": 1, + "character": 11 + } + } + }, + "verbosityLevel": 1 + } + }, + { + "marker": { + "Position": 47, + "LSPosition": { + "line": 1, + "character": 11 + }, + "Name": "sample", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\ntype Sample = (aVeryLongParameterNameThatExceedsTheBudget: string) => typeof f\n```\n" + }, + "range": { + "start": { + "line": 1, + "character": 5 + }, + "end": { + "line": 1, + "character": 11 + } + } + }, + "verbosityLevel": 2 + } + } +] \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/fourslash/quickInfo/quickinfoVerbosityInstantiationTruncation40.baseline b/tsc/testdata/baselines/reference/fourslash/quickInfo/quickinfoVerbosityInstantiationTruncation40.baseline new file mode 100644 index 0000000000000..1f30e4fcc6fc8 --- /dev/null +++ b/tsc/testdata/baselines/reference/fourslash/quickInfo/quickinfoVerbosityInstantiationTruncation40.baseline @@ -0,0 +1,120 @@ +// === QuickInfo === +=== /quickinfoVerbosityInstantiationTruncation40.ts === +// declare function f(value: T): T; +// type Sample = (aVeryLongParameterNameThatExceedsTheBudget: string) => typeof f; +// ^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | type Sample = (aVeryLongParameterNameThatExceedsTheBudget: string) => typeof f +// | ``` +// | +// | (verbosity level: 2) +// | ---------------------------------------------------------------------- +// ^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | type Sample = (aVeryLongParameterNameThatExceedsTheBudget: string) => typeof f +// | ``` +// | +// | (verbosity level: 1) +// | ---------------------------------------------------------------------- +// ^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | type Sample = (aVeryLongParameterNameThatExceedsTheBudget: string) => typeof f +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +[ + { + "marker": { + "Position": 47, + "LSPosition": { + "line": 1, + "character": 11 + }, + "Name": "sample", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\ntype Sample = (aVeryLongParameterNameThatExceedsTheBudget: string) => typeof f\n```\n" + }, + "range": { + "start": { + "line": 1, + "character": 5 + }, + "end": { + "line": 1, + "character": 11 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 47, + "LSPosition": { + "line": 1, + "character": 11 + }, + "Name": "sample", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\ntype Sample = (aVeryLongParameterNameThatExceedsTheBudget: string) => typeof f\n```\n" + }, + "range": { + "start": { + "line": 1, + "character": 5 + }, + "end": { + "line": 1, + "character": 11 + } + } + }, + "verbosityLevel": 1 + } + }, + { + "marker": { + "Position": 47, + "LSPosition": { + "line": 1, + "character": 11 + }, + "Name": "sample", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\ntype Sample = (aVeryLongParameterNameThatExceedsTheBudget: string) => typeof f\n```\n" + }, + "range": { + "start": { + "line": 1, + "character": 5 + }, + "end": { + "line": 1, + "character": 11 + } + } + }, + "verbosityLevel": 2 + } + } +] \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/fourslash/quickInfo/quickinfoVerbosityInstantiationTruncation80.baseline b/tsc/testdata/baselines/reference/fourslash/quickInfo/quickinfoVerbosityInstantiationTruncation80.baseline new file mode 100644 index 0000000000000..99fa5db0937df --- /dev/null +++ b/tsc/testdata/baselines/reference/fourslash/quickInfo/quickinfoVerbosityInstantiationTruncation80.baseline @@ -0,0 +1,120 @@ +// === QuickInfo === +=== /quickinfoVerbosityInstantiationTruncation80.ts === +// declare function f(value: T): T; +// type Sample = (aVeryLongParameterNameThatExceedsTheBudget: string) => typeof f; +// ^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | type Sample = (aVeryLongParameterNameThatExceedsTheBudget: string) => typeof f +// | ``` +// | +// | (verbosity level: 2) +// | ---------------------------------------------------------------------- +// ^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | type Sample = (aVeryLongParameterNameThatExceedsTheBudget: string) => typeof f +// | ``` +// | +// | (verbosity level: 1) +// | ---------------------------------------------------------------------- +// ^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | type Sample = (aVeryLongParameterNameThatExceedsTheBudget: string) => typeof f +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +[ + { + "marker": { + "Position": 47, + "LSPosition": { + "line": 1, + "character": 11 + }, + "Name": "sample", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\ntype Sample = (aVeryLongParameterNameThatExceedsTheBudget: string) => typeof f\n```\n" + }, + "range": { + "start": { + "line": 1, + "character": 5 + }, + "end": { + "line": 1, + "character": 11 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 47, + "LSPosition": { + "line": 1, + "character": 11 + }, + "Name": "sample", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\ntype Sample = (aVeryLongParameterNameThatExceedsTheBudget: string) => typeof f\n```\n" + }, + "range": { + "start": { + "line": 1, + "character": 5 + }, + "end": { + "line": 1, + "character": 11 + } + } + }, + "verbosityLevel": 1 + } + }, + { + "marker": { + "Position": 47, + "LSPosition": { + "line": 1, + "character": 11 + }, + "Name": "sample", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\ntype Sample = (aVeryLongParameterNameThatExceedsTheBudget: string) => typeof f\n```\n" + }, + "range": { + "start": { + "line": 1, + "character": 5 + }, + "end": { + "line": 1, + "character": 11 + } + } + }, + "verbosityLevel": 2 + } + } +] \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/fourslash/quickInfo/quickinfoVerbosityRecursiveType.baseline b/tsc/testdata/baselines/reference/fourslash/quickInfo/quickinfoVerbosityRecursiveType.baseline index a2a6d1af19f75..52bc030954346 100644 --- a/tsc/testdata/baselines/reference/fourslash/quickInfo/quickinfoVerbosityRecursiveType.baseline +++ b/tsc/testdata/baselines/reference/fourslash/quickInfo/quickinfoVerbosityRecursiveType.baseline @@ -121,6 +121,386 @@ // right: undefined, // orange: { name: "orange" }, // } +// type Wrapped = ({ value: T; next: Wrapped }); +// ^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | type Wrapped = { +// | value: T; +// | next: Wrapped; +// | } +// | ``` +// | +// | (verbosity level: 2) +// | ---------------------------------------------------------------------- +// ^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | type Wrapped = { +// | value: T; +// | next: Wrapped; +// | } +// | ``` +// | +// | (verbosity level: 1) +// | ---------------------------------------------------------------------- +// ^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | type Wrapped = { +// | value: T; +// | next: Wrapped; +// | } +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// declare const wrappedValue: Wrapped; +// ^^^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const wrappedValue: { +// | value: string; +// | next: Wrapped; +// | } +// | ``` +// | +// | (verbosity level: 2) +// | ---------------------------------------------------------------------- +// ^^^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const wrappedValue: { +// | value: string; +// | next: Wrapped; +// | } +// | ``` +// | +// | (verbosity level: 1) +// | ---------------------------------------------------------------------- +// ^^^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const wrappedValue: Wrapped +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// type Callable = { (value: T): Callable; link: Wrapped }; +// ^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | type Callable = { +// | (value: T): Callable; +// | link: { +// | value: T; +// | next: Wrapped; +// | }; +// | } +// | ``` +// | +// | (verbosity level: 2) +// | ---------------------------------------------------------------------- +// ^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | type Callable = { +// | (value: T): Callable; +// | link: { +// | value: T; +// | next: Wrapped; +// | }; +// | } +// | ``` +// | +// | (verbosity level: 1) +// | ---------------------------------------------------------------------- +// ^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | type Callable = { +// | (value: T): Callable; +// | link: Wrapped; +// | } +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// declare const callableValue: Callable; +// ^^^^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const callableValue: { +// | (value: number): Callable; +// | link: { +// | value: number; +// | next: Wrapped; +// | }; +// | } +// | ``` +// | +// | (verbosity level: 2) +// | ---------------------------------------------------------------------- +// ^^^^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const callableValue: { +// | (value: number): Callable; +// | link: Wrapped; +// | } +// | ``` +// | +// | (verbosity level: 1) +// | ---------------------------------------------------------------------- +// ^^^^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const callableValue: Callable +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// const recur = () => recur; +// ^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const recur: () => typeof recur +// | ``` +// | +// | (verbosity level: 2) +// | ---------------------------------------------------------------------- +// ^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const recur: () => typeof recur +// | ``` +// | +// | (verbosity level: 1) +// | ---------------------------------------------------------------------- +// ^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const recur: () => typeof recur +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// type RecursiveArray = RecursiveArray[]; +// ^^^^^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | type RecursiveArray = RecursiveArray[] +// | ``` +// | +// | (verbosity level: 2) +// | ---------------------------------------------------------------------- +// ^^^^^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | type RecursiveArray = RecursiveArray[] +// | ``` +// | +// | (verbosity level: 1) +// | ---------------------------------------------------------------------- +// ^^^^^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | type RecursiveArray = RecursiveArray[] +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// type RecursiveTuple = [RecursiveTuple?]; +// ^^^^^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | type RecursiveTuple = [(RecursiveTuple | undefined)?] +// | ``` +// | +// | (verbosity level: 2) +// | ---------------------------------------------------------------------- +// ^^^^^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | type RecursiveTuple = [(RecursiveTuple | undefined)?] +// | ``` +// | +// | (verbosity level: 1) +// | ---------------------------------------------------------------------- +// ^^^^^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | type RecursiveTuple = [(RecursiveTuple | undefined)?] +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// type RecursiveUnion = { next: RecursiveUnion } | undefined; +// ^^^^^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | type RecursiveUnion = { +// | next: RecursiveUnion; +// | } | undefined +// | ``` +// | +// | (verbosity level: 2) +// | ---------------------------------------------------------------------- +// ^^^^^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | type RecursiveUnion = { +// | next: RecursiveUnion; +// | } | undefined +// | ``` +// | +// | (verbosity level: 1) +// | ---------------------------------------------------------------------- +// ^^^^^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | type RecursiveUnion = { +// | next: RecursiveUnion; +// | } | undefined +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// declare const aliasOwner: Wrapped; +// ^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const aliasOwner: { +// | value: string; +// | next: Wrapped; +// | } +// | ``` +// | +// | (verbosity level: 2) +// | ---------------------------------------------------------------------- +// ^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const aliasOwner: { +// | value: string; +// | next: Wrapped; +// | } +// | ``` +// | +// | (verbosity level: 1) +// | ---------------------------------------------------------------------- +// ^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const aliasOwner: Wrapped +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// const siblingOwners = { first: aliasOwner, second: aliasOwner }; +// ^^^^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const siblingOwners: { +// | first: { +// | value: string; +// | next: Wrapped; +// | }; +// | second: { +// | value: string; +// | next: Wrapped; +// | }; +// | } +// | ``` +// | +// | (verbosity level: 2) +// | ---------------------------------------------------------------------- +// ^^^^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const siblingOwners: { +// | first: { +// | value: string; +// | next: Wrapped; +// | }; +// | second: { +// | value: string; +// | next: Wrapped; +// | }; +// | } +// | ``` +// | +// | (verbosity level: 1) +// | ---------------------------------------------------------------------- +// ^^^^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const siblingOwners: { +// | first: Wrapped; +// | second: Wrapped; +// | } +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// function local() { +// const object = { next: () => object }; +// ^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const object: { +// | next: () => ...; +// | } +// | ``` +// | +// | (verbosity level: 2) +// | ---------------------------------------------------------------------- +// ^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const object: { +// | next: () => ...; +// | } +// | ``` +// | +// | (verbosity level: 1) +// | ---------------------------------------------------------------------- +// ^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const object: { +// | next: () => ...; +// | } +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// const broad: unknown = function self() { return self; }; +// ^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | function self(): () => ... +// | ``` +// | +// | (verbosity level: 2) +// | ---------------------------------------------------------------------- +// ^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | function self(): () => ... +// | ``` +// | +// | (verbosity level: 1) +// | ---------------------------------------------------------------------- +// ^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | function self(): () => ... +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// } [ { "marker": { @@ -365,5 +745,1091 @@ }, "verbosityLevel": 2 } + }, + { + "marker": { + "Position": 482, + "LSPosition": { + "line": 25, + "character": 12 + }, + "Name": "wrapped", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\ntype Wrapped = {\n value: T;\n next: Wrapped;\n}\n```\n" + }, + "range": { + "start": { + "line": 25, + "character": 5 + }, + "end": { + "line": 25, + "character": 12 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 482, + "LSPosition": { + "line": 25, + "character": 12 + }, + "Name": "wrapped", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\ntype Wrapped = {\n value: T;\n next: Wrapped;\n}\n```\n" + }, + "range": { + "start": { + "line": 25, + "character": 5 + }, + "end": { + "line": 25, + "character": 12 + } + } + }, + "verbosityLevel": 1 + } + }, + { + "marker": { + "Position": 482, + "LSPosition": { + "line": 25, + "character": 12 + }, + "Name": "wrapped", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\ntype Wrapped = {\n value: T;\n next: Wrapped;\n}\n```\n" + }, + "range": { + "start": { + "line": 25, + "character": 5 + }, + "end": { + "line": 25, + "character": 12 + } + } + }, + "verbosityLevel": 2 + } + }, + { + "marker": { + "Position": 548, + "LSPosition": { + "line": 26, + "character": 26 + }, + "Name": "wrappedValue", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst wrappedValue: Wrapped\n```\n" + }, + "range": { + "start": { + "line": 26, + "character": 14 + }, + "end": { + "line": 26, + "character": 26 + } + }, + "canIncreaseVerbosity": true + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 548, + "LSPosition": { + "line": 26, + "character": 26 + }, + "Name": "wrappedValue", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst wrappedValue: {\n value: string;\n next: Wrapped;\n}\n```\n" + }, + "range": { + "start": { + "line": 26, + "character": 14 + }, + "end": { + "line": 26, + "character": 26 + } + } + }, + "verbosityLevel": 1 + } + }, + { + "marker": { + "Position": 548, + "LSPosition": { + "line": 26, + "character": 26 + }, + "Name": "wrappedValue", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst wrappedValue: {\n value: string;\n next: Wrapped;\n}\n```\n" + }, + "range": { + "start": { + "line": 26, + "character": 14 + }, + "end": { + "line": 26, + "character": 26 + } + } + }, + "verbosityLevel": 2 + } + }, + { + "marker": { + "Position": 580, + "LSPosition": { + "line": 27, + "character": 13 + }, + "Name": "callable", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\ntype Callable = {\n (value: T): Callable;\n link: Wrapped;\n}\n```\n" + }, + "range": { + "start": { + "line": 27, + "character": 5 + }, + "end": { + "line": 27, + "character": 13 + } + }, + "canIncreaseVerbosity": true + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 580, + "LSPosition": { + "line": 27, + "character": 13 + }, + "Name": "callable", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\ntype Callable = {\n (value: T): Callable;\n link: {\n value: T;\n next: Wrapped;\n };\n}\n```\n" + }, + "range": { + "start": { + "line": 27, + "character": 5 + }, + "end": { + "line": 27, + "character": 13 + } + } + }, + "verbosityLevel": 1 + } + }, + { + "marker": { + "Position": 580, + "LSPosition": { + "line": 27, + "character": 13 + }, + "Name": "callable", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\ntype Callable = {\n (value: T): Callable;\n link: {\n value: T;\n next: Wrapped;\n };\n}\n```\n" + }, + "range": { + "start": { + "line": 27, + "character": 5 + }, + "end": { + "line": 27, + "character": 13 + } + } + }, + "verbosityLevel": 2 + } + }, + { + "marker": { + "Position": 660, + "LSPosition": { + "line": 28, + "character": 27 + }, + "Name": "callableValue", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst callableValue: Callable\n```\n" + }, + "range": { + "start": { + "line": 28, + "character": 14 + }, + "end": { + "line": 28, + "character": 27 + } + }, + "canIncreaseVerbosity": true + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 660, + "LSPosition": { + "line": 28, + "character": 27 + }, + "Name": "callableValue", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst callableValue: {\n (value: number): Callable;\n link: Wrapped;\n}\n```\n" + }, + "range": { + "start": { + "line": 28, + "character": 14 + }, + "end": { + "line": 28, + "character": 27 + } + }, + "canIncreaseVerbosity": true + }, + "verbosityLevel": 1 + } + }, + { + "marker": { + "Position": 660, + "LSPosition": { + "line": 28, + "character": 27 + }, + "Name": "callableValue", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst callableValue: {\n (value: number): Callable;\n link: {\n value: number;\n next: Wrapped;\n };\n}\n```\n" + }, + "range": { + "start": { + "line": 28, + "character": 14 + }, + "end": { + "line": 28, + "character": 27 + } + } + }, + "verbosityLevel": 2 + } + }, + { + "marker": { + "Position": 691, + "LSPosition": { + "line": 29, + "character": 11 + }, + "Name": "recur", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst recur: () => typeof recur\n```\n" + }, + "range": { + "start": { + "line": 29, + "character": 6 + }, + "end": { + "line": 29, + "character": 11 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 691, + "LSPosition": { + "line": 29, + "character": 11 + }, + "Name": "recur", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst recur: () => typeof recur\n```\n" + }, + "range": { + "start": { + "line": 29, + "character": 6 + }, + "end": { + "line": 29, + "character": 11 + } + } + }, + "verbosityLevel": 1 + } + }, + { + "marker": { + "Position": 691, + "LSPosition": { + "line": 29, + "character": 11 + }, + "Name": "recur", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst recur: () => typeof recur\n```\n" + }, + "range": { + "start": { + "line": 29, + "character": 6 + }, + "end": { + "line": 29, + "character": 11 + } + } + }, + "verbosityLevel": 2 + } + }, + { + "marker": { + "Position": 726, + "LSPosition": { + "line": 30, + "character": 19 + }, + "Name": "recursiveArray", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\ntype RecursiveArray = RecursiveArray[]\n```\n" + }, + "range": { + "start": { + "line": 30, + "character": 5 + }, + "end": { + "line": 30, + "character": 19 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 726, + "LSPosition": { + "line": 30, + "character": 19 + }, + "Name": "recursiveArray", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\ntype RecursiveArray = RecursiveArray[]\n```\n" + }, + "range": { + "start": { + "line": 30, + "character": 5 + }, + "end": { + "line": 30, + "character": 19 + } + } + }, + "verbosityLevel": 1 + } + }, + { + "marker": { + "Position": 726, + "LSPosition": { + "line": 30, + "character": 19 + }, + "Name": "recursiveArray", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\ntype RecursiveArray = RecursiveArray[]\n```\n" + }, + "range": { + "start": { + "line": 30, + "character": 5 + }, + "end": { + "line": 30, + "character": 19 + } + } + }, + "verbosityLevel": 2 + } + }, + { + "marker": { + "Position": 766, + "LSPosition": { + "line": 31, + "character": 19 + }, + "Name": "recursiveTuple", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\ntype RecursiveTuple = [(RecursiveTuple | undefined)?]\n```\n" + }, + "range": { + "start": { + "line": 31, + "character": 5 + }, + "end": { + "line": 31, + "character": 19 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 766, + "LSPosition": { + "line": 31, + "character": 19 + }, + "Name": "recursiveTuple", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\ntype RecursiveTuple = [(RecursiveTuple | undefined)?]\n```\n" + }, + "range": { + "start": { + "line": 31, + "character": 5 + }, + "end": { + "line": 31, + "character": 19 + } + } + }, + "verbosityLevel": 1 + } + }, + { + "marker": { + "Position": 766, + "LSPosition": { + "line": 31, + "character": 19 + }, + "Name": "recursiveTuple", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\ntype RecursiveTuple = [(RecursiveTuple | undefined)?]\n```\n" + }, + "range": { + "start": { + "line": 31, + "character": 5 + }, + "end": { + "line": 31, + "character": 19 + } + } + }, + "verbosityLevel": 2 + } + }, + { + "marker": { + "Position": 807, + "LSPosition": { + "line": 32, + "character": 19 + }, + "Name": "recursiveUnion", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\ntype RecursiveUnion = {\n next: RecursiveUnion;\n} | undefined\n```\n" + }, + "range": { + "start": { + "line": 32, + "character": 5 + }, + "end": { + "line": 32, + "character": 19 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 807, + "LSPosition": { + "line": 32, + "character": 19 + }, + "Name": "recursiveUnion", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\ntype RecursiveUnion = {\n next: RecursiveUnion;\n} | undefined\n```\n" + }, + "range": { + "start": { + "line": 32, + "character": 5 + }, + "end": { + "line": 32, + "character": 19 + } + } + }, + "verbosityLevel": 1 + } + }, + { + "marker": { + "Position": 807, + "LSPosition": { + "line": 32, + "character": 19 + }, + "Name": "recursiveUnion", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\ntype RecursiveUnion = {\n next: RecursiveUnion;\n} | undefined\n```\n" + }, + "range": { + "start": { + "line": 32, + "character": 5 + }, + "end": { + "line": 32, + "character": 19 + } + } + }, + "verbosityLevel": 2 + } + }, + { + "marker": { + "Position": 872, + "LSPosition": { + "line": 33, + "character": 24 + }, + "Name": "aliasOwner", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst aliasOwner: Wrapped\n```\n" + }, + "range": { + "start": { + "line": 33, + "character": 14 + }, + "end": { + "line": 33, + "character": 24 + } + }, + "canIncreaseVerbosity": true + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 872, + "LSPosition": { + "line": 33, + "character": 24 + }, + "Name": "aliasOwner", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst aliasOwner: {\n value: string;\n next: Wrapped;\n}\n```\n" + }, + "range": { + "start": { + "line": 33, + "character": 14 + }, + "end": { + "line": 33, + "character": 24 + } + } + }, + "verbosityLevel": 1 + } + }, + { + "marker": { + "Position": 872, + "LSPosition": { + "line": 33, + "character": 24 + }, + "Name": "aliasOwner", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst aliasOwner: {\n value: string;\n next: Wrapped;\n}\n```\n" + }, + "range": { + "start": { + "line": 33, + "character": 14 + }, + "end": { + "line": 33, + "character": 24 + } + } + }, + "verbosityLevel": 2 + } + }, + { + "marker": { + "Position": 910, + "LSPosition": { + "line": 34, + "character": 19 + }, + "Name": "siblingOwners", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst siblingOwners: {\n first: Wrapped;\n second: Wrapped;\n}\n```\n" + }, + "range": { + "start": { + "line": 34, + "character": 6 + }, + "end": { + "line": 34, + "character": 19 + } + }, + "canIncreaseVerbosity": true + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 910, + "LSPosition": { + "line": 34, + "character": 19 + }, + "Name": "siblingOwners", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst siblingOwners: {\n first: {\n value: string;\n next: Wrapped;\n };\n second: {\n value: string;\n next: Wrapped;\n };\n}\n```\n" + }, + "range": { + "start": { + "line": 34, + "character": 6 + }, + "end": { + "line": 34, + "character": 19 + } + } + }, + "verbosityLevel": 1 + } + }, + { + "marker": { + "Position": 910, + "LSPosition": { + "line": 34, + "character": 19 + }, + "Name": "siblingOwners", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst siblingOwners: {\n first: {\n value: string;\n next: Wrapped;\n };\n second: {\n value: string;\n next: Wrapped;\n };\n}\n```\n" + }, + "range": { + "start": { + "line": 34, + "character": 6 + }, + "end": { + "line": 34, + "character": 19 + } + } + }, + "verbosityLevel": 2 + } + }, + { + "marker": { + "Position": 991, + "LSPosition": { + "line": 36, + "character": 16 + }, + "Name": "localObject", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst object: {\n next: () => ...;\n}\n```\n" + }, + "range": { + "start": { + "line": 36, + "character": 10 + }, + "end": { + "line": 36, + "character": 16 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 991, + "LSPosition": { + "line": 36, + "character": 16 + }, + "Name": "localObject", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst object: {\n next: () => ...;\n}\n```\n" + }, + "range": { + "start": { + "line": 36, + "character": 10 + }, + "end": { + "line": 36, + "character": 16 + } + } + }, + "verbosityLevel": 1 + } + }, + { + "marker": { + "Position": 991, + "LSPosition": { + "line": 36, + "character": 16 + }, + "Name": "localObject", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst object: {\n next: () => ...;\n}\n```\n" + }, + "range": { + "start": { + "line": 36, + "character": 10 + }, + "end": { + "line": 36, + "character": 16 + } + } + }, + "verbosityLevel": 2 + } + }, + { + "marker": { + "Position": 1058, + "LSPosition": { + "line": 37, + "character": 40 + }, + "Name": "localSelf", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nfunction self(): () => ...\n```\n" + }, + "range": { + "start": { + "line": 37, + "character": 36 + }, + "end": { + "line": 37, + "character": 40 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 1058, + "LSPosition": { + "line": 37, + "character": 40 + }, + "Name": "localSelf", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nfunction self(): () => ...\n```\n" + }, + "range": { + "start": { + "line": 37, + "character": 36 + }, + "end": { + "line": 37, + "character": 40 + } + } + }, + "verbosityLevel": 1 + } + }, + { + "marker": { + "Position": 1058, + "LSPosition": { + "line": 37, + "character": 40 + }, + "Name": "localSelf", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nfunction self(): () => ...\n```\n" + }, + "range": { + "start": { + "line": 37, + "character": 36 + }, + "end": { + "line": 37, + "character": 40 + } + } + }, + "verbosityLevel": 2 + } } ] \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/fourslash/quickInfo/recursiveFunctionCallQuickInfo.baseline b/tsc/testdata/baselines/reference/fourslash/quickInfo/recursiveFunctionCallQuickInfo.baseline new file mode 100644 index 0000000000000..255f224addd4c --- /dev/null +++ b/tsc/testdata/baselines/reference/fourslash/quickInfo/recursiveFunctionCallQuickInfo.baseline @@ -0,0 +1,2556 @@ +// === QuickInfo === +=== /recursiveFunctionCallQuickInfo.ts === +// const arrow = () => arrow; +// ^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const arrow: () => typeof arrow +// | ``` +// | +// | (verbosity level: 2) +// | ---------------------------------------------------------------------- +// ^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const arrow: () => typeof arrow +// | ``` +// | +// | (verbosity level: 1) +// | ---------------------------------------------------------------------- +// ^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const arrow: () => typeof arrow +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// arrow(); +// ^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const arrow: () => () => typeof arrow +// | ``` +// | +// | (verbosity level: 2) +// | ---------------------------------------------------------------------- +// ^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const arrow: () => () => typeof arrow +// | ``` +// | +// | (verbosity level: 1) +// | ---------------------------------------------------------------------- +// ^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const arrow: () => () => typeof arrow +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// const named = function self() { return self; }; +// named(); +// ^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const named: () => () => typeof named +// | ``` +// | +// | (verbosity level: 2) +// | ---------------------------------------------------------------------- +// ^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const named: () => () => typeof named +// | ``` +// | +// | (verbosity level: 1) +// | ---------------------------------------------------------------------- +// ^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const named: () => () => typeof named +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// function recur() { return recur; } +// recur(); +// ^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | function recur(): () => typeof recur +// | ``` +// | +// | (verbosity level: 2) +// | ---------------------------------------------------------------------- +// ^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | function recur(): () => typeof recur +// | ``` +// | +// | (verbosity level: 1) +// | ---------------------------------------------------------------------- +// ^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | function recur(): () => typeof recur +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// const generic = (value: T) => generic; +// generic(1); +// ^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const generic: (value: number) => (value: number) => typeof generic +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// const specialized = generic; +// specialized("text"); +// ^^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const specialized: (value: string) => (value: string) => typeof generic +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// declare let narrowed: typeof arrow | undefined; +// if (narrowed) narrowed(); +// ^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | let narrowed: () => () => typeof arrow +// | ``` +// | +// | (verbosity level: 2) +// | ---------------------------------------------------------------------- +// ^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | let narrowed: () => () => typeof arrow +// | ``` +// | +// | (verbosity level: 1) +// | ---------------------------------------------------------------------- +// ^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | let narrowed: () => () => typeof arrow +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// declare const broad: () => unknown; +// broad(); +// ^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const broad: () => unknown +// | ``` +// | +// | (verbosity level: 2) +// | ---------------------------------------------------------------------- +// ^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const broad: () => unknown +// | ``` +// | +// | (verbosity level: 1) +// | ---------------------------------------------------------------------- +// ^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const broad: () => unknown +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// function overloaded(value: string): string; +// function overloaded(value: number): typeof overloaded; +// function overloaded(value: string | number): string | typeof overloaded { +// return typeof value === "string" ? value : overloaded; +// } +// overloaded("text"); +// ^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | function overloaded(value: string): string +// | ``` +// | +// | (verbosity level: 2) +// | ---------------------------------------------------------------------- +// ^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | function overloaded(value: string): string +// | ``` +// | +// | (verbosity level: 1) +// | ---------------------------------------------------------------------- +// ^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | function overloaded(value: string): string +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// overloaded(1); +// ^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | function overloaded(value: number): typeof overloaded +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// const object = { recur() { return object.recur; } }; +// object.recur(); +// ^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | (method) recur(): () => ... +// | ``` +// | +// | (verbosity level: 2) +// | ---------------------------------------------------------------------- +// ^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | (method) recur(): () => ... +// | ``` +// | +// | (verbosity level: 1) +// | ---------------------------------------------------------------------- +// ^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | (method) recur(): () => ... +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// const first = () => second; +// ^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const first: () => () => typeof first +// | ``` +// | +// | (verbosity level: 2) +// | ---------------------------------------------------------------------- +// ^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const first: () => () => typeof first +// | ``` +// | +// | (verbosity level: 1) +// | ---------------------------------------------------------------------- +// ^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const first: () => () => typeof first +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// const second = () => first; +// first(); +// ^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const first: () => () => () => typeof second +// | ``` +// | +// | (verbosity level: 2) +// | ---------------------------------------------------------------------- +// ^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const first: () => () => () => typeof second +// | ``` +// | +// | (verbosity level: 1) +// | ---------------------------------------------------------------------- +// ^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const first: () => () => () => typeof second +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// function genericFunction(value: T) { return genericFunction; } +// genericFunction(1); +// ^^^^^^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | function genericFunction(value: number): (value: number) => typeof genericFunction +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// const callable = () => callable; +// callable.property = 1; +// callable(); +// ^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const callable: () => { +// | (): typeof callable; +// | property: number; +// | } +// | ``` +// | +// | (verbosity level: 2) +// | ---------------------------------------------------------------------- +// ^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const callable: () => { +// | (): typeof callable; +// | property: number; +// | } +// | ``` +// | +// | (verbosity level: 1) +// | ---------------------------------------------------------------------- +// ^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const callable: () => { +// | (): typeof callable; +// | property: number; +// | } +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// const other = () => 1; +// const producer = () => other; +// ^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const producer: () => () => number +// | ``` +// | +// | (verbosity level: 2) +// | ---------------------------------------------------------------------- +// ^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const producer: () => () => number +// | ``` +// | +// | (verbosity level: 1) +// | ---------------------------------------------------------------------- +// ^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const producer: () => () => number +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// producer(); +// ^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const producer: () => () => number +// | ``` +// | +// | (verbosity level: 2) +// | ---------------------------------------------------------------------- +// ^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const producer: () => () => number +// | ``` +// | +// | (verbosity level: 1) +// | ---------------------------------------------------------------------- +// ^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const producer: () => () => number +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// function make(value: T) { +// return { value, next: () => make("text") }; +// } +// const different = make(1); +// ^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const different: { +// | value: number; +// | next: () => { +// | value: string; +// | next: () => ...; +// | }; +// | } +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// const scoped = { +// ^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const scoped: { +// | first(outer: T): { +// | nested(inner: T): { +// | outer: T; +// | inner: T; +// | next: ...; +// | }; +// | sibling(inner: T): { +// | outer: T; +// | inner: T; +// | next: ...; +// | }; +// | }; +// | second(value: T): { +// | value: T; +// | next: ...; +// | }; +// | } +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// first(outer: T) { +// return { +// nested(inner: T) { return { outer, inner, next: scoped }; }, +// sibling(inner: T) { return { outer, inner, next: scoped }; }, +// }; +// }, +// second(value: T) { return { value, next: scoped }; }, +// }; +// const numberScope = scoped.first(1); +// ^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | (method) first(outer: number): { +// | nested(inner: T): { +// | outer: number; +// | inner: T; +// | next: { +// | first(outer: number): ...; +// | second(value: T): { +// | value: T; +// | next: ...; +// | }; +// | }; +// | }; +// | sibling(inner: T): { +// | outer: number; +// | inner: T; +// | next: { +// | first(outer: number): ...; +// | second(value: T): { +// | value: T; +// | next: ...; +// | }; +// | }; +// | }; +// | } +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// numberScope.nested("inner"); +// ^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | (method) nested(inner: string): { +// | outer: number; +// | inner: string; +// | next: { +// | first(outer: T): { +// | nested(inner: T): { +// | outer: T; +// | inner: T; +// | next: ...; +// | }; +// | sibling(inner: T): { +// | outer: T; +// | inner: T; +// | next: ...; +// | }; +// | }; +// | second(value: T): { +// | value: T; +// | next: ...; +// | }; +// | }; +// | } +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// numberScope.sibling(true); +// ^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | (method) sibling(inner: boolean): { +// | outer: number; +// | inner: boolean; +// | next: { +// | first(outer: T): { +// | nested(inner: T): { +// | outer: T; +// | inner: T; +// | next: ...; +// | }; +// | sibling(inner: T): { +// | outer: T; +// | inner: T; +// | next: ...; +// | }; +// | }; +// | second(value: T): { +// | value: T; +// | next: ...; +// | }; +// | }; +// | } +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// scoped.second("text"); +// ^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | (method) second(value: string): { +// | value: string; +// | next: { +// | first(outer: T): { +// | nested(inner: T): { +// | outer: T; +// | inner: T; +// | next: ...; +// | }; +// | sibling(inner: T): { +// | outer: T; +// | inner: T; +// | next: ...; +// | }; +// | }; +// | second(value: string): ...; +// | }; +// | } +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// const nestedOwner = { +// make(outer: T) { +// return { +// nested(inner: U) { return { outer, inner, owner: nestedOwner }; }, +// constrained(inner: U) { return { outer, inner, owner: nestedOwner }; }, +// copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } { +// return { outer, inner, owner: nestedOwner }; +// }, +// rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; }, +// }; +// }, +// }; +// const nestedNumber = nestedOwner.make(1); +// ^^^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const nestedNumber: { +// | nested(inner: U): { +// | outer: number; +// | inner: U; +// | owner: { +// | make(outer: number): ...; +// | }; +// | }; +// | constrained(inner: U): { +// | outer: number; +// | inner: U; +// | owner: { +// | make(outer: number): ...; +// | }; +// | }; +// | copied(inner: U): { +// | outer: number; +// | inner: U; +// | owner: typeof nestedOwner; +// | }; +// | rest(values_0: U): { +// | outer: number; +// | inner: U; +// | owner: { +// | make(outer: number): ...; +// | }; +// | }; +// | } +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// nestedNumber.nested(true).owner.make("text"); +// ^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | (method) nested(inner: boolean): { +// | outer: number; +// | inner: boolean; +// | owner: { +// | make(outer: T): { +// | nested(inner: U): { +// | outer: T; +// | inner: U; +// | owner: ...; +// | }; +// | constrained(inner: U): { +// | outer: T; +// | inner: U; +// | owner: ...; +// | }; +// | copied(inner: U): { +// | outer: T; +// | inner: U; +// | owner: typeof nestedOwner; +// | }; +// | rest(values_0: U): { +// | outer: T; +// | inner: U; +// | owner: ...; +// | }; +// | }; +// | }; +// | } +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// ^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | (method) make(outer: string): { +// | nested(inner: U): { +// | outer: string; +// | inner: U; +// | owner: { +// | make(outer: string): ...; +// | }; +// | }; +// | constrained(inner: U): { +// | outer: string; +// | inner: U; +// | owner: { +// | make(outer: string): ...; +// | }; +// | }; +// | copied(inner: U): { +// | outer: string; +// | inner: U; +// | owner: typeof nestedOwner; +// | }; +// | rest(values_0: U): { +// | outer: string; +// | inner: U; +// | owner: { +// | make(outer: string): ...; +// | }; +// | }; +// | } +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// nestedNumber.constrained(2); +// ^^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | (method) constrained<2>(inner: 2): { +// | outer: number; +// | inner: 2; +// | owner: { +// | make(outer: T): { +// | nested(inner: U): { +// | outer: T; +// | inner: U; +// | owner: ...; +// | }; +// | constrained(inner: U): { +// | outer: T; +// | inner: U; +// | owner: ...; +// | }; +// | copied(inner: U): { +// | outer: T; +// | inner: U; +// | owner: typeof nestedOwner; +// | }; +// | rest(values_0: U): { +// | outer: T; +// | inner: U; +// | owner: ...; +// | }; +// | }; +// | }; +// | } +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// nestedNumber.copied("inner"); +// ^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | (method) copied(inner: string): { +// | outer: number; +// | inner: string; +// | owner: typeof nestedOwner; +// | } +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// nestedNumber.rest(true); +// ^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | (method) rest(values_0: boolean): { +// | outer: number; +// | inner: boolean; +// | owner: { +// | make(outer: T): { +// | nested(inner: U): { +// | outer: T; +// | inner: U; +// | owner: ...; +// | }; +// | constrained(inner: U): { +// | outer: T; +// | inner: U; +// | owner: ...; +// | }; +// | copied(inner: U): { +// | outer: T; +// | inner: U; +// | owner: typeof nestedOwner; +// | }; +// | rest(values_0: U): { +// | outer: T; +// | inner: U; +// | owner: ...; +// | }; +// | }; +// | }; +// | } +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// declare const reused: { +// first(...values: [T]): { value: T; next: typeof reused }; +// second(value: T): { value: T; next: typeof reused }; +// shadowed(reused: T): { value: T; next: typeof reused }; +// }; +// const copy = reused; +// ^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const copy: { +// | first(values_0: T): { +// | value: T; +// | next: typeof reused; +// | }; +// | second(value: T): { +// | value: T; +// | next: typeof reused; +// | }; +// | shadowed(reused: T): { +// | value: T; +// | next: typeof reused; +// | }; +// | } +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// copy.first(1); +// ^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | (method) first(values_0: number): { +// | value: number; +// | next: typeof reused; +// | } +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// copy.shadowed(1); +// ^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | (method) shadowed(reused: number): { +// | value: number; +// | next: number; +// | } +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +[ + { + "marker": { + "Position": 11, + "LSPosition": { + "line": 0, + "character": 11 + }, + "Name": "declaration", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst arrow: () => typeof arrow\n```\n" + }, + "range": { + "start": { + "line": 0, + "character": 6 + }, + "end": { + "line": 0, + "character": 11 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 11, + "LSPosition": { + "line": 0, + "character": 11 + }, + "Name": "declaration", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst arrow: () => typeof arrow\n```\n" + }, + "range": { + "start": { + "line": 0, + "character": 6 + }, + "end": { + "line": 0, + "character": 11 + } + } + }, + "verbosityLevel": 1 + } + }, + { + "marker": { + "Position": 11, + "LSPosition": { + "line": 0, + "character": 11 + }, + "Name": "declaration", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst arrow: () => typeof arrow\n```\n" + }, + "range": { + "start": { + "line": 0, + "character": 6 + }, + "end": { + "line": 0, + "character": 11 + } + } + }, + "verbosityLevel": 2 + } + }, + { + "marker": { + "Position": 32, + "LSPosition": { + "line": 1, + "character": 5 + }, + "Name": "call", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst arrow: () => () => typeof arrow\n```\n" + }, + "range": { + "start": { + "line": 1, + "character": 0 + }, + "end": { + "line": 1, + "character": 5 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 32, + "LSPosition": { + "line": 1, + "character": 5 + }, + "Name": "call", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst arrow: () => () => typeof arrow\n```\n" + }, + "range": { + "start": { + "line": 1, + "character": 0 + }, + "end": { + "line": 1, + "character": 5 + } + } + }, + "verbosityLevel": 1 + } + }, + { + "marker": { + "Position": 32, + "LSPosition": { + "line": 1, + "character": 5 + }, + "Name": "call", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst arrow: () => () => typeof arrow\n```\n" + }, + "range": { + "start": { + "line": 1, + "character": 0 + }, + "end": { + "line": 1, + "character": 5 + } + } + }, + "verbosityLevel": 2 + } + }, + { + "marker": { + "Position": 89, + "LSPosition": { + "line": 3, + "character": 5 + }, + "Name": "namedCall", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst named: () => () => typeof named\n```\n" + }, + "range": { + "start": { + "line": 3, + "character": 0 + }, + "end": { + "line": 3, + "character": 5 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 89, + "LSPosition": { + "line": 3, + "character": 5 + }, + "Name": "namedCall", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst named: () => () => typeof named\n```\n" + }, + "range": { + "start": { + "line": 3, + "character": 0 + }, + "end": { + "line": 3, + "character": 5 + } + } + }, + "verbosityLevel": 1 + } + }, + { + "marker": { + "Position": 89, + "LSPosition": { + "line": 3, + "character": 5 + }, + "Name": "namedCall", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst named: () => () => typeof named\n```\n" + }, + "range": { + "start": { + "line": 3, + "character": 0 + }, + "end": { + "line": 3, + "character": 5 + } + } + }, + "verbosityLevel": 2 + } + }, + { + "marker": { + "Position": 133, + "LSPosition": { + "line": 5, + "character": 5 + }, + "Name": "functionCall", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nfunction recur(): () => typeof recur\n```\n" + }, + "range": { + "start": { + "line": 5, + "character": 0 + }, + "end": { + "line": 5, + "character": 5 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 133, + "LSPosition": { + "line": 5, + "character": 5 + }, + "Name": "functionCall", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nfunction recur(): () => typeof recur\n```\n" + }, + "range": { + "start": { + "line": 5, + "character": 0 + }, + "end": { + "line": 5, + "character": 5 + } + } + }, + "verbosityLevel": 1 + } + }, + { + "marker": { + "Position": 133, + "LSPosition": { + "line": 5, + "character": 5 + }, + "Name": "functionCall", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nfunction recur(): () => typeof recur\n```\n" + }, + "range": { + "start": { + "line": 5, + "character": 0 + }, + "end": { + "line": 5, + "character": 5 + } + } + }, + "verbosityLevel": 2 + } + }, + { + "marker": { + "Position": 186, + "LSPosition": { + "line": 7, + "character": 7 + }, + "Name": "genericCall", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst generic: (value: number) => (value: number) => typeof generic\n```\n" + }, + "range": { + "start": { + "line": 7, + "character": 0 + }, + "end": { + "line": 7, + "character": 7 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 239, + "LSPosition": { + "line": 9, + "character": 11 + }, + "Name": "specializedCall", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst specialized: (value: string) => (value: string) => typeof generic\n```\n" + }, + "range": { + "start": { + "line": 9, + "character": 0 + }, + "end": { + "line": 9, + "character": 11 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 319, + "LSPosition": { + "line": 11, + "character": 22 + }, + "Name": "narrowedCall", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nlet narrowed: () => () => typeof arrow\n```\n" + }, + "range": { + "start": { + "line": 11, + "character": 14 + }, + "end": { + "line": 11, + "character": 22 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 319, + "LSPosition": { + "line": 11, + "character": 22 + }, + "Name": "narrowedCall", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nlet narrowed: () => () => typeof arrow\n```\n" + }, + "range": { + "start": { + "line": 11, + "character": 14 + }, + "end": { + "line": 11, + "character": 22 + } + } + }, + "verbosityLevel": 1 + } + }, + { + "marker": { + "Position": 319, + "LSPosition": { + "line": 11, + "character": 22 + }, + "Name": "narrowedCall", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nlet narrowed: () => () => typeof arrow\n```\n" + }, + "range": { + "start": { + "line": 11, + "character": 14 + }, + "end": { + "line": 11, + "character": 22 + } + } + }, + "verbosityLevel": 2 + } + }, + { + "marker": { + "Position": 364, + "LSPosition": { + "line": 13, + "character": 5 + }, + "Name": "broadCall", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst broad: () => unknown\n```\n" + }, + "range": { + "start": { + "line": 13, + "character": 0 + }, + "end": { + "line": 13, + "character": 5 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 364, + "LSPosition": { + "line": 13, + "character": 5 + }, + "Name": "broadCall", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst broad: () => unknown\n```\n" + }, + "range": { + "start": { + "line": 13, + "character": 0 + }, + "end": { + "line": 13, + "character": 5 + } + } + }, + "verbosityLevel": 1 + } + }, + { + "marker": { + "Position": 364, + "LSPosition": { + "line": 13, + "character": 5 + }, + "Name": "broadCall", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst broad: () => unknown\n```\n" + }, + "range": { + "start": { + "line": 13, + "character": 0 + }, + "end": { + "line": 13, + "character": 5 + } + } + }, + "verbosityLevel": 2 + } + }, + { + "marker": { + "Position": 612, + "LSPosition": { + "line": 19, + "character": 10 + }, + "Name": "stringCall", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nfunction overloaded(value: string): string\n```\n" + }, + "range": { + "start": { + "line": 19, + "character": 0 + }, + "end": { + "line": 19, + "character": 10 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 612, + "LSPosition": { + "line": 19, + "character": 10 + }, + "Name": "stringCall", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nfunction overloaded(value: string): string\n```\n" + }, + "range": { + "start": { + "line": 19, + "character": 0 + }, + "end": { + "line": 19, + "character": 10 + } + } + }, + "verbosityLevel": 1 + } + }, + { + "marker": { + "Position": 612, + "LSPosition": { + "line": 19, + "character": 10 + }, + "Name": "stringCall", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nfunction overloaded(value: string): string\n```\n" + }, + "range": { + "start": { + "line": 19, + "character": 0 + }, + "end": { + "line": 19, + "character": 10 + } + } + }, + "verbosityLevel": 2 + } + }, + { + "marker": { + "Position": 632, + "LSPosition": { + "line": 20, + "character": 10 + }, + "Name": "numberCall", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nfunction overloaded(value: number): typeof overloaded\n```\n" + }, + "range": { + "start": { + "line": 20, + "character": 0 + }, + "end": { + "line": 20, + "character": 10 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 702, + "LSPosition": { + "line": 22, + "character": 12 + }, + "Name": "methodCall", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\n(method) recur(): () => ...\n```\n" + }, + "range": { + "start": { + "line": 22, + "character": 7 + }, + "end": { + "line": 22, + "character": 12 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 702, + "LSPosition": { + "line": 22, + "character": 12 + }, + "Name": "methodCall", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\n(method) recur(): () => ...\n```\n" + }, + "range": { + "start": { + "line": 22, + "character": 7 + }, + "end": { + "line": 22, + "character": 12 + } + } + }, + "verbosityLevel": 1 + } + }, + { + "marker": { + "Position": 702, + "LSPosition": { + "line": 22, + "character": 12 + }, + "Name": "methodCall", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\n(method) recur(): () => ...\n```\n" + }, + "range": { + "start": { + "line": 22, + "character": 7 + }, + "end": { + "line": 22, + "character": 12 + } + } + }, + "verbosityLevel": 2 + } + }, + { + "marker": { + "Position": 717, + "LSPosition": { + "line": 23, + "character": 11 + }, + "Name": "firstDeclaration", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst first: () => () => typeof first\n```\n" + }, + "range": { + "start": { + "line": 23, + "character": 6 + }, + "end": { + "line": 23, + "character": 11 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 717, + "LSPosition": { + "line": 23, + "character": 11 + }, + "Name": "firstDeclaration", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst first: () => () => typeof first\n```\n" + }, + "range": { + "start": { + "line": 23, + "character": 6 + }, + "end": { + "line": 23, + "character": 11 + } + } + }, + "verbosityLevel": 1 + } + }, + { + "marker": { + "Position": 717, + "LSPosition": { + "line": 23, + "character": 11 + }, + "Name": "firstDeclaration", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst first: () => () => typeof first\n```\n" + }, + "range": { + "start": { + "line": 23, + "character": 6 + }, + "end": { + "line": 23, + "character": 11 + } + } + }, + "verbosityLevel": 2 + } + }, + { + "marker": { + "Position": 767, + "LSPosition": { + "line": 25, + "character": 5 + }, + "Name": "firstCall", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst first: () => () => () => typeof second\n```\n" + }, + "range": { + "start": { + "line": 25, + "character": 0 + }, + "end": { + "line": 25, + "character": 5 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 767, + "LSPosition": { + "line": 25, + "character": 5 + }, + "Name": "firstCall", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst first: () => () => () => typeof second\n```\n" + }, + "range": { + "start": { + "line": 25, + "character": 0 + }, + "end": { + "line": 25, + "character": 5 + } + } + }, + "verbosityLevel": 1 + } + }, + { + "marker": { + "Position": 767, + "LSPosition": { + "line": 25, + "character": 5 + }, + "Name": "firstCall", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst first: () => () => () => typeof second\n```\n" + }, + "range": { + "start": { + "line": 25, + "character": 0 + }, + "end": { + "line": 25, + "character": 5 + } + } + }, + "verbosityLevel": 2 + } + }, + { + "marker": { + "Position": 852, + "LSPosition": { + "line": 27, + "character": 15 + }, + "Name": "genericFunctionCall", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nfunction genericFunction(value: number): (value: number) => typeof genericFunction\n```\n" + }, + "range": { + "start": { + "line": 27, + "character": 0 + }, + "end": { + "line": 27, + "character": 15 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 921, + "LSPosition": { + "line": 30, + "character": 8 + }, + "Name": "callableCall", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst callable: () => {\n (): typeof callable;\n property: number;\n}\n```\n" + }, + "range": { + "start": { + "line": 30, + "character": 0 + }, + "end": { + "line": 30, + "character": 8 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 921, + "LSPosition": { + "line": 30, + "character": 8 + }, + "Name": "callableCall", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst callable: () => {\n (): typeof callable;\n property: number;\n}\n```\n" + }, + "range": { + "start": { + "line": 30, + "character": 0 + }, + "end": { + "line": 30, + "character": 8 + } + } + }, + "verbosityLevel": 1 + } + }, + { + "marker": { + "Position": 921, + "LSPosition": { + "line": 30, + "character": 8 + }, + "Name": "callableCall", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst callable: () => {\n (): typeof callable;\n property: number;\n}\n```\n" + }, + "range": { + "start": { + "line": 30, + "character": 0 + }, + "end": { + "line": 30, + "character": 8 + } + } + }, + "verbosityLevel": 2 + } + }, + { + "marker": { + "Position": 962, + "LSPosition": { + "line": 32, + "character": 14 + }, + "Name": "producerDeclaration", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst producer: () => () => number\n```\n" + }, + "range": { + "start": { + "line": 32, + "character": 6 + }, + "end": { + "line": 32, + "character": 14 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 962, + "LSPosition": { + "line": 32, + "character": 14 + }, + "Name": "producerDeclaration", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst producer: () => () => number\n```\n" + }, + "range": { + "start": { + "line": 32, + "character": 6 + }, + "end": { + "line": 32, + "character": 14 + } + } + }, + "verbosityLevel": 1 + } + }, + { + "marker": { + "Position": 962, + "LSPosition": { + "line": 32, + "character": 14 + }, + "Name": "producerDeclaration", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst producer: () => () => number\n```\n" + }, + "range": { + "start": { + "line": 32, + "character": 6 + }, + "end": { + "line": 32, + "character": 14 + } + } + }, + "verbosityLevel": 2 + } + }, + { + "marker": { + "Position": 986, + "LSPosition": { + "line": 33, + "character": 8 + }, + "Name": "producerCall", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst producer: () => () => number\n```\n" + }, + "range": { + "start": { + "line": 33, + "character": 0 + }, + "end": { + "line": 33, + "character": 8 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 986, + "LSPosition": { + "line": 33, + "character": 8 + }, + "Name": "producerCall", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst producer: () => () => number\n```\n" + }, + "range": { + "start": { + "line": 33, + "character": 0 + }, + "end": { + "line": 33, + "character": 8 + } + } + }, + "verbosityLevel": 1 + } + }, + { + "marker": { + "Position": 986, + "LSPosition": { + "line": 33, + "character": 8 + }, + "Name": "producerCall", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst producer: () => () => number\n```\n" + }, + "range": { + "start": { + "line": 33, + "character": 0 + }, + "end": { + "line": 33, + "character": 8 + } + } + }, + "verbosityLevel": 2 + } + }, + { + "marker": { + "Position": 1084, + "LSPosition": { + "line": 37, + "character": 15 + }, + "Name": "differentInstantiations", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst different: {\n value: number;\n next: () => {\n value: string;\n next: () => ...;\n };\n}\n```\n" + }, + "range": { + "start": { + "line": 37, + "character": 6 + }, + "end": { + "line": 37, + "character": 15 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 1108, + "LSPosition": { + "line": 38, + "character": 12 + }, + "Name": "scopedDeclaration", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst scoped: {\n first(outer: T): {\n nested(inner: T): {\n outer: T;\n inner: T;\n next: ...;\n };\n sibling(inner: T): {\n outer: T;\n inner: T;\n next: ...;\n };\n };\n second(value: T): {\n value: T;\n next: ...;\n };\n}\n```\n" + }, + "range": { + "start": { + "line": 38, + "character": 6 + }, + "end": { + "line": 38, + "character": 12 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 1422, + "LSPosition": { + "line": 47, + "character": 32 + }, + "Name": "scopedFirst", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\n(method) first(outer: number): {\n nested(inner: T): {\n outer: number;\n inner: T;\n next: {\n first(outer: number): ...;\n second(value: T): {\n value: T;\n next: ...;\n };\n };\n };\n sibling(inner: T): {\n outer: number;\n inner: T;\n next: {\n first(outer: number): ...;\n second(value: T): {\n value: T;\n next: ...;\n };\n };\n };\n}\n```\n" + }, + "range": { + "start": { + "line": 47, + "character": 27 + }, + "end": { + "line": 47, + "character": 32 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 1445, + "LSPosition": { + "line": 48, + "character": 18 + }, + "Name": "scopedNested", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\n(method) nested(inner: string): {\n outer: number;\n inner: string;\n next: {\n first(outer: T): {\n nested(inner: T): {\n outer: T;\n inner: T;\n next: ...;\n };\n sibling(inner: T): {\n outer: T;\n inner: T;\n next: ...;\n };\n };\n second(value: T): {\n value: T;\n next: ...;\n };\n };\n}\n```\n" + }, + "range": { + "start": { + "line": 48, + "character": 12 + }, + "end": { + "line": 48, + "character": 18 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 1475, + "LSPosition": { + "line": 49, + "character": 19 + }, + "Name": "scopedSibling", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\n(method) sibling(inner: boolean): {\n outer: number;\n inner: boolean;\n next: {\n first(outer: T): {\n nested(inner: T): {\n outer: T;\n inner: T;\n next: ...;\n };\n sibling(inner: T): {\n outer: T;\n inner: T;\n next: ...;\n };\n };\n second(value: T): {\n value: T;\n next: ...;\n };\n };\n}\n```\n" + }, + "range": { + "start": { + "line": 49, + "character": 12 + }, + "end": { + "line": 49, + "character": 19 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 1496, + "LSPosition": { + "line": 50, + "character": 13 + }, + "Name": "scopedSecond", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\n(method) second(value: string): {\n value: string;\n next: {\n first(outer: T): {\n nested(inner: T): {\n outer: T;\n inner: T;\n next: ...;\n };\n sibling(inner: T): {\n outer: T;\n inner: T;\n next: ...;\n };\n };\n second(value: string): ...;\n };\n}\n```\n" + }, + "range": { + "start": { + "line": 50, + "character": 7 + }, + "end": { + "line": 50, + "character": 13 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 2049, + "LSPosition": { + "line": 63, + "character": 18 + }, + "Name": "nestedNumber", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst nestedNumber: {\n nested(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: number): ...;\n };\n };\n constrained(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: number): ...;\n };\n };\n copied(inner: U): {\n outer: number;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: number): ...;\n };\n };\n}\n```\n" + }, + "range": { + "start": { + "line": 63, + "character": 6 + }, + "end": { + "line": 63, + "character": 18 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 2092, + "LSPosition": { + "line": 64, + "character": 19 + }, + "Name": "nestedGeneric", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\n(method) nested(inner: boolean): {\n outer: number;\n inner: boolean;\n owner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: ...;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: ...;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: ...;\n };\n };\n };\n}\n```\n" + }, + "range": { + "start": { + "line": 64, + "character": 13 + }, + "end": { + "line": 64, + "character": 19 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 2109, + "LSPosition": { + "line": 64, + "character": 36 + }, + "Name": "nestedOwnerMake", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\n(method) make(outer: string): {\n nested(inner: U): {\n outer: string;\n inner: U;\n owner: {\n make(outer: string): ...;\n };\n };\n constrained(inner: U): {\n outer: string;\n inner: U;\n owner: {\n make(outer: string): ...;\n };\n };\n copied(inner: U): {\n outer: string;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: string;\n inner: U;\n owner: {\n make(outer: string): ...;\n };\n };\n}\n```\n" + }, + "range": { + "start": { + "line": 64, + "character": 32 + }, + "end": { + "line": 64, + "character": 36 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 2143, + "LSPosition": { + "line": 65, + "character": 24 + }, + "Name": "nestedConstrained", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\n(method) constrained<2>(inner: 2): {\n outer: number;\n inner: 2;\n owner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: ...;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: ...;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: ...;\n };\n };\n };\n}\n```\n" + }, + "range": { + "start": { + "line": 65, + "character": 13 + }, + "end": { + "line": 65, + "character": 24 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 2167, + "LSPosition": { + "line": 66, + "character": 19 + }, + "Name": "nestedCopied", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\n(method) copied(inner: string): {\n outer: number;\n inner: string;\n owner: typeof nestedOwner;\n}\n```\n" + }, + "range": { + "start": { + "line": 66, + "character": 13 + }, + "end": { + "line": 66, + "character": 19 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 2195, + "LSPosition": { + "line": 67, + "character": 17 + }, + "Name": "nestedRest", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\n(method) rest(values_0: boolean): {\n outer: number;\n inner: boolean;\n owner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: ...;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: ...;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: ...;\n };\n };\n };\n}\n```\n" + }, + "range": { + "start": { + "line": 67, + "character": 13 + }, + "end": { + "line": 67, + "character": 17 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 2428, + "LSPosition": { + "line": 73, + "character": 10 + }, + "Name": "reusedDeclaration", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst copy: {\n first(values_0: T): {\n value: T;\n next: typeof reused;\n };\n second(value: T): {\n value: T;\n next: typeof reused;\n };\n shadowed(reused: T): {\n value: T;\n next: typeof reused;\n };\n}\n```\n" + }, + "range": { + "start": { + "line": 73, + "character": 6 + }, + "end": { + "line": 73, + "character": 10 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 2449, + "LSPosition": { + "line": 74, + "character": 10 + }, + "Name": "reusedFirst", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\n(method) first(values_0: number): {\n value: number;\n next: typeof reused;\n}\n```\n" + }, + "range": { + "start": { + "line": 74, + "character": 5 + }, + "end": { + "line": 74, + "character": 10 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 2467, + "LSPosition": { + "line": 75, + "character": 13 + }, + "Name": "reusedShadowed", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\n(method) shadowed(reused: number): {\n value: number;\n next: number;\n}\n```\n" + }, + "range": { + "start": { + "line": 75, + "character": 5 + }, + "end": { + "line": 75, + "character": 13 + } + } + }, + "verbosityLevel": 0 + } + } +] \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/tsbuild/declarationEmit/reports-dts-generation-errors-with-incremental.js b/tsc/testdata/baselines/reference/tsbuild/declarationEmit/reports-dts-generation-errors-with-incremental.js index a37710db5fecc..5283d371724e7 100644 --- a/tsc/testdata/baselines/reference/tsbuild/declarationEmit/reports-dts-generation-errors-with-incremental.js +++ b/tsc/testdata/baselines/reference/tsbuild/declarationEmit/reports-dts-generation-errors-with-incremental.js @@ -5,7 +5,8 @@ Input:: import ky from 'ky'; export const api = ky.extend({}); //// [/home/src/workspaces/project/node_modules/ky/distribution/index.d.ts] *new* -type KyInstance = { +declare class KyInstance { + private brand; extend(options: Record): KyInstance; } declare const ky: KyInstance; @@ -43,7 +44,16 @@ Output:: [HH:MM:SS AM] Building project 'tsconfig.json'... -index.ts:2:14 - error TS4023: Exported variable 'api' has or is using name 'KyInstance' from external module "/home/src/workspaces/project/node_modules/ky/distribution/index" but cannot be named. +index.ts:2:14 - error TS4094: Property 'brand' of exported anonymous class type may not be private or protected. + +2 export const api = ky.extend({}); +   ~~~ + + index.ts:2:14 - Add a type annotation to the variable api. + 2 export const api = ky.extend({}); +    ~~~ + +index.ts:2:14 - error TS5088: The inferred type of 'api' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. 2 export const api = ky.extend({});    ~~~ @@ -59,7 +69,7 @@ index.ts Matched by default include pattern '**/*' File is ECMAScript module because 'package.json' has field "type" with value "module" -Found 1 error in index.ts:2 +Found 2 errors in the same file, starting at: index.ts:2 //// [/home/src/tslibs/TS/Lib/lib.es2026.full.d.ts] *Lib* /// @@ -89,7 +99,7 @@ import ky from 'ky'; export const api = ky.extend({}); //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[3],"packageJsons":["./node_modules/ky/package.json","./package.json"],"missingPackageJsons":["./node_modules/ky/distribution/package.json"],"fileNames":["lib.es2026.full.d.ts","./node_modules/ky/distribution/index.d.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b9b50c37c18e43d94b0dd4fb43967f10-type KyInstance = {\n extend(options: Record): KyInstance;\n}\ndeclare const ky: KyInstance;\nexport default ky;","impliedNodeFormat":99},{"version":"0f5091e963c17913313e4969c59e6eb4-import ky from 'ky';\nexport const api = ky.extend({});","impliedNodeFormat":99}],"fileIdsList":[[2]],"options":{"composite":false,"declaration":true,"module":199,"skipLibCheck":true,"skipDefaultLibCheck":true},"referencedMap":[[3,1]],"emitDiagnosticsPerFile":[[3,[{"pos":34,"end":37,"code":4023,"category":1,"messageKey":"Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023","messageArgs":["api","KyInstance","\"/home/src/workspaces/project/node_modules/ky/distribution/index\""]}]]]} +{"version":"FakeTSVersion","root":[3],"packageJsons":["./node_modules/ky/package.json","./package.json"],"missingPackageJsons":["./node_modules/ky/distribution/package.json"],"fileNames":["lib.es2026.full.d.ts","./node_modules/ky/distribution/index.d.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"778e62a60976d425122b5f7908b0c56f-declare class KyInstance {\n private brand;\n extend(options: Record): KyInstance;\n}\ndeclare const ky: KyInstance;\nexport default ky;","impliedNodeFormat":99},{"version":"0f5091e963c17913313e4969c59e6eb4-import ky from 'ky';\nexport const api = ky.extend({});","impliedNodeFormat":99}],"fileIdsList":[[2]],"options":{"composite":false,"declaration":true,"module":199,"skipLibCheck":true,"skipDefaultLibCheck":true},"referencedMap":[[3,1]],"emitDiagnosticsPerFile":[[3,[{"pos":34,"end":37,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["brand"],"relatedInformation":[{"pos":34,"end":37,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["api"]}]},{"pos":34,"end":37,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["api"]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -128,11 +138,11 @@ export const api = ky.extend({}); }, { "fileName": "./node_modules/ky/distribution/index.d.ts", - "version": "b9b50c37c18e43d94b0dd4fb43967f10-type KyInstance = {\n extend(options: Record): KyInstance;\n}\ndeclare const ky: KyInstance;\nexport default ky;", - "signature": "b9b50c37c18e43d94b0dd4fb43967f10-type KyInstance = {\n extend(options: Record): KyInstance;\n}\ndeclare const ky: KyInstance;\nexport default ky;", + "version": "778e62a60976d425122b5f7908b0c56f-declare class KyInstance {\n private brand;\n extend(options: Record): KyInstance;\n}\ndeclare const ky: KyInstance;\nexport default ky;", + "signature": "778e62a60976d425122b5f7908b0c56f-declare class KyInstance {\n private brand;\n extend(options: Record): KyInstance;\n}\ndeclare const ky: KyInstance;\nexport default ky;", "impliedNodeFormat": "ESNext", "original": { - "version": "b9b50c37c18e43d94b0dd4fb43967f10-type KyInstance = {\n extend(options: Record): KyInstance;\n}\ndeclare const ky: KyInstance;\nexport default ky;", + "version": "778e62a60976d425122b5f7908b0c56f-declare class KyInstance {\n private brand;\n extend(options: Record): KyInstance;\n}\ndeclare const ky: KyInstance;\nexport default ky;", "impliedNodeFormat": 99 } }, @@ -171,19 +181,39 @@ export const api = ky.extend({}); { "pos": 34, "end": 37, - "code": 4023, + "code": 4094, + "category": 1, + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "brand" + ], + "relatedInformation": [ + { + "pos": 34, + "end": 37, + "code": 9027, + "category": 1, + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "api" + ] + } + ] + }, + { + "pos": 34, + "end": 37, + "code": 5088, "category": 1, - "messageKey": "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023", + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", "messageArgs": [ - "api", - "KyInstance", - "\"/home/src/workspaces/project/node_modules/ky/distribution/index\"" + "api" ] } ] ] ], - "size": 1823 + "size": 2097 } tsconfig.json:: @@ -206,7 +236,16 @@ Output:: [HH:MM:SS AM] Building project 'tsconfig.json'... -index.ts:2:14 - error TS4023: Exported variable 'api' has or is using name 'KyInstance' from external module "/home/src/workspaces/project/node_modules/ky/distribution/index" but cannot be named. +index.ts:2:14 - error TS4094: Property 'brand' of exported anonymous class type may not be private or protected. + +2 export const api = ky.extend({}); +   ~~~ + + index.ts:2:14 - Add a type annotation to the variable api. + 2 export const api = ky.extend({}); +    ~~~ + +index.ts:2:14 - error TS5088: The inferred type of 'api' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. 2 export const api = ky.extend({});    ~~~ @@ -220,7 +259,7 @@ index.ts Matched by default include pattern '**/*' File is ECMAScript module because 'package.json' has field "type" with value "module" -Found 1 error in index.ts:2 +Found 2 errors in the same file, starting at: index.ts:2 tsconfig.json:: diff --git a/tsc/testdata/baselines/reference/tsbuild/declarationEmit/reports-dts-generation-errors.js b/tsc/testdata/baselines/reference/tsbuild/declarationEmit/reports-dts-generation-errors.js index ce9270c20d9e9..e943e6b176bd5 100644 --- a/tsc/testdata/baselines/reference/tsbuild/declarationEmit/reports-dts-generation-errors.js +++ b/tsc/testdata/baselines/reference/tsbuild/declarationEmit/reports-dts-generation-errors.js @@ -5,7 +5,8 @@ Input:: import ky from 'ky'; export const api = ky.extend({}); //// [/home/src/workspaces/project/node_modules/ky/distribution/index.d.ts] *new* -type KyInstance = { +declare class KyInstance { + private brand; extend(options: Record): KyInstance; } declare const ky: KyInstance; @@ -43,7 +44,16 @@ Output:: [HH:MM:SS AM] Building project 'tsconfig.json'... -index.ts:2:14 - error TS4023: Exported variable 'api' has or is using name 'KyInstance' from external module "/home/src/workspaces/project/node_modules/ky/distribution/index" but cannot be named. +index.ts:2:14 - error TS4094: Property 'brand' of exported anonymous class type may not be private or protected. + +2 export const api = ky.extend({}); +   ~~~ + + index.ts:2:14 - Add a type annotation to the variable api. + 2 export const api = ky.extend({}); +    ~~~ + +index.ts:2:14 - error TS5088: The inferred type of 'api' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. 2 export const api = ky.extend({});    ~~~ @@ -61,7 +71,7 @@ index.ts [HH:MM:SS AM] Updating unchanged output timestamps of project 'tsconfig.json'... -Found 1 error in index.ts:2 +Found 2 errors in the same file, starting at: index.ts:2 //// [/home/src/tslibs/TS/Lib/lib.es2026.full.d.ts] *Lib* /// @@ -134,7 +144,16 @@ Output:: [HH:MM:SS AM] Building project 'tsconfig.json'... -index.ts:2:14 - error TS4023: Exported variable 'api' has or is using name 'KyInstance' from external module "/home/src/workspaces/project/node_modules/ky/distribution/index" but cannot be named. +index.ts:2:14 - error TS4094: Property 'brand' of exported anonymous class type may not be private or protected. + +2 export const api = ky.extend({}); +   ~~~ + + index.ts:2:14 - Add a type annotation to the variable api. + 2 export const api = ky.extend({}); +    ~~~ + +index.ts:2:14 - error TS5088: The inferred type of 'api' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. 2 export const api = ky.extend({});    ~~~ @@ -152,7 +171,7 @@ index.ts [HH:MM:SS AM] Updating unchanged output timestamps of project 'tsconfig.json'... -Found 1 error in index.ts:2 +Found 2 errors in the same file, starting at: index.ts:2 //// [/home/src/workspaces/project/index.js] *rewrite with same content* //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *rewrite with same content* diff --git a/tsc/testdata/baselines/reference/tsbuild/incremental/recursive-function-declaration-consumption.js b/tsc/testdata/baselines/reference/tsbuild/incremental/recursive-function-declaration-consumption.js new file mode 100644 index 0000000000000..a464ceb9a2b80 --- /dev/null +++ b/tsc/testdata/baselines/reference/tsbuild/incremental/recursive-function-declaration-consumption.js @@ -0,0 +1,1960 @@ +currentDirectory::/home/src/workspaces/project +useCaseSensitiveFileNames::true +Input:: +//// [/home/src/workspaces/project/consumer/index.ts] *new* +import { arrow, expression, first, generic, objectReturn, tupleReturn, shadowed } from "../producer/dist/index.js"; +import { object, method, accessor, tuple, array, nested } from "../producer/dist/index.js"; +import { memberTuple, memberArray, quoted, numeric, key, computed, union, specialized } from "../producer/dist/index.js"; +import { indexed, mapped, viaAnnotation } from "../producer/dist/index.js"; +import { nextLink, nextCallable, parenthesized, asserted, Methods, overloaded } from "../producer/dist/index.js"; +import { hiddenAlias, siblingHiddenAliases } from "../producer/dist/index.js"; +import { nestedNumber } from "../producer/dist/index.js"; +const a: typeof arrow = arrow()()(); +const b: typeof expression = expression()()(); +const c: typeof first = first()()(); +const d: typeof generic = generic(1)("text")(true); +const objectCall: typeof objectReturn = objectReturn().call().call; +const tupleCall: typeof tupleReturn = tupleReturn()[0]()[0]; +const shadowedCall: typeof shadowed = shadowed(1)(2); +const objectValue: number = object.next().next().value; +const methodValue: number = method.next().next().value; +const accessorValue: number = accessor.next.next.value; +const tupleValue: typeof tuple = tuple[0]()[0](); +const arrayValue: typeof array = array[0]()[0](); +const nestedValue: typeof nested.inner = nested.inner.next().next(); +const memberTupleValue: typeof memberTuple[0] = memberTuple[0]()(); +const memberArrayValue: typeof memberArray[0] = memberArray[0]()(); +const quotedValue: typeof quoted["a-b"] = quoted["a-b"]()(); +const numericValue: typeof numeric[0] = numeric[0]()(); +const computedValue: typeof computed[typeof key] = computed[key]()(); +const unionValue: typeof union = union?.next()?.next(); +const specializedValue: string = specialized.next().next().value; +const indexedValue: typeof indexed = indexed["next"]["next"]; +const mappedValue: typeof mapped = mapped.next.next; +const annotationValue: string = viaAnnotation.next().next().value; +const linkValue: string = nextLink.next.next.value; +const callableValue: number = nextCallable(1)(2).link.next.value; +const parenthesizedValue: typeof parenthesized = parenthesized()()(); +const assertedValue: typeof asserted = asserted()()(); +const methodReference: typeof Methods.recur = Methods.recur()()(); +const quotedMethodReference: typeof Methods["a-b"] = Methods["a-b"]()()(); +const computedMethodReference: typeof Methods[typeof key] = Methods[key]()()(); +const instance = new Methods(); +const instanceMethodReference: typeof instance.recur = instance.recur()()(); +const overloadReference: typeof overloaded = overloaded(1)("text")(2); +const hiddenValue: string = hiddenAlias.next.next.value; +const siblingHiddenValue: string = siblingHiddenAliases.second.next.next.value; +const nestedString = nestedNumber.nested(true).owner.make("text").nested(2); +const nestedBoolean = nestedString.owner.make(true).nested("inner"); +const nestedStringOuter: string = nestedString.outer; +const nestedStringInner: number = nestedString.inner; +const nestedBooleanOuter: boolean = nestedBoolean.outer; +const nestedBooleanInner: string = nestedBoolean.inner; +const constrainedOuter: number = nestedNumber.constrained(2).outer; +const constrainedInner: number = nestedNumber.constrained(2).inner; +const copiedOuter: number = nestedNumber.copied("inner").outer; +const copiedInner: string = nestedNumber.copied("inner").inner; +const restOuter: number = nestedNumber.rest(true).outer; +const restInner: boolean = nestedNumber.rest(true).inner; +type IsAny = 0 extends (1 & T) ? true : false; +const result = arrow()()(); +const notAny: false = null as unknown as IsAny; +const invalid: number = arrow()()(); +const invalidExpression: number = expression()()(); +const invalidObject: number = objectReturn().call; +const invalidTuple: number = tupleReturn()[0]; +const invalidShadowed: number = shadowed(1); +const invalidObjectValue: string = object.next().value; +const invalidTupleValue: number = tuple[0](); +const invalidSpecialized: number = specialized.next().value; +const invalidMapped: number = mapped.next; +const invalidAnnotation: number = viaAnnotation.next().value; +const invalidLink: number = nextLink.next.value; +const invalidCallable: string = nextCallable(1).link.value; +const invalidHiddenValue: number = hiddenAlias.next.next.value; +const invalidMethod: number = Methods.recur()(); +const invalidComputedMethod: number = Methods[key]()(); +const invalidNestedOuter: boolean = nestedString.outer; +const invalidNestedInner: string = nestedString.inner; +nestedNumber.constrained("wrong"); +//// [/home/src/workspaces/project/consumer/tsconfig.json] *new* +{ + "compilerOptions": { "strict": true, "noEmit": true }, + "references": [{ "path": "../producer" }] + } +//// [/home/src/workspaces/project/producer/index.ts] *new* +export const arrow = () => arrow; +export const expression = function self() { return self; }; +export const first = () => second; +export const second = () => first; +export const generic = (value: T) => generic; +export const objectReturn = () => ({ call: objectReturn }); +export const tupleReturn = () => [tupleReturn] as const; +export const shadowed = function self(shadowed: number) { return self; }; +export const object = { value: 1, next: () => object }; +export const method = { value: 1, next() { return method; } }; +export const accessor = { value: 1, get next() { return accessor; } }; +export const tuple = [() => tuple] as const; +export const array = [() => array]; +export const nested = { inner: { next() { return nested.inner; } } }; +export const memberTuple = [function self() { return self; }] as const; +export const memberArray = [function self() { return self; }]; +export const quoted = { "a-b": function self() { return self; } }; +export const numeric = { 0: function self() { return self; } }; +export const key = Symbol(); +export const computed = { [key]: function self() { return self; } }; +export const union = true as boolean ? { next: () => union } : undefined; +function create(value: T) { + const result = { value, next: () => result }; + return result; +} +export const specialized = create("text"); +function createIndexed() { + const value: { [key: string]: typeof value } = {}; + return value; +} +export const indexed = createIndexed(); +function createMapped() { + const value: { [K in keyof T]: typeof value } = null!; + return value; +} +export const mapped = createMapped<{ next: unknown }>(); +function createAnnotated(value: T) { + const node: { value: T; next: () => typeof node } = { value, next: () => node }; + return node; +} +export const viaAnnotation = createAnnotated("text"); +export type Link = { value: T; next: Link }; +export type Callable = { (value: T): Callable; link: Link }; +export declare const link: Link; +export declare const callable: Callable; +export const nextLink = link.next; +export const nextCallable = callable(1); +function createHidden(value: T) { + type Hidden = { value: T; next: Hidden }; + return null! as Hidden; +} +export const hiddenAlias = createHidden("text"); +export const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias }; +export const parenthesized = (function self() { return self; }); +export const asserted = (function self() { return self; }) satisfies () => unknown; +export class Methods { + static recur() { return Methods.recur; } + static "a-b"() { return Methods["a-b"]; } + static [key]() { return Methods[key]; } + recur() { return this.recur; } +} +export function overloaded(value: string): typeof overloaded; +export function overloaded(value: number): typeof overloaded; +export function overloaded(value: string | number) { return overloaded; } +export const nestedOwner = { + make(outer: T) { + return { + nested(inner: U) { return { outer, inner, owner: nestedOwner }; }, + constrained(inner: U) { return { outer, inner, owner: nestedOwner }; }, + copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } { + return { outer, inner, owner: nestedOwner }; + }, + rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; }, + }; + }, +}; +export const nestedNumber = nestedOwner.make(1); +//// [/home/src/workspaces/project/producer/tsconfig.json] *new* +{ + "compilerOptions": { "strict": true, "composite": true, "outDir": "dist" } + } + +tsgo --build consumer +ExitStatus:: DiagnosticsPresent_OutputsGenerated +Output:: +producer/index.ts:1:14 - error TS5088: The inferred type of 'arrow' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +1 export const arrow = () => arrow; +   ~~~~~ + +producer/index.ts:2:14 - error TS5088: The inferred type of 'expression' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +2 export const expression = function self() { return self; }; +   ~~~~~~~~~~ + +producer/index.ts:6:14 - error TS5088: The inferred type of 'objectReturn' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +6 export const objectReturn = () => ({ call: objectReturn }); +   ~~~~~~~~~~~~ + +producer/index.ts:7:14 - error TS5088: The inferred type of 'tupleReturn' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +7 export const tupleReturn = () => [tupleReturn] as const; +   ~~~~~~~~~~~ + +producer/index.ts:9:14 - error TS5088: The inferred type of 'object' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +9 export const object = { value: 1, next: () => object }; +   ~~~~~~ + +producer/index.ts:10:14 - error TS5088: The inferred type of 'method' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +10 export const method = { value: 1, next() { return method; } }; +   ~~~~~~ + +producer/index.ts:11:14 - error TS5088: The inferred type of 'accessor' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +11 export const accessor = { value: 1, get next() { return accessor; } }; +   ~~~~~~~~ + +producer/index.ts:12:14 - error TS5088: The inferred type of 'tuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +12 export const tuple = [() => tuple] as const; +   ~~~~~ + +producer/index.ts:13:14 - error TS5088: The inferred type of 'array' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +13 export const array = [() => array]; +   ~~~~~ + +producer/index.ts:14:14 - error TS5088: The inferred type of 'nested' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +14 export const nested = { inner: { next() { return nested.inner; } } }; +   ~~~~~~ + +producer/index.ts:15:14 - error TS5088: The inferred type of 'memberTuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +15 export const memberTuple = [function self() { return self; }] as const; +   ~~~~~~~~~~~ + +producer/index.ts:16:14 - error TS5088: The inferred type of 'memberArray' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +16 export const memberArray = [function self() { return self; }]; +   ~~~~~~~~~~~ + +producer/index.ts:17:14 - error TS5088: The inferred type of 'quoted' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +17 export const quoted = { "a-b": function self() { return self; } }; +   ~~~~~~ + +producer/index.ts:18:14 - error TS5088: The inferred type of 'numeric' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +18 export const numeric = { 0: function self() { return self; } }; +   ~~~~~~~ + +producer/index.ts:20:14 - error TS5088: The inferred type of 'computed' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +20 export const computed = { [key]: function self() { return self; } }; +   ~~~~~~~~ + +producer/index.ts:21:14 - error TS5088: The inferred type of 'union' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +21 export const union = true as boolean ? { next: () => union } : undefined; +   ~~~~~ + +producer/index.ts:26:14 - error TS5088: The inferred type of 'specialized' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +26 export const specialized = create("text"); +   ~~~~~~~~~~~ + +producer/index.ts:31:14 - error TS5088: The inferred type of 'indexed' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +31 export const indexed = createIndexed(); +   ~~~~~~~ + +producer/index.ts:36:14 - error TS5088: The inferred type of 'mapped' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +36 export const mapped = createMapped<{ next: unknown }>(); +   ~~~~~~ + +producer/index.ts:41:14 - error TS5088: The inferred type of 'viaAnnotation' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +41 export const viaAnnotation = createAnnotated("text"); +   ~~~~~~~~~~~~~ + +producer/index.ts:52:14 - error TS4025: Exported variable 'hiddenAlias' has or is using private name 'Hidden'. + +52 export const hiddenAlias = createHidden("text"); +   ~~~~~~~~~~~ + +producer/index.ts:53:14 - error TS4025: Exported variable 'siblingHiddenAliases' has or is using private name 'Hidden'. + +53 export const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias }; +   ~~~~~~~~~~~~~~~~~~~~ + +producer/index.ts:54:14 - error TS5088: The inferred type of 'parenthesized' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +54 export const parenthesized = (function self() { return self; }); +   ~~~~~~~~~~~~~ + +producer/index.ts:55:14 - error TS5088: The inferred type of 'asserted' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +55 export const asserted = (function self() { return self; }) satisfies () => unknown; +   ~~~~~~~~ + +producer/index.ts:58:12 - error TS5088: The inferred type of '"a-b"' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +58 static "a-b"() { return Methods["a-b"]; } +   ~~~~~ + +producer/index.ts:59:12 - error TS5088: The inferred type of '[key]' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +59 static [key]() { return Methods[key]; } +   ~~~~~ + +producer/index.ts:60:5 - error TS5088: The inferred type of 'recur' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +60 recur() { return this.recur; } +   ~~~~~ + +producer/index.ts:65:14 - error TS5088: The inferred type of 'nestedOwner' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +65 export const nestedOwner = { +   ~~~~~~~~~~~ + +producer/index.ts:77:14 - error TS5088: The inferred type of 'nestedNumber' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +77 export const nestedNumber = nestedOwner.make(1); +   ~~~~~~~~~~~~ + +consumer/index.ts:1:88 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +1 import { arrow, expression, first, generic, objectReturn, tupleReturn, shadowed } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:2:64 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +2 import { object, method, accessor, tuple, array, nested } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:3:94 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +3 import { memberTuple, memberArray, quoted, numeric, key, computed, union, specialized } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:4:48 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +4 import { indexed, mapped, viaAnnotation } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:5:86 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +5 import { nextLink, nextCallable, parenthesized, asserted, Methods, overloaded } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:6:51 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +6 import { hiddenAlias, siblingHiddenAliases } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:7:30 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +7 import { nestedNumber } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +Found 36 errors in 2 files. + +Errors Files + 7 consumer/index.ts:1 + 29 producer/index.ts:1 + +//// [/home/src/tslibs/TS/Lib/lib.es2026.full.d.ts] *Lib* +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } +interface ReadonlyArray {} +interface SymbolConstructor { + (desc?: string | number): symbol; + for(name: string): symbol; + readonly toStringTag: symbol; +} +declare var Symbol: SymbolConstructor; +interface Symbol { + readonly [Symbol.toStringTag]: string; +} +declare const console: { log(msg: any): void; }; +//// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":["./index.ts"],"semanticErrors":true} +//// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./index.ts" + ], + "original": "./index.ts" + } + ], + "size": 71, + "semanticErrors": true +} +//// [/home/src/workspaces/project/producer/dist/index.js] *new* +export const arrow = () => arrow; +export const expression = function self() { return self; }; +export const first = () => second; +export const second = () => first; +export const generic = (value) => generic; +export const objectReturn = () => ({ call: objectReturn }); +export const tupleReturn = () => [tupleReturn]; +export const shadowed = function self(shadowed) { return self; }; +export const object = { value: 1, next: () => object }; +export const method = { value: 1, next() { return method; } }; +export const accessor = { value: 1, get next() { return accessor; } }; +export const tuple = [() => tuple]; +export const array = [() => array]; +export const nested = { inner: { next() { return nested.inner; } } }; +export const memberTuple = [function self() { return self; }]; +export const memberArray = [function self() { return self; }]; +export const quoted = { "a-b": function self() { return self; } }; +export const numeric = { 0: function self() { return self; } }; +export const key = Symbol(); +export const computed = { [key]: function self() { return self; } }; +export const union = true ? { next: () => union } : undefined; +function create(value) { + const result = { value, next: () => result }; + return result; +} +export const specialized = create("text"); +function createIndexed() { + const value = {}; + return value; +} +export const indexed = createIndexed(); +function createMapped() { + const value = null; + return value; +} +export const mapped = createMapped(); +function createAnnotated(value) { + const node = { value, next: () => node }; + return node; +} +export const viaAnnotation = createAnnotated("text"); +export const nextLink = link.next; +export const nextCallable = callable(1); +function createHidden(value) { + return null; +} +export const hiddenAlias = createHidden("text"); +export const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias }; +export const parenthesized = (function self() { return self; }); +export const asserted = (function self() { return self; }); +export class Methods { + static recur() { return Methods.recur; } + static "a-b"() { return Methods["a-b"]; } + static [key]() { return Methods[key]; } + recur() { return this.recur; } +} +export function overloaded(value) { return overloaded; } +export const nestedOwner = { + make(outer) { + return { + nested(inner) { return { outer, inner, owner: nestedOwner }; }, + constrained(inner) { return { outer, inner, owner: nestedOwner }; }, + copied(inner) { + return { outer, inner, owner: nestedOwner }; + }, + rest(...values) { return { outer, inner: values[0], owner: nestedOwner }; }, + }; + }, +}; +export const nestedNumber = nestedOwner.make(1); + +//// [/home/src/workspaces/project/producer/dist/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2026.full.d.ts","../index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"c50047250d0afa431800786fe8ac0f71-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);"],"options":{"composite":true,"outDir":"./","strict":true},"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":18,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["arrow"]},{"pos":47,"end":57,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["expression"]},{"pos":226,"end":238,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["objectReturn"]},{"pos":286,"end":297,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["tupleReturn"]},{"pos":417,"end":423,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["object"]},{"pos":473,"end":479,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["method"]},{"pos":536,"end":544,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["accessor"]},{"pos":607,"end":612,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["tuple"]},{"pos":652,"end":657,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["array"]},{"pos":688,"end":694,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nested"]},{"pos":758,"end":769,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["memberTuple"]},{"pos":830,"end":841,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["memberArray"]},{"pos":893,"end":899,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["quoted"]},{"pos":960,"end":967,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["numeric"]},{"pos":1053,"end":1061,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["computed"]},{"pos":1122,"end":1127,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["union"]},{"pos":1298,"end":1309,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["specialized"]},{"pos":1443,"end":1450,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["indexed"]},{"pos":1591,"end":1597,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["mapped"]},{"pos":1792,"end":1805,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["viaAnnotation"]},{"pos":2246,"end":2257,"code":4025,"category":1,"messageKey":"Exported_variable_0_has_or_is_using_private_name_1_4025","messageArgs":["hiddenAlias","Hidden",""]},{"pos":2295,"end":2315,"code":4025,"category":1,"messageKey":"Exported_variable_0_has_or_is_using_private_name_1_4025","messageArgs":["siblingHiddenAliases","Hidden",""]},{"pos":2376,"end":2389,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["parenthesized"]},{"pos":2441,"end":2449,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["asserted"]},{"pos":2591,"end":2596,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["\"a-b\""]},{"pos":2637,"end":2642,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["[key]"]},{"pos":2674,"end":2679,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["recur"]},{"pos":2918,"end":2929,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nestedOwner"]},{"pos":3450,"end":3462,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nestedNumber"]}]]],"emitSignatures":[2]} +//// [/home/src/workspaces/project/producer/dist/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "../index.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.es2026.full.d.ts", + "../index.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2026.full.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "../index.ts", + "version": "c50047250d0afa431800786fe8ac0f71-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);", + "signature": "c50047250d0afa431800786fe8ac0f71-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);", + "impliedNodeFormat": "CommonJS" + } + ], + "options": { + "composite": true, + "outDir": "./", + "strict": true + }, + "emitDiagnosticsPerFile": [ + [ + "../index.ts", + [ + { + "pos": 13, + "end": 18, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "arrow" + ] + }, + { + "pos": 47, + "end": 57, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "expression" + ] + }, + { + "pos": 226, + "end": 238, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "objectReturn" + ] + }, + { + "pos": 286, + "end": 297, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "tupleReturn" + ] + }, + { + "pos": 417, + "end": 423, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "object" + ] + }, + { + "pos": 473, + "end": 479, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "method" + ] + }, + { + "pos": 536, + "end": 544, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "accessor" + ] + }, + { + "pos": 607, + "end": 612, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "tuple" + ] + }, + { + "pos": 652, + "end": 657, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "array" + ] + }, + { + "pos": 688, + "end": 694, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "nested" + ] + }, + { + "pos": 758, + "end": 769, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "memberTuple" + ] + }, + { + "pos": 830, + "end": 841, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "memberArray" + ] + }, + { + "pos": 893, + "end": 899, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "quoted" + ] + }, + { + "pos": 960, + "end": 967, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "numeric" + ] + }, + { + "pos": 1053, + "end": 1061, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "computed" + ] + }, + { + "pos": 1122, + "end": 1127, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "union" + ] + }, + { + "pos": 1298, + "end": 1309, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "specialized" + ] + }, + { + "pos": 1443, + "end": 1450, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "indexed" + ] + }, + { + "pos": 1591, + "end": 1597, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "mapped" + ] + }, + { + "pos": 1792, + "end": 1805, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "viaAnnotation" + ] + }, + { + "pos": 2246, + "end": 2257, + "code": 4025, + "category": 1, + "messageKey": "Exported_variable_0_has_or_is_using_private_name_1_4025", + "messageArgs": [ + "hiddenAlias", + "Hidden", + "" + ] + }, + { + "pos": 2295, + "end": 2315, + "code": 4025, + "category": 1, + "messageKey": "Exported_variable_0_has_or_is_using_private_name_1_4025", + "messageArgs": [ + "siblingHiddenAliases", + "Hidden", + "" + ] + }, + { + "pos": 2376, + "end": 2389, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "parenthesized" + ] + }, + { + "pos": 2441, + "end": 2449, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "asserted" + ] + }, + { + "pos": 2591, + "end": 2596, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "\"a-b\"" + ] + }, + { + "pos": 2637, + "end": 2642, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "[key]" + ] + }, + { + "pos": 2674, + "end": 2679, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "recur" + ] + }, + { + "pos": 2918, + "end": 2929, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "nestedOwner" + ] + }, + { + "pos": 3450, + "end": 3462, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "nestedNumber" + ] + } + ] + ] + ], + "emitSignatures": [ + { + "file": "../index.ts", + "original": 2 + } + ], + "size": 10217 +} + +producer/tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/tslibs/TS/Lib/lib.es2026.full.d.ts +*refresh* /home/src/workspaces/project/producer/index.ts +Signatures:: + +consumer/tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/tslibs/TS/Lib/lib.es2026.full.d.ts +*refresh* /home/src/workspaces/project/consumer/index.ts +Signatures:: + + +Edit [0]:: no change + +tsgo --build consumer +ExitStatus:: DiagnosticsPresent_OutputsGenerated +Output:: +producer/index.ts:1:14 - error TS5088: The inferred type of 'arrow' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +1 export const arrow = () => arrow; +   ~~~~~ + +producer/index.ts:2:14 - error TS5088: The inferred type of 'expression' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +2 export const expression = function self() { return self; }; +   ~~~~~~~~~~ + +producer/index.ts:6:14 - error TS5088: The inferred type of 'objectReturn' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +6 export const objectReturn = () => ({ call: objectReturn }); +   ~~~~~~~~~~~~ + +producer/index.ts:7:14 - error TS5088: The inferred type of 'tupleReturn' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +7 export const tupleReturn = () => [tupleReturn] as const; +   ~~~~~~~~~~~ + +producer/index.ts:9:14 - error TS5088: The inferred type of 'object' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +9 export const object = { value: 1, next: () => object }; +   ~~~~~~ + +producer/index.ts:10:14 - error TS5088: The inferred type of 'method' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +10 export const method = { value: 1, next() { return method; } }; +   ~~~~~~ + +producer/index.ts:11:14 - error TS5088: The inferred type of 'accessor' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +11 export const accessor = { value: 1, get next() { return accessor; } }; +   ~~~~~~~~ + +producer/index.ts:12:14 - error TS5088: The inferred type of 'tuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +12 export const tuple = [() => tuple] as const; +   ~~~~~ + +producer/index.ts:13:14 - error TS5088: The inferred type of 'array' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +13 export const array = [() => array]; +   ~~~~~ + +producer/index.ts:14:14 - error TS5088: The inferred type of 'nested' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +14 export const nested = { inner: { next() { return nested.inner; } } }; +   ~~~~~~ + +producer/index.ts:15:14 - error TS5088: The inferred type of 'memberTuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +15 export const memberTuple = [function self() { return self; }] as const; +   ~~~~~~~~~~~ + +producer/index.ts:16:14 - error TS5088: The inferred type of 'memberArray' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +16 export const memberArray = [function self() { return self; }]; +   ~~~~~~~~~~~ + +producer/index.ts:17:14 - error TS5088: The inferred type of 'quoted' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +17 export const quoted = { "a-b": function self() { return self; } }; +   ~~~~~~ + +producer/index.ts:18:14 - error TS5088: The inferred type of 'numeric' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +18 export const numeric = { 0: function self() { return self; } }; +   ~~~~~~~ + +producer/index.ts:20:14 - error TS5088: The inferred type of 'computed' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +20 export const computed = { [key]: function self() { return self; } }; +   ~~~~~~~~ + +producer/index.ts:21:14 - error TS5088: The inferred type of 'union' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +21 export const union = true as boolean ? { next: () => union } : undefined; +   ~~~~~ + +producer/index.ts:26:14 - error TS5088: The inferred type of 'specialized' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +26 export const specialized = create("text"); +   ~~~~~~~~~~~ + +producer/index.ts:31:14 - error TS5088: The inferred type of 'indexed' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +31 export const indexed = createIndexed(); +   ~~~~~~~ + +producer/index.ts:36:14 - error TS5088: The inferred type of 'mapped' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +36 export const mapped = createMapped<{ next: unknown }>(); +   ~~~~~~ + +producer/index.ts:41:14 - error TS5088: The inferred type of 'viaAnnotation' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +41 export const viaAnnotation = createAnnotated("text"); +   ~~~~~~~~~~~~~ + +producer/index.ts:52:14 - error TS4025: Exported variable 'hiddenAlias' has or is using private name 'Hidden'. + +52 export const hiddenAlias = createHidden("text"); +   ~~~~~~~~~~~ + +producer/index.ts:53:14 - error TS4025: Exported variable 'siblingHiddenAliases' has or is using private name 'Hidden'. + +53 export const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias }; +   ~~~~~~~~~~~~~~~~~~~~ + +producer/index.ts:54:14 - error TS5088: The inferred type of 'parenthesized' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +54 export const parenthesized = (function self() { return self; }); +   ~~~~~~~~~~~~~ + +producer/index.ts:55:14 - error TS5088: The inferred type of 'asserted' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +55 export const asserted = (function self() { return self; }) satisfies () => unknown; +   ~~~~~~~~ + +producer/index.ts:58:12 - error TS5088: The inferred type of '"a-b"' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +58 static "a-b"() { return Methods["a-b"]; } +   ~~~~~ + +producer/index.ts:59:12 - error TS5088: The inferred type of '[key]' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +59 static [key]() { return Methods[key]; } +   ~~~~~ + +producer/index.ts:60:5 - error TS5088: The inferred type of 'recur' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +60 recur() { return this.recur; } +   ~~~~~ + +producer/index.ts:65:14 - error TS5088: The inferred type of 'nestedOwner' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +65 export const nestedOwner = { +   ~~~~~~~~~~~ + +producer/index.ts:77:14 - error TS5088: The inferred type of 'nestedNumber' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +77 export const nestedNumber = nestedOwner.make(1); +   ~~~~~~~~~~~~ + +consumer/index.ts:1:88 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +1 import { arrow, expression, first, generic, objectReturn, tupleReturn, shadowed } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:2:64 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +2 import { object, method, accessor, tuple, array, nested } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:3:94 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +3 import { memberTuple, memberArray, quoted, numeric, key, computed, union, specialized } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:4:48 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +4 import { indexed, mapped, viaAnnotation } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:5:86 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +5 import { nextLink, nextCallable, parenthesized, asserted, Methods, overloaded } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:6:51 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +6 import { hiddenAlias, siblingHiddenAliases } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:7:30 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +7 import { nestedNumber } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +Found 36 errors in 2 files. + +Errors Files + 7 consumer/index.ts:1 + 29 producer/index.ts:1 + +//// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo] *rewrite with same content* +//// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo.readable.baseline.txt] *rewrite with same content* + +producer/tsconfig.json:: +SemanticDiagnostics:: +Signatures:: + +consumer/tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/tslibs/TS/Lib/lib.es2026.full.d.ts +*refresh* /home/src/workspaces/project/consumer/index.ts +Signatures:: + + +Edit [1]:: add a comment to the producer +//// [/home/src/workspaces/project/producer/index.ts] *modified* +export const arrow = () => arrow; +export const expression = function self() { return self; }; +export const first = () => second; +export const second = () => first; +export const generic = (value: T) => generic; +export const objectReturn = () => ({ call: objectReturn }); +export const tupleReturn = () => [tupleReturn] as const; +export const shadowed = function self(shadowed: number) { return self; }; +export const object = { value: 1, next: () => object }; +export const method = { value: 1, next() { return method; } }; +export const accessor = { value: 1, get next() { return accessor; } }; +export const tuple = [() => tuple] as const; +export const array = [() => array]; +export const nested = { inner: { next() { return nested.inner; } } }; +export const memberTuple = [function self() { return self; }] as const; +export const memberArray = [function self() { return self; }]; +export const quoted = { "a-b": function self() { return self; } }; +export const numeric = { 0: function self() { return self; } }; +export const key = Symbol(); +export const computed = { [key]: function self() { return self; } }; +export const union = true as boolean ? { next: () => union } : undefined; +function create(value: T) { + const result = { value, next: () => result }; + return result; +} +export const specialized = create("text"); +function createIndexed() { + const value: { [key: string]: typeof value } = {}; + return value; +} +export const indexed = createIndexed(); +function createMapped() { + const value: { [K in keyof T]: typeof value } = null!; + return value; +} +export const mapped = createMapped<{ next: unknown }>(); +function createAnnotated(value: T) { + const node: { value: T; next: () => typeof node } = { value, next: () => node }; + return node; +} +export const viaAnnotation = createAnnotated("text"); +export type Link = { value: T; next: Link }; +export type Callable = { (value: T): Callable; link: Link }; +export declare const link: Link; +export declare const callable: Callable; +export const nextLink = link.next; +export const nextCallable = callable(1); +function createHidden(value: T) { + type Hidden = { value: T; next: Hidden }; + return null! as Hidden; +} +export const hiddenAlias = createHidden("text"); +export const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias }; +export const parenthesized = (function self() { return self; }); +export const asserted = (function self() { return self; }) satisfies () => unknown; +export class Methods { + static recur() { return Methods.recur; } + static "a-b"() { return Methods["a-b"]; } + static [key]() { return Methods[key]; } + recur() { return this.recur; } +} +export function overloaded(value: string): typeof overloaded; +export function overloaded(value: number): typeof overloaded; +export function overloaded(value: string | number) { return overloaded; } +export const nestedOwner = { + make(outer: T) { + return { + nested(inner: U) { return { outer, inner, owner: nestedOwner }; }, + constrained(inner: U) { return { outer, inner, owner: nestedOwner }; }, + copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } { + return { outer, inner, owner: nestedOwner }; + }, + rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; }, + }; + }, +}; +export const nestedNumber = nestedOwner.make(1); +// comment-only edit + + +tsgo --build consumer +ExitStatus:: DiagnosticsPresent_OutputsGenerated +Output:: +producer/index.ts:1:14 - error TS5088: The inferred type of 'arrow' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +1 export const arrow = () => arrow; +   ~~~~~ + +producer/index.ts:2:14 - error TS5088: The inferred type of 'expression' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +2 export const expression = function self() { return self; }; +   ~~~~~~~~~~ + +producer/index.ts:6:14 - error TS5088: The inferred type of 'objectReturn' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +6 export const objectReturn = () => ({ call: objectReturn }); +   ~~~~~~~~~~~~ + +producer/index.ts:7:14 - error TS5088: The inferred type of 'tupleReturn' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +7 export const tupleReturn = () => [tupleReturn] as const; +   ~~~~~~~~~~~ + +producer/index.ts:9:14 - error TS5088: The inferred type of 'object' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +9 export const object = { value: 1, next: () => object }; +   ~~~~~~ + +producer/index.ts:10:14 - error TS5088: The inferred type of 'method' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +10 export const method = { value: 1, next() { return method; } }; +   ~~~~~~ + +producer/index.ts:11:14 - error TS5088: The inferred type of 'accessor' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +11 export const accessor = { value: 1, get next() { return accessor; } }; +   ~~~~~~~~ + +producer/index.ts:12:14 - error TS5088: The inferred type of 'tuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +12 export const tuple = [() => tuple] as const; +   ~~~~~ + +producer/index.ts:13:14 - error TS5088: The inferred type of 'array' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +13 export const array = [() => array]; +   ~~~~~ + +producer/index.ts:14:14 - error TS5088: The inferred type of 'nested' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +14 export const nested = { inner: { next() { return nested.inner; } } }; +   ~~~~~~ + +producer/index.ts:15:14 - error TS5088: The inferred type of 'memberTuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +15 export const memberTuple = [function self() { return self; }] as const; +   ~~~~~~~~~~~ + +producer/index.ts:16:14 - error TS5088: The inferred type of 'memberArray' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +16 export const memberArray = [function self() { return self; }]; +   ~~~~~~~~~~~ + +producer/index.ts:17:14 - error TS5088: The inferred type of 'quoted' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +17 export const quoted = { "a-b": function self() { return self; } }; +   ~~~~~~ + +producer/index.ts:18:14 - error TS5088: The inferred type of 'numeric' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +18 export const numeric = { 0: function self() { return self; } }; +   ~~~~~~~ + +producer/index.ts:20:14 - error TS5088: The inferred type of 'computed' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +20 export const computed = { [key]: function self() { return self; } }; +   ~~~~~~~~ + +producer/index.ts:21:14 - error TS5088: The inferred type of 'union' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +21 export const union = true as boolean ? { next: () => union } : undefined; +   ~~~~~ + +producer/index.ts:26:14 - error TS5088: The inferred type of 'specialized' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +26 export const specialized = create("text"); +   ~~~~~~~~~~~ + +producer/index.ts:31:14 - error TS5088: The inferred type of 'indexed' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +31 export const indexed = createIndexed(); +   ~~~~~~~ + +producer/index.ts:36:14 - error TS5088: The inferred type of 'mapped' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +36 export const mapped = createMapped<{ next: unknown }>(); +   ~~~~~~ + +producer/index.ts:41:14 - error TS5088: The inferred type of 'viaAnnotation' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +41 export const viaAnnotation = createAnnotated("text"); +   ~~~~~~~~~~~~~ + +producer/index.ts:52:14 - error TS4025: Exported variable 'hiddenAlias' has or is using private name 'Hidden'. + +52 export const hiddenAlias = createHidden("text"); +   ~~~~~~~~~~~ + +producer/index.ts:53:14 - error TS4025: Exported variable 'siblingHiddenAliases' has or is using private name 'Hidden'. + +53 export const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias }; +   ~~~~~~~~~~~~~~~~~~~~ + +producer/index.ts:54:14 - error TS5088: The inferred type of 'parenthesized' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +54 export const parenthesized = (function self() { return self; }); +   ~~~~~~~~~~~~~ + +producer/index.ts:55:14 - error TS5088: The inferred type of 'asserted' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +55 export const asserted = (function self() { return self; }) satisfies () => unknown; +   ~~~~~~~~ + +producer/index.ts:58:12 - error TS5088: The inferred type of '"a-b"' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +58 static "a-b"() { return Methods["a-b"]; } +   ~~~~~ + +producer/index.ts:59:12 - error TS5088: The inferred type of '[key]' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +59 static [key]() { return Methods[key]; } +   ~~~~~ + +producer/index.ts:60:5 - error TS5088: The inferred type of 'recur' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +60 recur() { return this.recur; } +   ~~~~~ + +producer/index.ts:65:14 - error TS5088: The inferred type of 'nestedOwner' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +65 export const nestedOwner = { +   ~~~~~~~~~~~ + +producer/index.ts:77:14 - error TS5088: The inferred type of 'nestedNumber' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +77 export const nestedNumber = nestedOwner.make(1); +   ~~~~~~~~~~~~ + +consumer/index.ts:1:88 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +1 import { arrow, expression, first, generic, objectReturn, tupleReturn, shadowed } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:2:64 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +2 import { object, method, accessor, tuple, array, nested } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:3:94 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +3 import { memberTuple, memberArray, quoted, numeric, key, computed, union, specialized } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:4:48 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +4 import { indexed, mapped, viaAnnotation } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:5:86 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +5 import { nextLink, nextCallable, parenthesized, asserted, Methods, overloaded } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:6:51 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +6 import { hiddenAlias, siblingHiddenAliases } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:7:30 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +7 import { nestedNumber } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +Found 36 errors in 2 files. + +Errors Files + 7 consumer/index.ts:1 + 29 producer/index.ts:1 + +//// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo] *rewrite with same content* +//// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo.readable.baseline.txt] *rewrite with same content* +//// [/home/src/workspaces/project/producer/dist/index.js] *modified* +export const arrow = () => arrow; +export const expression = function self() { return self; }; +export const first = () => second; +export const second = () => first; +export const generic = (value) => generic; +export const objectReturn = () => ({ call: objectReturn }); +export const tupleReturn = () => [tupleReturn]; +export const shadowed = function self(shadowed) { return self; }; +export const object = { value: 1, next: () => object }; +export const method = { value: 1, next() { return method; } }; +export const accessor = { value: 1, get next() { return accessor; } }; +export const tuple = [() => tuple]; +export const array = [() => array]; +export const nested = { inner: { next() { return nested.inner; } } }; +export const memberTuple = [function self() { return self; }]; +export const memberArray = [function self() { return self; }]; +export const quoted = { "a-b": function self() { return self; } }; +export const numeric = { 0: function self() { return self; } }; +export const key = Symbol(); +export const computed = { [key]: function self() { return self; } }; +export const union = true ? { next: () => union } : undefined; +function create(value) { + const result = { value, next: () => result }; + return result; +} +export const specialized = create("text"); +function createIndexed() { + const value = {}; + return value; +} +export const indexed = createIndexed(); +function createMapped() { + const value = null; + return value; +} +export const mapped = createMapped(); +function createAnnotated(value) { + const node = { value, next: () => node }; + return node; +} +export const viaAnnotation = createAnnotated("text"); +export const nextLink = link.next; +export const nextCallable = callable(1); +function createHidden(value) { + return null; +} +export const hiddenAlias = createHidden("text"); +export const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias }; +export const parenthesized = (function self() { return self; }); +export const asserted = (function self() { return self; }); +export class Methods { + static recur() { return Methods.recur; } + static "a-b"() { return Methods["a-b"]; } + static [key]() { return Methods[key]; } + recur() { return this.recur; } +} +export function overloaded(value) { return overloaded; } +export const nestedOwner = { + make(outer) { + return { + nested(inner) { return { outer, inner, owner: nestedOwner }; }, + constrained(inner) { return { outer, inner, owner: nestedOwner }; }, + copied(inner) { + return { outer, inner, owner: nestedOwner }; + }, + rest(...values) { return { outer, inner: values[0], owner: nestedOwner }; }, + }; + }, +}; +export const nestedNumber = nestedOwner.make(1); +// comment-only edit + +//// [/home/src/workspaces/project/producer/dist/tsconfig.tsbuildinfo] *modified* +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2026.full.d.ts","../index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"633d60bb4cc3a6318b4832fd7a0a90fd-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);\n// comment-only edit\n","signature":"87d31630156adc6eff09ac6a0e92ce90-export declare const arrow: any;\nexport declare const expression: any;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: any;\nexport declare const tupleReturn: any;\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: any;\nexport declare const method: any;\nexport declare const accessor: any;\nexport declare const tuple: any;\nexport declare const array: any;\nexport declare const nested: any;\nexport declare const memberTuple: any;\nexport declare const memberArray: any;\nexport declare const quoted: any;\nexport declare const numeric: any;\nexport declare const key: unique symbol;\nexport declare const computed: any;\nexport declare const union: any;\nexport declare const specialized: any;\nexport declare const indexed: any;\nexport declare const mapped: any;\nexport declare const viaAnnotation: any;\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: Hidden;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: Hidden;\n };\n second: {\n value: string;\n next: Hidden;\n };\n};\nexport declare const parenthesized: any;\nexport declare const asserted: any;\nexport declare class Methods {\n static recur(): typeof Methods.recur;\n static \"a-b\"(): any;\n static [key](): any;\n recur(): any;\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: any;\nexport declare const nestedNumber: any;\n\n(13,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\narrow\n\n(47,10): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nexpression\n\n(226,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nobjectReturn\n\n(286,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ntupleReturn\n\n(417,6): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nobject\n\n(473,6): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmethod\n\n(536,8): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\naccessor\n\n(607,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ntuple\n\n(652,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\narray\n\n(688,6): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnested\n\n(758,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmemberTuple\n\n(830,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmemberArray\n\n(893,6): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nquoted\n\n(960,7): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnumeric\n\n(1053,8): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ncomputed\n\n(1122,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nunion\n\n(1298,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nspecialized\n\n(1443,7): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nindexed\n\n(1591,6): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmapped\n\n(1792,13): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nviaAnnotation\n\n(2246,11): error4025: Exported_variable_0_has_or_is_using_private_name_1_4025\nhiddenAlias\nHidden\n\n\n(2295,20): error4025: Exported_variable_0_has_or_is_using_private_name_1_4025\nsiblingHiddenAliases\nHidden\n\n\n(2376,13): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nparenthesized\n\n(2441,8): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nasserted\n\n(2591,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\n\"a-b\"\n\n(2637,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\n[key]\n\n(2674,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nrecur\n\n(2918,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnestedOwner\n\n(3450,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnestedNumber\n","impliedNodeFormat":1}],"options":{"composite":true,"outDir":"./","strict":true},"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":18,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["arrow"]},{"pos":47,"end":57,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["expression"]},{"pos":226,"end":238,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["objectReturn"]},{"pos":286,"end":297,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["tupleReturn"]},{"pos":417,"end":423,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["object"]},{"pos":473,"end":479,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["method"]},{"pos":536,"end":544,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["accessor"]},{"pos":607,"end":612,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["tuple"]},{"pos":652,"end":657,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["array"]},{"pos":688,"end":694,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nested"]},{"pos":758,"end":769,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["memberTuple"]},{"pos":830,"end":841,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["memberArray"]},{"pos":893,"end":899,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["quoted"]},{"pos":960,"end":967,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["numeric"]},{"pos":1053,"end":1061,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["computed"]},{"pos":1122,"end":1127,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["union"]},{"pos":1298,"end":1309,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["specialized"]},{"pos":1443,"end":1450,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["indexed"]},{"pos":1591,"end":1597,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["mapped"]},{"pos":1792,"end":1805,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["viaAnnotation"]},{"pos":2246,"end":2257,"code":4025,"category":1,"messageKey":"Exported_variable_0_has_or_is_using_private_name_1_4025","messageArgs":["hiddenAlias","Hidden",""]},{"pos":2295,"end":2315,"code":4025,"category":1,"messageKey":"Exported_variable_0_has_or_is_using_private_name_1_4025","messageArgs":["siblingHiddenAliases","Hidden",""]},{"pos":2376,"end":2389,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["parenthesized"]},{"pos":2441,"end":2449,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["asserted"]},{"pos":2591,"end":2596,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["\"a-b\""]},{"pos":2637,"end":2642,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["[key]"]},{"pos":2674,"end":2679,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["recur"]},{"pos":2918,"end":2929,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nestedOwner"]},{"pos":3450,"end":3462,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nestedNumber"]}]]],"emitSignatures":[2]} +//// [/home/src/workspaces/project/producer/dist/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "../index.ts" + ], + "original": 2 + } + ], + "fileNames": [ + "lib.es2026.full.d.ts", + "../index.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2026.full.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "../index.ts", + "version": "633d60bb4cc3a6318b4832fd7a0a90fd-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);\n// comment-only edit\n", + "signature": "87d31630156adc6eff09ac6a0e92ce90-export declare const arrow: any;\nexport declare const expression: any;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: any;\nexport declare const tupleReturn: any;\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: any;\nexport declare const method: any;\nexport declare const accessor: any;\nexport declare const tuple: any;\nexport declare const array: any;\nexport declare const nested: any;\nexport declare const memberTuple: any;\nexport declare const memberArray: any;\nexport declare const quoted: any;\nexport declare const numeric: any;\nexport declare const key: unique symbol;\nexport declare const computed: any;\nexport declare const union: any;\nexport declare const specialized: any;\nexport declare const indexed: any;\nexport declare const mapped: any;\nexport declare const viaAnnotation: any;\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: Hidden;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: Hidden;\n };\n second: {\n value: string;\n next: Hidden;\n };\n};\nexport declare const parenthesized: any;\nexport declare const asserted: any;\nexport declare class Methods {\n static recur(): typeof Methods.recur;\n static \"a-b\"(): any;\n static [key](): any;\n recur(): any;\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: any;\nexport declare const nestedNumber: any;\n\n(13,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\narrow\n\n(47,10): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nexpression\n\n(226,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nobjectReturn\n\n(286,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ntupleReturn\n\n(417,6): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nobject\n\n(473,6): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmethod\n\n(536,8): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\naccessor\n\n(607,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ntuple\n\n(652,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\narray\n\n(688,6): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnested\n\n(758,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmemberTuple\n\n(830,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmemberArray\n\n(893,6): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nquoted\n\n(960,7): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnumeric\n\n(1053,8): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ncomputed\n\n(1122,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nunion\n\n(1298,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nspecialized\n\n(1443,7): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nindexed\n\n(1591,6): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmapped\n\n(1792,13): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nviaAnnotation\n\n(2246,11): error4025: Exported_variable_0_has_or_is_using_private_name_1_4025\nhiddenAlias\nHidden\n\n\n(2295,20): error4025: Exported_variable_0_has_or_is_using_private_name_1_4025\nsiblingHiddenAliases\nHidden\n\n\n(2376,13): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nparenthesized\n\n(2441,8): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nasserted\n\n(2591,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\n\"a-b\"\n\n(2637,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\n[key]\n\n(2674,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nrecur\n\n(2918,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnestedOwner\n\n(3450,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnestedNumber\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "633d60bb4cc3a6318b4832fd7a0a90fd-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);\n// comment-only edit\n", + "signature": "87d31630156adc6eff09ac6a0e92ce90-export declare const arrow: any;\nexport declare const expression: any;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: any;\nexport declare const tupleReturn: any;\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: any;\nexport declare const method: any;\nexport declare const accessor: any;\nexport declare const tuple: any;\nexport declare const array: any;\nexport declare const nested: any;\nexport declare const memberTuple: any;\nexport declare const memberArray: any;\nexport declare const quoted: any;\nexport declare const numeric: any;\nexport declare const key: unique symbol;\nexport declare const computed: any;\nexport declare const union: any;\nexport declare const specialized: any;\nexport declare const indexed: any;\nexport declare const mapped: any;\nexport declare const viaAnnotation: any;\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: Hidden;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: Hidden;\n };\n second: {\n value: string;\n next: Hidden;\n };\n};\nexport declare const parenthesized: any;\nexport declare const asserted: any;\nexport declare class Methods {\n static recur(): typeof Methods.recur;\n static \"a-b\"(): any;\n static [key](): any;\n recur(): any;\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: any;\nexport declare const nestedNumber: any;\n\n(13,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\narrow\n\n(47,10): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nexpression\n\n(226,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nobjectReturn\n\n(286,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ntupleReturn\n\n(417,6): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nobject\n\n(473,6): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmethod\n\n(536,8): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\naccessor\n\n(607,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ntuple\n\n(652,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\narray\n\n(688,6): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnested\n\n(758,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmemberTuple\n\n(830,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmemberArray\n\n(893,6): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nquoted\n\n(960,7): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnumeric\n\n(1053,8): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ncomputed\n\n(1122,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nunion\n\n(1298,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nspecialized\n\n(1443,7): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nindexed\n\n(1591,6): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmapped\n\n(1792,13): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nviaAnnotation\n\n(2246,11): error4025: Exported_variable_0_has_or_is_using_private_name_1_4025\nhiddenAlias\nHidden\n\n\n(2295,20): error4025: Exported_variable_0_has_or_is_using_private_name_1_4025\nsiblingHiddenAliases\nHidden\n\n\n(2376,13): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nparenthesized\n\n(2441,8): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nasserted\n\n(2591,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\n\"a-b\"\n\n(2637,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\n[key]\n\n(2674,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nrecur\n\n(2918,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnestedOwner\n\n(3450,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnestedNumber\n", + "impliedNodeFormat": 1 + } + } + ], + "options": { + "composite": true, + "outDir": "./", + "strict": true + }, + "emitDiagnosticsPerFile": [ + [ + "../index.ts", + [ + { + "pos": 13, + "end": 18, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "arrow" + ] + }, + { + "pos": 47, + "end": 57, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "expression" + ] + }, + { + "pos": 226, + "end": 238, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "objectReturn" + ] + }, + { + "pos": 286, + "end": 297, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "tupleReturn" + ] + }, + { + "pos": 417, + "end": 423, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "object" + ] + }, + { + "pos": 473, + "end": 479, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "method" + ] + }, + { + "pos": 536, + "end": 544, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "accessor" + ] + }, + { + "pos": 607, + "end": 612, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "tuple" + ] + }, + { + "pos": 652, + "end": 657, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "array" + ] + }, + { + "pos": 688, + "end": 694, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "nested" + ] + }, + { + "pos": 758, + "end": 769, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "memberTuple" + ] + }, + { + "pos": 830, + "end": 841, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "memberArray" + ] + }, + { + "pos": 893, + "end": 899, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "quoted" + ] + }, + { + "pos": 960, + "end": 967, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "numeric" + ] + }, + { + "pos": 1053, + "end": 1061, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "computed" + ] + }, + { + "pos": 1122, + "end": 1127, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "union" + ] + }, + { + "pos": 1298, + "end": 1309, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "specialized" + ] + }, + { + "pos": 1443, + "end": 1450, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "indexed" + ] + }, + { + "pos": 1591, + "end": 1597, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "mapped" + ] + }, + { + "pos": 1792, + "end": 1805, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "viaAnnotation" + ] + }, + { + "pos": 2246, + "end": 2257, + "code": 4025, + "category": 1, + "messageKey": "Exported_variable_0_has_or_is_using_private_name_1_4025", + "messageArgs": [ + "hiddenAlias", + "Hidden", + "" + ] + }, + { + "pos": 2295, + "end": 2315, + "code": 4025, + "category": 1, + "messageKey": "Exported_variable_0_has_or_is_using_private_name_1_4025", + "messageArgs": [ + "siblingHiddenAliases", + "Hidden", + "" + ] + }, + { + "pos": 2376, + "end": 2389, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "parenthesized" + ] + }, + { + "pos": 2441, + "end": 2449, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "asserted" + ] + }, + { + "pos": 2591, + "end": 2596, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "\"a-b\"" + ] + }, + { + "pos": 2637, + "end": 2642, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "[key]" + ] + }, + { + "pos": 2674, + "end": 2679, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "recur" + ] + }, + { + "pos": 2918, + "end": 2929, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "nestedOwner" + ] + }, + { + "pos": 3450, + "end": 3462, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "nestedNumber" + ] + } + ] + ] + ], + "emitSignatures": [ + { + "file": "../index.ts", + "original": 2 + } + ], + "size": 16409 +} + +producer/tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/workspaces/project/producer/index.ts +Signatures:: +(computed .d.ts) /home/src/workspaces/project/producer/index.ts + +consumer/tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/tslibs/TS/Lib/lib.es2026.full.d.ts +*refresh* /home/src/workspaces/project/consumer/index.ts +Signatures:: + + +Edit [2]:: no change + +tsgo --build consumer +ExitStatus:: DiagnosticsPresent_OutputsGenerated +Output:: +producer/index.ts:1:14 - error TS5088: The inferred type of 'arrow' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +1 export const arrow = () => arrow; +   ~~~~~ + +producer/index.ts:2:14 - error TS5088: The inferred type of 'expression' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +2 export const expression = function self() { return self; }; +   ~~~~~~~~~~ + +producer/index.ts:6:14 - error TS5088: The inferred type of 'objectReturn' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +6 export const objectReturn = () => ({ call: objectReturn }); +   ~~~~~~~~~~~~ + +producer/index.ts:7:14 - error TS5088: The inferred type of 'tupleReturn' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +7 export const tupleReturn = () => [tupleReturn] as const; +   ~~~~~~~~~~~ + +producer/index.ts:9:14 - error TS5088: The inferred type of 'object' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +9 export const object = { value: 1, next: () => object }; +   ~~~~~~ + +producer/index.ts:10:14 - error TS5088: The inferred type of 'method' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +10 export const method = { value: 1, next() { return method; } }; +   ~~~~~~ + +producer/index.ts:11:14 - error TS5088: The inferred type of 'accessor' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +11 export const accessor = { value: 1, get next() { return accessor; } }; +   ~~~~~~~~ + +producer/index.ts:12:14 - error TS5088: The inferred type of 'tuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +12 export const tuple = [() => tuple] as const; +   ~~~~~ + +producer/index.ts:13:14 - error TS5088: The inferred type of 'array' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +13 export const array = [() => array]; +   ~~~~~ + +producer/index.ts:14:14 - error TS5088: The inferred type of 'nested' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +14 export const nested = { inner: { next() { return nested.inner; } } }; +   ~~~~~~ + +producer/index.ts:15:14 - error TS5088: The inferred type of 'memberTuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +15 export const memberTuple = [function self() { return self; }] as const; +   ~~~~~~~~~~~ + +producer/index.ts:16:14 - error TS5088: The inferred type of 'memberArray' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +16 export const memberArray = [function self() { return self; }]; +   ~~~~~~~~~~~ + +producer/index.ts:17:14 - error TS5088: The inferred type of 'quoted' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +17 export const quoted = { "a-b": function self() { return self; } }; +   ~~~~~~ + +producer/index.ts:18:14 - error TS5088: The inferred type of 'numeric' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +18 export const numeric = { 0: function self() { return self; } }; +   ~~~~~~~ + +producer/index.ts:20:14 - error TS5088: The inferred type of 'computed' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +20 export const computed = { [key]: function self() { return self; } }; +   ~~~~~~~~ + +producer/index.ts:21:14 - error TS5088: The inferred type of 'union' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +21 export const union = true as boolean ? { next: () => union } : undefined; +   ~~~~~ + +producer/index.ts:26:14 - error TS5088: The inferred type of 'specialized' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +26 export const specialized = create("text"); +   ~~~~~~~~~~~ + +producer/index.ts:31:14 - error TS5088: The inferred type of 'indexed' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +31 export const indexed = createIndexed(); +   ~~~~~~~ + +producer/index.ts:36:14 - error TS5088: The inferred type of 'mapped' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +36 export const mapped = createMapped<{ next: unknown }>(); +   ~~~~~~ + +producer/index.ts:41:14 - error TS5088: The inferred type of 'viaAnnotation' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +41 export const viaAnnotation = createAnnotated("text"); +   ~~~~~~~~~~~~~ + +producer/index.ts:52:14 - error TS4025: Exported variable 'hiddenAlias' has or is using private name 'Hidden'. + +52 export const hiddenAlias = createHidden("text"); +   ~~~~~~~~~~~ + +producer/index.ts:53:14 - error TS4025: Exported variable 'siblingHiddenAliases' has or is using private name 'Hidden'. + +53 export const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias }; +   ~~~~~~~~~~~~~~~~~~~~ + +producer/index.ts:54:14 - error TS5088: The inferred type of 'parenthesized' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +54 export const parenthesized = (function self() { return self; }); +   ~~~~~~~~~~~~~ + +producer/index.ts:55:14 - error TS5088: The inferred type of 'asserted' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +55 export const asserted = (function self() { return self; }) satisfies () => unknown; +   ~~~~~~~~ + +producer/index.ts:58:12 - error TS5088: The inferred type of '"a-b"' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +58 static "a-b"() { return Methods["a-b"]; } +   ~~~~~ + +producer/index.ts:59:12 - error TS5088: The inferred type of '[key]' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +59 static [key]() { return Methods[key]; } +   ~~~~~ + +producer/index.ts:60:5 - error TS5088: The inferred type of 'recur' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +60 recur() { return this.recur; } +   ~~~~~ + +producer/index.ts:65:14 - error TS5088: The inferred type of 'nestedOwner' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +65 export const nestedOwner = { +   ~~~~~~~~~~~ + +producer/index.ts:77:14 - error TS5088: The inferred type of 'nestedNumber' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +77 export const nestedNumber = nestedOwner.make(1); +   ~~~~~~~~~~~~ + +consumer/index.ts:1:88 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +1 import { arrow, expression, first, generic, objectReturn, tupleReturn, shadowed } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:2:64 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +2 import { object, method, accessor, tuple, array, nested } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:3:94 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +3 import { memberTuple, memberArray, quoted, numeric, key, computed, union, specialized } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:4:48 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +4 import { indexed, mapped, viaAnnotation } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:5:86 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +5 import { nextLink, nextCallable, parenthesized, asserted, Methods, overloaded } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:6:51 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +6 import { hiddenAlias, siblingHiddenAliases } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:7:30 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +7 import { nestedNumber } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +Found 36 errors in 2 files. + +Errors Files + 7 consumer/index.ts:1 + 29 producer/index.ts:1 + +//// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo] *rewrite with same content* +//// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo.readable.baseline.txt] *rewrite with same content* + +producer/tsconfig.json:: +SemanticDiagnostics:: +Signatures:: + +consumer/tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/tslibs/TS/Lib/lib.es2026.full.d.ts +*refresh* /home/src/workspaces/project/consumer/index.ts +Signatures:: diff --git a/tsc/testdata/baselines/reference/tsc/declarationEmit/reports-dts-generation-errors-with-incremental.js b/tsc/testdata/baselines/reference/tsc/declarationEmit/reports-dts-generation-errors-with-incremental.js index d423cafe94952..b6761a8e0a818 100644 --- a/tsc/testdata/baselines/reference/tsc/declarationEmit/reports-dts-generation-errors-with-incremental.js +++ b/tsc/testdata/baselines/reference/tsc/declarationEmit/reports-dts-generation-errors-with-incremental.js @@ -5,7 +5,8 @@ Input:: import ky from 'ky'; export const api = ky.extend({}); //// [/home/src/workspaces/project/node_modules/ky/distribution/index.d.ts] *new* -type KyInstance = { +declare class KyInstance { + private brand; extend(options: Record): KyInstance; } declare const ky: KyInstance; @@ -36,7 +37,16 @@ export default ky; tsgo --explainFiles --listEmittedFiles ExitStatus:: DiagnosticsPresent_OutputsSkipped Output:: -index.ts:2:14 - error TS4023: Exported variable 'api' has or is using name 'KyInstance' from external module "/home/src/workspaces/project/node_modules/ky/distribution/index" but cannot be named. +index.ts:2:14 - error TS4094: Property 'brand' of exported anonymous class type may not be private or protected. + +2 export const api = ky.extend({}); +   ~~~ + + index.ts:2:14 - Add a type annotation to the variable api. + 2 export const api = ky.extend({}); +    ~~~ + +index.ts:2:14 - error TS5088: The inferred type of 'api' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. 2 export const api = ky.extend({});    ~~~ @@ -52,7 +62,7 @@ index.ts Matched by default include pattern '**/*' File is ECMAScript module because 'package.json' has field "type" with value "module" -Found 1 error in index.ts:2 +Found 2 errors in the same file, starting at: index.ts:2 //// [/home/src/tslibs/TS/Lib/lib.es2026.full.d.ts] *Lib* /// @@ -82,7 +92,7 @@ import ky from 'ky'; export const api = ky.extend({}); //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[3],"packageJsons":["./node_modules/ky/package.json","./package.json"],"missingPackageJsons":["./node_modules/ky/distribution/package.json"],"fileNames":["lib.es2026.full.d.ts","./node_modules/ky/distribution/index.d.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b9b50c37c18e43d94b0dd4fb43967f10-type KyInstance = {\n extend(options: Record): KyInstance;\n}\ndeclare const ky: KyInstance;\nexport default ky;","impliedNodeFormat":99},{"version":"0f5091e963c17913313e4969c59e6eb4-import ky from 'ky';\nexport const api = ky.extend({});","impliedNodeFormat":99}],"fileIdsList":[[2]],"options":{"composite":true,"declaration":true,"module":199,"skipLibCheck":true,"skipDefaultLibCheck":true},"referencedMap":[[3,1]],"emitDiagnosticsPerFile":[[3,[{"pos":34,"end":37,"code":4023,"category":1,"messageKey":"Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023","messageArgs":["api","KyInstance","\"/home/src/workspaces/project/node_modules/ky/distribution/index\""]}]]],"emitSignatures":[3]} +{"version":"FakeTSVersion","root":[3],"packageJsons":["./node_modules/ky/package.json","./package.json"],"missingPackageJsons":["./node_modules/ky/distribution/package.json"],"fileNames":["lib.es2026.full.d.ts","./node_modules/ky/distribution/index.d.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"778e62a60976d425122b5f7908b0c56f-declare class KyInstance {\n private brand;\n extend(options: Record): KyInstance;\n}\ndeclare const ky: KyInstance;\nexport default ky;","impliedNodeFormat":99},{"version":"0f5091e963c17913313e4969c59e6eb4-import ky from 'ky';\nexport const api = ky.extend({});","impliedNodeFormat":99}],"fileIdsList":[[2]],"options":{"composite":true,"declaration":true,"module":199,"skipLibCheck":true,"skipDefaultLibCheck":true},"referencedMap":[[3,1]],"emitDiagnosticsPerFile":[[3,[{"pos":34,"end":37,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["brand"],"relatedInformation":[{"pos":34,"end":37,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["api"]}]},{"pos":34,"end":37,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["api"]}]]],"emitSignatures":[3]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -121,11 +131,11 @@ export const api = ky.extend({}); }, { "fileName": "./node_modules/ky/distribution/index.d.ts", - "version": "b9b50c37c18e43d94b0dd4fb43967f10-type KyInstance = {\n extend(options: Record): KyInstance;\n}\ndeclare const ky: KyInstance;\nexport default ky;", - "signature": "b9b50c37c18e43d94b0dd4fb43967f10-type KyInstance = {\n extend(options: Record): KyInstance;\n}\ndeclare const ky: KyInstance;\nexport default ky;", + "version": "778e62a60976d425122b5f7908b0c56f-declare class KyInstance {\n private brand;\n extend(options: Record): KyInstance;\n}\ndeclare const ky: KyInstance;\nexport default ky;", + "signature": "778e62a60976d425122b5f7908b0c56f-declare class KyInstance {\n private brand;\n extend(options: Record): KyInstance;\n}\ndeclare const ky: KyInstance;\nexport default ky;", "impliedNodeFormat": "ESNext", "original": { - "version": "b9b50c37c18e43d94b0dd4fb43967f10-type KyInstance = {\n extend(options: Record): KyInstance;\n}\ndeclare const ky: KyInstance;\nexport default ky;", + "version": "778e62a60976d425122b5f7908b0c56f-declare class KyInstance {\n private brand;\n extend(options: Record): KyInstance;\n}\ndeclare const ky: KyInstance;\nexport default ky;", "impliedNodeFormat": 99 } }, @@ -164,13 +174,33 @@ export const api = ky.extend({}); { "pos": 34, "end": 37, - "code": 4023, + "code": 4094, + "category": 1, + "messageKey": "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", + "messageArgs": [ + "brand" + ], + "relatedInformation": [ + { + "pos": 34, + "end": 37, + "code": 9027, + "category": 1, + "messageKey": "Add_a_type_annotation_to_the_variable_0_9027", + "messageArgs": [ + "api" + ] + } + ] + }, + { + "pos": 34, + "end": 37, + "code": 5088, "category": 1, - "messageKey": "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023", + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", "messageArgs": [ - "api", - "KyInstance", - "\"/home/src/workspaces/project/node_modules/ky/distribution/index\"" + "api" ] } ] @@ -182,7 +212,7 @@ export const api = ky.extend({}); "original": 3 } ], - "size": 1843 + "size": 2117 } tsconfig.json:: @@ -198,7 +228,16 @@ Edit [0]:: no change tsgo --explainFiles --listEmittedFiles ExitStatus:: DiagnosticsPresent_OutputsSkipped Output:: -index.ts:2:14 - error TS4023: Exported variable 'api' has or is using name 'KyInstance' from external module "/home/src/workspaces/project/node_modules/ky/distribution/index" but cannot be named. +index.ts:2:14 - error TS4094: Property 'brand' of exported anonymous class type may not be private or protected. + +2 export const api = ky.extend({}); +   ~~~ + + index.ts:2:14 - Add a type annotation to the variable api. + 2 export const api = ky.extend({}); +    ~~~ + +index.ts:2:14 - error TS5088: The inferred type of 'api' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. 2 export const api = ky.extend({});    ~~~ @@ -212,7 +251,7 @@ index.ts Matched by default include pattern '**/*' File is ECMAScript module because 'package.json' has field "type" with value "module" -Found 1 error in index.ts:2 +Found 2 errors in the same file, starting at: index.ts:2 tsconfig.json:: @@ -232,7 +271,16 @@ Output:: [HH:MM:SS AM] Building project 'tsconfig.json'... -index.ts:2:14 - error TS4023: Exported variable 'api' has or is using name 'KyInstance' from external module "/home/src/workspaces/project/node_modules/ky/distribution/index" but cannot be named. +index.ts:2:14 - error TS4094: Property 'brand' of exported anonymous class type may not be private or protected. + +2 export const api = ky.extend({}); +   ~~~ + + index.ts:2:14 - Add a type annotation to the variable api. + 2 export const api = ky.extend({}); +    ~~~ + +index.ts:2:14 - error TS5088: The inferred type of 'api' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. 2 export const api = ky.extend({});    ~~~ @@ -246,7 +294,7 @@ index.ts Matched by default include pattern '**/*' File is ECMAScript module because 'package.json' has field "type" with value "module" -Found 1 error in index.ts:2 +Found 2 errors in the same file, starting at: index.ts:2 tsconfig.json:: diff --git a/tsc/testdata/baselines/reference/tsc/declarationEmit/reports-dts-generation-errors.js b/tsc/testdata/baselines/reference/tsc/declarationEmit/reports-dts-generation-errors.js index 17f94f5256ff6..7d008e73cb7f7 100644 --- a/tsc/testdata/baselines/reference/tsc/declarationEmit/reports-dts-generation-errors.js +++ b/tsc/testdata/baselines/reference/tsc/declarationEmit/reports-dts-generation-errors.js @@ -5,7 +5,8 @@ Input:: import ky from 'ky'; export const api = ky.extend({}); //// [/home/src/workspaces/project/node_modules/ky/distribution/index.d.ts] *new* -type KyInstance = { +declare class KyInstance { + private brand; extend(options: Record): KyInstance; } declare const ky: KyInstance; @@ -36,7 +37,16 @@ export default ky; tsgo --explainFiles --listEmittedFiles ExitStatus:: DiagnosticsPresent_OutputsSkipped Output:: -index.ts:2:14 - error TS4023: Exported variable 'api' has or is using name 'KyInstance' from external module "/home/src/workspaces/project/node_modules/ky/distribution/index" but cannot be named. +index.ts:2:14 - error TS4094: Property 'brand' of exported anonymous class type may not be private or protected. + +2 export const api = ky.extend({}); +   ~~~ + + index.ts:2:14 - Add a type annotation to the variable api. + 2 export const api = ky.extend({}); +    ~~~ + +index.ts:2:14 - error TS5088: The inferred type of 'api' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. 2 export const api = ky.extend({});    ~~~ @@ -51,7 +61,7 @@ index.ts Matched by default include pattern '**/*' File is ECMAScript module because 'package.json' has field "type" with value "module" -Found 1 error in index.ts:2 +Found 2 errors in the same file, starting at: index.ts:2 //// [/home/src/tslibs/TS/Lib/lib.es2026.full.d.ts] *Lib* /// @@ -88,7 +98,16 @@ Edit [0]:: no change tsgo --explainFiles --listEmittedFiles ExitStatus:: DiagnosticsPresent_OutputsSkipped Output:: -index.ts:2:14 - error TS4023: Exported variable 'api' has or is using name 'KyInstance' from external module "/home/src/workspaces/project/node_modules/ky/distribution/index" but cannot be named. +index.ts:2:14 - error TS4094: Property 'brand' of exported anonymous class type may not be private or protected. + +2 export const api = ky.extend({}); +   ~~~ + + index.ts:2:14 - Add a type annotation to the variable api. + 2 export const api = ky.extend({}); +    ~~~ + +index.ts:2:14 - error TS5088: The inferred type of 'api' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. 2 export const api = ky.extend({});    ~~~ @@ -103,7 +122,7 @@ index.ts Matched by default include pattern '**/*' File is ECMAScript module because 'package.json' has field "type" with value "module" -Found 1 error in index.ts:2 +Found 2 errors in the same file, starting at: index.ts:2 //// [/home/src/workspaces/project/index.js] *rewrite with same content* @@ -121,7 +140,16 @@ Output:: [HH:MM:SS AM] Building project 'tsconfig.json'... -index.ts:2:14 - error TS4023: Exported variable 'api' has or is using name 'KyInstance' from external module "/home/src/workspaces/project/node_modules/ky/distribution/index" but cannot be named. +index.ts:2:14 - error TS4094: Property 'brand' of exported anonymous class type may not be private or protected. + +2 export const api = ky.extend({}); +   ~~~ + + index.ts:2:14 - Add a type annotation to the variable api. + 2 export const api = ky.extend({}); +    ~~~ + +index.ts:2:14 - error TS5088: The inferred type of 'api' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. 2 export const api = ky.extend({});    ~~~ @@ -139,7 +167,7 @@ index.ts [HH:MM:SS AM] Updating unchanged output timestamps of project 'tsconfig.json'... -Found 1 error in index.ts:2 +Found 2 errors in the same file, starting at: index.ts:2 //// [/home/src/workspaces/project/index.js] *rewrite with same content* //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *new* diff --git a/tsc/testdata/tests/cases/compiler/isolatedDeclarationErrorsReturnTypes.ts b/tsc/testdata/tests/cases/compiler/isolatedDeclarationErrorsReturnTypes.ts index 9843797bab0a8..750cac82a80b0 100644 --- a/tsc/testdata/tests/cases/compiler/isolatedDeclarationErrorsReturnTypes.ts +++ b/tsc/testdata/tests/cases/compiler/isolatedDeclarationErrorsReturnTypes.ts @@ -4,6 +4,18 @@ // @target: ESNext // Function Variables +export const recursiveArrow = () => recursiveArrow; +export function recursiveDeclaration() { return recursiveDeclaration; } +export const recursiveObject = { next: () => recursiveObject }; +export const recursiveTuple = [() => recursiveTuple] as const; +export const recursiveNamed = function self() { return self; }; +export const annotatedRecursiveArrow: () => typeof annotatedRecursiveArrow = () => annotatedRecursiveArrow; +export const annotatedRecursiveObject: { next: () => typeof annotatedRecursiveObject } = { + next: () => annotatedRecursiveObject, +}; +export type RecursiveLink = { value: T; next: RecursiveLink }; +export declare const recursiveLink: RecursiveLink; + export const fnExpressionConstVariable = function foo() { return 0;} export const fnArrowConstVariable = () => "S"; diff --git a/tsc/testdata/tests/cases/compiler/recursiveFunctionDeclarationSerialization.ts b/tsc/testdata/tests/cases/compiler/recursiveFunctionDeclarationSerialization.ts new file mode 100644 index 0000000000000..21f4a0718bb77 --- /dev/null +++ b/tsc/testdata/tests/cases/compiler/recursiveFunctionDeclarationSerialization.ts @@ -0,0 +1,245 @@ +// @strict: true +// @declaration: true + +// @filename: script.ts +const scriptArrow = () => scriptArrow; +const scriptExpression = function () { return scriptExpression; }; +function scriptDeclaration() { return scriptDeclaration; } + +// @filename: exported.ts +export const arrow = () => arrow; +export const expression = function () { return expression; }; +export function declaration() { return declaration; } +export const annotated: () => typeof annotated = () => annotated; +export const first = () => second; +export const second = () => first; +export const generic = (value: T) => generic; +export const finite = () => () => 1; +export const wrapped = { arrow }; +export const tuple = [arrow] as const; +export const named = function self() { return self; }; +export const broad: unknown = function self() { return self; }; +export const contextual: () => unknown = function self() { return self; }; +export const specialized = generic; +export const annotatedParameter = (value: string | number) => annotatedParameter; +export const renamedParameter = (other: number | string) => renamedParameter; +export const optionalParameter = (value?: string) => optionalParameter; +export const restParameter = (...values: string[]) => restParameter; +export const nestedReturn = () => () => nestedReturn; +export const finiteObject = { call: (value: string) => ({ value }) }; +export const finiteTuple = [(value: number) => [value] as const] as const; +export const nestedGeneric = (value: T) => ({ + call: (other: T) => [value, other] as const, +}); +export const instantiatedNested = nestedGeneric("text"); +export const objectReturn = () => ({ call: objectReturn }); +export const tupleReturn = () => [tupleReturn] as const; +export const shadowed = function self(shadowed: number) { return self; }; + +// @filename: consumer.ts +import { arrow, expression, declaration, first, generic, finite, wrapped, tuple } from "./exported"; +import { instantiatedNested, objectReturn, tupleReturn, shadowed } from "./exported"; +const a: typeof arrow = arrow()()(); +const b: typeof expression = expression()()(); +const c: typeof declaration = declaration()()(); +const d: typeof first = first()()(); +const e: typeof generic = generic(1)("text")(true); +const f: number = finite()(); +const g: typeof arrow = wrapped.arrow()(); +const h: typeof arrow = tuple[0]()(); +const invalid: number = arrow()()(); +const nestedResult: readonly [string, string] = instantiatedNested.call("other"); +instantiatedNested.call(1); +const objectCall: typeof objectReturn = objectReturn().call().call; +const tupleCall: typeof tupleReturn = tupleReturn()[0]()[0]; +const shadowedCall: typeof shadowed = shadowed(1)(2); + +// @filename: recursiveObject.ts +export function recursiveObject() { + const value = { + call: (arg: U) => value, + consume: (arg: T) => value, + }; + return value; +} + +const result = recursiveObject().call("hello").consume(1); +type IsAny = 0 extends (1 & T) ? true : false; +const notAny: false = null as unknown as IsAny; +const invalidCall: number = result.call; +result.consume("wrong"); + +// @filename: nestedNamedFunctions.ts +export const nestedObject = { recur: () => nestedObject.recur }; +export const nestedTuple = [() => nestedTuple[0]] as const; +export const object = { recur: function self() { return self; } }; +export const tuple = [function self() { return self; }] as const; +export const factory = () => function self() { return self; }; +export const method = { recur() { return method; } }; +export const accessor = { get recur() { return accessor; } }; +export function local() { + function recur() { return recur; } + return recur; +} + +// @filename: recursiveStructures.ts +export const object = { value: 1, next: () => object }; +export const method = { value: 1, next() { return method; } }; +export const accessor = { value: 1, get next() { return accessor; } }; +export const tuple = [() => tuple] as const; +export const tupleObject = [{ next: () => tupleObject }] as const; +export const array = [() => array]; +export const first = { next: () => second }; +export const second = { next: () => first }; +export const nested = { inner: { next() { return nested.inner; } } }; +export const shadowed = { next: function self(shadowed: number) { return self; } }; +export const memberTuple = [function self() { return self; }] as const; +export const memberArray = [function self() { return self; }]; +export const quoted = { "a-b": function self() { return self; } }; +export const numeric = { 0: function self() { return self; } }; +export const key = Symbol(); +export const computed = { [key]: function self() { return self; } }; +export const union = Math.random() ? { next: () => union } : undefined; + +function create(value: T) { + const result = { value, next: () => result }; + return result; +} +export const specialized = create("text"); +export const broad: unknown = { next() { return this; } }; +function createIndexed() { + const value: { [key: string]: typeof value } = {}; + return value; +} +export const indexed = createIndexed(); +function createMapped() { + const value: { [K in keyof T]: typeof value } = null!; + return value; +} +export const mapped = createMapped<{ next: unknown }>(); +function createAnnotated(value: T) { + const node: { value: T; next: () => typeof node } = { value, next: () => node }; + return node; +} +export const viaAnnotation = createAnnotated("text"); + +const objectValue: number = object.next().next().value; +const tupleValue: typeof tuple = tuple[0]()[0](); +const tupleObjectValue: typeof tupleObject = tupleObject[0].next(); +const arrayValue: typeof array = array[0]()[0](); +const nestedValue: typeof nested.inner = nested.inner.next().next(); +const specializedValue: string = specialized.next().next().value; +const invalidValue: number = specialized.next().value; + +// @filename: recursiveAnnotations.ts +declare const object: { next: typeof object }; +declare const tuple: readonly [typeof tuple]; +declare const array: Array; +declare const tupleFunction: readonly [() => typeof tupleFunction]; +declare const tupleObject: readonly [{ next: typeof tupleObject }]; +declare const objectTuple: { next: readonly [typeof objectTuple] }; +declare const mapped: { [K in "next"]: typeof mapped }; +declare const union: typeof union | undefined; +declare const conditional: true extends false ? never : typeof conditional; + +// @filename: namedReferences.ts +export type Link = { value: T; next: Link }; +export type Callable = { (value: T): Callable; link: Link }; +export type Wrapped = ( { next: Wrapped } ); +export declare const link: Link; +export declare const callable: Callable; +export const nextLink = link.next; +export const nextCallable = callable(1); +export const parenthesized = (function self() { return self; }); +export const asserted = (function self() { return self; }) satisfies () => unknown; +export const widened: () => unknown = (function self() { return self; }); +function createHidden(value: T) { + type Hidden = { value: T; next: Hidden }; + return null! as Hidden; +} +export const hiddenAlias = createHidden("text"); +export const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias }; +export const methodKey = Symbol(); +export class Methods { + static recur() { return Methods.recur; } + static "a-b"() { return Methods["a-b"]; } + static [methodKey]() { return Methods[methodKey]; } + recur() { return this.recur; } +} +export function overloaded(value: string): typeof overloaded; +export function overloaded(value: number): typeof overloaded; +export function overloaded(value: string | number) { return overloaded; } +const text: string = nextLink.next.value; +const invalid: number = nextLink.next.value; +nextCallable("wrong"); + +// @filename: hiddenReferences.ts +export class Hidden { + private static recur() { return Hidden.recur; } + static expose() { return Hidden.recur; } + protected next() { return this.next; } + expose() { return this.next; } +} + +// @filename: signatureScopes.ts +export const scoped = { + first(outer: T) { + return { + nested(inner: T) { return { outer, inner, next: scoped }; }, + sibling(inner: T) { return { outer, inner, next: scoped }; }, + }; + }, + second(value: T) { return { value, next: scoped }; }, +}; +export const numberScope = scoped.first(1); +export const stringScope = scoped.first("outer"); +const nested = numberScope.nested("inner"); +const sibling = numberScope.sibling(true); +const nestedOuter: number = nested.outer; +const nestedInner: string = nested.inner; +const siblingOuter: number = sibling.outer; +const siblingInner: boolean = sibling.inner; +const stringOuter: string = stringScope.nested(1).outer; +const again: number = nested.next.second(1).value; + +export const nestedOwner = { + make(outer: T) { + return { + nested(inner: U) { return { outer, inner, owner: nestedOwner }; }, + constrained(inner: U) { return { outer, inner, owner: nestedOwner }; }, + copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } { + return { outer, inner, owner: nestedOwner }; + }, + rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; }, + }; + }, +}; +export const nestedNumber = nestedOwner.make(1); +export const nestedString = nestedNumber.nested(true).owner.make("text").nested(2); +export const nestedBoolean = nestedString.owner.make(true).nested("inner"); +const nestedStringOuter: string = nestedString.outer; +const nestedStringInner: number = nestedString.inner; +const nestedBooleanOuter: boolean = nestedBoolean.outer; +const nestedBooleanInner: string = nestedBoolean.inner; +const constrainedOuter: number = nestedNumber.constrained(2).outer; +const constrainedInner: number = nestedNumber.constrained(2).inner; +const copiedOuter: number = nestedNumber.copied("inner").outer; +const copiedInner: string = nestedNumber.copied("inner").inner; +const restOuter: number = nestedNumber.rest(true).outer; +const restInner: boolean = nestedNumber.rest(true).inner; + +export declare const reused: { + first(...values: [T]): { value: T; next: typeof reused }; + second(value: T): { value: T; next: typeof reused }; + shadowed(reused: T): { value: T; next: typeof reused }; +}; +export const copy = reused; +const restValue: number = copy.first(1).next.second(2).value; +const shadowedValue: number = copy.shadowed(1).next; + +export type Inferred = T extends (value: infer U) => infer R + ? { [K in keyof R]: (value: U) => R[K] } + : never; +export declare const inferred: Inferred<(value: number) => { next: typeof reused }>; +export const inferredCopy = inferred; +const inferredValue: string = inferredCopy.next(1).second("text").value; From 33fb20fd400dcca113d1d33b710c35f8591063c1 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Wed, 7 Oct 2026 22:29:52 -0700 Subject: [PATCH 2/5] Unify recursive type naming during serialization Recursive values can have valid declaration types without annotations. Separate function and alias fallbacks leave equivalent constructs with different results, and broader value annotations can silently weaken the recursive type. Keep ordinary type names independent of the definitions being emitted. Share definition context across syntax reuse and structural expansion so recursive references and cycle detection agree on what is in scope. A value self-reference must cross a lazy resolution boundary, and names usable in local displays are not necessarily usable in declarations. Starting from a selected signature must not add an extra recursive unfolding merely because its containing type was not traversed. Preserve isolated declaration inference restrictions and prevent cached output from crossing incompatible recursion contexts. Captured generic substitutions must not escape into parameters bound by a re-entered signature. Otherwise declaration consumers lose valid calls even when the original source infers the correct result. Fixes 55832 --- tsc/internal/checker/checker_test.go | 2 +- tsc/internal/checker/nodebuilderimpl.go | 256 ++- tsc/internal/checker/nodebuilderscopes.go | 263 ++- tsc/internal/checker/nodecopy.go | 26 +- tsc/internal/checker/pseudotypenodebuilder.go | 14 +- tsc/internal/checker/symbolaccessibility.go | 11 +- tsc/internal/checker/utilities.go | 9 + .../tests/recursiveFunctionQuickInfo_test.go | 10 +- ...VariablesUseBeforeDef(target=es2015).types | 12 +- ...essionInClassStaticDeclarations.errors.txt | 9 - ...lassExpressionInClassStaticDeclarations.js | 9 + .../commentsClassMembers(target=es2015).js | 4 +- .../declFileTypeofFunction.errors.txt | 41 - .../compiler/declFileTypeofFunction.js | 15 + ...EmitClassMemberWithComputedPropertyName.js | 6 +- ...larationEmitUnserializableTypes.errors.txt | 5 +- .../declarationEmitUnserializableTypes.types | 34 +- ...y2(exactoptionalpropertytypes=false).types | 10 +- ...ty2(exactoptionalpropertytypes=true).types | 10 +- ...nctionExpressionReturningItself.errors.txt | 7 - .../functionExpressionReturningItself.js | 4 + .../functionExpressionReturningItself.types | 4 +- ...allOnMemberReturningClosedOverObject.types | 20 +- ...tedDeclarationErrorsReturnTypes.errors.txt | 14 +- ...isolatedDeclarationErrorsReturnTypes.types | 16 +- ...ithPrototypeNoErrorTruncationNoCrash.types | 12 +- .../compiler/nestedSpreadsAndWidening.types | 2 +- .../noCircularitySelfReferentialGetter1.types | 2 +- .../noCircularitySelfReferentialGetter2.types | 2 +- .../noCircularitySelfReferentialGetter3.types | 10 +- .../noCircularitySelfReferentialGetter4.types | 32 +- .../compiler/noImplicitThisBigThis.types | 4 +- .../compiler/recursiveConditionalCrash3.types | 4 +- .../compiler/recursiveConditionalTypes.types | 14 +- ...unctionDeclarationSerialization.errors.txt | 161 +- ...cursiveFunctionDeclarationSerialization.js | 485 +++++ ...siveFunctionDeclarationSerialization.types | 668 +++---- .../recursiveFunctionTypes.errors.txt | 4 +- .../compiler/recursiveLetConst.types | 8 +- .../compiler/recursiveTypeInference.types | 10 +- .../compiler/recursiveTypeInference2.types | 6 +- .../compiler/returnInfiniteIntersection.types | 16 +- .../thisInPropertyBoundDeclarations.types | 12 +- .../conformance/fixSignatureCaching.types | 26 +- .../conformance/functionImplementations.types | 16 +- .../newTarget.es5(target=es2015).types | 28 +- .../reference/conformance/newTarget.es6.types | 28 +- ...teClassPropertyAccessibleWithinClass.types | 18 +- ...ibleWithinNestedClass(target=es2015).types | 24 +- ...AccessibleWithinClass(target=es2015).types | 18 +- ...ibleWithinNestedClass(target=es2015).types | 24 +- ...StringWithEmbeddedFunctionExpression.types | 4 +- ...ingWithEmbeddedFunctionExpressionES6.types | 4 +- .../quickinfoVerbosityRecursiveType.baseline | 24 +- .../recursiveFunctionCallQuickInfo.baseline | 380 ++-- ...-dts-generation-errors-with-incremental.js | 28 +- .../reports-dts-generation-errors.js | 14 +- ...ursive-function-declaration-consumption.js | 1679 +++++------------ ...-dts-generation-errors-with-incremental.js | 35 +- .../reports-dts-generation-errors.js | 21 +- 60 files changed, 2242 insertions(+), 2392 deletions(-) delete mode 100644 tsc/testdata/baselines/reference/compiler/classExpressionInClassStaticDeclarations.errors.txt delete mode 100644 tsc/testdata/baselines/reference/compiler/declFileTypeofFunction.errors.txt delete mode 100644 tsc/testdata/baselines/reference/compiler/functionExpressionReturningItself.errors.txt diff --git a/tsc/internal/checker/checker_test.go b/tsc/internal/checker/checker_test.go index bcfab20058783..79f7026840934 100644 --- a/tsc/internal/checker/checker_test.go +++ b/tsc/internal/checker/checker_test.go @@ -183,7 +183,7 @@ func TestTypeToStringRecursivePrototype(t *testing.T) { display := c.TypeToStringEx(typ, node.Parent, checker.TypeFormatFlagsNoTruncation|checker.TypeFormatFlagsGenerateNamesForShadowedTypeParams, nil) t.Logf("methods=%d, bytes=%d, first method occurrences=%d", count, len(display), strings.Count(display, "m000:")) for i := range count { - assert.Equal(t, strings.Count(display, fmt.Sprintf("m%03d:", i)), 2) + assert.Equal(t, strings.Count(display, fmt.Sprintf("m%03d:", i)), 1) } }) } diff --git a/tsc/internal/checker/nodebuilderimpl.go b/tsc/internal/checker/nodebuilderimpl.go index 4592b3c656c43..25bd98bbf567b 100644 --- a/tsc/internal/checker/nodebuilderimpl.go +++ b/tsc/internal/checker/nodebuilderimpl.go @@ -45,6 +45,25 @@ type CompositeTypeCacheIdentity struct { flags nodebuilder.Flags internalFlags nodebuilder.InternalFlags inferTypeParameters CacheHashKey + definitions CacheHashKey +} + +// A reference's spelling is independent of the definition currently being emitted. +type serializationTypeName struct { + symbol *ast.Symbol + meaning ast.SymbolFlags + typeArguments []*Type + path []*Type +} + +// Definitions include standalone signatures and types emitted syntactically or structurally. +type serializationDefinition struct { + t *Type + typeId TypeId + signature *Signature + symbol *ast.Symbol + depth int + expanding bool } type NodeBuilderLinks struct { @@ -79,7 +98,6 @@ type NodeBuilderContext struct { enclosingDeclaration *ast.Node enclosingFile *ast.SourceFile inferTypeParameters []*Type - visitedTypes collections.Set[TypeId] symbolDepth map[CompositeSymbolIdentity]int trackedSymbols []*TrackedSymbolArgs mapper *TypeMapper @@ -87,6 +105,8 @@ type NodeBuilderContext struct { enclosingSymbolTypes map[ast.SymbolId]*Type suppressReportInferenceFallback bool remappedSymbolReferences map[ast.SymbolId]*ast.Symbol + definitions []serializationDefinition + deferredTypeDepth int // Lazy member boundaries, excluding eager type arguments and container elements. // per signature scope state typeParameterNames collections.CopyOnWriteMap[TypeId, *ast.Identifier] @@ -1587,10 +1607,12 @@ func (b *NodeBuilderImpl) createMappedTypeNodeFromType(t *Type) *ast.TypeNode { if mapped.declaration.NameType != nil { nameTypeNode = b.typeToTypeNode(b.ch.getNameTypeFromMappedType(t)) } + restoreDeferredTypeScope := b.enterDeferredTypeScope() templateTypeNode := b.typeToTypeNode(b.ch.removeMissingType( templateType, getMappedTypeModifiers(t)&MappedTypeModifiersIncludeOptional != 0, )) + restoreDeferredTypeScope() cleanup() result := b.f.NewMappedTypeNode( readonlyToken, @@ -1866,6 +1888,7 @@ func (b *NodeBuilderImpl) signatureToSignatureDeclarationHelper(signature *Signa var typeParameters []*ast.Node expandedParams, cleanup := b.enterSignatureScope(signature) + defer cleanup() b.ctx.approximateLength += 3 // Usually a signature contributes a few more characters than this, but 3 is the minimum @@ -1978,7 +2001,6 @@ func (b *NodeBuilderImpl) signatureToSignatureDeclarationHelper(signature *Signa // node.TypeArguments = b.f.NewNodeList(typeArguments) // } - cleanup() return node } @@ -2290,6 +2312,9 @@ func (b *NodeBuilderImpl) serializeTypeForDeclaration(declaration *ast.Declarati t = b.ch.getOptionalType(t, false) } + restoreDefinition := b.enterTypeDefinition(t, symbol, false /*expanding*/) + defer restoreDefinition() + restoreFlags := b.saveRestoreFlags() if t.flags&TypeFlagsUniqueESSymbol != 0 && t.symbol == symbol && (b.ctx.enclosingDeclaration == nil || core.Some(symbol.Declarations, func(d *ast.Declaration) bool { return ast.GetSourceFileOfNode(d) == b.ctx.enclosingFile @@ -2791,6 +2816,9 @@ func (b *NodeBuilderImpl) createTypeNodeFromObjectType(t *Type) *ast.TypeNode { return b.createMappedTypeNodeFromType(t) } + restoreDeferredTypeScope := b.enterDeferredTypeScope() + defer restoreDeferredTypeScope() + resolved := b.ch.resolveStructuredTypeMembers(t) callSigs := resolved.CallSignatures() ctorSigs := resolved.ConstructSignatures() @@ -2846,104 +2874,35 @@ func (b *NodeBuilderImpl) createTypeNodeFromObjectType(t *Type) *ast.TypeNode { return typeLiteralNode } -func getTypeAliasForTypeLiteral(c *Checker, t *Type) *ast.Symbol { - if t.symbol != nil && t.symbol.Flags&ast.SymbolFlagsTypeLiteral != 0 && t.symbol.Declarations != nil { - node := ast.WalkUpParenthesizedTypes(t.symbol.Declarations[0].Parent) - if ast.IsTypeAliasDeclaration(node) { - return c.getSymbolOfDeclaration(node) - } - } - return nil -} - -func (b *NodeBuilderImpl) shouldWriteTypeOfFunctionSymbol(symbol *ast.Symbol, typeId TypeId) (bool, *ast.Symbol) { - // `typeof C.name` can only be written when the member name is a valid identifier - isStaticMethodSymbol := symbol.Flags&ast.SymbolFlagsMethod != 0 && scanner.IsIdentifierText(symbol.Name, core.LanguageVariantStandard) && core.Some(symbol.Declarations, func(declaration *ast.Node) bool { - return ast.IsStatic(declaration) && !b.ch.isLateBindableIndexSignature(ast.GetNameOfDeclaration(declaration)) - }) - isNonLocalFunctionSymbol := false - isFunctionExpressionSymbol := false - if symbol.Flags&ast.SymbolFlagsFunction != 0 { - if symbol.Parent != nil { - isNonLocalFunctionSymbol = true - } else { - for _, declaration := range symbol.Declarations { - if declaration.Parent.Kind == ast.KindSourceFile || declaration.Parent.Kind == ast.KindModuleBlock { - isNonLocalFunctionSymbol = true - break - } - if ast.IsFunctionExpressionOrArrowFunction(declaration) && ast.IsVariableDeclaration(declaration.Parent) && - ast.IsVariableDeclarationList(declaration.Parent.Parent) && ast.IsVariableStatement(declaration.Parent.Parent.Parent) && - declaration.Parent.Parent.Parent.Parent != nil && - (declaration.Parent.Parent.Parent.Parent.Kind == ast.KindSourceFile || declaration.Parent.Parent.Parent.Parent.Kind == ast.KindModuleBlock) { - isNonLocalFunctionSymbol = true - isFunctionExpressionSymbol = true - break - } - } - } - } - if isStaticMethodSymbol || isNonLocalFunctionSymbol { - if isFunctionExpressionSymbol && symbol.ValueDeclaration != nil && symbol.ValueDeclaration.Parent != nil && symbol.ValueDeclaration.Parent != b.ctx.enclosingDeclaration { - symbol = b.ch.getMergedSymbol(symbol.ValueDeclaration.Parent.Symbol()) - } - // typeof is allowed only for static/non local functions - return (b.ctx.flags&nodebuilder.FlagsUseTypeOfFunction != 0 || b.ctx.visitedTypes.Has(typeId)) && // it is type of the symbol uses itself recursively - (b.ctx.flags&nodebuilder.FlagsUseStructuralFallback == 0 || b.ch.IsValueSymbolAccessible(symbol, b.ctx.enclosingDeclaration)), symbol // And the build is going to succeed without visibility error or there is no structural fallback allowed - } - return false, symbol -} - func (b *NodeBuilderImpl) createAnonymousTypeNode(t *Type) *ast.TypeNode { return b.createAnonymousTypeNodeEx(t, false, false) } -func (b *NodeBuilderImpl) shouldEmitTypeOfSymbol(forceExpansion bool, forceClassExpansion bool, isInstanceType ast.SymbolFlags, symbol *ast.Symbol, typeId TypeId) (bool, *ast.Symbol) { +func (b *NodeBuilderImpl) shouldEmitTypeOfSymbol(forceExpansion bool, forceClassExpansion bool, isInstanceType ast.SymbolFlags, symbol *ast.Symbol) bool { if forceExpansion { - return false, symbol + return false } - nonFunctionResult := symbol.Flags&ast.SymbolFlagsClass != 0 && !forceClassExpansion && b.ch.getBaseTypeVariableOfClass(symbol) == nil && !(symbol.ValueDeclaration != nil && ast.IsClassLike(symbol.ValueDeclaration) && b.ctx.flags&nodebuilder.FlagsWriteClassExpressionAsTypeLiteral != 0 && (!ast.IsClassDeclaration(symbol.ValueDeclaration) || b.ch.IsSymbolAccessible(symbol, b.ctx.enclosingDeclaration, isInstanceType, false /*shouldComputeAliasesToMakeVisible*/).Accessibility != printer.SymbolAccessibilityAccessible)) || symbol.Flags&(ast.SymbolFlagsEnum|ast.SymbolFlagsValueModule) != 0 - if nonFunctionResult { - return true, symbol + if symbol.Flags&ast.SymbolFlagsClass != 0 && !forceClassExpansion && b.ch.getBaseTypeVariableOfClass(symbol) == nil { + declaration := symbol.ValueDeclaration + if declaration == nil || !ast.IsClassLike(declaration) || b.ctx.flags&nodebuilder.FlagsWriteClassExpressionAsTypeLiteral == 0 { + return true + } + if ast.IsClassDeclaration(declaration) { + accessibility := b.ch.IsSymbolAccessible(symbol, b.ctx.enclosingDeclaration, isInstanceType, false /*shouldComputeAliasesToMakeVisible*/) + if accessibility.Accessibility == printer.SymbolAccessibilityAccessible { + return true + } + } } - return b.shouldWriteTypeOfFunctionSymbol(symbol, typeId) + return symbol.Flags&(ast.SymbolFlagsEnum|ast.SymbolFlagsValueModule) != 0 } func (b *NodeBuilderImpl) createAnonymousTypeNodeEx(t *Type, forceClassExpansion bool, forceExpansion bool) *ast.TypeNode { - typeId := t.id symbol := t.symbol if symbol != nil { isInstantiationExpressionType := t.objectFlags&ObjectFlagsInstantiationExpressionType != 0 if isInstantiationExpressionType { - instantiationExpressionType := t.AsInstantiationExpressionType() - existing := instantiationExpressionType.node - // instantiationExpressionType.node is unreliable for constituents of unions and intersections. - // declare const Err: typeof ErrImpl & (() => T); - // type ErrAlias = typeof Err; - // declare const e: ErrAlias; - // ErrAlias = typeof Err = typeof ErrImpl & (() => number) - // The problem is each constituent of the intersection will be associated with typeof Err - // And when extracting a type for typeof ErrImpl from typeof Err does not make sense. - if ast.IsTypeQueryNode(existing) && b.getTypeFromTypeNode(existing, false) == t { - // Guard against unbounded recursion when the existing typeof node fails to be reused - // (e.g. its entity name isn't accessible from this scope) and the recovery boundary's - // fallback re-enters typeToTypeNode with the very same instantiation type, which would - // in turn try to reuse the same node again. Mark the type as visited around the reuse - // attempt so the inner recursion bottoms out via the visitedTypes guard below. - if b.ctx.visitedTypes.Has(typeId) { - return b.createCyclicStructurePlaceholder() - } - b.ctx.visitedTypes.Add(typeId) - typeNode := b.tryReuseExistingNonParameterTypeNode(existing, t, nil, nil) - b.ctx.visitedTypes.Delete(typeId) - if typeNode != nil { - return typeNode - } - } - if b.ctx.visitedTypes.Has(typeId) { - return b.createCyclicStructurePlaceholder() - } - return b.visitAndTransformType(t, (*NodeBuilderImpl).createTypeNodeFromObjectType) + return b.visitType(t, (*NodeBuilderImpl).createTypeNodeFromInstantiationExpressionType) } var isInstanceType ast.SymbolFlags if isClassInstanceSide(b.ch, t) { @@ -2957,29 +2916,24 @@ func (b *NodeBuilderImpl) createAnonymousTypeNodeEx(t *Type, forceClassExpansion // // Instance and static types share the same symbol; only add 'typeof' for the static side. // return b.symbolToTypeNode(symbol, isInstanceType, nil) // } else - if ok, symbol := b.shouldEmitTypeOfSymbol(forceExpansion, forceClassExpansion, isInstanceType, symbol, typeId); ok { - if b.shouldExpandType(t, false /*isAlias*/) { - b.ctx.depth++ - } else { - return b.symbolToTypeNode(symbol, isInstanceType, nil) + var name serializationTypeName + if b.shouldEmitTypeOfSymbol(forceExpansion, forceClassExpansion, isInstanceType, symbol) { + name = serializationTypeName{symbol: symbol, meaning: isInstanceType} + } else if !forceExpansion && b.ctx.flags&nodebuilder.FlagsUseTypeOfFunction != 0 { + candidate := b.getSerializationValueName(t) + if b.prefersTypeOfFunction(t, candidate) && b.isSerializationTypeNameAccessible(candidate) { + name = candidate } } - if b.ctx.visitedTypes.Has(typeId) { - // If type is an anonymous type literal in a type alias declaration, use type alias name - typeAlias := getTypeAliasForTypeLiteral(b.ch, t) - if typeAlias != nil { - // The specified symbol flags need to be reinterpreted as type flags - return b.symbolToTypeNode(typeAlias, ast.SymbolFlagsType, nil) + if name.symbol != nil { + if b.shouldExpandType(t, false /*isAlias*/) { + b.ctx.depth++ } else { - return b.createCyclicStructurePlaceholder() + return b.serializationTypeNameToNode(name) } - } else { - return b.visitAndTransformType(t, (*NodeBuilderImpl).createTypeNodeFromObjectType) } + return b.visitAndTransformType(t, (*NodeBuilderImpl).createTypeNodeFromObjectType) } else if t.objectFlags&ObjectFlagsReverseMapped != 0 && b.ctx.flags&nodebuilder.FlagsAllowAnonymousIdentifier == 0 { - if b.ctx.visitedTypes.Has(typeId) { - return b.createCyclicStructurePlaceholder() - } return b.visitAndTransformType(t, (*NodeBuilderImpl).createTypeNodeFromObjectType) } else { // Reverse mapped types use property and index signature placeholders for display. @@ -2987,6 +2941,17 @@ func (b *NodeBuilderImpl) createAnonymousTypeNodeEx(t *Type, forceClassExpansion } } +func (b *NodeBuilderImpl) createTypeNodeFromInstantiationExpressionType(t *Type) *ast.TypeNode { + existing := t.AsInstantiationExpressionType().node + // Constituents of a union or intersection may share the whole expression's node. + if ast.IsTypeQueryNode(existing) && b.getTypeFromTypeNode(existing, false) == t { + if node := b.tryReuseExistingNonParameterTypeNode(existing, t, nil, nil); node != nil { + return node + } + } + return b.transformType(t, (*NodeBuilderImpl).createTypeNodeFromObjectType) +} + func (b *NodeBuilderImpl) getTypeFromTypeNode(node *ast.TypeNode, noMappedTypes bool) *Type { // !!! noMappedTypes optional param support if node.Parent == nil { @@ -3006,9 +2971,6 @@ func (b *NodeBuilderImpl) getTypeFromTypeNode(node *ast.TypeNode, noMappedTypes func (b *NodeBuilderImpl) typeToTypeNodeOrCircularityElision(t *Type) *ast.TypeNode { if t.flags&TypeFlagsUnion != 0 { - if b.ctx.visitedTypes.Has(t.id) { - return b.createCyclicStructurePlaceholder() - } return b.visitAndTransformType(t, (*NodeBuilderImpl).typeToTypeNode) } return b.typeToTypeNode(t) @@ -3036,10 +2998,9 @@ func (b *NodeBuilderImpl) conditionalTypeToTypeNode(_t *Type) *ast.TypeNode { b.ctx.approximateLength += 37 // 15 each for two added conditionals, 7 for an added infer type newMapper := prependTypeMapping(t.root.checkType, newParam, t.mapper) - saveInferTypeParameters := b.ctx.inferTypeParameters - b.ctx.inferTypeParameters = t.root.inferTypeParameters + restoreInferTypeParameters := b.enterInferTypeParameterScope(t.root.inferTypeParameters) extendsTypeNode := b.typeToTypeNode(b.ch.instantiateType(t.root.extendsType, newMapper)) - b.ctx.inferTypeParameters = saveInferTypeParameters + restoreInferTypeParameters() trueTypeNode := b.typeToTypeNodeOrCircularityElision(b.ch.instantiateType(b.getTypeFromTypeNode(t.root.node.TrueType, false), newMapper)) falseTypeNode := b.typeToTypeNodeOrCircularityElision(b.ch.instantiateType(b.getTypeFromTypeNode(t.root.node.FalseType, false), newMapper)) @@ -3059,10 +3020,9 @@ func (b *NodeBuilderImpl) conditionalTypeToTypeNode(_t *Type) *ast.TypeNode { syntheticTrueNode := b.f.NewConditionalTypeNode(b.f.NewTypeReferenceNode(name.Clone(b.f), nil), b.f.DeepCloneNode(checkTypeNode), innerCheckConditionalNode, b.f.NewKeywordTypeNode(ast.KindNeverKeyword)) return b.f.NewConditionalTypeNode(checkTypeNode, syntheticExtendsNode, syntheticTrueNode, b.f.NewKeywordTypeNode(ast.KindNeverKeyword)) } - saveInferTypeParameters := b.ctx.inferTypeParameters - b.ctx.inferTypeParameters = t.root.inferTypeParameters + restoreInferTypeParameters := b.enterInferTypeParameterScope(t.root.inferTypeParameters) extendsTypeNode := b.typeToTypeNode(t.extendsType) - b.ctx.inferTypeParameters = saveInferTypeParameters + restoreInferTypeParameters() trueTypeNode := b.typeToTypeNodeOrCircularityElision(b.ch.getTrueTypeFromConditionalType(_t)) falseTypeNode := b.typeToTypeNodeOrCircularityElision(b.ch.getFalseTypeFromConditionalType(_t)) return b.f.NewConditionalTypeNode(checkTypeNode, extendsTypeNode, trueTypeNode, falseTypeNode) @@ -3231,21 +3191,31 @@ func (b *NodeBuilderImpl) typeReferenceToTypeNode(t *Type) *ast.TypeNode { } } +func (b *NodeBuilderImpl) visitType(t *Type, transform func(b *NodeBuilderImpl, t *Type) *ast.TypeNode) *ast.TypeNode { + typeId := b.serializationTypeId(t) + for _, definition := range b.ctx.definitions { + if definition.expanding && b.isSameSerializationType(t, typeId, definition) { + return b.createCyclicStructurePlaceholder() + } + } + restoreDefinition := b.enterTypeDefinition(t, nil, true /*expanding*/) + defer restoreDefinition() + return transform(b, t) +} + func (b *NodeBuilderImpl) visitAndTransformType(t *Type, transform func(b *NodeBuilderImpl, t *Type) *ast.TypeNode) *ast.TypeNode { + return b.visitType(t, func(b *NodeBuilderImpl, t *Type) *ast.TypeNode { + return b.transformType(t, transform) + }) +} + +func (b *NodeBuilderImpl) transformType(t *Type, transform func(b *NodeBuilderImpl, t *Type) *ast.TypeNode) *ast.TypeNode { if b.checkTruncationLength() { return b.createElidedInformationPlaceholder() } - typeId := t.id + typeId := b.serializationTypeId(t) isArrayOrTuple := b.ch.isArrayOrTupleType(t) - if isArrayOrTuple { - // Deferred and regular references share a cycle identity. - typeId = b.ch.createTypeReference(t.Target(), b.ch.getTypeArguments(t)).id - } - if b.ctx.visitedTypes.Has(typeId) { - return b.createCyclicStructurePlaceholder() - } - isConstructorObject := t.objectFlags&ObjectFlagsAnonymous != 0 && t.symbol != nil && t.symbol.Flags&ast.SymbolFlagsClass != 0 var id *CompositeSymbolIdentity switch { @@ -3269,11 +3239,31 @@ func (b *NodeBuilderImpl) visitAndTransformType(t *Type, transform func(b *NodeB flags: b.ctx.flags, internalFlags: b.ctx.internalFlags, } - if len(b.ctx.inferTypeParameters) != 0 { + // Expansion must recompute canIncreaseExpansionDepth instead of reusing cached output. + canUseCache := b.ctx.maxExpansionDepth < 0 + if canUseCache && len(b.ctx.inferTypeParameters) != 0 { key.inferTypeParameters = getTypeListKey(b.ctx.inferTypeParameters) } - // Don't rely on type cache if we're expanding a type, because we need to compute `canIncreaseExpansionDepth`. - canUseCache := b.ctx.maxExpansionDepth < 0 + if canUseCache && len(b.ctx.definitions) != 0 { + // Unnamed definitions matter too: they determine where cyclic output is elided. + var definitions keyBuilder + for _, definition := range b.ctx.definitions { + definitions.writeUint32(uint32(definition.typeId)) + if definition.signature != nil { + definitions.writeUint32(uint32(definition.signature.id)) + } else { + definitions.writeUint32(0) + } + if definition.symbol != nil { + definitions.writeSymbol(definition.symbol) + } else { + definitions.writeUint64(0) + } + definitions.writeByte(core.IfElse(definition.expanding, byte(1), byte(0))) + definitions.writeByte(core.IfElse(b.ctx.deferredTypeDepth > definition.depth, byte(1), byte(0))) + } + key.definitions = definitions.hash() + } if canUseCache && b.ctx.enclosingDeclaration != nil && b.links.Has(b.ctx.enclosingDeclaration) { links := b.links.Get(b.ctx.enclosingDeclaration) cachedResult, ok := links.serializedTypes[key] @@ -3312,7 +3302,6 @@ func (b *NodeBuilderImpl) visitAndTransformType(t *Type, transform func(b *NodeB } b.ctx.symbolDepth[*id] = depth + 1 } - b.ctx.visitedTypes.Add(typeId) prevTrackedSymbols := b.ctx.trackedSymbols b.ctx.trackedSymbols = nil startLength := b.ctx.approximateLength @@ -3330,7 +3319,6 @@ func (b *NodeBuilderImpl) visitAndTransformType(t *Type, transform func(b *NodeB trackedSymbols: b.ctx.trackedSymbols, } } - b.ctx.visitedTypes.Delete(typeId) if id != nil { b.ctx.symbolDepth[*id] = depth } @@ -3516,21 +3504,19 @@ func (b *NodeBuilderImpl) typeToTypeNode(t *Type) *ast.TypeNode { if inTypeAlias == 0 && t.alias != nil && (b.ctx.flags&nodebuilder.FlagsUseAliasDefinedOutsideCurrentScope != 0 || b.ch.IsTypeSymbolAccessible(t.alias.Symbol(), b.ctx.enclosingDeclaration)) { // If we should expand this type alias, skip the alias and fall through to expand the underlying type if !b.shouldExpandType(t, true /*isAlias*/) { - sym := t.alias.Symbol() - typeArgumentNodes := b.mapToTypeNodes(t.alias.TypeArguments(), false /*isBareList*/) - if isReservedMemberName(sym.Name) && sym.Flags&ast.SymbolFlagsClass == 0 { - return b.f.NewTypeReferenceNode(b.f.NewIdentifier(""), typeArgumentNodes) - } - if typeArgumentNodes != nil && len(typeArgumentNodes.Nodes) == 1 && sym == b.ch.globalArrayType.symbol { - return b.f.NewArrayTypeNode(typeArgumentNodes.Nodes[0]) - } - return b.symbolToTypeNode(sym, ast.SymbolFlagsType, typeArgumentNodes) + return b.serializationTypeNameToNode(serializationTypeName{ + symbol: t.alias.Symbol(), meaning: ast.SymbolFlagsType, typeArguments: t.alias.TypeArguments(), + }) } // Expanding: increment depth and process the underlying type b.ctx.depth++ defer func() { b.ctx.depth-- }() } + if name := b.getTypeDefinitionReference(t); name.symbol != nil { + return b.serializationTypeNameToNode(name) + } + objectFlags := t.objectFlags if objectFlags&ObjectFlagsReference != 0 { diff --git a/tsc/internal/checker/nodebuilderscopes.go b/tsc/internal/checker/nodebuilderscopes.go index 59b5fcd479b55..ea1f07b8b0973 100644 --- a/tsc/internal/checker/nodebuilderscopes.go +++ b/tsc/internal/checker/nodebuilderscopes.go @@ -1,13 +1,17 @@ package checker import ( + "slices" + "github.com/microsoft/TypeScript/tsc/internal/ast" "github.com/microsoft/TypeScript/tsc/internal/core" "github.com/microsoft/TypeScript/tsc/internal/debug" + "github.com/microsoft/TypeScript/tsc/internal/jsnum" "github.com/microsoft/TypeScript/tsc/internal/nodebuilder" + "github.com/microsoft/TypeScript/tsc/internal/scanner" ) -func cloneNodeBuilderContext(context *NodeBuilderContext) func() { +func enterTypeParameterNameScope(context *NodeBuilderContext) func() { // Make type parameters created within this context not consume the name outside this context // The symbol serializer ends up creating many sibling scopes that all need "separate" contexts when // it comes to naming things - within a normal `typeToTypeNode` call, the node builder only ever descends @@ -50,14 +54,256 @@ func (b *NodeBuilderImpl) addSymbolTypeToContext(symbol *ast.Symbol, t *Type) fu } } +func (b *NodeBuilderImpl) serializationTypeId(t *Type) TypeId { + if b.ch.isArrayOrTupleType(t) { + // Deferred and regular references share a serialization identity. + return b.ch.createTypeReference(t.Target(), b.ch.getTypeArguments(t)).id + } + return t.id +} + +func (b *NodeBuilderImpl) enterTypeDefinition(t *Type, symbol *ast.Symbol, expanding bool) func() { + return b.enterDefinition(serializationDefinition{t: t, typeId: b.serializationTypeId(t), symbol: symbol, expanding: expanding}) +} + +func (b *NodeBuilderImpl) enterDefinition(definition serializationDefinition) func() { + definitions := b.ctx.definitions + definition.depth = b.ctx.deferredTypeDepth + b.ctx.definitions = append(definitions, definition) + return func() { b.ctx.definitions = definitions } +} + +// Lexical scopes alone do not guard back-references; only lazy member boundaries do. +func (b *NodeBuilderImpl) enterDeferredTypeScope() func() { + depth := b.ctx.deferredTypeDepth + b.ctx.deferredTypeDepth++ + return func() { b.ctx.deferredTypeDepth = depth } +} + +func (b *NodeBuilderImpl) enterInferTypeParameterScope(typeParameters []*Type) func() { + inferTypeParameters := b.ctx.inferTypeParameters + b.ctx.inferTypeParameters = typeParameters + return func() { b.ctx.inferTypeParameters = inferTypeParameters } +} + +func (b *NodeBuilderImpl) isSameSerializationType(t *Type, typeId TypeId, definition serializationDefinition) bool { + if typeId == definition.typeId { + return true + } + other := definition.t + // Regular and widened objects may have different IDs without changing shape. + // Do not collapse distinct generic instantiations. + return t.objectFlags&(ObjectFlagsAnonymous|ObjectFlagsInstantiated) == ObjectFlagsAnonymous && + other.objectFlags&(ObjectFlagsAnonymous|ObjectFlagsInstantiated) == ObjectFlagsAnonymous && + t.symbol != nil && t.symbol == other.symbol && b.ch.isTypeIdenticalTo(t, other) +} + +func (b *NodeBuilderImpl) getTypeDefinitionReference(t *Type) serializationTypeName { + var typeId TypeId + for _, definition := range b.ctx.definitions { + if b.ctx.deferredTypeDepth <= definition.depth { + continue + } + if signature := definition.signature; signature != nil { + if t.objectFlags&ObjectFlagsAnonymous == 0 { + continue + } + kind := core.IfElse(signature.flags&SignatureFlagsConstruct != 0, SignatureKindConstruct, SignatureKindCall) + if !slices.Contains(b.ch.getSignaturesOfType(t, kind), signature) { + continue + } + } else { + if typeId == 0 { + typeId = b.serializationTypeId(t) + } + if !b.isSameSerializationType(t, typeId, definition) { + continue + } + } + var name serializationTypeName + if symbol := definition.symbol; symbol != nil { + if symbol.Flags&(ast.SymbolFlagsProperty|ast.SymbolFlagsMethod|ast.SymbolFlagsAccessor) != 0 { + name = b.getSerializationTypeNameFromDeclaration(t, symbol.ValueDeclaration) + } else { + name = b.getValueTypeName(t, symbol, nil) + } + } else { + name = b.getSerializationValueName(t) + } + if name.symbol != nil && b.isSerializationTypeNameAccessible(name) { + return name + } + } + return serializationTypeName{} +} + +func (b *NodeBuilderImpl) getValueTypeName(t *Type, symbol *ast.Symbol, path []*Type) serializationTypeName { + if symbol == nil || symbol.Flags&ast.SymbolFlagsValue == 0 || t.flags&TypeFlagsStructuredOrInstantiable == 0 || + IsPrivateIdentifierSymbol(symbol) || b.ctx.flags&nodebuilder.FlagsUseStructuralFallback != 0 && getDeclarationModifierFlagsFromSymbol(symbol)&(ast.ModifierFlagsPrivate|ast.ModifierFlagsProtected) != 0 || + !scanner.IsIdentifierText(symbol.Name, core.LanguageVariantStandard) { + return serializationTypeName{} + } + // Formatting a diagnostic must not restart inference for a declaration + // whose type is still being resolved. + namedType := b.ch.valueSymbolLinks.Get(symbol).resolvedType + if namedType == nil { + return serializationTypeName{} + } + for _, index := range path { + property := b.ch.getPropertyOfType(namedType, getPropertyNameFromType(index)) + if property != nil { + if IsPrivateIdentifierSymbol(property) || b.ctx.flags&nodebuilder.FlagsUseStructuralFallback != 0 && getDeclarationModifierFlagsFromSymbol(property)&(ast.ModifierFlagsPrivate|ast.ModifierFlagsProtected) != 0 || + b.ch.findResolutionCycleStartIndex(property, TypeSystemPropertyNameType) >= 0 { + return serializationTypeName{} + } + } + namedType = b.ch.getIndexedAccessType(namedType, index) + } + if b.serializationTypeId(namedType) != b.serializationTypeId(t) { + return serializationTypeName{} + } + return serializationTypeName{symbol: symbol, meaning: ast.SymbolFlagsValue, path: path} +} + +func (b *NodeBuilderImpl) getSerializationValueName(t *Type) serializationTypeName { + if t.objectFlags&ObjectFlagsAnonymous == 0 || t.symbol == nil { + return serializationTypeName{} + } + node := t.symbol.ValueDeclaration + if node != nil && (ast.IsExpression(node) || ast.IsClassElement(node) || ast.IsPropertyAssignment(node)) { + if name := b.getSerializationTypeNameFromDeclaration(t, node); name.symbol != nil { + return name + } + } + return b.getValueTypeName(t, t.symbol, nil) +} + +func (b *NodeBuilderImpl) isSerializationTypeNameAccessible(name serializationTypeName) bool { + if b.ctx.flags&nodebuilder.FlagsForbidIndexedAccessSymbolReferences != 0 && + (len(name.path) != 0 || name.symbol.Flags&(ast.SymbolFlagsProperty|ast.SymbolFlagsMethod|ast.SymbolFlagsAccessor) != 0) { + return false + } + // Displays may use lexical names whose declarations cannot be exposed in a .d.ts. + if b.ctx.flags&nodebuilder.FlagsUseStructuralFallback == 0 && b.ctx.enclosingDeclaration != nil && + b.ch.resolveName(b.ctx.enclosingDeclaration, name.symbol.Name, name.meaning, nil /*nameNotFoundMessage*/, false /*isUse*/, false /*excludeGlobals*/) == name.symbol { + return true + } + return b.ch.IsValueSymbolAccessible(name.symbol, b.ctx.enclosingDeclaration) +} + +func (b *NodeBuilderImpl) serializationTypeNameToNode(name serializationTypeName) *ast.TypeNode { + typeArguments := b.mapToTypeNodes(name.typeArguments, false /*isBareList*/) + if name.meaning == ast.SymbolFlagsType { + if isReservedMemberName(name.symbol.Name) && name.symbol.Flags&ast.SymbolFlagsClass == 0 { + return b.f.NewTypeReferenceNode(b.f.NewIdentifier(""), typeArguments) + } + if typeArguments != nil && len(typeArguments.Nodes) == 1 && name.symbol == b.ch.globalArrayType.symbol { + return b.f.NewArrayTypeNode(typeArguments.Nodes[0]) + } + } + node := b.symbolToTypeNode(name.symbol, name.meaning, typeArguments) + restoreFlags := b.saveRestoreFlags() + b.ctx.flags &^= nodebuilder.FlagsAllowUniqueESSymbolType + for _, index := range name.path { + b.ctx.approximateLength += 2 + node = b.f.NewIndexedAccessTypeNode(node, b.typeToTypeNode(index)) + } + restoreFlags() + return node +} + +func (b *NodeBuilderImpl) prefersTypeOfFunction(t *Type, name serializationTypeName) bool { + if name.symbol == nil || name.meaning != ast.SymbolFlagsValue || t.symbol == nil { + return false + } + symbol := t.symbol + if symbol.Flags&ast.SymbolFlagsMethod != 0 { + return core.Some(symbol.Declarations, ast.IsStatic) + } + if symbol.Flags&ast.SymbolFlagsFunction == 0 || len(name.path) != 0 { + return false + } + declaration := name.symbol.ValueDeclaration + if declaration == nil || ast.IsVariableDeclaration(declaration) && declaration == b.ctx.enclosingDeclaration { + return false + } + if ast.IsVariableDeclaration(declaration) { + if declaration.Parent == nil || !ast.IsVariableDeclarationList(declaration.Parent) || declaration.Parent.Parent == nil { + return false + } + declaration = declaration.Parent.Parent + } + return symbol.Parent != nil || declaration.Parent != nil && + (declaration.Parent.Kind == ast.KindSourceFile || declaration.Parent.Kind == ast.KindModuleBlock) +} + +func (b *NodeBuilderImpl) getSerializationTypeNameFromDeclaration(t *Type, node *ast.Node) serializationTypeName { + var path []*Type + for node != nil { + if declaration := getAssignedValueDeclaration(node); declaration != nil && !ast.IsStatic(declaration) { + slices.Reverse(path) + return b.getValueTypeName(t, b.ch.getSymbolOfDeclaration(declaration), path) + } + parent := walkUpOuterExpressions(node) + if parent == nil { + return serializationTypeName{} + } + switch { + case ast.IsPropertyDeclaration(parent): + node = parent + case ast.IsPropertyAssignment(parent): + index := b.ch.getLiteralTypeFromPropertyName(parent.Name()) + if !isTypeUsableAsPropertyName(index) { + return serializationTypeName{} + } + path = append(path, index) + node = parent.Parent + case ast.IsObjectLiteralExpression(parent), ast.IsClassLike(parent): + if node.Name() == nil { + return serializationTypeName{} + } + index := b.ch.getLiteralTypeFromPropertyName(node.Name()) + if !isTypeUsableAsPropertyName(index) { + return serializationTypeName{} + } + path = append(path, index) + if ast.IsClassDeclaration(parent) { + slices.Reverse(path) + return b.getValueTypeName(t, b.ch.getSymbolOfDeclaration(parent), path) + } + node = parent + case ast.IsArrayLiteralExpression(parent): + elements := parent.AsArrayLiteralExpression().Elements.Nodes + index := slices.IndexFunc(elements, func(element *ast.Node) bool { + return ast.SkipOuterExpressions(element, ast.OEKAll) == node + }) + if index < 0 || core.Some(elements[:index], ast.IsSpreadElement) { + return serializationTypeName{} + } + path = append(path, b.ch.getNumberLiteralType(jsnum.Number(index))) + node = parent + default: + return serializationTypeName{} + } + } + return serializationTypeName{} +} + func (b *NodeBuilderImpl) enterSignatureScope(signature *Signature) (expandedParams []*ast.Symbol, cleanup func()) { + restoreDefinition := b.enterDefinition(serializationDefinition{signature: signature}) + restoreDeferredTypeScope := b.enterDeferredTypeScope() expandedParams = b.ch.getExpandedParameters(signature, true /*skipUnionExpanding*/)[0] - cleanup = b.enterNewScope(signature.declaration, expandedParams, signature.typeParameters, signature.parameters, signature.mapper) + restoreScope := b.enterNewScope(signature.declaration, expandedParams, signature.typeParameters, signature.parameters, signature.mapper) + cleanup = func() { + restoreScope() + restoreDeferredTypeScope() + restoreDefinition() + } return expandedParams, cleanup } func (b *NodeBuilderImpl) enterNewScope(declaration *ast.Node, expandedParams []*ast.Symbol, typeParameters []*Type, originalParameters []*ast.Symbol, mapper *TypeMapper) func() { - cleanupContext := cloneNodeBuilderContext(b.ctx) + cleanupNames := enterTypeParameterNameScope(b.ctx) // For regular function/method declarations, the enclosing declaration will already be signature.declaration, // so this is a no-op, but for arrow functions and function expressions, the enclosing declaration will be // the declaration that the arrow function / function expression is assigned to. @@ -77,6 +323,15 @@ func (b *NodeBuilderImpl) enterNewScope(declaration *ast.Node, expandedParams [] if mapper != nil { b.ctx.mapper = mapper } + if mapper := b.ctx.mapper; mapper != nil && len(typeParameters) != 0 { + // Bound type parameters shadow inherited substitutions; captured parameters do not. + b.ctx.mapper = newFunctionTypeMapper(func(t *Type) *Type { + if slices.Contains(typeParameters, t) { + return t + } + return mapper.Map(t) + }) + } if b.ctx.enclosingDeclaration != nil && declaration != nil { // As a performance optimization, reuse the same fake scope within this chain. // This is especially needed when we are working on an excessively deep type; @@ -244,7 +499,7 @@ func (b *NodeBuilderImpl) enterNewScope(declaration *ast.Node, expandedParams [] if cleanupTypeParams != nil { cleanupTypeParams() } - cleanupContext() + cleanupNames() b.ctx.enclosingDeclaration = oldEnclosingDecl b.ctx.mapper = oldMapper } diff --git a/tsc/internal/checker/nodecopy.go b/tsc/internal/checker/nodecopy.go index 5b2a0739f7612..a1c0d4cdae9ec 100644 --- a/tsc/internal/checker/nodecopy.go +++ b/tsc/internal/checker/nodecopy.go @@ -830,23 +830,21 @@ func getExistingNodeTreeVisitor(b *NodeBuilderImpl, bound *recoveryBoundary) *as return node } recover_ := bound.startRecoveryScope() - introducesNewScope := ast.IsFunctionLike(node) || ast.IsMappedTypeNode(node) var exit func() - if introducesNewScope { - var params []*ast.Symbol - var typeParams []*Type - if ast.IsFunctionLike(node) { - sig := b.ch.getSignatureFromDeclaration(node) - params = sig.parameters - typeParams = sig.typeParameters - } else if ast.IsConditionalTypeNode(node) { // !!! TODO: impossible in combination with the scope start check??? - typeParams = b.ch.getInferTypeParameters(node) - } else if ast.IsMappedTypeNode(node) { - typeParams = []*Type{b.ch.getDeclaredTypeOfTypeParameter(b.ch.getSymbolOfDeclaration(node.AsMappedTypeNode().TypeParameter))} - } - exit = b.enterNewScope(node, params, typeParams, nil, nil) + if ast.IsFunctionLike(node) { + _, exit = b.enterSignatureScope(b.ch.getSignatureFromDeclaration(node)) + } else if ast.IsMappedTypeNode(node) { + typeParams := []*Type{b.ch.getDeclaredTypeOfTypeParameter(b.ch.getSymbolOfDeclaration(node.AsMappedTypeNode().TypeParameter))} + exit = b.enterNewScope(node, nil, typeParams, nil, nil) + } + var exitDeferredTypeScope func() + if ast.IsTypeLiteralNode(node) || node.Parent != nil && ast.IsMappedTypeNode(node.Parent) && node.Parent.Type() == node { + exitDeferredTypeScope = b.enterDeferredTypeScope() } result := visitExistingNodeTreeSymbolsWorker(node) + if exitDeferredTypeScope != nil { + exitDeferredTypeScope() + } if exit != nil { exit() } diff --git a/tsc/internal/checker/pseudotypenodebuilder.go b/tsc/internal/checker/pseudotypenodebuilder.go index 9daf4b686fc43..7366ec0a51741 100644 --- a/tsc/internal/checker/pseudotypenodebuilder.go +++ b/tsc/internal/checker/pseudotypenodebuilder.go @@ -40,6 +40,10 @@ func (b *NodeBuilderImpl) pseudoTypeToNodeWithCheckerFallback(t *pseudochecker.P b.ctx.suppressReportInferenceFallback = oldSuppress return result } + } else if (t.Kind == pseudochecker.PseudoTypeKindSingleCallSignature || t.Kind == pseudochecker.PseudoTypeKindObjectLiteral) && + b.getTypeDefinitionReference(checkerType).symbol != nil { + // Reusing structural syntax must not unfold an already available back-reference. + return b.typeToTypeNode(checkerType) } return b.pseudoTypeToNode(t) } @@ -47,6 +51,10 @@ func (b *NodeBuilderImpl) pseudoTypeToNodeWithCheckerFallback(t *pseudochecker.P // Maps a pseudochecker's pseudotypes into ast nodes and reports any inference fallback errors the pseudotype structure implies func (b *NodeBuilderImpl) pseudoTypeToNode(t *pseudochecker.PseudoType) *ast.Node { debug.Assert(t != nil, "Attempted to serialize nil pseudotype") + if t.Kind == pseudochecker.PseudoTypeKindObjectLiteral { + restoreDeferredTypeScope := b.enterDeferredTypeScope() + defer restoreDeferredTypeScope() + } switch t.Kind { case pseudochecker.PseudoTypeKindDirect: return b.reuseTypeNode(t.AsPseudoTypeDirect().TypeNode) @@ -177,8 +185,7 @@ func (b *NodeBuilderImpl) pseudoTypeToNode(t *pseudochecker.PseudoType) *ast.Nod case pseudochecker.PseudoTypeKindSingleCallSignature: d := t.AsPseudoTypeSingleCallSignature() signature := b.ch.getSignatureFromDeclaration(d.Signature) - expandedParams := b.ch.getExpandedParameters(signature, true /*skipUnionExpanding*/)[0] - cleanup := b.enterNewScope(d.Signature, expandedParams, signature.typeParameters, signature.parameters, signature.mapper) + _, cleanup := b.enterSignatureScope(signature) defer cleanup() var typeParams *ast.NodeList if len(d.TypeParameters) > 0 { @@ -232,8 +239,7 @@ func (b *NodeBuilderImpl) pseudoTypeToNode(t *pseudochecker.PseudoType) *ast.Nod var cleanup func() if e.Kind != pseudochecker.PseudoObjectElementKindPropertyAssignment { signature := b.ch.getSignatureFromDeclaration(e.Signature()) - expandedParams := b.ch.getExpandedParameters(signature, true /*skipUnionExpanding*/)[0] - cleanup = b.enterNewScope(e.Signature(), expandedParams, signature.typeParameters, signature.parameters, signature.mapper) + _, cleanup = b.enterSignatureScope(signature) } var newProp *ast.Node switch e.Kind { diff --git a/tsc/internal/checker/symbolaccessibility.go b/tsc/internal/checker/symbolaccessibility.go index 6115adea5d373..74e7415b28ef7 100644 --- a/tsc/internal/checker/symbolaccessibility.go +++ b/tsc/internal/checker/symbolaccessibility.go @@ -234,13 +234,12 @@ func (c *Checker) getVariableDeclarationOfObjectLiteral(symbol *ast.Symbol, mean return nil } firstDecl := symbol.Declarations[0] - if firstDecl.Parent == nil { - return nil - } - if !ast.IsVariableDeclaration(firstDecl.Parent) { - return nil + if ast.IsObjectLiteralExpression(firstDecl) { + if declaration := getAssignedValueDeclaration(firstDecl); declaration != nil && ast.IsVariableDeclaration(declaration) { + return c.getSymbolOfDeclaration(declaration) + } } - if ast.IsObjectLiteralExpression(firstDecl) && firstDecl == firstDecl.Parent.Initializer() || ast.IsTypeLiteralNode(firstDecl) && firstDecl == firstDecl.Parent.Type() { + if ast.IsTypeLiteralNode(firstDecl) && firstDecl.Parent != nil && ast.IsVariableDeclaration(firstDecl.Parent) && firstDecl == firstDecl.Parent.Type() { return c.getSymbolOfDeclaration(firstDecl.Parent) } return nil diff --git a/tsc/internal/checker/utilities.go b/tsc/internal/checker/utilities.go index 82071d2dde43d..addcb095ccf5c 100644 --- a/tsc/internal/checker/utilities.go +++ b/tsc/internal/checker/utilities.go @@ -1911,6 +1911,15 @@ func walkUpOuterExpressions(node *ast.Node) *ast.Node { return parent } +func getAssignedValueDeclaration(node *ast.Node) *ast.Node { + parent := walkUpOuterExpressions(node) + if parent != nil && (ast.IsVariableDeclaration(parent) || ast.IsPropertyDeclaration(parent)) && + parent.Initializer() != nil && ast.SkipOuterExpressions(parent.Initializer(), ast.OEKAll) == node { + return parent + } + return nil +} + func GetSetAccessorValueParameter(accessor *ast.Node) *ast.Node { parameters := accessor.Parameters() if len(parameters) > 0 { diff --git a/tsc/internal/fourslash/tests/recursiveFunctionQuickInfo_test.go b/tsc/internal/fourslash/tests/recursiveFunctionQuickInfo_test.go index d2f3a63cdddfd..ea030f1b9a49d 100644 --- a/tsc/internal/fourslash/tests/recursiveFunctionQuickInfo_test.go +++ b/tsc/internal/fourslash/tests/recursiveFunctionQuickInfo_test.go @@ -23,12 +23,12 @@ alias/*aliasUse*/(); f, done := fourslash.NewFourslash(t, nil, content) defer done() f.VerifyQuickInfoAt(t, "arrow", "const arrow: () => typeof arrow", "") - f.VerifyQuickInfoAt(t, "use", "const arrow: () => () => typeof arrow", "") - f.VerifyQuickInfoAt(t, "self", "function self(): () => typeof broad", "") - f.VerifyQuickInfoAt(t, "object", "const object: {\n next: () => ...;\n}", "") + f.VerifyQuickInfoAt(t, "use", "const arrow: () => typeof arrow", "") + f.VerifyQuickInfoAt(t, "self", "function self(): typeof self", "") + f.VerifyQuickInfoAt(t, "object", "const object: {\n next: () => typeof object;\n}", "") f.VerifyQuickInfoAt(t, "tuple", "const tuple: readonly [() => ...]", "") f.VerifyQuickInfoAt(t, "reference", "const arrow: () => typeof arrow", "") - f.VerifyQuickInfoAt(t, "aliasUse", "const alias: () => () => typeof arrow", "") + f.VerifyQuickInfoAt(t, "aliasUse", "const alias: () => typeof arrow", "") f.VerifyNoErrors(t) } @@ -119,7 +119,7 @@ copy.shadowed/*reusedShadowed*/(1);` "declaration": {0, 1, 2}, "call": {0, 1, 2}, "namedCall": {0, 1, 2}, "functionCall": {0, 1, 2}, "genericCall": {0}, "specializedCall": {0}, "narrowedCall": {0, 1, 2}, "broadCall": {0, 1, 2}, - "stringCall": {0, 1, 2}, "numberCall": {0}, "methodCall": {0, 1, 2}, + "stringCall": {0, 1, 2}, "numberCall": {0, 1, 2}, "methodCall": {0, 1, 2}, "firstDeclaration": {0, 1, 2}, "firstCall": {0, 1, 2}, "genericFunctionCall": {0}, "callableCall": {0, 1, 2}, "producerDeclaration": {0, 1, 2}, "producerCall": {0, 1, 2}, diff --git a/tsc/testdata/baselines/reference/compiler/blockScopedVariablesUseBeforeDef(target=es2015).types b/tsc/testdata/baselines/reference/compiler/blockScopedVariablesUseBeforeDef(target=es2015).types index 818be2c4390c0..ce29bafb83c24 100644 --- a/tsc/testdata/baselines/reference/compiler/blockScopedVariablesUseBeforeDef(target=es2015).types +++ b/tsc/testdata/baselines/reference/compiler/blockScopedVariablesUseBeforeDef(target=es2015).types @@ -70,14 +70,14 @@ function foo5() { >foo5 : () => void let x = () => y; ->x : () => () => any ->() => y : () => () => any ->y : () => () => any +>x : () => () => typeof x +>() => y : () => () => typeof x +>y : () => () => typeof y let y = () => x; ->y : () => () => any ->() => x : () => () => any ->x : () => () => any +>y : () => () => typeof y +>() => x : () => () => typeof y +>x : () => () => typeof x } function foo6() { diff --git a/tsc/testdata/baselines/reference/compiler/classExpressionInClassStaticDeclarations.errors.txt b/tsc/testdata/baselines/reference/compiler/classExpressionInClassStaticDeclarations.errors.txt deleted file mode 100644 index 7bbc4bf3ba43e..0000000000000 --- a/tsc/testdata/baselines/reference/compiler/classExpressionInClassStaticDeclarations.errors.txt +++ /dev/null @@ -1,9 +0,0 @@ -classExpressionInClassStaticDeclarations.ts(2,12): error TS5088: The inferred type of 'D' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - - -==== classExpressionInClassStaticDeclarations.ts (1 errors) ==== - class C { - static D = class extends C {}; - ~ -!!! error TS5088: The inferred type of 'D' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - } \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/classExpressionInClassStaticDeclarations.js b/tsc/testdata/baselines/reference/compiler/classExpressionInClassStaticDeclarations.js index 1bc442c3e455a..358c980233f77 100644 --- a/tsc/testdata/baselines/reference/compiler/classExpressionInClassStaticDeclarations.js +++ b/tsc/testdata/baselines/reference/compiler/classExpressionInClassStaticDeclarations.js @@ -11,3 +11,12 @@ class C { } C.D = class extends C { }; + + +//// [classExpressionInClassStaticDeclarations.d.ts] +declare class C { + static D: { + new (): {}; + D: (typeof C)["D"]; + }; +} diff --git a/tsc/testdata/baselines/reference/compiler/commentsClassMembers(target=es2015).js b/tsc/testdata/baselines/reference/compiler/commentsClassMembers(target=es2015).js index 2d27770cfe14d..d69962f5f49a0 100644 --- a/tsc/testdata/baselines/reference/compiler/commentsClassMembers(target=es2015).js +++ b/tsc/testdata/baselines/reference/compiler/commentsClassMembers(target=es2015).js @@ -502,11 +502,11 @@ declare var i1_ncf: (b: number) => number; declare var i1_ncr: number; declare var i1_ncprop: number; declare var i1_s_p: number; -declare var i1_s_f: typeof c1.s2; +declare var i1_s_f: (typeof c1)["s2"]; declare var i1_s_r: number; declare var i1_s_prop: number; declare var i1_s_nc_p: number; -declare var i1_s_ncf: typeof c1.nc_s2; +declare var i1_s_ncf: (typeof c1)["nc_s2"]; declare var i1_s_ncr: number; declare var i1_s_ncprop: number; declare var i1_c: typeof c1; diff --git a/tsc/testdata/baselines/reference/compiler/declFileTypeofFunction.errors.txt b/tsc/testdata/baselines/reference/compiler/declFileTypeofFunction.errors.txt deleted file mode 100644 index 62433e72e8d75..0000000000000 --- a/tsc/testdata/baselines/reference/compiler/declFileTypeofFunction.errors.txt +++ /dev/null @@ -1,41 +0,0 @@ -declFileTypeofFunction.ts(20,5): error TS5088: The inferred type of 'foo3' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -declFileTypeofFunction.ts(23,5): error TS5088: The inferred type of 'x' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - - -==== declFileTypeofFunction.ts (2 errors) ==== - function f(n: typeof f): string; - function f(n: typeof g): string; - function f() { return undefined; } - function g(n: typeof g): number; - function g(n: typeof f): number; - function g() { return undefined; } - - var b: () => typeof b; - - function b1() { - return b1; - } - - function foo(): typeof foo { - return null; - } - var foo1: typeof foo; - var foo2 = foo; - - var foo3 = function () { - ~~~~ -!!! error TS5088: The inferred type of 'foo3' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - return foo3; - } - var x = () => { - ~ -!!! error TS5088: The inferred type of 'x' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - return x; - } - - function foo5(x: number) { - function bar(x: number) { - return x; - } - return bar; - } \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/declFileTypeofFunction.js b/tsc/testdata/baselines/reference/compiler/declFileTypeofFunction.js index 53c82cc535bfb..a0df5bd599f67 100644 --- a/tsc/testdata/baselines/reference/compiler/declFileTypeofFunction.js +++ b/tsc/testdata/baselines/reference/compiler/declFileTypeofFunction.js @@ -59,3 +59,18 @@ function foo5(x) { } return bar; } + + +//// [declFileTypeofFunction.d.ts] +declare function f(n: typeof f): string; +declare function f(n: typeof g): string; +declare function g(n: typeof g): number; +declare function g(n: typeof f): number; +declare var b: () => typeof b; +declare function b1(): typeof b1; +declare function foo(): typeof foo; +declare var foo1: typeof foo; +declare var foo2: typeof foo; +declare var foo3: () => typeof foo3; +declare var x: () => typeof x; +declare function foo5(x: number): (x: number) => number; diff --git a/tsc/testdata/baselines/reference/compiler/declarationEmitClassMemberWithComputedPropertyName.js b/tsc/testdata/baselines/reference/compiler/declarationEmitClassMemberWithComputedPropertyName.js index fd3f611ab1a61..819f581eef74e 100644 --- a/tsc/testdata/baselines/reference/compiler/declarationEmitClassMemberWithComputedPropertyName.js +++ b/tsc/testdata/baselines/reference/compiler/declarationEmitClassMemberWithComputedPropertyName.js @@ -75,11 +75,11 @@ declare class Foo { static p1: number; p1: number; } -export declare const t1: () => number; +export declare const t1: (typeof Foo)[typeof k1]; export declare const t2: () => string; -export declare const t3: () => number; +export declare const t3: (typeof Foo)["foo"]; export declare const t4: () => string; -export declare const t5: typeof Foo.m1; +export declare const t5: (typeof Foo)["m1"]; export declare const t6: () => void; export declare const t7: number; export declare const t8: number; diff --git a/tsc/testdata/baselines/reference/compiler/declarationEmitUnserializableTypes.errors.txt b/tsc/testdata/baselines/reference/compiler/declarationEmitUnserializableTypes.errors.txt index befe74a90fcbd..79536369d0a1a 100644 --- a/tsc/testdata/baselines/reference/compiler/declarationEmitUnserializableTypes.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/declarationEmitUnserializableTypes.errors.txt @@ -2,10 +2,9 @@ growing.ts(1,17): error TS7056: The inferred type of this node exceeds the maxim local.ts(1,17): error TS5088: The inferred type of 'localArrow' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. local.ts(5,17): error TS5088: The inferred type of 'localDeclaration' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. local.ts(9,17): error TS5088: The inferred type of 'localInstantiation' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -local.ts(13,14): error TS5088: The inferred type of 'object' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -==== local.ts (4 errors) ==== +==== local.ts (3 errors) ==== export function localArrow() { ~~~~~~~~~~ !!! error TS5088: The inferred type of 'localArrow' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. @@ -25,8 +24,6 @@ local.ts(13,14): error TS5088: The inferred type of 'object' references a type w return inner; } export const object = { - ~~~~~~ -!!! error TS5088: The inferred type of 'object' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. self() { return object; } }; export const annotatedObject: { self(): typeof annotatedObject } = { diff --git a/tsc/testdata/baselines/reference/compiler/declarationEmitUnserializableTypes.types b/tsc/testdata/baselines/reference/compiler/declarationEmitUnserializableTypes.types index 493ce079f72b2..c6b78b4f8bacf 100644 --- a/tsc/testdata/baselines/reference/compiler/declarationEmitUnserializableTypes.types +++ b/tsc/testdata/baselines/reference/compiler/declarationEmitUnserializableTypes.types @@ -2,25 +2,25 @@ === local.ts === export function localArrow() { ->localArrow : () => () => any +>localArrow : () => () => typeof inner const inner = () => inner; ->inner : () => any ->() => inner : () => any ->inner : () => any +>inner : () => typeof inner +>() => inner : () => typeof inner +>inner : () => typeof inner return inner; ->inner : () => any +>inner : () => typeof inner } export function localDeclaration() { ->localDeclaration : () => () => any +>localDeclaration : () => () => typeof inner function inner() { return inner; } ->inner : () => any ->inner : () => any +>inner : () => typeof inner +>inner : () => typeof inner return inner; ->inner : () => any +>inner : () => typeof inner } export function localInstantiation() { >localInstantiation : () => () => () => any @@ -36,12 +36,12 @@ export function localInstantiation() { >inner : () => any } export const object = { ->object : { self(): any; } ->{ self() { return object; }} : { self(): { self(): any; }; } +>object : { self(): typeof object; } +>{ self() { return object; }} : { self(): typeof object; } self() { return object; } ->self : () => { self(): any; } ->object : { self(): any; } +>self : () => { self(): typeof object; } +>object : { self(): typeof object; } }; export const annotatedObject: { self(): typeof annotatedObject } = { @@ -88,11 +88,11 @@ export function local(): Recursive { >local : () => Recursive const inner = () => inner; ->inner : () => any ->() => inner : () => any ->inner : () => any +>inner : () => typeof inner +>() => inner : () => typeof inner +>inner : () => typeof inner return inner; ->inner : () => any +>inner : () => typeof inner } diff --git a/tsc/testdata/baselines/reference/compiler/discriminateWithOptionalProperty2(exactoptionalpropertytypes=false).types b/tsc/testdata/baselines/reference/compiler/discriminateWithOptionalProperty2(exactoptionalpropertytypes=false).types index 40ed6310ed336..c4fd48d7515b2 100644 --- a/tsc/testdata/baselines/reference/compiler/discriminateWithOptionalProperty2(exactoptionalpropertytypes=false).types +++ b/tsc/testdata/baselines/reference/compiler/discriminateWithOptionalProperty2(exactoptionalpropertytypes=false).types @@ -192,17 +192,17 @@ const items = [1, 2, 3]; >3 : 3 const iterable = { ->iterable : { [Symbol.asyncIterator](): any; next(): Promise<{ done: boolean; value: number; }>; } ->{ [Symbol.asyncIterator]() { return this; }, next() { const value = items[0]; items.shift(); return Promise.resolve({ done: items.length === 0, value, }); },} : { [Symbol.asyncIterator](): { [Symbol.asyncIterator](): any; next(): Promise<{ done: boolean; value: number; }>; }; next(): Promise<{ done: boolean; value: number; }>; } +>iterable : { [Symbol.asyncIterator](): typeof iterable; next(): Promise<{ done: boolean; value: number; }>; } +>{ [Symbol.asyncIterator]() { return this; }, next() { const value = items[0]; items.shift(); return Promise.resolve({ done: items.length === 0, value, }); },} : { [Symbol.asyncIterator](): typeof iterable; next(): Promise<{ done: boolean; value: number; }>; } [Symbol.asyncIterator]() { ->[Symbol.asyncIterator] : () => { [Symbol.asyncIterator](): any; next(): Promise<{ done: boolean; value: number; }>; } +>[Symbol.asyncIterator] : () => { [Symbol.asyncIterator](): typeof iterable; next(): Promise<{ done: boolean; value: number; }>; } >Symbol.asyncIterator : unique symbol >Symbol : SymbolConstructor >asyncIterator : unique symbol return this; ->this : { [Symbol.asyncIterator](): any; next(): Promise<{ done: boolean; value: number; }>; } +>this : { [Symbol.asyncIterator](): typeof iterable; next(): Promise<{ done: boolean; value: number; }>; } }, next() { @@ -246,7 +246,7 @@ const doubles = mapAsyncIterable(iterable, (x) => x + x); >doubles : AsyncGenerator >mapAsyncIterable(iterable, (x) => x + x) : AsyncGenerator >mapAsyncIterable : (iterable: AsyncGenerator | AsyncIterable, callback: (value: T) => PromiseOrValue) => AsyncGenerator ->iterable : { [Symbol.asyncIterator](): any; next(): Promise<{ done: boolean; value: number; }>; } +>iterable : { [Symbol.asyncIterator](): typeof iterable; next(): Promise<{ done: boolean; value: number; }>; } >(x) => x + x : (x: number) => number >x : number >x + x : number diff --git a/tsc/testdata/baselines/reference/compiler/discriminateWithOptionalProperty2(exactoptionalpropertytypes=true).types b/tsc/testdata/baselines/reference/compiler/discriminateWithOptionalProperty2(exactoptionalpropertytypes=true).types index 40ed6310ed336..c4fd48d7515b2 100644 --- a/tsc/testdata/baselines/reference/compiler/discriminateWithOptionalProperty2(exactoptionalpropertytypes=true).types +++ b/tsc/testdata/baselines/reference/compiler/discriminateWithOptionalProperty2(exactoptionalpropertytypes=true).types @@ -192,17 +192,17 @@ const items = [1, 2, 3]; >3 : 3 const iterable = { ->iterable : { [Symbol.asyncIterator](): any; next(): Promise<{ done: boolean; value: number; }>; } ->{ [Symbol.asyncIterator]() { return this; }, next() { const value = items[0]; items.shift(); return Promise.resolve({ done: items.length === 0, value, }); },} : { [Symbol.asyncIterator](): { [Symbol.asyncIterator](): any; next(): Promise<{ done: boolean; value: number; }>; }; next(): Promise<{ done: boolean; value: number; }>; } +>iterable : { [Symbol.asyncIterator](): typeof iterable; next(): Promise<{ done: boolean; value: number; }>; } +>{ [Symbol.asyncIterator]() { return this; }, next() { const value = items[0]; items.shift(); return Promise.resolve({ done: items.length === 0, value, }); },} : { [Symbol.asyncIterator](): typeof iterable; next(): Promise<{ done: boolean; value: number; }>; } [Symbol.asyncIterator]() { ->[Symbol.asyncIterator] : () => { [Symbol.asyncIterator](): any; next(): Promise<{ done: boolean; value: number; }>; } +>[Symbol.asyncIterator] : () => { [Symbol.asyncIterator](): typeof iterable; next(): Promise<{ done: boolean; value: number; }>; } >Symbol.asyncIterator : unique symbol >Symbol : SymbolConstructor >asyncIterator : unique symbol return this; ->this : { [Symbol.asyncIterator](): any; next(): Promise<{ done: boolean; value: number; }>; } +>this : { [Symbol.asyncIterator](): typeof iterable; next(): Promise<{ done: boolean; value: number; }>; } }, next() { @@ -246,7 +246,7 @@ const doubles = mapAsyncIterable(iterable, (x) => x + x); >doubles : AsyncGenerator >mapAsyncIterable(iterable, (x) => x + x) : AsyncGenerator >mapAsyncIterable : (iterable: AsyncGenerator | AsyncIterable, callback: (value: T) => PromiseOrValue) => AsyncGenerator ->iterable : { [Symbol.asyncIterator](): any; next(): Promise<{ done: boolean; value: number; }>; } +>iterable : { [Symbol.asyncIterator](): typeof iterable; next(): Promise<{ done: boolean; value: number; }>; } >(x) => x + x : (x: number) => number >x : number >x + x : number diff --git a/tsc/testdata/baselines/reference/compiler/functionExpressionReturningItself.errors.txt b/tsc/testdata/baselines/reference/compiler/functionExpressionReturningItself.errors.txt deleted file mode 100644 index 8b09d0b9d51a8..0000000000000 --- a/tsc/testdata/baselines/reference/compiler/functionExpressionReturningItself.errors.txt +++ /dev/null @@ -1,7 +0,0 @@ -functionExpressionReturningItself.ts(1,5): error TS5088: The inferred type of 'x' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - - -==== functionExpressionReturningItself.ts (1 errors) ==== - var x = function somefn() { return somefn; }; - ~ -!!! error TS5088: The inferred type of 'x' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/functionExpressionReturningItself.js b/tsc/testdata/baselines/reference/compiler/functionExpressionReturningItself.js index cd806da15b038..567455a7bd0b4 100644 --- a/tsc/testdata/baselines/reference/compiler/functionExpressionReturningItself.js +++ b/tsc/testdata/baselines/reference/compiler/functionExpressionReturningItself.js @@ -6,3 +6,7 @@ var x = function somefn() { return somefn; }; //// [functionExpressionReturningItself.js] "use strict"; var x = function somefn() { return somefn; }; + + +//// [functionExpressionReturningItself.d.ts] +declare var x: () => typeof x; diff --git a/tsc/testdata/baselines/reference/compiler/functionExpressionReturningItself.types b/tsc/testdata/baselines/reference/compiler/functionExpressionReturningItself.types index c4efe2bcbae55..20ac6cf3cdd92 100644 --- a/tsc/testdata/baselines/reference/compiler/functionExpressionReturningItself.types +++ b/tsc/testdata/baselines/reference/compiler/functionExpressionReturningItself.types @@ -2,8 +2,8 @@ === functionExpressionReturningItself.ts === var x = function somefn() { return somefn; }; ->x : () => typeof somefn ->function somefn() { return somefn; } : () => typeof somefn +>x : () => typeof x +>function somefn() { return somefn; } : () => typeof x >somefn : () => typeof x >somefn : () => typeof x diff --git a/tsc/testdata/baselines/reference/compiler/genericCallOnMemberReturningClosedOverObject.types b/tsc/testdata/baselines/reference/compiler/genericCallOnMemberReturningClosedOverObject.types index 20603cd506b33..7c4105a1f982f 100644 --- a/tsc/testdata/baselines/reference/compiler/genericCallOnMemberReturningClosedOverObject.types +++ b/tsc/testdata/baselines/reference/compiler/genericCallOnMemberReturningClosedOverObject.types @@ -4,27 +4,27 @@ // https://github.com/microsoft/TypeScript/issues/11584 function example() { ->example : () => { foo: (t2: T2) => any; bar: (t1: T1) => any; } +>example : () => { foo: (t2: T2) => typeof x; bar: (t1: T1) => typeof x; } let x = { ->x : { foo: (t2: T2) => any; bar: (t1: T1) => any; } ->{ foo: (t2: T2) => x, bar: (t1: T1) => x, } : { foo: (t2: T2) => { foo: (t2: T2) => any; bar: (t1: T1) => any; }; bar: (t1: T1) => { foo: (t2: T2) => any; bar: (t1: T1) => any; }; } +>x : { foo: (t2: T2) => typeof x; bar: (t1: T1) => typeof x; } +>{ foo: (t2: T2) => x, bar: (t1: T1) => x, } : { foo: (t2: T2) => typeof x; bar: (t1: T1) => typeof x; } foo: (t2: T2) => x, ->foo : (t2: T2) => { foo: (t2: T2) => any; bar: (t1: T1) => any; } ->(t2: T2) => x : (t2: T2) => { foo: (t2: T2) => any; bar: (t1: T1) => any; } +>foo : (t2: T2) => { foo: (typeof x)["foo"]; bar: (t1: T1) => typeof x; } +>(t2: T2) => x : (t2: T2) => { foo: (typeof x)["foo"]; bar: (t1: T1) => typeof x; } >t2 : T2 ->x : { foo: (t2: T2) => any; bar: (t1: T1) => any; } +>x : { foo: (t2: T2) => typeof x; bar: (t1: T1) => typeof x; } bar: (t1: T1) => x, ->bar : (t1: T1) => { foo: (t2: T2) => any; bar: (t1: T1) => any; } ->(t1: T1) => x : (t1: T1) => { foo: (t2: T2) => any; bar: (t1: T1) => any; } +>bar : (t1: T1) => { foo: (t2: T2) => typeof x; bar: (typeof x)["bar"]; } +>(t1: T1) => x : (t1: T1) => { foo: (t2: T2) => typeof x; bar: (typeof x)["bar"]; } >t1 : T1 ->x : { foo: (t2: T2) => any; bar: (t1: T1) => any; } +>x : { foo: (t2: T2) => typeof x; bar: (t1: T1) => typeof x; } }; return x; ->x : { foo: (t2: T2) => any; bar: (t1: T1) => any; } +>x : { foo: (t2: T2) => typeof x; bar: (t1: T1) => typeof x; } } example().foo("hello").bar(1); diff --git a/tsc/testdata/baselines/reference/compiler/isolatedDeclarationErrorsReturnTypes.errors.txt b/tsc/testdata/baselines/reference/compiler/isolatedDeclarationErrorsReturnTypes.errors.txt index cf9aaeeb43748..2f5ff9325b593 100644 --- a/tsc/testdata/baselines/reference/compiler/isolatedDeclarationErrorsReturnTypes.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/isolatedDeclarationErrorsReturnTypes.errors.txt @@ -1,11 +1,7 @@ -isolatedDeclarationErrorsReturnTypes.ts(2,14): error TS5088: The inferred type of 'recursiveArrow' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. isolatedDeclarationErrorsReturnTypes.ts(2,31): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. isolatedDeclarationErrorsReturnTypes.ts(3,49): error TS9039: Type containing private name 'recursiveDeclaration' can't be used with --isolatedDeclarations. -isolatedDeclarationErrorsReturnTypes.ts(4,14): error TS5088: The inferred type of 'recursiveObject' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. isolatedDeclarationErrorsReturnTypes.ts(4,40): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -isolatedDeclarationErrorsReturnTypes.ts(5,14): error TS5088: The inferred type of 'recursiveTuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. isolatedDeclarationErrorsReturnTypes.ts(5,32): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -isolatedDeclarationErrorsReturnTypes.ts(6,14): error TS5088: The inferred type of 'recursiveNamed' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. isolatedDeclarationErrorsReturnTypes.ts(6,56): error TS9039: Type containing private name 'self' can't be used with --isolatedDeclarations. isolatedDeclarationErrorsReturnTypes.ts(25,45): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. isolatedDeclarationErrorsReturnTypes.ts(28,41): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. @@ -40,11 +36,9 @@ isolatedDeclarationErrorsReturnTypes.ts(181,85): error TS9007: Function must hav isolatedDeclarationErrorsReturnTypes.ts(182,68): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. -==== isolatedDeclarationErrorsReturnTypes.ts (40 errors) ==== +==== isolatedDeclarationErrorsReturnTypes.ts (36 errors) ==== // Function Variables export const recursiveArrow = () => recursiveArrow; - ~~~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'recursiveArrow' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. ~~~~~~~~~~~~~~~~~~~~ !!! error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. !!! related TS9027 isolatedDeclarationErrorsReturnTypes.ts:2:14: Add a type annotation to the variable recursiveArrow. @@ -54,22 +48,16 @@ isolatedDeclarationErrorsReturnTypes.ts(182,68): error TS9007: Function must hav !!! error TS9039: Type containing private name 'recursiveDeclaration' can't be used with --isolatedDeclarations. !!! related TS9031 isolatedDeclarationErrorsReturnTypes.ts:3:17: Add a return type to the function declaration. export const recursiveObject = { next: () => recursiveObject }; - ~~~~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'recursiveObject' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. ~~~~~~~~~~~~~~~~~~~~~ !!! error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. !!! related TS9027 isolatedDeclarationErrorsReturnTypes.ts:4:14: Add a type annotation to the variable recursiveObject. !!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:4:40: Add a return type to the function expression. export const recursiveTuple = [() => recursiveTuple] as const; - ~~~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'recursiveTuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. ~~~~~~~~~~~~~~~~~~~~ !!! error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations. !!! related TS9027 isolatedDeclarationErrorsReturnTypes.ts:5:14: Add a type annotation to the variable recursiveTuple. !!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:5:32: Add a return type to the function expression. export const recursiveNamed = function self() { return self; }; - ~~~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'recursiveNamed' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. ~~~~ !!! error TS9039: Type containing private name 'self' can't be used with --isolatedDeclarations. !!! related TS9030 isolatedDeclarationErrorsReturnTypes.ts:6:40: Add a return type to the function expression. diff --git a/tsc/testdata/baselines/reference/compiler/isolatedDeclarationErrorsReturnTypes.types b/tsc/testdata/baselines/reference/compiler/isolatedDeclarationErrorsReturnTypes.types index 028b55832e213..018c65416107d 100644 --- a/tsc/testdata/baselines/reference/compiler/isolatedDeclarationErrorsReturnTypes.types +++ b/tsc/testdata/baselines/reference/compiler/isolatedDeclarationErrorsReturnTypes.types @@ -12,22 +12,22 @@ export function recursiveDeclaration() { return recursiveDeclaration; } >recursiveDeclaration : () => typeof recursiveDeclaration export const recursiveObject = { next: () => recursiveObject }; ->recursiveObject : { next: () => any; } ->{ next: () => recursiveObject } : { next: () => { next: () => any; }; } ->next : () => { next: () => any; } ->() => recursiveObject : () => { next: () => any; } ->recursiveObject : { next: () => any; } +>recursiveObject : { next: () => typeof recursiveObject; } +>{ next: () => recursiveObject } : { next: () => typeof recursiveObject; } +>next : () => { next: (typeof recursiveObject)["next"]; } +>() => recursiveObject : () => { next: (typeof recursiveObject)["next"]; } +>recursiveObject : { next: () => typeof recursiveObject; } export const recursiveTuple = [() => recursiveTuple] as const; >recursiveTuple : readonly [() => any] >[() => recursiveTuple] as const : readonly [() => any] >[() => recursiveTuple] : readonly [() => any] ->() => recursiveTuple : () => readonly [any] +>() => recursiveTuple : () => readonly [(typeof recursiveTuple)[0]] >recursiveTuple : readonly [() => any] export const recursiveNamed = function self() { return self; }; ->recursiveNamed : () => typeof self ->function self() { return self; } : () => typeof self +>recursiveNamed : () => typeof recursiveNamed +>function self() { return self; } : () => typeof recursiveNamed >self : () => typeof recursiveNamed >self : () => typeof recursiveNamed diff --git a/tsc/testdata/baselines/reference/compiler/jsFunctionWithPrototypeNoErrorTruncationNoCrash.types b/tsc/testdata/baselines/reference/compiler/jsFunctionWithPrototypeNoErrorTruncationNoCrash.types index 4a0539f482866..78d4ddc68b3f1 100644 --- a/tsc/testdata/baselines/reference/compiler/jsFunctionWithPrototypeNoErrorTruncationNoCrash.types +++ b/tsc/testdata/baselines/reference/compiler/jsFunctionWithPrototypeNoErrorTruncationNoCrash.types @@ -2,7 +2,7 @@ === index.js === function Color(obj) { ->Color : { (obj: any): void; prototype: { negate: () => { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; }; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; }; clearer: (ratio: any) => any; toJSON: () => any; }; } +>Color : { (obj: any): void; prototype: { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; }; } >obj : any this.example = true @@ -14,11 +14,11 @@ function Color(obj) { }; Color.prototype = { ->Color.prototype = { negate: function () {return this;}, lighten: function (ratio) {return this;}, darken: function (ratio) {return this;}, saturate: function (ratio) {return this;}, desaturate: function (ratio) {return this;}, whiten: function (ratio) {return this;}, blacken: function (ratio) {return this;}, greyscale: function () {return this;}, clearer: function (ratio) {return this;}, toJSON: function () {return this.rgb();},} : { negate: () => { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; }; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; }; clearer: (ratio: any) => any; toJSON: () => any; } ->Color.prototype : { negate: () => { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; }; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; }; clearer: (ratio: any) => any; toJSON: () => any; } ->Color : { (obj: any): void; prototype: { negate: () => { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; }; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; }; clearer: (ratio: any) => any; toJSON: () => any; }; } ->prototype : { negate: () => { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; }; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; }; clearer: (ratio: any) => any; toJSON: () => any; } ->{ negate: function () {return this;}, lighten: function (ratio) {return this;}, darken: function (ratio) {return this;}, saturate: function (ratio) {return this;}, desaturate: function (ratio) {return this;}, whiten: function (ratio) {return this;}, blacken: function (ratio) {return this;}, greyscale: function () {return this;}, clearer: function (ratio) {return this;}, toJSON: function () {return this.rgb();},} : { negate: () => { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; }; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; }; clearer: (ratio: any) => any; toJSON: () => any; } +>Color.prototype = { negate: function () {return this;}, lighten: function (ratio) {return this;}, darken: function (ratio) {return this;}, saturate: function (ratio) {return this;}, desaturate: function (ratio) {return this;}, whiten: function (ratio) {return this;}, blacken: function (ratio) {return this;}, greyscale: function () {return this;}, clearer: function (ratio) {return this;}, toJSON: function () {return this.rgb();},} : { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; } +>Color.prototype : { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; } +>Color : { (obj: any): void; prototype: { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; }; } +>prototype : { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; } +>{ negate: function () {return this;}, lighten: function (ratio) {return this;}, darken: function (ratio) {return this;}, saturate: function (ratio) {return this;}, desaturate: function (ratio) {return this;}, whiten: function (ratio) {return this;}, blacken: function (ratio) {return this;}, greyscale: function () {return this;}, clearer: function (ratio) {return this;}, toJSON: function () {return this.rgb();},} : { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; } negate: function () {return this;}, >negate : () => { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; } diff --git a/tsc/testdata/baselines/reference/compiler/nestedSpreadsAndWidening.types b/tsc/testdata/baselines/reference/compiler/nestedSpreadsAndWidening.types index 811f7fa0ac83f..ec7871d6bda49 100644 --- a/tsc/testdata/baselines/reference/compiler/nestedSpreadsAndWidening.types +++ b/tsc/testdata/baselines/reference/compiler/nestedSpreadsAndWidening.types @@ -120,7 +120,7 @@ declare const step: Action; read({ >read({ ...step, settings: { ...step.settings, input: { ...step.settings.input, k: ['5'] } },}) : void >read : (arg: T) => void ->{ ...step, settings: { ...step.settings, input: { ...step.settings.input, k: ['5'] } },} : { type: "1"; settings: { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; }; } | { type: "2"; settings: { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; }; } | { type: "3"; settings: { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | any | any; } | any | any +>{ ...step, settings: { ...step.settings, input: { ...step.settings.input, k: ['5'] } },} : { type: "1"; settings: { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; }; } | { type: "2"; settings: { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; }; } | { type: "3"; settings: { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: string[]; } | { c: number; j: number; k: string[]; } | { c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { b: number; d: number; k: string[]; } | { c: number; d: number; k: string[]; } | { d: number; e: number; k: string[]; } | { d: number; f: number; k: string[]; } | { d: number; g: number; k: string[]; } | { d: number; h: number; k: string[]; } | { d: number; i: number; k: string[]; } | { d: number; j: number; k: string[]; } | { d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { b: number; e: number; k: string[]; } | { c: number; e: number; k: string[]; } | { d: number; e: number; k: string[]; } | { e: number; f: number; k: string[]; } | { e: number; g: number; k: string[]; } | { e: number; h: number; k: string[]; } | { e: number; i: number; k: string[]; } | { e: number; j: number; k: string[]; } | { e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { b: number; f: number; k: string[]; } | { c: number; f: number; k: string[]; } | { d: number; f: number; k: string[]; } | { e: number; f: number; k: string[]; } | { f: number; g: number; k: string[]; } | { f: number; h: number; k: string[]; } | { f: number; i: number; k: string[]; } | { f: number; j: number; k: string[]; } | { f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { b: number; g: number; k: string[]; } | { c: number; g: number; k: string[]; } | { d: number; g: number; k: string[]; } | { e: number; g: number; k: string[]; } | { f: number; g: number; k: string[]; } | { g: number; h: number; k: string[]; } | { g: number; i: number; k: string[]; } | { g: number; j: number; k: string[]; } | { g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { b: number; h: number; k: string[]; } | { c: number; h: number; k: string[]; } | { d: number; h: number; k: string[]; } | { e: number; h: number; k: string[]; } | { f: number; h: number; k: string[]; } | { g: number; h: number; k: string[]; } | { h: number; i: number; k: string[]; } | { h: number; j: number; k: string[]; } | { h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { b: number; i: number; k: string[]; } | { c: number; i: number; k: string[]; } | { d: number; i: number; k: string[]; } | { e: number; i: number; k: string[]; } | { f: number; i: number; k: string[]; } | { g: number; i: number; k: string[]; } | { h: number; i: number; k: string[]; } | { i: number; j: number; k: string[]; } | { i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { b: number; j: number; k: string[]; } | { c: number; j: number; k: string[]; } | { d: number; j: number; k: string[]; } | { e: number; j: number; k: string[]; } | { f: number; j: number; k: string[]; } | { g: number; j: number; k: string[]; } | { h: number; j: number; k: string[]; } | { i: number; j: number; k: string[]; } | { j: number; k: string[]; } | { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; }; } | { input: { a: number; k: string[]; } | { b: number; k: string[]; } | { c: number; k: string[]; } | { d: number; k: string[]; } | { e: number; k: string[]; } | { f: number; k: string[]; } | { g: number; k: string[]; } | { h: number; k: string[]; } | { i: number; k: string[]; } | { j: number; k: string[]; } | { k: string[]; } | { a: number; b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { a: number; d: number; k: string[]; } | { a: number; e: number; k: string[]; } | { a: number; f: number; k: string[]; } | { a: number; g: number; k: string[]; } | { a: number; h: number; k: string[]; } | { a: number; i: number; k: string[]; } | { a: number; j: number; k: string[]; } | { a: number; k: string[]; } | { a: number; b: number; k: string[]; } | { b: number; c: number; k: string[]; } | { b: number; d: number; k: string[]; } | { b: number; e: number; k: string[]; } | { b: number; f: number; k: string[]; } | { b: number; g: number; k: string[]; } | { b: number; h: number; k: string[]; } | { b: number; i: number; k: string[]; } | { b: number; j: number; k: string[]; } | { b: number; k: string[]; } | { a: number; c: number; k: string[]; } | { b: number; c: number; k: string[]; } | { c: number; d: number; k: string[]; } | { c: number; e: number; k: string[]; } | { c: number; f: number; k: string[]; } | { c: number; g: number; k: string[]; } | { c: number; h: number; k: string[]; } | { c: number; i: number; k: any; } | any | any; } | any | any; } | any | any ...step, >step : Action diff --git a/tsc/testdata/baselines/reference/compiler/noCircularitySelfReferentialGetter1.types b/tsc/testdata/baselines/reference/compiler/noCircularitySelfReferentialGetter1.types index 78179c59dcc5b..b0b4d87de84ff 100644 --- a/tsc/testdata/baselines/reference/compiler/noCircularitySelfReferentialGetter1.types +++ b/tsc/testdata/baselines/reference/compiler/noCircularitySelfReferentialGetter1.types @@ -72,7 +72,7 @@ const Category = object({ >Category : ZodObject<{ name: ZodString; readonly parent: ZodOptional>; }> >object({ name: string(), get parent() { return optional(Category); },}) : ZodObject<{ name: ZodString; readonly parent: ZodOptional>; }> >object : (shape: T) => ZodObject ->{ name: string(), get parent() { return optional(Category); },} : { name: ZodString; readonly parent: ZodOptional>; }>>; } +>{ name: string(), get parent() { return optional(Category); },} : { name: ZodString; readonly parent: ZodOptional>; } name: string(), >name : ZodString diff --git a/tsc/testdata/baselines/reference/compiler/noCircularitySelfReferentialGetter2.types b/tsc/testdata/baselines/reference/compiler/noCircularitySelfReferentialGetter2.types index 8e326c2f2b566..9f5a1be7c70eb 100644 --- a/tsc/testdata/baselines/reference/compiler/noCircularitySelfReferentialGetter2.types +++ b/tsc/testdata/baselines/reference/compiler/noCircularitySelfReferentialGetter2.types @@ -70,7 +70,7 @@ const Category = object({ >Category : ZodObject<{ name: ZodString; readonly parent: ZodOptional>; }> >object({ name: string(), get parent() { return optional(Category); },}) : ZodObject<{ name: ZodString; readonly parent: ZodOptional>; }> >object : (shape: T) => ZodObject ->{ name: string(), get parent() { return optional(Category); },} : { name: ZodString; readonly parent: ZodOptional>; }>>; } +>{ name: string(), get parent() { return optional(Category); },} : { name: ZodString; readonly parent: ZodOptional>; } name: string(), >name : ZodString diff --git a/tsc/testdata/baselines/reference/compiler/noCircularitySelfReferentialGetter3.types b/tsc/testdata/baselines/reference/compiler/noCircularitySelfReferentialGetter3.types index 0caaac102f68b..2827e86c5bae2 100644 --- a/tsc/testdata/baselines/reference/compiler/noCircularitySelfReferentialGetter3.types +++ b/tsc/testdata/baselines/reference/compiler/noCircularitySelfReferentialGetter3.types @@ -2,19 +2,19 @@ === noCircularitySelfReferentialGetter3.ts === const a = { ->a : { prop: number; readonly self: any; } ->{ prop: 42, get self() { return a; },} satisfies { prop: number; self: any } : { prop: number; readonly self: { prop: number; readonly self: any; }; } ->{ prop: 42, get self() { return a; },} : { prop: number; readonly self: { prop: number; readonly self: any; }; } +>a : { prop: number; readonly self: typeof a; } +>{ prop: 42, get self() { return a; },} satisfies { prop: number; self: any } : { prop: number; readonly self: typeof a; } +>{ prop: 42, get self() { return a; },} : { prop: number; readonly self: typeof a; } prop: 42, >prop : number >42 : 42 get self() { ->self : { prop: number; readonly self: any; } +>self : { prop: number; readonly self: typeof a; } return a; ->a : { prop: number; readonly self: any; } +>a : { prop: number; readonly self: typeof a; } }, } satisfies { prop: number; self: any }; diff --git a/tsc/testdata/baselines/reference/compiler/noCircularitySelfReferentialGetter4.types b/tsc/testdata/baselines/reference/compiler/noCircularitySelfReferentialGetter4.types index ee88891c6a1e6..0e4fbcab01ef2 100644 --- a/tsc/testdata/baselines/reference/compiler/noCircularitySelfReferentialGetter4.types +++ b/tsc/testdata/baselines/reference/compiler/noCircularitySelfReferentialGetter4.types @@ -2,19 +2,19 @@ === noCircularitySelfReferentialGetter4.ts === const a = { ->a : { prop: number; readonly self: any; } ->{ prop: 42, get self() { return a; },} satisfies { prop: number; self: any } : { prop: number; readonly self: { prop: number; readonly self: any; }; } ->{ prop: 42, get self() { return a; },} : { prop: number; readonly self: { prop: number; readonly self: any; }; } +>a : { prop: number; readonly self: typeof a; } +>{ prop: 42, get self() { return a; },} satisfies { prop: number; self: any } : { prop: number; readonly self: typeof a; } +>{ prop: 42, get self() { return a; },} : { prop: number; readonly self: typeof a; } prop: 42, >prop : number >42 : 42 get self() { ->self : { prop: number; readonly self: any; } +>self : { prop: number; readonly self: typeof a; } return a; ->a : { prop: number; readonly self: any; } +>a : { prop: number; readonly self: typeof a; } }, } satisfies { prop: number; self: any }; @@ -24,16 +24,16 @@ const a = { const prop = a.self.self.self.self.self.prop; >prop : number >a.self.self.self.self.self.prop : number ->a.self.self.self.self.self : { prop: number; readonly self: any; } ->a.self.self.self.self : { prop: number; readonly self: any; } ->a.self.self.self : { prop: number; readonly self: any; } ->a.self.self : { prop: number; readonly self: any; } ->a.self : { prop: number; readonly self: any; } ->a : { prop: number; readonly self: any; } ->self : { prop: number; readonly self: any; } ->self : { prop: number; readonly self: any; } ->self : { prop: number; readonly self: any; } ->self : { prop: number; readonly self: any; } ->self : { prop: number; readonly self: any; } +>a.self.self.self.self.self : { prop: number; readonly self: typeof a; } +>a.self.self.self.self : { prop: number; readonly self: typeof a; } +>a.self.self.self : { prop: number; readonly self: typeof a; } +>a.self.self : { prop: number; readonly self: typeof a; } +>a.self : { prop: number; readonly self: typeof a; } +>a : { prop: number; readonly self: typeof a; } +>self : { prop: number; readonly self: typeof a; } +>self : { prop: number; readonly self: typeof a; } +>self : { prop: number; readonly self: typeof a; } +>self : { prop: number; readonly self: typeof a; } +>self : { prop: number; readonly self: typeof a; } >prop : number diff --git a/tsc/testdata/baselines/reference/compiler/noImplicitThisBigThis.types b/tsc/testdata/baselines/reference/compiler/noImplicitThisBigThis.types index 45208b519ab4c..39ac4d400cd92 100644 --- a/tsc/testdata/baselines/reference/compiler/noImplicitThisBigThis.types +++ b/tsc/testdata/baselines/reference/compiler/noImplicitThisBigThis.types @@ -7,7 +7,7 @@ function createObj() { >createObj : () => { func1(): { func1(): any; func2(): any; func3(): any; }; func2(): { func1(): any; func2(): any; func3(): any; }; func3(): { func1(): any; func2(): any; func3(): any; }; } return { ->{ func1() { return this; }, func2() { return this; }, func3() { return this; } } : { func1(): { func1(): any; func2(): any; func3(): any; }; func2(): { func1(): any; func2(): any; func3(): any; }; func3(): { func1(): any; func2(): any; func3(): any; }; } +>{ func1() { return this; }, func2() { return this; }, func3() { return this; } } : { func1(): any; func2(): any; func3(): any; } func1() { >func1 : () => { func1(): any; func2(): any; func3(): any; } @@ -36,7 +36,7 @@ function createObjNoCrash() { >createObjNoCrash : () => { func1(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func2(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func3(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func4(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func5(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func6(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func7(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func8(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func9(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; } return { ->{ func1() { return this; }, func2() { return this; }, func3() { return this; }, func4() { return this; }, func5() { return this; }, func6() { return this; }, func7() { return this; }, func8() { return this; }, func9() { return this; } } : { func1(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func2(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func3(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func4(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func5(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func6(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func7(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func8(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; func9(): { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; }; } +>{ func1() { return this; }, func2() { return this; }, func3() { return this; }, func4() { return this; }, func5() { return this; }, func6() { return this; }, func7() { return this; }, func8() { return this; }, func9() { return this; } } : { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; } func1() { >func1 : () => { func1(): any; func2(): any; func3(): any; func4(): any; func5(): any; func6(): any; func7(): any; func8(): any; func9(): any; } diff --git a/tsc/testdata/baselines/reference/compiler/recursiveConditionalCrash3.types b/tsc/testdata/baselines/reference/compiler/recursiveConditionalCrash3.types index 91395d673fd4d..39cb30593ada1 100644 --- a/tsc/testdata/baselines/reference/compiler/recursiveConditionalCrash3.types +++ b/tsc/testdata/baselines/reference/compiler/recursiveConditionalCrash3.types @@ -175,10 +175,10 @@ let y2: Expand */ type UseQueryOptions > = Expand ->UseQueryOptions : T extends CanBeExpanded ? T["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_2 ? T_2 extends T["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_2 extends CanBeExpanded ? T_2["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_3 ? T_3 extends T_2["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_3 extends CanBeExpanded ? T_3["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_4 ? T_4 extends T_3["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_4 extends CanBeExpanded ? T_4["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_5 ? T_5 extends T_4["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_5 extends CanBeExpanded ? T_5["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_6 ? T_6 extends T_5["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_6 extends CanBeExpanded ? T_6["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_7 ? T_7 extends T_6["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_7 extends CanBeExpanded ? T_7["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_8 ? T_8 extends T_7["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_8 extends CanBeExpanded ? T_8["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_9 ? T_9 extends T_8["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_9 extends CanBeExpanded ? T_9["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_10 ? T_10 extends T_9["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_10 extends CanBeExpanded ? T_10["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_11 ? T_11 extends T_10["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_11 extends CanBeExpanded ? any : any : never : never : any : never : never : any : never : never : any : never : never : any : never : never : any : never : never : any : never : never : any : never : never : any : never : never : any : never : never : any +>UseQueryOptions : T extends CanBeExpanded ? T["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_2 ? T_2 extends T["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_2 extends CanBeExpanded ? T_2["" extends infer T_3 ? T_3 extends "" ? T_3 extends SplitAC ? "value" : "default" : never : never] extends infer T_4 ? T_4 extends T_2["" extends infer T_3 ? T_3 extends "" ? T_3 extends SplitAC ? "value" : "default" : never : never] ? T_4 extends CanBeExpanded ? T_4["" extends infer T_5 ? T_5 extends "" ? T_5 extends SplitAC ? "value" : "default" : never : never] extends infer T_6 ? T_6 extends T_4["" extends infer T_5 ? T_5 extends "" ? T_5 extends SplitAC ? "value" : "default" : never : never] ? T_6 extends CanBeExpanded ? T_6["" extends infer T_7 ? T_7 extends "" ? T_7 extends SplitAC ? "value" : "default" : never : never] extends infer T_8 ? T_8 extends T_6["" extends infer T_7 ? T_7 extends "" ? T_7 extends SplitAC ? "value" : "default" : never : never] ? T_8 extends CanBeExpanded ? T_8["" extends infer T_9 ? T_9 extends "" ? T_9 extends SplitAC ? "value" : "default" : never : never] extends infer T_10 ? T_10 extends T_8["" extends infer T_9 ? T_9 extends "" ? T_9 extends SplitAC ? "value" : "default" : never : never] ? T_10 extends CanBeExpanded ? T_10["" extends infer T_11 ? T_11 extends "" ? T_11 extends SplitAC ? "value" : "default" : never : never] extends infer T_12 ? T_12 extends T_10["" extends infer T_11 ? T_11 extends "" ? T_11 extends SplitAC ? "value" : "default" : never : never] ? T_12 extends CanBeExpanded ? T_12["" extends infer T_13 ? T_13 extends "" ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_14 ? T_14 extends T_12["" extends infer T_13 ? T_13 extends "" ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_14 extends CanBeExpanded ? T_14["" extends infer T_15 ? T_15 extends "" ? T_15 extends SplitAC ? "value" : "default" : never : never] extends infer T_16 ? T_16 extends T_14["" extends infer T_15 ? T_15 extends "" ? T_15 extends SplitAC ? "value" : "default" : never : never] ? T_16 extends CanBeExpanded ? T_16["" extends infer T_17 ? T_17 extends "" ? T_17 extends SplitAC ? "value" : "default" : never : never] extends infer T_18 ? T_18 extends T_16["" extends infer T_17 ? T_17 extends "" ? T_17 extends SplitAC ? "value" : "default" : never : never] ? T_18 extends CanBeExpanded ? T_18["" extends infer T_19 ? T_19 extends "" ? T_19 extends SplitAC ? "value" : "default" : never : never] extends infer T_20 ? T_20 extends T_18["" extends infer T_19 ? T_19 extends "" ? T_19 extends SplitAC ? "value" : "default" : never : never] ? T_20 extends CanBeExpanded ? any : any : never : never : any : never : never : any : never : never : any : never : never : any : never : never : any : never : never : any : never : never : any : never : never : any : never : never : any : never : never : any type UseQueryOptions2 = Expand_ ->UseQueryOptions2 : T extends CanBeExpanded ? T["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_2 ? T_2 extends T["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_2 extends CanBeExpanded ? T_2["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_3 ? T_3 extends T_2["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_3 extends CanBeExpanded ? T_3["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_4 ? T_4 extends T_3["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_4 extends CanBeExpanded ? T_4["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_5 ? T_5 extends T_4["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_5 extends CanBeExpanded ? T_5["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_6 ? T_6 extends T_5["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_6 extends CanBeExpanded ? T_6["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_7 ? T_7 extends T_6["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_7 extends CanBeExpanded ? T_7["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_8 ? T_8 extends T_7["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_8 extends CanBeExpanded ? T_8["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_9 ? T_9 extends T_8["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_9 extends CanBeExpanded ? T_9["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_10 ? T_10 extends T_9["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_10 extends CanBeExpanded ? T_10["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_11 ? T_11 extends T_10["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_11 extends CanBeExpanded ? any : any : never : never : any : never : never : any : never : never : any : never : never : any : never : never : any : never : never : any : never : never : any : never : never : any : never : never : any : never : never : any +>UseQueryOptions2 : T extends CanBeExpanded ? T["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] extends infer T_2 ? T_2 extends T["" extends infer T_1 ? T_1 extends "" ? T_1 extends SplitAC ? "value" : "default" : never : never] ? T_2 extends CanBeExpanded ? T_2["" extends infer T_3 ? T_3 extends "" ? T_3 extends SplitAC ? "value" : "default" : never : never] extends infer T_4 ? T_4 extends T_2["" extends infer T_3 ? T_3 extends "" ? T_3 extends SplitAC ? "value" : "default" : never : never] ? T_4 extends CanBeExpanded ? T_4["" extends infer T_5 ? T_5 extends "" ? T_5 extends SplitAC ? "value" : "default" : never : never] extends infer T_6 ? T_6 extends T_4["" extends infer T_5 ? T_5 extends "" ? T_5 extends SplitAC ? "value" : "default" : never : never] ? T_6 extends CanBeExpanded ? T_6["" extends infer T_7 ? T_7 extends "" ? T_7 extends SplitAC ? "value" : "default" : never : never] extends infer T_8 ? T_8 extends T_6["" extends infer T_7 ? T_7 extends "" ? T_7 extends SplitAC ? "value" : "default" : never : never] ? T_8 extends CanBeExpanded ? T_8["" extends infer T_9 ? T_9 extends "" ? T_9 extends SplitAC ? "value" : "default" : never : never] extends infer T_10 ? T_10 extends T_8["" extends infer T_9 ? T_9 extends "" ? T_9 extends SplitAC ? "value" : "default" : never : never] ? T_10 extends CanBeExpanded ? T_10["" extends infer T_11 ? T_11 extends "" ? T_11 extends SplitAC ? "value" : "default" : never : never] extends infer T_12 ? T_12 extends T_10["" extends infer T_11 ? T_11 extends "" ? T_11 extends SplitAC ? "value" : "default" : never : never] ? T_12 extends CanBeExpanded ? T_12["" extends infer T_13 ? T_13 extends "" ? T_13 extends SplitAC ? "value" : "default" : never : never] extends infer T_14 ? T_14 extends T_12["" extends infer T_13 ? T_13 extends "" ? T_13 extends SplitAC ? "value" : "default" : never : never] ? T_14 extends CanBeExpanded ? T_14["" extends infer T_15 ? T_15 extends "" ? T_15 extends SplitAC ? "value" : "default" : never : never] extends infer T_16 ? T_16 extends T_14["" extends infer T_15 ? T_15 extends "" ? T_15 extends SplitAC ? "value" : "default" : never : never] ? T_16 extends CanBeExpanded ? T_16["" extends infer T_17 ? T_17 extends "" ? T_17 extends SplitAC ? "value" : "default" : never : never] extends infer T_18 ? T_18 extends T_16["" extends infer T_17 ? T_17 extends "" ? T_17 extends SplitAC ? "value" : "default" : never : never] ? T_18 extends CanBeExpanded ? T_18["" extends infer T_19 ? T_19 extends "" ? T_19 extends SplitAC ? "value" : "default" : never : never] extends infer T_20 ? T_20 extends T_18["" extends infer T_19 ? T_19 extends "" ? T_19 extends SplitAC ? "value" : "default" : never : never] ? T_20 extends CanBeExpanded ? any : any : never : never : any : never : never : any : never : never : any : never : never : any : never : never : any : never : never : any : never : never : any : never : never : any : never : never : any : never : never : any type UseQueryOptions3 = Expand_ extends infer O ? O : never >UseQueryOptions3 : UseQueryOptions3 diff --git a/tsc/testdata/baselines/reference/compiler/recursiveConditionalTypes.types b/tsc/testdata/baselines/reference/compiler/recursiveConditionalTypes.types index 73d9df41e47d2..73caf988e3ed5 100644 --- a/tsc/testdata/baselines/reference/compiler/recursiveConditionalTypes.types +++ b/tsc/testdata/baselines/reference/compiler/recursiveConditionalTypes.types @@ -223,15 +223,15 @@ unbox(b4); // { value: { value: typeof b4 }} >b4 : { value: { value: { value: typeof b4; }; }; } unbox({ value: { value: { get value() { return this; } }}}); // { readonly value: ... } ->unbox({ value: { value: { get value() { return this; } }}}) : { readonly value: { readonly value: any; }; } +>unbox({ value: { value: { get value() { return this; } }}}) : { readonly value: any; } >unbox : (box: RecBox) => T ->{ value: { value: { get value() { return this; } }}} : { value: { value: { readonly value: { readonly value: any; }; }; }; } ->value : { value: { readonly value: { readonly value: any; }; }; } ->{ value: { get value() { return this; } }} : { value: { readonly value: { readonly value: any; }; }; } ->value : { readonly value: { readonly value: any; }; } ->{ get value() { return this; } } : { readonly value: { readonly value: any; }; } +>{ value: { value: { get value() { return this; } }}} : { value: { value: { readonly value: any; }; }; } +>value : { value: { readonly value: any; }; } +>{ value: { get value() { return this; } }} : { value: { readonly value: any; }; } >value : { readonly value: any; } ->this : { readonly value: any; } | RecBox<{ readonly value: { readonly value: any; }; }> +>{ get value() { return this; } } : { readonly value: any; } +>value : { readonly value: any; } +>this : { readonly value: any; } | RecBox<{ readonly value: any; }> // Inference from nested instantiations of same generic types diff --git a/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.errors.txt b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.errors.txt index 83c4e162312f0..f3575f8c60533 100644 --- a/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.errors.txt @@ -1,29 +1,11 @@ consumer.ts(11,7): error TS2322: Type '() => typeof arrow' is not assignable to type 'number'. consumer.ts(13,25): error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. -exported.ts(1,14): error TS5088: The inferred type of 'arrow' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -exported.ts(2,14): error TS5088: The inferred type of 'expression' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -exported.ts(11,14): error TS5088: The inferred type of 'named' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -exported.ts(19,14): error TS5088: The inferred type of 'nestedReturn' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -exported.ts(26,14): error TS5088: The inferred type of 'objectReturn' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -exported.ts(27,14): error TS5088: The inferred type of 'tupleReturn' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +hiddenReferences.ts(3,12): error TS5088: The inferred type of 'expose' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. hiddenReferences.ts(4,15): error TS5088: The inferred type of 'next' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. hiddenReferences.ts(5,5): error TS5088: The inferred type of 'expose' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -namedReferences.ts(8,14): error TS5088: The inferred type of 'parenthesized' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -namedReferences.ts(9,14): error TS5088: The inferred type of 'asserted' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -namedReferences.ts(15,14): error TS4025: Exported variable 'hiddenAlias' has or is using private name 'Hidden'. -namedReferences.ts(16,14): error TS4025: Exported variable 'siblingHiddenAliases' has or is using private name 'Hidden'. -namedReferences.ts(20,12): error TS5088: The inferred type of '"a-b"' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -namedReferences.ts(21,12): error TS5088: The inferred type of '[methodKey]' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -namedReferences.ts(22,5): error TS5088: The inferred type of 'recur' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. namedReferences.ts(28,7): error TS2322: Type 'string' is not assignable to type 'number'. namedReferences.ts(29,14): error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. -nestedNamedFunctions.ts(1,14): error TS5088: The inferred type of 'nestedObject' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -nestedNamedFunctions.ts(2,14): error TS5088: The inferred type of 'nestedTuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -nestedNamedFunctions.ts(3,14): error TS5088: The inferred type of 'object' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -nestedNamedFunctions.ts(4,14): error TS5088: The inferred type of 'tuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. nestedNamedFunctions.ts(5,14): error TS5088: The inferred type of 'factory' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -nestedNamedFunctions.ts(6,14): error TS5088: The inferred type of 'method' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -nestedNamedFunctions.ts(7,14): error TS5088: The inferred type of 'accessor' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. nestedNamedFunctions.ts(8,17): error TS5088: The inferred type of 'local' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. recursiveAnnotations.ts(2,15): error TS2502: 'tuple' is referenced directly or indirectly in its own type annotation. recursiveAnnotations.ts(3,15): error TS2502: 'array' is referenced directly or indirectly in its own type annotation. @@ -32,54 +14,17 @@ recursiveAnnotations.ts(9,15): error TS2502: 'conditional' is referenced directl recursiveObject.ts(1,17): error TS5088: The inferred type of 'recursiveObject' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. recursiveObject.ts(12,7): error TS2322: Type '(arg: U) => { call: any; consume: (arg: number) => any; }' is not assignable to type 'number'. recursiveObject.ts(13,16): error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. -recursiveStructures.ts(1,14): error TS5088: The inferred type of 'object' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -recursiveStructures.ts(2,14): error TS5088: The inferred type of 'method' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -recursiveStructures.ts(3,14): error TS5088: The inferred type of 'accessor' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -recursiveStructures.ts(4,14): error TS5088: The inferred type of 'tuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -recursiveStructures.ts(5,14): error TS5088: The inferred type of 'tupleObject' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -recursiveStructures.ts(6,14): error TS5088: The inferred type of 'array' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -recursiveStructures.ts(7,14): error TS5088: The inferred type of 'first' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -recursiveStructures.ts(8,14): error TS5088: The inferred type of 'second' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -recursiveStructures.ts(9,14): error TS5088: The inferred type of 'nested' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -recursiveStructures.ts(10,14): error TS5088: The inferred type of 'shadowed' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -recursiveStructures.ts(11,14): error TS5088: The inferred type of 'memberTuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -recursiveStructures.ts(12,14): error TS5088: The inferred type of 'memberArray' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -recursiveStructures.ts(13,14): error TS5088: The inferred type of 'quoted' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -recursiveStructures.ts(14,14): error TS5088: The inferred type of 'numeric' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -recursiveStructures.ts(16,14): error TS5088: The inferred type of 'computed' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -recursiveStructures.ts(17,14): error TS5088: The inferred type of 'union' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -recursiveStructures.ts(23,14): error TS5088: The inferred type of 'specialized' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -recursiveStructures.ts(29,14): error TS5088: The inferred type of 'indexed' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -recursiveStructures.ts(34,14): error TS5088: The inferred type of 'mapped' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -recursiveStructures.ts(39,14): error TS5088: The inferred type of 'viaAnnotation' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. recursiveStructures.ts(47,7): error TS2322: Type 'string' is not assignable to type 'number'. -script.ts(1,7): error TS5088: The inferred type of 'scriptArrow' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -script.ts(2,7): error TS5088: The inferred type of 'scriptExpression' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -signatureScopes.ts(1,14): error TS5088: The inferred type of 'scoped' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -signatureScopes.ts(10,14): error TS5088: The inferred type of 'numberScope' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -signatureScopes.ts(11,14): error TS5088: The inferred type of 'stringScope' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -signatureScopes.ts(21,14): error TS5088: The inferred type of 'nestedOwner' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -signatureScopes.ts(33,14): error TS5088: The inferred type of 'nestedNumber' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -signatureScopes.ts(34,14): error TS5088: The inferred type of 'nestedString' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -signatureScopes.ts(35,14): error TS5088: The inferred type of 'nestedBoolean' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -==== script.ts (2 errors) ==== +==== script.ts (0 errors) ==== const scriptArrow = () => scriptArrow; - ~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'scriptArrow' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. const scriptExpression = function () { return scriptExpression; }; - ~~~~~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'scriptExpression' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. function scriptDeclaration() { return scriptDeclaration; } -==== exported.ts (6 errors) ==== +==== exported.ts (0 errors) ==== export const arrow = () => arrow; - ~~~~~ -!!! error TS5088: The inferred type of 'arrow' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export const expression = function () { return expression; }; - ~~~~~~~~~~ -!!! error TS5088: The inferred type of 'expression' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export function declaration() { return declaration; } export const annotated: () => typeof annotated = () => annotated; export const first = () => second; @@ -89,8 +34,6 @@ signatureScopes.ts(35,14): error TS5088: The inferred type of 'nestedBoolean' re export const wrapped = { arrow }; export const tuple = [arrow] as const; export const named = function self() { return self; }; - ~~~~~ -!!! error TS5088: The inferred type of 'named' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export const broad: unknown = function self() { return self; }; export const contextual: () => unknown = function self() { return self; }; export const specialized = generic; @@ -99,8 +42,6 @@ signatureScopes.ts(35,14): error TS5088: The inferred type of 'nestedBoolean' re export const optionalParameter = (value?: string) => optionalParameter; export const restParameter = (...values: string[]) => restParameter; export const nestedReturn = () => () => nestedReturn; - ~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'nestedReturn' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export const finiteObject = { call: (value: string) => ({ value }) }; export const finiteTuple = [(value: number) => [value] as const] as const; export const nestedGeneric = (value: T) => ({ @@ -108,11 +49,7 @@ signatureScopes.ts(35,14): error TS5088: The inferred type of 'nestedBoolean' re }); export const instantiatedNested = nestedGeneric("text"); export const objectReturn = () => ({ call: objectReturn }); - ~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'objectReturn' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export const tupleReturn = () => [tupleReturn] as const; - ~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'tupleReturn' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export const shadowed = function self(shadowed: number) { return self; }; ==== consumer.ts (2 errors) ==== @@ -158,28 +95,16 @@ signatureScopes.ts(35,14): error TS5088: The inferred type of 'nestedBoolean' re ~~~~~~~ !!! error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. -==== nestedNamedFunctions.ts (8 errors) ==== +==== nestedNamedFunctions.ts (2 errors) ==== export const nestedObject = { recur: () => nestedObject.recur }; - ~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'nestedObject' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export const nestedTuple = [() => nestedTuple[0]] as const; - ~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'nestedTuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export const object = { recur: function self() { return self; } }; - ~~~~~~ -!!! error TS5088: The inferred type of 'object' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export const tuple = [function self() { return self; }] as const; - ~~~~~ -!!! error TS5088: The inferred type of 'tuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export const factory = () => function self() { return self; }; ~~~~~~~ !!! error TS5088: The inferred type of 'factory' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export const method = { recur() { return method; } }; - ~~~~~~ -!!! error TS5088: The inferred type of 'method' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export const accessor = { get recur() { return accessor; } }; - ~~~~~~~~ -!!! error TS5088: The inferred type of 'accessor' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export function local() { ~~~~~ !!! error TS5088: The inferred type of 'local' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. @@ -187,86 +112,46 @@ signatureScopes.ts(35,14): error TS5088: The inferred type of 'nestedBoolean' re return recur; } -==== recursiveStructures.ts (21 errors) ==== +==== recursiveStructures.ts (1 errors) ==== export const object = { value: 1, next: () => object }; - ~~~~~~ -!!! error TS5088: The inferred type of 'object' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export const method = { value: 1, next() { return method; } }; - ~~~~~~ -!!! error TS5088: The inferred type of 'method' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export const accessor = { value: 1, get next() { return accessor; } }; - ~~~~~~~~ -!!! error TS5088: The inferred type of 'accessor' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export const tuple = [() => tuple] as const; - ~~~~~ -!!! error TS5088: The inferred type of 'tuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export const tupleObject = [{ next: () => tupleObject }] as const; - ~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'tupleObject' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export const array = [() => array]; - ~~~~~ -!!! error TS5088: The inferred type of 'array' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export const first = { next: () => second }; - ~~~~~ -!!! error TS5088: The inferred type of 'first' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export const second = { next: () => first }; - ~~~~~~ -!!! error TS5088: The inferred type of 'second' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export const nested = { inner: { next() { return nested.inner; } } }; - ~~~~~~ -!!! error TS5088: The inferred type of 'nested' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export const shadowed = { next: function self(shadowed: number) { return self; } }; - ~~~~~~~~ -!!! error TS5088: The inferred type of 'shadowed' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export const memberTuple = [function self() { return self; }] as const; - ~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'memberTuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export const memberArray = [function self() { return self; }]; - ~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'memberArray' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export const quoted = { "a-b": function self() { return self; } }; - ~~~~~~ -!!! error TS5088: The inferred type of 'quoted' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export const numeric = { 0: function self() { return self; } }; - ~~~~~~~ -!!! error TS5088: The inferred type of 'numeric' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export const key = Symbol(); export const computed = { [key]: function self() { return self; } }; - ~~~~~~~~ -!!! error TS5088: The inferred type of 'computed' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export const union = Math.random() ? { next: () => union } : undefined; - ~~~~~ -!!! error TS5088: The inferred type of 'union' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. function create(value: T) { const result = { value, next: () => result }; return result; } export const specialized = create("text"); - ~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'specialized' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export const broad: unknown = { next() { return this; } }; function createIndexed() { const value: { [key: string]: typeof value } = {}; return value; } export const indexed = createIndexed(); - ~~~~~~~ -!!! error TS5088: The inferred type of 'indexed' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. function createMapped() { const value: { [K in keyof T]: typeof value } = null!; return value; } export const mapped = createMapped<{ next: unknown }>(); - ~~~~~~ -!!! error TS5088: The inferred type of 'mapped' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. function createAnnotated(value: T) { const node: { value: T; next: () => typeof node } = { value, next: () => node }; return node; } export const viaAnnotation = createAnnotated("text"); - ~~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'viaAnnotation' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. const objectValue: number = object.next().next().value; const tupleValue: typeof tuple = tuple[0]()[0](); @@ -297,7 +182,7 @@ signatureScopes.ts(35,14): error TS5088: The inferred type of 'nestedBoolean' re ~~~~~~~~~~~ !!! error TS2502: 'conditional' is referenced directly or indirectly in its own type annotation. -==== namedReferences.ts (9 errors) ==== +==== namedReferences.ts (2 errors) ==== export type Link = { value: T; next: Link }; export type Callable = { (value: T): Callable; link: Link }; export type Wrapped = ( { next: Wrapped } ); @@ -306,34 +191,20 @@ signatureScopes.ts(35,14): error TS5088: The inferred type of 'nestedBoolean' re export const nextLink = link.next; export const nextCallable = callable(1); export const parenthesized = (function self() { return self; }); - ~~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'parenthesized' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export const asserted = (function self() { return self; }) satisfies () => unknown; - ~~~~~~~~ -!!! error TS5088: The inferred type of 'asserted' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export const widened: () => unknown = (function self() { return self; }); function createHidden(value: T) { type Hidden = { value: T; next: Hidden }; return null! as Hidden; } export const hiddenAlias = createHidden("text"); - ~~~~~~~~~~~ -!!! error TS4025: Exported variable 'hiddenAlias' has or is using private name 'Hidden'. export const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias }; - ~~~~~~~~~~~~~~~~~~~~ -!!! error TS4025: Exported variable 'siblingHiddenAliases' has or is using private name 'Hidden'. export const methodKey = Symbol(); export class Methods { static recur() { return Methods.recur; } static "a-b"() { return Methods["a-b"]; } - ~~~~~ -!!! error TS5088: The inferred type of '"a-b"' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. static [methodKey]() { return Methods[methodKey]; } - ~~~~~~~~~~~ -!!! error TS5088: The inferred type of '[methodKey]' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. recur() { return this.recur; } - ~~~~~ -!!! error TS5088: The inferred type of 'recur' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. } export function overloaded(value: string): typeof overloaded; export function overloaded(value: number): typeof overloaded; @@ -346,10 +217,12 @@ signatureScopes.ts(35,14): error TS5088: The inferred type of 'nestedBoolean' re ~~~~~~~ !!! error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. -==== hiddenReferences.ts (2 errors) ==== +==== hiddenReferences.ts (3 errors) ==== export class Hidden { private static recur() { return Hidden.recur; } static expose() { return Hidden.recur; } + ~~~~~~ +!!! error TS5088: The inferred type of 'expose' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. protected next() { return this.next; } ~~~~ !!! error TS5088: The inferred type of 'next' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. @@ -358,10 +231,8 @@ signatureScopes.ts(35,14): error TS5088: The inferred type of 'nestedBoolean' re !!! error TS5088: The inferred type of 'expose' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. } -==== signatureScopes.ts (7 errors) ==== +==== signatureScopes.ts (0 errors) ==== export const scoped = { - ~~~~~~ -!!! error TS5088: The inferred type of 'scoped' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. first(outer: T) { return { nested(inner: T) { return { outer, inner, next: scoped }; }, @@ -371,11 +242,7 @@ signatureScopes.ts(35,14): error TS5088: The inferred type of 'nestedBoolean' re second(value: T) { return { value, next: scoped }; }, }; export const numberScope = scoped.first(1); - ~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'numberScope' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export const stringScope = scoped.first("outer"); - ~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'stringScope' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. const nested = numberScope.nested("inner"); const sibling = numberScope.sibling(true); const nestedOuter: number = nested.outer; @@ -386,8 +253,6 @@ signatureScopes.ts(35,14): error TS5088: The inferred type of 'nestedBoolean' re const again: number = nested.next.second(1).value; export const nestedOwner = { - ~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'nestedOwner' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. make(outer: T) { return { nested(inner: U) { return { outer, inner, owner: nestedOwner }; }, @@ -400,14 +265,8 @@ signatureScopes.ts(35,14): error TS5088: The inferred type of 'nestedBoolean' re }, }; export const nestedNumber = nestedOwner.make(1); - ~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'nestedNumber' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export const nestedString = nestedNumber.nested(true).owner.make("text").nested(2); - ~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'nestedString' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export const nestedBoolean = nestedString.owner.make(true).nested("inner"); - ~~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'nestedBoolean' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. const nestedStringOuter: string = nestedString.outer; const nestedStringInner: number = nestedString.inner; const nestedBooleanOuter: boolean = nestedBoolean.outer; diff --git a/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.js b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.js index 6222c87f660d4..df714bfc4e219 100644 --- a/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.js +++ b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.js @@ -448,8 +448,119 @@ export const inferredCopy = inferred; const inferredValue = inferredCopy.next(1).second("text").value; +//// [script.d.ts] +declare const scriptArrow: () => typeof scriptArrow; +declare const scriptExpression: () => typeof scriptExpression; +declare function scriptDeclaration(): typeof scriptDeclaration; +//// [exported.d.ts] +export declare const arrow: () => typeof arrow; +export declare const expression: () => typeof expression; +export declare function declaration(): typeof declaration; +export declare const annotated: () => typeof annotated; +export declare const first: () => typeof second; +export declare const second: () => typeof first; +export declare const generic: (value: T) => typeof generic; +export declare const finite: () => () => number; +export declare const wrapped: { + arrow: typeof arrow; +}; +export declare const tuple: readonly [typeof arrow]; +export declare const named: () => typeof named; +export declare const broad: unknown; +export declare const contextual: () => unknown; +export declare const specialized: (value: number) => typeof generic; +export declare const annotatedParameter: (value: string | number) => typeof annotatedParameter; +export declare const renamedParameter: (other: number | string) => typeof renamedParameter; +export declare const optionalParameter: (value?: string) => typeof optionalParameter; +export declare const restParameter: (...values: string[]) => typeof restParameter; +export declare const nestedReturn: () => () => typeof nestedReturn; +export declare const finiteObject: { + call: (value: string) => { + value: string; + }; +}; +export declare const finiteTuple: readonly [(value: number) => readonly [number]]; +export declare const nestedGeneric: (value: T) => { + call: (other: T) => readonly [T, T]; +}; +export declare const instantiatedNested: { + call: (other: string) => readonly [string, string]; +}; +export declare const objectReturn: () => { + call: typeof objectReturn; +}; +export declare const tupleReturn: () => readonly [typeof tupleReturn]; +export declare const shadowed: (shadowed: number) => typeof import("./exported").shadowed; //// [consumer.d.ts] export {}; +//// [recursiveStructures.d.ts] +export declare const object: { + value: number; + next: () => typeof object; +}; +export declare const method: { + value: number; + next(): typeof method; +}; +export declare const accessor: { + value: number; + readonly next: typeof accessor; +}; +export declare const tuple: readonly [() => typeof tuple]; +export declare const tupleObject: readonly [{ + readonly next: () => typeof tupleObject; +}]; +export declare const array: (() => typeof array)[]; +export declare const first: { + next: () => { + next: () => typeof first; + }; +}; +export declare const second: { + next: () => { + next: () => typeof second; + }; +}; +export declare const nested: { + inner: { + next(): { + next(): (typeof nested)["inner"]; + }; + }; +}; +export declare const shadowed: { + next: (shadowed: number) => typeof import("./recursiveStructures").shadowed["next"]; +}; +export declare const memberTuple: readonly [() => (typeof memberTuple)[0]]; +export declare const memberArray: (() => (typeof memberArray)[0])[]; +export declare const quoted: { + "a-b": () => (typeof quoted)["a-b"]; +}; +export declare const numeric: { + 0: () => (typeof numeric)[0]; +}; +export declare const key: unique symbol; +export declare const computed: { + [key]: () => (typeof computed)[typeof key]; +}; +export declare const union: { + next: () => typeof union; +} | undefined; +export declare const specialized: { + value: string; + next: () => typeof specialized; +}; +export declare const broad: unknown; +export declare const indexed: { + [key: string]: typeof indexed; +}; +export declare const mapped: { + next: typeof mapped; +}; +export declare const viaAnnotation: { + value: string; + next: () => typeof viaAnnotation; +}; //// [recursiveAnnotations.d.ts] declare const object: { next: typeof object; @@ -468,3 +579,377 @@ declare const mapped: { }; declare const union: typeof union | undefined; declare const conditional: true extends false ? never : typeof conditional; +//// [namedReferences.d.ts] +export type Link = { + value: T; + next: Link; +}; +export type Callable = { + (value: T): Callable; + link: Link; +}; +export type Wrapped = ({ + next: Wrapped; +}); +export declare const link: Link; +export declare const callable: Callable; +export declare const nextLink: Link; +export declare const nextCallable: Callable; +export declare const parenthesized: () => typeof parenthesized; +export declare const asserted: () => typeof asserted; +export declare const widened: () => unknown; +export declare const hiddenAlias: { + value: string; + next: typeof hiddenAlias; +}; +export declare const siblingHiddenAliases: { + first: { + value: string; + next: (typeof siblingHiddenAliases)["first"]; + }; + second: { + value: string; + next: (typeof siblingHiddenAliases)["second"]; + }; +}; +export declare const methodKey: unique symbol; +export declare class Methods { + static recur(): (typeof Methods)["recur"]; + static "a-b"(): (typeof Methods)["a-b"]; + static [methodKey](): (typeof Methods)[typeof methodKey]; + recur(): Methods["recur"]; +} +export declare function overloaded(value: string): typeof overloaded; +export declare function overloaded(value: number): typeof overloaded; +//// [signatureScopes.d.ts] +export declare const scoped: { + first(outer: T): { + nested(inner: T_1): { + outer: T; + inner: T_1; + next: typeof scoped; + }; + sibling(inner: T_1): { + outer: T; + inner: T_1; + next: typeof scoped; + }; + }; + second(value: T): { + value: T; + next: typeof scoped; + }; +}; +export declare const numberScope: { + nested(inner: T): { + outer: number; + inner: T; + next: { + first(outer: T_1): { + nested(inner: T_2): { + outer: T_1; + inner: T_2; + next: typeof scoped; + }; + sibling(inner: T_2): { + outer: T_1; + inner: T_2; + next: typeof scoped; + }; + }; + second(value: T_1): { + value: T_1; + next: typeof scoped; + }; + }; + }; + sibling(inner: T): { + outer: number; + inner: T; + next: { + first(outer: T_1): { + nested(inner: T_2): { + outer: T_1; + inner: T_2; + next: typeof scoped; + }; + sibling(inner: T_2): { + outer: T_1; + inner: T_2; + next: typeof scoped; + }; + }; + second(value: T_1): { + value: T_1; + next: typeof scoped; + }; + }; + }; +}; +export declare const stringScope: { + nested(inner: T): { + outer: string; + inner: T; + next: { + first(outer: T_1): { + nested(inner: T_2): { + outer: T_1; + inner: T_2; + next: typeof scoped; + }; + sibling(inner: T_2): { + outer: T_1; + inner: T_2; + next: typeof scoped; + }; + }; + second(value: T_1): { + value: T_1; + next: typeof scoped; + }; + }; + }; + sibling(inner: T): { + outer: string; + inner: T; + next: { + first(outer: T_1): { + nested(inner: T_2): { + outer: T_1; + inner: T_2; + next: typeof scoped; + }; + sibling(inner: T_2): { + outer: T_1; + inner: T_2; + next: typeof scoped; + }; + }; + second(value: T_1): { + value: T_1; + next: typeof scoped; + }; + }; + }; +}; +export declare const nestedOwner: { + make(outer: T): { + nested(inner: U): { + outer: T; + inner: U; + owner: typeof nestedOwner; + }; + constrained(inner: U): { + outer: T; + inner: U; + owner: typeof nestedOwner; + }; + copied(inner: U): { + outer: T; + inner: U; + owner: typeof nestedOwner; + }; + rest(values_0: U): { + outer: T; + inner: U; + owner: typeof nestedOwner; + }; + }; +}; +export declare const nestedNumber: { + nested(inner: U): { + outer: number; + inner: U; + owner: { + make(outer: T): { + nested(inner: U_1): { + outer: T; + inner: U_1; + owner: typeof nestedOwner; + }; + constrained(inner: U_1): { + outer: T; + inner: U_1; + owner: typeof nestedOwner; + }; + copied(inner: U_1): { + outer: T; + inner: U_1; + owner: typeof nestedOwner; + }; + rest(values_0: U_1): { + outer: T; + inner: U_1; + owner: typeof nestedOwner; + }; + }; + }; + }; + constrained(inner: U): { + outer: number; + inner: U; + owner: { + make(outer: T): { + nested(inner: U_1): { + outer: T; + inner: U_1; + owner: typeof nestedOwner; + }; + constrained(inner: U_1): { + outer: T; + inner: U_1; + owner: typeof nestedOwner; + }; + copied(inner: U_1): { + outer: T; + inner: U_1; + owner: typeof nestedOwner; + }; + rest(values_0: U_1): { + outer: T; + inner: U_1; + owner: typeof nestedOwner; + }; + }; + }; + }; + copied(inner: U): { + outer: number; + inner: U; + owner: typeof nestedOwner; + }; + rest(values_0: U): { + outer: number; + inner: U; + owner: { + make(outer: T): { + nested(inner: U_1): { + outer: T; + inner: U_1; + owner: typeof nestedOwner; + }; + constrained(inner: U_1): { + outer: T; + inner: U_1; + owner: typeof nestedOwner; + }; + copied(inner: U_1): { + outer: T; + inner: U_1; + owner: typeof nestedOwner; + }; + rest(values_0: U_1): { + outer: T; + inner: U_1; + owner: typeof nestedOwner; + }; + }; + }; + }; +}; +export declare const nestedString: { + outer: string; + inner: number; + owner: { + make(outer: T): { + nested(inner: U): { + outer: T; + inner: U; + owner: typeof nestedOwner; + }; + constrained(inner: U): { + outer: T; + inner: U; + owner: typeof nestedOwner; + }; + copied(inner: U): { + outer: T; + inner: U; + owner: typeof nestedOwner; + }; + rest(values_0: U): { + outer: T; + inner: U; + owner: typeof nestedOwner; + }; + }; + }; +}; +export declare const nestedBoolean: { + outer: boolean; + inner: string; + owner: { + make(outer: T): { + nested(inner: U): { + outer: T; + inner: U; + owner: typeof nestedOwner; + }; + constrained(inner: U): { + outer: T; + inner: U; + owner: typeof nestedOwner; + }; + copied(inner: U): { + outer: T; + inner: U; + owner: typeof nestedOwner; + }; + rest(values_0: U): { + outer: T; + inner: U; + owner: typeof nestedOwner; + }; + }; + }; +}; +export declare const reused: { + first(...values: [T]): { + value: T; + next: typeof reused; + }; + second(value: T): { + value: T; + next: typeof reused; + }; + shadowed(reused: T): { + value: T; + next: typeof reused; + }; +}; +export declare const copy: { + first(values_0: T): { + value: T; + next: typeof reused; + }; + second(value: T): { + value: T; + next: typeof reused; + }; + shadowed(reused: T): { + value: T; + next: typeof reused; + }; +}; +export type Inferred = T extends (value: infer U) => infer R ? { + [K in keyof R]: (value: U) => R[K]; +} : never; +export declare const inferred: Inferred<(value: number) => { + next: typeof reused; +}>; +export declare const inferredCopy: { + next: (value: number) => { + first(values_0: T): { + value: T; + next: typeof reused; + }; + second(value: T): { + value: T; + next: typeof reused; + }; + shadowed(reused: T): { + value: T; + next: typeof reused; + }; + }; +}; diff --git a/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.types b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.types index 7767f0447a3c0..7f4921e58c412 100644 --- a/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.types +++ b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.types @@ -59,8 +59,8 @@ export const finite = () => () => 1; >1 : 1 export const wrapped = { arrow }; ->wrapped : { arrow: () => typeof arrow; } ->{ arrow } : { arrow: () => typeof arrow; } +>wrapped : { arrow: () => (typeof wrapped)["arrow"]; } +>{ arrow } : { arrow: () => (typeof wrapped)["arrow"]; } >arrow : () => typeof arrow export const tuple = [arrow] as const; @@ -70,26 +70,26 @@ export const tuple = [arrow] as const; >arrow : () => typeof arrow export const named = function self() { return self; }; ->named : () => typeof self ->function self() { return self; } : () => typeof self +>named : () => typeof named +>function self() { return self; } : () => typeof named >self : () => typeof named >self : () => typeof named export const broad: unknown = function self() { return self; }; >broad : unknown ->function self() { return self; } : () => typeof self ->self : () => typeof broad ->self : () => typeof broad +>function self() { return self; } : () => any +>self : () => typeof self +>self : () => typeof self export const contextual: () => unknown = function self() { return self; }; >contextual : () => unknown ->function self() { return self; } : () => typeof self ->self : () => typeof contextual ->self : () => typeof contextual +>function self() { return self; } : () => any +>self : () => typeof self +>self : () => typeof self export const specialized = generic; ->specialized : (value: number) => (value: number) => typeof generic ->generic : (value: number) => (value: number) => typeof generic +>specialized : (value: number) => (value: T) => typeof generic +>generic : (value: number) => (value: T) => typeof generic >generic : (value: T) => typeof generic export const annotatedParameter = (value: string | number) => annotatedParameter; @@ -195,7 +195,7 @@ import { arrow, expression, declaration, first, generic, finite, wrapped, tuple >first : () => () => typeof first >generic : (value: T) => typeof generic >finite : () => () => number ->wrapped : { arrow: () => typeof arrow; } +>wrapped : { arrow: () => (typeof wrapped)["arrow"]; } >tuple : readonly [() => typeof arrow] import { instantiatedNested, objectReturn, tupleReturn, shadowed } from "./exported"; @@ -259,7 +259,7 @@ const g: typeof arrow = wrapped.arrow()(); >wrapped.arrow()() : () => typeof arrow >wrapped.arrow() : () => typeof arrow >wrapped.arrow : () => typeof arrow ->wrapped : { arrow: () => typeof arrow; } +>wrapped : { arrow: () => (typeof wrapped)["arrow"]; } >arrow : () => typeof arrow const h: typeof arrow = tuple[0]()(); @@ -326,27 +326,27 @@ const shadowedCall: typeof shadowed = shadowed(1)(2); === recursiveObject.ts === export function recursiveObject() { ->recursiveObject : () => { call: (arg: U) => any; consume: (arg: T) => any; } +>recursiveObject : () => { call: (arg: U) => typeof value; consume: (arg: T) => typeof value; } const value = { ->value : { call: (arg: U) => any; consume: (arg: T) => any; } ->{ call: (arg: U) => value, consume: (arg: T) => value, } : { call: (arg: U) => { call: (arg: U) => any; consume: (arg: T) => any; }; consume: (arg: T) => { call: (arg: U) => any; consume: (arg: T) => any; }; } +>value : { call: (arg: U) => typeof value; consume: (arg: T) => typeof value; } +>{ call: (arg: U) => value, consume: (arg: T) => value, } : { call: (arg: U) => typeof value; consume: (arg: T) => typeof value; } call: (arg: U) => value, ->call : (arg: U) => { call: (arg: U) => any; consume: (arg: T) => any; } ->(arg: U) => value : (arg: U) => { call: (arg: U) => any; consume: (arg: T) => any; } +>call : (arg: U) => { call: (typeof value)["call"]; consume: (arg: T) => typeof value; } +>(arg: U) => value : (arg: U) => { call: (typeof value)["call"]; consume: (arg: T) => typeof value; } >arg : U ->value : { call: (arg: U) => any; consume: (arg: T) => any; } +>value : { call: (arg: U) => typeof value; consume: (arg: T) => typeof value; } consume: (arg: T) => value, ->consume : (arg: T) => { call: (arg: U) => any; consume: (arg: T) => any; } ->(arg: T) => value : (arg: T) => { call: (arg: U) => any; consume: (arg: T) => any; } +>consume : (arg: T) => { call: (arg: U) => typeof value; consume: (typeof value)["consume"]; } +>(arg: T) => value : (arg: T) => { call: (arg: U) => typeof value; consume: (typeof value)["consume"]; } >arg : T ->value : { call: (arg: U) => any; consume: (arg: T) => any; } +>value : { call: (arg: U) => typeof value; consume: (arg: T) => typeof value; } }; return value; ->value : { call: (arg: U) => any; consume: (arg: T) => any; } +>value : { call: (arg: U) => typeof value; consume: (arg: T) => typeof value; } } const result = recursiveObject().call("hello").consume(1); @@ -391,180 +391,180 @@ result.consume("wrong"); === nestedNamedFunctions.ts === export const nestedObject = { recur: () => nestedObject.recur }; ->nestedObject : { recur: () => () => any; } ->{ recur: () => nestedObject.recur } : { recur: () => () => any; } ->recur : () => any ->() => nestedObject.recur : () => any ->nestedObject.recur : () => any ->nestedObject : { recur: () => () => any; } ->recur : () => any +>nestedObject : { recur: () => (typeof nestedObject)["recur"]; } +>{ recur: () => nestedObject.recur } : { recur: () => (typeof nestedObject)["recur"]; } +>recur : () => (typeof nestedObject)["recur"] +>() => nestedObject.recur : () => (typeof nestedObject)["recur"] +>nestedObject.recur : () => (typeof nestedObject)["recur"] +>nestedObject : { recur: () => (typeof nestedObject)["recur"]; } +>recur : () => (typeof nestedObject)["recur"] export const nestedTuple = [() => nestedTuple[0]] as const; ->nestedTuple : readonly [() => any] ->[() => nestedTuple[0]] as const : readonly [() => any] ->[() => nestedTuple[0]] : readonly [() => any] ->() => nestedTuple[0] : () => any ->nestedTuple[0] : () => any ->nestedTuple : readonly [() => any] +>nestedTuple : readonly [() => (typeof nestedTuple)[0]] +>[() => nestedTuple[0]] as const : readonly [() => (typeof nestedTuple)[0]] +>[() => nestedTuple[0]] : readonly [() => (typeof nestedTuple)[0]] +>() => nestedTuple[0] : () => (typeof nestedTuple)[0] +>nestedTuple[0] : () => (typeof nestedTuple)[0] +>nestedTuple : readonly [() => (typeof nestedTuple)[0]] >0 : 0 export const object = { recur: function self() { return self; } }; ->object : { recur: () => () => any; } ->{ recur: function self() { return self; } } : { recur: () => () => any; } ->recur : () => any ->function self() { return self; } : () => any ->self : () => any ->self : () => any +>object : { recur: () => (typeof object)["recur"]; } +>{ recur: function self() { return self; } } : { recur: () => (typeof object)["recur"]; } +>recur : () => (typeof object)["recur"] +>function self() { return self; } : () => (typeof object)["recur"] +>self : () => (typeof object)["recur"] +>self : () => (typeof object)["recur"] export const tuple = [function self() { return self; }] as const; ->tuple : readonly [() => any] ->[function self() { return self; }] as const : readonly [() => any] ->[function self() { return self; }] : readonly [() => any] ->function self() { return self; } : () => any ->self : () => any ->self : () => any +>tuple : readonly [() => (typeof tuple)[0]] +>[function self() { return self; }] as const : readonly [() => (typeof tuple)[0]] +>[function self() { return self; }] : readonly [() => (typeof tuple)[0]] +>function self() { return self; } : () => (typeof tuple)[0] +>self : () => (typeof tuple)[0] +>self : () => (typeof tuple)[0] export const factory = () => function self() { return self; }; >factory : () => () => () => any >() => function self() { return self; } : () => () => () => any >function self() { return self; } : () => any ->self : () => any ->self : () => any +>self : () => typeof self +>self : () => typeof self export const method = { recur() { return method; } }; ->method : { recur(): any; } ->{ recur() { return method; } } : { recur(): { recur(): any; }; } ->recur : () => { recur(): any; } ->method : { recur(): any; } +>method : { recur(): typeof method; } +>{ recur() { return method; } } : { recur(): typeof method; } +>recur : () => { recur(): typeof method; } +>method : { recur(): typeof method; } export const accessor = { get recur() { return accessor; } }; ->accessor : { readonly recur: any; } ->{ get recur() { return accessor; } } : { readonly recur: { readonly recur: any; }; } ->recur : { readonly recur: any; } ->accessor : { readonly recur: any; } +>accessor : { readonly recur: typeof accessor; } +>{ get recur() { return accessor; } } : { readonly recur: typeof accessor; } +>recur : { readonly recur: typeof accessor; } +>accessor : { readonly recur: typeof accessor; } export function local() { ->local : () => () => any +>local : () => () => typeof recur function recur() { return recur; } ->recur : () => any ->recur : () => any +>recur : () => typeof recur +>recur : () => typeof recur return recur; ->recur : () => any +>recur : () => typeof recur } === recursiveStructures.ts === export const object = { value: 1, next: () => object }; ->object : { value: number; next: () => any; } ->{ value: 1, next: () => object } : { value: number; next: () => { value: number; next: () => any; }; } +>object : { value: number; next: () => typeof object; } +>{ value: 1, next: () => object } : { value: number; next: () => typeof object; } >value : number >1 : 1 ->next : () => { value: number; next: () => any; } ->() => object : () => { value: number; next: () => any; } ->object : { value: number; next: () => any; } +>next : () => { value: number; next: (typeof object)["next"]; } +>() => object : () => { value: number; next: (typeof object)["next"]; } +>object : { value: number; next: () => typeof object; } export const method = { value: 1, next() { return method; } }; ->method : { value: number; next(): any; } ->{ value: 1, next() { return method; } } : { value: number; next(): { value: number; next(): any; }; } +>method : { value: number; next(): typeof method; } +>{ value: 1, next() { return method; } } : { value: number; next(): typeof method; } >value : number >1 : 1 ->next : () => { value: number; next(): any; } ->method : { value: number; next(): any; } +>next : () => { value: number; next(): typeof method; } +>method : { value: number; next(): typeof method; } export const accessor = { value: 1, get next() { return accessor; } }; ->accessor : { value: number; readonly next: any; } ->{ value: 1, get next() { return accessor; } } : { value: number; readonly next: { value: number; readonly next: any; }; } +>accessor : { value: number; readonly next: typeof accessor; } +>{ value: 1, get next() { return accessor; } } : { value: number; readonly next: typeof accessor; } >value : number >1 : 1 ->next : { value: number; readonly next: any; } ->accessor : { value: number; readonly next: any; } +>next : { value: number; readonly next: typeof accessor; } +>accessor : { value: number; readonly next: typeof accessor; } export const tuple = [() => tuple] as const; >tuple : readonly [() => any] >[() => tuple] as const : readonly [() => any] >[() => tuple] : readonly [() => any] ->() => tuple : () => readonly [any] +>() => tuple : () => readonly [(typeof tuple)[0]] >tuple : readonly [() => any] export const tupleObject = [{ next: () => tupleObject }] as const; >tupleObject : readonly [{ readonly next: () => any; }] ->[{ next: () => tupleObject }] as const : readonly [{ readonly next: () => readonly [{ readonly next: () => any; }]; }] ->[{ next: () => tupleObject }] : readonly [{ readonly next: () => readonly [{ readonly next: () => any; }]; }] ->{ next: () => tupleObject } : { readonly next: () => readonly [{ readonly next: () => any; }]; } ->next : () => readonly [{ readonly next: () => any; }] ->() => tupleObject : () => readonly [{ readonly next: () => any; }] +>[{ next: () => tupleObject }] as const : readonly [{ readonly next: () => readonly [(typeof tupleObject)[0]]; }] +>[{ next: () => tupleObject }] : readonly [{ readonly next: () => readonly [(typeof tupleObject)[0]]; }] +>{ next: () => tupleObject } : { readonly next: () => readonly [(typeof tupleObject)[0]]; } +>next : () => readonly [{ readonly next: (typeof tupleObject)[0]["next"]; }] +>() => tupleObject : () => readonly [{ readonly next: (typeof tupleObject)[0]["next"]; }] >tupleObject : readonly [{ readonly next: () => any; }] export const array = [() => array]; >array : (() => any)[] >[() => array] : (() => any)[] ->() => array : () => any[] +>() => array : () => (typeof array)[0][] >array : (() => any)[] export const first = { next: () => second }; ->first : { next: () => { next: () => any; }; } ->{ next: () => second } : { next: () => { next: () => { next: () => any; }; }; } ->next : () => { next: () => { next: () => any; }; } ->() => second : () => { next: () => { next: () => any; }; } ->second : { next: () => { next: () => any; }; } +>first : { next: () => { next: () => typeof first; }; } +>{ next: () => second } : { next: () => { next: () => typeof first; }; } +>next : () => { next: () => { next: (typeof first)["next"]; }; } +>() => second : () => { next: () => { next: (typeof first)["next"]; }; } +>second : { next: () => { next: () => typeof second; }; } export const second = { next: () => first }; ->second : { next: () => { next: () => any; }; } ->{ next: () => first } : { next: () => { next: () => { next: () => any; }; }; } ->next : () => { next: () => { next: () => any; }; } ->() => first : () => { next: () => { next: () => any; }; } ->first : { next: () => { next: () => any; }; } +>second : { next: () => { next: () => typeof second; }; } +>{ next: () => first } : { next: () => { next: () => typeof second; }; } +>next : () => { next: () => { next: (typeof second)["next"]; }; } +>() => first : () => { next: () => { next: (typeof second)["next"]; }; } +>first : { next: () => { next: () => typeof first; }; } export const nested = { inner: { next() { return nested.inner; } } }; ->nested : { inner: { next(): { next(): any; }; }; } ->{ inner: { next() { return nested.inner; } } } : { inner: { next(): { next(): any; }; }; } ->inner : { next(): { next(): any; }; } ->{ next() { return nested.inner; } } : { next(): { next(): any; }; } ->next : () => { next(): any; } ->nested.inner : { next(): any; } ->nested : { inner: { next(): { next(): any; }; }; } ->inner : { next(): any; } +>nested : { inner: { next(): (typeof nested)["inner"]; }; } +>{ inner: { next() { return nested.inner; } } } : { inner: { next(): (typeof nested)["inner"]; }; } +>inner : { next(): (typeof nested)["inner"]; } +>{ next() { return nested.inner; } } : { next(): (typeof nested)["inner"]; } +>next : () => { next(): (typeof nested)["inner"]; } +>nested.inner : { next(): (typeof nested)["inner"]; } +>nested : { inner: { next(): (typeof nested)["inner"]; }; } +>inner : { next(): (typeof nested)["inner"]; } export const shadowed = { next: function self(shadowed: number) { return self; } }; ->shadowed : { next: (shadowed: number) => (shadowed: number) => any; } ->{ next: function self(shadowed: number) { return self; } } : { next: (shadowed: number) => (shadowed: number) => any; } ->next : (shadowed: number) => any ->function self(shadowed: number) { return self; } : (shadowed: number) => any ->self : (shadowed: number) => any +>shadowed : { next: (shadowed: number) => typeof import("./recursiveStructures").shadowed["next"]; } +>{ next: function self(shadowed: number) { return self; } } : { next: (shadowed: number) => typeof import("./recursiveStructures").shadowed["next"]; } +>next : (shadowed: number) => typeof import("./recursiveStructures").shadowed["next"] +>function self(shadowed: number) { return self; } : (shadowed: number) => typeof import("./recursiveStructures").shadowed["next"] +>self : (shadowed: number) => typeof import("./recursiveStructures").shadowed["next"] >shadowed : number ->self : (shadowed: number) => any +>self : (shadowed: number) => typeof import("./recursiveStructures").shadowed["next"] export const memberTuple = [function self() { return self; }] as const; ->memberTuple : readonly [() => any] ->[function self() { return self; }] as const : readonly [() => any] ->[function self() { return self; }] : readonly [() => any] ->function self() { return self; } : () => any ->self : () => any ->self : () => any +>memberTuple : readonly [() => (typeof memberTuple)[0]] +>[function self() { return self; }] as const : readonly [() => (typeof memberTuple)[0]] +>[function self() { return self; }] : readonly [() => (typeof memberTuple)[0]] +>function self() { return self; } : () => (typeof memberTuple)[0] +>self : () => (typeof memberTuple)[0] +>self : () => (typeof memberTuple)[0] export const memberArray = [function self() { return self; }]; ->memberArray : (() => any)[] ->[function self() { return self; }] : (() => any)[] ->function self() { return self; } : () => any ->self : () => any ->self : () => any +>memberArray : (() => (typeof memberArray)[0])[] +>[function self() { return self; }] : (() => (typeof memberArray)[0])[] +>function self() { return self; } : () => (typeof memberArray)[0] +>self : () => (typeof memberArray)[0] +>self : () => (typeof memberArray)[0] export const quoted = { "a-b": function self() { return self; } }; ->quoted : { "a-b": () => () => any; } ->{ "a-b": function self() { return self; } } : { "a-b": () => () => any; } ->"a-b" : () => any ->function self() { return self; } : () => any ->self : () => any ->self : () => any +>quoted : { "a-b": () => (typeof quoted)["a-b"]; } +>{ "a-b": function self() { return self; } } : { "a-b": () => (typeof quoted)["a-b"]; } +>"a-b" : () => (typeof quoted)["a-b"] +>function self() { return self; } : () => (typeof quoted)["a-b"] +>self : () => (typeof quoted)["a-b"] +>self : () => (typeof quoted)["a-b"] export const numeric = { 0: function self() { return self; } }; ->numeric : { 0: () => () => any; } ->{ 0: function self() { return self; } } : { 0: () => () => any; } ->0 : () => any ->function self() { return self; } : () => any ->self : () => any ->self : () => any +>numeric : { 0: () => (typeof numeric)[0]; } +>{ 0: function self() { return self; } } : { 0: () => (typeof numeric)[0]; } +>0 : () => (typeof numeric)[0] +>function self() { return self; } : () => (typeof numeric)[0] +>self : () => (typeof numeric)[0] +>self : () => (typeof numeric)[0] export const key = Symbol(); >key : unique symbol @@ -572,41 +572,41 @@ export const key = Symbol(); >Symbol : SymbolConstructor export const computed = { [key]: function self() { return self; } }; ->computed : { [key]: () => () => any; } ->{ [key]: function self() { return self; } } : { [key]: () => () => any; } ->[key] : () => any +>computed : { [key]: () => (typeof computed)[typeof key]; } +>{ [key]: function self() { return self; } } : { [key]: () => (typeof computed)[typeof key]; } +>[key] : () => (typeof computed)[typeof key] >key : unique symbol ->function self() { return self; } : () => any ->self : () => any ->self : () => any +>function self() { return self; } : () => (typeof computed)[typeof key] +>self : () => (typeof computed)[typeof key] +>self : () => (typeof computed)[typeof key] export const union = Math.random() ? { next: () => union } : undefined; >union : { next: () => any | undefined; } | undefined ->Math.random() ? { next: () => union } : undefined : { next: () => { next: () => any | undefined; } | undefined; } | undefined +>Math.random() ? { next: () => union } : undefined : { next: () => any | undefined; } | undefined >Math.random() : number >Math.random : () => number >Math : Math >random : () => number ->{ next: () => union } : { next: () => { next: () => any | undefined; } | undefined; } +>{ next: () => union } : { next: () => any | undefined; } >next : () => { next: () => any | undefined; } | undefined >() => union : () => { next: () => any | undefined; } | undefined >union : { next: () => any | undefined; } | undefined >undefined : undefined function create(value: T) { ->create : (value: T) => { value: T; next: () => any; } +>create : (value: T) => { value: T; next: () => typeof result; } >value : T const result = { value, next: () => result }; ->result : { value: T; next: () => any; } ->{ value, next: () => result } : { value: T; next: () => { value: T; next: () => any; }; } +>result : { value: T; next: () => typeof result; } +>{ value, next: () => result } : { value: T; next: () => typeof result; } >value : T ->next : () => { value: T; next: () => any; } ->() => result : () => { value: T; next: () => any; } ->result : { value: T; next: () => any; } +>next : () => { value: T; next: (typeof result)["next"]; } +>() => result : () => { value: T; next: (typeof result)["next"]; } +>result : { value: T; next: () => typeof result; } return result; ->result : { value: T; next: () => any; } +>result : { value: T; next: () => typeof result; } } export const specialized = create("text"); >specialized : { value: string; next: () => any; } @@ -681,22 +681,22 @@ export const viaAnnotation = createAnnotated("text"); const objectValue: number = object.next().next().value; >objectValue : number >object.next().next().value : number ->object.next().next() : { value: number; next: () => any; } ->object.next().next : () => { value: number; next: () => any; } ->object.next() : { value: number; next: () => any; } ->object.next : () => { value: number; next: () => any; } ->object : { value: number; next: () => any; } ->next : () => { value: number; next: () => any; } ->next : () => { value: number; next: () => any; } +>object.next().next() : { value: number; next: () => typeof object; } +>object.next().next : () => { value: number; next: (typeof object)["next"]; } +>object.next() : { value: number; next: () => typeof object; } +>object.next : () => { value: number; next: (typeof object)["next"]; } +>object : { value: number; next: () => typeof object; } +>next : () => { value: number; next: (typeof object)["next"]; } +>next : () => { value: number; next: (typeof object)["next"]; } >value : number const tupleValue: typeof tuple = tuple[0]()[0](); >tupleValue : readonly [() => any] >tuple : readonly [() => any] >tuple[0]()[0]() : readonly [() => any] ->tuple[0]()[0] : () => readonly [any] +>tuple[0]()[0] : () => readonly [(typeof tuple)[0]] >tuple[0]() : readonly [() => any] ->tuple[0] : () => readonly [any] +>tuple[0] : () => readonly [(typeof tuple)[0]] >tuple : readonly [() => any] >0 : 0 >0 : 0 @@ -705,37 +705,37 @@ const tupleObjectValue: typeof tupleObject = tupleObject[0].next(); >tupleObjectValue : readonly [{ readonly next: () => any; }] >tupleObject : readonly [{ readonly next: () => any; }] >tupleObject[0].next() : readonly [{ readonly next: () => any; }] ->tupleObject[0].next : () => readonly [{ readonly next: () => any; }] ->tupleObject[0] : { readonly next: () => readonly [any]; } +>tupleObject[0].next : () => readonly [{ readonly next: (typeof tupleObject)[0]["next"]; }] +>tupleObject[0] : { readonly next: () => readonly [(typeof tupleObject)[0]]; } >tupleObject : readonly [{ readonly next: () => any; }] >0 : 0 ->next : () => readonly [{ readonly next: () => any; }] +>next : () => readonly [{ readonly next: (typeof tupleObject)[0]["next"]; }] const arrayValue: typeof array = array[0]()[0](); >arrayValue : (() => any)[] >array : (() => any)[] >array[0]()[0]() : (() => any)[] ->array[0]()[0] : () => any[] +>array[0]()[0] : () => (typeof array)[0][] >array[0]() : (() => any)[] ->array[0] : () => any[] +>array[0] : () => (typeof array)[0][] >array : (() => any)[] >0 : 0 >0 : 0 const nestedValue: typeof nested.inner = nested.inner.next().next(); ->nestedValue : { next(): any; } ->nested.inner : { next(): any; } ->nested : { inner: { next(): { next(): any; }; }; } ->inner : { next(): any; } ->nested.inner.next().next() : { next(): any; } ->nested.inner.next().next : () => { next(): any; } ->nested.inner.next() : { next(): any; } ->nested.inner.next : () => { next(): any; } ->nested.inner : { next(): any; } ->nested : { inner: { next(): { next(): any; }; }; } ->inner : { next(): any; } ->next : () => { next(): any; } ->next : () => { next(): any; } +>nestedValue : { next(): (typeof nested)["inner"]; } +>nested.inner : { next(): (typeof nested)["inner"]; } +>nested : { inner: { next(): (typeof nested)["inner"]; }; } +>inner : { next(): (typeof nested)["inner"]; } +>nested.inner.next().next() : { next(): (typeof nested)["inner"]; } +>nested.inner.next().next : () => { next(): (typeof nested)["inner"]; } +>nested.inner.next() : { next(): (typeof nested)["inner"]; } +>nested.inner.next : () => { next(): (typeof nested)["inner"]; } +>nested.inner : { next(): (typeof nested)["inner"]; } +>nested : { inner: { next(): (typeof nested)["inner"]; }; } +>inner : { next(): (typeof nested)["inner"]; } +>next : () => { next(): (typeof nested)["inner"]; } +>next : () => { next(): (typeof nested)["inner"]; } const specializedValue: string = specialized.next().next().value; >specializedValue : string @@ -834,53 +834,53 @@ export const nextCallable = callable(1); >1 : 1 export const parenthesized = (function self() { return self; }); ->parenthesized : () => any ->(function self() { return self; }) : () => any ->function self() { return self; } : () => any ->self : () => any ->self : () => any +>parenthesized : () => typeof parenthesized +>(function self() { return self; }) : () => typeof parenthesized +>function self() { return self; } : () => typeof parenthesized +>self : () => typeof parenthesized +>self : () => typeof parenthesized export const asserted = (function self() { return self; }) satisfies () => unknown; ->asserted : () => any ->(function self() { return self; }) satisfies () => unknown : () => any ->(function self() { return self; }) : () => any ->function self() { return self; } : () => any ->self : () => any ->self : () => any +>asserted : () => typeof asserted +>(function self() { return self; }) satisfies () => unknown : () => typeof asserted +>(function self() { return self; }) : () => typeof asserted +>function self() { return self; } : () => typeof asserted +>self : () => typeof asserted +>self : () => typeof asserted export const widened: () => unknown = (function self() { return self; }); >widened : () => unknown >(function self() { return self; }) : () => any >function self() { return self; } : () => any ->self : () => any ->self : () => any +>self : () => typeof self +>self : () => typeof self function createHidden(value: T) { ->createHidden : (value: T) => { value: T; next: Hidden; } +>createHidden : (value: T) => { value: T; next: any; } >value : T type Hidden = { value: T; next: Hidden }; ->Hidden : { value: T; next: Hidden; } +>Hidden : { value: T; next: any; } >value : T ->next : { value: T; next: Hidden; } +>next : { value: T; next: any; } return null! as Hidden; ->null! as Hidden : { value: T; next: Hidden; } +>null! as Hidden : { value: T; next: any; } >null! : never } export const hiddenAlias = createHidden("text"); ->hiddenAlias : { value: string; next: Hidden; } ->createHidden("text") : { value: string; next: Hidden; } ->createHidden : (value: T) => { value: T; next: Hidden; } +>hiddenAlias : { value: string; next: any; } +>createHidden("text") : { value: string; next: any; } +>createHidden : (value: T) => { value: T; next: any; } >"text" : "text" export const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias }; ->siblingHiddenAliases : { first: { value: string; next: Hidden; }; second: { value: string; next: Hidden; }; } ->{ first: hiddenAlias, second: hiddenAlias } : { first: { value: string; next: Hidden; }; second: { value: string; next: Hidden; }; } ->first : { value: string; next: Hidden; } ->hiddenAlias : { value: string; next: Hidden; } ->second : { value: string; next: Hidden; } ->hiddenAlias : { value: string; next: Hidden; } +>siblingHiddenAliases : { first: { value: string; next: (typeof siblingHiddenAliases)["first"]; }; second: { value: string; next: (typeof siblingHiddenAliases)["second"]; }; } +>{ first: hiddenAlias, second: hiddenAlias } : { first: { value: string; next: (typeof siblingHiddenAliases)["first"]; }; second: { value: string; next: (typeof siblingHiddenAliases)["second"]; }; } +>first : { value: string; next: any; } +>hiddenAlias : { value: string; next: any; } +>second : { value: string; next: any; } +>hiddenAlias : { value: string; next: any; } export const methodKey = Symbol(); >methodKey : unique symbol @@ -891,29 +891,29 @@ export class Methods { >Methods : Methods static recur() { return Methods.recur; } ->recur : () => typeof Methods.recur ->Methods.recur : () => typeof Methods.recur +>recur : () => (typeof Methods)["recur"] +>Methods.recur : () => (typeof Methods)["recur"] >Methods : typeof Methods ->recur : () => typeof Methods.recur +>recur : () => (typeof Methods)["recur"] static "a-b"() { return Methods["a-b"]; } ->"a-b" : () => any ->Methods["a-b"] : () => any +>"a-b" : () => (typeof Methods)["a-b"] +>Methods["a-b"] : () => (typeof Methods)["a-b"] >Methods : typeof Methods >"a-b" : "a-b" static [methodKey]() { return Methods[methodKey]; } ->[methodKey] : () => any +>[methodKey] : () => (typeof Methods)[typeof methodKey] >methodKey : unique symbol ->Methods[methodKey] : () => any +>Methods[methodKey] : () => (typeof Methods)[typeof methodKey] >Methods : typeof Methods >methodKey : unique symbol recur() { return this.recur; } ->recur : () => any ->this.recur : () => any +>recur : () => Methods["recur"] +>this.recur : () => Methods["recur"] >this : this ->recur : () => any +>recur : () => Methods["recur"] } export function overloaded(value: string): typeof overloaded; >overloaded : { (value: string): typeof overloaded; (value: number): typeof overloaded; } @@ -956,290 +956,290 @@ export class Hidden { >Hidden : Hidden private static recur() { return Hidden.recur; } ->recur : () => typeof Hidden.recur ->Hidden.recur : () => typeof Hidden.recur +>recur : () => (typeof Hidden)["recur"] +>Hidden.recur : () => (typeof Hidden)["recur"] >Hidden : typeof Hidden ->recur : () => typeof Hidden.recur +>recur : () => (typeof Hidden)["recur"] static expose() { return Hidden.recur; } ->expose : () => () => typeof Hidden.recur ->Hidden.recur : () => typeof Hidden.recur +>expose : () => () => (typeof Hidden)["recur"] +>Hidden.recur : () => (typeof Hidden)["recur"] >Hidden : typeof Hidden ->recur : () => typeof Hidden.recur +>recur : () => (typeof Hidden)["recur"] protected next() { return this.next; } ->next : () => any ->this.next : () => any +>next : () => Hidden["next"] +>this.next : () => Hidden["next"] >this : this ->next : () => any +>next : () => Hidden["next"] expose() { return this.next; } ->expose : () => () => any ->this.next : () => any +>expose : () => () => Hidden["next"] +>this.next : () => Hidden["next"] >this : this ->next : () => any +>next : () => Hidden["next"] } === signatureScopes.ts === export const scoped = { ->scoped : { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: any; }; sibling(inner: T_1): { outer: T; inner: T_1; next: any; }; }; second(value: T): { value: T; next: any; }; } ->{ first(outer: T) { return { nested(inner: T) { return { outer, inner, next: scoped }; }, sibling(inner: T) { return { outer, inner, next: scoped }; }, }; }, second(value: T) { return { value, next: scoped }; },} : { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: { first(outer: T): any; second(value: T_2): { value: T_2; next: any; }; }; }; sibling(inner: T_1): { outer: T; inner: T_1; next: { first(outer: T): any; second(value: T_2): { value: T_2; next: any; }; }; }; }; second(value: T): { value: T; next: { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: any; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: any; }; }; second(value: T): any; }; }; } +>scoped : { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: typeof scoped; }; sibling(inner: T_1): { outer: T; inner: T_1; next: typeof scoped; }; }; second(value: T): { value: T; next: typeof scoped; }; } +>{ first(outer: T) { return { nested(inner: T) { return { outer, inner, next: scoped }; }, sibling(inner: T) { return { outer, inner, next: scoped }; }, }; }, second(value: T) { return { value, next: scoped }; },} : { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: typeof scoped; }; sibling(inner: T_1): { outer: T; inner: T_1; next: typeof scoped; }; }; second(value: T): { value: T; next: typeof scoped; }; } first(outer: T) { ->first : (outer: T) => { nested(inner: T_1): { outer: T; inner: T_1; next: { first(outer: T): any; second(value: T_2): { value: T_2; next: any; }; }; }; sibling(inner: T_1): { outer: T; inner: T_1; next: { first(outer: T): any; second(value: T_2): { value: T_2; next: any; }; }; }; } +>first : (outer: T) => { nested(inner: T_1): { outer: T; inner: T_1; next: { first(outer: T): any; second(value: T_2): { value: T_2; next: typeof scoped; }; }; }; sibling(inner: T_1): { outer: T; inner: T_1; next: { first(outer: T): any; second(value: T_2): { value: T_2; next: typeof scoped; }; }; }; } >outer : T return { ->{ nested(inner: T) { return { outer, inner, next: scoped }; }, sibling(inner: T) { return { outer, inner, next: scoped }; }, } : { nested(inner: T_1): { outer: T; inner: T_1; next: { first(outer: T): { nested(inner: T_1): any; sibling(inner: T_2): { outer: T; inner: T_2; next: any; }; }; second(value: T_2): { value: T_2; next: any; }; }; }; sibling(inner: T_1): { outer: T; inner: T_1; next: { first(outer: T): { nested(inner: T_2): { outer: T; inner: T_2; next: any; }; sibling(inner: T_1): any; }; second(value: T_2): { value: T_2; next: any; }; }; }; } +>{ nested(inner: T) { return { outer, inner, next: scoped }; }, sibling(inner: T) { return { outer, inner, next: scoped }; }, } : { nested(inner: T_1): { outer: T; inner: T_1; next: { first(outer: T): any; second(value: T_2): { value: T_2; next: typeof scoped; }; }; }; sibling(inner: T_1): { outer: T; inner: T_1; next: { first(outer: T): any; second(value: T_2): { value: T_2; next: typeof scoped; }; }; }; } nested(inner: T) { return { outer, inner, next: scoped }; }, ->nested : (inner: T) => { outer: T_1; inner: T; next: { first(outer: T_1): { nested(inner: T): any; sibling(inner: T_2): { outer: T_1; inner: T_2; next: any; }; }; second(value: T_2): { value: T_2; next: any; }; }; } +>nested : (inner: T) => { outer: T_1; inner: T; next: { first(outer: T_1): { nested(inner: T): any; sibling(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; }; second(value: T_2): { value: T_2; next: typeof scoped; }; }; } >inner : T ->{ outer, inner, next: scoped } : { outer: T_1; inner: T; next: { first(outer: T_1): { nested(inner: T): { outer: T_1; inner: T; next: any; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: any; }; }; second(value: T_2): { value: T_2; next: any; }; }; } +>{ outer, inner, next: scoped } : { outer: T_1; inner: T; next: { first(outer: T_1): { nested(inner: T): any; sibling(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; }; second(value: T_2): { value: T_2; next: typeof scoped; }; }; } >outer : T_1 >inner : T ->next : { first(outer: T_1): { nested(inner: T): { outer: T_1; inner: T; next: any; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: any; }; }; second(value: T_1): { value: T_1; next: any; }; } ->scoped : { first(outer: T_1): { nested(inner: T): { outer: T_1; inner: T; next: any; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: any; }; }; second(value: T_1): { value: T_1; next: any; }; } +>next : { first(outer: T_1): { nested(inner: T): { outer: T_1; inner: T; next: typeof scoped; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; }; second(value: T_1): { value: T_1; next: typeof scoped; }; } +>scoped : { first(outer: T_1): { nested(inner: T): { outer: T_1; inner: T; next: typeof scoped; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; }; second(value: T_1): { value: T_1; next: typeof scoped; }; } sibling(inner: T) { return { outer, inner, next: scoped }; }, ->sibling : (inner: T) => { outer: T_1; inner: T; next: { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: any; }; sibling(inner: T): any; }; second(value: T_2): { value: T_2; next: any; }; }; } +>sibling : (inner: T) => { outer: T_1; inner: T; next: { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; sibling(inner: T): any; }; second(value: T_2): { value: T_2; next: typeof scoped; }; }; } >inner : T ->{ outer, inner, next: scoped } : { outer: T_1; inner: T; next: { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: any; }; sibling(inner: T): { outer: T_1; inner: T; next: any; }; }; second(value: T_2): { value: T_2; next: any; }; }; } +>{ outer, inner, next: scoped } : { outer: T_1; inner: T; next: { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; sibling(inner: T): any; }; second(value: T_2): { value: T_2; next: typeof scoped; }; }; } >outer : T_1 >inner : T ->next : { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: any; }; sibling(inner: T): { outer: T_1; inner: T; next: any; }; }; second(value: T_1): { value: T_1; next: any; }; } ->scoped : { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: any; }; sibling(inner: T): { outer: T_1; inner: T; next: any; }; }; second(value: T_1): { value: T_1; next: any; }; } +>next : { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; sibling(inner: T): { outer: T_1; inner: T; next: typeof scoped; }; }; second(value: T_1): { value: T_1; next: typeof scoped; }; } +>scoped : { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; sibling(inner: T): { outer: T_1; inner: T; next: typeof scoped; }; }; second(value: T_1): { value: T_1; next: typeof scoped; }; } }; }, second(value: T) { return { value, next: scoped }; }, ->second : (value: T) => { value: T; next: { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: any; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: any; }; }; second(value: T): any; }; } +>second : (value: T) => { value: T; next: { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; }; second(value: T): any; }; } >value : T ->{ value, next: scoped } : { value: T; next: { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: any; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: any; }; }; second(value: T): { value: T; next: any; }; }; } +>{ value, next: scoped } : { value: T; next: { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; }; second(value: T): any; }; } >value : T ->next : { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: any; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: any; }; }; second(value: T): { value: T; next: any; }; } ->scoped : { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: any; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: any; }; }; second(value: T): { value: T; next: any; }; } +>next : { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; }; second(value: T): { value: T; next: typeof scoped; }; } +>scoped : { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; }; second(value: T): { value: T; next: typeof scoped; }; } }; export const numberScope = scoped.first(1); ->numberScope : { nested(inner: T): { outer: number; inner: T; next: { first(outer: number): any; second(value: T_1): { value: T_1; next: any; }; }; }; sibling(inner: T): { outer: number; inner: T; next: { first(outer: number): any; second(value: T_1): { value: T_1; next: any; }; }; }; } ->scoped.first(1) : { nested(inner: T): { outer: number; inner: T; next: { first(outer: number): any; second(value: T_1): { value: T_1; next: any; }; }; }; sibling(inner: T): { outer: number; inner: T; next: { first(outer: number): any; second(value: T_1): { value: T_1; next: any; }; }; }; } ->scoped.first : (outer: T) => { nested(inner: T_1): { outer: T; inner: T_1; next: { first(outer: T): any; second(value: T_2): { value: T_2; next: any; }; }; }; sibling(inner: T_1): { outer: T; inner: T_1; next: { first(outer: T): any; second(value: T_2): { value: T_2; next: any; }; }; }; } ->scoped : { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: any; }; sibling(inner: T_1): { outer: T; inner: T_1; next: any; }; }; second(value: T): { value: T; next: any; }; } ->first : (outer: T) => { nested(inner: T_1): { outer: T; inner: T_1; next: { first(outer: T): any; second(value: T_2): { value: T_2; next: any; }; }; }; sibling(inner: T_1): { outer: T; inner: T_1; next: { first(outer: T): any; second(value: T_2): { value: T_2; next: any; }; }; }; } +>numberScope : { nested(inner: T): { outer: number; inner: T; next: { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; }; second(value: T_1): { value: T_1; next: typeof scoped; }; }; }; sibling(inner: T): { outer: number; inner: T; next: { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; }; second(value: T_1): { value: T_1; next: typeof scoped; }; }; }; } +>scoped.first(1) : { nested(inner: T): { outer: number; inner: T; next: { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; }; second(value: T_1): { value: T_1; next: typeof scoped; }; }; }; sibling(inner: T): { outer: number; inner: T; next: { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; }; second(value: T_1): { value: T_1; next: typeof scoped; }; }; }; } +>scoped.first : (outer: T) => { nested(inner: T_1): { outer: T; inner: T_1; next: { first(outer: T): any; second(value: T_2): { value: T_2; next: typeof scoped; }; }; }; sibling(inner: T_1): { outer: T; inner: T_1; next: { first(outer: T): any; second(value: T_2): { value: T_2; next: typeof scoped; }; }; }; } +>scoped : { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: typeof scoped; }; sibling(inner: T_1): { outer: T; inner: T_1; next: typeof scoped; }; }; second(value: T): { value: T; next: typeof scoped; }; } +>first : (outer: T) => { nested(inner: T_1): { outer: T; inner: T_1; next: { first(outer: T): any; second(value: T_2): { value: T_2; next: typeof scoped; }; }; }; sibling(inner: T_1): { outer: T; inner: T_1; next: { first(outer: T): any; second(value: T_2): { value: T_2; next: typeof scoped; }; }; }; } >1 : 1 export const stringScope = scoped.first("outer"); ->stringScope : { nested(inner: T): { outer: string; inner: T; next: { first(outer: string): any; second(value: T_1): { value: T_1; next: any; }; }; }; sibling(inner: T): { outer: string; inner: T; next: { first(outer: string): any; second(value: T_1): { value: T_1; next: any; }; }; }; } ->scoped.first("outer") : { nested(inner: T): { outer: string; inner: T; next: { first(outer: string): any; second(value: T_1): { value: T_1; next: any; }; }; }; sibling(inner: T): { outer: string; inner: T; next: { first(outer: string): any; second(value: T_1): { value: T_1; next: any; }; }; }; } ->scoped.first : (outer: T) => { nested(inner: T_1): { outer: T; inner: T_1; next: { first(outer: T): any; second(value: T_2): { value: T_2; next: any; }; }; }; sibling(inner: T_1): { outer: T; inner: T_1; next: { first(outer: T): any; second(value: T_2): { value: T_2; next: any; }; }; }; } ->scoped : { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: any; }; sibling(inner: T_1): { outer: T; inner: T_1; next: any; }; }; second(value: T): { value: T; next: any; }; } ->first : (outer: T) => { nested(inner: T_1): { outer: T; inner: T_1; next: { first(outer: T): any; second(value: T_2): { value: T_2; next: any; }; }; }; sibling(inner: T_1): { outer: T; inner: T_1; next: { first(outer: T): any; second(value: T_2): { value: T_2; next: any; }; }; }; } +>stringScope : { nested(inner: T): { outer: string; inner: T; next: { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; }; second(value: T_1): { value: T_1; next: typeof scoped; }; }; }; sibling(inner: T): { outer: string; inner: T; next: { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; }; second(value: T_1): { value: T_1; next: typeof scoped; }; }; }; } +>scoped.first("outer") : { nested(inner: T): { outer: string; inner: T; next: { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; }; second(value: T_1): { value: T_1; next: typeof scoped; }; }; }; sibling(inner: T): { outer: string; inner: T; next: { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; }; second(value: T_1): { value: T_1; next: typeof scoped; }; }; }; } +>scoped.first : (outer: T) => { nested(inner: T_1): { outer: T; inner: T_1; next: { first(outer: T): any; second(value: T_2): { value: T_2; next: typeof scoped; }; }; }; sibling(inner: T_1): { outer: T; inner: T_1; next: { first(outer: T): any; second(value: T_2): { value: T_2; next: typeof scoped; }; }; }; } +>scoped : { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: typeof scoped; }; sibling(inner: T_1): { outer: T; inner: T_1; next: typeof scoped; }; }; second(value: T): { value: T; next: typeof scoped; }; } +>first : (outer: T) => { nested(inner: T_1): { outer: T; inner: T_1; next: { first(outer: T): any; second(value: T_2): { value: T_2; next: typeof scoped; }; }; }; sibling(inner: T_1): { outer: T; inner: T_1; next: { first(outer: T): any; second(value: T_2): { value: T_2; next: typeof scoped; }; }; }; } >"outer" : "outer" const nested = numberScope.nested("inner"); ->nested : { outer: number; inner: string; next: { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: any; }; sibling(inner: T_1): { outer: T; inner: T_1; next: any; }; }; second(value: T): { value: T; next: any; }; }; } ->numberScope.nested("inner") : { outer: number; inner: string; next: { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: any; }; sibling(inner: T_1): { outer: T; inner: T_1; next: any; }; }; second(value: T): { value: T; next: any; }; }; } ->numberScope.nested : (inner: T) => { outer: number; inner: T; next: { first(outer: number): { nested(inner: T): any; sibling(inner: T_2): { outer: number; inner: T_2; next: any; }; }; second(value: T_1): { value: T_1; next: any; }; }; } ->numberScope : { nested(inner: T): { outer: number; inner: T; next: { first(outer: number): any; second(value: T_1): { value: T_1; next: any; }; }; }; sibling(inner: T): { outer: number; inner: T; next: { first(outer: number): any; second(value: T_1): { value: T_1; next: any; }; }; }; } ->nested : (inner: T) => { outer: number; inner: T; next: { first(outer: number): { nested(inner: T): any; sibling(inner: T_2): { outer: number; inner: T_2; next: any; }; }; second(value: T_1): { value: T_1; next: any; }; }; } +>nested : { outer: number; inner: string; next: { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: typeof scoped; }; sibling(inner: T_1): { outer: T; inner: T_1; next: typeof scoped; }; }; second(value: T): { value: T; next: typeof scoped; }; }; } +>numberScope.nested("inner") : { outer: number; inner: string; next: { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: typeof scoped; }; sibling(inner: T_1): { outer: T; inner: T_1; next: typeof scoped; }; }; second(value: T): { value: T; next: typeof scoped; }; }; } +>numberScope.nested : (inner: T) => { outer: number; inner: T; next: { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; }; second(value: T_1): { value: T_1; next: typeof scoped; }; }; } +>numberScope : { nested(inner: T): { outer: number; inner: T; next: { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; }; second(value: T_1): { value: T_1; next: typeof scoped; }; }; }; sibling(inner: T): { outer: number; inner: T; next: { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; }; second(value: T_1): { value: T_1; next: typeof scoped; }; }; }; } +>nested : (inner: T) => { outer: number; inner: T; next: { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; }; second(value: T_1): { value: T_1; next: typeof scoped; }; }; } >"inner" : "inner" const sibling = numberScope.sibling(true); ->sibling : { outer: number; inner: boolean; next: { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: any; }; sibling(inner: T_1): { outer: T; inner: T_1; next: any; }; }; second(value: T): { value: T; next: any; }; }; } ->numberScope.sibling(true) : { outer: number; inner: boolean; next: { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: any; }; sibling(inner: T_1): { outer: T; inner: T_1; next: any; }; }; second(value: T): { value: T; next: any; }; }; } ->numberScope.sibling : (inner: T) => { outer: number; inner: T; next: { first(outer: number): { nested(inner: T_2): { outer: number; inner: T_2; next: any; }; sibling(inner: T): any; }; second(value: T_1): { value: T_1; next: any; }; }; } ->numberScope : { nested(inner: T): { outer: number; inner: T; next: { first(outer: number): any; second(value: T_1): { value: T_1; next: any; }; }; }; sibling(inner: T): { outer: number; inner: T; next: { first(outer: number): any; second(value: T_1): { value: T_1; next: any; }; }; }; } ->sibling : (inner: T) => { outer: number; inner: T; next: { first(outer: number): { nested(inner: T_2): { outer: number; inner: T_2; next: any; }; sibling(inner: T): any; }; second(value: T_1): { value: T_1; next: any; }; }; } +>sibling : { outer: number; inner: boolean; next: { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: typeof scoped; }; sibling(inner: T_1): { outer: T; inner: T_1; next: typeof scoped; }; }; second(value: T): { value: T; next: typeof scoped; }; }; } +>numberScope.sibling(true) : { outer: number; inner: boolean; next: { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: typeof scoped; }; sibling(inner: T_1): { outer: T; inner: T_1; next: typeof scoped; }; }; second(value: T): { value: T; next: typeof scoped; }; }; } +>numberScope.sibling : (inner: T) => { outer: number; inner: T; next: { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; }; second(value: T_1): { value: T_1; next: typeof scoped; }; }; } +>numberScope : { nested(inner: T): { outer: number; inner: T; next: { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; }; second(value: T_1): { value: T_1; next: typeof scoped; }; }; }; sibling(inner: T): { outer: number; inner: T; next: { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; }; second(value: T_1): { value: T_1; next: typeof scoped; }; }; }; } +>sibling : (inner: T) => { outer: number; inner: T; next: { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; }; second(value: T_1): { value: T_1; next: typeof scoped; }; }; } >true : true const nestedOuter: number = nested.outer; >nestedOuter : number >nested.outer : number ->nested : { outer: number; inner: string; next: { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: any; }; sibling(inner: T_1): { outer: T; inner: T_1; next: any; }; }; second(value: T): { value: T; next: any; }; }; } +>nested : { outer: number; inner: string; next: { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: typeof scoped; }; sibling(inner: T_1): { outer: T; inner: T_1; next: typeof scoped; }; }; second(value: T): { value: T; next: typeof scoped; }; }; } >outer : number const nestedInner: string = nested.inner; >nestedInner : string >nested.inner : string ->nested : { outer: number; inner: string; next: { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: any; }; sibling(inner: T_1): { outer: T; inner: T_1; next: any; }; }; second(value: T): { value: T; next: any; }; }; } +>nested : { outer: number; inner: string; next: { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: typeof scoped; }; sibling(inner: T_1): { outer: T; inner: T_1; next: typeof scoped; }; }; second(value: T): { value: T; next: typeof scoped; }; }; } >inner : string const siblingOuter: number = sibling.outer; >siblingOuter : number >sibling.outer : number ->sibling : { outer: number; inner: boolean; next: { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: any; }; sibling(inner: T_1): { outer: T; inner: T_1; next: any; }; }; second(value: T): { value: T; next: any; }; }; } +>sibling : { outer: number; inner: boolean; next: { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: typeof scoped; }; sibling(inner: T_1): { outer: T; inner: T_1; next: typeof scoped; }; }; second(value: T): { value: T; next: typeof scoped; }; }; } >outer : number const siblingInner: boolean = sibling.inner; >siblingInner : boolean >sibling.inner : boolean ->sibling : { outer: number; inner: boolean; next: { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: any; }; sibling(inner: T_1): { outer: T; inner: T_1; next: any; }; }; second(value: T): { value: T; next: any; }; }; } +>sibling : { outer: number; inner: boolean; next: { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: typeof scoped; }; sibling(inner: T_1): { outer: T; inner: T_1; next: typeof scoped; }; }; second(value: T): { value: T; next: typeof scoped; }; }; } >inner : boolean const stringOuter: string = stringScope.nested(1).outer; >stringOuter : string >stringScope.nested(1).outer : string ->stringScope.nested(1) : { outer: string; inner: number; next: { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: any; }; sibling(inner: T_1): { outer: T; inner: T_1; next: any; }; }; second(value: T): { value: T; next: any; }; }; } ->stringScope.nested : (inner: T) => { outer: string; inner: T; next: { first(outer: string): { nested(inner: T): any; sibling(inner: T_2): { outer: string; inner: T_2; next: any; }; }; second(value: T_1): { value: T_1; next: any; }; }; } ->stringScope : { nested(inner: T): { outer: string; inner: T; next: { first(outer: string): any; second(value: T_1): { value: T_1; next: any; }; }; }; sibling(inner: T): { outer: string; inner: T; next: { first(outer: string): any; second(value: T_1): { value: T_1; next: any; }; }; }; } ->nested : (inner: T) => { outer: string; inner: T; next: { first(outer: string): { nested(inner: T): any; sibling(inner: T_2): { outer: string; inner: T_2; next: any; }; }; second(value: T_1): { value: T_1; next: any; }; }; } +>stringScope.nested(1) : { outer: string; inner: number; next: { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: typeof scoped; }; sibling(inner: T_1): { outer: T; inner: T_1; next: typeof scoped; }; }; second(value: T): { value: T; next: typeof scoped; }; }; } +>stringScope.nested : (inner: T) => { outer: string; inner: T; next: { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; }; second(value: T_1): { value: T_1; next: typeof scoped; }; }; } +>stringScope : { nested(inner: T): { outer: string; inner: T; next: { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; }; second(value: T_1): { value: T_1; next: typeof scoped; }; }; }; sibling(inner: T): { outer: string; inner: T; next: { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; }; second(value: T_1): { value: T_1; next: typeof scoped; }; }; }; } +>nested : (inner: T) => { outer: string; inner: T; next: { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; }; second(value: T_1): { value: T_1; next: typeof scoped; }; }; } >1 : 1 >outer : string const again: number = nested.next.second(1).value; >again : number >nested.next.second(1).value : number ->nested.next.second(1) : { value: number; next: { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: any; }; sibling(inner: T_1): { outer: T; inner: T_1; next: any; }; }; second(value: T): { value: T; next: any; }; }; } ->nested.next.second : (value: T) => { value: T; next: { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: any; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: any; }; }; second(value: T): any; }; } ->nested.next : { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: any; }; sibling(inner: T_1): { outer: T; inner: T_1; next: any; }; }; second(value: T): { value: T; next: any; }; } ->nested : { outer: number; inner: string; next: { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: any; }; sibling(inner: T_1): { outer: T; inner: T_1; next: any; }; }; second(value: T): { value: T; next: any; }; }; } ->next : { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: any; }; sibling(inner: T_1): { outer: T; inner: T_1; next: any; }; }; second(value: T): { value: T; next: any; }; } ->second : (value: T) => { value: T; next: { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: any; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: any; }; }; second(value: T): any; }; } +>nested.next.second(1) : { value: number; next: { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: typeof scoped; }; sibling(inner: T_1): { outer: T; inner: T_1; next: typeof scoped; }; }; second(value: T): { value: T; next: typeof scoped; }; }; } +>nested.next.second : (value: T) => { value: T; next: { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; }; second(value: T): any; }; } +>nested.next : { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: typeof scoped; }; sibling(inner: T_1): { outer: T; inner: T_1; next: typeof scoped; }; }; second(value: T): { value: T; next: typeof scoped; }; } +>nested : { outer: number; inner: string; next: { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: typeof scoped; }; sibling(inner: T_1): { outer: T; inner: T_1; next: typeof scoped; }; }; second(value: T): { value: T; next: typeof scoped; }; }; } +>next : { first(outer: T): { nested(inner: T_1): { outer: T; inner: T_1; next: typeof scoped; }; sibling(inner: T_1): { outer: T; inner: T_1; next: typeof scoped; }; }; second(value: T): { value: T; next: typeof scoped; }; } +>second : (value: T) => { value: T; next: { first(outer: T_1): { nested(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; sibling(inner: T_2): { outer: T_1; inner: T_2; next: typeof scoped; }; }; second(value: T): any; }; } >1 : 1 >value : number export const nestedOwner = { ->nestedOwner : { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; } ->{ make(outer: T) { return { nested(inner: U) { return { outer, inner, owner: nestedOwner }; }, constrained(inner: U) { return { outer, inner, owner: nestedOwner }; }, copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } { return { outer, inner, owner: nestedOwner }; }, rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; }, }; },} : { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; constrained(inner: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; }; } +>nestedOwner : { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; constrained(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: typeof nestedOwner; }; }; } +>{ make(outer: T) { return { nested(inner: U) { return { outer, inner, owner: nestedOwner }; }, constrained(inner: U) { return { outer, inner, owner: nestedOwner }; }, copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } { return { outer, inner, owner: nestedOwner }; }, rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; }, }; },} : { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; constrained(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: typeof nestedOwner; }; }; } make(outer: T) { >make : (outer: T) => { nested(inner: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; constrained(inner: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; } >outer : T return { ->{ nested(inner: U) { return { outer, inner, owner: nestedOwner }; }, constrained(inner: U) { return { outer, inner, owner: nestedOwner }; }, copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } { return { outer, inner, owner: nestedOwner }; }, rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; }, } : { nested(inner: U): { outer: T; inner: U; owner: { make(outer: T): { nested(inner: U): any; constrained(inner: U_1): { outer: T; inner: U_1; owner: any; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: any; }; }; }; }; constrained(inner: U): { outer: T; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: any; }; constrained(inner: U): any; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: any; }; }; }; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: any; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: any; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U): any; }; }; }; } +>{ nested(inner: U) { return { outer, inner, owner: nestedOwner }; }, constrained(inner: U) { return { outer, inner, owner: nestedOwner }; }, copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } { return { outer, inner, owner: nestedOwner }; }, rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; }, } : { nested(inner: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; constrained(inner: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; } nested(inner: U) { return { outer, inner, owner: nestedOwner }; }, ->nested : (inner: U) => { outer: T; inner: U; owner: { make(outer: T): { nested(inner: U): any; constrained(inner: U_1): { outer: T; inner: U_1; owner: any; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: any; }; }; }; } +>nested : (inner: U) => { outer: T; inner: U; owner: { make(outer: T): { nested(inner: U): any; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; } >inner : U ->{ outer, inner, owner: nestedOwner } : { outer: T; inner: U; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: any; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: any; }; }; }; } +>{ outer, inner, owner: nestedOwner } : { outer: T; inner: U; owner: { make(outer: T): { nested(inner: U): any; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; } >outer : T >inner : U ->owner : { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: any; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: any; }; }; } ->nestedOwner : { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: any; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: any; }; }; } +>owner : { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; } +>nestedOwner : { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; } constrained(inner: U) { return { outer, inner, owner: nestedOwner }; }, ->constrained : (inner: U) => { outer: T; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: any; }; constrained(inner: U): any; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: any; }; }; }; } +>constrained : (inner: U) => { outer: T; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U): any; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; } >inner : U ->{ outer, inner, owner: nestedOwner } : { outer: T; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: any; }; }; }; } +>{ outer, inner, owner: nestedOwner } : { outer: T; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U): any; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; } >outer : T >inner : U ->owner : { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: any; }; }; } ->nestedOwner : { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: any; }; }; } +>owner : { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; } +>nestedOwner : { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; } copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } { >copied : (inner: U) => { outer: T; inner: U; owner: typeof nestedOwner; } >inner : U >outer : T >inner : U ->owner : { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: any; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: any; }; }; } ->nestedOwner : { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: any; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: any; }; }; } +>owner : { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; } +>nestedOwner : { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; } return { outer, inner, owner: nestedOwner }; ->{ outer, inner, owner: nestedOwner } : { outer: T; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: any; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: any; }; }; }; } +>{ outer, inner, owner: nestedOwner } : { outer: T; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; } >outer : T >inner : U ->owner : { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: any; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: any; }; }; } ->nestedOwner : { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: any; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: any; }; }; } +>owner : { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; } +>nestedOwner : { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; } }, rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; }, ->rest : (values_0: U) => { outer: T; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: any; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: any; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U): any; }; }; } +>rest : (values_0: U) => { outer: T; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U): any; }; }; } >values : [U] ->{ outer, inner: values[0], owner: nestedOwner } : { outer: T; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: any; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: any; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; }; } +>{ outer, inner: values[0], owner: nestedOwner } : { outer: T; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U): any; }; }; } >outer : T >inner : U >values[0] : U >values : [U] >0 : 0 ->owner : { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: any; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: any; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; } ->nestedOwner : { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: any; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: any; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; } +>owner : { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: typeof nestedOwner; }; }; } +>nestedOwner : { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: typeof nestedOwner; }; }; } }; }, }; export const nestedNumber = nestedOwner.make(1); ->nestedNumber : { nested(inner: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; constrained(inner: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; copied(inner: U): { outer: number; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; } ->nestedOwner.make(1) : { nested(inner: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; constrained(inner: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; copied(inner: U): { outer: number; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; } +>nestedNumber : { nested(inner: U): { outer: number; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; }; constrained(inner: U): { outer: number; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; }; copied(inner: U): { outer: number; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: number; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; }; } +>nestedOwner.make(1) : { nested(inner: U): { outer: number; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; }; constrained(inner: U): { outer: number; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; }; copied(inner: U): { outer: number; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: number; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; }; } >nestedOwner.make : (outer: T) => { nested(inner: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; constrained(inner: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; } ->nestedOwner : { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; } +>nestedOwner : { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; constrained(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: typeof nestedOwner; }; }; } >make : (outer: T) => { nested(inner: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; constrained(inner: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; } >1 : 1 export const nestedString = nestedNumber.nested(true).owner.make("text").nested(2); ->nestedString : { outer: string; inner: number; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; }; } ->nestedNumber.nested(true).owner.make("text").nested(2) : { outer: string; inner: number; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; }; } ->nestedNumber.nested(true).owner.make("text").nested : (inner: U) => { outer: string; inner: U; owner: { make(outer: string): { nested(inner: U): any; constrained(inner: U_1): { outer: string; inner: U_1; owner: any; }; copied(inner: U_1): { outer: string; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: string; inner: U_1; owner: any; }; }; }; } ->nestedNumber.nested(true).owner.make("text") : { nested(inner: U): { outer: string; inner: U; owner: { make(outer: string): any; }; }; constrained(inner: U): { outer: string; inner: U; owner: { make(outer: string): any; }; }; copied(inner: U): { outer: string; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: string; inner: U; owner: { make(outer: string): any; }; }; } +>nestedString : { outer: string; inner: number; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; constrained(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: typeof nestedOwner; }; }; }; } +>nestedNumber.nested(true).owner.make("text").nested(2) : { outer: string; inner: number; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; constrained(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: typeof nestedOwner; }; }; }; } +>nestedNumber.nested(true).owner.make("text").nested : (inner: U) => { outer: string; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; } +>nestedNumber.nested(true).owner.make("text") : { nested(inner: U): { outer: string; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; }; constrained(inner: U): { outer: string; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; }; copied(inner: U): { outer: string; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: string; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; }; } >nestedNumber.nested(true).owner.make : (outer: T) => { nested(inner: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; constrained(inner: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; } ->nestedNumber.nested(true).owner : { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; } ->nestedNumber.nested(true) : { outer: number; inner: boolean; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; }; } ->nestedNumber.nested : (inner: U) => { outer: number; inner: U; owner: { make(outer: number): { nested(inner: U): any; constrained(inner: U_1): { outer: number; inner: U_1; owner: any; }; copied(inner: U_1): { outer: number; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: number; inner: U_1; owner: any; }; }; }; } ->nestedNumber : { nested(inner: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; constrained(inner: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; copied(inner: U): { outer: number; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; } ->nested : (inner: U) => { outer: number; inner: U; owner: { make(outer: number): { nested(inner: U): any; constrained(inner: U_1): { outer: number; inner: U_1; owner: any; }; copied(inner: U_1): { outer: number; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: number; inner: U_1; owner: any; }; }; }; } +>nestedNumber.nested(true).owner : { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; constrained(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: typeof nestedOwner; }; }; } +>nestedNumber.nested(true) : { outer: number; inner: boolean; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; constrained(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: typeof nestedOwner; }; }; }; } +>nestedNumber.nested : (inner: U) => { outer: number; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; } +>nestedNumber : { nested(inner: U): { outer: number; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; }; constrained(inner: U): { outer: number; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; }; copied(inner: U): { outer: number; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: number; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; }; } +>nested : (inner: U) => { outer: number; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; } >true : true ->owner : { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; } +>owner : { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; constrained(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: typeof nestedOwner; }; }; } >make : (outer: T) => { nested(inner: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; constrained(inner: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; } >"text" : "text" ->nested : (inner: U) => { outer: string; inner: U; owner: { make(outer: string): { nested(inner: U): any; constrained(inner: U_1): { outer: string; inner: U_1; owner: any; }; copied(inner: U_1): { outer: string; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: string; inner: U_1; owner: any; }; }; }; } +>nested : (inner: U) => { outer: string; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; } >2 : 2 export const nestedBoolean = nestedString.owner.make(true).nested("inner"); ->nestedBoolean : { outer: boolean; inner: string; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; }; } ->nestedString.owner.make(true).nested("inner") : { outer: boolean; inner: string; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; }; } ->nestedString.owner.make(true).nested : (inner: U) => { outer: boolean; inner: U; owner: { make(outer: boolean): { nested(inner: U): any; constrained(inner: U_1): { outer: boolean; inner: U_1; owner: any; }; copied(inner: U_1): { outer: boolean; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: boolean; inner: U_1; owner: any; }; }; }; } ->nestedString.owner.make(true) : { nested(inner: U): { outer: boolean; inner: U; owner: { make(outer: boolean): any; }; }; constrained(inner: U): { outer: boolean; inner: U; owner: { make(outer: boolean): any; }; }; copied(inner: U): { outer: boolean; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: boolean; inner: U; owner: { make(outer: boolean): any; }; }; } +>nestedBoolean : { outer: boolean; inner: string; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; constrained(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: typeof nestedOwner; }; }; }; } +>nestedString.owner.make(true).nested("inner") : { outer: boolean; inner: string; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; constrained(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: typeof nestedOwner; }; }; }; } +>nestedString.owner.make(true).nested : (inner: U) => { outer: boolean; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; } +>nestedString.owner.make(true) : { nested(inner: U): { outer: boolean; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; }; constrained(inner: U): { outer: boolean; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; }; copied(inner: U): { outer: boolean; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: boolean; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; }; } >nestedString.owner.make : (outer: T) => { nested(inner: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; constrained(inner: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; } ->nestedString.owner : { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; } ->nestedString : { outer: string; inner: number; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; }; } ->owner : { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; } +>nestedString.owner : { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; constrained(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: typeof nestedOwner; }; }; } +>nestedString : { outer: string; inner: number; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; constrained(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: typeof nestedOwner; }; }; }; } +>owner : { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; constrained(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: typeof nestedOwner; }; }; } >make : (outer: T) => { nested(inner: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; constrained(inner: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: { make(outer: T): any; }; }; } >true : true ->nested : (inner: U) => { outer: boolean; inner: U; owner: { make(outer: boolean): { nested(inner: U): any; constrained(inner: U_1): { outer: boolean; inner: U_1; owner: any; }; copied(inner: U_1): { outer: boolean; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: boolean; inner: U_1; owner: any; }; }; }; } +>nested : (inner: U) => { outer: boolean; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; } >"inner" : "inner" const nestedStringOuter: string = nestedString.outer; >nestedStringOuter : string >nestedString.outer : string ->nestedString : { outer: string; inner: number; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; }; } +>nestedString : { outer: string; inner: number; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; constrained(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: typeof nestedOwner; }; }; }; } >outer : string const nestedStringInner: number = nestedString.inner; >nestedStringInner : number >nestedString.inner : number ->nestedString : { outer: string; inner: number; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; }; } +>nestedString : { outer: string; inner: number; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; constrained(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: typeof nestedOwner; }; }; }; } >inner : number const nestedBooleanOuter: boolean = nestedBoolean.outer; >nestedBooleanOuter : boolean >nestedBoolean.outer : boolean ->nestedBoolean : { outer: boolean; inner: string; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; }; } +>nestedBoolean : { outer: boolean; inner: string; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; constrained(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: typeof nestedOwner; }; }; }; } >outer : boolean const nestedBooleanInner: string = nestedBoolean.inner; >nestedBooleanInner : string >nestedBoolean.inner : string ->nestedBoolean : { outer: boolean; inner: string; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; }; } +>nestedBoolean : { outer: boolean; inner: string; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; constrained(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: typeof nestedOwner; }; }; }; } >inner : string const constrainedOuter: number = nestedNumber.constrained(2).outer; >constrainedOuter : number >nestedNumber.constrained(2).outer : number ->nestedNumber.constrained(2) : { outer: number; inner: 2; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; }; } ->nestedNumber.constrained : (inner: U) => { outer: number; inner: U; owner: { make(outer: number): { nested(inner: U_1): { outer: number; inner: U_1; owner: any; }; constrained(inner: U): any; copied(inner: U_1): { outer: number; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: number; inner: U_1; owner: any; }; }; }; } ->nestedNumber : { nested(inner: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; constrained(inner: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; copied(inner: U): { outer: number; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; } ->constrained : (inner: U) => { outer: number; inner: U; owner: { make(outer: number): { nested(inner: U_1): { outer: number; inner: U_1; owner: any; }; constrained(inner: U): any; copied(inner: U_1): { outer: number; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: number; inner: U_1; owner: any; }; }; }; } +>nestedNumber.constrained(2) : { outer: number; inner: 2; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; constrained(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: typeof nestedOwner; }; }; }; } +>nestedNumber.constrained : (inner: U) => { outer: number; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; } +>nestedNumber : { nested(inner: U): { outer: number; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; }; constrained(inner: U): { outer: number; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; }; copied(inner: U): { outer: number; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: number; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; }; } +>constrained : (inner: U) => { outer: number; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; } >2 : 2 >outer : number const constrainedInner: number = nestedNumber.constrained(2).inner; >constrainedInner : number >nestedNumber.constrained(2).inner : 2 ->nestedNumber.constrained(2) : { outer: number; inner: 2; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; }; } ->nestedNumber.constrained : (inner: U) => { outer: number; inner: U; owner: { make(outer: number): { nested(inner: U_1): { outer: number; inner: U_1; owner: any; }; constrained(inner: U): any; copied(inner: U_1): { outer: number; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: number; inner: U_1; owner: any; }; }; }; } ->nestedNumber : { nested(inner: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; constrained(inner: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; copied(inner: U): { outer: number; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; } ->constrained : (inner: U) => { outer: number; inner: U; owner: { make(outer: number): { nested(inner: U_1): { outer: number; inner: U_1; owner: any; }; constrained(inner: U): any; copied(inner: U_1): { outer: number; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: number; inner: U_1; owner: any; }; }; }; } +>nestedNumber.constrained(2) : { outer: number; inner: 2; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; constrained(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: typeof nestedOwner; }; }; }; } +>nestedNumber.constrained : (inner: U) => { outer: number; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; } +>nestedNumber : { nested(inner: U): { outer: number; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; }; constrained(inner: U): { outer: number; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; }; copied(inner: U): { outer: number; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: number; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; }; } +>constrained : (inner: U) => { outer: number; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; } >2 : 2 >inner : 2 @@ -1248,7 +1248,7 @@ const copiedOuter: number = nestedNumber.copied("inner").outer; >nestedNumber.copied("inner").outer : number >nestedNumber.copied("inner") : { outer: number; inner: string; owner: typeof nestedOwner; } >nestedNumber.copied : (inner: U) => { outer: number; inner: U; owner: typeof nestedOwner; } ->nestedNumber : { nested(inner: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; constrained(inner: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; copied(inner: U): { outer: number; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; } +>nestedNumber : { nested(inner: U): { outer: number; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; }; constrained(inner: U): { outer: number; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; }; copied(inner: U): { outer: number; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: number; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; }; } >copied : (inner: U) => { outer: number; inner: U; owner: typeof nestedOwner; } >"inner" : "inner" >outer : number @@ -1258,7 +1258,7 @@ const copiedInner: string = nestedNumber.copied("inner").inner; >nestedNumber.copied("inner").inner : string >nestedNumber.copied("inner") : { outer: number; inner: string; owner: typeof nestedOwner; } >nestedNumber.copied : (inner: U) => { outer: number; inner: U; owner: typeof nestedOwner; } ->nestedNumber : { nested(inner: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; constrained(inner: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; copied(inner: U): { outer: number; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; } +>nestedNumber : { nested(inner: U): { outer: number; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; }; constrained(inner: U): { outer: number; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; }; copied(inner: U): { outer: number; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: number; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; }; } >copied : (inner: U) => { outer: number; inner: U; owner: typeof nestedOwner; } >"inner" : "inner" >inner : string @@ -1266,20 +1266,20 @@ const copiedInner: string = nestedNumber.copied("inner").inner; const restOuter: number = nestedNumber.rest(true).outer; >restOuter : number >nestedNumber.rest(true).outer : number ->nestedNumber.rest(true) : { outer: number; inner: boolean; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; }; } ->nestedNumber.rest : (values_0: U) => { outer: number; inner: U; owner: { make(outer: number): { nested(inner: U_1): { outer: number; inner: U_1; owner: any; }; constrained(inner: U_1): { outer: number; inner: U_1; owner: any; }; copied(inner: U_1): { outer: number; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U): any; }; }; } ->nestedNumber : { nested(inner: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; constrained(inner: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; copied(inner: U): { outer: number; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; } ->rest : (values_0: U) => { outer: number; inner: U; owner: { make(outer: number): { nested(inner: U_1): { outer: number; inner: U_1; owner: any; }; constrained(inner: U_1): { outer: number; inner: U_1; owner: any; }; copied(inner: U_1): { outer: number; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U): any; }; }; } +>nestedNumber.rest(true) : { outer: number; inner: boolean; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; constrained(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: typeof nestedOwner; }; }; }; } +>nestedNumber.rest : (values_0: U) => { outer: number; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; } +>nestedNumber : { nested(inner: U): { outer: number; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; }; constrained(inner: U): { outer: number; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; }; copied(inner: U): { outer: number; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: number; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; }; } +>rest : (values_0: U) => { outer: number; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; } >true : true >outer : number const restInner: boolean = nestedNumber.rest(true).inner; >restInner : boolean >nestedNumber.rest(true).inner : boolean ->nestedNumber.rest(true) : { outer: number; inner: boolean; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: any; }; constrained(inner: U): { outer: T; inner: U; owner: any; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: any; }; }; }; } ->nestedNumber.rest : (values_0: U) => { outer: number; inner: U; owner: { make(outer: number): { nested(inner: U_1): { outer: number; inner: U_1; owner: any; }; constrained(inner: U_1): { outer: number; inner: U_1; owner: any; }; copied(inner: U_1): { outer: number; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U): any; }; }; } ->nestedNumber : { nested(inner: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; constrained(inner: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; copied(inner: U): { outer: number; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: number; inner: U; owner: { make(outer: number): any; }; }; } ->rest : (values_0: U) => { outer: number; inner: U; owner: { make(outer: number): { nested(inner: U_1): { outer: number; inner: U_1; owner: any; }; constrained(inner: U_1): { outer: number; inner: U_1; owner: any; }; copied(inner: U_1): { outer: number; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U): any; }; }; } +>nestedNumber.rest(true) : { outer: number; inner: boolean; owner: { make(outer: T): { nested(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; constrained(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: T; inner: U; owner: typeof nestedOwner; }; }; }; } +>nestedNumber.rest : (values_0: U) => { outer: number; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; } +>nestedNumber : { nested(inner: U): { outer: number; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; }; constrained(inner: U): { outer: number; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; }; copied(inner: U): { outer: number; inner: U; owner: typeof nestedOwner; }; rest(values_0: U): { outer: number; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; }; } +>rest : (values_0: U) => { outer: number; inner: U; owner: { make(outer: T): { nested(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; constrained(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; copied(inner: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; rest(values_0: U_1): { outer: T; inner: U_1; owner: typeof nestedOwner; }; }; }; } >true : true >inner : boolean diff --git a/tsc/testdata/baselines/reference/compiler/recursiveFunctionTypes.errors.txt b/tsc/testdata/baselines/reference/compiler/recursiveFunctionTypes.errors.txt index d3f23f78c5651..29231d5d06ca7 100644 --- a/tsc/testdata/baselines/reference/compiler/recursiveFunctionTypes.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/recursiveFunctionTypes.errors.txt @@ -5,7 +5,7 @@ recursiveFunctionTypes.ts(4,5): error TS2322: Type '() => typeof fn' is not assi recursiveFunctionTypes.ts(11,16): error TS2355: A function whose declared type is neither 'undefined', 'void', nor 'any' must return a value. recursiveFunctionTypes.ts(12,16): error TS2355: A function whose declared type is neither 'undefined', 'void', nor 'any' must return a value. recursiveFunctionTypes.ts(17,5): error TS2322: Type '() => I' is not assignable to type 'number'. -recursiveFunctionTypes.ts(22,5): error TS2345: Argument of type 'number' is not assignable to parameter of type '(t: typeof g) => void'. +recursiveFunctionTypes.ts(22,5): error TS2345: Argument of type 'number' is not assignable to parameter of type '(t: (typeof C)["g"]) => void'. recursiveFunctionTypes.ts(25,1): error TS2322: Type 'number' is not assignable to type '() => any'. recursiveFunctionTypes.ts(30,10): error TS2394: This overload signature is not compatible with its implementation signature. recursiveFunctionTypes.ts(33,8): error TS2554: Expected 0-1 arguments, but got 2. @@ -53,7 +53,7 @@ recursiveFunctionTypes.ts(43,4): error TS2769: No overload matches this call. } C.g(3); // error ~ -!!! error TS2345: Argument of type 'number' is not assignable to parameter of type '(t: typeof g) => void'. +!!! error TS2345: Argument of type 'number' is not assignable to parameter of type '(t: (typeof C)["g"]) => void'. var f4: () => typeof f4; f4 = 3; // error diff --git a/tsc/testdata/baselines/reference/compiler/recursiveLetConst.types b/tsc/testdata/baselines/reference/compiler/recursiveLetConst.types index 99ccb40232f01..cfe299bad61f5 100644 --- a/tsc/testdata/baselines/reference/compiler/recursiveLetConst.types +++ b/tsc/testdata/baselines/reference/compiler/recursiveLetConst.types @@ -64,8 +64,8 @@ let z1 = function () { return z1; } >z1 : () => typeof z1 let z2 = { f() { return z2;}} ->z2 : { f(): any; } ->{ f() { return z2;}} : { f(): { f(): any; }; } ->f : () => { f(): any; } ->z2 : { f(): any; } +>z2 : { f(): typeof z2; } +>{ f() { return z2;}} : { f(): typeof z2; } +>f : () => { f(): typeof z2; } +>z2 : { f(): typeof z2; } diff --git a/tsc/testdata/baselines/reference/compiler/recursiveTypeInference.types b/tsc/testdata/baselines/reference/compiler/recursiveTypeInference.types index 95a0369a05563..5bce77d490d50 100644 --- a/tsc/testdata/baselines/reference/compiler/recursiveTypeInference.types +++ b/tsc/testdata/baselines/reference/compiler/recursiveTypeInference.types @@ -172,7 +172,7 @@ const Category = z.object({ >z.object : (shape: T) => $ZodObject >z : { string: () => $ZodString; array: (element: T) => $ZodArray; object: (shape: T) => $ZodObject; optional: (inner: T) => $ZodOptional; nullable: (inner: T) => $ZodNullable; } >object : (shape: T) => $ZodObject ->{ name: z.string(), get subcategories() { return z.array(Category); },} : { name: $ZodString; readonly subcategories: $ZodArray<$ZodObject<{ name: $ZodString; readonly subcategories: $ZodArray<$ZodObject>; }>>; } +>{ name: z.string(), get subcategories() { return z.array(Category); },} : { name: $ZodString; readonly subcategories: $ZodArray<$ZodObject>; } name: z.string(), >name : $ZodString @@ -217,7 +217,7 @@ const User = z.object({ >z.object : (shape: T) => $ZodObject >z : { string: () => $ZodString; array: (element: T) => $ZodArray; object: (shape: T) => $ZodObject; optional: (inner: T) => $ZodOptional; nullable: (inner: T) => $ZodNullable; } >object : (shape: T) => $ZodObject ->{ email: z.string(), get posts() { return z.array(Post); },} : { email: $ZodString; readonly posts: $ZodArray<$ZodObject<{ title: $ZodString; readonly author: $ZodObject<{ email: $ZodString; readonly posts: $ZodArray<$ZodObject>; }>; }>>; } +>{ email: z.string(), get posts() { return z.array(Post); },} : { email: $ZodString; readonly posts: $ZodArray<$ZodObject<{ title: $ZodString; readonly author: $ZodObject; }>>; } email: z.string(), >email : $ZodString @@ -244,7 +244,7 @@ const Post = z.object({ >z.object : (shape: T) => $ZodObject >z : { string: () => $ZodString; array: (element: T) => $ZodArray; object: (shape: T) => $ZodObject; optional: (inner: T) => $ZodOptional; nullable: (inner: T) => $ZodNullable; } >object : (shape: T) => $ZodObject ->{ title: z.string(), get author() { return User; },} : { title: $ZodString; readonly author: $ZodObject<{ email: $ZodString; readonly posts: $ZodArray<$ZodObject<{ title: $ZodString; readonly author: $ZodObject; }>>; }>; } +>{ title: z.string(), get author() { return User; },} : { title: $ZodString; readonly author: $ZodObject<{ email: $ZodString; readonly posts: $ZodArray<$ZodObject>; }>; } title: z.string(), >title : $ZodString @@ -289,7 +289,7 @@ const Activity = z.object({ >z.object : (shape: T) => $ZodObject >z : { string: () => $ZodString; array: (element: T) => $ZodArray; object: (shape: T) => $ZodObject; optional: (inner: T) => $ZodOptional; nullable: (inner: T) => $ZodNullable; } >object : (shape: T) => $ZodObject ->{ name: z.string(), get subactivities() { return z.nullable(z.array(Activity)); },} : { name: $ZodString; readonly subactivities: $ZodNullable<$ZodArray<$ZodObject<{ name: $ZodString; readonly subactivities: $ZodNullable<$ZodArray<$ZodObject>>; }>>>; } +>{ name: z.string(), get subactivities() { return z.nullable(z.array(Activity)); },} : { name: $ZodString; readonly subactivities: $ZodNullable<$ZodArray<$ZodObject>>; } name: z.string(), >name : $ZodString @@ -325,7 +325,7 @@ const Node1 = z.object({ >z.object : (shape: T) => $ZodObject >z : { string: () => $ZodString; array: (element: T) => $ZodArray; object: (shape: T) => $ZodObject; optional: (inner: T) => $ZodOptional; nullable: (inner: T) => $ZodNullable; } >object : (shape: T) => $ZodObject ->{ name: z.string(), get children() { return z.optional(NodeArray); },} : { name: $ZodString; readonly children: $ZodOptional<$ZodArray<$ZodObject<{ name: $ZodString; readonly children: $ZodOptional<$ZodArray<$ZodObject>>; }>>>; } +>{ name: z.string(), get children() { return z.optional(NodeArray); },} : { name: $ZodString; readonly children: $ZodOptional<$ZodArray<$ZodObject>>; } name: z.string(), >name : $ZodString diff --git a/tsc/testdata/baselines/reference/compiler/recursiveTypeInference2.types b/tsc/testdata/baselines/reference/compiler/recursiveTypeInference2.types index bbb72418857ba..630d5d4975b3c 100644 --- a/tsc/testdata/baselines/reference/compiler/recursiveTypeInference2.types +++ b/tsc/testdata/baselines/reference/compiler/recursiveTypeInference2.types @@ -128,7 +128,7 @@ const Tree = object({ >Tree : ZodObject>>>; }>> >object({ name: string(), get children() { return array(Tree).default([]) },}) : ZodObject>>>; }>> >object : (shape: T) => ZodObject> ->{ name: string(), get children() { return array(Tree).default([]) },} : { name: ZodString; readonly children: ZodDefault>>>; }>>>>; } +>{ name: string(), get children() { return array(Tree).default([]) },} : { name: ZodString; readonly children: ZodDefault>>>; } name: string(), >name : ZodString @@ -140,11 +140,11 @@ const Tree = object({ return array(Tree).default([]) >array(Tree).default([]) : ZodDefault>>>; }>>>> ->array(Tree).default : { (def: { name: string; children: any; }[]): ZodDefault>>>; }>>>>; (def: () => { name: string; children: any; }[]): ZodDefault>>>; }>>>>; } +>array(Tree).default : { (def: { name: string; children: typeof def; }[]): ZodDefault>>>; }>>>>; (def: () => { name: string; children: any; }[]): ZodDefault>>>; }>>>>; } >array(Tree) : ZodArray>>>; }>>> >array : (element: T) => ZodArray >Tree : ZodObject>>>; }>> ->default : { (def: { name: string; children: any; }[]): ZodDefault>>>; }>>>>; (def: () => { name: string; children: any; }[]): ZodDefault>>>; }>>>>; } +>default : { (def: { name: string; children: typeof def; }[]): ZodDefault>>>; }>>>>; (def: () => { name: string; children: any; }[]): ZodDefault>>>; }>>>>; } >[] : never[] }, diff --git a/tsc/testdata/baselines/reference/compiler/returnInfiniteIntersection.types b/tsc/testdata/baselines/reference/compiler/returnInfiniteIntersection.types index 3544c5a2caaff..54156667c447b 100644 --- a/tsc/testdata/baselines/reference/compiler/returnInfiniteIntersection.types +++ b/tsc/testdata/baselines/reference/compiler/returnInfiniteIntersection.types @@ -2,19 +2,19 @@ === returnInfiniteIntersection.ts === function recursive() { ->recursive : () => ((subkey: T) => any & { p: any; }) & { p: any; } +>recursive : () => ((subkey: T) => typeof x & { p: any; }) & { p: any; } let x = (subkey: T) => recursive(); ->x : (subkey: T) => any & { p: any; } ->(subkey: T) => recursive() : (subkey: T) => any & { p: any; } +>x : (subkey: T) => typeof x & { p: any; } +>(subkey: T) => recursive() : (subkey: T) => typeof x & { p: any; } >subkey : T ->recursive() : ((subkey: T) => any & { p: any; }) & { p: any; } ->recursive : () => ((subkey: T) => any & { p: any; }) & { p: any; } +>recursive() : ((subkey: T) => typeof x & { p: any; }) & { p: any; } +>recursive : () => ((subkey: T) => typeof x & { p: any; }) & { p: any; } return x as typeof x & { p }; ->x as typeof x & { p } : ((subkey: T) => any & { p: any; }) & { p: any; } ->x : (subkey: T) => any & { p: any; } ->x : (subkey: T) => any & { p: any; } +>x as typeof x & { p } : ((subkey: T) => typeof x & { p: any; }) & { p: any; } +>x : (subkey: T) => typeof x & { p: any; } +>x : (subkey: T) => typeof x & { p: any; } >p : any } diff --git a/tsc/testdata/baselines/reference/compiler/thisInPropertyBoundDeclarations.types b/tsc/testdata/baselines/reference/compiler/thisInPropertyBoundDeclarations.types index 2c6de8bb65745..b6995b40088dc 100644 --- a/tsc/testdata/baselines/reference/compiler/thisInPropertyBoundDeclarations.types +++ b/tsc/testdata/baselines/reference/compiler/thisInPropertyBoundDeclarations.types @@ -80,13 +80,13 @@ class A { }; prop4 = { ->prop4 : { a: () => any; } ->{ a: function() { return this; }, } : { a: () => { a: () => any; }; } +>prop4 : { a: () => A["prop4"]; } +>{ a: function() { return this; }, } : { a: () => A["prop4"]; } a: function() { return this; }, ->a : () => { a: () => any; } ->function() { return this; } : () => { a: () => any; } ->this : { a: () => any; } +>a : () => { a: A["prop4"]["a"]; } +>function() { return this; } : () => { a: A["prop4"]["a"]; } +>this : { a: () => A["prop4"]; } }; @@ -95,7 +95,7 @@ class A { >() => { return { a: function() { return this; }, }; } : () => { a: () => { a: () => any; }; } return { ->{ a: function() { return this; }, } : { a: () => { a: () => any; }; } +>{ a: function() { return this; }, } : { a: () => any; } a: function() { return this; }, >a : () => { a: () => any; } diff --git a/tsc/testdata/baselines/reference/conformance/fixSignatureCaching.types b/tsc/testdata/baselines/reference/conformance/fixSignatureCaching.types index c74656913b9fd..6aaa75bb01215 100644 --- a/tsc/testdata/baselines/reference/conformance/fixSignatureCaching.types +++ b/tsc/testdata/baselines/reference/conformance/fixSignatureCaching.types @@ -1939,7 +1939,7 @@ define(function () { >phoneSized : any >MobileDetect.isPhoneSized(maxPhoneWidth) : any >MobileDetect.isPhoneSized : ((maxPhoneWidth: any) => any) | (() => void) ->MobileDetect : { (userAgent: any, maxPhoneWidth: any): void; prototype: { constructor: any; mobile: () => any; phone: () => any; tablet: () => any; userAgent: () => any; userAgents: () => any; os: () => any; version: (key: any) => any; versionStr: (key: any) => any; is: (key: any) => boolean; match: (pattern: any) => any; isPhoneSized: (maxPhoneWidth: any) => any; mobileGrade: () => any; }; isPhoneSized: ((maxPhoneWidth: any) => any) | (() => void); _impl: {}; version: string; } +>MobileDetect : { (userAgent: any, maxPhoneWidth: any): void; prototype: { constructor: typeof MobileDetect; mobile: () => any; phone: () => any; tablet: () => any; userAgent: () => any; userAgents: () => any; os: () => any; version: (key: any) => any; versionStr: (key: any) => any; is: (key: any) => boolean; match: (pattern: any) => any; isPhoneSized: (maxPhoneWidth: any) => any; mobileGrade: () => any; }; isPhoneSized: ((maxPhoneWidth: any) => any) | (() => void); _impl: {}; version: string; } >isPhoneSized : ((maxPhoneWidth: any) => any) | (() => void) >maxPhoneWidth : any @@ -2770,7 +2770,7 @@ define(function () { * @global */ function MobileDetect(userAgent, maxPhoneWidth) { ->MobileDetect : { (userAgent: any, maxPhoneWidth: any): void; prototype: { constructor: any; mobile: () => any; phone: () => any; tablet: () => any; userAgent: () => any; userAgents: () => any; os: () => any; version: (key: any) => any; versionStr: (key: any) => any; is: (key: any) => boolean; match: (pattern: any) => any; isPhoneSized: (maxPhoneWidth: any) => any; mobileGrade: () => any; }; isPhoneSized: ((maxPhoneWidth: any) => any) | (() => void); _impl: {}; version: string; } +>MobileDetect : { (userAgent: any, maxPhoneWidth: any): void; prototype: { constructor: typeof MobileDetect; mobile: () => any; phone: () => any; tablet: () => any; userAgent: () => any; userAgents: () => any; os: () => any; version: (key: any) => any; versionStr: (key: any) => any; is: (key: any) => boolean; match: (pattern: any) => any; isPhoneSized: (maxPhoneWidth: any) => any; mobileGrade: () => any; }; isPhoneSized: ((maxPhoneWidth: any) => any) | (() => void); _impl: {}; version: string; } >userAgent : any >maxPhoneWidth : any @@ -2802,15 +2802,15 @@ define(function () { } MobileDetect.prototype = { ->MobileDetect.prototype = { constructor: MobileDetect, /** * Returns the detected phone or tablet type or null if it is not a mobile device. *
* For a list of possible return values see {@link MobileDetect#phone} and {@link MobileDetect#tablet}.
*
* If the device is not detected by the regular expressions from Mobile-Detect, a test is made against * the patterns of detectmobilebrowsers.com. If this test * is positive, a value of UnknownPhone, UnknownTablet or * UnknownMobile is returned.
* When used in browser, the decision whether phone or tablet is made based on screen.width/height.
*
* When used server-side (node.js), there is no way to tell the difference between UnknownTablet * and UnknownMobile, so you will get UnknownMobile here.
* Be aware that since v1.0.0 in this special case you will get UnknownMobile only for: * {@link MobileDetect#mobile}, not for {@link MobileDetect#phone} and {@link MobileDetect#tablet}. * In versions before v1.0.0 all 3 methods returned UnknownMobile which was tedious to use. *
* In most cases you will use the return value just as a boolean. * * @returns {String} the key for the phone family or tablet family, e.g. "Nexus". * @function MobileDetect#mobile */ mobile: function () { impl.prepareDetectionCache(this._cache, this.ua, this.maxPhoneWidth); return this._cache.mobile; }, /** * Returns the detected phone type/family string or null. *
* The returned tablet (family or producer) is one of following keys:
*
iPhone, BlackBerry, HTC, Nexus, Dell, Motorola, Samsung, LG, Sony, Asus, * NokiaLumia, Micromax, Palm, Vertu, Pantech, Fly, Wiko, iMobile, SimValley, * Wolfgang, Alcatel, Nintendo, Amoi, INQ, GenericPhone
*
* If the device is not detected by the regular expressions from Mobile-Detect, a test is made against * the patterns of detectmobilebrowsers.com. If this test * is positive, a value of UnknownPhone or UnknownMobile is returned.
* When used in browser, the decision whether phone or tablet is made based on screen.width/height.
*
* When used server-side (node.js), there is no way to tell the difference between UnknownTablet * and UnknownMobile, so you will get null here, while {@link MobileDetect#mobile} * will return UnknownMobile.
* Be aware that since v1.0.0 in this special case you will get UnknownMobile only for: * {@link MobileDetect#mobile}, not for {@link MobileDetect#phone} and {@link MobileDetect#tablet}. * In versions before v1.0.0 all 3 methods returned UnknownMobile which was tedious to use. *
* In most cases you will use the return value just as a boolean. * * @returns {String} the key of the phone family or producer, e.g. "iPhone" * @function MobileDetect#phone */ phone: function () { impl.prepareDetectionCache(this._cache, this.ua, this.maxPhoneWidth); return this._cache.phone; }, /** * Returns the detected tablet type/family string or null. *
* The returned tablet (family or producer) is one of following keys:
*
iPad, NexusTablet, SamsungTablet, Kindle, SurfaceTablet, HPTablet, AsusTablet, * BlackBerryTablet, HTCtablet, MotorolaTablet, NookTablet, AcerTablet, * ToshibaTablet, LGTablet, FujitsuTablet, PrestigioTablet, LenovoTablet, * DellTablet, YarvikTablet, MedionTablet, ArnovaTablet, IntensoTablet, IRUTablet, * MegafonTablet, EbodaTablet, AllViewTablet, ArchosTablet, AinolTablet, * NokiaLumiaTablet, SonyTablet, PhilipsTablet, CubeTablet, CobyTablet, MIDTablet, * MSITablet, SMiTTablet, RockChipTablet, FlyTablet, bqTablet, HuaweiTablet, * NecTablet, PantechTablet, BronchoTablet, VersusTablet, ZyncTablet, * PositivoTablet, NabiTablet, KoboTablet, DanewTablet, TexetTablet, * PlaystationTablet, TrekstorTablet, PyleAudioTablet, AdvanTablet, * DanyTechTablet, GalapadTablet, MicromaxTablet, KarbonnTablet, AllFineTablet, * PROSCANTablet, YONESTablet, ChangJiaTablet, GUTablet, PointOfViewTablet, * OvermaxTablet, HCLTablet, DPSTablet, VistureTablet, CrestaTablet, * MediatekTablet, ConcordeTablet, GoCleverTablet, ModecomTablet, VoninoTablet, * ECSTablet, StorexTablet, VodafoneTablet, EssentielBTablet, RossMoorTablet, * iMobileTablet, TolinoTablet, AudioSonicTablet, AMPETablet, SkkTablet, * TecnoTablet, JXDTablet, iJoyTablet, FX2Tablet, XoroTablet, ViewsonicTablet, * OdysTablet, CaptivaTablet, IconbitTablet, TeclastTablet, OndaTablet, * JaytechTablet, BlaupunktTablet, DigmaTablet, EvolioTablet, LavaTablet, * AocTablet, MpmanTablet, CelkonTablet, WolderTablet, MiTablet, NibiruTablet, * NexoTablet, LeaderTablet, UbislateTablet, PocketBookTablet, KocasoTablet, Hudl, * TelstraTablet, GenericTablet
*
* If the device is not detected by the regular expressions from Mobile-Detect, a test is made against * the patterns of detectmobilebrowsers.com. If this test * is positive, a value of UnknownTablet or UnknownMobile is returned.
* When used in browser, the decision whether phone or tablet is made based on screen.width/height.
*
* When used server-side (node.js), there is no way to tell the difference between UnknownTablet * and UnknownMobile, so you will get null here, while {@link MobileDetect#mobile} * will return UnknownMobile.
* Be aware that since v1.0.0 in this special case you will get UnknownMobile only for: * {@link MobileDetect#mobile}, not for {@link MobileDetect#phone} and {@link MobileDetect#tablet}. * In versions before v1.0.0 all 3 methods returned UnknownMobile which was tedious to use. *
* In most cases you will use the return value just as a boolean. * * @returns {String} the key of the tablet family or producer, e.g. "SamsungTablet" * @function MobileDetect#tablet */ tablet: function () { impl.prepareDetectionCache(this._cache, this.ua, this.maxPhoneWidth); return this._cache.tablet; }, /** * Returns the (first) detected user-agent string or null. *
* The returned user-agent is one of following keys:
*
Vivaldi, Chrome, Dolfin, Opera, Skyfire, Edge, IE, Firefox, Bolt, TeaShark, * Blazer, Safari, Tizen, UCBrowser, baiduboxapp, baidubrowser, DiigoBrowser, * Puffin, Mercury, ObigoBrowser, NetFront, GenericBrowser, PaleMoon
*
* In most cases calling {@link MobileDetect#userAgent} will be sufficient. But there are rare * cases where a mobile device pretends to be more than one particular browser. You can get the * list of all matches with {@link MobileDetect#userAgents} or check for a particular value by * providing one of the defined keys as first argument to {@link MobileDetect#is}. * * @returns {String} the key for the detected user-agent or null * @function MobileDetect#userAgent */ userAgent: function () { if (this._cache.userAgent === undefined) { this._cache.userAgent = impl.findMatch(impl.mobileDetectRules.uas, this.ua); } return this._cache.userAgent; }, /** * Returns all detected user-agent strings. *
* The array is empty or contains one or more of following keys:
*
Vivaldi, Chrome, Dolfin, Opera, Skyfire, Edge, IE, Firefox, Bolt, TeaShark, * Blazer, Safari, Tizen, UCBrowser, baiduboxapp, baidubrowser, DiigoBrowser, * Puffin, Mercury, ObigoBrowser, NetFront, GenericBrowser, PaleMoon
*
* In most cases calling {@link MobileDetect#userAgent} will be sufficient. But there are rare * cases where a mobile device pretends to be more than one particular browser. You can get the * list of all matches with {@link MobileDetect#userAgents} or check for a particular value by * providing one of the defined keys as first argument to {@link MobileDetect#is}. * * @returns {Array} the array of detected user-agent keys or [] * @function MobileDetect#userAgents */ userAgents: function () { if (this._cache.userAgents === undefined) { this._cache.userAgents = impl.findMatches(impl.mobileDetectRules.uas, this.ua); } return this._cache.userAgents; }, /** * Returns the detected operating system string or null. *
* The operating system is one of following keys:
*
AndroidOS, BlackBerryOS, PalmOS, SymbianOS, WindowsMobileOS, WindowsPhoneOS, * iOS, MeeGoOS, MaemoOS, JavaOS, webOS, badaOS, BREWOS
* * @returns {String} the key for the detected operating system. * @function MobileDetect#os */ os: function () { if (this._cache.os === undefined) { this._cache.os = impl.detectOS(this.ua); } return this._cache.os; }, /** * Get the version (as Number) of the given property in the User-Agent. *
* Will return a float number. (eg. 2_0 will return 2.0, 4.3.1 will return 4.31) * * @param {String} key a key defining a thing which has a version.
* You can use one of following keys:
*
Mobile, Build, Version, VendorID, iPad, iPhone, iPod, Kindle, Chrome, Coast, * Dolfin, Firefox, Fennec, Edge, IE, NetFront, NokiaBrowser, Opera, Opera Mini, * Opera Mobi, UC Browser, MQQBrowser, MicroMessenger, baiduboxapp, baidubrowser, * Iron, Safari, Skyfire, Tizen, Webkit, PaleMoon, Gecko, Trident, Presto, Goanna, * iOS, Android, BlackBerry, BREW, Java, Windows Phone OS, Windows Phone, Windows * CE, Windows NT, Symbian, webOS
* * @returns {Number} the version as float or NaN if User-Agent doesn't contain this version. * Be careful when comparing this value with '==' operator! * @function MobileDetect#version */ version: function (key) { return impl.getVersion(key, this.ua); }, /** * Get the version (as String) of the given property in the User-Agent. *
* * @param {String} key a key defining a thing which has a version.
* You can use one of following keys:
*
Mobile, Build, Version, VendorID, iPad, iPhone, iPod, Kindle, Chrome, Coast, * Dolfin, Firefox, Fennec, Edge, IE, NetFront, NokiaBrowser, Opera, Opera Mini, * Opera Mobi, UC Browser, MQQBrowser, MicroMessenger, baiduboxapp, baidubrowser, * Iron, Safari, Skyfire, Tizen, Webkit, PaleMoon, Gecko, Trident, Presto, Goanna, * iOS, Android, BlackBerry, BREW, Java, Windows Phone OS, Windows Phone, Windows * CE, Windows NT, Symbian, webOS
* * @returns {String} the "raw" version as String or null if User-Agent doesn't contain this version. * * @function MobileDetect#versionStr */ versionStr: function (key) { return impl.getVersionStr(key, this.ua); }, /** * Global test key against userAgent, os, phone, tablet and some other properties of userAgent string. * * @param {String} key the key (case-insensitive) of a userAgent, an operating system, phone or * tablet family.
* For a complete list of possible values, see {@link MobileDetect#userAgent}, * {@link MobileDetect#os}, {@link MobileDetect#phone}, {@link MobileDetect#tablet}.
* Additionally you have following keys:
*
Bot, MobileBot, DesktopMode, TV, WebKit, Console, Watch
* * @returns {boolean} true when the given key is one of the defined keys of userAgent, os, phone, * tablet or one of the listed additional keys, otherwise false * @function MobileDetect#is */ is: function (key) { return containsIC(this.userAgents(), key) || equalIC(key, this.os()) || equalIC(key, this.phone()) || equalIC(key, this.tablet()) || containsIC(impl.findMatches(impl.mobileDetectRules.utils, this.ua), key); }, /** * Do a quick test against navigator::userAgent. * * @param {String|RegExp} pattern the pattern, either as String or RegExp * (a string will be converted to a case-insensitive RegExp). * @returns {boolean} true when the pattern matches, otherwise false * @function MobileDetect#match */ match: function (pattern) { if (!(pattern instanceof RegExp)) { pattern = new RegExp(pattern, 'i'); } return pattern.test(this.ua); }, /** * Checks whether the mobile device can be considered as phone regarding screen.width. *
* Obviously this method makes sense in browser environments only (not for Node.js)! * @param {number} [maxPhoneWidth] the maximum logical pixels (aka. CSS-pixels) to be considered as phone.
* The argument is optional and if not present or falsy, the value of the constructor is taken. * @returns {boolean|undefined} undefined if screen size wasn't detectable, else true * when screen.width is less or equal to maxPhoneWidth, otherwise false.
* Will always return undefined server-side. */ isPhoneSized: function (maxPhoneWidth) { return MobileDetect.isPhoneSized(maxPhoneWidth || this.maxPhoneWidth); }, /** * Returns the mobile grade ('A', 'B', 'C'). * * @returns {String} one of the mobile grades ('A', 'B', 'C'). * @function MobileDetect#mobileGrade */ mobileGrade: function () { if (this._cache.grade === undefined) { this._cache.grade = impl.mobileGrade(this); } return this._cache.grade; } } : { constructor: { (userAgent: any, maxPhoneWidth: any): void; prototype: { constructor: any; mobile: () => any; phone: () => any; tablet: () => any; userAgent: () => any; userAgents: () => any; os: () => any; version: (key: any) => any; versionStr: (key: any) => any; is: (key: any) => boolean; match: (pattern: any) => any; isPhoneSized: (maxPhoneWidth: any) => any; mobileGrade: () => any; }; isPhoneSized: ((maxPhoneWidth: any) => any) | (() => void); _impl: {}; version: string; }; mobile: () => any; phone: () => any; tablet: () => any; userAgent: () => any; userAgents: () => any; os: () => any; version: (key: any) => any; versionStr: (key: any) => any; is: (key: any) => boolean; match: (pattern: any) => any; isPhoneSized: (maxPhoneWidth: any) => any; mobileGrade: () => any; } +>MobileDetect.prototype = { constructor: MobileDetect, /** * Returns the detected phone or tablet type or null if it is not a mobile device. *
* For a list of possible return values see {@link MobileDetect#phone} and {@link MobileDetect#tablet}.
*
* If the device is not detected by the regular expressions from Mobile-Detect, a test is made against * the patterns of detectmobilebrowsers.com. If this test * is positive, a value of UnknownPhone, UnknownTablet or * UnknownMobile is returned.
* When used in browser, the decision whether phone or tablet is made based on screen.width/height.
*
* When used server-side (node.js), there is no way to tell the difference between UnknownTablet * and UnknownMobile, so you will get UnknownMobile here.
* Be aware that since v1.0.0 in this special case you will get UnknownMobile only for: * {@link MobileDetect#mobile}, not for {@link MobileDetect#phone} and {@link MobileDetect#tablet}. * In versions before v1.0.0 all 3 methods returned UnknownMobile which was tedious to use. *
* In most cases you will use the return value just as a boolean. * * @returns {String} the key for the phone family or tablet family, e.g. "Nexus". * @function MobileDetect#mobile */ mobile: function () { impl.prepareDetectionCache(this._cache, this.ua, this.maxPhoneWidth); return this._cache.mobile; }, /** * Returns the detected phone type/family string or null. *
* The returned tablet (family or producer) is one of following keys:
*
iPhone, BlackBerry, HTC, Nexus, Dell, Motorola, Samsung, LG, Sony, Asus, * NokiaLumia, Micromax, Palm, Vertu, Pantech, Fly, Wiko, iMobile, SimValley, * Wolfgang, Alcatel, Nintendo, Amoi, INQ, GenericPhone
*
* If the device is not detected by the regular expressions from Mobile-Detect, a test is made against * the patterns of detectmobilebrowsers.com. If this test * is positive, a value of UnknownPhone or UnknownMobile is returned.
* When used in browser, the decision whether phone or tablet is made based on screen.width/height.
*
* When used server-side (node.js), there is no way to tell the difference between UnknownTablet * and UnknownMobile, so you will get null here, while {@link MobileDetect#mobile} * will return UnknownMobile.
* Be aware that since v1.0.0 in this special case you will get UnknownMobile only for: * {@link MobileDetect#mobile}, not for {@link MobileDetect#phone} and {@link MobileDetect#tablet}. * In versions before v1.0.0 all 3 methods returned UnknownMobile which was tedious to use. *
* In most cases you will use the return value just as a boolean. * * @returns {String} the key of the phone family or producer, e.g. "iPhone" * @function MobileDetect#phone */ phone: function () { impl.prepareDetectionCache(this._cache, this.ua, this.maxPhoneWidth); return this._cache.phone; }, /** * Returns the detected tablet type/family string or null. *
* The returned tablet (family or producer) is one of following keys:
*
iPad, NexusTablet, SamsungTablet, Kindle, SurfaceTablet, HPTablet, AsusTablet, * BlackBerryTablet, HTCtablet, MotorolaTablet, NookTablet, AcerTablet, * ToshibaTablet, LGTablet, FujitsuTablet, PrestigioTablet, LenovoTablet, * DellTablet, YarvikTablet, MedionTablet, ArnovaTablet, IntensoTablet, IRUTablet, * MegafonTablet, EbodaTablet, AllViewTablet, ArchosTablet, AinolTablet, * NokiaLumiaTablet, SonyTablet, PhilipsTablet, CubeTablet, CobyTablet, MIDTablet, * MSITablet, SMiTTablet, RockChipTablet, FlyTablet, bqTablet, HuaweiTablet, * NecTablet, PantechTablet, BronchoTablet, VersusTablet, ZyncTablet, * PositivoTablet, NabiTablet, KoboTablet, DanewTablet, TexetTablet, * PlaystationTablet, TrekstorTablet, PyleAudioTablet, AdvanTablet, * DanyTechTablet, GalapadTablet, MicromaxTablet, KarbonnTablet, AllFineTablet, * PROSCANTablet, YONESTablet, ChangJiaTablet, GUTablet, PointOfViewTablet, * OvermaxTablet, HCLTablet, DPSTablet, VistureTablet, CrestaTablet, * MediatekTablet, ConcordeTablet, GoCleverTablet, ModecomTablet, VoninoTablet, * ECSTablet, StorexTablet, VodafoneTablet, EssentielBTablet, RossMoorTablet, * iMobileTablet, TolinoTablet, AudioSonicTablet, AMPETablet, SkkTablet, * TecnoTablet, JXDTablet, iJoyTablet, FX2Tablet, XoroTablet, ViewsonicTablet, * OdysTablet, CaptivaTablet, IconbitTablet, TeclastTablet, OndaTablet, * JaytechTablet, BlaupunktTablet, DigmaTablet, EvolioTablet, LavaTablet, * AocTablet, MpmanTablet, CelkonTablet, WolderTablet, MiTablet, NibiruTablet, * NexoTablet, LeaderTablet, UbislateTablet, PocketBookTablet, KocasoTablet, Hudl, * TelstraTablet, GenericTablet
*
* If the device is not detected by the regular expressions from Mobile-Detect, a test is made against * the patterns of detectmobilebrowsers.com. If this test * is positive, a value of UnknownTablet or UnknownMobile is returned.
* When used in browser, the decision whether phone or tablet is made based on screen.width/height.
*
* When used server-side (node.js), there is no way to tell the difference between UnknownTablet * and UnknownMobile, so you will get null here, while {@link MobileDetect#mobile} * will return UnknownMobile.
* Be aware that since v1.0.0 in this special case you will get UnknownMobile only for: * {@link MobileDetect#mobile}, not for {@link MobileDetect#phone} and {@link MobileDetect#tablet}. * In versions before v1.0.0 all 3 methods returned UnknownMobile which was tedious to use. *
* In most cases you will use the return value just as a boolean. * * @returns {String} the key of the tablet family or producer, e.g. "SamsungTablet" * @function MobileDetect#tablet */ tablet: function () { impl.prepareDetectionCache(this._cache, this.ua, this.maxPhoneWidth); return this._cache.tablet; }, /** * Returns the (first) detected user-agent string or null. *
* The returned user-agent is one of following keys:
*
Vivaldi, Chrome, Dolfin, Opera, Skyfire, Edge, IE, Firefox, Bolt, TeaShark, * Blazer, Safari, Tizen, UCBrowser, baiduboxapp, baidubrowser, DiigoBrowser, * Puffin, Mercury, ObigoBrowser, NetFront, GenericBrowser, PaleMoon
*
* In most cases calling {@link MobileDetect#userAgent} will be sufficient. But there are rare * cases where a mobile device pretends to be more than one particular browser. You can get the * list of all matches with {@link MobileDetect#userAgents} or check for a particular value by * providing one of the defined keys as first argument to {@link MobileDetect#is}. * * @returns {String} the key for the detected user-agent or null * @function MobileDetect#userAgent */ userAgent: function () { if (this._cache.userAgent === undefined) { this._cache.userAgent = impl.findMatch(impl.mobileDetectRules.uas, this.ua); } return this._cache.userAgent; }, /** * Returns all detected user-agent strings. *
* The array is empty or contains one or more of following keys:
*
Vivaldi, Chrome, Dolfin, Opera, Skyfire, Edge, IE, Firefox, Bolt, TeaShark, * Blazer, Safari, Tizen, UCBrowser, baiduboxapp, baidubrowser, DiigoBrowser, * Puffin, Mercury, ObigoBrowser, NetFront, GenericBrowser, PaleMoon
*
* In most cases calling {@link MobileDetect#userAgent} will be sufficient. But there are rare * cases where a mobile device pretends to be more than one particular browser. You can get the * list of all matches with {@link MobileDetect#userAgents} or check for a particular value by * providing one of the defined keys as first argument to {@link MobileDetect#is}. * * @returns {Array} the array of detected user-agent keys or [] * @function MobileDetect#userAgents */ userAgents: function () { if (this._cache.userAgents === undefined) { this._cache.userAgents = impl.findMatches(impl.mobileDetectRules.uas, this.ua); } return this._cache.userAgents; }, /** * Returns the detected operating system string or null. *
* The operating system is one of following keys:
*
AndroidOS, BlackBerryOS, PalmOS, SymbianOS, WindowsMobileOS, WindowsPhoneOS, * iOS, MeeGoOS, MaemoOS, JavaOS, webOS, badaOS, BREWOS
* * @returns {String} the key for the detected operating system. * @function MobileDetect#os */ os: function () { if (this._cache.os === undefined) { this._cache.os = impl.detectOS(this.ua); } return this._cache.os; }, /** * Get the version (as Number) of the given property in the User-Agent. *
* Will return a float number. (eg. 2_0 will return 2.0, 4.3.1 will return 4.31) * * @param {String} key a key defining a thing which has a version.
* You can use one of following keys:
*
Mobile, Build, Version, VendorID, iPad, iPhone, iPod, Kindle, Chrome, Coast, * Dolfin, Firefox, Fennec, Edge, IE, NetFront, NokiaBrowser, Opera, Opera Mini, * Opera Mobi, UC Browser, MQQBrowser, MicroMessenger, baiduboxapp, baidubrowser, * Iron, Safari, Skyfire, Tizen, Webkit, PaleMoon, Gecko, Trident, Presto, Goanna, * iOS, Android, BlackBerry, BREW, Java, Windows Phone OS, Windows Phone, Windows * CE, Windows NT, Symbian, webOS
* * @returns {Number} the version as float or NaN if User-Agent doesn't contain this version. * Be careful when comparing this value with '==' operator! * @function MobileDetect#version */ version: function (key) { return impl.getVersion(key, this.ua); }, /** * Get the version (as String) of the given property in the User-Agent. *
* * @param {String} key a key defining a thing which has a version.
* You can use one of following keys:
*
Mobile, Build, Version, VendorID, iPad, iPhone, iPod, Kindle, Chrome, Coast, * Dolfin, Firefox, Fennec, Edge, IE, NetFront, NokiaBrowser, Opera, Opera Mini, * Opera Mobi, UC Browser, MQQBrowser, MicroMessenger, baiduboxapp, baidubrowser, * Iron, Safari, Skyfire, Tizen, Webkit, PaleMoon, Gecko, Trident, Presto, Goanna, * iOS, Android, BlackBerry, BREW, Java, Windows Phone OS, Windows Phone, Windows * CE, Windows NT, Symbian, webOS
* * @returns {String} the "raw" version as String or null if User-Agent doesn't contain this version. * * @function MobileDetect#versionStr */ versionStr: function (key) { return impl.getVersionStr(key, this.ua); }, /** * Global test key against userAgent, os, phone, tablet and some other properties of userAgent string. * * @param {String} key the key (case-insensitive) of a userAgent, an operating system, phone or * tablet family.
* For a complete list of possible values, see {@link MobileDetect#userAgent}, * {@link MobileDetect#os}, {@link MobileDetect#phone}, {@link MobileDetect#tablet}.
* Additionally you have following keys:
*
Bot, MobileBot, DesktopMode, TV, WebKit, Console, Watch
* * @returns {boolean} true when the given key is one of the defined keys of userAgent, os, phone, * tablet or one of the listed additional keys, otherwise false * @function MobileDetect#is */ is: function (key) { return containsIC(this.userAgents(), key) || equalIC(key, this.os()) || equalIC(key, this.phone()) || equalIC(key, this.tablet()) || containsIC(impl.findMatches(impl.mobileDetectRules.utils, this.ua), key); }, /** * Do a quick test against navigator::userAgent. * * @param {String|RegExp} pattern the pattern, either as String or RegExp * (a string will be converted to a case-insensitive RegExp). * @returns {boolean} true when the pattern matches, otherwise false * @function MobileDetect#match */ match: function (pattern) { if (!(pattern instanceof RegExp)) { pattern = new RegExp(pattern, 'i'); } return pattern.test(this.ua); }, /** * Checks whether the mobile device can be considered as phone regarding screen.width. *
* Obviously this method makes sense in browser environments only (not for Node.js)! * @param {number} [maxPhoneWidth] the maximum logical pixels (aka. CSS-pixels) to be considered as phone.
* The argument is optional and if not present or falsy, the value of the constructor is taken. * @returns {boolean|undefined} undefined if screen size wasn't detectable, else true * when screen.width is less or equal to maxPhoneWidth, otherwise false.
* Will always return undefined server-side. */ isPhoneSized: function (maxPhoneWidth) { return MobileDetect.isPhoneSized(maxPhoneWidth || this.maxPhoneWidth); }, /** * Returns the mobile grade ('A', 'B', 'C'). * * @returns {String} one of the mobile grades ('A', 'B', 'C'). * @function MobileDetect#mobileGrade */ mobileGrade: function () { if (this._cache.grade === undefined) { this._cache.grade = impl.mobileGrade(this); } return this._cache.grade; } } : { constructor: { (userAgent: any, maxPhoneWidth: any): void; prototype: any; isPhoneSized: ((maxPhoneWidth: any) => any) | (() => void); _impl: {}; version: string; }; mobile: () => any; phone: () => any; tablet: () => any; userAgent: () => any; userAgents: () => any; os: () => any; version: (key: any) => any; versionStr: (key: any) => any; is: (key: any) => boolean; match: (pattern: any) => any; isPhoneSized: (maxPhoneWidth: any) => any; mobileGrade: () => any; } >MobileDetect.prototype : { constructor: { (userAgent: any, maxPhoneWidth: any): void; prototype: any; isPhoneSized: ((maxPhoneWidth: any) => any) | (() => void); _impl: {}; version: string; }; mobile: () => any; phone: () => any; tablet: () => any; userAgent: () => any; userAgents: () => any; os: () => any; version: (key: any) => any; versionStr: (key: any) => any; is: (key: any) => boolean; match: (pattern: any) => any; isPhoneSized: (maxPhoneWidth: any) => any; mobileGrade: () => any; } ->MobileDetect : { (userAgent: any, maxPhoneWidth: any): void; prototype: { constructor: any; mobile: () => any; phone: () => any; tablet: () => any; userAgent: () => any; userAgents: () => any; os: () => any; version: (key: any) => any; versionStr: (key: any) => any; is: (key: any) => boolean; match: (pattern: any) => any; isPhoneSized: (maxPhoneWidth: any) => any; mobileGrade: () => any; }; isPhoneSized: ((maxPhoneWidth: any) => any) | (() => void); _impl: {}; version: string; } +>MobileDetect : { (userAgent: any, maxPhoneWidth: any): void; prototype: { constructor: typeof MobileDetect; mobile: () => any; phone: () => any; tablet: () => any; userAgent: () => any; userAgents: () => any; os: () => any; version: (key: any) => any; versionStr: (key: any) => any; is: (key: any) => boolean; match: (pattern: any) => any; isPhoneSized: (maxPhoneWidth: any) => any; mobileGrade: () => any; }; isPhoneSized: ((maxPhoneWidth: any) => any) | (() => void); _impl: {}; version: string; } >prototype : { constructor: { (userAgent: any, maxPhoneWidth: any): void; prototype: any; isPhoneSized: ((maxPhoneWidth: any) => any) | (() => void); _impl: {}; version: string; }; mobile: () => any; phone: () => any; tablet: () => any; userAgent: () => any; userAgents: () => any; os: () => any; version: (key: any) => any; versionStr: (key: any) => any; is: (key: any) => boolean; match: (pattern: any) => any; isPhoneSized: (maxPhoneWidth: any) => any; mobileGrade: () => any; } ->{ constructor: MobileDetect, /** * Returns the detected phone or tablet type or null if it is not a mobile device. *
* For a list of possible return values see {@link MobileDetect#phone} and {@link MobileDetect#tablet}.
*
* If the device is not detected by the regular expressions from Mobile-Detect, a test is made against * the patterns of detectmobilebrowsers.com. If this test * is positive, a value of UnknownPhone, UnknownTablet or * UnknownMobile is returned.
* When used in browser, the decision whether phone or tablet is made based on screen.width/height.
*
* When used server-side (node.js), there is no way to tell the difference between UnknownTablet * and UnknownMobile, so you will get UnknownMobile here.
* Be aware that since v1.0.0 in this special case you will get UnknownMobile only for: * {@link MobileDetect#mobile}, not for {@link MobileDetect#phone} and {@link MobileDetect#tablet}. * In versions before v1.0.0 all 3 methods returned UnknownMobile which was tedious to use. *
* In most cases you will use the return value just as a boolean. * * @returns {String} the key for the phone family or tablet family, e.g. "Nexus". * @function MobileDetect#mobile */ mobile: function () { impl.prepareDetectionCache(this._cache, this.ua, this.maxPhoneWidth); return this._cache.mobile; }, /** * Returns the detected phone type/family string or null. *
* The returned tablet (family or producer) is one of following keys:
*
iPhone, BlackBerry, HTC, Nexus, Dell, Motorola, Samsung, LG, Sony, Asus, * NokiaLumia, Micromax, Palm, Vertu, Pantech, Fly, Wiko, iMobile, SimValley, * Wolfgang, Alcatel, Nintendo, Amoi, INQ, GenericPhone
*
* If the device is not detected by the regular expressions from Mobile-Detect, a test is made against * the patterns of detectmobilebrowsers.com. If this test * is positive, a value of UnknownPhone or UnknownMobile is returned.
* When used in browser, the decision whether phone or tablet is made based on screen.width/height.
*
* When used server-side (node.js), there is no way to tell the difference between UnknownTablet * and UnknownMobile, so you will get null here, while {@link MobileDetect#mobile} * will return UnknownMobile.
* Be aware that since v1.0.0 in this special case you will get UnknownMobile only for: * {@link MobileDetect#mobile}, not for {@link MobileDetect#phone} and {@link MobileDetect#tablet}. * In versions before v1.0.0 all 3 methods returned UnknownMobile which was tedious to use. *
* In most cases you will use the return value just as a boolean. * * @returns {String} the key of the phone family or producer, e.g. "iPhone" * @function MobileDetect#phone */ phone: function () { impl.prepareDetectionCache(this._cache, this.ua, this.maxPhoneWidth); return this._cache.phone; }, /** * Returns the detected tablet type/family string or null. *
* The returned tablet (family or producer) is one of following keys:
*
iPad, NexusTablet, SamsungTablet, Kindle, SurfaceTablet, HPTablet, AsusTablet, * BlackBerryTablet, HTCtablet, MotorolaTablet, NookTablet, AcerTablet, * ToshibaTablet, LGTablet, FujitsuTablet, PrestigioTablet, LenovoTablet, * DellTablet, YarvikTablet, MedionTablet, ArnovaTablet, IntensoTablet, IRUTablet, * MegafonTablet, EbodaTablet, AllViewTablet, ArchosTablet, AinolTablet, * NokiaLumiaTablet, SonyTablet, PhilipsTablet, CubeTablet, CobyTablet, MIDTablet, * MSITablet, SMiTTablet, RockChipTablet, FlyTablet, bqTablet, HuaweiTablet, * NecTablet, PantechTablet, BronchoTablet, VersusTablet, ZyncTablet, * PositivoTablet, NabiTablet, KoboTablet, DanewTablet, TexetTablet, * PlaystationTablet, TrekstorTablet, PyleAudioTablet, AdvanTablet, * DanyTechTablet, GalapadTablet, MicromaxTablet, KarbonnTablet, AllFineTablet, * PROSCANTablet, YONESTablet, ChangJiaTablet, GUTablet, PointOfViewTablet, * OvermaxTablet, HCLTablet, DPSTablet, VistureTablet, CrestaTablet, * MediatekTablet, ConcordeTablet, GoCleverTablet, ModecomTablet, VoninoTablet, * ECSTablet, StorexTablet, VodafoneTablet, EssentielBTablet, RossMoorTablet, * iMobileTablet, TolinoTablet, AudioSonicTablet, AMPETablet, SkkTablet, * TecnoTablet, JXDTablet, iJoyTablet, FX2Tablet, XoroTablet, ViewsonicTablet, * OdysTablet, CaptivaTablet, IconbitTablet, TeclastTablet, OndaTablet, * JaytechTablet, BlaupunktTablet, DigmaTablet, EvolioTablet, LavaTablet, * AocTablet, MpmanTablet, CelkonTablet, WolderTablet, MiTablet, NibiruTablet, * NexoTablet, LeaderTablet, UbislateTablet, PocketBookTablet, KocasoTablet, Hudl, * TelstraTablet, GenericTablet
*
* If the device is not detected by the regular expressions from Mobile-Detect, a test is made against * the patterns of detectmobilebrowsers.com. If this test * is positive, a value of UnknownTablet or UnknownMobile is returned.
* When used in browser, the decision whether phone or tablet is made based on screen.width/height.
*
* When used server-side (node.js), there is no way to tell the difference between UnknownTablet * and UnknownMobile, so you will get null here, while {@link MobileDetect#mobile} * will return UnknownMobile.
* Be aware that since v1.0.0 in this special case you will get UnknownMobile only for: * {@link MobileDetect#mobile}, not for {@link MobileDetect#phone} and {@link MobileDetect#tablet}. * In versions before v1.0.0 all 3 methods returned UnknownMobile which was tedious to use. *
* In most cases you will use the return value just as a boolean. * * @returns {String} the key of the tablet family or producer, e.g. "SamsungTablet" * @function MobileDetect#tablet */ tablet: function () { impl.prepareDetectionCache(this._cache, this.ua, this.maxPhoneWidth); return this._cache.tablet; }, /** * Returns the (first) detected user-agent string or null. *
* The returned user-agent is one of following keys:
*
Vivaldi, Chrome, Dolfin, Opera, Skyfire, Edge, IE, Firefox, Bolt, TeaShark, * Blazer, Safari, Tizen, UCBrowser, baiduboxapp, baidubrowser, DiigoBrowser, * Puffin, Mercury, ObigoBrowser, NetFront, GenericBrowser, PaleMoon
*
* In most cases calling {@link MobileDetect#userAgent} will be sufficient. But there are rare * cases where a mobile device pretends to be more than one particular browser. You can get the * list of all matches with {@link MobileDetect#userAgents} or check for a particular value by * providing one of the defined keys as first argument to {@link MobileDetect#is}. * * @returns {String} the key for the detected user-agent or null * @function MobileDetect#userAgent */ userAgent: function () { if (this._cache.userAgent === undefined) { this._cache.userAgent = impl.findMatch(impl.mobileDetectRules.uas, this.ua); } return this._cache.userAgent; }, /** * Returns all detected user-agent strings. *
* The array is empty or contains one or more of following keys:
*
Vivaldi, Chrome, Dolfin, Opera, Skyfire, Edge, IE, Firefox, Bolt, TeaShark, * Blazer, Safari, Tizen, UCBrowser, baiduboxapp, baidubrowser, DiigoBrowser, * Puffin, Mercury, ObigoBrowser, NetFront, GenericBrowser, PaleMoon
*
* In most cases calling {@link MobileDetect#userAgent} will be sufficient. But there are rare * cases where a mobile device pretends to be more than one particular browser. You can get the * list of all matches with {@link MobileDetect#userAgents} or check for a particular value by * providing one of the defined keys as first argument to {@link MobileDetect#is}. * * @returns {Array} the array of detected user-agent keys or [] * @function MobileDetect#userAgents */ userAgents: function () { if (this._cache.userAgents === undefined) { this._cache.userAgents = impl.findMatches(impl.mobileDetectRules.uas, this.ua); } return this._cache.userAgents; }, /** * Returns the detected operating system string or null. *
* The operating system is one of following keys:
*
AndroidOS, BlackBerryOS, PalmOS, SymbianOS, WindowsMobileOS, WindowsPhoneOS, * iOS, MeeGoOS, MaemoOS, JavaOS, webOS, badaOS, BREWOS
* * @returns {String} the key for the detected operating system. * @function MobileDetect#os */ os: function () { if (this._cache.os === undefined) { this._cache.os = impl.detectOS(this.ua); } return this._cache.os; }, /** * Get the version (as Number) of the given property in the User-Agent. *
* Will return a float number. (eg. 2_0 will return 2.0, 4.3.1 will return 4.31) * * @param {String} key a key defining a thing which has a version.
* You can use one of following keys:
*
Mobile, Build, Version, VendorID, iPad, iPhone, iPod, Kindle, Chrome, Coast, * Dolfin, Firefox, Fennec, Edge, IE, NetFront, NokiaBrowser, Opera, Opera Mini, * Opera Mobi, UC Browser, MQQBrowser, MicroMessenger, baiduboxapp, baidubrowser, * Iron, Safari, Skyfire, Tizen, Webkit, PaleMoon, Gecko, Trident, Presto, Goanna, * iOS, Android, BlackBerry, BREW, Java, Windows Phone OS, Windows Phone, Windows * CE, Windows NT, Symbian, webOS
* * @returns {Number} the version as float or NaN if User-Agent doesn't contain this version. * Be careful when comparing this value with '==' operator! * @function MobileDetect#version */ version: function (key) { return impl.getVersion(key, this.ua); }, /** * Get the version (as String) of the given property in the User-Agent. *
* * @param {String} key a key defining a thing which has a version.
* You can use one of following keys:
*
Mobile, Build, Version, VendorID, iPad, iPhone, iPod, Kindle, Chrome, Coast, * Dolfin, Firefox, Fennec, Edge, IE, NetFront, NokiaBrowser, Opera, Opera Mini, * Opera Mobi, UC Browser, MQQBrowser, MicroMessenger, baiduboxapp, baidubrowser, * Iron, Safari, Skyfire, Tizen, Webkit, PaleMoon, Gecko, Trident, Presto, Goanna, * iOS, Android, BlackBerry, BREW, Java, Windows Phone OS, Windows Phone, Windows * CE, Windows NT, Symbian, webOS
* * @returns {String} the "raw" version as String or null if User-Agent doesn't contain this version. * * @function MobileDetect#versionStr */ versionStr: function (key) { return impl.getVersionStr(key, this.ua); }, /** * Global test key against userAgent, os, phone, tablet and some other properties of userAgent string. * * @param {String} key the key (case-insensitive) of a userAgent, an operating system, phone or * tablet family.
* For a complete list of possible values, see {@link MobileDetect#userAgent}, * {@link MobileDetect#os}, {@link MobileDetect#phone}, {@link MobileDetect#tablet}.
* Additionally you have following keys:
*
Bot, MobileBot, DesktopMode, TV, WebKit, Console, Watch
* * @returns {boolean} true when the given key is one of the defined keys of userAgent, os, phone, * tablet or one of the listed additional keys, otherwise false * @function MobileDetect#is */ is: function (key) { return containsIC(this.userAgents(), key) || equalIC(key, this.os()) || equalIC(key, this.phone()) || equalIC(key, this.tablet()) || containsIC(impl.findMatches(impl.mobileDetectRules.utils, this.ua), key); }, /** * Do a quick test against navigator::userAgent. * * @param {String|RegExp} pattern the pattern, either as String or RegExp * (a string will be converted to a case-insensitive RegExp). * @returns {boolean} true when the pattern matches, otherwise false * @function MobileDetect#match */ match: function (pattern) { if (!(pattern instanceof RegExp)) { pattern = new RegExp(pattern, 'i'); } return pattern.test(this.ua); }, /** * Checks whether the mobile device can be considered as phone regarding screen.width. *
* Obviously this method makes sense in browser environments only (not for Node.js)! * @param {number} [maxPhoneWidth] the maximum logical pixels (aka. CSS-pixels) to be considered as phone.
* The argument is optional and if not present or falsy, the value of the constructor is taken. * @returns {boolean|undefined} undefined if screen size wasn't detectable, else true * when screen.width is less or equal to maxPhoneWidth, otherwise false.
* Will always return undefined server-side. */ isPhoneSized: function (maxPhoneWidth) { return MobileDetect.isPhoneSized(maxPhoneWidth || this.maxPhoneWidth); }, /** * Returns the mobile grade ('A', 'B', 'C'). * * @returns {String} one of the mobile grades ('A', 'B', 'C'). * @function MobileDetect#mobileGrade */ mobileGrade: function () { if (this._cache.grade === undefined) { this._cache.grade = impl.mobileGrade(this); } return this._cache.grade; } } : { constructor: { (userAgent: any, maxPhoneWidth: any): void; prototype: { constructor: any; mobile: () => any; phone: () => any; tablet: () => any; userAgent: () => any; userAgents: () => any; os: () => any; version: (key: any) => any; versionStr: (key: any) => any; is: (key: any) => boolean; match: (pattern: any) => any; isPhoneSized: (maxPhoneWidth: any) => any; mobileGrade: () => any; }; isPhoneSized: ((maxPhoneWidth: any) => any) | (() => void); _impl: {}; version: string; }; mobile: () => any; phone: () => any; tablet: () => any; userAgent: () => any; userAgents: () => any; os: () => any; version: (key: any) => any; versionStr: (key: any) => any; is: (key: any) => boolean; match: (pattern: any) => any; isPhoneSized: (maxPhoneWidth: any) => any; mobileGrade: () => any; } +>{ constructor: MobileDetect, /** * Returns the detected phone or tablet type or null if it is not a mobile device. *
* For a list of possible return values see {@link MobileDetect#phone} and {@link MobileDetect#tablet}.
*
* If the device is not detected by the regular expressions from Mobile-Detect, a test is made against * the patterns of detectmobilebrowsers.com. If this test * is positive, a value of UnknownPhone, UnknownTablet or * UnknownMobile is returned.
* When used in browser, the decision whether phone or tablet is made based on screen.width/height.
*
* When used server-side (node.js), there is no way to tell the difference between UnknownTablet * and UnknownMobile, so you will get UnknownMobile here.
* Be aware that since v1.0.0 in this special case you will get UnknownMobile only for: * {@link MobileDetect#mobile}, not for {@link MobileDetect#phone} and {@link MobileDetect#tablet}. * In versions before v1.0.0 all 3 methods returned UnknownMobile which was tedious to use. *
* In most cases you will use the return value just as a boolean. * * @returns {String} the key for the phone family or tablet family, e.g. "Nexus". * @function MobileDetect#mobile */ mobile: function () { impl.prepareDetectionCache(this._cache, this.ua, this.maxPhoneWidth); return this._cache.mobile; }, /** * Returns the detected phone type/family string or null. *
* The returned tablet (family or producer) is one of following keys:
*
iPhone, BlackBerry, HTC, Nexus, Dell, Motorola, Samsung, LG, Sony, Asus, * NokiaLumia, Micromax, Palm, Vertu, Pantech, Fly, Wiko, iMobile, SimValley, * Wolfgang, Alcatel, Nintendo, Amoi, INQ, GenericPhone
*
* If the device is not detected by the regular expressions from Mobile-Detect, a test is made against * the patterns of detectmobilebrowsers.com. If this test * is positive, a value of UnknownPhone or UnknownMobile is returned.
* When used in browser, the decision whether phone or tablet is made based on screen.width/height.
*
* When used server-side (node.js), there is no way to tell the difference between UnknownTablet * and UnknownMobile, so you will get null here, while {@link MobileDetect#mobile} * will return UnknownMobile.
* Be aware that since v1.0.0 in this special case you will get UnknownMobile only for: * {@link MobileDetect#mobile}, not for {@link MobileDetect#phone} and {@link MobileDetect#tablet}. * In versions before v1.0.0 all 3 methods returned UnknownMobile which was tedious to use. *
* In most cases you will use the return value just as a boolean. * * @returns {String} the key of the phone family or producer, e.g. "iPhone" * @function MobileDetect#phone */ phone: function () { impl.prepareDetectionCache(this._cache, this.ua, this.maxPhoneWidth); return this._cache.phone; }, /** * Returns the detected tablet type/family string or null. *
* The returned tablet (family or producer) is one of following keys:
*
iPad, NexusTablet, SamsungTablet, Kindle, SurfaceTablet, HPTablet, AsusTablet, * BlackBerryTablet, HTCtablet, MotorolaTablet, NookTablet, AcerTablet, * ToshibaTablet, LGTablet, FujitsuTablet, PrestigioTablet, LenovoTablet, * DellTablet, YarvikTablet, MedionTablet, ArnovaTablet, IntensoTablet, IRUTablet, * MegafonTablet, EbodaTablet, AllViewTablet, ArchosTablet, AinolTablet, * NokiaLumiaTablet, SonyTablet, PhilipsTablet, CubeTablet, CobyTablet, MIDTablet, * MSITablet, SMiTTablet, RockChipTablet, FlyTablet, bqTablet, HuaweiTablet, * NecTablet, PantechTablet, BronchoTablet, VersusTablet, ZyncTablet, * PositivoTablet, NabiTablet, KoboTablet, DanewTablet, TexetTablet, * PlaystationTablet, TrekstorTablet, PyleAudioTablet, AdvanTablet, * DanyTechTablet, GalapadTablet, MicromaxTablet, KarbonnTablet, AllFineTablet, * PROSCANTablet, YONESTablet, ChangJiaTablet, GUTablet, PointOfViewTablet, * OvermaxTablet, HCLTablet, DPSTablet, VistureTablet, CrestaTablet, * MediatekTablet, ConcordeTablet, GoCleverTablet, ModecomTablet, VoninoTablet, * ECSTablet, StorexTablet, VodafoneTablet, EssentielBTablet, RossMoorTablet, * iMobileTablet, TolinoTablet, AudioSonicTablet, AMPETablet, SkkTablet, * TecnoTablet, JXDTablet, iJoyTablet, FX2Tablet, XoroTablet, ViewsonicTablet, * OdysTablet, CaptivaTablet, IconbitTablet, TeclastTablet, OndaTablet, * JaytechTablet, BlaupunktTablet, DigmaTablet, EvolioTablet, LavaTablet, * AocTablet, MpmanTablet, CelkonTablet, WolderTablet, MiTablet, NibiruTablet, * NexoTablet, LeaderTablet, UbislateTablet, PocketBookTablet, KocasoTablet, Hudl, * TelstraTablet, GenericTablet
*
* If the device is not detected by the regular expressions from Mobile-Detect, a test is made against * the patterns of detectmobilebrowsers.com. If this test * is positive, a value of UnknownTablet or UnknownMobile is returned.
* When used in browser, the decision whether phone or tablet is made based on screen.width/height.
*
* When used server-side (node.js), there is no way to tell the difference between UnknownTablet * and UnknownMobile, so you will get null here, while {@link MobileDetect#mobile} * will return UnknownMobile.
* Be aware that since v1.0.0 in this special case you will get UnknownMobile only for: * {@link MobileDetect#mobile}, not for {@link MobileDetect#phone} and {@link MobileDetect#tablet}. * In versions before v1.0.0 all 3 methods returned UnknownMobile which was tedious to use. *
* In most cases you will use the return value just as a boolean. * * @returns {String} the key of the tablet family or producer, e.g. "SamsungTablet" * @function MobileDetect#tablet */ tablet: function () { impl.prepareDetectionCache(this._cache, this.ua, this.maxPhoneWidth); return this._cache.tablet; }, /** * Returns the (first) detected user-agent string or null. *
* The returned user-agent is one of following keys:
*
Vivaldi, Chrome, Dolfin, Opera, Skyfire, Edge, IE, Firefox, Bolt, TeaShark, * Blazer, Safari, Tizen, UCBrowser, baiduboxapp, baidubrowser, DiigoBrowser, * Puffin, Mercury, ObigoBrowser, NetFront, GenericBrowser, PaleMoon
*
* In most cases calling {@link MobileDetect#userAgent} will be sufficient. But there are rare * cases where a mobile device pretends to be more than one particular browser. You can get the * list of all matches with {@link MobileDetect#userAgents} or check for a particular value by * providing one of the defined keys as first argument to {@link MobileDetect#is}. * * @returns {String} the key for the detected user-agent or null * @function MobileDetect#userAgent */ userAgent: function () { if (this._cache.userAgent === undefined) { this._cache.userAgent = impl.findMatch(impl.mobileDetectRules.uas, this.ua); } return this._cache.userAgent; }, /** * Returns all detected user-agent strings. *
* The array is empty or contains one or more of following keys:
*
Vivaldi, Chrome, Dolfin, Opera, Skyfire, Edge, IE, Firefox, Bolt, TeaShark, * Blazer, Safari, Tizen, UCBrowser, baiduboxapp, baidubrowser, DiigoBrowser, * Puffin, Mercury, ObigoBrowser, NetFront, GenericBrowser, PaleMoon
*
* In most cases calling {@link MobileDetect#userAgent} will be sufficient. But there are rare * cases where a mobile device pretends to be more than one particular browser. You can get the * list of all matches with {@link MobileDetect#userAgents} or check for a particular value by * providing one of the defined keys as first argument to {@link MobileDetect#is}. * * @returns {Array} the array of detected user-agent keys or [] * @function MobileDetect#userAgents */ userAgents: function () { if (this._cache.userAgents === undefined) { this._cache.userAgents = impl.findMatches(impl.mobileDetectRules.uas, this.ua); } return this._cache.userAgents; }, /** * Returns the detected operating system string or null. *
* The operating system is one of following keys:
*
AndroidOS, BlackBerryOS, PalmOS, SymbianOS, WindowsMobileOS, WindowsPhoneOS, * iOS, MeeGoOS, MaemoOS, JavaOS, webOS, badaOS, BREWOS
* * @returns {String} the key for the detected operating system. * @function MobileDetect#os */ os: function () { if (this._cache.os === undefined) { this._cache.os = impl.detectOS(this.ua); } return this._cache.os; }, /** * Get the version (as Number) of the given property in the User-Agent. *
* Will return a float number. (eg. 2_0 will return 2.0, 4.3.1 will return 4.31) * * @param {String} key a key defining a thing which has a version.
* You can use one of following keys:
*
Mobile, Build, Version, VendorID, iPad, iPhone, iPod, Kindle, Chrome, Coast, * Dolfin, Firefox, Fennec, Edge, IE, NetFront, NokiaBrowser, Opera, Opera Mini, * Opera Mobi, UC Browser, MQQBrowser, MicroMessenger, baiduboxapp, baidubrowser, * Iron, Safari, Skyfire, Tizen, Webkit, PaleMoon, Gecko, Trident, Presto, Goanna, * iOS, Android, BlackBerry, BREW, Java, Windows Phone OS, Windows Phone, Windows * CE, Windows NT, Symbian, webOS
* * @returns {Number} the version as float or NaN if User-Agent doesn't contain this version. * Be careful when comparing this value with '==' operator! * @function MobileDetect#version */ version: function (key) { return impl.getVersion(key, this.ua); }, /** * Get the version (as String) of the given property in the User-Agent. *
* * @param {String} key a key defining a thing which has a version.
* You can use one of following keys:
*
Mobile, Build, Version, VendorID, iPad, iPhone, iPod, Kindle, Chrome, Coast, * Dolfin, Firefox, Fennec, Edge, IE, NetFront, NokiaBrowser, Opera, Opera Mini, * Opera Mobi, UC Browser, MQQBrowser, MicroMessenger, baiduboxapp, baidubrowser, * Iron, Safari, Skyfire, Tizen, Webkit, PaleMoon, Gecko, Trident, Presto, Goanna, * iOS, Android, BlackBerry, BREW, Java, Windows Phone OS, Windows Phone, Windows * CE, Windows NT, Symbian, webOS
* * @returns {String} the "raw" version as String or null if User-Agent doesn't contain this version. * * @function MobileDetect#versionStr */ versionStr: function (key) { return impl.getVersionStr(key, this.ua); }, /** * Global test key against userAgent, os, phone, tablet and some other properties of userAgent string. * * @param {String} key the key (case-insensitive) of a userAgent, an operating system, phone or * tablet family.
* For a complete list of possible values, see {@link MobileDetect#userAgent}, * {@link MobileDetect#os}, {@link MobileDetect#phone}, {@link MobileDetect#tablet}.
* Additionally you have following keys:
*
Bot, MobileBot, DesktopMode, TV, WebKit, Console, Watch
* * @returns {boolean} true when the given key is one of the defined keys of userAgent, os, phone, * tablet or one of the listed additional keys, otherwise false * @function MobileDetect#is */ is: function (key) { return containsIC(this.userAgents(), key) || equalIC(key, this.os()) || equalIC(key, this.phone()) || equalIC(key, this.tablet()) || containsIC(impl.findMatches(impl.mobileDetectRules.utils, this.ua), key); }, /** * Do a quick test against navigator::userAgent. * * @param {String|RegExp} pattern the pattern, either as String or RegExp * (a string will be converted to a case-insensitive RegExp). * @returns {boolean} true when the pattern matches, otherwise false * @function MobileDetect#match */ match: function (pattern) { if (!(pattern instanceof RegExp)) { pattern = new RegExp(pattern, 'i'); } return pattern.test(this.ua); }, /** * Checks whether the mobile device can be considered as phone regarding screen.width. *
* Obviously this method makes sense in browser environments only (not for Node.js)! * @param {number} [maxPhoneWidth] the maximum logical pixels (aka. CSS-pixels) to be considered as phone.
* The argument is optional and if not present or falsy, the value of the constructor is taken. * @returns {boolean|undefined} undefined if screen size wasn't detectable, else true * when screen.width is less or equal to maxPhoneWidth, otherwise false.
* Will always return undefined server-side. */ isPhoneSized: function (maxPhoneWidth) { return MobileDetect.isPhoneSized(maxPhoneWidth || this.maxPhoneWidth); }, /** * Returns the mobile grade ('A', 'B', 'C'). * * @returns {String} one of the mobile grades ('A', 'B', 'C'). * @function MobileDetect#mobileGrade */ mobileGrade: function () { if (this._cache.grade === undefined) { this._cache.grade = impl.mobileGrade(this); } return this._cache.grade; } } : { constructor: { (userAgent: any, maxPhoneWidth: any): void; prototype: any; isPhoneSized: ((maxPhoneWidth: any) => any) | (() => void); _impl: {}; version: string; }; mobile: () => any; phone: () => any; tablet: () => any; userAgent: () => any; userAgents: () => any; os: () => any; version: (key: any) => any; versionStr: (key: any) => any; is: (key: any) => boolean; match: (pattern: any) => any; isPhoneSized: (maxPhoneWidth: any) => any; mobileGrade: () => any; } constructor: MobileDetect, ->constructor : { (userAgent: any, maxPhoneWidth: any): void; prototype: { constructor: any; mobile: () => any; phone: () => any; tablet: () => any; userAgent: () => any; userAgents: () => any; os: () => any; version: (key: any) => any; versionStr: (key: any) => any; is: (key: any) => boolean; match: (pattern: any) => any; isPhoneSized: (maxPhoneWidth: any) => any; mobileGrade: () => any; }; isPhoneSized: ((maxPhoneWidth: any) => any) | (() => void); _impl: {}; version: string; } ->MobileDetect : { (userAgent: any, maxPhoneWidth: any): void; prototype: { constructor: any; mobile: () => any; phone: () => any; tablet: () => any; userAgent: () => any; userAgents: () => any; os: () => any; version: (key: any) => any; versionStr: (key: any) => any; is: (key: any) => boolean; match: (pattern: any) => any; isPhoneSized: (maxPhoneWidth: any) => any; mobileGrade: () => any; }; isPhoneSized: ((maxPhoneWidth: any) => any) | (() => void); _impl: {}; version: string; } +>constructor : { (userAgent: any, maxPhoneWidth: any): void; prototype: { constructor: typeof MobileDetect; mobile: () => any; phone: () => any; tablet: () => any; userAgent: () => any; userAgents: () => any; os: () => any; version: (key: any) => any; versionStr: (key: any) => any; is: (key: any) => boolean; match: (pattern: any) => any; isPhoneSized: (maxPhoneWidth: any) => any; mobileGrade: () => any; }; isPhoneSized: ((maxPhoneWidth: any) => any) | (() => void); _impl: {}; version: string; } +>MobileDetect : { (userAgent: any, maxPhoneWidth: any): void; prototype: { constructor: typeof MobileDetect; mobile: () => any; phone: () => any; tablet: () => any; userAgent: () => any; userAgents: () => any; os: () => any; version: (key: any) => any; versionStr: (key: any) => any; is: (key: any) => boolean; match: (pattern: any) => any; isPhoneSized: (maxPhoneWidth: any) => any; mobileGrade: () => any; }; isPhoneSized: ((maxPhoneWidth: any) => any) | (() => void); _impl: {}; version: string; } /** * Returns the detected phone or tablet type or null if it is not a mobile device. @@ -3354,7 +3354,7 @@ define(function () { return MobileDetect.isPhoneSized(maxPhoneWidth || this.maxPhoneWidth); >MobileDetect.isPhoneSized(maxPhoneWidth || this.maxPhoneWidth) : any >MobileDetect.isPhoneSized : ((maxPhoneWidth: any) => any) | (() => void) ->MobileDetect : { (userAgent: any, maxPhoneWidth: any): void; prototype: { constructor: any; mobile: () => any; phone: () => any; tablet: () => any; userAgent: () => any; userAgents: () => any; os: () => any; version: (key: any) => any; versionStr: (key: any) => any; is: (key: any) => boolean; match: (pattern: any) => any; isPhoneSized: (maxPhoneWidth: any) => any; mobileGrade: () => any; }; isPhoneSized: ((maxPhoneWidth: any) => any) | (() => void); _impl: {}; version: string; } +>MobileDetect : { (userAgent: any, maxPhoneWidth: any): void; prototype: { constructor: typeof MobileDetect; mobile: () => any; phone: () => any; tablet: () => any; userAgent: () => any; userAgents: () => any; os: () => any; version: (key: any) => any; versionStr: (key: any) => any; is: (key: any) => boolean; match: (pattern: any) => any; isPhoneSized: (maxPhoneWidth: any) => any; mobileGrade: () => any; }; isPhoneSized: ((maxPhoneWidth: any) => any) | (() => void); _impl: {}; version: string; } >isPhoneSized : ((maxPhoneWidth: any) => any) | (() => void) >maxPhoneWidth || this.maxPhoneWidth : any >maxPhoneWidth : any @@ -3419,7 +3419,7 @@ define(function () { MobileDetect.isPhoneSized = function (maxPhoneWidth) { >MobileDetect.isPhoneSized = function (maxPhoneWidth) { return maxPhoneWidth < 0 ? undefined : impl.getDeviceSmallerSide() <= maxPhoneWidth; } : (maxPhoneWidth: any) => any >MobileDetect.isPhoneSized : ((maxPhoneWidth: any) => any) | (() => void) ->MobileDetect : { (userAgent: any, maxPhoneWidth: any): void; prototype: { constructor: any; mobile: () => any; phone: () => any; tablet: () => any; userAgent: () => any; userAgents: () => any; os: () => any; version: (key: any) => any; versionStr: (key: any) => any; is: (key: any) => boolean; match: (pattern: any) => any; isPhoneSized: (maxPhoneWidth: any) => any; mobileGrade: () => any; }; isPhoneSized: ((maxPhoneWidth: any) => any) | (() => void); _impl: {}; version: string; } +>MobileDetect : { (userAgent: any, maxPhoneWidth: any): void; prototype: { constructor: typeof MobileDetect; mobile: () => any; phone: () => any; tablet: () => any; userAgent: () => any; userAgents: () => any; os: () => any; version: (key: any) => any; versionStr: (key: any) => any; is: (key: any) => boolean; match: (pattern: any) => any; isPhoneSized: (maxPhoneWidth: any) => any; mobileGrade: () => any; }; isPhoneSized: ((maxPhoneWidth: any) => any) | (() => void); _impl: {}; version: string; } >isPhoneSized : ((maxPhoneWidth: any) => any) | (() => void) >function (maxPhoneWidth) { return maxPhoneWidth < 0 ? undefined : impl.getDeviceSmallerSide() <= maxPhoneWidth; } : (maxPhoneWidth: any) => any >maxPhoneWidth : any @@ -3442,7 +3442,7 @@ define(function () { MobileDetect.isPhoneSized = function () {}; >MobileDetect.isPhoneSized = function () {} : () => void >MobileDetect.isPhoneSized : ((maxPhoneWidth: any) => any) | (() => void) ->MobileDetect : { (userAgent: any, maxPhoneWidth: any): void; prototype: { constructor: any; mobile: () => any; phone: () => any; tablet: () => any; userAgent: () => any; userAgents: () => any; os: () => any; version: (key: any) => any; versionStr: (key: any) => any; is: (key: any) => boolean; match: (pattern: any) => any; isPhoneSized: (maxPhoneWidth: any) => any; mobileGrade: () => any; }; isPhoneSized: ((maxPhoneWidth: any) => any) | (() => void); _impl: {}; version: string; } +>MobileDetect : { (userAgent: any, maxPhoneWidth: any): void; prototype: { constructor: typeof MobileDetect; mobile: () => any; phone: () => any; tablet: () => any; userAgent: () => any; userAgents: () => any; os: () => any; version: (key: any) => any; versionStr: (key: any) => any; is: (key: any) => boolean; match: (pattern: any) => any; isPhoneSized: (maxPhoneWidth: any) => any; mobileGrade: () => any; }; isPhoneSized: ((maxPhoneWidth: any) => any) | (() => void); _impl: {}; version: string; } >isPhoneSized : ((maxPhoneWidth: any) => any) | (() => void) >function () {} : () => void } @@ -3451,19 +3451,19 @@ define(function () { MobileDetect._impl = impl; >MobileDetect._impl = impl : {} >MobileDetect._impl : {} ->MobileDetect : { (userAgent: any, maxPhoneWidth: any): void; prototype: { constructor: any; mobile: () => any; phone: () => any; tablet: () => any; userAgent: () => any; userAgents: () => any; os: () => any; version: (key: any) => any; versionStr: (key: any) => any; is: (key: any) => boolean; match: (pattern: any) => any; isPhoneSized: (maxPhoneWidth: any) => any; mobileGrade: () => any; }; isPhoneSized: ((maxPhoneWidth: any) => any) | (() => void); _impl: {}; version: string; } +>MobileDetect : { (userAgent: any, maxPhoneWidth: any): void; prototype: { constructor: typeof MobileDetect; mobile: () => any; phone: () => any; tablet: () => any; userAgent: () => any; userAgents: () => any; os: () => any; version: (key: any) => any; versionStr: (key: any) => any; is: (key: any) => boolean; match: (pattern: any) => any; isPhoneSized: (maxPhoneWidth: any) => any; mobileGrade: () => any; }; isPhoneSized: ((maxPhoneWidth: any) => any) | (() => void); _impl: {}; version: string; } >_impl : {} >impl : {} MobileDetect.version = '1.3.3 2016-07-31'; >MobileDetect.version = '1.3.3 2016-07-31' : "1.3.3 2016-07-31" >MobileDetect.version : string ->MobileDetect : { (userAgent: any, maxPhoneWidth: any): void; prototype: { constructor: any; mobile: () => any; phone: () => any; tablet: () => any; userAgent: () => any; userAgents: () => any; os: () => any; version: (key: any) => any; versionStr: (key: any) => any; is: (key: any) => boolean; match: (pattern: any) => any; isPhoneSized: (maxPhoneWidth: any) => any; mobileGrade: () => any; }; isPhoneSized: ((maxPhoneWidth: any) => any) | (() => void); _impl: {}; version: string; } +>MobileDetect : { (userAgent: any, maxPhoneWidth: any): void; prototype: { constructor: typeof MobileDetect; mobile: () => any; phone: () => any; tablet: () => any; userAgent: () => any; userAgents: () => any; os: () => any; version: (key: any) => any; versionStr: (key: any) => any; is: (key: any) => boolean; match: (pattern: any) => any; isPhoneSized: (maxPhoneWidth: any) => any; mobileGrade: () => any; }; isPhoneSized: ((maxPhoneWidth: any) => any) | (() => void); _impl: {}; version: string; } >version : string >'1.3.3 2016-07-31' : "1.3.3 2016-07-31" return MobileDetect; ->MobileDetect : { (userAgent: any, maxPhoneWidth: any): void; prototype: { constructor: any; mobile: () => any; phone: () => any; tablet: () => any; userAgent: () => any; userAgents: () => any; os: () => any; version: (key: any) => any; versionStr: (key: any) => any; is: (key: any) => boolean; match: (pattern: any) => any; isPhoneSized: (maxPhoneWidth: any) => any; mobileGrade: () => any; }; isPhoneSized: ((maxPhoneWidth: any) => any) | (() => void); _impl: {}; version: string; } +>MobileDetect : { (userAgent: any, maxPhoneWidth: any): void; prototype: { constructor: typeof MobileDetect; mobile: () => any; phone: () => any; tablet: () => any; userAgent: () => any; userAgents: () => any; os: () => any; version: (key: any) => any; versionStr: (key: any) => any; is: (key: any) => boolean; match: (pattern: any) => any; isPhoneSized: (maxPhoneWidth: any) => any; mobileGrade: () => any; }; isPhoneSized: ((maxPhoneWidth: any) => any) | (() => void); _impl: {}; version: string; } }); // end of call of define() })((function (undefined) { diff --git a/tsc/testdata/baselines/reference/conformance/functionImplementations.types b/tsc/testdata/baselines/reference/conformance/functionImplementations.types index b662a3760164f..580e7331fd177 100644 --- a/tsc/testdata/baselines/reference/conformance/functionImplementations.types +++ b/tsc/testdata/baselines/reference/conformance/functionImplementations.types @@ -10,11 +10,11 @@ var v: void = function () { } (); // FunctionExpression f with no return type annotation and directly references f in its body returns any var a: any = function f() { >a : any ->function f() { return f;} : () => typeof f ->f : () => typeof a +>function f() { return f;} : () => any +>f : () => typeof f return f; ->f : () => typeof a +>f : () => typeof f }; var a: any = function f() { @@ -31,15 +31,15 @@ var a: any = function f() { // FunctionExpression f with no return type annotation and indirectly references f in its body returns any var a: any = function f() { >a : any ->function f() { var x = f; return x;} : () => typeof f ->f : () => typeof a +>function f() { var x = f; return x;} : () => any +>f : () => typeof f var x = f; ->x : () => typeof a ->f : () => typeof a +>x : () => typeof f +>f : () => typeof f return x; ->x : () => typeof a +>x : () => typeof f }; diff --git a/tsc/testdata/baselines/reference/conformance/newTarget.es5(target=es2015).types b/tsc/testdata/baselines/reference/conformance/newTarget.es5(target=es2015).types index 753961cb1008f..d75482a7047ba 100644 --- a/tsc/testdata/baselines/reference/conformance/newTarget.es5(target=es2015).types +++ b/tsc/testdata/baselines/reference/conformance/newTarget.es5(target=es2015).types @@ -17,16 +17,16 @@ class A { >target : typeof A } static c = function () { return new.target; } ->c : () => any ->function () { return new.target; } : () => any ->new.target : () => any ->target : () => any +>c : () => (typeof A)["c"] +>function () { return new.target; } : () => (typeof A)["c"] +>new.target : () => (typeof A)["c"] +>target : () => (typeof A)["c"] d = function () { return new.target; } ->d : () => any ->function () { return new.target; } : () => any ->new.target : () => any ->target : () => any +>d : () => A["d"] +>function () { return new.target; } : () => A["d"] +>new.target : () => A["d"] +>target : () => A["d"] } class B extends A { @@ -83,14 +83,14 @@ const f2 = function () { } const O = { ->O : { k: () => () => any; } ->{ k: function () { return new.target; }} : { k: () => () => any; } +>O : { k: () => (typeof O)["k"]; } +>{ k: function () { return new.target; }} : { k: () => (typeof O)["k"]; } k: function () { return new.target; } ->k : () => any ->function () { return new.target; } : () => any ->new.target : () => any ->target : () => any +>k : () => (typeof O)["k"] +>function () { return new.target; } : () => (typeof O)["k"] +>new.target : () => (typeof O)["k"] +>target : () => (typeof O)["k"] }; diff --git a/tsc/testdata/baselines/reference/conformance/newTarget.es6.types b/tsc/testdata/baselines/reference/conformance/newTarget.es6.types index 17a9fbbbc2cce..d94c5a90593db 100644 --- a/tsc/testdata/baselines/reference/conformance/newTarget.es6.types +++ b/tsc/testdata/baselines/reference/conformance/newTarget.es6.types @@ -17,16 +17,16 @@ class A { >target : typeof A } static c = function () { return new.target; } ->c : () => any ->function () { return new.target; } : () => any ->new.target : () => any ->target : () => any +>c : () => (typeof A)["c"] +>function () { return new.target; } : () => (typeof A)["c"] +>new.target : () => (typeof A)["c"] +>target : () => (typeof A)["c"] d = function () { return new.target; } ->d : () => any ->function () { return new.target; } : () => any ->new.target : () => any ->target : () => any +>d : () => A["d"] +>function () { return new.target; } : () => A["d"] +>new.target : () => A["d"] +>target : () => A["d"] } class B extends A { @@ -83,14 +83,14 @@ const f2 = function () { } const O = { ->O : { k: () => () => any; } ->{ k: function () { return new.target; }} : { k: () => () => any; } +>O : { k: () => (typeof O)["k"]; } +>{ k: function () { return new.target; }} : { k: () => (typeof O)["k"]; } k: function () { return new.target; } ->k : () => any ->function () { return new.target; } : () => any ->new.target : () => any ->target : () => any +>k : () => (typeof O)["k"] +>function () { return new.target; } : () => (typeof O)["k"] +>new.target : () => (typeof O)["k"] +>target : () => (typeof O)["k"] }; diff --git a/tsc/testdata/baselines/reference/conformance/privateClassPropertyAccessibleWithinClass.types b/tsc/testdata/baselines/reference/conformance/privateClassPropertyAccessibleWithinClass.types index 60668e7776783..1f8f8ce04ca33 100644 --- a/tsc/testdata/baselines/reference/conformance/privateClassPropertyAccessibleWithinClass.types +++ b/tsc/testdata/baselines/reference/conformance/privateClassPropertyAccessibleWithinClass.types @@ -27,10 +27,10 @@ class C { >x : string private foo() { return this.foo; } ->foo : () => any ->this.foo : () => any +>foo : () => C["foo"] +>this.foo : () => C["foo"] >this : this ->foo : () => any +>foo : () => C["foo"] private static x: string; >x : string @@ -53,17 +53,17 @@ class C { >x : string private static foo() { return this.foo; } ->foo : () => typeof C.foo ->this.foo : () => typeof C.foo +>foo : () => (typeof C)["foo"] +>this.foo : () => (typeof C)["foo"] >this : typeof C ->foo : () => typeof C.foo +>foo : () => (typeof C)["foo"] private static bar() { this.foo(); } >bar : () => void ->this.foo() : () => typeof C.foo ->this.foo : () => typeof C.foo +>this.foo() : () => (typeof C)["foo"] +>this.foo : () => (typeof C)["foo"] >this : typeof C ->foo : () => typeof C.foo +>foo : () => (typeof C)["foo"] } // added level of function nesting diff --git a/tsc/testdata/baselines/reference/conformance/privateClassPropertyAccessibleWithinNestedClass(target=es2015).types b/tsc/testdata/baselines/reference/conformance/privateClassPropertyAccessibleWithinNestedClass(target=es2015).types index 49fb2fd4c70f7..56f726294d255 100644 --- a/tsc/testdata/baselines/reference/conformance/privateClassPropertyAccessibleWithinNestedClass(target=es2015).types +++ b/tsc/testdata/baselines/reference/conformance/privateClassPropertyAccessibleWithinNestedClass(target=es2015).types @@ -27,10 +27,10 @@ class C { >x : string private foo() { return this.foo; } ->foo : () => any ->this.foo : () => any +>foo : () => C["foo"] +>this.foo : () => C["foo"] >this : this ->foo : () => any +>foo : () => C["foo"] private static x: string; >x : string @@ -53,17 +53,17 @@ class C { >x : string private static foo() { return this.foo; } ->foo : () => typeof C.foo ->this.foo : () => typeof C.foo +>foo : () => (typeof C)["foo"] +>this.foo : () => (typeof C)["foo"] >this : typeof C ->foo : () => typeof C.foo +>foo : () => (typeof C)["foo"] private static bar() { this.foo(); } >bar : () => void ->this.foo() : () => typeof C.foo ->this.foo : () => typeof C.foo +>this.foo() : () => (typeof C)["foo"] +>this.foo : () => (typeof C)["foo"] >this : typeof C ->foo : () => typeof C.foo +>foo : () => (typeof C)["foo"] private bar() { >bar : () => void @@ -120,10 +120,10 @@ class C { >bar : () => void var sx4 = C.foo; ->sx4 : () => typeof C.foo ->C.foo : () => typeof C.foo +>sx4 : () => (typeof C)["foo"] +>C.foo : () => (typeof C)["foo"] >C : typeof C ->foo : () => typeof C.foo +>foo : () => (typeof C)["foo"] let y = new C(); >y : C diff --git a/tsc/testdata/baselines/reference/conformance/protectedClassPropertyAccessibleWithinClass(target=es2015).types b/tsc/testdata/baselines/reference/conformance/protectedClassPropertyAccessibleWithinClass(target=es2015).types index 7c6518e4cd144..0e4d14dcbc4d0 100644 --- a/tsc/testdata/baselines/reference/conformance/protectedClassPropertyAccessibleWithinClass(target=es2015).types +++ b/tsc/testdata/baselines/reference/conformance/protectedClassPropertyAccessibleWithinClass(target=es2015).types @@ -27,10 +27,10 @@ class C { >x : string protected foo() { return this.foo; } ->foo : () => any ->this.foo : () => any +>foo : () => C["foo"] +>this.foo : () => C["foo"] >this : this ->foo : () => any +>foo : () => C["foo"] protected static x: string; >x : string @@ -53,17 +53,17 @@ class C { >x : string protected static foo() { return this.foo; } ->foo : () => typeof C.foo ->this.foo : () => typeof C.foo +>foo : () => (typeof C)["foo"] +>this.foo : () => (typeof C)["foo"] >this : typeof C ->foo : () => typeof C.foo +>foo : () => (typeof C)["foo"] protected static bar() { this.foo(); } >bar : () => void ->this.foo() : () => typeof C.foo ->this.foo : () => typeof C.foo +>this.foo() : () => (typeof C)["foo"] +>this.foo : () => (typeof C)["foo"] >this : typeof C ->foo : () => typeof C.foo +>foo : () => (typeof C)["foo"] } // added level of function nesting diff --git a/tsc/testdata/baselines/reference/conformance/protectedClassPropertyAccessibleWithinNestedClass(target=es2015).types b/tsc/testdata/baselines/reference/conformance/protectedClassPropertyAccessibleWithinNestedClass(target=es2015).types index 2bc6d9ce81730..22b9007a7b0d6 100644 --- a/tsc/testdata/baselines/reference/conformance/protectedClassPropertyAccessibleWithinNestedClass(target=es2015).types +++ b/tsc/testdata/baselines/reference/conformance/protectedClassPropertyAccessibleWithinNestedClass(target=es2015).types @@ -27,10 +27,10 @@ class C { >x : string protected foo() { return this.foo; } ->foo : () => any ->this.foo : () => any +>foo : () => C["foo"] +>this.foo : () => C["foo"] >this : this ->foo : () => any +>foo : () => C["foo"] protected static x: string; >x : string @@ -53,17 +53,17 @@ class C { >x : string protected static foo() { return this.foo; } ->foo : () => typeof C.foo ->this.foo : () => typeof C.foo +>foo : () => (typeof C)["foo"] +>this.foo : () => (typeof C)["foo"] >this : typeof C ->foo : () => typeof C.foo +>foo : () => (typeof C)["foo"] protected static bar() { this.foo(); } >bar : () => void ->this.foo() : () => typeof C.foo ->this.foo : () => typeof C.foo +>this.foo() : () => (typeof C)["foo"] +>this.foo : () => (typeof C)["foo"] >this : typeof C ->foo : () => typeof C.foo +>foo : () => (typeof C)["foo"] protected bar() { >bar : () => void @@ -120,10 +120,10 @@ class C { >bar : () => void var sx4 = C.foo; ->sx4 : () => typeof C.foo ->C.foo : () => typeof C.foo +>sx4 : () => (typeof C)["foo"] +>C.foo : () => (typeof C)["foo"] >C : typeof C ->foo : () => typeof C.foo +>foo : () => (typeof C)["foo"] let y = new C(); >y : C diff --git a/tsc/testdata/baselines/reference/conformance/templateStringWithEmbeddedFunctionExpression.types b/tsc/testdata/baselines/reference/conformance/templateStringWithEmbeddedFunctionExpression.types index 0c0f4a7cbb59a..be4c64612ef83 100644 --- a/tsc/testdata/baselines/reference/conformance/templateStringWithEmbeddedFunctionExpression.types +++ b/tsc/testdata/baselines/reference/conformance/templateStringWithEmbeddedFunctionExpression.types @@ -5,6 +5,6 @@ var x = `abc${ function y() { return y; } }def`; >x : string >`abc${ function y() { return y; } }def` : string >function y() { return y; } : () => any ->y : () => any ->y : () => any +>y : () => typeof y +>y : () => typeof y diff --git a/tsc/testdata/baselines/reference/conformance/templateStringWithEmbeddedFunctionExpressionES6.types b/tsc/testdata/baselines/reference/conformance/templateStringWithEmbeddedFunctionExpressionES6.types index 096ecb467fa2c..f135233b51328 100644 --- a/tsc/testdata/baselines/reference/conformance/templateStringWithEmbeddedFunctionExpressionES6.types +++ b/tsc/testdata/baselines/reference/conformance/templateStringWithEmbeddedFunctionExpressionES6.types @@ -5,6 +5,6 @@ var x = `abc${ function y() { return y; } }def`; >x : string >`abc${ function y() { return y; } }def` : string >function y() { return y; } : () => any ->y : () => any ->y : () => any +>y : () => typeof y +>y : () => typeof y diff --git a/tsc/testdata/baselines/reference/fourslash/quickInfo/quickinfoVerbosityRecursiveType.baseline b/tsc/testdata/baselines/reference/fourslash/quickInfo/quickinfoVerbosityRecursiveType.baseline index 52bc030954346..366292a8b4ade 100644 --- a/tsc/testdata/baselines/reference/fourslash/quickInfo/quickinfoVerbosityRecursiveType.baseline +++ b/tsc/testdata/baselines/reference/fourslash/quickInfo/quickinfoVerbosityRecursiveType.baseline @@ -449,7 +449,7 @@ // | ---------------------------------------------------------------------- // | ```typescript // | const object: { -// | next: () => ...; +// | next: () => typeof object; // | } // | ``` // | @@ -459,7 +459,7 @@ // | ---------------------------------------------------------------------- // | ```typescript // | const object: { -// | next: () => ...; +// | next: () => typeof object; // | } // | ``` // | @@ -469,7 +469,7 @@ // | ---------------------------------------------------------------------- // | ```typescript // | const object: { -// | next: () => ...; +// | next: () => typeof object; // | } // | ``` // | @@ -479,7 +479,7 @@ // ^^^^ // | ---------------------------------------------------------------------- // | ```typescript -// | function self(): () => ... +// | function self(): typeof self // | ``` // | // | (verbosity level: 2) @@ -487,7 +487,7 @@ // ^^^^ // | ---------------------------------------------------------------------- // | ```typescript -// | function self(): () => ... +// | function self(): typeof self // | ``` // | // | (verbosity level: 1) @@ -495,7 +495,7 @@ // ^^^^ // | ---------------------------------------------------------------------- // | ```typescript -// | function self(): () => ... +// | function self(): typeof self // | ``` // | // | (verbosity level: 0) @@ -1666,7 +1666,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\nconst object: {\n next: () => ...;\n}\n```\n" + "value": "```typescript\nconst object: {\n next: () => typeof object;\n}\n```\n" }, "range": { "start": { @@ -1696,7 +1696,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\nconst object: {\n next: () => ...;\n}\n```\n" + "value": "```typescript\nconst object: {\n next: () => typeof object;\n}\n```\n" }, "range": { "start": { @@ -1726,7 +1726,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\nconst object: {\n next: () => ...;\n}\n```\n" + "value": "```typescript\nconst object: {\n next: () => typeof object;\n}\n```\n" }, "range": { "start": { @@ -1756,7 +1756,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\nfunction self(): () => ...\n```\n" + "value": "```typescript\nfunction self(): typeof self\n```\n" }, "range": { "start": { @@ -1786,7 +1786,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\nfunction self(): () => ...\n```\n" + "value": "```typescript\nfunction self(): typeof self\n```\n" }, "range": { "start": { @@ -1816,7 +1816,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\nfunction self(): () => ...\n```\n" + "value": "```typescript\nfunction self(): typeof self\n```\n" }, "range": { "start": { diff --git a/tsc/testdata/baselines/reference/fourslash/quickInfo/recursiveFunctionCallQuickInfo.baseline b/tsc/testdata/baselines/reference/fourslash/quickInfo/recursiveFunctionCallQuickInfo.baseline index 255f224addd4c..408d47c5c5516 100644 --- a/tsc/testdata/baselines/reference/fourslash/quickInfo/recursiveFunctionCallQuickInfo.baseline +++ b/tsc/testdata/baselines/reference/fourslash/quickInfo/recursiveFunctionCallQuickInfo.baseline @@ -29,7 +29,7 @@ // ^^^^^ // | ---------------------------------------------------------------------- // | ```typescript -// | const arrow: () => () => typeof arrow +// | const arrow: () => typeof arrow // | ``` // | // | (verbosity level: 2) @@ -37,7 +37,7 @@ // ^^^^^ // | ---------------------------------------------------------------------- // | ```typescript -// | const arrow: () => () => typeof arrow +// | const arrow: () => typeof arrow // | ``` // | // | (verbosity level: 1) @@ -45,7 +45,7 @@ // ^^^^^ // | ---------------------------------------------------------------------- // | ```typescript -// | const arrow: () => () => typeof arrow +// | const arrow: () => typeof arrow // | ``` // | // | (verbosity level: 0) @@ -55,7 +55,7 @@ // ^^^^^ // | ---------------------------------------------------------------------- // | ```typescript -// | const named: () => () => typeof named +// | const named: () => typeof named // | ``` // | // | (verbosity level: 2) @@ -63,7 +63,7 @@ // ^^^^^ // | ---------------------------------------------------------------------- // | ```typescript -// | const named: () => () => typeof named +// | const named: () => typeof named // | ``` // | // | (verbosity level: 1) @@ -71,7 +71,7 @@ // ^^^^^ // | ---------------------------------------------------------------------- // | ```typescript -// | const named: () => () => typeof named +// | const named: () => typeof named // | ``` // | // | (verbosity level: 0) @@ -81,7 +81,7 @@ // ^^^^^ // | ---------------------------------------------------------------------- // | ```typescript -// | function recur(): () => typeof recur +// | function recur(): typeof recur // | ``` // | // | (verbosity level: 2) @@ -89,7 +89,7 @@ // ^^^^^ // | ---------------------------------------------------------------------- // | ```typescript -// | function recur(): () => typeof recur +// | function recur(): typeof recur // | ``` // | // | (verbosity level: 1) @@ -97,7 +97,7 @@ // ^^^^^ // | ---------------------------------------------------------------------- // | ```typescript -// | function recur(): () => typeof recur +// | function recur(): typeof recur // | ``` // | // | (verbosity level: 0) @@ -107,7 +107,7 @@ // ^^^^^^^ // | ---------------------------------------------------------------------- // | ```typescript -// | const generic: (value: number) => (value: number) => typeof generic +// | const generic: (value: number) => (value: T) => typeof generic // | ``` // | // | (verbosity level: 0) @@ -117,7 +117,7 @@ // ^^^^^^^^^^^ // | ---------------------------------------------------------------------- // | ```typescript -// | const specialized: (value: string) => (value: string) => typeof generic +// | const specialized: (value: string) => (value: T) => typeof generic // | ``` // | // | (verbosity level: 0) @@ -127,7 +127,7 @@ // ^^^^^^^^ // | ---------------------------------------------------------------------- // | ```typescript -// | let narrowed: () => () => typeof arrow +// | let narrowed: () => typeof arrow // | ``` // | // | (verbosity level: 2) @@ -135,7 +135,7 @@ // ^^^^^^^^ // | ---------------------------------------------------------------------- // | ```typescript -// | let narrowed: () => () => typeof arrow +// | let narrowed: () => typeof arrow // | ``` // | // | (verbosity level: 1) @@ -143,7 +143,7 @@ // ^^^^^^^^ // | ---------------------------------------------------------------------- // | ```typescript -// | let narrowed: () => () => typeof arrow +// | let narrowed: () => typeof arrow // | ``` // | // | (verbosity level: 0) @@ -211,6 +211,22 @@ // | function overloaded(value: number): typeof overloaded // | ``` // | +// | (verbosity level: 2) +// | ---------------------------------------------------------------------- +// ^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | function overloaded(value: number): typeof overloaded +// | ``` +// | +// | (verbosity level: 1) +// | ---------------------------------------------------------------------- +// ^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | function overloaded(value: number): typeof overloaded +// | ``` +// | // | (verbosity level: 0) // | ---------------------------------------------------------------------- // const object = { recur() { return object.recur; } }; @@ -218,7 +234,7 @@ // ^^^^^ // | ---------------------------------------------------------------------- // | ```typescript -// | (method) recur(): () => ... +// | (method) recur(): (typeof object)["recur"] // | ``` // | // | (verbosity level: 2) @@ -226,7 +242,7 @@ // ^^^^^ // | ---------------------------------------------------------------------- // | ```typescript -// | (method) recur(): () => ... +// | (method) recur(): (typeof object)["recur"] // | ``` // | // | (verbosity level: 1) @@ -234,7 +250,7 @@ // ^^^^^ // | ---------------------------------------------------------------------- // | ```typescript -// | (method) recur(): () => ... +// | (method) recur(): (typeof object)["recur"] // | ``` // | // | (verbosity level: 0) @@ -269,7 +285,7 @@ // ^^^^^ // | ---------------------------------------------------------------------- // | ```typescript -// | const first: () => () => () => typeof second +// | const first: () => () => typeof first // | ``` // | // | (verbosity level: 2) @@ -277,7 +293,7 @@ // ^^^^^ // | ---------------------------------------------------------------------- // | ```typescript -// | const first: () => () => () => typeof second +// | const first: () => () => typeof first // | ``` // | // | (verbosity level: 1) @@ -285,7 +301,7 @@ // ^^^^^ // | ---------------------------------------------------------------------- // | ```typescript -// | const first: () => () => () => typeof second +// | const first: () => () => typeof first // | ``` // | // | (verbosity level: 0) @@ -295,7 +311,7 @@ // ^^^^^^^^^^^^^^^ // | ---------------------------------------------------------------------- // | ```typescript -// | function genericFunction(value: number): (value: number) => typeof genericFunction +// | function genericFunction(value: number): (value: T) => typeof genericFunction // | ``` // | // | (verbosity level: 0) @@ -306,10 +322,7 @@ // ^^^^^^^^ // | ---------------------------------------------------------------------- // | ```typescript -// | const callable: () => { -// | (): typeof callable; -// | property: number; -// | } +// | const callable: () => typeof callable // | ``` // | // | (verbosity level: 2) @@ -317,10 +330,7 @@ // ^^^^^^^^ // | ---------------------------------------------------------------------- // | ```typescript -// | const callable: () => { -// | (): typeof callable; -// | property: number; -// | } +// | const callable: () => typeof callable // | ``` // | // | (verbosity level: 1) @@ -328,10 +338,7 @@ // ^^^^^^^^ // | ---------------------------------------------------------------------- // | ```typescript -// | const callable: () => { -// | (): typeof callable; -// | property: number; -// | } +// | const callable: () => typeof callable // | ``` // | // | (verbosity level: 0) @@ -414,17 +421,17 @@ // | nested(inner: T): { // | outer: T; // | inner: T; -// | next: ...; +// | next: typeof scoped; // | }; // | sibling(inner: T): { // | outer: T; // | inner: T; -// | next: ...; +// | next: typeof scoped; // | }; // | }; // | second(value: T): { // | value: T; -// | next: ...; +// | next: typeof scoped; // | }; // | } // | ``` @@ -448,10 +455,21 @@ // | outer: number; // | inner: T; // | next: { -// | first(outer: number): ...; +// | first(outer: T): { +// | nested(inner: T): { +// | outer: T; +// | inner: T; +// | next: typeof scoped; +// | }; +// | sibling(inner: T): { +// | outer: T; +// | inner: T; +// | next: typeof scoped; +// | }; +// | }; // | second(value: T): { // | value: T; -// | next: ...; +// | next: typeof scoped; // | }; // | }; // | }; @@ -459,10 +477,21 @@ // | outer: number; // | inner: T; // | next: { -// | first(outer: number): ...; +// | first(outer: T): { +// | nested(inner: T): { +// | outer: T; +// | inner: T; +// | next: typeof scoped; +// | }; +// | sibling(inner: T): { +// | outer: T; +// | inner: T; +// | next: typeof scoped; +// | }; +// | }; // | second(value: T): { // | value: T; -// | next: ...; +// | next: typeof scoped; // | }; // | }; // | }; @@ -483,17 +512,17 @@ // | nested(inner: T): { // | outer: T; // | inner: T; -// | next: ...; +// | next: typeof scoped; // | }; // | sibling(inner: T): { // | outer: T; // | inner: T; -// | next: ...; +// | next: typeof scoped; // | }; // | }; // | second(value: T): { // | value: T; -// | next: ...; +// | next: typeof scoped; // | }; // | }; // | } @@ -513,17 +542,17 @@ // | nested(inner: T): { // | outer: T; // | inner: T; -// | next: ...; +// | next: typeof scoped; // | }; // | sibling(inner: T): { // | outer: T; // | inner: T; -// | next: ...; +// | next: typeof scoped; // | }; // | }; // | second(value: T): { // | value: T; -// | next: ...; +// | next: typeof scoped; // | }; // | }; // | } @@ -542,15 +571,18 @@ // | nested(inner: T): { // | outer: T; // | inner: T; -// | next: ...; +// | next: typeof scoped; // | }; // | sibling(inner: T): { // | outer: T; // | inner: T; -// | next: ...; +// | next: typeof scoped; // | }; // | }; -// | second(value: string): ...; +// | second(value: T): { +// | value: T; +// | next: typeof scoped; +// | }; // | }; // | } // | ``` @@ -578,28 +610,52 @@ // | outer: number; // | inner: U; // | owner: { -// | make(outer: number): ...; +// | make(outer: T): { +// | nested(inner: U): { +// | outer: T; +// | inner: U; +// | owner: typeof nestedOwner; +// | }; +// | constrained(inner: U): { +// | outer: T; +// | inner: U; +// | owner: typeof nestedOwner; +// | }; +// | copied(inner: U): { +// | outer: T; +// | inner: U; +// | owner: typeof nestedOwner; +// | }; +// | rest(values_0: U): { +// | outer: T; +// | inner: U; +// | owner: typeof nestedOwner; +// | }; +// | }; // | }; // | }; // | constrained(inner: U): { // | outer: number; // | inner: U; // | owner: { -// | make(outer: number): ...; -// | }; -// | }; -// | copied(inner: U): { -// | outer: number; -// | inner: U; -// | owner: typeof nestedOwner; -// | }; -// | rest(values_0: U): { -// | outer: number; -// | inner: U; -// | owner: { -// | make(outer: number): ...; +// | make(outer: T): { +// | nested(inner: U): { +// | outer: T; +// | inner: U; +// | owner: typeof nestedOwner; +// | }; +// | constrained(inner: U): ...; +// | copied(inner: U): { +// | outer: T; +// | inner: U; +// | owner: typeof nestedOwner; +// | }; +// | rest(values_0: U): ...; +// | }; // | }; // | }; +// | copied(inner: U): ...; +// | rest(values_0: U): ...; // | } // | ``` // | @@ -617,12 +673,12 @@ // | nested(inner: U): { // | outer: T; // | inner: U; -// | owner: ...; +// | owner: typeof nestedOwner; // | }; // | constrained(inner: U): { // | outer: T; // | inner: U; -// | owner: ...; +// | owner: typeof nestedOwner; // | }; // | copied(inner: U): { // | outer: T; @@ -632,7 +688,7 @@ // | rest(values_0: U): { // | outer: T; // | inner: U; -// | owner: ...; +// | owner: typeof nestedOwner; // | }; // | }; // | }; @@ -649,28 +705,52 @@ // | outer: string; // | inner: U; // | owner: { -// | make(outer: string): ...; +// | make(outer: T): { +// | nested(inner: U): { +// | outer: T; +// | inner: U; +// | owner: typeof nestedOwner; +// | }; +// | constrained(inner: U): { +// | outer: T; +// | inner: U; +// | owner: typeof nestedOwner; +// | }; +// | copied(inner: U): { +// | outer: T; +// | inner: U; +// | owner: typeof nestedOwner; +// | }; +// | rest(values_0: U): { +// | outer: T; +// | inner: U; +// | owner: typeof nestedOwner; +// | }; +// | }; // | }; // | }; // | constrained(inner: U): { // | outer: string; // | inner: U; // | owner: { -// | make(outer: string): ...; -// | }; -// | }; -// | copied(inner: U): { -// | outer: string; -// | inner: U; -// | owner: typeof nestedOwner; -// | }; -// | rest(values_0: U): { -// | outer: string; -// | inner: U; -// | owner: { -// | make(outer: string): ...; +// | make(outer: T): { +// | nested(inner: U): { +// | outer: T; +// | inner: U; +// | owner: typeof nestedOwner; +// | }; +// | constrained(inner: U): ...; +// | copied(inner: U): { +// | outer: T; +// | inner: U; +// | owner: typeof nestedOwner; +// | }; +// | rest(values_0: U): ...; +// | }; // | }; // | }; +// | copied(inner: U): ...; +// | rest(values_0: U): ...; // | } // | ``` // | @@ -688,12 +768,12 @@ // | nested(inner: U): { // | outer: T; // | inner: U; -// | owner: ...; +// | owner: typeof nestedOwner; // | }; // | constrained(inner: U): { // | outer: T; // | inner: U; -// | owner: ...; +// | owner: typeof nestedOwner; // | }; // | copied(inner: U): { // | outer: T; @@ -703,7 +783,7 @@ // | rest(values_0: U): { // | outer: T; // | inner: U; -// | owner: ...; +// | owner: typeof nestedOwner; // | }; // | }; // | }; @@ -737,12 +817,12 @@ // | nested(inner: U): { // | outer: T; // | inner: U; -// | owner: ...; +// | owner: typeof nestedOwner; // | }; // | constrained(inner: U): { // | outer: T; // | inner: U; -// | owner: ...; +// | owner: typeof nestedOwner; // | }; // | copied(inner: U): { // | outer: T; @@ -752,7 +832,7 @@ // | rest(values_0: U): { // | outer: T; // | inner: U; -// | owner: ...; +// | owner: typeof nestedOwner; // | }; // | }; // | }; @@ -917,7 +997,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\nconst arrow: () => () => typeof arrow\n```\n" + "value": "```typescript\nconst arrow: () => typeof arrow\n```\n" }, "range": { "start": { @@ -947,7 +1027,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\nconst arrow: () => () => typeof arrow\n```\n" + "value": "```typescript\nconst arrow: () => typeof arrow\n```\n" }, "range": { "start": { @@ -977,7 +1057,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\nconst arrow: () => () => typeof arrow\n```\n" + "value": "```typescript\nconst arrow: () => typeof arrow\n```\n" }, "range": { "start": { @@ -1007,7 +1087,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\nconst named: () => () => typeof named\n```\n" + "value": "```typescript\nconst named: () => typeof named\n```\n" }, "range": { "start": { @@ -1037,7 +1117,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\nconst named: () => () => typeof named\n```\n" + "value": "```typescript\nconst named: () => typeof named\n```\n" }, "range": { "start": { @@ -1067,7 +1147,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\nconst named: () => () => typeof named\n```\n" + "value": "```typescript\nconst named: () => typeof named\n```\n" }, "range": { "start": { @@ -1097,7 +1177,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\nfunction recur(): () => typeof recur\n```\n" + "value": "```typescript\nfunction recur(): typeof recur\n```\n" }, "range": { "start": { @@ -1127,7 +1207,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\nfunction recur(): () => typeof recur\n```\n" + "value": "```typescript\nfunction recur(): typeof recur\n```\n" }, "range": { "start": { @@ -1157,7 +1237,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\nfunction recur(): () => typeof recur\n```\n" + "value": "```typescript\nfunction recur(): typeof recur\n```\n" }, "range": { "start": { @@ -1187,7 +1267,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\nconst generic: (value: number) => (value: number) => typeof generic\n```\n" + "value": "```typescript\nconst generic: (value: number) => (value: T) => typeof generic\n```\n" }, "range": { "start": { @@ -1217,7 +1297,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\nconst specialized: (value: string) => (value: string) => typeof generic\n```\n" + "value": "```typescript\nconst specialized: (value: string) => (value: T) => typeof generic\n```\n" }, "range": { "start": { @@ -1247,7 +1327,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\nlet narrowed: () => () => typeof arrow\n```\n" + "value": "```typescript\nlet narrowed: () => typeof arrow\n```\n" }, "range": { "start": { @@ -1277,7 +1357,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\nlet narrowed: () => () => typeof arrow\n```\n" + "value": "```typescript\nlet narrowed: () => typeof arrow\n```\n" }, "range": { "start": { @@ -1307,7 +1387,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\nlet narrowed: () => () => typeof arrow\n```\n" + "value": "```typescript\nlet narrowed: () => typeof arrow\n```\n" }, "range": { "start": { @@ -1533,6 +1613,66 @@ "verbosityLevel": 0 } }, + { + "marker": { + "Position": 632, + "LSPosition": { + "line": 20, + "character": 10 + }, + "Name": "numberCall", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nfunction overloaded(value: number): typeof overloaded\n```\n" + }, + "range": { + "start": { + "line": 20, + "character": 0 + }, + "end": { + "line": 20, + "character": 10 + } + } + }, + "verbosityLevel": 1 + } + }, + { + "marker": { + "Position": 632, + "LSPosition": { + "line": 20, + "character": 10 + }, + "Name": "numberCall", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nfunction overloaded(value: number): typeof overloaded\n```\n" + }, + "range": { + "start": { + "line": 20, + "character": 0 + }, + "end": { + "line": 20, + "character": 10 + } + } + }, + "verbosityLevel": 2 + } + }, { "marker": { "Position": 702, @@ -1547,7 +1687,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\n(method) recur(): () => ...\n```\n" + "value": "```typescript\n(method) recur(): (typeof object)[\"recur\"]\n```\n" }, "range": { "start": { @@ -1577,7 +1717,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\n(method) recur(): () => ...\n```\n" + "value": "```typescript\n(method) recur(): (typeof object)[\"recur\"]\n```\n" }, "range": { "start": { @@ -1607,7 +1747,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\n(method) recur(): () => ...\n```\n" + "value": "```typescript\n(method) recur(): (typeof object)[\"recur\"]\n```\n" }, "range": { "start": { @@ -1727,7 +1867,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\nconst first: () => () => () => typeof second\n```\n" + "value": "```typescript\nconst first: () => () => typeof first\n```\n" }, "range": { "start": { @@ -1757,7 +1897,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\nconst first: () => () => () => typeof second\n```\n" + "value": "```typescript\nconst first: () => () => typeof first\n```\n" }, "range": { "start": { @@ -1787,7 +1927,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\nconst first: () => () => () => typeof second\n```\n" + "value": "```typescript\nconst first: () => () => typeof first\n```\n" }, "range": { "start": { @@ -1817,7 +1957,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\nfunction genericFunction(value: number): (value: number) => typeof genericFunction\n```\n" + "value": "```typescript\nfunction genericFunction(value: number): (value: T) => typeof genericFunction\n```\n" }, "range": { "start": { @@ -1847,7 +1987,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\nconst callable: () => {\n (): typeof callable;\n property: number;\n}\n```\n" + "value": "```typescript\nconst callable: () => typeof callable\n```\n" }, "range": { "start": { @@ -1877,7 +2017,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\nconst callable: () => {\n (): typeof callable;\n property: number;\n}\n```\n" + "value": "```typescript\nconst callable: () => typeof callable\n```\n" }, "range": { "start": { @@ -1907,7 +2047,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\nconst callable: () => {\n (): typeof callable;\n property: number;\n}\n```\n" + "value": "```typescript\nconst callable: () => typeof callable\n```\n" }, "range": { "start": { @@ -2147,7 +2287,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\nconst scoped: {\n first(outer: T): {\n nested(inner: T): {\n outer: T;\n inner: T;\n next: ...;\n };\n sibling(inner: T): {\n outer: T;\n inner: T;\n next: ...;\n };\n };\n second(value: T): {\n value: T;\n next: ...;\n };\n}\n```\n" + "value": "```typescript\nconst scoped: {\n first(outer: T): {\n nested(inner: T): {\n outer: T;\n inner: T;\n next: typeof scoped;\n };\n sibling(inner: T): {\n outer: T;\n inner: T;\n next: typeof scoped;\n };\n };\n second(value: T): {\n value: T;\n next: typeof scoped;\n };\n}\n```\n" }, "range": { "start": { @@ -2177,7 +2317,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\n(method) first(outer: number): {\n nested(inner: T): {\n outer: number;\n inner: T;\n next: {\n first(outer: number): ...;\n second(value: T): {\n value: T;\n next: ...;\n };\n };\n };\n sibling(inner: T): {\n outer: number;\n inner: T;\n next: {\n first(outer: number): ...;\n second(value: T): {\n value: T;\n next: ...;\n };\n };\n };\n}\n```\n" + "value": "```typescript\n(method) first(outer: number): {\n nested(inner: T): {\n outer: number;\n inner: T;\n next: {\n first(outer: T): {\n nested(inner: T): {\n outer: T;\n inner: T;\n next: typeof scoped;\n };\n sibling(inner: T): {\n outer: T;\n inner: T;\n next: typeof scoped;\n };\n };\n second(value: T): {\n value: T;\n next: typeof scoped;\n };\n };\n };\n sibling(inner: T): {\n outer: number;\n inner: T;\n next: {\n first(outer: T): {\n nested(inner: T): {\n outer: T;\n inner: T;\n next: typeof scoped;\n };\n sibling(inner: T): {\n outer: T;\n inner: T;\n next: typeof scoped;\n };\n };\n second(value: T): {\n value: T;\n next: typeof scoped;\n };\n };\n };\n}\n```\n" }, "range": { "start": { @@ -2207,7 +2347,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\n(method) nested(inner: string): {\n outer: number;\n inner: string;\n next: {\n first(outer: T): {\n nested(inner: T): {\n outer: T;\n inner: T;\n next: ...;\n };\n sibling(inner: T): {\n outer: T;\n inner: T;\n next: ...;\n };\n };\n second(value: T): {\n value: T;\n next: ...;\n };\n };\n}\n```\n" + "value": "```typescript\n(method) nested(inner: string): {\n outer: number;\n inner: string;\n next: {\n first(outer: T): {\n nested(inner: T): {\n outer: T;\n inner: T;\n next: typeof scoped;\n };\n sibling(inner: T): {\n outer: T;\n inner: T;\n next: typeof scoped;\n };\n };\n second(value: T): {\n value: T;\n next: typeof scoped;\n };\n };\n}\n```\n" }, "range": { "start": { @@ -2237,7 +2377,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\n(method) sibling(inner: boolean): {\n outer: number;\n inner: boolean;\n next: {\n first(outer: T): {\n nested(inner: T): {\n outer: T;\n inner: T;\n next: ...;\n };\n sibling(inner: T): {\n outer: T;\n inner: T;\n next: ...;\n };\n };\n second(value: T): {\n value: T;\n next: ...;\n };\n };\n}\n```\n" + "value": "```typescript\n(method) sibling(inner: boolean): {\n outer: number;\n inner: boolean;\n next: {\n first(outer: T): {\n nested(inner: T): {\n outer: T;\n inner: T;\n next: typeof scoped;\n };\n sibling(inner: T): {\n outer: T;\n inner: T;\n next: typeof scoped;\n };\n };\n second(value: T): {\n value: T;\n next: typeof scoped;\n };\n };\n}\n```\n" }, "range": { "start": { @@ -2267,7 +2407,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\n(method) second(value: string): {\n value: string;\n next: {\n first(outer: T): {\n nested(inner: T): {\n outer: T;\n inner: T;\n next: ...;\n };\n sibling(inner: T): {\n outer: T;\n inner: T;\n next: ...;\n };\n };\n second(value: string): ...;\n };\n}\n```\n" + "value": "```typescript\n(method) second(value: string): {\n value: string;\n next: {\n first(outer: T): {\n nested(inner: T): {\n outer: T;\n inner: T;\n next: typeof scoped;\n };\n sibling(inner: T): {\n outer: T;\n inner: T;\n next: typeof scoped;\n };\n };\n second(value: T): {\n value: T;\n next: typeof scoped;\n };\n };\n}\n```\n" }, "range": { "start": { @@ -2297,7 +2437,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\nconst nestedNumber: {\n nested(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: number): ...;\n };\n };\n constrained(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: number): ...;\n };\n };\n copied(inner: U): {\n outer: number;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: number): ...;\n };\n };\n}\n```\n" + "value": "```typescript\nconst nestedNumber: {\n nested(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n constrained(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): ...;\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): ...;\n };\n };\n };\n copied(inner: U): ...;\n rest(values_0: U): ...;\n}\n```\n" }, "range": { "start": { @@ -2327,7 +2467,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\n(method) nested(inner: boolean): {\n outer: number;\n inner: boolean;\n owner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: ...;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: ...;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: ...;\n };\n };\n };\n}\n```\n" + "value": "```typescript\n(method) nested(inner: boolean): {\n outer: number;\n inner: boolean;\n owner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n };\n}\n```\n" }, "range": { "start": { @@ -2357,7 +2497,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\n(method) make(outer: string): {\n nested(inner: U): {\n outer: string;\n inner: U;\n owner: {\n make(outer: string): ...;\n };\n };\n constrained(inner: U): {\n outer: string;\n inner: U;\n owner: {\n make(outer: string): ...;\n };\n };\n copied(inner: U): {\n outer: string;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: string;\n inner: U;\n owner: {\n make(outer: string): ...;\n };\n };\n}\n```\n" + "value": "```typescript\n(method) make(outer: string): {\n nested(inner: U): {\n outer: string;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n constrained(inner: U): {\n outer: string;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): ...;\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): ...;\n };\n };\n };\n copied(inner: U): ...;\n rest(values_0: U): ...;\n}\n```\n" }, "range": { "start": { @@ -2387,7 +2527,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\n(method) constrained<2>(inner: 2): {\n outer: number;\n inner: 2;\n owner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: ...;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: ...;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: ...;\n };\n };\n };\n}\n```\n" + "value": "```typescript\n(method) constrained<2>(inner: 2): {\n outer: number;\n inner: 2;\n owner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n };\n}\n```\n" }, "range": { "start": { @@ -2447,7 +2587,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\n(method) rest(values_0: boolean): {\n outer: number;\n inner: boolean;\n owner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: ...;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: ...;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: ...;\n };\n };\n };\n}\n```\n" + "value": "```typescript\n(method) rest(values_0: boolean): {\n outer: number;\n inner: boolean;\n owner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n };\n}\n```\n" }, "range": { "start": { diff --git a/tsc/testdata/baselines/reference/tsbuild/declarationEmit/reports-dts-generation-errors-with-incremental.js b/tsc/testdata/baselines/reference/tsbuild/declarationEmit/reports-dts-generation-errors-with-incremental.js index 5283d371724e7..de6c5f0c6b774 100644 --- a/tsc/testdata/baselines/reference/tsbuild/declarationEmit/reports-dts-generation-errors-with-incremental.js +++ b/tsc/testdata/baselines/reference/tsbuild/declarationEmit/reports-dts-generation-errors-with-incremental.js @@ -53,11 +53,6 @@ Output:: 2 export const api = ky.extend({});    ~~~ -index.ts:2:14 - error TS5088: The inferred type of 'api' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -2 export const api = ky.extend({}); -   ~~~ - TSFILE: /home/src/workspaces/project/index.js TSFILE: /home/src/workspaces/project/tsconfig.tsbuildinfo ../../tslibs/TS/Lib/lib.es2026.full.d.ts @@ -69,7 +64,7 @@ index.ts Matched by default include pattern '**/*' File is ECMAScript module because 'package.json' has field "type" with value "module" -Found 2 errors in the same file, starting at: index.ts:2 +Found 1 error in index.ts:2 //// [/home/src/tslibs/TS/Lib/lib.es2026.full.d.ts] *Lib* /// @@ -99,7 +94,7 @@ import ky from 'ky'; export const api = ky.extend({}); //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[3],"packageJsons":["./node_modules/ky/package.json","./package.json"],"missingPackageJsons":["./node_modules/ky/distribution/package.json"],"fileNames":["lib.es2026.full.d.ts","./node_modules/ky/distribution/index.d.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"778e62a60976d425122b5f7908b0c56f-declare class KyInstance {\n private brand;\n extend(options: Record): KyInstance;\n}\ndeclare const ky: KyInstance;\nexport default ky;","impliedNodeFormat":99},{"version":"0f5091e963c17913313e4969c59e6eb4-import ky from 'ky';\nexport const api = ky.extend({});","impliedNodeFormat":99}],"fileIdsList":[[2]],"options":{"composite":false,"declaration":true,"module":199,"skipLibCheck":true,"skipDefaultLibCheck":true},"referencedMap":[[3,1]],"emitDiagnosticsPerFile":[[3,[{"pos":34,"end":37,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["brand"],"relatedInformation":[{"pos":34,"end":37,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["api"]}]},{"pos":34,"end":37,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["api"]}]]]} +{"version":"FakeTSVersion","root":[3],"packageJsons":["./node_modules/ky/package.json","./package.json"],"missingPackageJsons":["./node_modules/ky/distribution/package.json"],"fileNames":["lib.es2026.full.d.ts","./node_modules/ky/distribution/index.d.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"778e62a60976d425122b5f7908b0c56f-declare class KyInstance {\n private brand;\n extend(options: Record): KyInstance;\n}\ndeclare const ky: KyInstance;\nexport default ky;","impliedNodeFormat":99},{"version":"0f5091e963c17913313e4969c59e6eb4-import ky from 'ky';\nexport const api = ky.extend({});","impliedNodeFormat":99}],"fileIdsList":[[2]],"options":{"composite":false,"declaration":true,"module":199,"skipLibCheck":true,"skipDefaultLibCheck":true},"referencedMap":[[3,1]],"emitDiagnosticsPerFile":[[3,[{"pos":34,"end":37,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["brand"],"relatedInformation":[{"pos":34,"end":37,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["api"]}]}]]]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -199,21 +194,11 @@ export const api = ky.extend({}); ] } ] - }, - { - "pos": 34, - "end": 37, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "api" - ] } ] ] ], - "size": 2097 + "size": 1909 } tsconfig.json:: @@ -245,11 +230,6 @@ Output:: 2 export const api = ky.extend({});    ~~~ -index.ts:2:14 - error TS5088: The inferred type of 'api' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -2 export const api = ky.extend({}); -   ~~~ - ../../tslibs/TS/Lib/lib.es2026.full.d.ts Default library for target 'ES2026' node_modules/ky/distribution/index.d.ts @@ -259,7 +239,7 @@ index.ts Matched by default include pattern '**/*' File is ECMAScript module because 'package.json' has field "type" with value "module" -Found 2 errors in the same file, starting at: index.ts:2 +Found 1 error in index.ts:2 tsconfig.json:: diff --git a/tsc/testdata/baselines/reference/tsbuild/declarationEmit/reports-dts-generation-errors.js b/tsc/testdata/baselines/reference/tsbuild/declarationEmit/reports-dts-generation-errors.js index e943e6b176bd5..e319e4eaab00f 100644 --- a/tsc/testdata/baselines/reference/tsbuild/declarationEmit/reports-dts-generation-errors.js +++ b/tsc/testdata/baselines/reference/tsbuild/declarationEmit/reports-dts-generation-errors.js @@ -53,11 +53,6 @@ Output:: 2 export const api = ky.extend({});    ~~~ -index.ts:2:14 - error TS5088: The inferred type of 'api' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -2 export const api = ky.extend({}); -   ~~~ - TSFILE: /home/src/workspaces/project/index.js TSFILE: /home/src/workspaces/project/tsconfig.tsbuildinfo ../../tslibs/TS/Lib/lib.es2026.full.d.ts @@ -71,7 +66,7 @@ index.ts [HH:MM:SS AM] Updating unchanged output timestamps of project 'tsconfig.json'... -Found 2 errors in the same file, starting at: index.ts:2 +Found 1 error in index.ts:2 //// [/home/src/tslibs/TS/Lib/lib.es2026.full.d.ts] *Lib* /// @@ -153,11 +148,6 @@ Output:: 2 export const api = ky.extend({});    ~~~ -index.ts:2:14 - error TS5088: The inferred type of 'api' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -2 export const api = ky.extend({}); -   ~~~ - TSFILE: /home/src/workspaces/project/index.js TSFILE: /home/src/workspaces/project/tsconfig.tsbuildinfo ../../tslibs/TS/Lib/lib.es2026.full.d.ts @@ -171,7 +161,7 @@ index.ts [HH:MM:SS AM] Updating unchanged output timestamps of project 'tsconfig.json'... -Found 2 errors in the same file, starting at: index.ts:2 +Found 1 error in index.ts:2 //// [/home/src/workspaces/project/index.js] *rewrite with same content* //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *rewrite with same content* diff --git a/tsc/testdata/baselines/reference/tsbuild/incremental/recursive-function-declaration-consumption.js b/tsc/testdata/baselines/reference/tsbuild/incremental/recursive-function-declaration-consumption.js index a464ceb9a2b80..c5570226917f7 100644 --- a/tsc/testdata/baselines/reference/tsbuild/incremental/recursive-function-declaration-consumption.js +++ b/tsc/testdata/baselines/reference/tsbuild/incremental/recursive-function-declaration-consumption.js @@ -168,192 +168,98 @@ export const nestedNumber = nestedOwner.make(1); tsgo --build consumer ExitStatus:: DiagnosticsPresent_OutputsGenerated Output:: -producer/index.ts:1:14 - error TS5088: The inferred type of 'arrow' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:58:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. -1 export const arrow = () => arrow; -   ~~~~~ +58 const invalid: number = arrow()()(); +   ~~~~~~~ -producer/index.ts:2:14 - error TS5088: The inferred type of 'expression' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:59:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. -2 export const expression = function self() { return self; }; -   ~~~~~~~~~~ +59 const invalidExpression: number = expression()()(); +   ~~~~~~~~~~~~~~~~~ -producer/index.ts:6:14 - error TS5088: The inferred type of 'objectReturn' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:60:7 - error TS2322: Type '() => { call: ...; }' is not assignable to type 'number'. -6 export const objectReturn = () => ({ call: objectReturn }); -   ~~~~~~~~~~~~ +60 const invalidObject: number = objectReturn().call; +   ~~~~~~~~~~~~~ -producer/index.ts:7:14 - error TS5088: The inferred type of 'tupleReturn' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:61:7 - error TS2322: Type '() => readonly [...]' is not assignable to type 'number'. -7 export const tupleReturn = () => [tupleReturn] as const; -   ~~~~~~~~~~~ +61 const invalidTuple: number = tupleReturn()[0]; +   ~~~~~~~~~~~~ -producer/index.ts:9:14 - error TS5088: The inferred type of 'object' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:62:7 - error TS2322: Type '(shadowed: number) => ...' is not assignable to type 'number'. -9 export const object = { value: 1, next: () => object }; -   ~~~~~~ +62 const invalidShadowed: number = shadowed(1); +   ~~~~~~~~~~~~~~~ -producer/index.ts:10:14 - error TS5088: The inferred type of 'method' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:63:7 - error TS2322: Type 'number' is not assignable to type 'string'. -10 export const method = { value: 1, next() { return method; } }; -   ~~~~~~ +63 const invalidObjectValue: string = object.next().value; +   ~~~~~~~~~~~~~~~~~~ -producer/index.ts:11:14 - error TS5088: The inferred type of 'accessor' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:64:7 - error TS2322: Type 'readonly [() => ...]' is not assignable to type 'number'. -11 export const accessor = { value: 1, get next() { return accessor; } }; -   ~~~~~~~~ +64 const invalidTupleValue: number = tuple[0](); +   ~~~~~~~~~~~~~~~~~ -producer/index.ts:12:14 - error TS5088: The inferred type of 'tuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:65:7 - error TS2322: Type 'string' is not assignable to type 'number'. -12 export const tuple = [() => tuple] as const; -   ~~~~~ +65 const invalidSpecialized: number = specialized.next().value; +   ~~~~~~~~~~~~~~~~~~ -producer/index.ts:13:14 - error TS5088: The inferred type of 'array' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:66:7 - error TS2322: Type '{ next: ...; }' is not assignable to type 'number'. -13 export const array = [() => array]; -   ~~~~~ +66 const invalidMapped: number = mapped.next; +   ~~~~~~~~~~~~~ -producer/index.ts:14:14 - error TS5088: The inferred type of 'nested' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:67:7 - error TS2322: Type 'string' is not assignable to type 'number'. -14 export const nested = { inner: { next() { return nested.inner; } } }; -   ~~~~~~ +67 const invalidAnnotation: number = viaAnnotation.next().value; +   ~~~~~~~~~~~~~~~~~ -producer/index.ts:15:14 - error TS5088: The inferred type of 'memberTuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:68:7 - error TS2322: Type 'string' is not assignable to type 'number'. -15 export const memberTuple = [function self() { return self; }] as const; -   ~~~~~~~~~~~ +68 const invalidLink: number = nextLink.next.value; +   ~~~~~~~~~~~ -producer/index.ts:16:14 - error TS5088: The inferred type of 'memberArray' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:69:7 - error TS2322: Type 'number' is not assignable to type 'string'. -16 export const memberArray = [function self() { return self; }]; -   ~~~~~~~~~~~ +69 const invalidCallable: string = nextCallable(1).link.value; +   ~~~~~~~~~~~~~~~ -producer/index.ts:17:14 - error TS5088: The inferred type of 'quoted' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:70:7 - error TS2322: Type 'string' is not assignable to type 'number'. -17 export const quoted = { "a-b": function self() { return self; } }; -   ~~~~~~ +70 const invalidHiddenValue: number = hiddenAlias.next.next.value; +   ~~~~~~~~~~~~~~~~~~ -producer/index.ts:18:14 - error TS5088: The inferred type of 'numeric' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:71:7 - error TS2322: Type '() => (typeof Methods)["recur"]' is not assignable to type 'number'. -18 export const numeric = { 0: function self() { return self; } }; -   ~~~~~~~ +71 const invalidMethod: number = Methods.recur()(); +   ~~~~~~~~~~~~~ -producer/index.ts:20:14 - error TS5088: The inferred type of 'computed' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:72:7 - error TS2322: Type '() => (typeof Methods)[typeof key]' is not assignable to type 'number'. -20 export const computed = { [key]: function self() { return self; } }; -   ~~~~~~~~ +72 const invalidComputedMethod: number = Methods[key]()(); +   ~~~~~~~~~~~~~~~~~~~~~ -producer/index.ts:21:14 - error TS5088: The inferred type of 'union' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:73:7 - error TS2322: Type 'string' is not assignable to type 'boolean'. -21 export const union = true as boolean ? { next: () => union } : undefined; -   ~~~~~ +73 const invalidNestedOuter: boolean = nestedString.outer; +   ~~~~~~~~~~~~~~~~~~ -producer/index.ts:26:14 - error TS5088: The inferred type of 'specialized' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:74:7 - error TS2322: Type 'number' is not assignable to type 'string'. -26 export const specialized = create("text"); -   ~~~~~~~~~~~ +74 const invalidNestedInner: string = nestedString.inner; +   ~~~~~~~~~~~~~~~~~~ -producer/index.ts:31:14 - error TS5088: The inferred type of 'indexed' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:75:26 - error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. -31 export const indexed = createIndexed(); -   ~~~~~~~ +75 nestedNumber.constrained("wrong"); +   ~~~~~~~ -producer/index.ts:36:14 - error TS5088: The inferred type of 'mapped' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -36 export const mapped = createMapped<{ next: unknown }>(); -   ~~~~~~ - -producer/index.ts:41:14 - error TS5088: The inferred type of 'viaAnnotation' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -41 export const viaAnnotation = createAnnotated("text"); -   ~~~~~~~~~~~~~ - -producer/index.ts:52:14 - error TS4025: Exported variable 'hiddenAlias' has or is using private name 'Hidden'. - -52 export const hiddenAlias = createHidden("text"); -   ~~~~~~~~~~~ - -producer/index.ts:53:14 - error TS4025: Exported variable 'siblingHiddenAliases' has or is using private name 'Hidden'. - -53 export const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias }; -   ~~~~~~~~~~~~~~~~~~~~ - -producer/index.ts:54:14 - error TS5088: The inferred type of 'parenthesized' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -54 export const parenthesized = (function self() { return self; }); -   ~~~~~~~~~~~~~ - -producer/index.ts:55:14 - error TS5088: The inferred type of 'asserted' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -55 export const asserted = (function self() { return self; }) satisfies () => unknown; -   ~~~~~~~~ - -producer/index.ts:58:12 - error TS5088: The inferred type of '"a-b"' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -58 static "a-b"() { return Methods["a-b"]; } -   ~~~~~ - -producer/index.ts:59:12 - error TS5088: The inferred type of '[key]' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -59 static [key]() { return Methods[key]; } -   ~~~~~ - -producer/index.ts:60:5 - error TS5088: The inferred type of 'recur' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -60 recur() { return this.recur; } -   ~~~~~ - -producer/index.ts:65:14 - error TS5088: The inferred type of 'nestedOwner' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -65 export const nestedOwner = { -   ~~~~~~~~~~~ - -producer/index.ts:77:14 - error TS5088: The inferred type of 'nestedNumber' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -77 export const nestedNumber = nestedOwner.make(1); -   ~~~~~~~~~~~~ - -consumer/index.ts:1:88 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -1 import { arrow, expression, first, generic, objectReturn, tupleReturn, shadowed } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:2:64 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -2 import { object, method, accessor, tuple, array, nested } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:3:94 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -3 import { memberTuple, memberArray, quoted, numeric, key, computed, union, specialized } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:4:48 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -4 import { indexed, mapped, viaAnnotation } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:5:86 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -5 import { nextLink, nextCallable, parenthesized, asserted, Methods, overloaded } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:6:51 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -6 import { hiddenAlias, siblingHiddenAliases } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:7:30 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -7 import { nestedNumber } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - -Found 36 errors in 2 files. - -Errors Files - 7 consumer/index.ts:1 - 29 producer/index.ts:1 +Found 18 errors in the same file, starting at: consumer/index.ts:58 //// [/home/src/tslibs/TS/Lib/lib.es2026.full.d.ts] *Lib* /// @@ -394,6 +300,219 @@ declare const console: { log(msg: any): void; }; "size": 71, "semanticErrors": true } +//// [/home/src/workspaces/project/producer/dist/index.d.ts] *new* +export declare const arrow: () => typeof arrow; +export declare const expression: () => typeof expression; +export declare const first: () => typeof second; +export declare const second: () => typeof first; +export declare const generic: (value: T) => typeof generic; +export declare const objectReturn: () => { + call: typeof objectReturn; +}; +export declare const tupleReturn: () => readonly [typeof tupleReturn]; +export declare const shadowed: (shadowed: number) => typeof import(".").shadowed; +export declare const object: { + value: number; + next: () => typeof object; +}; +export declare const method: { + value: number; + next(): typeof method; +}; +export declare const accessor: { + value: number; + readonly next: typeof accessor; +}; +export declare const tuple: readonly [() => typeof tuple]; +export declare const array: (() => typeof array)[]; +export declare const nested: { + inner: { + next(): { + next(): (typeof nested)["inner"]; + }; + }; +}; +export declare const memberTuple: readonly [() => (typeof memberTuple)[0]]; +export declare const memberArray: (() => (typeof memberArray)[0])[]; +export declare const quoted: { + "a-b": () => (typeof quoted)["a-b"]; +}; +export declare const numeric: { + 0: () => (typeof numeric)[0]; +}; +export declare const key: unique symbol; +export declare const computed: { + [key]: () => (typeof computed)[typeof key]; +}; +export declare const union: { + next: () => typeof union; +} | undefined; +export declare const specialized: { + value: string; + next: () => typeof specialized; +}; +export declare const indexed: { + [key: string]: typeof indexed; +}; +export declare const mapped: { + next: typeof mapped; +}; +export declare const viaAnnotation: { + value: string; + next: () => typeof viaAnnotation; +}; +export type Link = { + value: T; + next: Link; +}; +export type Callable = { + (value: T): Callable; + link: Link; +}; +export declare const link: Link; +export declare const callable: Callable; +export declare const nextLink: Link; +export declare const nextCallable: Callable; +export declare const hiddenAlias: { + value: string; + next: typeof hiddenAlias; +}; +export declare const siblingHiddenAliases: { + first: { + value: string; + next: (typeof siblingHiddenAliases)["first"]; + }; + second: { + value: string; + next: (typeof siblingHiddenAliases)["second"]; + }; +}; +export declare const parenthesized: () => typeof parenthesized; +export declare const asserted: () => typeof asserted; +export declare class Methods { + static recur(): (typeof Methods)["recur"]; + static "a-b"(): (typeof Methods)["a-b"]; + static [key](): (typeof Methods)[typeof key]; + recur(): Methods["recur"]; +} +export declare function overloaded(value: string): typeof overloaded; +export declare function overloaded(value: number): typeof overloaded; +export declare const nestedOwner: { + make(outer: T): { + nested(inner: U): { + outer: T; + inner: U; + owner: typeof nestedOwner; + }; + constrained(inner: U): { + outer: T; + inner: U; + owner: typeof nestedOwner; + }; + copied(inner: U): { + outer: T; + inner: U; + owner: typeof nestedOwner; + }; + rest(values_0: U): { + outer: T; + inner: U; + owner: typeof nestedOwner; + }; + }; +}; +export declare const nestedNumber: { + nested(inner: U): { + outer: number; + inner: U; + owner: { + make(outer: T): { + nested(inner: U_1): { + outer: T; + inner: U_1; + owner: typeof nestedOwner; + }; + constrained(inner: U_1): { + outer: T; + inner: U_1; + owner: typeof nestedOwner; + }; + copied(inner: U_1): { + outer: T; + inner: U_1; + owner: typeof nestedOwner; + }; + rest(values_0: U_1): { + outer: T; + inner: U_1; + owner: typeof nestedOwner; + }; + }; + }; + }; + constrained(inner: U): { + outer: number; + inner: U; + owner: { + make(outer: T): { + nested(inner: U_1): { + outer: T; + inner: U_1; + owner: typeof nestedOwner; + }; + constrained(inner: U_1): { + outer: T; + inner: U_1; + owner: typeof nestedOwner; + }; + copied(inner: U_1): { + outer: T; + inner: U_1; + owner: typeof nestedOwner; + }; + rest(values_0: U_1): { + outer: T; + inner: U_1; + owner: typeof nestedOwner; + }; + }; + }; + }; + copied(inner: U): { + outer: number; + inner: U; + owner: typeof nestedOwner; + }; + rest(values_0: U): { + outer: number; + inner: U; + owner: { + make(outer: T): { + nested(inner: U_1): { + outer: T; + inner: U_1; + owner: typeof nestedOwner; + }; + constrained(inner: U_1): { + outer: T; + inner: U_1; + owner: typeof nestedOwner; + }; + copied(inner: U_1): { + outer: T; + inner: U_1; + owner: typeof nestedOwner; + }; + rest(values_0: U_1): { + outer: T; + inner: U_1; + owner: typeof nestedOwner; + }; + }; + }; + }; +}; + //// [/home/src/workspaces/project/producer/dist/index.js] *new* export const arrow = () => arrow; export const expression = function self() { return self; }; @@ -467,7 +586,7 @@ export const nestedOwner = { export const nestedNumber = nestedOwner.make(1); //// [/home/src/workspaces/project/producer/dist/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2026.full.d.ts","../index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"c50047250d0afa431800786fe8ac0f71-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);"],"options":{"composite":true,"outDir":"./","strict":true},"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":18,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["arrow"]},{"pos":47,"end":57,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["expression"]},{"pos":226,"end":238,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["objectReturn"]},{"pos":286,"end":297,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["tupleReturn"]},{"pos":417,"end":423,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["object"]},{"pos":473,"end":479,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["method"]},{"pos":536,"end":544,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["accessor"]},{"pos":607,"end":612,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["tuple"]},{"pos":652,"end":657,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["array"]},{"pos":688,"end":694,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nested"]},{"pos":758,"end":769,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["memberTuple"]},{"pos":830,"end":841,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["memberArray"]},{"pos":893,"end":899,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["quoted"]},{"pos":960,"end":967,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["numeric"]},{"pos":1053,"end":1061,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["computed"]},{"pos":1122,"end":1127,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["union"]},{"pos":1298,"end":1309,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["specialized"]},{"pos":1443,"end":1450,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["indexed"]},{"pos":1591,"end":1597,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["mapped"]},{"pos":1792,"end":1805,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["viaAnnotation"]},{"pos":2246,"end":2257,"code":4025,"category":1,"messageKey":"Exported_variable_0_has_or_is_using_private_name_1_4025","messageArgs":["hiddenAlias","Hidden",""]},{"pos":2295,"end":2315,"code":4025,"category":1,"messageKey":"Exported_variable_0_has_or_is_using_private_name_1_4025","messageArgs":["siblingHiddenAliases","Hidden",""]},{"pos":2376,"end":2389,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["parenthesized"]},{"pos":2441,"end":2449,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["asserted"]},{"pos":2591,"end":2596,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["\"a-b\""]},{"pos":2637,"end":2642,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["[key]"]},{"pos":2674,"end":2679,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["recur"]},{"pos":2918,"end":2929,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nestedOwner"]},{"pos":3450,"end":3462,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nestedNumber"]}]]],"emitSignatures":[2]} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2026.full.d.ts","../index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"c50047250d0afa431800786fe8ac0f71-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);","signature":"ac680f9630fda193ccd7e95d350590d1-export declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: () => {\n call: typeof objectReturn;\n};\nexport declare const tupleReturn: () => readonly [typeof tupleReturn];\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: {\n value: number;\n next: () => typeof object;\n};\nexport declare const method: {\n value: number;\n next(): typeof method;\n};\nexport declare const accessor: {\n value: number;\n readonly next: typeof accessor;\n};\nexport declare const tuple: readonly [() => typeof tuple];\nexport declare const array: (() => typeof array)[];\nexport declare const nested: {\n inner: {\n next(): {\n next(): (typeof nested)[\"inner\"];\n };\n };\n};\nexport declare const memberTuple: readonly [() => (typeof memberTuple)[0]];\nexport declare const memberArray: (() => (typeof memberArray)[0])[];\nexport declare const quoted: {\n \"a-b\": () => (typeof quoted)[\"a-b\"];\n};\nexport declare const numeric: {\n 0: () => (typeof numeric)[0];\n};\nexport declare const key: unique symbol;\nexport declare const computed: {\n [key]: () => (typeof computed)[typeof key];\n};\nexport declare const union: {\n next: () => typeof union;\n} | undefined;\nexport declare const specialized: {\n value: string;\n next: () => typeof specialized;\n};\nexport declare const indexed: {\n [key: string]: typeof indexed;\n};\nexport declare const mapped: {\n next: typeof mapped;\n};\nexport declare const viaAnnotation: {\n value: string;\n next: () => typeof viaAnnotation;\n};\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: typeof hiddenAlias;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"first\"];\n };\n second: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"second\"];\n };\n};\nexport declare const parenthesized: () => typeof parenthesized;\nexport declare const asserted: () => typeof asserted;\nexport declare class Methods {\n static recur(): (typeof Methods)[\"recur\"];\n static \"a-b\"(): (typeof Methods)[\"a-b\"];\n static [key](): (typeof Methods)[typeof key];\n recur(): Methods[\"recur\"];\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n};\nexport declare const nestedNumber: {\n nested(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n constrained(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n copied(inner: U): {\n outer: number;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n};\n","impliedNodeFormat":1}],"options":{"composite":true,"outDir":"./","strict":true},"latestChangedDtsFile":"./index.d.ts"} //// [/home/src/workspaces/project/producer/dist/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -499,8 +618,13 @@ export const nestedNumber = nestedOwner.make(1); { "fileName": "../index.ts", "version": "c50047250d0afa431800786fe8ac0f71-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);", - "signature": "c50047250d0afa431800786fe8ac0f71-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);", - "impliedNodeFormat": "CommonJS" + "signature": "ac680f9630fda193ccd7e95d350590d1-export declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: () => {\n call: typeof objectReturn;\n};\nexport declare const tupleReturn: () => readonly [typeof tupleReturn];\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: {\n value: number;\n next: () => typeof object;\n};\nexport declare const method: {\n value: number;\n next(): typeof method;\n};\nexport declare const accessor: {\n value: number;\n readonly next: typeof accessor;\n};\nexport declare const tuple: readonly [() => typeof tuple];\nexport declare const array: (() => typeof array)[];\nexport declare const nested: {\n inner: {\n next(): {\n next(): (typeof nested)[\"inner\"];\n };\n };\n};\nexport declare const memberTuple: readonly [() => (typeof memberTuple)[0]];\nexport declare const memberArray: (() => (typeof memberArray)[0])[];\nexport declare const quoted: {\n \"a-b\": () => (typeof quoted)[\"a-b\"];\n};\nexport declare const numeric: {\n 0: () => (typeof numeric)[0];\n};\nexport declare const key: unique symbol;\nexport declare const computed: {\n [key]: () => (typeof computed)[typeof key];\n};\nexport declare const union: {\n next: () => typeof union;\n} | undefined;\nexport declare const specialized: {\n value: string;\n next: () => typeof specialized;\n};\nexport declare const indexed: {\n [key: string]: typeof indexed;\n};\nexport declare const mapped: {\n next: typeof mapped;\n};\nexport declare const viaAnnotation: {\n value: string;\n next: () => typeof viaAnnotation;\n};\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: typeof hiddenAlias;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"first\"];\n };\n second: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"second\"];\n };\n};\nexport declare const parenthesized: () => typeof parenthesized;\nexport declare const asserted: () => typeof asserted;\nexport declare class Methods {\n static recur(): (typeof Methods)[\"recur\"];\n static \"a-b\"(): (typeof Methods)[\"a-b\"];\n static [key](): (typeof Methods)[typeof key];\n recur(): Methods[\"recur\"];\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n};\nexport declare const nestedNumber: {\n nested(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n constrained(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n copied(inner: U): {\n outer: number;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n};\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "c50047250d0afa431800786fe8ac0f71-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);", + "signature": "ac680f9630fda193ccd7e95d350590d1-export declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: () => {\n call: typeof objectReturn;\n};\nexport declare const tupleReturn: () => readonly [typeof tupleReturn];\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: {\n value: number;\n next: () => typeof object;\n};\nexport declare const method: {\n value: number;\n next(): typeof method;\n};\nexport declare const accessor: {\n value: number;\n readonly next: typeof accessor;\n};\nexport declare const tuple: readonly [() => typeof tuple];\nexport declare const array: (() => typeof array)[];\nexport declare const nested: {\n inner: {\n next(): {\n next(): (typeof nested)[\"inner\"];\n };\n };\n};\nexport declare const memberTuple: readonly [() => (typeof memberTuple)[0]];\nexport declare const memberArray: (() => (typeof memberArray)[0])[];\nexport declare const quoted: {\n \"a-b\": () => (typeof quoted)[\"a-b\"];\n};\nexport declare const numeric: {\n 0: () => (typeof numeric)[0];\n};\nexport declare const key: unique symbol;\nexport declare const computed: {\n [key]: () => (typeof computed)[typeof key];\n};\nexport declare const union: {\n next: () => typeof union;\n} | undefined;\nexport declare const specialized: {\n value: string;\n next: () => typeof specialized;\n};\nexport declare const indexed: {\n [key: string]: typeof indexed;\n};\nexport declare const mapped: {\n next: typeof mapped;\n};\nexport declare const viaAnnotation: {\n value: string;\n next: () => typeof viaAnnotation;\n};\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: typeof hiddenAlias;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"first\"];\n };\n second: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"second\"];\n };\n};\nexport declare const parenthesized: () => typeof parenthesized;\nexport declare const asserted: () => typeof asserted;\nexport declare class Methods {\n static recur(): (typeof Methods)[\"recur\"];\n static \"a-b\"(): (typeof Methods)[\"a-b\"];\n static [key](): (typeof Methods)[typeof key];\n recur(): Methods[\"recur\"];\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n};\nexport declare const nestedNumber: {\n nested(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n constrained(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n copied(inner: U): {\n outer: number;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n};\n", + "impliedNodeFormat": 1 + } } ], "options": { @@ -508,314 +632,8 @@ export const nestedNumber = nestedOwner.make(1); "outDir": "./", "strict": true }, - "emitDiagnosticsPerFile": [ - [ - "../index.ts", - [ - { - "pos": 13, - "end": 18, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "arrow" - ] - }, - { - "pos": 47, - "end": 57, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "expression" - ] - }, - { - "pos": 226, - "end": 238, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "objectReturn" - ] - }, - { - "pos": 286, - "end": 297, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "tupleReturn" - ] - }, - { - "pos": 417, - "end": 423, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "object" - ] - }, - { - "pos": 473, - "end": 479, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "method" - ] - }, - { - "pos": 536, - "end": 544, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "accessor" - ] - }, - { - "pos": 607, - "end": 612, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "tuple" - ] - }, - { - "pos": 652, - "end": 657, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "array" - ] - }, - { - "pos": 688, - "end": 694, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "nested" - ] - }, - { - "pos": 758, - "end": 769, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "memberTuple" - ] - }, - { - "pos": 830, - "end": 841, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "memberArray" - ] - }, - { - "pos": 893, - "end": 899, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "quoted" - ] - }, - { - "pos": 960, - "end": 967, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "numeric" - ] - }, - { - "pos": 1053, - "end": 1061, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "computed" - ] - }, - { - "pos": 1122, - "end": 1127, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "union" - ] - }, - { - "pos": 1298, - "end": 1309, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "specialized" - ] - }, - { - "pos": 1443, - "end": 1450, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "indexed" - ] - }, - { - "pos": 1591, - "end": 1597, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "mapped" - ] - }, - { - "pos": 1792, - "end": 1805, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "viaAnnotation" - ] - }, - { - "pos": 2246, - "end": 2257, - "code": 4025, - "category": 1, - "messageKey": "Exported_variable_0_has_or_is_using_private_name_1_4025", - "messageArgs": [ - "hiddenAlias", - "Hidden", - "" - ] - }, - { - "pos": 2295, - "end": 2315, - "code": 4025, - "category": 1, - "messageKey": "Exported_variable_0_has_or_is_using_private_name_1_4025", - "messageArgs": [ - "siblingHiddenAliases", - "Hidden", - "" - ] - }, - { - "pos": 2376, - "end": 2389, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "parenthesized" - ] - }, - { - "pos": 2441, - "end": 2449, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "asserted" - ] - }, - { - "pos": 2591, - "end": 2596, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "\"a-b\"" - ] - }, - { - "pos": 2637, - "end": 2642, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "[key]" - ] - }, - { - "pos": 2674, - "end": 2679, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "recur" - ] - }, - { - "pos": 2918, - "end": 2929, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "nestedOwner" - ] - }, - { - "pos": 3450, - "end": 3462, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "nestedNumber" - ] - } - ] - ] - ], - "emitSignatures": [ - { - "file": "../index.ts", - "original": 2 - } - ], - "size": 10217 + "latestChangedDtsFile": "./index.d.ts", + "size": 11151 } producer/tsconfig.json:: @@ -823,10 +641,12 @@ SemanticDiagnostics:: *refresh* /home/src/tslibs/TS/Lib/lib.es2026.full.d.ts *refresh* /home/src/workspaces/project/producer/index.ts Signatures:: +(stored at emit) /home/src/workspaces/project/producer/index.ts consumer/tsconfig.json:: SemanticDiagnostics:: *refresh* /home/src/tslibs/TS/Lib/lib.es2026.full.d.ts +*refresh* /home/src/workspaces/project/producer/dist/index.d.ts *refresh* /home/src/workspaces/project/consumer/index.ts Signatures:: @@ -836,203 +656,106 @@ Edit [0]:: no change tsgo --build consumer ExitStatus:: DiagnosticsPresent_OutputsGenerated Output:: -producer/index.ts:1:14 - error TS5088: The inferred type of 'arrow' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -1 export const arrow = () => arrow; -   ~~~~~ - -producer/index.ts:2:14 - error TS5088: The inferred type of 'expression' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -2 export const expression = function self() { return self; }; -   ~~~~~~~~~~ - -producer/index.ts:6:14 - error TS5088: The inferred type of 'objectReturn' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -6 export const objectReturn = () => ({ call: objectReturn }); -   ~~~~~~~~~~~~ - -producer/index.ts:7:14 - error TS5088: The inferred type of 'tupleReturn' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -7 export const tupleReturn = () => [tupleReturn] as const; -   ~~~~~~~~~~~ - -producer/index.ts:9:14 - error TS5088: The inferred type of 'object' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -9 export const object = { value: 1, next: () => object }; -   ~~~~~~ - -producer/index.ts:10:14 - error TS5088: The inferred type of 'method' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -10 export const method = { value: 1, next() { return method; } }; -   ~~~~~~ - -producer/index.ts:11:14 - error TS5088: The inferred type of 'accessor' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -11 export const accessor = { value: 1, get next() { return accessor; } }; -   ~~~~~~~~ - -producer/index.ts:12:14 - error TS5088: The inferred type of 'tuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -12 export const tuple = [() => tuple] as const; -   ~~~~~ - -producer/index.ts:13:14 - error TS5088: The inferred type of 'array' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -13 export const array = [() => array]; -   ~~~~~ - -producer/index.ts:14:14 - error TS5088: The inferred type of 'nested' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -14 export const nested = { inner: { next() { return nested.inner; } } }; -   ~~~~~~ - -producer/index.ts:15:14 - error TS5088: The inferred type of 'memberTuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -15 export const memberTuple = [function self() { return self; }] as const; -   ~~~~~~~~~~~ - -producer/index.ts:16:14 - error TS5088: The inferred type of 'memberArray' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -16 export const memberArray = [function self() { return self; }]; -   ~~~~~~~~~~~ - -producer/index.ts:17:14 - error TS5088: The inferred type of 'quoted' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:58:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. -17 export const quoted = { "a-b": function self() { return self; } }; -   ~~~~~~ +58 const invalid: number = arrow()()(); +   ~~~~~~~ -producer/index.ts:18:14 - error TS5088: The inferred type of 'numeric' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:59:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. -18 export const numeric = { 0: function self() { return self; } }; -   ~~~~~~~ +59 const invalidExpression: number = expression()()(); +   ~~~~~~~~~~~~~~~~~ -producer/index.ts:20:14 - error TS5088: The inferred type of 'computed' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:60:7 - error TS2322: Type '() => { call: ...; }' is not assignable to type 'number'. -20 export const computed = { [key]: function self() { return self; } }; -   ~~~~~~~~ +60 const invalidObject: number = objectReturn().call; +   ~~~~~~~~~~~~~ -producer/index.ts:21:14 - error TS5088: The inferred type of 'union' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:61:7 - error TS2322: Type '() => readonly [...]' is not assignable to type 'number'. -21 export const union = true as boolean ? { next: () => union } : undefined; -   ~~~~~ +61 const invalidTuple: number = tupleReturn()[0]; +   ~~~~~~~~~~~~ -producer/index.ts:26:14 - error TS5088: The inferred type of 'specialized' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:62:7 - error TS2322: Type '(shadowed: number) => ...' is not assignable to type 'number'. -26 export const specialized = create("text"); -   ~~~~~~~~~~~ +62 const invalidShadowed: number = shadowed(1); +   ~~~~~~~~~~~~~~~ -producer/index.ts:31:14 - error TS5088: The inferred type of 'indexed' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:63:7 - error TS2322: Type 'number' is not assignable to type 'string'. -31 export const indexed = createIndexed(); -   ~~~~~~~ +63 const invalidObjectValue: string = object.next().value; +   ~~~~~~~~~~~~~~~~~~ -producer/index.ts:36:14 - error TS5088: The inferred type of 'mapped' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:64:7 - error TS2322: Type 'readonly [() => ...]' is not assignable to type 'number'. -36 export const mapped = createMapped<{ next: unknown }>(); -   ~~~~~~ +64 const invalidTupleValue: number = tuple[0](); +   ~~~~~~~~~~~~~~~~~ -producer/index.ts:41:14 - error TS5088: The inferred type of 'viaAnnotation' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:65:7 - error TS2322: Type 'string' is not assignable to type 'number'. -41 export const viaAnnotation = createAnnotated("text"); -   ~~~~~~~~~~~~~ +65 const invalidSpecialized: number = specialized.next().value; +   ~~~~~~~~~~~~~~~~~~ -producer/index.ts:52:14 - error TS4025: Exported variable 'hiddenAlias' has or is using private name 'Hidden'. +consumer/index.ts:66:7 - error TS2322: Type '{ next: ...; }' is not assignable to type 'number'. -52 export const hiddenAlias = createHidden("text"); -   ~~~~~~~~~~~ +66 const invalidMapped: number = mapped.next; +   ~~~~~~~~~~~~~ -producer/index.ts:53:14 - error TS4025: Exported variable 'siblingHiddenAliases' has or is using private name 'Hidden'. +consumer/index.ts:67:7 - error TS2322: Type 'string' is not assignable to type 'number'. -53 export const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias }; -   ~~~~~~~~~~~~~~~~~~~~ +67 const invalidAnnotation: number = viaAnnotation.next().value; +   ~~~~~~~~~~~~~~~~~ -producer/index.ts:54:14 - error TS5088: The inferred type of 'parenthesized' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:68:7 - error TS2322: Type 'string' is not assignable to type 'number'. -54 export const parenthesized = (function self() { return self; }); -   ~~~~~~~~~~~~~ +68 const invalidLink: number = nextLink.next.value; +   ~~~~~~~~~~~ -producer/index.ts:55:14 - error TS5088: The inferred type of 'asserted' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:69:7 - error TS2322: Type 'number' is not assignable to type 'string'. -55 export const asserted = (function self() { return self; }) satisfies () => unknown; -   ~~~~~~~~ +69 const invalidCallable: string = nextCallable(1).link.value; +   ~~~~~~~~~~~~~~~ -producer/index.ts:58:12 - error TS5088: The inferred type of '"a-b"' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:70:7 - error TS2322: Type 'string' is not assignable to type 'number'. -58 static "a-b"() { return Methods["a-b"]; } -   ~~~~~ +70 const invalidHiddenValue: number = hiddenAlias.next.next.value; +   ~~~~~~~~~~~~~~~~~~ -producer/index.ts:59:12 - error TS5088: The inferred type of '[key]' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:71:7 - error TS2322: Type '() => (typeof Methods)["recur"]' is not assignable to type 'number'. -59 static [key]() { return Methods[key]; } -   ~~~~~ +71 const invalidMethod: number = Methods.recur()(); +   ~~~~~~~~~~~~~ -producer/index.ts:60:5 - error TS5088: The inferred type of 'recur' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:72:7 - error TS2322: Type '() => (typeof Methods)[typeof key]' is not assignable to type 'number'. -60 recur() { return this.recur; } -   ~~~~~ +72 const invalidComputedMethod: number = Methods[key]()(); +   ~~~~~~~~~~~~~~~~~~~~~ -producer/index.ts:65:14 - error TS5088: The inferred type of 'nestedOwner' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:73:7 - error TS2322: Type 'string' is not assignable to type 'boolean'. -65 export const nestedOwner = { -   ~~~~~~~~~~~ +73 const invalidNestedOuter: boolean = nestedString.outer; +   ~~~~~~~~~~~~~~~~~~ -producer/index.ts:77:14 - error TS5088: The inferred type of 'nestedNumber' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:74:7 - error TS2322: Type 'number' is not assignable to type 'string'. -77 export const nestedNumber = nestedOwner.make(1); -   ~~~~~~~~~~~~ +74 const invalidNestedInner: string = nestedString.inner; +   ~~~~~~~~~~~~~~~~~~ -consumer/index.ts:1:88 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. +consumer/index.ts:75:26 - error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. -1 import { arrow, expression, first, generic, objectReturn, tupleReturn, shadowed } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +75 nestedNumber.constrained("wrong"); +   ~~~~~~~ -consumer/index.ts:2:64 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. -2 import { object, method, accessor, tuple, array, nested } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:3:94 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -3 import { memberTuple, memberArray, quoted, numeric, key, computed, union, specialized } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:4:48 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -4 import { indexed, mapped, viaAnnotation } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:5:86 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -5 import { nextLink, nextCallable, parenthesized, asserted, Methods, overloaded } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:6:51 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -6 import { hiddenAlias, siblingHiddenAliases } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:7:30 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -7 import { nestedNumber } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - -Found 36 errors in 2 files. - -Errors Files - 7 consumer/index.ts:1 - 29 producer/index.ts:1 +Found 18 errors in the same file, starting at: consumer/index.ts:58 //// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo] *rewrite with same content* //// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo.readable.baseline.txt] *rewrite with same content* -producer/tsconfig.json:: -SemanticDiagnostics:: -Signatures:: - consumer/tsconfig.json:: SemanticDiagnostics:: *refresh* /home/src/tslibs/TS/Lib/lib.es2026.full.d.ts +*refresh* /home/src/workspaces/project/producer/dist/index.d.ts *refresh* /home/src/workspaces/project/consumer/index.ts Signatures:: @@ -1122,192 +845,98 @@ export const nestedNumber = nestedOwner.make(1); tsgo --build consumer ExitStatus:: DiagnosticsPresent_OutputsGenerated Output:: -producer/index.ts:1:14 - error TS5088: The inferred type of 'arrow' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -1 export const arrow = () => arrow; -   ~~~~~ - -producer/index.ts:2:14 - error TS5088: The inferred type of 'expression' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -2 export const expression = function self() { return self; }; -   ~~~~~~~~~~ - -producer/index.ts:6:14 - error TS5088: The inferred type of 'objectReturn' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -6 export const objectReturn = () => ({ call: objectReturn }); -   ~~~~~~~~~~~~ - -producer/index.ts:7:14 - error TS5088: The inferred type of 'tupleReturn' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -7 export const tupleReturn = () => [tupleReturn] as const; -   ~~~~~~~~~~~ - -producer/index.ts:9:14 - error TS5088: The inferred type of 'object' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -9 export const object = { value: 1, next: () => object }; -   ~~~~~~ - -producer/index.ts:10:14 - error TS5088: The inferred type of 'method' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -10 export const method = { value: 1, next() { return method; } }; -   ~~~~~~ - -producer/index.ts:11:14 - error TS5088: The inferred type of 'accessor' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -11 export const accessor = { value: 1, get next() { return accessor; } }; -   ~~~~~~~~ - -producer/index.ts:12:14 - error TS5088: The inferred type of 'tuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -12 export const tuple = [() => tuple] as const; -   ~~~~~ - -producer/index.ts:13:14 - error TS5088: The inferred type of 'array' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -13 export const array = [() => array]; -   ~~~~~ - -producer/index.ts:14:14 - error TS5088: The inferred type of 'nested' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -14 export const nested = { inner: { next() { return nested.inner; } } }; -   ~~~~~~ - -producer/index.ts:15:14 - error TS5088: The inferred type of 'memberTuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -15 export const memberTuple = [function self() { return self; }] as const; -   ~~~~~~~~~~~ - -producer/index.ts:16:14 - error TS5088: The inferred type of 'memberArray' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -16 export const memberArray = [function self() { return self; }]; -   ~~~~~~~~~~~ - -producer/index.ts:17:14 - error TS5088: The inferred type of 'quoted' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -17 export const quoted = { "a-b": function self() { return self; } }; -   ~~~~~~ - -producer/index.ts:18:14 - error TS5088: The inferred type of 'numeric' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -18 export const numeric = { 0: function self() { return self; } }; -   ~~~~~~~ - -producer/index.ts:20:14 - error TS5088: The inferred type of 'computed' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -20 export const computed = { [key]: function self() { return self; } }; -   ~~~~~~~~ - -producer/index.ts:21:14 - error TS5088: The inferred type of 'union' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -21 export const union = true as boolean ? { next: () => union } : undefined; -   ~~~~~ - -producer/index.ts:26:14 - error TS5088: The inferred type of 'specialized' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -26 export const specialized = create("text"); -   ~~~~~~~~~~~ +consumer/index.ts:58:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. -producer/index.ts:31:14 - error TS5088: The inferred type of 'indexed' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +58 const invalid: number = arrow()()(); +   ~~~~~~~ -31 export const indexed = createIndexed(); -   ~~~~~~~ +consumer/index.ts:59:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. -producer/index.ts:36:14 - error TS5088: The inferred type of 'mapped' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +59 const invalidExpression: number = expression()()(); +   ~~~~~~~~~~~~~~~~~ -36 export const mapped = createMapped<{ next: unknown }>(); -   ~~~~~~ +consumer/index.ts:60:7 - error TS2322: Type '() => { call: ...; }' is not assignable to type 'number'. -producer/index.ts:41:14 - error TS5088: The inferred type of 'viaAnnotation' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +60 const invalidObject: number = objectReturn().call; +   ~~~~~~~~~~~~~ -41 export const viaAnnotation = createAnnotated("text"); -   ~~~~~~~~~~~~~ +consumer/index.ts:61:7 - error TS2322: Type '() => readonly [...]' is not assignable to type 'number'. -producer/index.ts:52:14 - error TS4025: Exported variable 'hiddenAlias' has or is using private name 'Hidden'. +61 const invalidTuple: number = tupleReturn()[0]; +   ~~~~~~~~~~~~ -52 export const hiddenAlias = createHidden("text"); -   ~~~~~~~~~~~ +consumer/index.ts:62:7 - error TS2322: Type '(shadowed: number) => ...' is not assignable to type 'number'. -producer/index.ts:53:14 - error TS4025: Exported variable 'siblingHiddenAliases' has or is using private name 'Hidden'. +62 const invalidShadowed: number = shadowed(1); +   ~~~~~~~~~~~~~~~ -53 export const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias }; -   ~~~~~~~~~~~~~~~~~~~~ +consumer/index.ts:63:7 - error TS2322: Type 'number' is not assignable to type 'string'. -producer/index.ts:54:14 - error TS5088: The inferred type of 'parenthesized' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +63 const invalidObjectValue: string = object.next().value; +   ~~~~~~~~~~~~~~~~~~ -54 export const parenthesized = (function self() { return self; }); -   ~~~~~~~~~~~~~ +consumer/index.ts:64:7 - error TS2322: Type 'readonly [() => ...]' is not assignable to type 'number'. -producer/index.ts:55:14 - error TS5088: The inferred type of 'asserted' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +64 const invalidTupleValue: number = tuple[0](); +   ~~~~~~~~~~~~~~~~~ -55 export const asserted = (function self() { return self; }) satisfies () => unknown; -   ~~~~~~~~ +consumer/index.ts:65:7 - error TS2322: Type 'string' is not assignable to type 'number'. -producer/index.ts:58:12 - error TS5088: The inferred type of '"a-b"' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +65 const invalidSpecialized: number = specialized.next().value; +   ~~~~~~~~~~~~~~~~~~ -58 static "a-b"() { return Methods["a-b"]; } -   ~~~~~ +consumer/index.ts:66:7 - error TS2322: Type '{ next: ...; }' is not assignable to type 'number'. -producer/index.ts:59:12 - error TS5088: The inferred type of '[key]' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +66 const invalidMapped: number = mapped.next; +   ~~~~~~~~~~~~~ -59 static [key]() { return Methods[key]; } -   ~~~~~ +consumer/index.ts:67:7 - error TS2322: Type 'string' is not assignable to type 'number'. -producer/index.ts:60:5 - error TS5088: The inferred type of 'recur' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +67 const invalidAnnotation: number = viaAnnotation.next().value; +   ~~~~~~~~~~~~~~~~~ -60 recur() { return this.recur; } -   ~~~~~ +consumer/index.ts:68:7 - error TS2322: Type 'string' is not assignable to type 'number'. -producer/index.ts:65:14 - error TS5088: The inferred type of 'nestedOwner' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +68 const invalidLink: number = nextLink.next.value; +   ~~~~~~~~~~~ -65 export const nestedOwner = { -   ~~~~~~~~~~~ +consumer/index.ts:69:7 - error TS2322: Type 'number' is not assignable to type 'string'. -producer/index.ts:77:14 - error TS5088: The inferred type of 'nestedNumber' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +69 const invalidCallable: string = nextCallable(1).link.value; +   ~~~~~~~~~~~~~~~ -77 export const nestedNumber = nestedOwner.make(1); -   ~~~~~~~~~~~~ +consumer/index.ts:70:7 - error TS2322: Type 'string' is not assignable to type 'number'. -consumer/index.ts:1:88 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. +70 const invalidHiddenValue: number = hiddenAlias.next.next.value; +   ~~~~~~~~~~~~~~~~~~ -1 import { arrow, expression, first, generic, objectReturn, tupleReturn, shadowed } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +consumer/index.ts:71:7 - error TS2322: Type '() => (typeof Methods)["recur"]' is not assignable to type 'number'. -consumer/index.ts:2:64 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. +71 const invalidMethod: number = Methods.recur()(); +   ~~~~~~~~~~~~~ -2 import { object, method, accessor, tuple, array, nested } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +consumer/index.ts:72:7 - error TS2322: Type '() => (typeof Methods)[typeof key]' is not assignable to type 'number'. -consumer/index.ts:3:94 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. +72 const invalidComputedMethod: number = Methods[key]()(); +   ~~~~~~~~~~~~~~~~~~~~~ -3 import { memberTuple, memberArray, quoted, numeric, key, computed, union, specialized } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +consumer/index.ts:73:7 - error TS2322: Type 'string' is not assignable to type 'boolean'. -consumer/index.ts:4:48 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. +73 const invalidNestedOuter: boolean = nestedString.outer; +   ~~~~~~~~~~~~~~~~~~ -4 import { indexed, mapped, viaAnnotation } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +consumer/index.ts:74:7 - error TS2322: Type 'number' is not assignable to type 'string'. -consumer/index.ts:5:86 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. +74 const invalidNestedInner: string = nestedString.inner; +   ~~~~~~~~~~~~~~~~~~ -5 import { nextLink, nextCallable, parenthesized, asserted, Methods, overloaded } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +consumer/index.ts:75:26 - error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. -consumer/index.ts:6:51 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. +75 nestedNumber.constrained("wrong"); +   ~~~~~~~ -6 import { hiddenAlias, siblingHiddenAliases } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:7:30 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -7 import { nestedNumber } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - -Found 36 errors in 2 files. - -Errors Files - 7 consumer/index.ts:1 - 29 producer/index.ts:1 +Found 18 errors in the same file, starting at: consumer/index.ts:58 //// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo] *rewrite with same content* //// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo.readable.baseline.txt] *rewrite with same content* @@ -1385,7 +1014,7 @@ export const nestedNumber = nestedOwner.make(1); // comment-only edit //// [/home/src/workspaces/project/producer/dist/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2026.full.d.ts","../index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"633d60bb4cc3a6318b4832fd7a0a90fd-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);\n// comment-only edit\n","signature":"87d31630156adc6eff09ac6a0e92ce90-export declare const arrow: any;\nexport declare const expression: any;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: any;\nexport declare const tupleReturn: any;\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: any;\nexport declare const method: any;\nexport declare const accessor: any;\nexport declare const tuple: any;\nexport declare const array: any;\nexport declare const nested: any;\nexport declare const memberTuple: any;\nexport declare const memberArray: any;\nexport declare const quoted: any;\nexport declare const numeric: any;\nexport declare const key: unique symbol;\nexport declare const computed: any;\nexport declare const union: any;\nexport declare const specialized: any;\nexport declare const indexed: any;\nexport declare const mapped: any;\nexport declare const viaAnnotation: any;\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: Hidden;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: Hidden;\n };\n second: {\n value: string;\n next: Hidden;\n };\n};\nexport declare const parenthesized: any;\nexport declare const asserted: any;\nexport declare class Methods {\n static recur(): typeof Methods.recur;\n static \"a-b\"(): any;\n static [key](): any;\n recur(): any;\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: any;\nexport declare const nestedNumber: any;\n\n(13,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\narrow\n\n(47,10): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nexpression\n\n(226,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nobjectReturn\n\n(286,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ntupleReturn\n\n(417,6): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nobject\n\n(473,6): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmethod\n\n(536,8): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\naccessor\n\n(607,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ntuple\n\n(652,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\narray\n\n(688,6): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnested\n\n(758,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmemberTuple\n\n(830,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmemberArray\n\n(893,6): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nquoted\n\n(960,7): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnumeric\n\n(1053,8): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ncomputed\n\n(1122,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nunion\n\n(1298,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nspecialized\n\n(1443,7): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nindexed\n\n(1591,6): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmapped\n\n(1792,13): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nviaAnnotation\n\n(2246,11): error4025: Exported_variable_0_has_or_is_using_private_name_1_4025\nhiddenAlias\nHidden\n\n\n(2295,20): error4025: Exported_variable_0_has_or_is_using_private_name_1_4025\nsiblingHiddenAliases\nHidden\n\n\n(2376,13): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nparenthesized\n\n(2441,8): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nasserted\n\n(2591,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\n\"a-b\"\n\n(2637,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\n[key]\n\n(2674,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nrecur\n\n(2918,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnestedOwner\n\n(3450,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnestedNumber\n","impliedNodeFormat":1}],"options":{"composite":true,"outDir":"./","strict":true},"emitDiagnosticsPerFile":[[2,[{"pos":13,"end":18,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["arrow"]},{"pos":47,"end":57,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["expression"]},{"pos":226,"end":238,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["objectReturn"]},{"pos":286,"end":297,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["tupleReturn"]},{"pos":417,"end":423,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["object"]},{"pos":473,"end":479,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["method"]},{"pos":536,"end":544,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["accessor"]},{"pos":607,"end":612,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["tuple"]},{"pos":652,"end":657,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["array"]},{"pos":688,"end":694,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nested"]},{"pos":758,"end":769,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["memberTuple"]},{"pos":830,"end":841,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["memberArray"]},{"pos":893,"end":899,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["quoted"]},{"pos":960,"end":967,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["numeric"]},{"pos":1053,"end":1061,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["computed"]},{"pos":1122,"end":1127,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["union"]},{"pos":1298,"end":1309,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["specialized"]},{"pos":1443,"end":1450,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["indexed"]},{"pos":1591,"end":1597,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["mapped"]},{"pos":1792,"end":1805,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["viaAnnotation"]},{"pos":2246,"end":2257,"code":4025,"category":1,"messageKey":"Exported_variable_0_has_or_is_using_private_name_1_4025","messageArgs":["hiddenAlias","Hidden",""]},{"pos":2295,"end":2315,"code":4025,"category":1,"messageKey":"Exported_variable_0_has_or_is_using_private_name_1_4025","messageArgs":["siblingHiddenAliases","Hidden",""]},{"pos":2376,"end":2389,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["parenthesized"]},{"pos":2441,"end":2449,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["asserted"]},{"pos":2591,"end":2596,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["\"a-b\""]},{"pos":2637,"end":2642,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["[key]"]},{"pos":2674,"end":2679,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["recur"]},{"pos":2918,"end":2929,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nestedOwner"]},{"pos":3450,"end":3462,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nestedNumber"]}]]],"emitSignatures":[2]} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2026.full.d.ts","../index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"633d60bb4cc3a6318b4832fd7a0a90fd-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);\n// comment-only edit\n","signature":"ac680f9630fda193ccd7e95d350590d1-export declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: () => {\n call: typeof objectReturn;\n};\nexport declare const tupleReturn: () => readonly [typeof tupleReturn];\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: {\n value: number;\n next: () => typeof object;\n};\nexport declare const method: {\n value: number;\n next(): typeof method;\n};\nexport declare const accessor: {\n value: number;\n readonly next: typeof accessor;\n};\nexport declare const tuple: readonly [() => typeof tuple];\nexport declare const array: (() => typeof array)[];\nexport declare const nested: {\n inner: {\n next(): {\n next(): (typeof nested)[\"inner\"];\n };\n };\n};\nexport declare const memberTuple: readonly [() => (typeof memberTuple)[0]];\nexport declare const memberArray: (() => (typeof memberArray)[0])[];\nexport declare const quoted: {\n \"a-b\": () => (typeof quoted)[\"a-b\"];\n};\nexport declare const numeric: {\n 0: () => (typeof numeric)[0];\n};\nexport declare const key: unique symbol;\nexport declare const computed: {\n [key]: () => (typeof computed)[typeof key];\n};\nexport declare const union: {\n next: () => typeof union;\n} | undefined;\nexport declare const specialized: {\n value: string;\n next: () => typeof specialized;\n};\nexport declare const indexed: {\n [key: string]: typeof indexed;\n};\nexport declare const mapped: {\n next: typeof mapped;\n};\nexport declare const viaAnnotation: {\n value: string;\n next: () => typeof viaAnnotation;\n};\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: typeof hiddenAlias;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"first\"];\n };\n second: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"second\"];\n };\n};\nexport declare const parenthesized: () => typeof parenthesized;\nexport declare const asserted: () => typeof asserted;\nexport declare class Methods {\n static recur(): (typeof Methods)[\"recur\"];\n static \"a-b\"(): (typeof Methods)[\"a-b\"];\n static [key](): (typeof Methods)[typeof key];\n recur(): Methods[\"recur\"];\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n};\nexport declare const nestedNumber: {\n nested(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n constrained(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n copied(inner: U): {\n outer: number;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n};\n","impliedNodeFormat":1}],"options":{"composite":true,"outDir":"./","strict":true},"latestChangedDtsFile":"./index.d.ts"} //// [/home/src/workspaces/project/producer/dist/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -1417,11 +1046,11 @@ export const nestedNumber = nestedOwner.make(1); { "fileName": "../index.ts", "version": "633d60bb4cc3a6318b4832fd7a0a90fd-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);\n// comment-only edit\n", - "signature": "87d31630156adc6eff09ac6a0e92ce90-export declare const arrow: any;\nexport declare const expression: any;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: any;\nexport declare const tupleReturn: any;\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: any;\nexport declare const method: any;\nexport declare const accessor: any;\nexport declare const tuple: any;\nexport declare const array: any;\nexport declare const nested: any;\nexport declare const memberTuple: any;\nexport declare const memberArray: any;\nexport declare const quoted: any;\nexport declare const numeric: any;\nexport declare const key: unique symbol;\nexport declare const computed: any;\nexport declare const union: any;\nexport declare const specialized: any;\nexport declare const indexed: any;\nexport declare const mapped: any;\nexport declare const viaAnnotation: any;\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: Hidden;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: Hidden;\n };\n second: {\n value: string;\n next: Hidden;\n };\n};\nexport declare const parenthesized: any;\nexport declare const asserted: any;\nexport declare class Methods {\n static recur(): typeof Methods.recur;\n static \"a-b\"(): any;\n static [key](): any;\n recur(): any;\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: any;\nexport declare const nestedNumber: any;\n\n(13,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\narrow\n\n(47,10): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nexpression\n\n(226,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nobjectReturn\n\n(286,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ntupleReturn\n\n(417,6): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nobject\n\n(473,6): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmethod\n\n(536,8): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\naccessor\n\n(607,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ntuple\n\n(652,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\narray\n\n(688,6): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnested\n\n(758,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmemberTuple\n\n(830,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmemberArray\n\n(893,6): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nquoted\n\n(960,7): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnumeric\n\n(1053,8): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ncomputed\n\n(1122,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nunion\n\n(1298,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nspecialized\n\n(1443,7): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nindexed\n\n(1591,6): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmapped\n\n(1792,13): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nviaAnnotation\n\n(2246,11): error4025: Exported_variable_0_has_or_is_using_private_name_1_4025\nhiddenAlias\nHidden\n\n\n(2295,20): error4025: Exported_variable_0_has_or_is_using_private_name_1_4025\nsiblingHiddenAliases\nHidden\n\n\n(2376,13): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nparenthesized\n\n(2441,8): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nasserted\n\n(2591,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\n\"a-b\"\n\n(2637,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\n[key]\n\n(2674,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nrecur\n\n(2918,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnestedOwner\n\n(3450,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnestedNumber\n", + "signature": "ac680f9630fda193ccd7e95d350590d1-export declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: () => {\n call: typeof objectReturn;\n};\nexport declare const tupleReturn: () => readonly [typeof tupleReturn];\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: {\n value: number;\n next: () => typeof object;\n};\nexport declare const method: {\n value: number;\n next(): typeof method;\n};\nexport declare const accessor: {\n value: number;\n readonly next: typeof accessor;\n};\nexport declare const tuple: readonly [() => typeof tuple];\nexport declare const array: (() => typeof array)[];\nexport declare const nested: {\n inner: {\n next(): {\n next(): (typeof nested)[\"inner\"];\n };\n };\n};\nexport declare const memberTuple: readonly [() => (typeof memberTuple)[0]];\nexport declare const memberArray: (() => (typeof memberArray)[0])[];\nexport declare const quoted: {\n \"a-b\": () => (typeof quoted)[\"a-b\"];\n};\nexport declare const numeric: {\n 0: () => (typeof numeric)[0];\n};\nexport declare const key: unique symbol;\nexport declare const computed: {\n [key]: () => (typeof computed)[typeof key];\n};\nexport declare const union: {\n next: () => typeof union;\n} | undefined;\nexport declare const specialized: {\n value: string;\n next: () => typeof specialized;\n};\nexport declare const indexed: {\n [key: string]: typeof indexed;\n};\nexport declare const mapped: {\n next: typeof mapped;\n};\nexport declare const viaAnnotation: {\n value: string;\n next: () => typeof viaAnnotation;\n};\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: typeof hiddenAlias;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"first\"];\n };\n second: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"second\"];\n };\n};\nexport declare const parenthesized: () => typeof parenthesized;\nexport declare const asserted: () => typeof asserted;\nexport declare class Methods {\n static recur(): (typeof Methods)[\"recur\"];\n static \"a-b\"(): (typeof Methods)[\"a-b\"];\n static [key](): (typeof Methods)[typeof key];\n recur(): Methods[\"recur\"];\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n};\nexport declare const nestedNumber: {\n nested(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n constrained(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n copied(inner: U): {\n outer: number;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n};\n", "impliedNodeFormat": "CommonJS", "original": { "version": "633d60bb4cc3a6318b4832fd7a0a90fd-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);\n// comment-only edit\n", - "signature": "87d31630156adc6eff09ac6a0e92ce90-export declare const arrow: any;\nexport declare const expression: any;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: any;\nexport declare const tupleReturn: any;\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: any;\nexport declare const method: any;\nexport declare const accessor: any;\nexport declare const tuple: any;\nexport declare const array: any;\nexport declare const nested: any;\nexport declare const memberTuple: any;\nexport declare const memberArray: any;\nexport declare const quoted: any;\nexport declare const numeric: any;\nexport declare const key: unique symbol;\nexport declare const computed: any;\nexport declare const union: any;\nexport declare const specialized: any;\nexport declare const indexed: any;\nexport declare const mapped: any;\nexport declare const viaAnnotation: any;\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: Hidden;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: Hidden;\n };\n second: {\n value: string;\n next: Hidden;\n };\n};\nexport declare const parenthesized: any;\nexport declare const asserted: any;\nexport declare class Methods {\n static recur(): typeof Methods.recur;\n static \"a-b\"(): any;\n static [key](): any;\n recur(): any;\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: any;\nexport declare const nestedNumber: any;\n\n(13,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\narrow\n\n(47,10): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nexpression\n\n(226,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nobjectReturn\n\n(286,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ntupleReturn\n\n(417,6): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nobject\n\n(473,6): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmethod\n\n(536,8): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\naccessor\n\n(607,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ntuple\n\n(652,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\narray\n\n(688,6): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnested\n\n(758,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmemberTuple\n\n(830,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmemberArray\n\n(893,6): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nquoted\n\n(960,7): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnumeric\n\n(1053,8): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ncomputed\n\n(1122,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nunion\n\n(1298,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nspecialized\n\n(1443,7): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nindexed\n\n(1591,6): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmapped\n\n(1792,13): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nviaAnnotation\n\n(2246,11): error4025: Exported_variable_0_has_or_is_using_private_name_1_4025\nhiddenAlias\nHidden\n\n\n(2295,20): error4025: Exported_variable_0_has_or_is_using_private_name_1_4025\nsiblingHiddenAliases\nHidden\n\n\n(2376,13): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nparenthesized\n\n(2441,8): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nasserted\n\n(2591,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\n\"a-b\"\n\n(2637,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\n[key]\n\n(2674,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nrecur\n\n(2918,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnestedOwner\n\n(3450,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnestedNumber\n", + "signature": "ac680f9630fda193ccd7e95d350590d1-export declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: () => {\n call: typeof objectReturn;\n};\nexport declare const tupleReturn: () => readonly [typeof tupleReturn];\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: {\n value: number;\n next: () => typeof object;\n};\nexport declare const method: {\n value: number;\n next(): typeof method;\n};\nexport declare const accessor: {\n value: number;\n readonly next: typeof accessor;\n};\nexport declare const tuple: readonly [() => typeof tuple];\nexport declare const array: (() => typeof array)[];\nexport declare const nested: {\n inner: {\n next(): {\n next(): (typeof nested)[\"inner\"];\n };\n };\n};\nexport declare const memberTuple: readonly [() => (typeof memberTuple)[0]];\nexport declare const memberArray: (() => (typeof memberArray)[0])[];\nexport declare const quoted: {\n \"a-b\": () => (typeof quoted)[\"a-b\"];\n};\nexport declare const numeric: {\n 0: () => (typeof numeric)[0];\n};\nexport declare const key: unique symbol;\nexport declare const computed: {\n [key]: () => (typeof computed)[typeof key];\n};\nexport declare const union: {\n next: () => typeof union;\n} | undefined;\nexport declare const specialized: {\n value: string;\n next: () => typeof specialized;\n};\nexport declare const indexed: {\n [key: string]: typeof indexed;\n};\nexport declare const mapped: {\n next: typeof mapped;\n};\nexport declare const viaAnnotation: {\n value: string;\n next: () => typeof viaAnnotation;\n};\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: typeof hiddenAlias;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"first\"];\n };\n second: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"second\"];\n };\n};\nexport declare const parenthesized: () => typeof parenthesized;\nexport declare const asserted: () => typeof asserted;\nexport declare class Methods {\n static recur(): (typeof Methods)[\"recur\"];\n static \"a-b\"(): (typeof Methods)[\"a-b\"];\n static [key](): (typeof Methods)[typeof key];\n recur(): Methods[\"recur\"];\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n};\nexport declare const nestedNumber: {\n nested(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n constrained(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n copied(inner: U): {\n outer: number;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n};\n", "impliedNodeFormat": 1 } } @@ -1431,314 +1060,8 @@ export const nestedNumber = nestedOwner.make(1); "outDir": "./", "strict": true }, - "emitDiagnosticsPerFile": [ - [ - "../index.ts", - [ - { - "pos": 13, - "end": 18, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "arrow" - ] - }, - { - "pos": 47, - "end": 57, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "expression" - ] - }, - { - "pos": 226, - "end": 238, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "objectReturn" - ] - }, - { - "pos": 286, - "end": 297, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "tupleReturn" - ] - }, - { - "pos": 417, - "end": 423, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "object" - ] - }, - { - "pos": 473, - "end": 479, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "method" - ] - }, - { - "pos": 536, - "end": 544, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "accessor" - ] - }, - { - "pos": 607, - "end": 612, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "tuple" - ] - }, - { - "pos": 652, - "end": 657, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "array" - ] - }, - { - "pos": 688, - "end": 694, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "nested" - ] - }, - { - "pos": 758, - "end": 769, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "memberTuple" - ] - }, - { - "pos": 830, - "end": 841, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "memberArray" - ] - }, - { - "pos": 893, - "end": 899, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "quoted" - ] - }, - { - "pos": 960, - "end": 967, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "numeric" - ] - }, - { - "pos": 1053, - "end": 1061, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "computed" - ] - }, - { - "pos": 1122, - "end": 1127, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "union" - ] - }, - { - "pos": 1298, - "end": 1309, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "specialized" - ] - }, - { - "pos": 1443, - "end": 1450, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "indexed" - ] - }, - { - "pos": 1591, - "end": 1597, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "mapped" - ] - }, - { - "pos": 1792, - "end": 1805, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "viaAnnotation" - ] - }, - { - "pos": 2246, - "end": 2257, - "code": 4025, - "category": 1, - "messageKey": "Exported_variable_0_has_or_is_using_private_name_1_4025", - "messageArgs": [ - "hiddenAlias", - "Hidden", - "" - ] - }, - { - "pos": 2295, - "end": 2315, - "code": 4025, - "category": 1, - "messageKey": "Exported_variable_0_has_or_is_using_private_name_1_4025", - "messageArgs": [ - "siblingHiddenAliases", - "Hidden", - "" - ] - }, - { - "pos": 2376, - "end": 2389, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "parenthesized" - ] - }, - { - "pos": 2441, - "end": 2449, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "asserted" - ] - }, - { - "pos": 2591, - "end": 2596, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "\"a-b\"" - ] - }, - { - "pos": 2637, - "end": 2642, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "[key]" - ] - }, - { - "pos": 2674, - "end": 2679, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "recur" - ] - }, - { - "pos": 2918, - "end": 2929, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "nestedOwner" - ] - }, - { - "pos": 3450, - "end": 3462, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "nestedNumber" - ] - } - ] - ] - ], - "emitSignatures": [ - { - "file": "../index.ts", - "original": 2 - } - ], - "size": 16409 + "latestChangedDtsFile": "./index.d.ts", + "size": 11175 } producer/tsconfig.json:: @@ -1750,6 +1073,7 @@ Signatures:: consumer/tsconfig.json:: SemanticDiagnostics:: *refresh* /home/src/tslibs/TS/Lib/lib.es2026.full.d.ts +*refresh* /home/src/workspaces/project/producer/dist/index.d.ts *refresh* /home/src/workspaces/project/consumer/index.ts Signatures:: @@ -1759,202 +1083,105 @@ Edit [2]:: no change tsgo --build consumer ExitStatus:: DiagnosticsPresent_OutputsGenerated Output:: -producer/index.ts:1:14 - error TS5088: The inferred type of 'arrow' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -1 export const arrow = () => arrow; -   ~~~~~ - -producer/index.ts:2:14 - error TS5088: The inferred type of 'expression' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -2 export const expression = function self() { return self; }; -   ~~~~~~~~~~ - -producer/index.ts:6:14 - error TS5088: The inferred type of 'objectReturn' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -6 export const objectReturn = () => ({ call: objectReturn }); -   ~~~~~~~~~~~~ - -producer/index.ts:7:14 - error TS5088: The inferred type of 'tupleReturn' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -7 export const tupleReturn = () => [tupleReturn] as const; -   ~~~~~~~~~~~ - -producer/index.ts:9:14 - error TS5088: The inferred type of 'object' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -9 export const object = { value: 1, next: () => object }; -   ~~~~~~ - -producer/index.ts:10:14 - error TS5088: The inferred type of 'method' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -10 export const method = { value: 1, next() { return method; } }; -   ~~~~~~ - -producer/index.ts:11:14 - error TS5088: The inferred type of 'accessor' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -11 export const accessor = { value: 1, get next() { return accessor; } }; -   ~~~~~~~~ - -producer/index.ts:12:14 - error TS5088: The inferred type of 'tuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -12 export const tuple = [() => tuple] as const; -   ~~~~~ - -producer/index.ts:13:14 - error TS5088: The inferred type of 'array' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:58:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. -13 export const array = [() => array]; -   ~~~~~ +58 const invalid: number = arrow()()(); +   ~~~~~~~ -producer/index.ts:14:14 - error TS5088: The inferred type of 'nested' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:59:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. -14 export const nested = { inner: { next() { return nested.inner; } } }; -   ~~~~~~ +59 const invalidExpression: number = expression()()(); +   ~~~~~~~~~~~~~~~~~ -producer/index.ts:15:14 - error TS5088: The inferred type of 'memberTuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:60:7 - error TS2322: Type '() => { call: ...; }' is not assignable to type 'number'. -15 export const memberTuple = [function self() { return self; }] as const; -   ~~~~~~~~~~~ +60 const invalidObject: number = objectReturn().call; +   ~~~~~~~~~~~~~ -producer/index.ts:16:14 - error TS5088: The inferred type of 'memberArray' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:61:7 - error TS2322: Type '() => readonly [...]' is not assignable to type 'number'. -16 export const memberArray = [function self() { return self; }]; -   ~~~~~~~~~~~ +61 const invalidTuple: number = tupleReturn()[0]; +   ~~~~~~~~~~~~ -producer/index.ts:17:14 - error TS5088: The inferred type of 'quoted' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:62:7 - error TS2322: Type '(shadowed: number) => ...' is not assignable to type 'number'. -17 export const quoted = { "a-b": function self() { return self; } }; -   ~~~~~~ +62 const invalidShadowed: number = shadowed(1); +   ~~~~~~~~~~~~~~~ -producer/index.ts:18:14 - error TS5088: The inferred type of 'numeric' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:63:7 - error TS2322: Type 'number' is not assignable to type 'string'. -18 export const numeric = { 0: function self() { return self; } }; -   ~~~~~~~ +63 const invalidObjectValue: string = object.next().value; +   ~~~~~~~~~~~~~~~~~~ -producer/index.ts:20:14 - error TS5088: The inferred type of 'computed' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:64:7 - error TS2322: Type 'readonly [() => ...]' is not assignable to type 'number'. -20 export const computed = { [key]: function self() { return self; } }; -   ~~~~~~~~ +64 const invalidTupleValue: number = tuple[0](); +   ~~~~~~~~~~~~~~~~~ -producer/index.ts:21:14 - error TS5088: The inferred type of 'union' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:65:7 - error TS2322: Type 'string' is not assignable to type 'number'. -21 export const union = true as boolean ? { next: () => union } : undefined; -   ~~~~~ +65 const invalidSpecialized: number = specialized.next().value; +   ~~~~~~~~~~~~~~~~~~ -producer/index.ts:26:14 - error TS5088: The inferred type of 'specialized' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:66:7 - error TS2322: Type '{ next: ...; }' is not assignable to type 'number'. -26 export const specialized = create("text"); -   ~~~~~~~~~~~ +66 const invalidMapped: number = mapped.next; +   ~~~~~~~~~~~~~ -producer/index.ts:31:14 - error TS5088: The inferred type of 'indexed' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:67:7 - error TS2322: Type 'string' is not assignable to type 'number'. -31 export const indexed = createIndexed(); -   ~~~~~~~ +67 const invalidAnnotation: number = viaAnnotation.next().value; +   ~~~~~~~~~~~~~~~~~ -producer/index.ts:36:14 - error TS5088: The inferred type of 'mapped' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:68:7 - error TS2322: Type 'string' is not assignable to type 'number'. -36 export const mapped = createMapped<{ next: unknown }>(); -   ~~~~~~ +68 const invalidLink: number = nextLink.next.value; +   ~~~~~~~~~~~ -producer/index.ts:41:14 - error TS5088: The inferred type of 'viaAnnotation' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:69:7 - error TS2322: Type 'number' is not assignable to type 'string'. -41 export const viaAnnotation = createAnnotated("text"); -   ~~~~~~~~~~~~~ +69 const invalidCallable: string = nextCallable(1).link.value; +   ~~~~~~~~~~~~~~~ -producer/index.ts:52:14 - error TS4025: Exported variable 'hiddenAlias' has or is using private name 'Hidden'. +consumer/index.ts:70:7 - error TS2322: Type 'string' is not assignable to type 'number'. -52 export const hiddenAlias = createHidden("text"); -   ~~~~~~~~~~~ +70 const invalidHiddenValue: number = hiddenAlias.next.next.value; +   ~~~~~~~~~~~~~~~~~~ -producer/index.ts:53:14 - error TS4025: Exported variable 'siblingHiddenAliases' has or is using private name 'Hidden'. +consumer/index.ts:71:7 - error TS2322: Type '() => (typeof Methods)["recur"]' is not assignable to type 'number'. -53 export const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias }; -   ~~~~~~~~~~~~~~~~~~~~ +71 const invalidMethod: number = Methods.recur()(); +   ~~~~~~~~~~~~~ -producer/index.ts:54:14 - error TS5088: The inferred type of 'parenthesized' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:72:7 - error TS2322: Type '() => (typeof Methods)[typeof key]' is not assignable to type 'number'. -54 export const parenthesized = (function self() { return self; }); -   ~~~~~~~~~~~~~ +72 const invalidComputedMethod: number = Methods[key]()(); +   ~~~~~~~~~~~~~~~~~~~~~ -producer/index.ts:55:14 - error TS5088: The inferred type of 'asserted' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:73:7 - error TS2322: Type 'string' is not assignable to type 'boolean'. -55 export const asserted = (function self() { return self; }) satisfies () => unknown; -   ~~~~~~~~ +73 const invalidNestedOuter: boolean = nestedString.outer; +   ~~~~~~~~~~~~~~~~~~ -producer/index.ts:58:12 - error TS5088: The inferred type of '"a-b"' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:74:7 - error TS2322: Type 'number' is not assignable to type 'string'. -58 static "a-b"() { return Methods["a-b"]; } -   ~~~~~ +74 const invalidNestedInner: string = nestedString.inner; +   ~~~~~~~~~~~~~~~~~~ -producer/index.ts:59:12 - error TS5088: The inferred type of '[key]' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:75:26 - error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. -59 static [key]() { return Methods[key]; } -   ~~~~~ +75 nestedNumber.constrained("wrong"); +   ~~~~~~~ -producer/index.ts:60:5 - error TS5088: The inferred type of 'recur' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -60 recur() { return this.recur; } -   ~~~~~ - -producer/index.ts:65:14 - error TS5088: The inferred type of 'nestedOwner' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -65 export const nestedOwner = { -   ~~~~~~~~~~~ - -producer/index.ts:77:14 - error TS5088: The inferred type of 'nestedNumber' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -77 export const nestedNumber = nestedOwner.make(1); -   ~~~~~~~~~~~~ - -consumer/index.ts:1:88 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -1 import { arrow, expression, first, generic, objectReturn, tupleReturn, shadowed } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:2:64 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -2 import { object, method, accessor, tuple, array, nested } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:3:94 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -3 import { memberTuple, memberArray, quoted, numeric, key, computed, union, specialized } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:4:48 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -4 import { indexed, mapped, viaAnnotation } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:5:86 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -5 import { nextLink, nextCallable, parenthesized, asserted, Methods, overloaded } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:6:51 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -6 import { hiddenAlias, siblingHiddenAliases } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:7:30 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -7 import { nestedNumber } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - -Found 36 errors in 2 files. - -Errors Files - 7 consumer/index.ts:1 - 29 producer/index.ts:1 +Found 18 errors in the same file, starting at: consumer/index.ts:58 //// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo] *rewrite with same content* //// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo.readable.baseline.txt] *rewrite with same content* -producer/tsconfig.json:: -SemanticDiagnostics:: -Signatures:: - consumer/tsconfig.json:: SemanticDiagnostics:: *refresh* /home/src/tslibs/TS/Lib/lib.es2026.full.d.ts +*refresh* /home/src/workspaces/project/producer/dist/index.d.ts *refresh* /home/src/workspaces/project/consumer/index.ts Signatures:: diff --git a/tsc/testdata/baselines/reference/tsc/declarationEmit/reports-dts-generation-errors-with-incremental.js b/tsc/testdata/baselines/reference/tsc/declarationEmit/reports-dts-generation-errors-with-incremental.js index b6761a8e0a818..be79db50cd37b 100644 --- a/tsc/testdata/baselines/reference/tsc/declarationEmit/reports-dts-generation-errors-with-incremental.js +++ b/tsc/testdata/baselines/reference/tsc/declarationEmit/reports-dts-generation-errors-with-incremental.js @@ -46,11 +46,6 @@ Output:: 2 export const api = ky.extend({});    ~~~ -index.ts:2:14 - error TS5088: The inferred type of 'api' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -2 export const api = ky.extend({}); -   ~~~ - TSFILE: /home/src/workspaces/project/index.js TSFILE: /home/src/workspaces/project/tsconfig.tsbuildinfo ../../tslibs/TS/Lib/lib.es2026.full.d.ts @@ -62,7 +57,7 @@ index.ts Matched by default include pattern '**/*' File is ECMAScript module because 'package.json' has field "type" with value "module" -Found 2 errors in the same file, starting at: index.ts:2 +Found 1 error in index.ts:2 //// [/home/src/tslibs/TS/Lib/lib.es2026.full.d.ts] *Lib* /// @@ -92,7 +87,7 @@ import ky from 'ky'; export const api = ky.extend({}); //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[3],"packageJsons":["./node_modules/ky/package.json","./package.json"],"missingPackageJsons":["./node_modules/ky/distribution/package.json"],"fileNames":["lib.es2026.full.d.ts","./node_modules/ky/distribution/index.d.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"778e62a60976d425122b5f7908b0c56f-declare class KyInstance {\n private brand;\n extend(options: Record): KyInstance;\n}\ndeclare const ky: KyInstance;\nexport default ky;","impliedNodeFormat":99},{"version":"0f5091e963c17913313e4969c59e6eb4-import ky from 'ky';\nexport const api = ky.extend({});","impliedNodeFormat":99}],"fileIdsList":[[2]],"options":{"composite":true,"declaration":true,"module":199,"skipLibCheck":true,"skipDefaultLibCheck":true},"referencedMap":[[3,1]],"emitDiagnosticsPerFile":[[3,[{"pos":34,"end":37,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["brand"],"relatedInformation":[{"pos":34,"end":37,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["api"]}]},{"pos":34,"end":37,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["api"]}]]],"emitSignatures":[3]} +{"version":"FakeTSVersion","root":[3],"packageJsons":["./node_modules/ky/package.json","./package.json"],"missingPackageJsons":["./node_modules/ky/distribution/package.json"],"fileNames":["lib.es2026.full.d.ts","./node_modules/ky/distribution/index.d.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"778e62a60976d425122b5f7908b0c56f-declare class KyInstance {\n private brand;\n extend(options: Record): KyInstance;\n}\ndeclare const ky: KyInstance;\nexport default ky;","impliedNodeFormat":99},{"version":"0f5091e963c17913313e4969c59e6eb4-import ky from 'ky';\nexport const api = ky.extend({});","impliedNodeFormat":99}],"fileIdsList":[[2]],"options":{"composite":true,"declaration":true,"module":199,"skipLibCheck":true,"skipDefaultLibCheck":true},"referencedMap":[[3,1]],"emitDiagnosticsPerFile":[[3,[{"pos":34,"end":37,"code":4094,"category":1,"messageKey":"Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094","messageArgs":["brand"],"relatedInformation":[{"pos":34,"end":37,"code":9027,"category":1,"messageKey":"Add_a_type_annotation_to_the_variable_0_9027","messageArgs":["api"]}]}]]],"emitSignatures":[3]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -192,16 +187,6 @@ export const api = ky.extend({}); ] } ] - }, - { - "pos": 34, - "end": 37, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "api" - ] } ] ] @@ -212,7 +197,7 @@ export const api = ky.extend({}); "original": 3 } ], - "size": 2117 + "size": 1929 } tsconfig.json:: @@ -237,11 +222,6 @@ Output:: 2 export const api = ky.extend({});    ~~~ -index.ts:2:14 - error TS5088: The inferred type of 'api' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -2 export const api = ky.extend({}); -   ~~~ - ../../tslibs/TS/Lib/lib.es2026.full.d.ts Default library for target 'ES2026' node_modules/ky/distribution/index.d.ts @@ -251,7 +231,7 @@ index.ts Matched by default include pattern '**/*' File is ECMAScript module because 'package.json' has field "type" with value "module" -Found 2 errors in the same file, starting at: index.ts:2 +Found 1 error in index.ts:2 tsconfig.json:: @@ -280,11 +260,6 @@ Output:: 2 export const api = ky.extend({});    ~~~ -index.ts:2:14 - error TS5088: The inferred type of 'api' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -2 export const api = ky.extend({}); -   ~~~ - ../../tslibs/TS/Lib/lib.es2026.full.d.ts Default library for target 'ES2026' node_modules/ky/distribution/index.d.ts @@ -294,7 +269,7 @@ index.ts Matched by default include pattern '**/*' File is ECMAScript module because 'package.json' has field "type" with value "module" -Found 2 errors in the same file, starting at: index.ts:2 +Found 1 error in index.ts:2 tsconfig.json:: diff --git a/tsc/testdata/baselines/reference/tsc/declarationEmit/reports-dts-generation-errors.js b/tsc/testdata/baselines/reference/tsc/declarationEmit/reports-dts-generation-errors.js index 7d008e73cb7f7..59a8042c4009d 100644 --- a/tsc/testdata/baselines/reference/tsc/declarationEmit/reports-dts-generation-errors.js +++ b/tsc/testdata/baselines/reference/tsc/declarationEmit/reports-dts-generation-errors.js @@ -46,11 +46,6 @@ Output:: 2 export const api = ky.extend({});    ~~~ -index.ts:2:14 - error TS5088: The inferred type of 'api' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -2 export const api = ky.extend({}); -   ~~~ - TSFILE: /home/src/workspaces/project/index.js ../../tslibs/TS/Lib/lib.es2026.full.d.ts Default library for target 'ES2026' @@ -61,7 +56,7 @@ index.ts Matched by default include pattern '**/*' File is ECMAScript module because 'package.json' has field "type" with value "module" -Found 2 errors in the same file, starting at: index.ts:2 +Found 1 error in index.ts:2 //// [/home/src/tslibs/TS/Lib/lib.es2026.full.d.ts] *Lib* /// @@ -107,11 +102,6 @@ Output:: 2 export const api = ky.extend({});    ~~~ -index.ts:2:14 - error TS5088: The inferred type of 'api' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -2 export const api = ky.extend({}); -   ~~~ - TSFILE: /home/src/workspaces/project/index.js ../../tslibs/TS/Lib/lib.es2026.full.d.ts Default library for target 'ES2026' @@ -122,7 +112,7 @@ index.ts Matched by default include pattern '**/*' File is ECMAScript module because 'package.json' has field "type" with value "module" -Found 2 errors in the same file, starting at: index.ts:2 +Found 1 error in index.ts:2 //// [/home/src/workspaces/project/index.js] *rewrite with same content* @@ -149,11 +139,6 @@ Output:: 2 export const api = ky.extend({});    ~~~ -index.ts:2:14 - error TS5088: The inferred type of 'api' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -2 export const api = ky.extend({}); -   ~~~ - TSFILE: /home/src/workspaces/project/index.js TSFILE: /home/src/workspaces/project/tsconfig.tsbuildinfo ../../tslibs/TS/Lib/lib.es2026.full.d.ts @@ -167,7 +152,7 @@ index.ts [HH:MM:SS AM] Updating unchanged output timestamps of project 'tsconfig.json'... -Found 2 errors in the same file, starting at: index.ts:2 +Found 1 error in index.ts:2 //// [/home/src/workspaces/project/index.js] *rewrite with same content* //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *new* From 54c44d739b42f3250e4c0a88184f4add6f1975d6 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Thu, 8 Oct 2026 20:37:22 -0700 Subject: [PATCH 3/5] Cover anonymous recursive declaration serialization The existing coverage centers on recursive types that can be named directly. Anonymous cycles behind optional members, unions, and generic scopes need their own reference points before serialization changes. Record the current diagnostics and emitted declarations so the subsequent fix can be reviewed independently of the added coverage. For 52415 For 64656 --- tsc/internal/execute/tsctests/tsc_test.go | 260 +- .../tests/recursiveFunctionQuickInfo_test.go | 39 +- ...unctionDeclarationSerialization.errors.txt | 364 +++ ...cursiveFunctionDeclarationSerialization.js | 403 +++ ...veFunctionDeclarationSerialization.symbols | 1402 +++++++++ ...siveFunctionDeclarationSerialization.types | 1247 ++++++++ .../recursiveFunctionCallQuickInfo.baseline | 682 +++++ ...ursive-function-declaration-consumption.js | 2600 ++++++++++++++--- ...cursiveFunctionDeclarationSerialization.ts | 235 ++ 9 files changed, 6771 insertions(+), 461 deletions(-) diff --git a/tsc/internal/execute/tsctests/tsc_test.go b/tsc/internal/execute/tsctests/tsc_test.go index 360a2ded0e52e..9366f7b9fdd71 100644 --- a/tsc/internal/execute/tsctests/tsc_test.go +++ b/tsc/internal/execute/tsctests/tsc_test.go @@ -2486,7 +2486,7 @@ func TestTscIncremental(t *testing.T) { subScenario: "recursive function declaration consumption", files: FileMap{ "/home/src/workspaces/project/producer/tsconfig.json": `{ - "compilerOptions": { "strict": true, "composite": true, "outDir": "dist" } + "compilerOptions": { "strict": true, "exactOptionalPropertyTypes": true, "composite": true, "outDir": "dist" } }`, "/home/src/workspaces/project/producer/index.ts": stringtestutil.Dedent(` export const arrow = () => arrow; @@ -2566,9 +2566,146 @@ func TestTscIncremental(t *testing.T) { }, }; export const nestedNumber = nestedOwner.make(1); + type Show = { [K in keyof T]: T[K] } & unknown; + type Resolve = Show<{ + [P in keyof M[K]]: M[K][P] extends "ref" ? Resolve : M[K][P]; + }>; + declare const build: () => { [K in keyof M]: Resolve }; + export const mappedCycle = build<{ Node: { value: number; next: "ref" } }>(); + export const mappedCycleCopy = mappedCycle; + export const nestedCycle = { wrapped: build<{ Node: { value: string; next: "ref" } }>() }; + export const cycleKey = Symbol(); + export const keyedCycles = build<{ + "a-b": { value: string; next: "ref" }; + 0: { value: boolean; next: "ref" }; + [cycleKey]: { value: number; next: "ref" }; + }>(); + export const sharedCycles = { first: mappedCycle, second: mappedCycle }; + type ResolveMutual = Show<{ + [P in keyof M[K]]: M[K][P] extends { ref: infer R extends keyof M } ? ResolveMutual : M[K][P]; + }>; + declare const buildMutual: () => { [K in keyof M]: ResolveMutual }; + export const mutualCycle = buildMutual<{ + First: { value: number; next: { ref: "Second" } }; + Second: { value: string; next: { ref: "First" } }; + }>(); + type ResolveShadowed = Show<{ + [P in keyof M[K]]: M[K][P] extends "ref" ? (shadowedCycle: T) => ResolveShadowed : M[K][P]; + }>; + declare const buildShadowed: () => { [K in keyof M]: ResolveShadowed }; + export const shadowedCycle = buildShadowed<{ Node: { value: number; next: "ref" } }>(); + declare const buildOptional: () => { [K in keyof M]?: Resolve }; + export const optionalCycle = buildOptional<{ Node: { value: number; next: "ref" } }>(); + declare const buildNullable: () => { [K in keyof M]: Resolve | null }; + export const nullableCycle = buildNullable<{ Node: { value: string; next: "ref" } }>(); + declare const wrap: (value: T) => { required: T; optional?: T | null }; + export const mixedCycles = wrap(optionalCycle); + export const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle }; + export const nullableKeys = buildNullable<{ + "a-b": { value: string; next: "ref" }; + 0: { value: boolean; next: "ref" }; + [cycleKey]: { value: number; next: "ref" }; + }>(); + declare const buildNullableRoot: () => Resolve | null; + export const nullableRoot = buildNullableRoot<{ Node: { value: number; next: "ref" } }>(); + declare const buildOptionalRoot: () => Resolve | undefined; + export const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: "ref" } }>(); + type ResolveNullable = Show<{ + [P in keyof M[K]]: M[K][P] extends "ref" ? ResolveNullable | null : M[K][P]; + }>; + declare const buildNullableLinks: () => { [K in keyof M]: ResolveNullable | null }; + export const nullableLinks = buildNullableLinks<{ Node: { value: number; next: "ref" } }>(); + declare const buildOptionalNullableLinks: () => { [K in keyof M]?: ResolveNullable | null }; + export const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: "ref" } }>(); + type ResolveOptional = Show<{ + [P in keyof M[K]]: M[K][P] extends "ref" ? ResolveOptional | undefined : M[K][P]; + }>; + declare const buildNullableOptionalLinks: () => { [K in keyof M]: ResolveOptional | null }; + export const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: "ref" } }>(); + type ResolveNullish = Show<{ + [P in keyof M[K]]: M[K][P] extends "ref" ? ResolveNullish | null | undefined : M[K][P]; + }>; + declare const buildNullishLinks: () => { [K in keyof M]?: ResolveNullish | null }; + export const nullishLinks = buildNullishLinks<{ Node: { value: number; next: "ref" } }>(); + declare const buildMixed: () => { [K in keyof M]?: Resolve | false | null }; + export const mixedUnionCycle = buildMixed<{ Node: { value: number; next: "ref" } }>(); + export const _recursive = 1; + export const factory = () => function self() { return self; }; + export function captured(value: T) { + const node = { value, next: () => node, consume: (other: T) => node }; + return node; + } + export function nestedCaptured(outer: T) { + return (inner: U) => { + const node = { + outer, inner, next: () => node, + shadow: (value: T) => ({ outer, inner, value, next: node }), + }; + return node; + }; + } + export function constrained(key: K) { + const node = { value: null! as T[K], next: () => node }; + return node; + } + export function optionalCaptured(value: T) { + type Node = { value: T; next: Node }; + return null! as { node?: Node | false | null }; + } + export function annotatedCaptured(value: T) { + const node: { value: typeof value; next: typeof node } = { value, next: null! }; + return node; + } + export function recursiveTuple(value: T) { + type Tuple = readonly [T, Tuple]; + return null! as Tuple; + } + export function inferredCaptured() { + type Node = { value: V; next: Node }; + return null! as (T extends () => infer U ? Node : never); + } + export function mappedCaptured() { + type Node = { [K in keyof T]: { value: T[K]; next: Node } }; + return null! as Node; + } + export function freshGeneric(unused: T) { + const recur = (value: U) => recur; + return recur; + } + export function mutualCaptured(left: T, right: U) { + type Left = { left: T; next: Right }; + type Right = { right: U; self: Right; next: Left }; + return { left: null! as Left, right: null! as Right }; + } + export class CapturedClass { + constructor(public value: T) {} + make(inner: U) { + const node = { outer: this.value, inner, next: () => node }; + return node; + } + } + export function covariantClass() { + return class Node { + value!: T; + next(): Node { return this; } + }; + } + export function contravariantClass() { + return class Node { + consume!: (value: T) => void; + next(): Node { return this; } + }; + } + export namespace Nested { + export function captured(value: T) { + const node = { value, next: () => node }; + return node; + } + } + type NonNullable = "shadowed"; `), "/home/src/workspaces/project/consumer/tsconfig.json": `{ - "compilerOptions": { "strict": true, "noEmit": true }, + "compilerOptions": { "strict": true, "exactOptionalPropertyTypes": true, "noEmit": true }, "references": [{ "path": "../producer" }] }`, "/home/src/workspaces/project/consumer/index.ts": stringtestutil.Dedent(` @@ -2579,6 +2716,13 @@ func TestTscIncremental(t *testing.T) { import { nextLink, nextCallable, parenthesized, asserted, Methods, overloaded } from "../producer/dist/index.js"; import { hiddenAlias, siblingHiddenAliases } from "../producer/dist/index.js"; import { nestedNumber } from "../producer/dist/index.js"; + import { mappedCycle, mappedCycleCopy, nestedCycle, cycleKey, keyedCycles, sharedCycles, mutualCycle, shadowedCycle } from "../producer/dist/index.js"; + import { optionalCycle, nullableCycle, mixedCycles, sharedOptionalCycles, nullableKeys, nullableRoot, optionalRoot, nullableLinks, nullishLinks } from "../producer/dist/index.js"; + import { optionalNullableLinks, nullableOptionalLinks } from "../producer/dist/index.js"; + import { mixedUnionCycle, factory, captured, nestedCaptured, constrained, optionalCaptured, annotatedCaptured, recursiveTuple, Nested } from "../producer/dist/index.js"; + import { inferredCaptured, mappedCaptured, freshGeneric, mutualCaptured } from "../producer/dist/index.js"; + import { CapturedClass } from "../producer/dist/index.js"; + import { covariantClass, contravariantClass } from "../producer/dist/index.js"; const a: typeof arrow = arrow()()(); const b: typeof expression = expression()()(); const c: typeof first = first()()(); @@ -2626,9 +2770,102 @@ func TestTscIncremental(t *testing.T) { const copiedInner: string = nestedNumber.copied("inner").inner; const restOuter: number = nestedNumber.rest(true).outer; const restInner: boolean = nestedNumber.rest(true).inner; + const mappedCycleValue: number = mappedCycle.Node.next.next.value; + const copiedMappedValue: number = mappedCycleCopy.Node.next.next.value; + const nestedMappedValue: string = nestedCycle.wrapped.Node.next.next.value; + const quotedMappedValue: string = keyedCycles["a-b"].next.next.value; + const numericMappedValue: boolean = keyedCycles[0].next.next.value; + const symbolMappedValue: number = keyedCycles[cycleKey].next.next.value; + const sharedMappedValue: number = sharedCycles.second.Node.next.next.value; + const mutualFirstValue: number = mutualCycle.First.next.next.value; + const mutualSecondValue: string = mutualCycle.First.next.value; + const shadowedMappedValue: number = shadowedCycle.Node.next(1).next("text").value; + const optionalCycleValue: number | undefined = optionalCycle.Node?.next.next.value; + const nullableCycleValue: string | undefined = nullableCycle.Node?.next.next.value; + const mixedCycleValue: number | undefined = mixedCycles.optional?.Node?.next.next.value; + const mixedRequiredValue: number | undefined = mixedCycles.required.Node?.next.next.value; + const sharedOptionalValue: number | undefined = sharedOptionalCycles.second.Node?.next.next.value; + const quotedNullableValue: string | undefined = nullableKeys["a-b"]?.next.next.value; + const numericNullableValue: boolean | undefined = nullableKeys[0]?.next.next.value; + const symbolNullableValue: number | undefined = nullableKeys[cycleKey]?.next.next.value; + const nullableRootValue: number | undefined = nullableRoot?.next.next.value; + const optionalRootValue: string | undefined = optionalRoot?.next.next.value; + const nullableLinkValue: number | undefined = nullableLinks.Node?.next?.next?.value; + const nullishLinkValue: number | undefined = nullishLinks.Node?.next?.next?.value; + const optionalNullableLinkValue: number | undefined = optionalNullableLinks.Node?.next?.next?.value; + const nullableOptionalLinkValue: number | undefined = nullableOptionalLinks.Node?.next?.next?.value; + type OptionalNode = (typeof optionalCycle)["Node"] & {}; + type NullableNode = (typeof nullableCycle)["Node"] & {}; + type NullableLinkNode = (typeof nullableLinks)["Node"] & {}; + type NullishLinkNode = (typeof nullishLinks)["Node"] & {}; + type OptionalNullableLinkNode = (typeof optionalNullableLinks)["Node"] & {}; + type NullableOptionalLinkNode = (typeof nullableOptionalLinks)["Node"] & {}; + const optionalNextHasNull: null extends OptionalNode["next"] ? true : false = false; + const optionalNextHasUndefined: undefined extends OptionalNode["next"] ? true : false = false; + const nullableNextHasNull: null extends NullableNode["next"] ? true : false = false; + const nullableNextHasUndefined: undefined extends NullableNode["next"] ? true : false = false; + const nullableLinkHasNull: null extends NullableLinkNode["next"] ? true : false = true; + const nullableLinkHasUndefined: undefined extends NullableLinkNode["next"] ? true : false = false; + const nullishLinkHasNull: null extends NullishLinkNode["next"] ? true : false = true; + const nullishLinkHasUndefined: undefined extends NullishLinkNode["next"] ? true : false = true; + const optionalNullableLinkHasNull: null extends OptionalNullableLinkNode["next"] ? true : false = true; + const optionalNullableLinkHasUndefined: undefined extends OptionalNullableLinkNode["next"] ? true : false = false; + const nullableOptionalLinkHasNull: null extends NullableOptionalLinkNode["next"] ? true : false = false; + const nullableOptionalLinkHasUndefined: undefined extends NullableOptionalLinkNode["next"] ? true : false = true; type IsAny = 0 extends (1 & T) ? true : false; const result = arrow()()(); const notAny: false = null as unknown as IsAny; + const mappedNotAny: false = null as unknown as IsAny; + const mutualNotAny: false = null as unknown as IsAny; + const shadowedMappedNotAny: false = null as unknown as IsAny; + const optionalNotAny: IsAny = false; + const nullableNotAny: IsAny = false; + const nullableLinkNotAny: IsAny = false; + const nullishLinkNotAny: IsAny = false; + const optionalNullableLinkNotAny: IsAny = false; + const nullableOptionalLinkNotAny: IsAny = false; + const factoryResult = factory()()()(); + const factoryNotAny: IsAny = false; + const capturedValue: string = captured("text").next().consume("other").value; + const capturedResult = captured("text").next(); + const capturedNotAny: IsAny = false; + const nestedCapturedValue = nestedCaptured(1)("text").shadow(true).next.next(); + const capturedOuter: number = nestedCapturedValue.outer; + const capturedInner: string = nestedCapturedValue.inner; + const constrainedValue: number = constrained<{ value: number }, "value">("value").next().value; + const annotatedCapturedValue: string = annotatedCaptured("text").next.next.value; + const recursiveTupleValue: string = recursiveTuple("text")[1][1][0]; + const namespaceValue: number = Nested.captured(1).next().next().value; + const inferredCapturedValue: string = inferredCaptured<() => string>().next.next.value; + const mappedCapturedValue: number = mappedCaptured<{ value: number }>().value.next.value.value; + const freshGenericValue = freshGeneric(1)("text")(true)(2); + const freshGenericNotAny: IsAny = false; + const mutualCapturedValue: string = mutualCaptured(1, "text").left.next.self.next.next.right; + const mutualCapturedResult = mutualCaptured(1, "text").right.self.next.left; + const mutualCapturedNotAny: IsAny = false; + const capturedClassResult = new CapturedClass("text").make("other").next(); + const capturedClassOuter: string = capturedClassResult.outer; + const capturedClassInner: string = capturedClassResult.inner; + const capturedClassNotAny: IsAny = false; + const Covariant = covariantClass(); + const covariantString = new Covariant(); + const covariantUnknown = new Covariant(); + const covariantWide: typeof covariantUnknown = covariantString.next(); + const covariantNotAny: IsAny = false; + const Contravariant = contravariantClass(); + const contravariantString = new Contravariant(); + const contravariantUnknown = new Contravariant(); + const contravariantNarrow: typeof contravariantString = contravariantUnknown.next(); + const contravariantNotAny: IsAny = false; + const optionalCapturedValue = optionalCaptured("text"); + if (optionalCapturedValue.node) { + const value: string = optionalCapturedValue.node.next.next.value; + const notAny: IsAny = false; + } + if (mixedUnionCycle.Node) { + const value: number = mixedUnionCycle.Node.next.next.value; + const notAny: IsAny = false; + } const invalid: number = arrow()()(); const invalidExpression: number = expression()()(); const invalidObject: number = objectReturn().call; @@ -2647,6 +2884,25 @@ func TestTscIncremental(t *testing.T) { const invalidNestedOuter: boolean = nestedString.outer; const invalidNestedInner: string = nestedString.inner; nestedNumber.constrained("wrong"); + const invalidMappedCycleValue: string = mappedCycle.Node.next.next.value; + const invalidMutualCycleValue: number = mutualCycle.First.next.value; + const invalidShadowedMappedValue: string = shadowedCycle.Node.next(1).next("text").value; + const invalidNullNext: OptionalNode["next"] = null; + const invalidUndefinedNext: OptionalNode["next"] = undefined; + const invalidNullableLinkValue: number = nullableLinks.Node!.next.value; + const invalidNullishLinkValue: number = nullishLinks.Node!.next.value; + captured("text").consume(1); + const invalidRecursiveTupleValue: number = recursiveTuple("text")[1][0]; + const invalidCapturedOuter: string = nestedCapturedValue.outer; + const invalidCapturedInner: number = nestedCapturedValue.inner; + type WithoutFalseOrNullish = T extends false | null | undefined ? never : T; + const invalidMixedNext: WithoutFalseOrNullish["next"] = false; + const invalidInferredCapturedValue: number = inferredCaptured<() => string>().next.value; + const invalidMappedCapturedValue: string = mappedCaptured<{ value: number }>().value.next.value.value; + const invalidMutualCapturedValue: boolean = mutualCaptured(1, "text").right.self.next.left; + const invalidCapturedClassValue: number = capturedClassResult.outer; + const invalidCovariance: typeof covariantString = covariantUnknown.next(); + const invalidContravariance: typeof contravariantUnknown = contravariantString.next(); `), }, commandLineArgs: []string{"--build", "consumer"}, diff --git a/tsc/internal/fourslash/tests/recursiveFunctionQuickInfo_test.go b/tsc/internal/fourslash/tests/recursiveFunctionQuickInfo_test.go index ea030f1b9a49d..da203835241d5 100644 --- a/tsc/internal/fourslash/tests/recursiveFunctionQuickInfo_test.go +++ b/tsc/internal/fourslash/tests/recursiveFunctionQuickInfo_test.go @@ -111,7 +111,38 @@ declare const reused: { }; const copy/*reusedDeclaration*/ = reused; copy.first/*reusedFirst*/(1); -copy.shadowed/*reusedShadowed*/(1);` +copy.shadowed/*reusedShadowed*/(1); +type Show = { [K in keyof T]: T[K] } & unknown; +type Resolve = Show<{ + [P in keyof M[K]]: M[K][P] extends "ref" ? Resolve : M[K][P]; +}>; +declare const build: () => { [K in keyof M]: Resolve }; +const mappedCycle/*mappedCycle*/ = build<{ Node: { value: number; next: "ref" } }>(); +mappedCycle.Node/*mappedNode*/.next/*mappedNext*/.next.value; +const nestedCycle/*nestedMappedCycle*/ = { wrapped: mappedCycle }; +const sharedCycles/*sharedMappedCycles*/ = { first: mappedCycle, second: mappedCycle }; +declare const buildOptional: () => { [K in keyof M]?: Resolve }; +declare const buildNullable: () => { [K in keyof M]: Resolve | null }; +const optionalBox/*optionalMappedCycle*/ = { cycle: buildOptional<{ Node: { value: number; next: "ref" } }>() }; +const nullableBox/*nullableMappedCycle*/ = { cycle: buildNullable<{ Node: { value: number; next: "ref" } }>() }; +type ResolveNullable = Show<{ + [P in keyof M[K]]: M[K][P] extends "ref" ? ResolveNullable | null : M[K][P]; +}>; +declare const buildNullableLinks: () => { [K in keyof M]: ResolveNullable | null }; +const nullableLinkBox/*nullableMappedLinks*/ = { cycle: buildNullableLinks<{ Node: { value: number; next: "ref" } }>() }; +function captured(value: T) { + const node = { value, next: () => node }; + return node; +} +const capturedValue/*capturedValue*/ = captured(1); +capturedValue.next/*capturedNext*/(); +function inferredCaptured() { + type Node = { value: V; next: Node }; + return null! as (T extends () => infer U ? Node : never); +} +const inferredValue/*inferredCapturedValue*/ = inferredCaptured<() => string>(); +declare const buildMixed: () => { [K in keyof M]?: Resolve | false | null }; +const mixedBox/*mixedMappedCycle*/ = { cycle: buildMixed<{ Node: { value: number; next: "ref" } }>() };` f, done := fourslash.NewFourslash(t, nil, content) defer done() f.VerifyNoErrors(t) @@ -129,5 +160,11 @@ copy.shadowed/*reusedShadowed*/(1);` "reusedFirst": {0}, "reusedShadowed": {0}, "nestedNumber": {0}, "nestedGeneric": {0}, "nestedOwnerMake": {0}, "nestedConstrained": {0}, "nestedCopied": {0}, "nestedRest": {0}, + "mappedCycle": {0, 1}, "mappedNode": {0}, "mappedNext": {0}, + "nestedMappedCycle": {0}, "sharedMappedCycles": {0}, + "optionalMappedCycle": {0, 1}, "nullableMappedCycle": {0}, + "nullableMappedLinks": {0}, + "capturedValue": {0, 1}, "capturedNext": {0}, + "inferredCapturedValue": {0}, "mixedMappedCycle": {0}, }) } diff --git a/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.errors.txt b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.errors.txt index f3575f8c60533..676689754d10b 100644 --- a/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.errors.txt @@ -1,12 +1,54 @@ +anonymousBindings.ts(2,14): error TS5088: The inferred type of 'factory' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +anonymousBindings.ts(3,17): error TS5088: The inferred type of 'captured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +anonymousBindings.ts(7,17): error TS5088: The inferred type of 'nestedCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +anonymousBindings.ts(18,17): error TS5088: The inferred type of 'constrained' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +anonymousBindings.ts(22,17): error TS5088: The inferred type of 'optionalCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +anonymousBindings.ts(26,17): error TS5088: The inferred type of 'annotatedCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +anonymousBindings.ts(30,17): error TS5088: The inferred type of 'recursiveTuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +anonymousBindings.ts(34,17): error TS5088: The inferred type of 'inferredCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +anonymousBindings.ts(38,17): error TS5088: The inferred type of 'mappedCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +anonymousBindings.ts(42,17): error TS5088: The inferred type of 'freshGeneric' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +anonymousBindings.ts(46,17): error TS5088: The inferred type of 'mutualCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +anonymousBindings.ts(53,5): error TS5088: The inferred type of 'make' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +anonymousBindings.ts(58,17): error TS5088: The inferred type of 'covariantClass' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +anonymousBindings.ts(64,17): error TS5088: The inferred type of 'contravariantClass' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +anonymousBindings.ts(71,21): error TS5088: The inferred type of 'captured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +anonymousBindings.ts(93,26): error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. +anonymousBindings.ts(94,7): error TS2322: Type 'string' is not assignable to type 'number'. consumer.ts(11,7): error TS2322: Type '() => typeof arrow' is not assignable to type 'number'. consumer.ts(13,25): error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. hiddenReferences.ts(3,12): error TS5088: The inferred type of 'expose' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. hiddenReferences.ts(4,15): error TS5088: The inferred type of 'next' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. hiddenReferences.ts(5,5): error TS5088: The inferred type of 'expose' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +mappedCycles.ts(6,14): error TS5088: The inferred type of 'mappedCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +mappedCycles.ts(7,14): error TS5088: The inferred type of 'mappedCycleCopy' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +mappedCycles.ts(8,14): error TS5088: The inferred type of 'nestedCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +mappedCycles.ts(10,14): error TS5088: The inferred type of 'keyedCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +mappedCycles.ts(15,14): error TS5088: The inferred type of 'sharedCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +mappedCycles.ts(25,14): error TS5088: The inferred type of 'mutualCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +mappedCycles.ts(38,7): error TS2322: Type 'number' is not assignable to type 'string'. +mappedCycles.ts(39,7): error TS2322: Type 'string' is not assignable to type 'number'. +mixedMappedCycle.ts(6,14): error TS5088: The inferred type of 'mixedCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. namedReferences.ts(28,7): error TS2322: Type 'string' is not assignable to type 'number'. namedReferences.ts(29,14): error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. nestedNamedFunctions.ts(5,14): error TS5088: The inferred type of 'factory' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. nestedNamedFunctions.ts(8,17): error TS5088: The inferred type of 'local' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +optionalMappedCycle.ts(6,14): error TS5088: The inferred type of 'optionalCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +optionalMappedCycle.ts(8,14): error TS5088: The inferred type of 'optionalCopy' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +optionalMappedCycle.ts(10,14): error TS5088: The inferred type of 'nullableCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +optionalMappedCycle.ts(12,14): error TS5088: The inferred type of 'mixedCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +optionalMappedCycle.ts(13,14): error TS5088: The inferred type of 'sharedOptionalCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +optionalMappedCycle.ts(15,14): error TS5088: The inferred type of 'nullableKeys' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +optionalMappedCycle.ts(21,14): error TS5088: The inferred type of 'nullableRoot' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +optionalMappedCycle.ts(23,14): error TS5088: The inferred type of 'optionalRoot' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +optionalMappedCycle.ts(28,14): error TS5088: The inferred type of 'nullableLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +optionalMappedCycle.ts(30,14): error TS5088: The inferred type of 'optionalNullableLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +optionalMappedCycle.ts(35,14): error TS5088: The inferred type of 'nullableOptionalLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +optionalMappedCycle.ts(40,14): error TS5088: The inferred type of 'nullishLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +optionalMappedCycle.ts(73,7): error TS2322: Type 'null' is not assignable to type '{ value: number; next: any; }'. +optionalMappedCycle.ts(74,7): error TS2322: Type 'undefined' is not assignable to type '{ value: number; next: any; }'. +optionalMappedCycle.ts(75,42): error TS2531: Object is possibly 'null'. +optionalMappedCycle.ts(76,41): error TS2533: Object is possibly 'null' or 'undefined'. recursiveAnnotations.ts(2,15): error TS2502: 'tuple' is referenced directly or indirectly in its own type annotation. recursiveAnnotations.ts(3,15): error TS2502: 'array' is referenced directly or indirectly in its own type annotation. recursiveAnnotations.ts(8,15): error TS2502: 'union' is referenced directly or indirectly in its own type annotation. @@ -15,6 +57,7 @@ recursiveObject.ts(1,17): error TS5088: The inferred type of 'recursiveObject' r recursiveObject.ts(12,7): error TS2322: Type '(arg: U) => { call: any; consume: (arg: number) => any; }' is not assignable to type 'number'. recursiveObject.ts(13,16): error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. recursiveStructures.ts(47,7): error TS2322: Type 'string' is not assignable to type 'number'. +shadowedMappedCycle.ts(6,14): error TS5088: The inferred type of 'shadowedCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. ==== script.ts (0 errors) ==== @@ -293,4 +336,325 @@ recursiveStructures.ts(47,7): error TS2322: Type 'string' is not assignable to t export declare const inferred: Inferred<(value: number) => { next: typeof reused }>; export const inferredCopy = inferred; const inferredValue: string = inferredCopy.next(1).second("text").value; + +==== mappedCycles.ts (8 errors) ==== + type Show = { [K in keyof T]: T[K] } & unknown; + type Resolve = Show<{ + [P in keyof M[K]]: M[K][P] extends "ref" ? Resolve : M[K][P]; + }>; + declare const build: () => { [K in keyof M]: Resolve }; + export const mappedCycle = build<{ Node: { value: number; next: "ref" } }>(); + ~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'mappedCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + export const mappedCycleCopy = mappedCycle; + ~~~~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'mappedCycleCopy' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + export const nestedCycle = { wrapped: build<{ Node: { value: string; next: "ref" } }>() }; + ~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'nestedCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + export const cycleKey = Symbol(); + export const keyedCycles = build<{ + ~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'keyedCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + "a-b": { value: string; next: "ref" }; + 0: { value: boolean; next: "ref" }; + [cycleKey]: { value: number; next: "ref" }; + }>(); + export const sharedCycles = { + ~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'sharedCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + first: mappedCycle, + second: mappedCycle, + }; + export const broadCycle: { Node: unknown } = mappedCycle; + + type ResolveMutual = Show<{ + [P in keyof M[K]]: M[K][P] extends { ref: infer R extends keyof M } ? ResolveMutual : M[K][P]; + }>; + declare const buildMutual: () => { [K in keyof M]: ResolveMutual }; + export const mutualCycle = buildMutual<{ + ~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'mutualCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + First: { value: number; next: { ref: "Second" } }; + Second: { value: string; next: { ref: "First" } }; + }>(); + + const mappedValue: number = mappedCycle.Node.next.next.value; + const nestedMappedValue: string = nestedCycle.wrapped.Node.next.next.value; + const quotedMappedValue: string = keyedCycles["a-b"].next.next.value; + const numericMappedValue: boolean = keyedCycles[0].next.next.value; + const symbolMappedValue: number = keyedCycles[cycleKey].next.next.value; + const sharedMappedValue: number = sharedCycles.second.Node.next.next.value; + const mutualFirstValue: number = mutualCycle.First.next.next.value; + const mutualSecondValue: string = mutualCycle.First.next.value; + const invalidMappedValue: string = mappedCycle.Node.next.next.value; + ~~~~~~~~~~~~~~~~~~ +!!! error TS2322: Type 'number' is not assignable to type 'string'. + const invalidMutualValue: number = mutualCycle.First.next.value; + ~~~~~~~~~~~~~~~~~~ +!!! error TS2322: Type 'string' is not assignable to type 'number'. + +==== optionalMappedCycle.ts (16 errors) ==== + type Show = { [K in keyof T]: T[K] } & unknown; + type Resolve = Show<{ + [P in keyof M[K]]: M[K][P] extends "ref" ? Resolve : M[K][P]; + }>; + declare const build: () => { [K in keyof M]?: Resolve }; + export const optionalCycle = build<{ Node: { value: number; next: "ref" } }>(); + ~~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'optionalCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + const optionalValue: number | undefined = optionalCycle.Node?.next.next.value; + export const optionalCopy = optionalCycle; + ~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'optionalCopy' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + declare const buildNullable: () => { [K in keyof M]: Resolve | null }; + export const nullableCycle = buildNullable<{ Node: { value: string; next: "ref" } }>(); + ~~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'nullableCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + declare const wrap: (value: T) => { required: T; optional?: T | null }; + export const mixedCycles = wrap(optionalCycle); + ~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'mixedCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + export const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle }; + ~~~~~~~~~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'sharedOptionalCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + export const nullableKey = Symbol(); + export const nullableKeys = buildNullable<{ + ~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'nullableKeys' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + "a-b": { value: string; next: "ref" }; + 0: { value: boolean; next: "ref" }; + [nullableKey]: { value: number; next: "ref" }; + }>(); + declare const buildNullableRoot: () => Resolve | null; + export const nullableRoot = buildNullableRoot<{ Node: { value: number; next: "ref" } }>(); + ~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'nullableRoot' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + declare const buildOptionalRoot: () => Resolve | undefined; + export const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: "ref" } }>(); + ~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'optionalRoot' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + type ResolveNullable = Show<{ + [P in keyof M[K]]: M[K][P] extends "ref" ? ResolveNullable | null : M[K][P]; + }>; + declare const buildNullableLinks: () => { [K in keyof M]: ResolveNullable | null }; + export const nullableLinks = buildNullableLinks<{ Node: { value: number; next: "ref" } }>(); + ~~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'nullableLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + declare const buildOptionalNullableLinks: () => { [K in keyof M]?: ResolveNullable | null }; + export const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: "ref" } }>(); + ~~~~~~~~~~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'optionalNullableLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + type ResolveOptional = Show<{ + [P in keyof M[K]]: M[K][P] extends "ref" ? ResolveOptional | undefined : M[K][P]; + }>; + declare const buildNullableOptionalLinks: () => { [K in keyof M]: ResolveOptional | null }; + export const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: "ref" } }>(); + ~~~~~~~~~~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'nullableOptionalLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + type ResolveNullish = Show<{ + [P in keyof M[K]]: M[K][P] extends "ref" ? ResolveNullish | null | undefined : M[K][P]; + }>; + declare const buildNullishLinks: () => { [K in keyof M]?: ResolveNullish | null }; + export const nullishLinks = buildNullishLinks<{ Node: { value: number; next: "ref" } }>(); + ~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'nullishLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + type NonNullable = "shadowed"; + type OptionalNode = (typeof optionalCycle)["Node"] & {}; + type NullableNode = (typeof nullableCycle)["Node"] & {}; + type NullableLinkNode = (typeof nullableLinks)["Node"] & {}; + type NullishLinkNode = (typeof nullishLinks)["Node"] & {}; + type OptionalNullableLinkNode = (typeof optionalNullableLinks)["Node"] & {}; + type NullableOptionalLinkNode = (typeof nullableOptionalLinks)["Node"] & {}; + const copiedValue: number | undefined = optionalCopy.Node?.next.next.value; + const nullableValue: string | undefined = nullableCycle.Node?.next.next.value; + const mixedValue: number | undefined = mixedCycles.optional?.Node?.next.next.value; + const sharedValue: number | undefined = sharedOptionalCycles.second.Node?.next.next.value; + const quotedValue: string | undefined = nullableKeys["a-b"]?.next.next.value; + const numericValue: boolean | undefined = nullableKeys[0]?.next.next.value; + const symbolValue: number | undefined = nullableKeys[nullableKey]?.next.next.value; + const nullableRootValue: number | undefined = nullableRoot?.next.next.value; + const optionalRootValue: string | undefined = optionalRoot?.next.next.value; + const nullableLinkValue: number | undefined = nullableLinks.Node?.next?.next?.value; + const nullishLinkValue: number | undefined = nullishLinks.Node?.next?.next?.value; + const optionalNullableLinkValue: number | undefined = optionalNullableLinks.Node?.next?.next?.value; + const nullableOptionalLinkValue: number | undefined = nullableOptionalLinks.Node?.next?.next?.value; + const optionalNextHasNull: null extends OptionalNode["next"] ? true : false = false; + const optionalNextHasUndefined: undefined extends OptionalNode["next"] ? true : false = false; + const nullableNextHasNull: null extends NullableNode["next"] ? true : false = false; + const nullableNextHasUndefined: undefined extends NullableNode["next"] ? true : false = false; + const nullableLinkHasNull: null extends NullableLinkNode["next"] ? true : false = true; + const nullableLinkHasUndefined: undefined extends NullableLinkNode["next"] ? true : false = false; + const nullishLinkHasNull: null extends NullishLinkNode["next"] ? true : false = true; + const nullishLinkHasUndefined: undefined extends NullishLinkNode["next"] ? true : false = true; + const optionalNullableLinkHasNull: null extends OptionalNullableLinkNode["next"] ? true : false = true; + const optionalNullableLinkHasUndefined: undefined extends OptionalNullableLinkNode["next"] ? true : false = false; + const nullableOptionalLinkHasNull: null extends NullableOptionalLinkNode["next"] ? true : false = false; + const nullableOptionalLinkHasUndefined: undefined extends NullableOptionalLinkNode["next"] ? true : false = true; + const invalidNullNext: OptionalNode["next"] = null; + ~~~~~~~~~~~~~~~ +!!! error TS2322: Type 'null' is not assignable to type '{ value: number; next: any; }'. + const invalidUndefinedNext: OptionalNode["next"] = undefined; + ~~~~~~~~~~~~~~~~~~~~ +!!! error TS2322: Type 'undefined' is not assignable to type '{ value: number; next: any; }'. + const invalidNullableLinkValue: number = nullableLinks.Node!.next.value; + ~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2531: Object is possibly 'null'. + const invalidNullishLinkValue: number = nullishLinks.Node!.next.value; + ~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2533: Object is possibly 'null' or 'undefined'. + +==== mixedMappedCycle.ts (1 errors) ==== + type Show = { [K in keyof T]: T[K] } & unknown; + type Resolve = Show<{ + [P in keyof M[K]]: M[K][P] extends "ref" ? Resolve : M[K][P]; + }>; + declare const build: () => { [K in keyof M]: Resolve | false | null }; + export const mixedCycle = build<{ Node: { value: number; next: "ref" } }>(); + ~~~~~~~~~~ +!!! error TS5088: The inferred type of 'mixedCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + if (mixedCycle.Node) { + const value: number = mixedCycle.Node.next.next.value; + } + +==== anonymousBindings.ts (17 errors) ==== + export const _recursive = 1; + export const factory = () => function self() { return self; }; + ~~~~~~~ +!!! error TS5088: The inferred type of 'factory' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + export function captured(value: T) { + ~~~~~~~~ +!!! error TS5088: The inferred type of 'captured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + const node = { value, next: () => node, consume: (other: T) => node }; + return node; + } + export function nestedCaptured(outer: T) { + ~~~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'nestedCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + return (inner: U) => { + const node = { + outer, + inner, + next: () => node, + shadow: (value: T) => ({ outer, inner, value, next: node }), + }; + return node; + }; + } + export function constrained(key: K) { + ~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'constrained' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + const node = { value: null! as T[K], next: () => node }; + return node; + } + export function optionalCaptured(value: T) { + ~~~~~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'optionalCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + type Node = { value: T; next: Node }; + return null! as { node?: Node | false | null }; + } + export function annotatedCaptured(value: T) { + ~~~~~~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'annotatedCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + const node: { value: typeof value; next: typeof node } = { value, next: null! }; + return node; + } + export function recursiveTuple(value: T) { + ~~~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'recursiveTuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + type Tuple = readonly [T, Tuple]; + return null! as Tuple; + } + export function inferredCaptured() { + ~~~~~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'inferredCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + type Node = { value: V; next: Node }; + return null! as (T extends () => infer U ? Node : never); + } + export function mappedCaptured() { + ~~~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'mappedCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + type Node = { [K in keyof T]: { value: T[K]; next: Node } }; + return null! as Node; + } + export function freshGeneric(unused: T) { + ~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'freshGeneric' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + const recur = (value: U) => recur; + return recur; + } + export function mutualCaptured(left: T, right: U) { + ~~~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'mutualCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + type Left = { left: T; next: Right }; + type Right = { right: U; self: Right; next: Left }; + return { left: null! as Left, right: null! as Right }; + } + export class CapturedClass { + constructor(public value: T) {} + make(inner: U) { + ~~~~ +!!! error TS5088: The inferred type of 'make' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + const node = { outer: this.value, inner, next: () => node }; + return node; + } + } + export function covariantClass() { + ~~~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'covariantClass' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + return class Node { + value!: T; + next(): Node { return this; } + }; + } + export function contravariantClass() { + ~~~~~~~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'contravariantClass' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + return class Node { + consume!: (value: T) => void; + next(): Node { return this; } + }; + } + export namespace Nested { + export function captured(value: T) { + ~~~~~~~~ +!!! error TS5088: The inferred type of 'captured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + const node = { value, next: () => node }; + return node; + } + } + const capturedValue: string = captured("text").next().consume("other").value; + const nestedValue = nestedCaptured(1)("text").shadow(true).next.next(); + const nestedOuter: number = nestedValue.outer; + const nestedInner: string = nestedValue.inner; + const constrainedValue: number = constrained<{ value: number }, "value">("value").next().value; + const annotatedValue: string = annotatedCaptured("text").next.next.value; + const tupleValue: string = recursiveTuple("text")[1][1][0]; + const namespaceValue: number = Nested.captured(1).next().next().value; + const inferredValue: string = inferredCaptured<() => string>().next.next.value; + const mappedValue: number = mappedCaptured<{ value: number }>().value.next.value.value; + const freshValue = freshGeneric(1)("text")(true)(2); + const mutualValue: string = mutualCaptured(1, "text").left.next.self.next.next.right; + const classValue: string = new CapturedClass("text").make("other").next().outer; + const optional = optionalCaptured("text"); + if (optional.node) { + const value: string = optional.node.next.next.value; + } + captured("text").consume(1); + ~ +!!! error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. + const invalidTupleValue: number = recursiveTuple("text")[1][0]; + ~~~~~~~~~~~~~~~~~ +!!! error TS2322: Type 'string' is not assignable to type 'number'. + +==== shadowedMappedCycle.ts (1 errors) ==== + type Show = { [K in keyof T]: T[K] } & unknown; + type Resolve = Show<{ + [P in keyof M[K]]: M[K][P] extends "ref" ? (shadowedCycle: T) => Resolve : M[K][P]; + }>; + declare const build: () => { [K in keyof M]: Resolve }; + export const shadowedCycle = build<{ Node: { value: number; next: "ref" } }>(); + ~~~~~~~~~~~~~ +!!! error TS5088: The inferred type of 'shadowedCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + const shadowedValue: number = shadowedCycle.Node.next(1).next("text").value; \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.js b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.js index df714bfc4e219..a80d20aab73f8 100644 --- a/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.js +++ b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.js @@ -243,6 +243,241 @@ export declare const inferred: Inferred<(value: number) => { next: typeof reused export const inferredCopy = inferred; const inferredValue: string = inferredCopy.next(1).second("text").value; +//// [mappedCycles.ts] +type Show = { [K in keyof T]: T[K] } & unknown; +type Resolve = Show<{ + [P in keyof M[K]]: M[K][P] extends "ref" ? Resolve : M[K][P]; +}>; +declare const build: () => { [K in keyof M]: Resolve }; +export const mappedCycle = build<{ Node: { value: number; next: "ref" } }>(); +export const mappedCycleCopy = mappedCycle; +export const nestedCycle = { wrapped: build<{ Node: { value: string; next: "ref" } }>() }; +export const cycleKey = Symbol(); +export const keyedCycles = build<{ + "a-b": { value: string; next: "ref" }; + 0: { value: boolean; next: "ref" }; + [cycleKey]: { value: number; next: "ref" }; +}>(); +export const sharedCycles = { + first: mappedCycle, + second: mappedCycle, +}; +export const broadCycle: { Node: unknown } = mappedCycle; + +type ResolveMutual = Show<{ + [P in keyof M[K]]: M[K][P] extends { ref: infer R extends keyof M } ? ResolveMutual : M[K][P]; +}>; +declare const buildMutual: () => { [K in keyof M]: ResolveMutual }; +export const mutualCycle = buildMutual<{ + First: { value: number; next: { ref: "Second" } }; + Second: { value: string; next: { ref: "First" } }; +}>(); + +const mappedValue: number = mappedCycle.Node.next.next.value; +const nestedMappedValue: string = nestedCycle.wrapped.Node.next.next.value; +const quotedMappedValue: string = keyedCycles["a-b"].next.next.value; +const numericMappedValue: boolean = keyedCycles[0].next.next.value; +const symbolMappedValue: number = keyedCycles[cycleKey].next.next.value; +const sharedMappedValue: number = sharedCycles.second.Node.next.next.value; +const mutualFirstValue: number = mutualCycle.First.next.next.value; +const mutualSecondValue: string = mutualCycle.First.next.value; +const invalidMappedValue: string = mappedCycle.Node.next.next.value; +const invalidMutualValue: number = mutualCycle.First.next.value; + +//// [optionalMappedCycle.ts] +type Show = { [K in keyof T]: T[K] } & unknown; +type Resolve = Show<{ + [P in keyof M[K]]: M[K][P] extends "ref" ? Resolve : M[K][P]; +}>; +declare const build: () => { [K in keyof M]?: Resolve }; +export const optionalCycle = build<{ Node: { value: number; next: "ref" } }>(); +const optionalValue: number | undefined = optionalCycle.Node?.next.next.value; +export const optionalCopy = optionalCycle; +declare const buildNullable: () => { [K in keyof M]: Resolve | null }; +export const nullableCycle = buildNullable<{ Node: { value: string; next: "ref" } }>(); +declare const wrap: (value: T) => { required: T; optional?: T | null }; +export const mixedCycles = wrap(optionalCycle); +export const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle }; +export const nullableKey = Symbol(); +export const nullableKeys = buildNullable<{ + "a-b": { value: string; next: "ref" }; + 0: { value: boolean; next: "ref" }; + [nullableKey]: { value: number; next: "ref" }; +}>(); +declare const buildNullableRoot: () => Resolve | null; +export const nullableRoot = buildNullableRoot<{ Node: { value: number; next: "ref" } }>(); +declare const buildOptionalRoot: () => Resolve | undefined; +export const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: "ref" } }>(); +type ResolveNullable = Show<{ + [P in keyof M[K]]: M[K][P] extends "ref" ? ResolveNullable | null : M[K][P]; +}>; +declare const buildNullableLinks: () => { [K in keyof M]: ResolveNullable | null }; +export const nullableLinks = buildNullableLinks<{ Node: { value: number; next: "ref" } }>(); +declare const buildOptionalNullableLinks: () => { [K in keyof M]?: ResolveNullable | null }; +export const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: "ref" } }>(); +type ResolveOptional = Show<{ + [P in keyof M[K]]: M[K][P] extends "ref" ? ResolveOptional | undefined : M[K][P]; +}>; +declare const buildNullableOptionalLinks: () => { [K in keyof M]: ResolveOptional | null }; +export const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: "ref" } }>(); +type ResolveNullish = Show<{ + [P in keyof M[K]]: M[K][P] extends "ref" ? ResolveNullish | null | undefined : M[K][P]; +}>; +declare const buildNullishLinks: () => { [K in keyof M]?: ResolveNullish | null }; +export const nullishLinks = buildNullishLinks<{ Node: { value: number; next: "ref" } }>(); +type NonNullable = "shadowed"; +type OptionalNode = (typeof optionalCycle)["Node"] & {}; +type NullableNode = (typeof nullableCycle)["Node"] & {}; +type NullableLinkNode = (typeof nullableLinks)["Node"] & {}; +type NullishLinkNode = (typeof nullishLinks)["Node"] & {}; +type OptionalNullableLinkNode = (typeof optionalNullableLinks)["Node"] & {}; +type NullableOptionalLinkNode = (typeof nullableOptionalLinks)["Node"] & {}; +const copiedValue: number | undefined = optionalCopy.Node?.next.next.value; +const nullableValue: string | undefined = nullableCycle.Node?.next.next.value; +const mixedValue: number | undefined = mixedCycles.optional?.Node?.next.next.value; +const sharedValue: number | undefined = sharedOptionalCycles.second.Node?.next.next.value; +const quotedValue: string | undefined = nullableKeys["a-b"]?.next.next.value; +const numericValue: boolean | undefined = nullableKeys[0]?.next.next.value; +const symbolValue: number | undefined = nullableKeys[nullableKey]?.next.next.value; +const nullableRootValue: number | undefined = nullableRoot?.next.next.value; +const optionalRootValue: string | undefined = optionalRoot?.next.next.value; +const nullableLinkValue: number | undefined = nullableLinks.Node?.next?.next?.value; +const nullishLinkValue: number | undefined = nullishLinks.Node?.next?.next?.value; +const optionalNullableLinkValue: number | undefined = optionalNullableLinks.Node?.next?.next?.value; +const nullableOptionalLinkValue: number | undefined = nullableOptionalLinks.Node?.next?.next?.value; +const optionalNextHasNull: null extends OptionalNode["next"] ? true : false = false; +const optionalNextHasUndefined: undefined extends OptionalNode["next"] ? true : false = false; +const nullableNextHasNull: null extends NullableNode["next"] ? true : false = false; +const nullableNextHasUndefined: undefined extends NullableNode["next"] ? true : false = false; +const nullableLinkHasNull: null extends NullableLinkNode["next"] ? true : false = true; +const nullableLinkHasUndefined: undefined extends NullableLinkNode["next"] ? true : false = false; +const nullishLinkHasNull: null extends NullishLinkNode["next"] ? true : false = true; +const nullishLinkHasUndefined: undefined extends NullishLinkNode["next"] ? true : false = true; +const optionalNullableLinkHasNull: null extends OptionalNullableLinkNode["next"] ? true : false = true; +const optionalNullableLinkHasUndefined: undefined extends OptionalNullableLinkNode["next"] ? true : false = false; +const nullableOptionalLinkHasNull: null extends NullableOptionalLinkNode["next"] ? true : false = false; +const nullableOptionalLinkHasUndefined: undefined extends NullableOptionalLinkNode["next"] ? true : false = true; +const invalidNullNext: OptionalNode["next"] = null; +const invalidUndefinedNext: OptionalNode["next"] = undefined; +const invalidNullableLinkValue: number = nullableLinks.Node!.next.value; +const invalidNullishLinkValue: number = nullishLinks.Node!.next.value; + +//// [mixedMappedCycle.ts] +type Show = { [K in keyof T]: T[K] } & unknown; +type Resolve = Show<{ + [P in keyof M[K]]: M[K][P] extends "ref" ? Resolve : M[K][P]; +}>; +declare const build: () => { [K in keyof M]: Resolve | false | null }; +export const mixedCycle = build<{ Node: { value: number; next: "ref" } }>(); +if (mixedCycle.Node) { + const value: number = mixedCycle.Node.next.next.value; +} + +//// [anonymousBindings.ts] +export const _recursive = 1; +export const factory = () => function self() { return self; }; +export function captured(value: T) { + const node = { value, next: () => node, consume: (other: T) => node }; + return node; +} +export function nestedCaptured(outer: T) { + return (inner: U) => { + const node = { + outer, + inner, + next: () => node, + shadow: (value: T) => ({ outer, inner, value, next: node }), + }; + return node; + }; +} +export function constrained(key: K) { + const node = { value: null! as T[K], next: () => node }; + return node; +} +export function optionalCaptured(value: T) { + type Node = { value: T; next: Node }; + return null! as { node?: Node | false | null }; +} +export function annotatedCaptured(value: T) { + const node: { value: typeof value; next: typeof node } = { value, next: null! }; + return node; +} +export function recursiveTuple(value: T) { + type Tuple = readonly [T, Tuple]; + return null! as Tuple; +} +export function inferredCaptured() { + type Node = { value: V; next: Node }; + return null! as (T extends () => infer U ? Node : never); +} +export function mappedCaptured() { + type Node = { [K in keyof T]: { value: T[K]; next: Node } }; + return null! as Node; +} +export function freshGeneric(unused: T) { + const recur = (value: U) => recur; + return recur; +} +export function mutualCaptured(left: T, right: U) { + type Left = { left: T; next: Right }; + type Right = { right: U; self: Right; next: Left }; + return { left: null! as Left, right: null! as Right }; +} +export class CapturedClass { + constructor(public value: T) {} + make(inner: U) { + const node = { outer: this.value, inner, next: () => node }; + return node; + } +} +export function covariantClass() { + return class Node { + value!: T; + next(): Node { return this; } + }; +} +export function contravariantClass() { + return class Node { + consume!: (value: T) => void; + next(): Node { return this; } + }; +} +export namespace Nested { + export function captured(value: T) { + const node = { value, next: () => node }; + return node; + } +} +const capturedValue: string = captured("text").next().consume("other").value; +const nestedValue = nestedCaptured(1)("text").shadow(true).next.next(); +const nestedOuter: number = nestedValue.outer; +const nestedInner: string = nestedValue.inner; +const constrainedValue: number = constrained<{ value: number }, "value">("value").next().value; +const annotatedValue: string = annotatedCaptured("text").next.next.value; +const tupleValue: string = recursiveTuple("text")[1][1][0]; +const namespaceValue: number = Nested.captured(1).next().next().value; +const inferredValue: string = inferredCaptured<() => string>().next.next.value; +const mappedValue: number = mappedCaptured<{ value: number }>().value.next.value.value; +const freshValue = freshGeneric(1)("text")(true)(2); +const mutualValue: string = mutualCaptured(1, "text").left.next.self.next.next.right; +const classValue: string = new CapturedClass("text").make("other").next().outer; +const optional = optionalCaptured("text"); +if (optional.node) { + const value: string = optional.node.next.next.value; +} +captured("text").consume(1); +const invalidTupleValue: number = recursiveTuple("text")[1][0]; + +//// [shadowedMappedCycle.ts] +type Show = { [K in keyof T]: T[K] } & unknown; +type Resolve = Show<{ + [P in keyof M[K]]: M[K][P] extends "ref" ? (shadowedCycle: T) => Resolve : M[K][P]; +}>; +declare const build: () => { [K in keyof M]: Resolve }; +export const shadowedCycle = build<{ Node: { value: number; next: "ref" } }>(); +const shadowedValue: number = shadowedCycle.Node.next(1).next("text").value; + //// [script.js] "use strict"; @@ -446,6 +681,174 @@ const restValue = copy.first(1).next.second(2).value; const shadowedValue = copy.shadowed(1).next; export const inferredCopy = inferred; const inferredValue = inferredCopy.next(1).second("text").value; +//// [mappedCycles.js] +export const mappedCycle = build(); +export const mappedCycleCopy = mappedCycle; +export const nestedCycle = { wrapped: build() }; +export const cycleKey = Symbol(); +export const keyedCycles = build(); +export const sharedCycles = { + first: mappedCycle, + second: mappedCycle, +}; +export const broadCycle = mappedCycle; +export const mutualCycle = buildMutual(); +const mappedValue = mappedCycle.Node.next.next.value; +const nestedMappedValue = nestedCycle.wrapped.Node.next.next.value; +const quotedMappedValue = keyedCycles["a-b"].next.next.value; +const numericMappedValue = keyedCycles[0].next.next.value; +const symbolMappedValue = keyedCycles[cycleKey].next.next.value; +const sharedMappedValue = sharedCycles.second.Node.next.next.value; +const mutualFirstValue = mutualCycle.First.next.next.value; +const mutualSecondValue = mutualCycle.First.next.value; +const invalidMappedValue = mappedCycle.Node.next.next.value; +const invalidMutualValue = mutualCycle.First.next.value; +//// [optionalMappedCycle.js] +export const optionalCycle = build(); +const optionalValue = optionalCycle.Node?.next.next.value; +export const optionalCopy = optionalCycle; +export const nullableCycle = buildNullable(); +export const mixedCycles = wrap(optionalCycle); +export const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle }; +export const nullableKey = Symbol(); +export const nullableKeys = buildNullable(); +export const nullableRoot = buildNullableRoot(); +export const optionalRoot = buildOptionalRoot(); +export const nullableLinks = buildNullableLinks(); +export const optionalNullableLinks = buildOptionalNullableLinks(); +export const nullableOptionalLinks = buildNullableOptionalLinks(); +export const nullishLinks = buildNullishLinks(); +const copiedValue = optionalCopy.Node?.next.next.value; +const nullableValue = nullableCycle.Node?.next.next.value; +const mixedValue = mixedCycles.optional?.Node?.next.next.value; +const sharedValue = sharedOptionalCycles.second.Node?.next.next.value; +const quotedValue = nullableKeys["a-b"]?.next.next.value; +const numericValue = nullableKeys[0]?.next.next.value; +const symbolValue = nullableKeys[nullableKey]?.next.next.value; +const nullableRootValue = nullableRoot?.next.next.value; +const optionalRootValue = optionalRoot?.next.next.value; +const nullableLinkValue = nullableLinks.Node?.next?.next?.value; +const nullishLinkValue = nullishLinks.Node?.next?.next?.value; +const optionalNullableLinkValue = optionalNullableLinks.Node?.next?.next?.value; +const nullableOptionalLinkValue = nullableOptionalLinks.Node?.next?.next?.value; +const optionalNextHasNull = false; +const optionalNextHasUndefined = false; +const nullableNextHasNull = false; +const nullableNextHasUndefined = false; +const nullableLinkHasNull = true; +const nullableLinkHasUndefined = false; +const nullishLinkHasNull = true; +const nullishLinkHasUndefined = true; +const optionalNullableLinkHasNull = true; +const optionalNullableLinkHasUndefined = false; +const nullableOptionalLinkHasNull = false; +const nullableOptionalLinkHasUndefined = true; +const invalidNullNext = null; +const invalidUndefinedNext = undefined; +const invalidNullableLinkValue = nullableLinks.Node.next.value; +const invalidNullishLinkValue = nullishLinks.Node.next.value; +//// [mixedMappedCycle.js] +export const mixedCycle = build(); +if (mixedCycle.Node) { + const value = mixedCycle.Node.next.next.value; +} +//// [anonymousBindings.js] +export const _recursive = 1; +export const factory = () => function self() { return self; }; +export function captured(value) { + const node = { value, next: () => node, consume: (other) => node }; + return node; +} +export function nestedCaptured(outer) { + return (inner) => { + const node = { + outer, + inner, + next: () => node, + shadow: (value) => ({ outer, inner, value, next: node }), + }; + return node; + }; +} +export function constrained(key) { + const node = { value: null, next: () => node }; + return node; +} +export function optionalCaptured(value) { + return null; +} +export function annotatedCaptured(value) { + const node = { value, next: null }; + return node; +} +export function recursiveTuple(value) { + return null; +} +export function inferredCaptured() { + return null; +} +export function mappedCaptured() { + return null; +} +export function freshGeneric(unused) { + const recur = (value) => recur; + return recur; +} +export function mutualCaptured(left, right) { + return { left: null, right: null }; +} +export class CapturedClass { + value; + constructor(value) { + this.value = value; + } + make(inner) { + const node = { outer: this.value, inner, next: () => node }; + return node; + } +} +export function covariantClass() { + return class Node { + value; + next() { return this; } + }; +} +export function contravariantClass() { + return class Node { + consume; + next() { return this; } + }; +} +export var Nested; +(function (Nested) { + function captured(value) { + const node = { value, next: () => node }; + return node; + } + Nested.captured = captured; +})(Nested || (Nested = {})); +const capturedValue = captured("text").next().consume("other").value; +const nestedValue = nestedCaptured(1)("text").shadow(true).next.next(); +const nestedOuter = nestedValue.outer; +const nestedInner = nestedValue.inner; +const constrainedValue = constrained("value").next().value; +const annotatedValue = annotatedCaptured("text").next.next.value; +const tupleValue = recursiveTuple("text")[1][1][0]; +const namespaceValue = Nested.captured(1).next().next().value; +const inferredValue = inferredCaptured().next.next.value; +const mappedValue = mappedCaptured().value.next.value.value; +const freshValue = freshGeneric(1)("text")(true)(2); +const mutualValue = mutualCaptured(1, "text").left.next.self.next.next.right; +const classValue = new CapturedClass("text").make("other").next().outer; +const optional = optionalCaptured("text"); +if (optional.node) { + const value = optional.node.next.next.value; +} +captured("text").consume(1); +const invalidTupleValue = recursiveTuple("text")[1][0]; +//// [shadowedMappedCycle.js] +export const shadowedCycle = build(); +const shadowedValue = shadowedCycle.Node.next(1).next("text").value; //// [script.d.ts] diff --git a/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.symbols b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.symbols index 21c1a7c50fbca..ec5a88fc29d19 100644 --- a/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.symbols +++ b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.symbols @@ -1187,3 +1187,1405 @@ const inferredValue: string = inferredCopy.next(1).second("text").value; >second : Symbol(second, Decl(signatureScopes.ts, 47, 64)) >value : Symbol(value, Decl(signatureScopes.ts, 48, 26)) +=== mappedCycles.ts === +type Show = { [K in keyof T]: T[K] } & unknown; +>Show : Symbol(Show, Decl(mappedCycles.ts, 0, 0)) +>T : Symbol(T, Decl(mappedCycles.ts, 0, 10)) +>K : Symbol(K, Decl(mappedCycles.ts, 0, 18)) +>T : Symbol(T, Decl(mappedCycles.ts, 0, 10)) +>T : Symbol(T, Decl(mappedCycles.ts, 0, 10)) +>K : Symbol(K, Decl(mappedCycles.ts, 0, 18)) + +type Resolve = Show<{ +>Resolve : Symbol(Resolve, Decl(mappedCycles.ts, 0, 50)) +>M : Symbol(M, Decl(mappedCycles.ts, 1, 13)) +>K : Symbol(K, Decl(mappedCycles.ts, 1, 15)) +>M : Symbol(M, Decl(mappedCycles.ts, 1, 13)) +>Show : Symbol(Show, Decl(mappedCycles.ts, 0, 0)) + + [P in keyof M[K]]: M[K][P] extends "ref" ? Resolve : M[K][P]; +>P : Symbol(P, Decl(mappedCycles.ts, 2, 5)) +>M : Symbol(M, Decl(mappedCycles.ts, 1, 13)) +>K : Symbol(K, Decl(mappedCycles.ts, 1, 15)) +>M : Symbol(M, Decl(mappedCycles.ts, 1, 13)) +>K : Symbol(K, Decl(mappedCycles.ts, 1, 15)) +>P : Symbol(P, Decl(mappedCycles.ts, 2, 5)) +>Resolve : Symbol(Resolve, Decl(mappedCycles.ts, 0, 50)) +>M : Symbol(M, Decl(mappedCycles.ts, 1, 13)) +>K : Symbol(K, Decl(mappedCycles.ts, 1, 15)) +>M : Symbol(M, Decl(mappedCycles.ts, 1, 13)) +>K : Symbol(K, Decl(mappedCycles.ts, 1, 15)) +>P : Symbol(P, Decl(mappedCycles.ts, 2, 5)) + +}>; +declare const build: () => { [K in keyof M]: Resolve }; +>build : Symbol(build, Decl(mappedCycles.ts, 4, 13)) +>M : Symbol(M, Decl(mappedCycles.ts, 4, 22)) +>K : Symbol(K, Decl(mappedCycles.ts, 4, 33)) +>M : Symbol(M, Decl(mappedCycles.ts, 4, 22)) +>Resolve : Symbol(Resolve, Decl(mappedCycles.ts, 0, 50)) +>M : Symbol(M, Decl(mappedCycles.ts, 4, 22)) +>K : Symbol(K, Decl(mappedCycles.ts, 4, 33)) + +export const mappedCycle = build<{ Node: { value: number; next: "ref" } }>(); +>mappedCycle : Symbol(mappedCycle, Decl(mappedCycles.ts, 5, 12)) +>build : Symbol(build, Decl(mappedCycles.ts, 4, 13)) +>Node : Symbol(Node, Decl(mappedCycles.ts, 5, 34)) +>value : Symbol(value, Decl(mappedCycles.ts, 5, 42)) +>next : Symbol(next, Decl(mappedCycles.ts, 5, 57)) + +export const mappedCycleCopy = mappedCycle; +>mappedCycleCopy : Symbol(mappedCycleCopy, Decl(mappedCycles.ts, 6, 12)) +>mappedCycle : Symbol(mappedCycle, Decl(mappedCycles.ts, 5, 12)) + +export const nestedCycle = { wrapped: build<{ Node: { value: string; next: "ref" } }>() }; +>nestedCycle : Symbol(nestedCycle, Decl(mappedCycles.ts, 7, 12)) +>wrapped : Symbol(wrapped, Decl(mappedCycles.ts, 7, 28)) +>build : Symbol(build, Decl(mappedCycles.ts, 4, 13)) +>Node : Symbol(Node, Decl(mappedCycles.ts, 7, 45)) +>value : Symbol(value, Decl(mappedCycles.ts, 7, 53)) +>next : Symbol(next, Decl(mappedCycles.ts, 7, 68)) + +export const cycleKey = Symbol(); +>cycleKey : Symbol(cycleKey, Decl(mappedCycles.ts, 8, 12)) +>Symbol : Symbol(Symbol, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2019.symbol.d.ts, --, --)) + +export const keyedCycles = build<{ +>keyedCycles : Symbol(keyedCycles, Decl(mappedCycles.ts, 9, 12)) +>build : Symbol(build, Decl(mappedCycles.ts, 4, 13)) + + "a-b": { value: string; next: "ref" }; +>"a-b" : Symbol("a-b", Decl(mappedCycles.ts, 9, 34)) +>value : Symbol(value, Decl(mappedCycles.ts, 10, 12)) +>next : Symbol(next, Decl(mappedCycles.ts, 10, 27)) + + 0: { value: boolean; next: "ref" }; +>0 : Symbol(0, Decl(mappedCycles.ts, 10, 42)) +>value : Symbol(value, Decl(mappedCycles.ts, 11, 8)) +>next : Symbol(next, Decl(mappedCycles.ts, 11, 24)) + + [cycleKey]: { value: number; next: "ref" }; +>[cycleKey] : Symbol([cycleKey], Decl(mappedCycles.ts, 11, 39)) +>cycleKey : Symbol(cycleKey, Decl(mappedCycles.ts, 8, 12)) +>value : Symbol(value, Decl(mappedCycles.ts, 12, 17)) +>next : Symbol(next, Decl(mappedCycles.ts, 12, 32)) + +}>(); +export const sharedCycles = { +>sharedCycles : Symbol(sharedCycles, Decl(mappedCycles.ts, 14, 12)) + + first: mappedCycle, +>first : Symbol(first, Decl(mappedCycles.ts, 14, 29)) +>mappedCycle : Symbol(mappedCycle, Decl(mappedCycles.ts, 5, 12)) + + second: mappedCycle, +>second : Symbol(second, Decl(mappedCycles.ts, 15, 23)) +>mappedCycle : Symbol(mappedCycle, Decl(mappedCycles.ts, 5, 12)) + +}; +export const broadCycle: { Node: unknown } = mappedCycle; +>broadCycle : Symbol(broadCycle, Decl(mappedCycles.ts, 18, 12)) +>Node : Symbol(Node, Decl(mappedCycles.ts, 18, 26)) +>mappedCycle : Symbol(mappedCycle, Decl(mappedCycles.ts, 5, 12)) + +type ResolveMutual = Show<{ +>ResolveMutual : Symbol(ResolveMutual, Decl(mappedCycles.ts, 18, 57)) +>M : Symbol(M, Decl(mappedCycles.ts, 20, 19)) +>K : Symbol(K, Decl(mappedCycles.ts, 20, 21)) +>M : Symbol(M, Decl(mappedCycles.ts, 20, 19)) +>Show : Symbol(Show, Decl(mappedCycles.ts, 0, 0)) + + [P in keyof M[K]]: M[K][P] extends { ref: infer R extends keyof M } ? ResolveMutual : M[K][P]; +>P : Symbol(P, Decl(mappedCycles.ts, 21, 5)) +>M : Symbol(M, Decl(mappedCycles.ts, 20, 19)) +>K : Symbol(K, Decl(mappedCycles.ts, 20, 21)) +>M : Symbol(M, Decl(mappedCycles.ts, 20, 19)) +>K : Symbol(K, Decl(mappedCycles.ts, 20, 21)) +>P : Symbol(P, Decl(mappedCycles.ts, 21, 5)) +>ref : Symbol(ref, Decl(mappedCycles.ts, 21, 40)) +>R : Symbol(R, Decl(mappedCycles.ts, 21, 51)) +>M : Symbol(M, Decl(mappedCycles.ts, 20, 19)) +>ResolveMutual : Symbol(ResolveMutual, Decl(mappedCycles.ts, 18, 57)) +>M : Symbol(M, Decl(mappedCycles.ts, 20, 19)) +>R : Symbol(R, Decl(mappedCycles.ts, 21, 51)) +>M : Symbol(M, Decl(mappedCycles.ts, 20, 19)) +>K : Symbol(K, Decl(mappedCycles.ts, 20, 21)) +>P : Symbol(P, Decl(mappedCycles.ts, 21, 5)) + +}>; +declare const buildMutual: () => { [K in keyof M]: ResolveMutual }; +>buildMutual : Symbol(buildMutual, Decl(mappedCycles.ts, 23, 13)) +>M : Symbol(M, Decl(mappedCycles.ts, 23, 28)) +>K : Symbol(K, Decl(mappedCycles.ts, 23, 39)) +>M : Symbol(M, Decl(mappedCycles.ts, 23, 28)) +>ResolveMutual : Symbol(ResolveMutual, Decl(mappedCycles.ts, 18, 57)) +>M : Symbol(M, Decl(mappedCycles.ts, 23, 28)) +>K : Symbol(K, Decl(mappedCycles.ts, 23, 39)) + +export const mutualCycle = buildMutual<{ +>mutualCycle : Symbol(mutualCycle, Decl(mappedCycles.ts, 24, 12)) +>buildMutual : Symbol(buildMutual, Decl(mappedCycles.ts, 23, 13)) + + First: { value: number; next: { ref: "Second" } }; +>First : Symbol(First, Decl(mappedCycles.ts, 24, 40)) +>value : Symbol(value, Decl(mappedCycles.ts, 25, 12)) +>next : Symbol(next, Decl(mappedCycles.ts, 25, 27)) +>ref : Symbol(ref, Decl(mappedCycles.ts, 25, 35)) + + Second: { value: string; next: { ref: "First" } }; +>Second : Symbol(Second, Decl(mappedCycles.ts, 25, 54)) +>value : Symbol(value, Decl(mappedCycles.ts, 26, 13)) +>next : Symbol(next, Decl(mappedCycles.ts, 26, 28)) +>ref : Symbol(ref, Decl(mappedCycles.ts, 26, 36)) + +}>(); + +const mappedValue: number = mappedCycle.Node.next.next.value; +>mappedValue : Symbol(mappedValue, Decl(mappedCycles.ts, 29, 5)) +>mappedCycle.Node.next.next.value : Symbol(value, Decl(mappedCycles.ts, 5, 42)) +>mappedCycle.Node.next.next : Symbol(next, Decl(mappedCycles.ts, 5, 57)) +>mappedCycle.Node.next : Symbol(next, Decl(mappedCycles.ts, 5, 57)) +>mappedCycle.Node : Symbol(Node, Decl(mappedCycles.ts, 5, 34)) +>mappedCycle : Symbol(mappedCycle, Decl(mappedCycles.ts, 5, 12)) +>Node : Symbol(Node, Decl(mappedCycles.ts, 5, 34)) +>next : Symbol(next, Decl(mappedCycles.ts, 5, 57)) +>next : Symbol(next, Decl(mappedCycles.ts, 5, 57)) +>value : Symbol(value, Decl(mappedCycles.ts, 5, 42)) + +const nestedMappedValue: string = nestedCycle.wrapped.Node.next.next.value; +>nestedMappedValue : Symbol(nestedMappedValue, Decl(mappedCycles.ts, 30, 5)) +>nestedCycle.wrapped.Node.next.next.value : Symbol(value, Decl(mappedCycles.ts, 7, 53)) +>nestedCycle.wrapped.Node.next.next : Symbol(next, Decl(mappedCycles.ts, 7, 68)) +>nestedCycle.wrapped.Node.next : Symbol(next, Decl(mappedCycles.ts, 7, 68)) +>nestedCycle.wrapped.Node : Symbol(Node, Decl(mappedCycles.ts, 7, 45)) +>nestedCycle.wrapped : Symbol(wrapped, Decl(mappedCycles.ts, 7, 28)) +>nestedCycle : Symbol(nestedCycle, Decl(mappedCycles.ts, 7, 12)) +>wrapped : Symbol(wrapped, Decl(mappedCycles.ts, 7, 28)) +>Node : Symbol(Node, Decl(mappedCycles.ts, 7, 45)) +>next : Symbol(next, Decl(mappedCycles.ts, 7, 68)) +>next : Symbol(next, Decl(mappedCycles.ts, 7, 68)) +>value : Symbol(value, Decl(mappedCycles.ts, 7, 53)) + +const quotedMappedValue: string = keyedCycles["a-b"].next.next.value; +>quotedMappedValue : Symbol(quotedMappedValue, Decl(mappedCycles.ts, 31, 5)) +>keyedCycles["a-b"].next.next.value : Symbol(value, Decl(mappedCycles.ts, 10, 12)) +>keyedCycles["a-b"].next.next : Symbol(next, Decl(mappedCycles.ts, 10, 27)) +>keyedCycles["a-b"].next : Symbol(next, Decl(mappedCycles.ts, 10, 27)) +>keyedCycles : Symbol(keyedCycles, Decl(mappedCycles.ts, 9, 12)) +>"a-b" : Symbol("a-b", Decl(mappedCycles.ts, 9, 34)) +>next : Symbol(next, Decl(mappedCycles.ts, 10, 27)) +>next : Symbol(next, Decl(mappedCycles.ts, 10, 27)) +>value : Symbol(value, Decl(mappedCycles.ts, 10, 12)) + +const numericMappedValue: boolean = keyedCycles[0].next.next.value; +>numericMappedValue : Symbol(numericMappedValue, Decl(mappedCycles.ts, 32, 5)) +>keyedCycles[0].next.next.value : Symbol(value, Decl(mappedCycles.ts, 11, 8)) +>keyedCycles[0].next.next : Symbol(next, Decl(mappedCycles.ts, 11, 24)) +>keyedCycles[0].next : Symbol(next, Decl(mappedCycles.ts, 11, 24)) +>keyedCycles : Symbol(keyedCycles, Decl(mappedCycles.ts, 9, 12)) +>0 : Symbol(0, Decl(mappedCycles.ts, 10, 42)) +>next : Symbol(next, Decl(mappedCycles.ts, 11, 24)) +>next : Symbol(next, Decl(mappedCycles.ts, 11, 24)) +>value : Symbol(value, Decl(mappedCycles.ts, 11, 8)) + +const symbolMappedValue: number = keyedCycles[cycleKey].next.next.value; +>symbolMappedValue : Symbol(symbolMappedValue, Decl(mappedCycles.ts, 33, 5)) +>keyedCycles[cycleKey].next.next.value : Symbol(value, Decl(mappedCycles.ts, 12, 17)) +>keyedCycles[cycleKey].next.next : Symbol(next, Decl(mappedCycles.ts, 12, 32)) +>keyedCycles[cycleKey].next : Symbol(next, Decl(mappedCycles.ts, 12, 32)) +>keyedCycles : Symbol(keyedCycles, Decl(mappedCycles.ts, 9, 12)) +>cycleKey : Symbol(cycleKey, Decl(mappedCycles.ts, 8, 12)) +>next : Symbol(next, Decl(mappedCycles.ts, 12, 32)) +>next : Symbol(next, Decl(mappedCycles.ts, 12, 32)) +>value : Symbol(value, Decl(mappedCycles.ts, 12, 17)) + +const sharedMappedValue: number = sharedCycles.second.Node.next.next.value; +>sharedMappedValue : Symbol(sharedMappedValue, Decl(mappedCycles.ts, 34, 5)) +>sharedCycles.second.Node.next.next.value : Symbol(value, Decl(mappedCycles.ts, 5, 42)) +>sharedCycles.second.Node.next.next : Symbol(next, Decl(mappedCycles.ts, 5, 57)) +>sharedCycles.second.Node.next : Symbol(next, Decl(mappedCycles.ts, 5, 57)) +>sharedCycles.second.Node : Symbol(Node, Decl(mappedCycles.ts, 5, 34)) +>sharedCycles.second : Symbol(second, Decl(mappedCycles.ts, 15, 23)) +>sharedCycles : Symbol(sharedCycles, Decl(mappedCycles.ts, 14, 12)) +>second : Symbol(second, Decl(mappedCycles.ts, 15, 23)) +>Node : Symbol(Node, Decl(mappedCycles.ts, 5, 34)) +>next : Symbol(next, Decl(mappedCycles.ts, 5, 57)) +>next : Symbol(next, Decl(mappedCycles.ts, 5, 57)) +>value : Symbol(value, Decl(mappedCycles.ts, 5, 42)) + +const mutualFirstValue: number = mutualCycle.First.next.next.value; +>mutualFirstValue : Symbol(mutualFirstValue, Decl(mappedCycles.ts, 35, 5)) +>mutualCycle.First.next.next.value : Symbol(value, Decl(mappedCycles.ts, 25, 12)) +>mutualCycle.First.next.next : Symbol(next, Decl(mappedCycles.ts, 26, 28)) +>mutualCycle.First.next : Symbol(next, Decl(mappedCycles.ts, 25, 27)) +>mutualCycle.First : Symbol(First, Decl(mappedCycles.ts, 24, 40)) +>mutualCycle : Symbol(mutualCycle, Decl(mappedCycles.ts, 24, 12)) +>First : Symbol(First, Decl(mappedCycles.ts, 24, 40)) +>next : Symbol(next, Decl(mappedCycles.ts, 25, 27)) +>next : Symbol(next, Decl(mappedCycles.ts, 26, 28)) +>value : Symbol(value, Decl(mappedCycles.ts, 25, 12)) + +const mutualSecondValue: string = mutualCycle.First.next.value; +>mutualSecondValue : Symbol(mutualSecondValue, Decl(mappedCycles.ts, 36, 5)) +>mutualCycle.First.next.value : Symbol(value, Decl(mappedCycles.ts, 26, 13)) +>mutualCycle.First.next : Symbol(next, Decl(mappedCycles.ts, 25, 27)) +>mutualCycle.First : Symbol(First, Decl(mappedCycles.ts, 24, 40)) +>mutualCycle : Symbol(mutualCycle, Decl(mappedCycles.ts, 24, 12)) +>First : Symbol(First, Decl(mappedCycles.ts, 24, 40)) +>next : Symbol(next, Decl(mappedCycles.ts, 25, 27)) +>value : Symbol(value, Decl(mappedCycles.ts, 26, 13)) + +const invalidMappedValue: string = mappedCycle.Node.next.next.value; +>invalidMappedValue : Symbol(invalidMappedValue, Decl(mappedCycles.ts, 37, 5)) +>mappedCycle.Node.next.next.value : Symbol(value, Decl(mappedCycles.ts, 5, 42)) +>mappedCycle.Node.next.next : Symbol(next, Decl(mappedCycles.ts, 5, 57)) +>mappedCycle.Node.next : Symbol(next, Decl(mappedCycles.ts, 5, 57)) +>mappedCycle.Node : Symbol(Node, Decl(mappedCycles.ts, 5, 34)) +>mappedCycle : Symbol(mappedCycle, Decl(mappedCycles.ts, 5, 12)) +>Node : Symbol(Node, Decl(mappedCycles.ts, 5, 34)) +>next : Symbol(next, Decl(mappedCycles.ts, 5, 57)) +>next : Symbol(next, Decl(mappedCycles.ts, 5, 57)) +>value : Symbol(value, Decl(mappedCycles.ts, 5, 42)) + +const invalidMutualValue: number = mutualCycle.First.next.value; +>invalidMutualValue : Symbol(invalidMutualValue, Decl(mappedCycles.ts, 38, 5)) +>mutualCycle.First.next.value : Symbol(value, Decl(mappedCycles.ts, 26, 13)) +>mutualCycle.First.next : Symbol(next, Decl(mappedCycles.ts, 25, 27)) +>mutualCycle.First : Symbol(First, Decl(mappedCycles.ts, 24, 40)) +>mutualCycle : Symbol(mutualCycle, Decl(mappedCycles.ts, 24, 12)) +>First : Symbol(First, Decl(mappedCycles.ts, 24, 40)) +>next : Symbol(next, Decl(mappedCycles.ts, 25, 27)) +>value : Symbol(value, Decl(mappedCycles.ts, 26, 13)) + +=== optionalMappedCycle.ts === +type Show = { [K in keyof T]: T[K] } & unknown; +>Show : Symbol(Show, Decl(optionalMappedCycle.ts, 0, 0)) +>T : Symbol(T, Decl(optionalMappedCycle.ts, 0, 10)) +>K : Symbol(K, Decl(optionalMappedCycle.ts, 0, 18)) +>T : Symbol(T, Decl(optionalMappedCycle.ts, 0, 10)) +>T : Symbol(T, Decl(optionalMappedCycle.ts, 0, 10)) +>K : Symbol(K, Decl(optionalMappedCycle.ts, 0, 18)) + +type Resolve = Show<{ +>Resolve : Symbol(Resolve, Decl(optionalMappedCycle.ts, 0, 50)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 1, 13)) +>K : Symbol(K, Decl(optionalMappedCycle.ts, 1, 15)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 1, 13)) +>Show : Symbol(Show, Decl(optionalMappedCycle.ts, 0, 0)) + + [P in keyof M[K]]: M[K][P] extends "ref" ? Resolve : M[K][P]; +>P : Symbol(P, Decl(optionalMappedCycle.ts, 2, 5)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 1, 13)) +>K : Symbol(K, Decl(optionalMappedCycle.ts, 1, 15)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 1, 13)) +>K : Symbol(K, Decl(optionalMappedCycle.ts, 1, 15)) +>P : Symbol(P, Decl(optionalMappedCycle.ts, 2, 5)) +>Resolve : Symbol(Resolve, Decl(optionalMappedCycle.ts, 0, 50)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 1, 13)) +>K : Symbol(K, Decl(optionalMappedCycle.ts, 1, 15)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 1, 13)) +>K : Symbol(K, Decl(optionalMappedCycle.ts, 1, 15)) +>P : Symbol(P, Decl(optionalMappedCycle.ts, 2, 5)) + +}>; +declare const build: () => { [K in keyof M]?: Resolve }; +>build : Symbol(build, Decl(optionalMappedCycle.ts, 4, 13)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 4, 22)) +>K : Symbol(K, Decl(optionalMappedCycle.ts, 4, 33)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 4, 22)) +>Resolve : Symbol(Resolve, Decl(optionalMappedCycle.ts, 0, 50)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 4, 22)) +>K : Symbol(K, Decl(optionalMappedCycle.ts, 4, 33)) + +export const optionalCycle = build<{ Node: { value: number; next: "ref" } }>(); +>optionalCycle : Symbol(optionalCycle, Decl(optionalMappedCycle.ts, 5, 12)) +>build : Symbol(build, Decl(optionalMappedCycle.ts, 4, 13)) +>Node : Symbol(Node, Decl(optionalMappedCycle.ts, 5, 36)) +>value : Symbol(value, Decl(optionalMappedCycle.ts, 5, 44)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 5, 59)) + +const optionalValue: number | undefined = optionalCycle.Node?.next.next.value; +>optionalValue : Symbol(optionalValue, Decl(optionalMappedCycle.ts, 6, 5)) +>optionalCycle.Node?.next.next.value : Symbol(value, Decl(optionalMappedCycle.ts, 5, 44)) +>optionalCycle.Node?.next.next : Symbol(next, Decl(optionalMappedCycle.ts, 5, 59)) +>optionalCycle.Node?.next : Symbol(next, Decl(optionalMappedCycle.ts, 5, 59)) +>optionalCycle.Node : Symbol(Node, Decl(optionalMappedCycle.ts, 5, 36)) +>optionalCycle : Symbol(optionalCycle, Decl(optionalMappedCycle.ts, 5, 12)) +>Node : Symbol(Node, Decl(optionalMappedCycle.ts, 5, 36)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 5, 59)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 5, 59)) +>value : Symbol(value, Decl(optionalMappedCycle.ts, 5, 44)) + +export const optionalCopy = optionalCycle; +>optionalCopy : Symbol(optionalCopy, Decl(optionalMappedCycle.ts, 7, 12)) +>optionalCycle : Symbol(optionalCycle, Decl(optionalMappedCycle.ts, 5, 12)) + +declare const buildNullable: () => { [K in keyof M]: Resolve | null }; +>buildNullable : Symbol(buildNullable, Decl(optionalMappedCycle.ts, 8, 13)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 8, 30)) +>K : Symbol(K, Decl(optionalMappedCycle.ts, 8, 41)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 8, 30)) +>Resolve : Symbol(Resolve, Decl(optionalMappedCycle.ts, 0, 50)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 8, 30)) +>K : Symbol(K, Decl(optionalMappedCycle.ts, 8, 41)) + +export const nullableCycle = buildNullable<{ Node: { value: string; next: "ref" } }>(); +>nullableCycle : Symbol(nullableCycle, Decl(optionalMappedCycle.ts, 9, 12)) +>buildNullable : Symbol(buildNullable, Decl(optionalMappedCycle.ts, 8, 13)) +>Node : Symbol(Node, Decl(optionalMappedCycle.ts, 9, 44)) +>value : Symbol(value, Decl(optionalMappedCycle.ts, 9, 52)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 9, 67)) + +declare const wrap: (value: T) => { required: T; optional?: T | null }; +>wrap : Symbol(wrap, Decl(optionalMappedCycle.ts, 10, 13)) +>T : Symbol(T, Decl(optionalMappedCycle.ts, 10, 21)) +>value : Symbol(value, Decl(optionalMappedCycle.ts, 10, 24)) +>T : Symbol(T, Decl(optionalMappedCycle.ts, 10, 21)) +>required : Symbol(required, Decl(optionalMappedCycle.ts, 10, 38)) +>T : Symbol(T, Decl(optionalMappedCycle.ts, 10, 21)) +>optional : Symbol(optional, Decl(optionalMappedCycle.ts, 10, 51)) +>T : Symbol(T, Decl(optionalMappedCycle.ts, 10, 21)) + +export const mixedCycles = wrap(optionalCycle); +>mixedCycles : Symbol(mixedCycles, Decl(optionalMappedCycle.ts, 11, 12)) +>wrap : Symbol(wrap, Decl(optionalMappedCycle.ts, 10, 13)) +>optionalCycle : Symbol(optionalCycle, Decl(optionalMappedCycle.ts, 5, 12)) + +export const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle }; +>sharedOptionalCycles : Symbol(sharedOptionalCycles, Decl(optionalMappedCycle.ts, 12, 12)) +>first : Symbol(first, Decl(optionalMappedCycle.ts, 12, 37)) +>optionalCycle : Symbol(optionalCycle, Decl(optionalMappedCycle.ts, 5, 12)) +>second : Symbol(second, Decl(optionalMappedCycle.ts, 12, 59)) +>optionalCycle : Symbol(optionalCycle, Decl(optionalMappedCycle.ts, 5, 12)) + +export const nullableKey = Symbol(); +>nullableKey : Symbol(nullableKey, Decl(optionalMappedCycle.ts, 13, 12)) +>Symbol : Symbol(Symbol, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2019.symbol.d.ts, --, --)) + +export const nullableKeys = buildNullable<{ +>nullableKeys : Symbol(nullableKeys, Decl(optionalMappedCycle.ts, 14, 12)) +>buildNullable : Symbol(buildNullable, Decl(optionalMappedCycle.ts, 8, 13)) + + "a-b": { value: string; next: "ref" }; +>"a-b" : Symbol("a-b", Decl(optionalMappedCycle.ts, 14, 43)) +>value : Symbol(value, Decl(optionalMappedCycle.ts, 15, 12)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 15, 27)) + + 0: { value: boolean; next: "ref" }; +>0 : Symbol(0, Decl(optionalMappedCycle.ts, 15, 42)) +>value : Symbol(value, Decl(optionalMappedCycle.ts, 16, 8)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 16, 24)) + + [nullableKey]: { value: number; next: "ref" }; +>[nullableKey] : Symbol([nullableKey], Decl(optionalMappedCycle.ts, 16, 39)) +>nullableKey : Symbol(nullableKey, Decl(optionalMappedCycle.ts, 13, 12)) +>value : Symbol(value, Decl(optionalMappedCycle.ts, 17, 20)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 17, 35)) + +}>(); +declare const buildNullableRoot: () => Resolve | null; +>buildNullableRoot : Symbol(buildNullableRoot, Decl(optionalMappedCycle.ts, 19, 13)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 19, 34)) +>Resolve : Symbol(Resolve, Decl(optionalMappedCycle.ts, 0, 50)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 19, 34)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 19, 34)) + +export const nullableRoot = buildNullableRoot<{ Node: { value: number; next: "ref" } }>(); +>nullableRoot : Symbol(nullableRoot, Decl(optionalMappedCycle.ts, 20, 12)) +>buildNullableRoot : Symbol(buildNullableRoot, Decl(optionalMappedCycle.ts, 19, 13)) +>Node : Symbol(Node, Decl(optionalMappedCycle.ts, 20, 47)) +>value : Symbol(value, Decl(optionalMappedCycle.ts, 20, 55)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 20, 70)) + +declare const buildOptionalRoot: () => Resolve | undefined; +>buildOptionalRoot : Symbol(buildOptionalRoot, Decl(optionalMappedCycle.ts, 21, 13)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 21, 34)) +>Resolve : Symbol(Resolve, Decl(optionalMappedCycle.ts, 0, 50)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 21, 34)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 21, 34)) + +export const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: "ref" } }>(); +>optionalRoot : Symbol(optionalRoot, Decl(optionalMappedCycle.ts, 22, 12)) +>buildOptionalRoot : Symbol(buildOptionalRoot, Decl(optionalMappedCycle.ts, 21, 13)) +>Node : Symbol(Node, Decl(optionalMappedCycle.ts, 22, 47)) +>value : Symbol(value, Decl(optionalMappedCycle.ts, 22, 55)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 22, 70)) + +type ResolveNullable = Show<{ +>ResolveNullable : Symbol(ResolveNullable, Decl(optionalMappedCycle.ts, 22, 90)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 23, 21)) +>K : Symbol(K, Decl(optionalMappedCycle.ts, 23, 23)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 23, 21)) +>Show : Symbol(Show, Decl(optionalMappedCycle.ts, 0, 0)) + + [P in keyof M[K]]: M[K][P] extends "ref" ? ResolveNullable | null : M[K][P]; +>P : Symbol(P, Decl(optionalMappedCycle.ts, 24, 5)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 23, 21)) +>K : Symbol(K, Decl(optionalMappedCycle.ts, 23, 23)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 23, 21)) +>K : Symbol(K, Decl(optionalMappedCycle.ts, 23, 23)) +>P : Symbol(P, Decl(optionalMappedCycle.ts, 24, 5)) +>ResolveNullable : Symbol(ResolveNullable, Decl(optionalMappedCycle.ts, 22, 90)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 23, 21)) +>K : Symbol(K, Decl(optionalMappedCycle.ts, 23, 23)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 23, 21)) +>K : Symbol(K, Decl(optionalMappedCycle.ts, 23, 23)) +>P : Symbol(P, Decl(optionalMappedCycle.ts, 24, 5)) + +}>; +declare const buildNullableLinks: () => { [K in keyof M]: ResolveNullable | null }; +>buildNullableLinks : Symbol(buildNullableLinks, Decl(optionalMappedCycle.ts, 26, 13)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 26, 35)) +>K : Symbol(K, Decl(optionalMappedCycle.ts, 26, 46)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 26, 35)) +>ResolveNullable : Symbol(ResolveNullable, Decl(optionalMappedCycle.ts, 22, 90)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 26, 35)) +>K : Symbol(K, Decl(optionalMappedCycle.ts, 26, 46)) + +export const nullableLinks = buildNullableLinks<{ Node: { value: number; next: "ref" } }>(); +>nullableLinks : Symbol(nullableLinks, Decl(optionalMappedCycle.ts, 27, 12)) +>buildNullableLinks : Symbol(buildNullableLinks, Decl(optionalMappedCycle.ts, 26, 13)) +>Node : Symbol(Node, Decl(optionalMappedCycle.ts, 27, 49)) +>value : Symbol(value, Decl(optionalMappedCycle.ts, 27, 57)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 27, 72)) + +declare const buildOptionalNullableLinks: () => { [K in keyof M]?: ResolveNullable | null }; +>buildOptionalNullableLinks : Symbol(buildOptionalNullableLinks, Decl(optionalMappedCycle.ts, 28, 13)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 28, 43)) +>K : Symbol(K, Decl(optionalMappedCycle.ts, 28, 54)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 28, 43)) +>ResolveNullable : Symbol(ResolveNullable, Decl(optionalMappedCycle.ts, 22, 90)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 28, 43)) +>K : Symbol(K, Decl(optionalMappedCycle.ts, 28, 54)) + +export const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: "ref" } }>(); +>optionalNullableLinks : Symbol(optionalNullableLinks, Decl(optionalMappedCycle.ts, 29, 12)) +>buildOptionalNullableLinks : Symbol(buildOptionalNullableLinks, Decl(optionalMappedCycle.ts, 28, 13)) +>Node : Symbol(Node, Decl(optionalMappedCycle.ts, 29, 65)) +>value : Symbol(value, Decl(optionalMappedCycle.ts, 29, 73)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 29, 88)) + +type ResolveOptional = Show<{ +>ResolveOptional : Symbol(ResolveOptional, Decl(optionalMappedCycle.ts, 29, 108)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 30, 21)) +>K : Symbol(K, Decl(optionalMappedCycle.ts, 30, 23)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 30, 21)) +>Show : Symbol(Show, Decl(optionalMappedCycle.ts, 0, 0)) + + [P in keyof M[K]]: M[K][P] extends "ref" ? ResolveOptional | undefined : M[K][P]; +>P : Symbol(P, Decl(optionalMappedCycle.ts, 31, 5)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 30, 21)) +>K : Symbol(K, Decl(optionalMappedCycle.ts, 30, 23)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 30, 21)) +>K : Symbol(K, Decl(optionalMappedCycle.ts, 30, 23)) +>P : Symbol(P, Decl(optionalMappedCycle.ts, 31, 5)) +>ResolveOptional : Symbol(ResolveOptional, Decl(optionalMappedCycle.ts, 29, 108)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 30, 21)) +>K : Symbol(K, Decl(optionalMappedCycle.ts, 30, 23)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 30, 21)) +>K : Symbol(K, Decl(optionalMappedCycle.ts, 30, 23)) +>P : Symbol(P, Decl(optionalMappedCycle.ts, 31, 5)) + +}>; +declare const buildNullableOptionalLinks: () => { [K in keyof M]: ResolveOptional | null }; +>buildNullableOptionalLinks : Symbol(buildNullableOptionalLinks, Decl(optionalMappedCycle.ts, 33, 13)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 33, 43)) +>K : Symbol(K, Decl(optionalMappedCycle.ts, 33, 54)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 33, 43)) +>ResolveOptional : Symbol(ResolveOptional, Decl(optionalMappedCycle.ts, 29, 108)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 33, 43)) +>K : Symbol(K, Decl(optionalMappedCycle.ts, 33, 54)) + +export const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: "ref" } }>(); +>nullableOptionalLinks : Symbol(nullableOptionalLinks, Decl(optionalMappedCycle.ts, 34, 12)) +>buildNullableOptionalLinks : Symbol(buildNullableOptionalLinks, Decl(optionalMappedCycle.ts, 33, 13)) +>Node : Symbol(Node, Decl(optionalMappedCycle.ts, 34, 65)) +>value : Symbol(value, Decl(optionalMappedCycle.ts, 34, 73)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 34, 88)) + +type ResolveNullish = Show<{ +>ResolveNullish : Symbol(ResolveNullish, Decl(optionalMappedCycle.ts, 34, 108)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 35, 20)) +>K : Symbol(K, Decl(optionalMappedCycle.ts, 35, 22)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 35, 20)) +>Show : Symbol(Show, Decl(optionalMappedCycle.ts, 0, 0)) + + [P in keyof M[K]]: M[K][P] extends "ref" ? ResolveNullish | null | undefined : M[K][P]; +>P : Symbol(P, Decl(optionalMappedCycle.ts, 36, 5)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 35, 20)) +>K : Symbol(K, Decl(optionalMappedCycle.ts, 35, 22)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 35, 20)) +>K : Symbol(K, Decl(optionalMappedCycle.ts, 35, 22)) +>P : Symbol(P, Decl(optionalMappedCycle.ts, 36, 5)) +>ResolveNullish : Symbol(ResolveNullish, Decl(optionalMappedCycle.ts, 34, 108)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 35, 20)) +>K : Symbol(K, Decl(optionalMappedCycle.ts, 35, 22)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 35, 20)) +>K : Symbol(K, Decl(optionalMappedCycle.ts, 35, 22)) +>P : Symbol(P, Decl(optionalMappedCycle.ts, 36, 5)) + +}>; +declare const buildNullishLinks: () => { [K in keyof M]?: ResolveNullish | null }; +>buildNullishLinks : Symbol(buildNullishLinks, Decl(optionalMappedCycle.ts, 38, 13)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 38, 34)) +>K : Symbol(K, Decl(optionalMappedCycle.ts, 38, 45)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 38, 34)) +>ResolveNullish : Symbol(ResolveNullish, Decl(optionalMappedCycle.ts, 34, 108)) +>M : Symbol(M, Decl(optionalMappedCycle.ts, 38, 34)) +>K : Symbol(K, Decl(optionalMappedCycle.ts, 38, 45)) + +export const nullishLinks = buildNullishLinks<{ Node: { value: number; next: "ref" } }>(); +>nullishLinks : Symbol(nullishLinks, Decl(optionalMappedCycle.ts, 39, 12)) +>buildNullishLinks : Symbol(buildNullishLinks, Decl(optionalMappedCycle.ts, 38, 13)) +>Node : Symbol(Node, Decl(optionalMappedCycle.ts, 39, 47)) +>value : Symbol(value, Decl(optionalMappedCycle.ts, 39, 55)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 39, 70)) + +type NonNullable = "shadowed"; +>NonNullable : Symbol(NonNullable, Decl(optionalMappedCycle.ts, 39, 90)) +>T : Symbol(T, Decl(optionalMappedCycle.ts, 40, 17)) + +type OptionalNode = (typeof optionalCycle)["Node"] & {}; +>OptionalNode : Symbol(OptionalNode, Decl(optionalMappedCycle.ts, 40, 33)) +>optionalCycle : Symbol(optionalCycle, Decl(optionalMappedCycle.ts, 5, 12)) + +type NullableNode = (typeof nullableCycle)["Node"] & {}; +>NullableNode : Symbol(NullableNode, Decl(optionalMappedCycle.ts, 41, 56)) +>nullableCycle : Symbol(nullableCycle, Decl(optionalMappedCycle.ts, 9, 12)) + +type NullableLinkNode = (typeof nullableLinks)["Node"] & {}; +>NullableLinkNode : Symbol(NullableLinkNode, Decl(optionalMappedCycle.ts, 42, 56)) +>nullableLinks : Symbol(nullableLinks, Decl(optionalMappedCycle.ts, 27, 12)) + +type NullishLinkNode = (typeof nullishLinks)["Node"] & {}; +>NullishLinkNode : Symbol(NullishLinkNode, Decl(optionalMappedCycle.ts, 43, 60)) +>nullishLinks : Symbol(nullishLinks, Decl(optionalMappedCycle.ts, 39, 12)) + +type OptionalNullableLinkNode = (typeof optionalNullableLinks)["Node"] & {}; +>OptionalNullableLinkNode : Symbol(OptionalNullableLinkNode, Decl(optionalMappedCycle.ts, 44, 58)) +>optionalNullableLinks : Symbol(optionalNullableLinks, Decl(optionalMappedCycle.ts, 29, 12)) + +type NullableOptionalLinkNode = (typeof nullableOptionalLinks)["Node"] & {}; +>NullableOptionalLinkNode : Symbol(NullableOptionalLinkNode, Decl(optionalMappedCycle.ts, 45, 76)) +>nullableOptionalLinks : Symbol(nullableOptionalLinks, Decl(optionalMappedCycle.ts, 34, 12)) + +const copiedValue: number | undefined = optionalCopy.Node?.next.next.value; +>copiedValue : Symbol(copiedValue, Decl(optionalMappedCycle.ts, 47, 5)) +>optionalCopy.Node?.next.next.value : Symbol(value, Decl(optionalMappedCycle.ts, 5, 44)) +>optionalCopy.Node?.next.next : Symbol(next, Decl(optionalMappedCycle.ts, 5, 59)) +>optionalCopy.Node?.next : Symbol(next, Decl(optionalMappedCycle.ts, 5, 59)) +>optionalCopy.Node : Symbol(Node, Decl(optionalMappedCycle.ts, 5, 36)) +>optionalCopy : Symbol(optionalCopy, Decl(optionalMappedCycle.ts, 7, 12)) +>Node : Symbol(Node, Decl(optionalMappedCycle.ts, 5, 36)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 5, 59)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 5, 59)) +>value : Symbol(value, Decl(optionalMappedCycle.ts, 5, 44)) + +const nullableValue: string | undefined = nullableCycle.Node?.next.next.value; +>nullableValue : Symbol(nullableValue, Decl(optionalMappedCycle.ts, 48, 5)) +>nullableCycle.Node?.next.next.value : Symbol(value, Decl(optionalMappedCycle.ts, 9, 52)) +>nullableCycle.Node?.next.next : Symbol(next, Decl(optionalMappedCycle.ts, 9, 67)) +>nullableCycle.Node?.next : Symbol(next, Decl(optionalMappedCycle.ts, 9, 67)) +>nullableCycle.Node : Symbol(Node, Decl(optionalMappedCycle.ts, 9, 44)) +>nullableCycle : Symbol(nullableCycle, Decl(optionalMappedCycle.ts, 9, 12)) +>Node : Symbol(Node, Decl(optionalMappedCycle.ts, 9, 44)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 9, 67)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 9, 67)) +>value : Symbol(value, Decl(optionalMappedCycle.ts, 9, 52)) + +const mixedValue: number | undefined = mixedCycles.optional?.Node?.next.next.value; +>mixedValue : Symbol(mixedValue, Decl(optionalMappedCycle.ts, 49, 5)) +>mixedCycles.optional?.Node?.next.next.value : Symbol(value, Decl(optionalMappedCycle.ts, 5, 44)) +>mixedCycles.optional?.Node?.next.next : Symbol(next, Decl(optionalMappedCycle.ts, 5, 59)) +>mixedCycles.optional?.Node?.next : Symbol(next, Decl(optionalMappedCycle.ts, 5, 59)) +>mixedCycles.optional?.Node : Symbol(Node, Decl(optionalMappedCycle.ts, 5, 36)) +>mixedCycles.optional : Symbol(optional, Decl(optionalMappedCycle.ts, 10, 51)) +>mixedCycles : Symbol(mixedCycles, Decl(optionalMappedCycle.ts, 11, 12)) +>optional : Symbol(optional, Decl(optionalMappedCycle.ts, 10, 51)) +>Node : Symbol(Node, Decl(optionalMappedCycle.ts, 5, 36)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 5, 59)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 5, 59)) +>value : Symbol(value, Decl(optionalMappedCycle.ts, 5, 44)) + +const sharedValue: number | undefined = sharedOptionalCycles.second.Node?.next.next.value; +>sharedValue : Symbol(sharedValue, Decl(optionalMappedCycle.ts, 50, 5)) +>sharedOptionalCycles.second.Node?.next.next.value : Symbol(value, Decl(optionalMappedCycle.ts, 5, 44)) +>sharedOptionalCycles.second.Node?.next.next : Symbol(next, Decl(optionalMappedCycle.ts, 5, 59)) +>sharedOptionalCycles.second.Node?.next : Symbol(next, Decl(optionalMappedCycle.ts, 5, 59)) +>sharedOptionalCycles.second.Node : Symbol(Node, Decl(optionalMappedCycle.ts, 5, 36)) +>sharedOptionalCycles.second : Symbol(second, Decl(optionalMappedCycle.ts, 12, 59)) +>sharedOptionalCycles : Symbol(sharedOptionalCycles, Decl(optionalMappedCycle.ts, 12, 12)) +>second : Symbol(second, Decl(optionalMappedCycle.ts, 12, 59)) +>Node : Symbol(Node, Decl(optionalMappedCycle.ts, 5, 36)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 5, 59)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 5, 59)) +>value : Symbol(value, Decl(optionalMappedCycle.ts, 5, 44)) + +const quotedValue: string | undefined = nullableKeys["a-b"]?.next.next.value; +>quotedValue : Symbol(quotedValue, Decl(optionalMappedCycle.ts, 51, 5)) +>nullableKeys["a-b"]?.next.next.value : Symbol(value, Decl(optionalMappedCycle.ts, 15, 12)) +>nullableKeys["a-b"]?.next.next : Symbol(next, Decl(optionalMappedCycle.ts, 15, 27)) +>nullableKeys["a-b"]?.next : Symbol(next, Decl(optionalMappedCycle.ts, 15, 27)) +>nullableKeys : Symbol(nullableKeys, Decl(optionalMappedCycle.ts, 14, 12)) +>"a-b" : Symbol("a-b", Decl(optionalMappedCycle.ts, 14, 43)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 15, 27)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 15, 27)) +>value : Symbol(value, Decl(optionalMappedCycle.ts, 15, 12)) + +const numericValue: boolean | undefined = nullableKeys[0]?.next.next.value; +>numericValue : Symbol(numericValue, Decl(optionalMappedCycle.ts, 52, 5)) +>nullableKeys[0]?.next.next.value : Symbol(value, Decl(optionalMappedCycle.ts, 16, 8)) +>nullableKeys[0]?.next.next : Symbol(next, Decl(optionalMappedCycle.ts, 16, 24)) +>nullableKeys[0]?.next : Symbol(next, Decl(optionalMappedCycle.ts, 16, 24)) +>nullableKeys : Symbol(nullableKeys, Decl(optionalMappedCycle.ts, 14, 12)) +>0 : Symbol(0, Decl(optionalMappedCycle.ts, 15, 42)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 16, 24)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 16, 24)) +>value : Symbol(value, Decl(optionalMappedCycle.ts, 16, 8)) + +const symbolValue: number | undefined = nullableKeys[nullableKey]?.next.next.value; +>symbolValue : Symbol(symbolValue, Decl(optionalMappedCycle.ts, 53, 5)) +>nullableKeys[nullableKey]?.next.next.value : Symbol(value, Decl(optionalMappedCycle.ts, 17, 20)) +>nullableKeys[nullableKey]?.next.next : Symbol(next, Decl(optionalMappedCycle.ts, 17, 35)) +>nullableKeys[nullableKey]?.next : Symbol(next, Decl(optionalMappedCycle.ts, 17, 35)) +>nullableKeys : Symbol(nullableKeys, Decl(optionalMappedCycle.ts, 14, 12)) +>nullableKey : Symbol(nullableKey, Decl(optionalMappedCycle.ts, 13, 12)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 17, 35)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 17, 35)) +>value : Symbol(value, Decl(optionalMappedCycle.ts, 17, 20)) + +const nullableRootValue: number | undefined = nullableRoot?.next.next.value; +>nullableRootValue : Symbol(nullableRootValue, Decl(optionalMappedCycle.ts, 54, 5)) +>nullableRoot?.next.next.value : Symbol(value, Decl(optionalMappedCycle.ts, 20, 55)) +>nullableRoot?.next.next : Symbol(next, Decl(optionalMappedCycle.ts, 20, 70)) +>nullableRoot?.next : Symbol(next, Decl(optionalMappedCycle.ts, 20, 70)) +>nullableRoot : Symbol(nullableRoot, Decl(optionalMappedCycle.ts, 20, 12)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 20, 70)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 20, 70)) +>value : Symbol(value, Decl(optionalMappedCycle.ts, 20, 55)) + +const optionalRootValue: string | undefined = optionalRoot?.next.next.value; +>optionalRootValue : Symbol(optionalRootValue, Decl(optionalMappedCycle.ts, 55, 5)) +>optionalRoot?.next.next.value : Symbol(value, Decl(optionalMappedCycle.ts, 22, 55)) +>optionalRoot?.next.next : Symbol(next, Decl(optionalMappedCycle.ts, 22, 70)) +>optionalRoot?.next : Symbol(next, Decl(optionalMappedCycle.ts, 22, 70)) +>optionalRoot : Symbol(optionalRoot, Decl(optionalMappedCycle.ts, 22, 12)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 22, 70)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 22, 70)) +>value : Symbol(value, Decl(optionalMappedCycle.ts, 22, 55)) + +const nullableLinkValue: number | undefined = nullableLinks.Node?.next?.next?.value; +>nullableLinkValue : Symbol(nullableLinkValue, Decl(optionalMappedCycle.ts, 56, 5)) +>nullableLinks.Node?.next?.next?.value : Symbol(value, Decl(optionalMappedCycle.ts, 27, 57)) +>nullableLinks.Node?.next?.next : Symbol(next, Decl(optionalMappedCycle.ts, 27, 72)) +>nullableLinks.Node?.next : Symbol(next, Decl(optionalMappedCycle.ts, 27, 72)) +>nullableLinks.Node : Symbol(Node, Decl(optionalMappedCycle.ts, 27, 49)) +>nullableLinks : Symbol(nullableLinks, Decl(optionalMappedCycle.ts, 27, 12)) +>Node : Symbol(Node, Decl(optionalMappedCycle.ts, 27, 49)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 27, 72)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 27, 72)) +>value : Symbol(value, Decl(optionalMappedCycle.ts, 27, 57)) + +const nullishLinkValue: number | undefined = nullishLinks.Node?.next?.next?.value; +>nullishLinkValue : Symbol(nullishLinkValue, Decl(optionalMappedCycle.ts, 57, 5)) +>nullishLinks.Node?.next?.next?.value : Symbol(value, Decl(optionalMappedCycle.ts, 39, 55)) +>nullishLinks.Node?.next?.next : Symbol(next, Decl(optionalMappedCycle.ts, 39, 70)) +>nullishLinks.Node?.next : Symbol(next, Decl(optionalMappedCycle.ts, 39, 70)) +>nullishLinks.Node : Symbol(Node, Decl(optionalMappedCycle.ts, 39, 47)) +>nullishLinks : Symbol(nullishLinks, Decl(optionalMappedCycle.ts, 39, 12)) +>Node : Symbol(Node, Decl(optionalMappedCycle.ts, 39, 47)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 39, 70)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 39, 70)) +>value : Symbol(value, Decl(optionalMappedCycle.ts, 39, 55)) + +const optionalNullableLinkValue: number | undefined = optionalNullableLinks.Node?.next?.next?.value; +>optionalNullableLinkValue : Symbol(optionalNullableLinkValue, Decl(optionalMappedCycle.ts, 58, 5)) +>optionalNullableLinks.Node?.next?.next?.value : Symbol(value, Decl(optionalMappedCycle.ts, 29, 73)) +>optionalNullableLinks.Node?.next?.next : Symbol(next, Decl(optionalMappedCycle.ts, 29, 88)) +>optionalNullableLinks.Node?.next : Symbol(next, Decl(optionalMappedCycle.ts, 29, 88)) +>optionalNullableLinks.Node : Symbol(Node, Decl(optionalMappedCycle.ts, 29, 65)) +>optionalNullableLinks : Symbol(optionalNullableLinks, Decl(optionalMappedCycle.ts, 29, 12)) +>Node : Symbol(Node, Decl(optionalMappedCycle.ts, 29, 65)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 29, 88)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 29, 88)) +>value : Symbol(value, Decl(optionalMappedCycle.ts, 29, 73)) + +const nullableOptionalLinkValue: number | undefined = nullableOptionalLinks.Node?.next?.next?.value; +>nullableOptionalLinkValue : Symbol(nullableOptionalLinkValue, Decl(optionalMappedCycle.ts, 59, 5)) +>nullableOptionalLinks.Node?.next?.next?.value : Symbol(value, Decl(optionalMappedCycle.ts, 34, 73)) +>nullableOptionalLinks.Node?.next?.next : Symbol(next, Decl(optionalMappedCycle.ts, 34, 88)) +>nullableOptionalLinks.Node?.next : Symbol(next, Decl(optionalMappedCycle.ts, 34, 88)) +>nullableOptionalLinks.Node : Symbol(Node, Decl(optionalMappedCycle.ts, 34, 65)) +>nullableOptionalLinks : Symbol(nullableOptionalLinks, Decl(optionalMappedCycle.ts, 34, 12)) +>Node : Symbol(Node, Decl(optionalMappedCycle.ts, 34, 65)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 34, 88)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 34, 88)) +>value : Symbol(value, Decl(optionalMappedCycle.ts, 34, 73)) + +const optionalNextHasNull: null extends OptionalNode["next"] ? true : false = false; +>optionalNextHasNull : Symbol(optionalNextHasNull, Decl(optionalMappedCycle.ts, 60, 5)) +>OptionalNode : Symbol(OptionalNode, Decl(optionalMappedCycle.ts, 40, 33)) + +const optionalNextHasUndefined: undefined extends OptionalNode["next"] ? true : false = false; +>optionalNextHasUndefined : Symbol(optionalNextHasUndefined, Decl(optionalMappedCycle.ts, 61, 5)) +>OptionalNode : Symbol(OptionalNode, Decl(optionalMappedCycle.ts, 40, 33)) + +const nullableNextHasNull: null extends NullableNode["next"] ? true : false = false; +>nullableNextHasNull : Symbol(nullableNextHasNull, Decl(optionalMappedCycle.ts, 62, 5)) +>NullableNode : Symbol(NullableNode, Decl(optionalMappedCycle.ts, 41, 56)) + +const nullableNextHasUndefined: undefined extends NullableNode["next"] ? true : false = false; +>nullableNextHasUndefined : Symbol(nullableNextHasUndefined, Decl(optionalMappedCycle.ts, 63, 5)) +>NullableNode : Symbol(NullableNode, Decl(optionalMappedCycle.ts, 41, 56)) + +const nullableLinkHasNull: null extends NullableLinkNode["next"] ? true : false = true; +>nullableLinkHasNull : Symbol(nullableLinkHasNull, Decl(optionalMappedCycle.ts, 64, 5)) +>NullableLinkNode : Symbol(NullableLinkNode, Decl(optionalMappedCycle.ts, 42, 56)) + +const nullableLinkHasUndefined: undefined extends NullableLinkNode["next"] ? true : false = false; +>nullableLinkHasUndefined : Symbol(nullableLinkHasUndefined, Decl(optionalMappedCycle.ts, 65, 5)) +>NullableLinkNode : Symbol(NullableLinkNode, Decl(optionalMappedCycle.ts, 42, 56)) + +const nullishLinkHasNull: null extends NullishLinkNode["next"] ? true : false = true; +>nullishLinkHasNull : Symbol(nullishLinkHasNull, Decl(optionalMappedCycle.ts, 66, 5)) +>NullishLinkNode : Symbol(NullishLinkNode, Decl(optionalMappedCycle.ts, 43, 60)) + +const nullishLinkHasUndefined: undefined extends NullishLinkNode["next"] ? true : false = true; +>nullishLinkHasUndefined : Symbol(nullishLinkHasUndefined, Decl(optionalMappedCycle.ts, 67, 5)) +>NullishLinkNode : Symbol(NullishLinkNode, Decl(optionalMappedCycle.ts, 43, 60)) + +const optionalNullableLinkHasNull: null extends OptionalNullableLinkNode["next"] ? true : false = true; +>optionalNullableLinkHasNull : Symbol(optionalNullableLinkHasNull, Decl(optionalMappedCycle.ts, 68, 5)) +>OptionalNullableLinkNode : Symbol(OptionalNullableLinkNode, Decl(optionalMappedCycle.ts, 44, 58)) + +const optionalNullableLinkHasUndefined: undefined extends OptionalNullableLinkNode["next"] ? true : false = false; +>optionalNullableLinkHasUndefined : Symbol(optionalNullableLinkHasUndefined, Decl(optionalMappedCycle.ts, 69, 5)) +>OptionalNullableLinkNode : Symbol(OptionalNullableLinkNode, Decl(optionalMappedCycle.ts, 44, 58)) + +const nullableOptionalLinkHasNull: null extends NullableOptionalLinkNode["next"] ? true : false = false; +>nullableOptionalLinkHasNull : Symbol(nullableOptionalLinkHasNull, Decl(optionalMappedCycle.ts, 70, 5)) +>NullableOptionalLinkNode : Symbol(NullableOptionalLinkNode, Decl(optionalMappedCycle.ts, 45, 76)) + +const nullableOptionalLinkHasUndefined: undefined extends NullableOptionalLinkNode["next"] ? true : false = true; +>nullableOptionalLinkHasUndefined : Symbol(nullableOptionalLinkHasUndefined, Decl(optionalMappedCycle.ts, 71, 5)) +>NullableOptionalLinkNode : Symbol(NullableOptionalLinkNode, Decl(optionalMappedCycle.ts, 45, 76)) + +const invalidNullNext: OptionalNode["next"] = null; +>invalidNullNext : Symbol(invalidNullNext, Decl(optionalMappedCycle.ts, 72, 5)) +>OptionalNode : Symbol(OptionalNode, Decl(optionalMappedCycle.ts, 40, 33)) + +const invalidUndefinedNext: OptionalNode["next"] = undefined; +>invalidUndefinedNext : Symbol(invalidUndefinedNext, Decl(optionalMappedCycle.ts, 73, 5)) +>OptionalNode : Symbol(OptionalNode, Decl(optionalMappedCycle.ts, 40, 33)) +>undefined : Symbol(undefined) + +const invalidNullableLinkValue: number = nullableLinks.Node!.next.value; +>invalidNullableLinkValue : Symbol(invalidNullableLinkValue, Decl(optionalMappedCycle.ts, 74, 5)) +>nullableLinks.Node!.next.value : Symbol(value, Decl(optionalMappedCycle.ts, 27, 57)) +>nullableLinks.Node!.next : Symbol(next, Decl(optionalMappedCycle.ts, 27, 72)) +>nullableLinks.Node : Symbol(Node, Decl(optionalMappedCycle.ts, 27, 49)) +>nullableLinks : Symbol(nullableLinks, Decl(optionalMappedCycle.ts, 27, 12)) +>Node : Symbol(Node, Decl(optionalMappedCycle.ts, 27, 49)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 27, 72)) +>value : Symbol(value, Decl(optionalMappedCycle.ts, 27, 57)) + +const invalidNullishLinkValue: number = nullishLinks.Node!.next.value; +>invalidNullishLinkValue : Symbol(invalidNullishLinkValue, Decl(optionalMappedCycle.ts, 75, 5)) +>nullishLinks.Node!.next.value : Symbol(value, Decl(optionalMappedCycle.ts, 39, 55)) +>nullishLinks.Node!.next : Symbol(next, Decl(optionalMappedCycle.ts, 39, 70)) +>nullishLinks.Node : Symbol(Node, Decl(optionalMappedCycle.ts, 39, 47)) +>nullishLinks : Symbol(nullishLinks, Decl(optionalMappedCycle.ts, 39, 12)) +>Node : Symbol(Node, Decl(optionalMappedCycle.ts, 39, 47)) +>next : Symbol(next, Decl(optionalMappedCycle.ts, 39, 70)) +>value : Symbol(value, Decl(optionalMappedCycle.ts, 39, 55)) + +=== mixedMappedCycle.ts === +type Show = { [K in keyof T]: T[K] } & unknown; +>Show : Symbol(Show, Decl(mixedMappedCycle.ts, 0, 0)) +>T : Symbol(T, Decl(mixedMappedCycle.ts, 0, 10)) +>K : Symbol(K, Decl(mixedMappedCycle.ts, 0, 18)) +>T : Symbol(T, Decl(mixedMappedCycle.ts, 0, 10)) +>T : Symbol(T, Decl(mixedMappedCycle.ts, 0, 10)) +>K : Symbol(K, Decl(mixedMappedCycle.ts, 0, 18)) + +type Resolve = Show<{ +>Resolve : Symbol(Resolve, Decl(mixedMappedCycle.ts, 0, 50)) +>M : Symbol(M, Decl(mixedMappedCycle.ts, 1, 13)) +>K : Symbol(K, Decl(mixedMappedCycle.ts, 1, 15)) +>M : Symbol(M, Decl(mixedMappedCycle.ts, 1, 13)) +>Show : Symbol(Show, Decl(mixedMappedCycle.ts, 0, 0)) + + [P in keyof M[K]]: M[K][P] extends "ref" ? Resolve : M[K][P]; +>P : Symbol(P, Decl(mixedMappedCycle.ts, 2, 5)) +>M : Symbol(M, Decl(mixedMappedCycle.ts, 1, 13)) +>K : Symbol(K, Decl(mixedMappedCycle.ts, 1, 15)) +>M : Symbol(M, Decl(mixedMappedCycle.ts, 1, 13)) +>K : Symbol(K, Decl(mixedMappedCycle.ts, 1, 15)) +>P : Symbol(P, Decl(mixedMappedCycle.ts, 2, 5)) +>Resolve : Symbol(Resolve, Decl(mixedMappedCycle.ts, 0, 50)) +>M : Symbol(M, Decl(mixedMappedCycle.ts, 1, 13)) +>K : Symbol(K, Decl(mixedMappedCycle.ts, 1, 15)) +>M : Symbol(M, Decl(mixedMappedCycle.ts, 1, 13)) +>K : Symbol(K, Decl(mixedMappedCycle.ts, 1, 15)) +>P : Symbol(P, Decl(mixedMappedCycle.ts, 2, 5)) + +}>; +declare const build: () => { [K in keyof M]: Resolve | false | null }; +>build : Symbol(build, Decl(mixedMappedCycle.ts, 4, 13)) +>M : Symbol(M, Decl(mixedMappedCycle.ts, 4, 22)) +>K : Symbol(K, Decl(mixedMappedCycle.ts, 4, 33)) +>M : Symbol(M, Decl(mixedMappedCycle.ts, 4, 22)) +>Resolve : Symbol(Resolve, Decl(mixedMappedCycle.ts, 0, 50)) +>M : Symbol(M, Decl(mixedMappedCycle.ts, 4, 22)) +>K : Symbol(K, Decl(mixedMappedCycle.ts, 4, 33)) + +export const mixedCycle = build<{ Node: { value: number; next: "ref" } }>(); +>mixedCycle : Symbol(mixedCycle, Decl(mixedMappedCycle.ts, 5, 12)) +>build : Symbol(build, Decl(mixedMappedCycle.ts, 4, 13)) +>Node : Symbol(Node, Decl(mixedMappedCycle.ts, 5, 33)) +>value : Symbol(value, Decl(mixedMappedCycle.ts, 5, 41)) +>next : Symbol(next, Decl(mixedMappedCycle.ts, 5, 56)) + +if (mixedCycle.Node) { +>mixedCycle.Node : Symbol(Node, Decl(mixedMappedCycle.ts, 5, 33)) +>mixedCycle : Symbol(mixedCycle, Decl(mixedMappedCycle.ts, 5, 12)) +>Node : Symbol(Node, Decl(mixedMappedCycle.ts, 5, 33)) + + const value: number = mixedCycle.Node.next.next.value; +>value : Symbol(value, Decl(mixedMappedCycle.ts, 7, 9)) +>mixedCycle.Node.next.next.value : Symbol(value, Decl(mixedMappedCycle.ts, 5, 41)) +>mixedCycle.Node.next.next : Symbol(next, Decl(mixedMappedCycle.ts, 5, 56)) +>mixedCycle.Node.next : Symbol(next, Decl(mixedMappedCycle.ts, 5, 56)) +>mixedCycle.Node : Symbol(Node, Decl(mixedMappedCycle.ts, 5, 33)) +>mixedCycle : Symbol(mixedCycle, Decl(mixedMappedCycle.ts, 5, 12)) +>Node : Symbol(Node, Decl(mixedMappedCycle.ts, 5, 33)) +>next : Symbol(next, Decl(mixedMappedCycle.ts, 5, 56)) +>next : Symbol(next, Decl(mixedMappedCycle.ts, 5, 56)) +>value : Symbol(value, Decl(mixedMappedCycle.ts, 5, 41)) +} + +=== anonymousBindings.ts === +export const _recursive = 1; +>_recursive : Symbol(_recursive, Decl(anonymousBindings.ts, 0, 12)) + +export const factory = () => function self() { return self; }; +>factory : Symbol(factory, Decl(anonymousBindings.ts, 1, 12)) +>self : Symbol(self, Decl(anonymousBindings.ts, 1, 28)) +>self : Symbol(self, Decl(anonymousBindings.ts, 1, 28)) + +export function captured(value: T) { +>captured : Symbol(captured, Decl(anonymousBindings.ts, 1, 62)) +>T : Symbol(T, Decl(anonymousBindings.ts, 2, 25)) +>value : Symbol(value, Decl(anonymousBindings.ts, 2, 28)) +>T : Symbol(T, Decl(anonymousBindings.ts, 2, 25)) + + const node = { value, next: () => node, consume: (other: T) => node }; +>node : Symbol(node, Decl(anonymousBindings.ts, 3, 9)) +>value : Symbol(value, Decl(anonymousBindings.ts, 3, 18)) +>next : Symbol(next, Decl(anonymousBindings.ts, 3, 25)) +>node : Symbol(node, Decl(anonymousBindings.ts, 3, 9)) +>consume : Symbol(consume, Decl(anonymousBindings.ts, 3, 43)) +>other : Symbol(other, Decl(anonymousBindings.ts, 3, 54)) +>T : Symbol(T, Decl(anonymousBindings.ts, 2, 25)) +>node : Symbol(node, Decl(anonymousBindings.ts, 3, 9)) + + return node; +>node : Symbol(node, Decl(anonymousBindings.ts, 3, 9)) +} +export function nestedCaptured(outer: T) { +>nestedCaptured : Symbol(nestedCaptured, Decl(anonymousBindings.ts, 5, 1)) +>T : Symbol(T, Decl(anonymousBindings.ts, 6, 31)) +>outer : Symbol(outer, Decl(anonymousBindings.ts, 6, 34)) +>T : Symbol(T, Decl(anonymousBindings.ts, 6, 31)) + + return (inner: U) => { +>U : Symbol(U, Decl(anonymousBindings.ts, 7, 12)) +>inner : Symbol(inner, Decl(anonymousBindings.ts, 7, 15)) +>U : Symbol(U, Decl(anonymousBindings.ts, 7, 12)) + + const node = { +>node : Symbol(node, Decl(anonymousBindings.ts, 8, 13)) + + outer, +>outer : Symbol(outer, Decl(anonymousBindings.ts, 8, 22)) + + inner, +>inner : Symbol(inner, Decl(anonymousBindings.ts, 9, 18)) + + next: () => node, +>next : Symbol(next, Decl(anonymousBindings.ts, 10, 18)) +>node : Symbol(node, Decl(anonymousBindings.ts, 8, 13)) + + shadow: (value: T) => ({ outer, inner, value, next: node }), +>shadow : Symbol(shadow, Decl(anonymousBindings.ts, 11, 29)) +>T : Symbol(T, Decl(anonymousBindings.ts, 12, 21)) +>value : Symbol(value, Decl(anonymousBindings.ts, 12, 24)) +>T : Symbol(T, Decl(anonymousBindings.ts, 12, 21)) +>outer : Symbol(outer, Decl(anonymousBindings.ts, 12, 39)) +>inner : Symbol(inner, Decl(anonymousBindings.ts, 12, 46)) +>value : Symbol(value, Decl(anonymousBindings.ts, 12, 53)) +>next : Symbol(next, Decl(anonymousBindings.ts, 12, 60)) +>node : Symbol(node, Decl(anonymousBindings.ts, 8, 13)) + + }; + return node; +>node : Symbol(node, Decl(anonymousBindings.ts, 8, 13)) + + }; +} +export function constrained(key: K) { +>constrained : Symbol(constrained, Decl(anonymousBindings.ts, 16, 1)) +>T : Symbol(T, Decl(anonymousBindings.ts, 17, 28)) +>value : Symbol(value, Decl(anonymousBindings.ts, 17, 39)) +>K : Symbol(K, Decl(anonymousBindings.ts, 17, 56)) +>T : Symbol(T, Decl(anonymousBindings.ts, 17, 28)) +>key : Symbol(key, Decl(anonymousBindings.ts, 17, 76)) +>K : Symbol(K, Decl(anonymousBindings.ts, 17, 56)) + + const node = { value: null! as T[K], next: () => node }; +>node : Symbol(node, Decl(anonymousBindings.ts, 18, 9)) +>value : Symbol(value, Decl(anonymousBindings.ts, 18, 18)) +>T : Symbol(T, Decl(anonymousBindings.ts, 17, 28)) +>K : Symbol(K, Decl(anonymousBindings.ts, 17, 56)) +>next : Symbol(next, Decl(anonymousBindings.ts, 18, 40)) +>node : Symbol(node, Decl(anonymousBindings.ts, 18, 9)) + + return node; +>node : Symbol(node, Decl(anonymousBindings.ts, 18, 9)) +} +export function optionalCaptured(value: T) { +>optionalCaptured : Symbol(optionalCaptured, Decl(anonymousBindings.ts, 20, 1)) +>T : Symbol(T, Decl(anonymousBindings.ts, 21, 33)) +>value : Symbol(value, Decl(anonymousBindings.ts, 21, 36)) +>T : Symbol(T, Decl(anonymousBindings.ts, 21, 33)) + + type Node = { value: T; next: Node }; +>Node : Symbol(Node, Decl(anonymousBindings.ts, 21, 47)) +>value : Symbol(value, Decl(anonymousBindings.ts, 22, 17)) +>T : Symbol(T, Decl(anonymousBindings.ts, 21, 33)) +>next : Symbol(next, Decl(anonymousBindings.ts, 22, 27)) +>Node : Symbol(Node, Decl(anonymousBindings.ts, 21, 47)) + + return null! as { node?: Node | false | null }; +>node : Symbol(node, Decl(anonymousBindings.ts, 23, 21)) +>Node : Symbol(Node, Decl(anonymousBindings.ts, 21, 47)) +} +export function annotatedCaptured(value: T) { +>annotatedCaptured : Symbol(annotatedCaptured, Decl(anonymousBindings.ts, 24, 1)) +>T : Symbol(T, Decl(anonymousBindings.ts, 25, 34)) +>value : Symbol(value, Decl(anonymousBindings.ts, 25, 37)) +>T : Symbol(T, Decl(anonymousBindings.ts, 25, 34)) + + const node: { value: typeof value; next: typeof node } = { value, next: null! }; +>node : Symbol(node, Decl(anonymousBindings.ts, 26, 9)) +>value : Symbol(value, Decl(anonymousBindings.ts, 26, 17)) +>value : Symbol(value, Decl(anonymousBindings.ts, 25, 37)) +>next : Symbol(next, Decl(anonymousBindings.ts, 26, 38)) +>node : Symbol(node, Decl(anonymousBindings.ts, 26, 9)) +>value : Symbol(value, Decl(anonymousBindings.ts, 26, 62)) +>next : Symbol(next, Decl(anonymousBindings.ts, 26, 69)) + + return node; +>node : Symbol(node, Decl(anonymousBindings.ts, 26, 9)) +} +export function recursiveTuple(value: T) { +>recursiveTuple : Symbol(recursiveTuple, Decl(anonymousBindings.ts, 28, 1)) +>T : Symbol(T, Decl(anonymousBindings.ts, 29, 31)) +>value : Symbol(value, Decl(anonymousBindings.ts, 29, 34)) +>T : Symbol(T, Decl(anonymousBindings.ts, 29, 31)) + + type Tuple = readonly [T, Tuple]; +>Tuple : Symbol(Tuple, Decl(anonymousBindings.ts, 29, 45)) +>T : Symbol(T, Decl(anonymousBindings.ts, 29, 31)) +>Tuple : Symbol(Tuple, Decl(anonymousBindings.ts, 29, 45)) + + return null! as Tuple; +>Tuple : Symbol(Tuple, Decl(anonymousBindings.ts, 29, 45)) +} +export function inferredCaptured() { +>inferredCaptured : Symbol(inferredCaptured, Decl(anonymousBindings.ts, 32, 1)) +>T : Symbol(T, Decl(anonymousBindings.ts, 33, 33)) + + type Node = { value: V; next: Node }; +>Node : Symbol(Node, Decl(anonymousBindings.ts, 33, 39)) +>V : Symbol(V, Decl(anonymousBindings.ts, 34, 14)) +>value : Symbol(value, Decl(anonymousBindings.ts, 34, 20)) +>V : Symbol(V, Decl(anonymousBindings.ts, 34, 14)) +>next : Symbol(next, Decl(anonymousBindings.ts, 34, 30)) +>Node : Symbol(Node, Decl(anonymousBindings.ts, 33, 39)) +>V : Symbol(V, Decl(anonymousBindings.ts, 34, 14)) + + return null! as (T extends () => infer U ? Node : never); +>T : Symbol(T, Decl(anonymousBindings.ts, 33, 33)) +>U : Symbol(U, Decl(anonymousBindings.ts, 35, 42)) +>Node : Symbol(Node, Decl(anonymousBindings.ts, 33, 39)) +>U : Symbol(U, Decl(anonymousBindings.ts, 35, 42)) +} +export function mappedCaptured() { +>mappedCaptured : Symbol(mappedCaptured, Decl(anonymousBindings.ts, 36, 1)) +>T : Symbol(T, Decl(anonymousBindings.ts, 37, 31)) + + type Node = { [K in keyof T]: { value: T[K]; next: Node } }; +>Node : Symbol(Node, Decl(anonymousBindings.ts, 37, 37)) +>K : Symbol(K, Decl(anonymousBindings.ts, 38, 19)) +>T : Symbol(T, Decl(anonymousBindings.ts, 37, 31)) +>value : Symbol(value, Decl(anonymousBindings.ts, 38, 35)) +>T : Symbol(T, Decl(anonymousBindings.ts, 37, 31)) +>K : Symbol(K, Decl(anonymousBindings.ts, 38, 19)) +>next : Symbol(next, Decl(anonymousBindings.ts, 38, 48)) +>Node : Symbol(Node, Decl(anonymousBindings.ts, 37, 37)) + + return null! as Node; +>Node : Symbol(Node, Decl(anonymousBindings.ts, 37, 37)) +} +export function freshGeneric(unused: T) { +>freshGeneric : Symbol(freshGeneric, Decl(anonymousBindings.ts, 40, 1)) +>T : Symbol(T, Decl(anonymousBindings.ts, 41, 29)) +>unused : Symbol(unused, Decl(anonymousBindings.ts, 41, 32)) +>T : Symbol(T, Decl(anonymousBindings.ts, 41, 29)) + + const recur = (value: U) => recur; +>recur : Symbol(recur, Decl(anonymousBindings.ts, 42, 9)) +>U : Symbol(U, Decl(anonymousBindings.ts, 42, 19)) +>value : Symbol(value, Decl(anonymousBindings.ts, 42, 22)) +>U : Symbol(U, Decl(anonymousBindings.ts, 42, 19)) +>recur : Symbol(recur, Decl(anonymousBindings.ts, 42, 9)) + + return recur; +>recur : Symbol(recur, Decl(anonymousBindings.ts, 42, 9)) +} +export function mutualCaptured(left: T, right: U) { +>mutualCaptured : Symbol(mutualCaptured, Decl(anonymousBindings.ts, 44, 1)) +>T : Symbol(T, Decl(anonymousBindings.ts, 45, 31)) +>U : Symbol(U, Decl(anonymousBindings.ts, 45, 33)) +>left : Symbol(left, Decl(anonymousBindings.ts, 45, 37)) +>T : Symbol(T, Decl(anonymousBindings.ts, 45, 31)) +>right : Symbol(right, Decl(anonymousBindings.ts, 45, 45)) +>U : Symbol(U, Decl(anonymousBindings.ts, 45, 33)) + + type Left = { left: T; next: Right }; +>Left : Symbol(Left, Decl(anonymousBindings.ts, 45, 57)) +>left : Symbol(left, Decl(anonymousBindings.ts, 46, 17)) +>T : Symbol(T, Decl(anonymousBindings.ts, 45, 31)) +>next : Symbol(next, Decl(anonymousBindings.ts, 46, 26)) +>Right : Symbol(Right, Decl(anonymousBindings.ts, 46, 41)) + + type Right = { right: U; self: Right; next: Left }; +>Right : Symbol(Right, Decl(anonymousBindings.ts, 46, 41)) +>right : Symbol(right, Decl(anonymousBindings.ts, 47, 18)) +>U : Symbol(U, Decl(anonymousBindings.ts, 45, 33)) +>self : Symbol(self, Decl(anonymousBindings.ts, 47, 28)) +>Right : Symbol(Right, Decl(anonymousBindings.ts, 46, 41)) +>next : Symbol(next, Decl(anonymousBindings.ts, 47, 41)) +>Left : Symbol(Left, Decl(anonymousBindings.ts, 45, 57)) + + return { left: null! as Left, right: null! as Right }; +>left : Symbol(left, Decl(anonymousBindings.ts, 48, 12)) +>Left : Symbol(Left, Decl(anonymousBindings.ts, 45, 57)) +>right : Symbol(right, Decl(anonymousBindings.ts, 48, 33)) +>Right : Symbol(Right, Decl(anonymousBindings.ts, 46, 41)) +} +export class CapturedClass { +>CapturedClass : Symbol(CapturedClass, Decl(anonymousBindings.ts, 49, 1)) +>T : Symbol(T, Decl(anonymousBindings.ts, 50, 27)) + + constructor(public value: T) {} +>value : Symbol(CapturedClass.value, Decl(anonymousBindings.ts, 51, 16)) +>T : Symbol(T, Decl(anonymousBindings.ts, 50, 27)) + + make(inner: U) { +>make : Symbol(CapturedClass.make, Decl(anonymousBindings.ts, 51, 35)) +>U : Symbol(U, Decl(anonymousBindings.ts, 52, 9)) +>T : Symbol(T, Decl(anonymousBindings.ts, 50, 27)) +>inner : Symbol(inner, Decl(anonymousBindings.ts, 52, 22)) +>U : Symbol(U, Decl(anonymousBindings.ts, 52, 9)) + + const node = { outer: this.value, inner, next: () => node }; +>node : Symbol(node, Decl(anonymousBindings.ts, 53, 13)) +>outer : Symbol(outer, Decl(anonymousBindings.ts, 53, 22)) +>this.value : Symbol(CapturedClass.value, Decl(anonymousBindings.ts, 51, 16)) +>this : Symbol(CapturedClass, Decl(anonymousBindings.ts, 49, 1)) +>value : Symbol(CapturedClass.value, Decl(anonymousBindings.ts, 51, 16)) +>inner : Symbol(inner, Decl(anonymousBindings.ts, 53, 41)) +>next : Symbol(next, Decl(anonymousBindings.ts, 53, 48)) +>node : Symbol(node, Decl(anonymousBindings.ts, 53, 13)) + + return node; +>node : Symbol(node, Decl(anonymousBindings.ts, 53, 13)) + } +} +export function covariantClass() { +>covariantClass : Symbol(covariantClass, Decl(anonymousBindings.ts, 56, 1)) + + return class Node { +>Node : Symbol(Node, Decl(anonymousBindings.ts, 58, 10)) +>T : Symbol(T, Decl(anonymousBindings.ts, 58, 22)) + + value!: T; +>value : Symbol(Node.value, Decl(anonymousBindings.ts, 58, 30)) +>T : Symbol(T, Decl(anonymousBindings.ts, 58, 22)) + + next(): Node { return this; } +>next : Symbol(Node.next, Decl(anonymousBindings.ts, 59, 18)) +>Node : Symbol(Node, Decl(anonymousBindings.ts, 58, 10)) +>T : Symbol(T, Decl(anonymousBindings.ts, 58, 22)) +>this : Symbol(Node, Decl(anonymousBindings.ts, 58, 10)) + + }; +} +export function contravariantClass() { +>contravariantClass : Symbol(contravariantClass, Decl(anonymousBindings.ts, 62, 1)) + + return class Node { +>Node : Symbol(Node, Decl(anonymousBindings.ts, 64, 10)) +>T : Symbol(T, Decl(anonymousBindings.ts, 64, 22)) + + consume!: (value: T) => void; +>consume : Symbol(Node.consume, Decl(anonymousBindings.ts, 64, 29)) +>value : Symbol(value, Decl(anonymousBindings.ts, 65, 19)) +>T : Symbol(T, Decl(anonymousBindings.ts, 64, 22)) + + next(): Node { return this; } +>next : Symbol(Node.next, Decl(anonymousBindings.ts, 65, 37)) +>Node : Symbol(Node, Decl(anonymousBindings.ts, 64, 10)) +>T : Symbol(T, Decl(anonymousBindings.ts, 64, 22)) +>this : Symbol(Node, Decl(anonymousBindings.ts, 64, 10)) + + }; +} +export namespace Nested { +>Nested : Symbol(Nested, Decl(anonymousBindings.ts, 68, 1)) + + export function captured(value: T) { +>captured : Symbol(captured, Decl(anonymousBindings.ts, 69, 25)) +>T : Symbol(T, Decl(anonymousBindings.ts, 70, 29)) +>value : Symbol(value, Decl(anonymousBindings.ts, 70, 32)) +>T : Symbol(T, Decl(anonymousBindings.ts, 70, 29)) + + const node = { value, next: () => node }; +>node : Symbol(node, Decl(anonymousBindings.ts, 71, 13)) +>value : Symbol(value, Decl(anonymousBindings.ts, 71, 22)) +>next : Symbol(next, Decl(anonymousBindings.ts, 71, 29)) +>node : Symbol(node, Decl(anonymousBindings.ts, 71, 13)) + + return node; +>node : Symbol(node, Decl(anonymousBindings.ts, 71, 13)) + } +} +const capturedValue: string = captured("text").next().consume("other").value; +>capturedValue : Symbol(capturedValue, Decl(anonymousBindings.ts, 75, 5)) +>captured("text").next().consume("other").value : Symbol(value, Decl(anonymousBindings.ts, 3, 18)) +>captured("text").next().consume : Symbol(consume, Decl(anonymousBindings.ts, 3, 43)) +>captured("text").next : Symbol(next, Decl(anonymousBindings.ts, 3, 25)) +>captured : Symbol(captured, Decl(anonymousBindings.ts, 1, 62)) +>next : Symbol(next, Decl(anonymousBindings.ts, 3, 25)) +>consume : Symbol(consume, Decl(anonymousBindings.ts, 3, 43)) +>value : Symbol(value, Decl(anonymousBindings.ts, 3, 18)) + +const nestedValue = nestedCaptured(1)("text").shadow(true).next.next(); +>nestedValue : Symbol(nestedValue, Decl(anonymousBindings.ts, 76, 5)) +>nestedCaptured(1)("text").shadow(true).next.next : Symbol(next, Decl(anonymousBindings.ts, 10, 18)) +>nestedCaptured(1)("text").shadow(true).next : Symbol(next, Decl(anonymousBindings.ts, 12, 60)) +>nestedCaptured(1)("text").shadow : Symbol(shadow, Decl(anonymousBindings.ts, 11, 29)) +>nestedCaptured : Symbol(nestedCaptured, Decl(anonymousBindings.ts, 5, 1)) +>shadow : Symbol(shadow, Decl(anonymousBindings.ts, 11, 29)) +>next : Symbol(next, Decl(anonymousBindings.ts, 12, 60)) +>next : Symbol(next, Decl(anonymousBindings.ts, 10, 18)) + +const nestedOuter: number = nestedValue.outer; +>nestedOuter : Symbol(nestedOuter, Decl(anonymousBindings.ts, 77, 5)) +>nestedValue.outer : Symbol(outer, Decl(anonymousBindings.ts, 8, 22)) +>nestedValue : Symbol(nestedValue, Decl(anonymousBindings.ts, 76, 5)) +>outer : Symbol(outer, Decl(anonymousBindings.ts, 8, 22)) + +const nestedInner: string = nestedValue.inner; +>nestedInner : Symbol(nestedInner, Decl(anonymousBindings.ts, 78, 5)) +>nestedValue.inner : Symbol(inner, Decl(anonymousBindings.ts, 9, 18)) +>nestedValue : Symbol(nestedValue, Decl(anonymousBindings.ts, 76, 5)) +>inner : Symbol(inner, Decl(anonymousBindings.ts, 9, 18)) + +const constrainedValue: number = constrained<{ value: number }, "value">("value").next().value; +>constrainedValue : Symbol(constrainedValue, Decl(anonymousBindings.ts, 79, 5)) +>constrained<{ value: number }, "value">("value").next().value : Symbol(value, Decl(anonymousBindings.ts, 18, 18)) +>constrained<{ value: number }, "value">("value").next : Symbol(next, Decl(anonymousBindings.ts, 18, 40)) +>constrained : Symbol(constrained, Decl(anonymousBindings.ts, 16, 1)) +>value : Symbol(value, Decl(anonymousBindings.ts, 79, 46)) +>next : Symbol(next, Decl(anonymousBindings.ts, 18, 40)) +>value : Symbol(value, Decl(anonymousBindings.ts, 18, 18)) + +const annotatedValue: string = annotatedCaptured("text").next.next.value; +>annotatedValue : Symbol(annotatedValue, Decl(anonymousBindings.ts, 80, 5)) +>annotatedCaptured("text").next.next.value : Symbol(value, Decl(anonymousBindings.ts, 26, 17)) +>annotatedCaptured("text").next.next : Symbol(next, Decl(anonymousBindings.ts, 26, 38)) +>annotatedCaptured("text").next : Symbol(next, Decl(anonymousBindings.ts, 26, 38)) +>annotatedCaptured : Symbol(annotatedCaptured, Decl(anonymousBindings.ts, 24, 1)) +>next : Symbol(next, Decl(anonymousBindings.ts, 26, 38)) +>next : Symbol(next, Decl(anonymousBindings.ts, 26, 38)) +>value : Symbol(value, Decl(anonymousBindings.ts, 26, 17)) + +const tupleValue: string = recursiveTuple("text")[1][1][0]; +>tupleValue : Symbol(tupleValue, Decl(anonymousBindings.ts, 81, 5)) +>recursiveTuple : Symbol(recursiveTuple, Decl(anonymousBindings.ts, 28, 1)) +>1 : Symbol(1) +>1 : Symbol(1) +>0 : Symbol(0) + +const namespaceValue: number = Nested.captured(1).next().next().value; +>namespaceValue : Symbol(namespaceValue, Decl(anonymousBindings.ts, 82, 5)) +>Nested.captured(1).next().next().value : Symbol(value, Decl(anonymousBindings.ts, 71, 22)) +>Nested.captured(1).next().next : Symbol(next, Decl(anonymousBindings.ts, 71, 29)) +>Nested.captured(1).next : Symbol(next, Decl(anonymousBindings.ts, 71, 29)) +>Nested.captured : Symbol(Nested.captured, Decl(anonymousBindings.ts, 69, 25)) +>Nested : Symbol(Nested, Decl(anonymousBindings.ts, 68, 1)) +>captured : Symbol(Nested.captured, Decl(anonymousBindings.ts, 69, 25)) +>next : Symbol(next, Decl(anonymousBindings.ts, 71, 29)) +>next : Symbol(next, Decl(anonymousBindings.ts, 71, 29)) +>value : Symbol(value, Decl(anonymousBindings.ts, 71, 22)) + +const inferredValue: string = inferredCaptured<() => string>().next.next.value; +>inferredValue : Symbol(inferredValue, Decl(anonymousBindings.ts, 83, 5)) +>inferredCaptured<() => string>().next.next.value : Symbol(value, Decl(anonymousBindings.ts, 34, 20)) +>inferredCaptured<() => string>().next.next : Symbol(next, Decl(anonymousBindings.ts, 34, 30)) +>inferredCaptured<() => string>().next : Symbol(next, Decl(anonymousBindings.ts, 34, 30)) +>inferredCaptured : Symbol(inferredCaptured, Decl(anonymousBindings.ts, 32, 1)) +>next : Symbol(next, Decl(anonymousBindings.ts, 34, 30)) +>next : Symbol(next, Decl(anonymousBindings.ts, 34, 30)) +>value : Symbol(value, Decl(anonymousBindings.ts, 34, 20)) + +const mappedValue: number = mappedCaptured<{ value: number }>().value.next.value.value; +>mappedValue : Symbol(mappedValue, Decl(anonymousBindings.ts, 84, 5)) +>mappedCaptured<{ value: number }>().value.next.value.value : Symbol(value, Decl(anonymousBindings.ts, 38, 35)) +>mappedCaptured<{ value: number }>().value.next.value : Symbol(value, Decl(anonymousBindings.ts, 84, 44)) +>mappedCaptured<{ value: number }>().value.next : Symbol(next, Decl(anonymousBindings.ts, 38, 48)) +>mappedCaptured<{ value: number }>().value : Symbol(value, Decl(anonymousBindings.ts, 84, 44)) +>mappedCaptured : Symbol(mappedCaptured, Decl(anonymousBindings.ts, 36, 1)) +>value : Symbol(value, Decl(anonymousBindings.ts, 84, 44)) +>value : Symbol(value, Decl(anonymousBindings.ts, 84, 44)) +>next : Symbol(next, Decl(anonymousBindings.ts, 38, 48)) +>value : Symbol(value, Decl(anonymousBindings.ts, 84, 44)) +>value : Symbol(value, Decl(anonymousBindings.ts, 38, 35)) + +const freshValue = freshGeneric(1)("text")(true)(2); +>freshValue : Symbol(freshValue, Decl(anonymousBindings.ts, 85, 5)) +>freshGeneric : Symbol(freshGeneric, Decl(anonymousBindings.ts, 40, 1)) + +const mutualValue: string = mutualCaptured(1, "text").left.next.self.next.next.right; +>mutualValue : Symbol(mutualValue, Decl(anonymousBindings.ts, 86, 5)) +>mutualCaptured(1, "text").left.next.self.next.next.right : Symbol(right, Decl(anonymousBindings.ts, 47, 18)) +>mutualCaptured(1, "text").left.next.self.next.next : Symbol(next, Decl(anonymousBindings.ts, 46, 26)) +>mutualCaptured(1, "text").left.next.self.next : Symbol(next, Decl(anonymousBindings.ts, 47, 41)) +>mutualCaptured(1, "text").left.next.self : Symbol(self, Decl(anonymousBindings.ts, 47, 28)) +>mutualCaptured(1, "text").left.next : Symbol(next, Decl(anonymousBindings.ts, 46, 26)) +>mutualCaptured(1, "text").left : Symbol(left, Decl(anonymousBindings.ts, 48, 12)) +>mutualCaptured : Symbol(mutualCaptured, Decl(anonymousBindings.ts, 44, 1)) +>left : Symbol(left, Decl(anonymousBindings.ts, 48, 12)) +>next : Symbol(next, Decl(anonymousBindings.ts, 46, 26)) +>self : Symbol(self, Decl(anonymousBindings.ts, 47, 28)) +>next : Symbol(next, Decl(anonymousBindings.ts, 47, 41)) +>next : Symbol(next, Decl(anonymousBindings.ts, 46, 26)) +>right : Symbol(right, Decl(anonymousBindings.ts, 47, 18)) + +const classValue: string = new CapturedClass("text").make("other").next().outer; +>classValue : Symbol(classValue, Decl(anonymousBindings.ts, 87, 5)) +>new CapturedClass("text").make("other").next().outer : Symbol(outer, Decl(anonymousBindings.ts, 53, 22)) +>new CapturedClass("text").make("other").next : Symbol(next, Decl(anonymousBindings.ts, 53, 48)) +>new CapturedClass("text").make : Symbol(CapturedClass.make, Decl(anonymousBindings.ts, 51, 35)) +>CapturedClass : Symbol(CapturedClass, Decl(anonymousBindings.ts, 49, 1)) +>make : Symbol(CapturedClass.make, Decl(anonymousBindings.ts, 51, 35)) +>next : Symbol(next, Decl(anonymousBindings.ts, 53, 48)) +>outer : Symbol(outer, Decl(anonymousBindings.ts, 53, 22)) + +const optional = optionalCaptured("text"); +>optional : Symbol(optional, Decl(anonymousBindings.ts, 88, 5)) +>optionalCaptured : Symbol(optionalCaptured, Decl(anonymousBindings.ts, 20, 1)) + +if (optional.node) { +>optional.node : Symbol(node, Decl(anonymousBindings.ts, 23, 21)) +>optional : Symbol(optional, Decl(anonymousBindings.ts, 88, 5)) +>node : Symbol(node, Decl(anonymousBindings.ts, 23, 21)) + + const value: string = optional.node.next.next.value; +>value : Symbol(value, Decl(anonymousBindings.ts, 90, 9)) +>optional.node.next.next.value : Symbol(value, Decl(anonymousBindings.ts, 22, 17)) +>optional.node.next.next : Symbol(next, Decl(anonymousBindings.ts, 22, 27)) +>optional.node.next : Symbol(next, Decl(anonymousBindings.ts, 22, 27)) +>optional.node : Symbol(node, Decl(anonymousBindings.ts, 23, 21)) +>optional : Symbol(optional, Decl(anonymousBindings.ts, 88, 5)) +>node : Symbol(node, Decl(anonymousBindings.ts, 23, 21)) +>next : Symbol(next, Decl(anonymousBindings.ts, 22, 27)) +>next : Symbol(next, Decl(anonymousBindings.ts, 22, 27)) +>value : Symbol(value, Decl(anonymousBindings.ts, 22, 17)) +} +captured("text").consume(1); +>captured("text").consume : Symbol(consume, Decl(anonymousBindings.ts, 3, 43)) +>captured : Symbol(captured, Decl(anonymousBindings.ts, 1, 62)) +>consume : Symbol(consume, Decl(anonymousBindings.ts, 3, 43)) + +const invalidTupleValue: number = recursiveTuple("text")[1][0]; +>invalidTupleValue : Symbol(invalidTupleValue, Decl(anonymousBindings.ts, 93, 5)) +>recursiveTuple : Symbol(recursiveTuple, Decl(anonymousBindings.ts, 28, 1)) +>1 : Symbol(1) +>0 : Symbol(0) + +=== shadowedMappedCycle.ts === +type Show = { [K in keyof T]: T[K] } & unknown; +>Show : Symbol(Show, Decl(shadowedMappedCycle.ts, 0, 0)) +>T : Symbol(T, Decl(shadowedMappedCycle.ts, 0, 10)) +>K : Symbol(K, Decl(shadowedMappedCycle.ts, 0, 18)) +>T : Symbol(T, Decl(shadowedMappedCycle.ts, 0, 10)) +>T : Symbol(T, Decl(shadowedMappedCycle.ts, 0, 10)) +>K : Symbol(K, Decl(shadowedMappedCycle.ts, 0, 18)) + +type Resolve = Show<{ +>Resolve : Symbol(Resolve, Decl(shadowedMappedCycle.ts, 0, 50)) +>M : Symbol(M, Decl(shadowedMappedCycle.ts, 1, 13)) +>K : Symbol(K, Decl(shadowedMappedCycle.ts, 1, 15)) +>M : Symbol(M, Decl(shadowedMappedCycle.ts, 1, 13)) +>Show : Symbol(Show, Decl(shadowedMappedCycle.ts, 0, 0)) + + [P in keyof M[K]]: M[K][P] extends "ref" ? (shadowedCycle: T) => Resolve : M[K][P]; +>P : Symbol(P, Decl(shadowedMappedCycle.ts, 2, 5)) +>M : Symbol(M, Decl(shadowedMappedCycle.ts, 1, 13)) +>K : Symbol(K, Decl(shadowedMappedCycle.ts, 1, 15)) +>M : Symbol(M, Decl(shadowedMappedCycle.ts, 1, 13)) +>K : Symbol(K, Decl(shadowedMappedCycle.ts, 1, 15)) +>P : Symbol(P, Decl(shadowedMappedCycle.ts, 2, 5)) +>T : Symbol(T, Decl(shadowedMappedCycle.ts, 2, 48)) +>shadowedCycle : Symbol(shadowedCycle, Decl(shadowedMappedCycle.ts, 2, 51)) +>T : Symbol(T, Decl(shadowedMappedCycle.ts, 2, 48)) +>Resolve : Symbol(Resolve, Decl(shadowedMappedCycle.ts, 0, 50)) +>M : Symbol(M, Decl(shadowedMappedCycle.ts, 1, 13)) +>K : Symbol(K, Decl(shadowedMappedCycle.ts, 1, 15)) +>M : Symbol(M, Decl(shadowedMappedCycle.ts, 1, 13)) +>K : Symbol(K, Decl(shadowedMappedCycle.ts, 1, 15)) +>P : Symbol(P, Decl(shadowedMappedCycle.ts, 2, 5)) + +}>; +declare const build: () => { [K in keyof M]: Resolve }; +>build : Symbol(build, Decl(shadowedMappedCycle.ts, 4, 13)) +>M : Symbol(M, Decl(shadowedMappedCycle.ts, 4, 22)) +>K : Symbol(K, Decl(shadowedMappedCycle.ts, 4, 33)) +>M : Symbol(M, Decl(shadowedMappedCycle.ts, 4, 22)) +>Resolve : Symbol(Resolve, Decl(shadowedMappedCycle.ts, 0, 50)) +>M : Symbol(M, Decl(shadowedMappedCycle.ts, 4, 22)) +>K : Symbol(K, Decl(shadowedMappedCycle.ts, 4, 33)) + +export const shadowedCycle = build<{ Node: { value: number; next: "ref" } }>(); +>shadowedCycle : Symbol(shadowedCycle, Decl(shadowedMappedCycle.ts, 5, 12)) +>build : Symbol(build, Decl(shadowedMappedCycle.ts, 4, 13)) +>Node : Symbol(Node, Decl(shadowedMappedCycle.ts, 5, 36)) +>value : Symbol(value, Decl(shadowedMappedCycle.ts, 5, 44)) +>next : Symbol(next, Decl(shadowedMappedCycle.ts, 5, 59)) + +const shadowedValue: number = shadowedCycle.Node.next(1).next("text").value; +>shadowedValue : Symbol(shadowedValue, Decl(shadowedMappedCycle.ts, 6, 5)) +>shadowedCycle.Node.next(1).next("text").value : Symbol(value, Decl(shadowedMappedCycle.ts, 5, 44)) +>shadowedCycle.Node.next(1).next : Symbol(next, Decl(shadowedMappedCycle.ts, 5, 59)) +>shadowedCycle.Node.next : Symbol(next, Decl(shadowedMappedCycle.ts, 5, 59)) +>shadowedCycle.Node : Symbol(Node, Decl(shadowedMappedCycle.ts, 5, 36)) +>shadowedCycle : Symbol(shadowedCycle, Decl(shadowedMappedCycle.ts, 5, 12)) +>Node : Symbol(Node, Decl(shadowedMappedCycle.ts, 5, 36)) +>next : Symbol(next, Decl(shadowedMappedCycle.ts, 5, 59)) +>next : Symbol(next, Decl(shadowedMappedCycle.ts, 5, 59)) +>value : Symbol(value, Decl(shadowedMappedCycle.ts, 5, 44)) + diff --git a/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.types b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.types index 7f4921e58c412..824f65210aff0 100644 --- a/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.types +++ b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.types @@ -1370,3 +1370,1250 @@ const inferredValue: string = inferredCopy.next(1).second("text").value; >"text" : "text" >value : string +=== mappedCycles.ts === +type Show = { [K in keyof T]: T[K] } & unknown; +>Show : { [K in keyof T]: T[K]; } + +type Resolve = Show<{ +>Resolve : { [P in keyof M[K]]: M[K][P] extends "ref" ? any extends infer T_1 ? { [K_1 in keyof T_1]: T_1[K_1]; } : never : M[K][P]; } extends infer T ? { [K_1 in keyof T]: T[K_1]; } : never + + [P in keyof M[K]]: M[K][P] extends "ref" ? Resolve : M[K][P]; +}>; +declare const build: () => { [K in keyof M]: Resolve }; +>build : () => { [K in keyof M]: Resolve; } + +export const mappedCycle = build<{ Node: { value: number; next: "ref" } }>(); +>mappedCycle : { Node: { value: number; next: any; }; } +>build<{ Node: { value: number; next: "ref" } }>() : { Node: { value: number; next: any; }; } +>build : () => { [K in keyof M]: Resolve; } +>Node : { value: number; next: "ref"; } +>value : number +>next : "ref" + +export const mappedCycleCopy = mappedCycle; +>mappedCycleCopy : { Node: { value: number; next: any; }; } +>mappedCycle : { Node: { value: number; next: any; }; } + +export const nestedCycle = { wrapped: build<{ Node: { value: string; next: "ref" } }>() }; +>nestedCycle : { wrapped: { Node: { value: string; next: any; }; }; } +>{ wrapped: build<{ Node: { value: string; next: "ref" } }>() } : { wrapped: { Node: { value: string; next: any; }; }; } +>wrapped : { Node: { value: string; next: any; }; } +>build<{ Node: { value: string; next: "ref" } }>() : { Node: { value: string; next: any; }; } +>build : () => { [K in keyof M]: Resolve; } +>Node : { value: string; next: "ref"; } +>value : string +>next : "ref" + +export const cycleKey = Symbol(); +>cycleKey : unique symbol +>Symbol() : unique symbol +>Symbol : SymbolConstructor + +export const keyedCycles = build<{ +>keyedCycles : { "a-b": { value: string; next: any; }; 0: { value: boolean; next: any; }; [cycleKey]: { value: number; next: any; }; } +>build<{ "a-b": { value: string; next: "ref" }; 0: { value: boolean; next: "ref" }; [cycleKey]: { value: number; next: "ref" };}>() : { "a-b": { value: string; next: any; }; 0: { value: boolean; next: any; }; [cycleKey]: { value: number; next: any; }; } +>build : () => { [K in keyof M]: Resolve; } + + "a-b": { value: string; next: "ref" }; +>"a-b" : { value: string; next: "ref"; } +>value : string +>next : "ref" + + 0: { value: boolean; next: "ref" }; +>0 : { value: boolean; next: "ref"; } +>value : boolean +>next : "ref" + + [cycleKey]: { value: number; next: "ref" }; +>[cycleKey] : { value: number; next: "ref"; } +>cycleKey : unique symbol +>value : number +>next : "ref" + +}>(); +export const sharedCycles = { +>sharedCycles : { first: { Node: { value: number; next: any; }; }; second: { Node: { value: number; next: any; }; }; } +>{ first: mappedCycle, second: mappedCycle,} : { first: { Node: { value: number; next: any; }; }; second: { Node: { value: number; next: any; }; }; } + + first: mappedCycle, +>first : { Node: { value: number; next: any; }; } +>mappedCycle : { Node: { value: number; next: any; }; } + + second: mappedCycle, +>second : { Node: { value: number; next: any; }; } +>mappedCycle : { Node: { value: number; next: any; }; } + +}; +export const broadCycle: { Node: unknown } = mappedCycle; +>broadCycle : { Node: unknown; } +>Node : unknown +>mappedCycle : { Node: { value: number; next: any; }; } + +type ResolveMutual = Show<{ +>ResolveMutual : { [P in keyof M[K]]: M[K][P] extends { ref: infer R extends keyof M; } ? { [P_1 in keyof M[R]]: M[R][P_1] extends { ref: infer R extends keyof M; } ? any : M[R][P_1]; } extends infer T_1 ? { [K_1 in keyof T_1]: T_1[K_1]; } : never : M[K][P]; } extends infer T ? { [K_1 in keyof T]: T[K_1]; } : never + + [P in keyof M[K]]: M[K][P] extends { ref: infer R extends keyof M } ? ResolveMutual : M[K][P]; +>ref : R + +}>; +declare const buildMutual: () => { [K in keyof M]: ResolveMutual }; +>buildMutual : () => { [K in keyof M]: ResolveMutual; } + +export const mutualCycle = buildMutual<{ +>mutualCycle : { First: { value: number; next: { value: string; next: any; }; }; Second: { value: string; next: { value: number; next: any; }; }; } +>buildMutual<{ First: { value: number; next: { ref: "Second" } }; Second: { value: string; next: { ref: "First" } };}>() : { First: { value: number; next: { value: string; next: any; }; }; Second: { value: string; next: { value: number; next: any; }; }; } +>buildMutual : () => { [K in keyof M]: ResolveMutual; } + + First: { value: number; next: { ref: "Second" } }; +>First : { value: number; next: { ref: "Second"; }; } +>value : number +>next : { ref: "Second"; } +>ref : "Second" + + Second: { value: string; next: { ref: "First" } }; +>Second : { value: string; next: { ref: "First"; }; } +>value : string +>next : { ref: "First"; } +>ref : "First" + +}>(); + +const mappedValue: number = mappedCycle.Node.next.next.value; +>mappedValue : number +>mappedCycle.Node.next.next.value : number +>mappedCycle.Node.next.next : { value: number; next: any; } +>mappedCycle.Node.next : { value: number; next: any; } +>mappedCycle.Node : { value: number; next: any; } +>mappedCycle : { Node: { value: number; next: any; }; } +>Node : { value: number; next: any; } +>next : { value: number; next: any; } +>next : { value: number; next: any; } +>value : number + +const nestedMappedValue: string = nestedCycle.wrapped.Node.next.next.value; +>nestedMappedValue : string +>nestedCycle.wrapped.Node.next.next.value : string +>nestedCycle.wrapped.Node.next.next : { value: string; next: any; } +>nestedCycle.wrapped.Node.next : { value: string; next: any; } +>nestedCycle.wrapped.Node : { value: string; next: any; } +>nestedCycle.wrapped : { Node: { value: string; next: any; }; } +>nestedCycle : { wrapped: { Node: { value: string; next: any; }; }; } +>wrapped : { Node: { value: string; next: any; }; } +>Node : { value: string; next: any; } +>next : { value: string; next: any; } +>next : { value: string; next: any; } +>value : string + +const quotedMappedValue: string = keyedCycles["a-b"].next.next.value; +>quotedMappedValue : string +>keyedCycles["a-b"].next.next.value : string +>keyedCycles["a-b"].next.next : { value: string; next: any; } +>keyedCycles["a-b"].next : { value: string; next: any; } +>keyedCycles["a-b"] : { value: string; next: any; } +>keyedCycles : { "a-b": { value: string; next: any; }; 0: { value: boolean; next: any; }; [cycleKey]: { value: number; next: any; }; } +>"a-b" : "a-b" +>next : { value: string; next: any; } +>next : { value: string; next: any; } +>value : string + +const numericMappedValue: boolean = keyedCycles[0].next.next.value; +>numericMappedValue : boolean +>keyedCycles[0].next.next.value : boolean +>keyedCycles[0].next.next : { value: boolean; next: any; } +>keyedCycles[0].next : { value: boolean; next: any; } +>keyedCycles[0] : { value: boolean; next: any; } +>keyedCycles : { "a-b": { value: string; next: any; }; 0: { value: boolean; next: any; }; [cycleKey]: { value: number; next: any; }; } +>0 : 0 +>next : { value: boolean; next: any; } +>next : { value: boolean; next: any; } +>value : boolean + +const symbolMappedValue: number = keyedCycles[cycleKey].next.next.value; +>symbolMappedValue : number +>keyedCycles[cycleKey].next.next.value : number +>keyedCycles[cycleKey].next.next : { value: number; next: any; } +>keyedCycles[cycleKey].next : { value: number; next: any; } +>keyedCycles[cycleKey] : { value: number; next: any; } +>keyedCycles : { "a-b": { value: string; next: any; }; 0: { value: boolean; next: any; }; [cycleKey]: { value: number; next: any; }; } +>cycleKey : unique symbol +>next : { value: number; next: any; } +>next : { value: number; next: any; } +>value : number + +const sharedMappedValue: number = sharedCycles.second.Node.next.next.value; +>sharedMappedValue : number +>sharedCycles.second.Node.next.next.value : number +>sharedCycles.second.Node.next.next : { value: number; next: any; } +>sharedCycles.second.Node.next : { value: number; next: any; } +>sharedCycles.second.Node : { value: number; next: any; } +>sharedCycles.second : { Node: { value: number; next: any; }; } +>sharedCycles : { first: { Node: { value: number; next: any; }; }; second: { Node: { value: number; next: any; }; }; } +>second : { Node: { value: number; next: any; }; } +>Node : { value: number; next: any; } +>next : { value: number; next: any; } +>next : { value: number; next: any; } +>value : number + +const mutualFirstValue: number = mutualCycle.First.next.next.value; +>mutualFirstValue : number +>mutualCycle.First.next.next.value : number +>mutualCycle.First.next.next : { value: number; next: { value: string; next: any; }; } +>mutualCycle.First.next : { value: string; next: { value: number; next: any; }; } +>mutualCycle.First : { value: number; next: { value: string; next: any; }; } +>mutualCycle : { First: { value: number; next: { value: string; next: any; }; }; Second: { value: string; next: { value: number; next: any; }; }; } +>First : { value: number; next: { value: string; next: any; }; } +>next : { value: string; next: { value: number; next: any; }; } +>next : { value: number; next: { value: string; next: any; }; } +>value : number + +const mutualSecondValue: string = mutualCycle.First.next.value; +>mutualSecondValue : string +>mutualCycle.First.next.value : string +>mutualCycle.First.next : { value: string; next: { value: number; next: any; }; } +>mutualCycle.First : { value: number; next: { value: string; next: any; }; } +>mutualCycle : { First: { value: number; next: { value: string; next: any; }; }; Second: { value: string; next: { value: number; next: any; }; }; } +>First : { value: number; next: { value: string; next: any; }; } +>next : { value: string; next: { value: number; next: any; }; } +>value : string + +const invalidMappedValue: string = mappedCycle.Node.next.next.value; +>invalidMappedValue : string +>mappedCycle.Node.next.next.value : number +>mappedCycle.Node.next.next : { value: number; next: any; } +>mappedCycle.Node.next : { value: number; next: any; } +>mappedCycle.Node : { value: number; next: any; } +>mappedCycle : { Node: { value: number; next: any; }; } +>Node : { value: number; next: any; } +>next : { value: number; next: any; } +>next : { value: number; next: any; } +>value : number + +const invalidMutualValue: number = mutualCycle.First.next.value; +>invalidMutualValue : number +>mutualCycle.First.next.value : string +>mutualCycle.First.next : { value: string; next: { value: number; next: any; }; } +>mutualCycle.First : { value: number; next: { value: string; next: any; }; } +>mutualCycle : { First: { value: number; next: { value: string; next: any; }; }; Second: { value: string; next: { value: number; next: any; }; }; } +>First : { value: number; next: { value: string; next: any; }; } +>next : { value: string; next: { value: number; next: any; }; } +>value : string + +=== optionalMappedCycle.ts === +type Show = { [K in keyof T]: T[K] } & unknown; +>Show : { [K in keyof T]: T[K]; } + +type Resolve = Show<{ +>Resolve : { [P in keyof M[K]]: M[K][P] extends "ref" ? any extends infer T_1 ? { [K_1 in keyof T_1]: T_1[K_1]; } : never : M[K][P]; } extends infer T ? { [K_1 in keyof T]: T[K_1]; } : never + + [P in keyof M[K]]: M[K][P] extends "ref" ? Resolve : M[K][P]; +}>; +declare const build: () => { [K in keyof M]?: Resolve }; +>build : () => { [K in keyof M]?: Resolve; } + +export const optionalCycle = build<{ Node: { value: number; next: "ref" } }>(); +>optionalCycle : { Node?: { value: number; next: any; } | undefined; } +>build<{ Node: { value: number; next: "ref" } }>() : { Node?: { value: number; next: any; } | undefined; } +>build : () => { [K in keyof M]?: Resolve; } +>Node : { value: number; next: "ref"; } +>value : number +>next : "ref" + +const optionalValue: number | undefined = optionalCycle.Node?.next.next.value; +>optionalValue : number | undefined +>optionalCycle.Node?.next.next.value : number | undefined +>optionalCycle.Node?.next.next : { value: number; next: any; } | undefined +>optionalCycle.Node?.next : { value: number; next: any; } | undefined +>optionalCycle.Node : { value: number; next: any; } | undefined +>optionalCycle : { Node?: { value: number; next: any; } | undefined; } +>Node : { value: number; next: any; } | undefined +>next : { value: number; next: any; } | undefined +>next : { value: number; next: any; } | undefined +>value : number | undefined + +export const optionalCopy = optionalCycle; +>optionalCopy : { Node?: { value: number; next: any; } | undefined; } +>optionalCycle : { Node?: { value: number; next: any; } | undefined; } + +declare const buildNullable: () => { [K in keyof M]: Resolve | null }; +>buildNullable : () => { [K in keyof M]: Resolve | null; } + +export const nullableCycle = buildNullable<{ Node: { value: string; next: "ref" } }>(); +>nullableCycle : { Node: { value: string; next: any; } | null; } +>buildNullable<{ Node: { value: string; next: "ref" } }>() : { Node: { value: string; next: any; } | null; } +>buildNullable : () => { [K in keyof M]: Resolve | null; } +>Node : { value: string; next: "ref"; } +>value : string +>next : "ref" + +declare const wrap: (value: T) => { required: T; optional?: T | null }; +>wrap : (value: T) => { required: T; optional?: T | null; } +>value : T +>required : T +>optional : T | null | undefined + +export const mixedCycles = wrap(optionalCycle); +>mixedCycles : { required: { Node?: { value: number; next: any; } | undefined; }; optional?: { Node?: { value: number; next: any; } | undefined; } | null | undefined; } +>wrap(optionalCycle) : { required: { Node?: { value: number; next: any; } | undefined; }; optional?: { Node?: { value: number; next: any; } | undefined; } | null | undefined; } +>wrap : (value: T) => { required: T; optional?: T | null; } +>optionalCycle : { Node?: { value: number; next: any; } | undefined; } + +export const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle }; +>sharedOptionalCycles : { first: { Node?: { value: number; next: any; } | undefined; }; second: { Node?: { value: number; next: any; } | undefined; }; } +>{ first: optionalCycle, second: optionalCycle } : { first: { Node?: { value: number; next: any; } | undefined; }; second: { Node?: { value: number; next: any; } | undefined; }; } +>first : { Node?: { value: number; next: any; } | undefined; } +>optionalCycle : { Node?: { value: number; next: any; } | undefined; } +>second : { Node?: { value: number; next: any; } | undefined; } +>optionalCycle : { Node?: { value: number; next: any; } | undefined; } + +export const nullableKey = Symbol(); +>nullableKey : unique symbol +>Symbol() : unique symbol +>Symbol : SymbolConstructor + +export const nullableKeys = buildNullable<{ +>nullableKeys : { "a-b": { value: string; next: any; } | null; 0: { value: boolean; next: any; } | null; [nullableKey]: { value: number; next: any; } | null; } +>buildNullable<{ "a-b": { value: string; next: "ref" }; 0: { value: boolean; next: "ref" }; [nullableKey]: { value: number; next: "ref" };}>() : { "a-b": { value: string; next: any; } | null; 0: { value: boolean; next: any; } | null; [nullableKey]: { value: number; next: any; } | null; } +>buildNullable : () => { [K in keyof M]: Resolve | null; } + + "a-b": { value: string; next: "ref" }; +>"a-b" : { value: string; next: "ref"; } +>value : string +>next : "ref" + + 0: { value: boolean; next: "ref" }; +>0 : { value: boolean; next: "ref"; } +>value : boolean +>next : "ref" + + [nullableKey]: { value: number; next: "ref" }; +>[nullableKey] : { value: number; next: "ref"; } +>nullableKey : unique symbol +>value : number +>next : "ref" + +}>(); +declare const buildNullableRoot: () => Resolve | null; +>buildNullableRoot : () => Resolve | null + +export const nullableRoot = buildNullableRoot<{ Node: { value: number; next: "ref" } }>(); +>nullableRoot : { value: number; next: any; } | null +>buildNullableRoot<{ Node: { value: number; next: "ref" } }>() : { value: number; next: any; } | null +>buildNullableRoot : () => Resolve | null +>Node : { value: number; next: "ref"; } +>value : number +>next : "ref" + +declare const buildOptionalRoot: () => Resolve | undefined; +>buildOptionalRoot : () => Resolve | undefined + +export const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: "ref" } }>(); +>optionalRoot : { value: string; next: any; } | undefined +>buildOptionalRoot<{ Node: { value: string; next: "ref" } }>() : { value: string; next: any; } | undefined +>buildOptionalRoot : () => Resolve | undefined +>Node : { value: string; next: "ref"; } +>value : string +>next : "ref" + +type ResolveNullable = Show<{ +>ResolveNullable : { [P in keyof M[K]]: M[K][P] extends "ref" ? (any extends infer T_1 ? { [K_1 in keyof T_1]: T_1[K_1]; } : never) | null : M[K][P]; } extends infer T ? { [K_1 in keyof T]: T[K_1]; } : never + + [P in keyof M[K]]: M[K][P] extends "ref" ? ResolveNullable | null : M[K][P]; +}>; +declare const buildNullableLinks: () => { [K in keyof M]: ResolveNullable | null }; +>buildNullableLinks : () => { [K in keyof M]: ResolveNullable | null; } + +export const nullableLinks = buildNullableLinks<{ Node: { value: number; next: "ref" } }>(); +>nullableLinks : { Node: { value: number; next: any | null; } | null; } +>buildNullableLinks<{ Node: { value: number; next: "ref" } }>() : { Node: { value: number; next: any | null; } | null; } +>buildNullableLinks : () => { [K in keyof M]: ResolveNullable | null; } +>Node : { value: number; next: "ref"; } +>value : number +>next : "ref" + +declare const buildOptionalNullableLinks: () => { [K in keyof M]?: ResolveNullable | null }; +>buildOptionalNullableLinks : () => { [K in keyof M]?: ResolveNullable | null; } + +export const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: "ref" } }>(); +>optionalNullableLinks : { Node?: { value: number; next: any | null; } | null | undefined; } +>buildOptionalNullableLinks<{ Node: { value: number; next: "ref" } }>() : { Node?: { value: number; next: any | null; } | null | undefined; } +>buildOptionalNullableLinks : () => { [K in keyof M]?: ResolveNullable | null; } +>Node : { value: number; next: "ref"; } +>value : number +>next : "ref" + +type ResolveOptional = Show<{ +>ResolveOptional : { [P in keyof M[K]]: M[K][P] extends "ref" ? (any extends infer T_1 ? { [K_1 in keyof T_1]: T_1[K_1]; } : never) | undefined : M[K][P]; } extends infer T ? { [K_1 in keyof T]: T[K_1]; } : never + + [P in keyof M[K]]: M[K][P] extends "ref" ? ResolveOptional | undefined : M[K][P]; +}>; +declare const buildNullableOptionalLinks: () => { [K in keyof M]: ResolveOptional | null }; +>buildNullableOptionalLinks : () => { [K in keyof M]: ResolveOptional | null; } + +export const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: "ref" } }>(); +>nullableOptionalLinks : { Node: { value: number; next: any | undefined; } | null; } +>buildNullableOptionalLinks<{ Node: { value: number; next: "ref" } }>() : { Node: { value: number; next: any | undefined; } | null; } +>buildNullableOptionalLinks : () => { [K in keyof M]: ResolveOptional | null; } +>Node : { value: number; next: "ref"; } +>value : number +>next : "ref" + +type ResolveNullish = Show<{ +>ResolveNullish : { [P in keyof M[K]]: M[K][P] extends "ref" ? (any extends infer T_1 ? { [K_1 in keyof T_1]: T_1[K_1]; } : never) | null | undefined : M[K][P]; } extends infer T ? { [K_1 in keyof T]: T[K_1]; } : never + + [P in keyof M[K]]: M[K][P] extends "ref" ? ResolveNullish | null | undefined : M[K][P]; +}>; +declare const buildNullishLinks: () => { [K in keyof M]?: ResolveNullish | null }; +>buildNullishLinks : () => { [K in keyof M]?: ResolveNullish | null; } + +export const nullishLinks = buildNullishLinks<{ Node: { value: number; next: "ref" } }>(); +>nullishLinks : { Node?: { value: number; next: any | null | undefined; } | null | undefined; } +>buildNullishLinks<{ Node: { value: number; next: "ref" } }>() : { Node?: { value: number; next: any | null | undefined; } | null | undefined; } +>buildNullishLinks : () => { [K in keyof M]?: ResolveNullish | null; } +>Node : { value: number; next: "ref"; } +>value : number +>next : "ref" + +type NonNullable = "shadowed"; +>NonNullable : "shadowed" + +type OptionalNode = (typeof optionalCycle)["Node"] & {}; +>OptionalNode : { value: number; next: any; } +>optionalCycle : { Node?: { value: number; next: any; } | undefined; } + +type NullableNode = (typeof nullableCycle)["Node"] & {}; +>NullableNode : { value: string; next: any; } +>nullableCycle : { Node: { value: string; next: any; } | null; } + +type NullableLinkNode = (typeof nullableLinks)["Node"] & {}; +>NullableLinkNode : { value: number; next: any | null; } +>nullableLinks : { Node: { value: number; next: any | null; } | null; } + +type NullishLinkNode = (typeof nullishLinks)["Node"] & {}; +>NullishLinkNode : { value: number; next: any | null | undefined; } +>nullishLinks : { Node?: { value: number; next: any | null | undefined; } | null | undefined; } + +type OptionalNullableLinkNode = (typeof optionalNullableLinks)["Node"] & {}; +>OptionalNullableLinkNode : { value: number; next: any | null; } +>optionalNullableLinks : { Node?: { value: number; next: any | null; } | null | undefined; } + +type NullableOptionalLinkNode = (typeof nullableOptionalLinks)["Node"] & {}; +>NullableOptionalLinkNode : { value: number; next: any | undefined; } +>nullableOptionalLinks : { Node: { value: number; next: any | undefined; } | null; } + +const copiedValue: number | undefined = optionalCopy.Node?.next.next.value; +>copiedValue : number | undefined +>optionalCopy.Node?.next.next.value : number | undefined +>optionalCopy.Node?.next.next : { value: number; next: any; } | undefined +>optionalCopy.Node?.next : { value: number; next: any; } | undefined +>optionalCopy.Node : { value: number; next: any; } | undefined +>optionalCopy : { Node?: { value: number; next: any; } | undefined; } +>Node : { value: number; next: any; } | undefined +>next : { value: number; next: any; } | undefined +>next : { value: number; next: any; } | undefined +>value : number | undefined + +const nullableValue: string | undefined = nullableCycle.Node?.next.next.value; +>nullableValue : string | undefined +>nullableCycle.Node?.next.next.value : string | undefined +>nullableCycle.Node?.next.next : { value: string; next: any; } | undefined +>nullableCycle.Node?.next : { value: string; next: any; } | undefined +>nullableCycle.Node : { value: string; next: any; } | null +>nullableCycle : { Node: { value: string; next: any; } | null; } +>Node : { value: string; next: any; } | null +>next : { value: string; next: any; } | undefined +>next : { value: string; next: any; } | undefined +>value : string | undefined + +const mixedValue: number | undefined = mixedCycles.optional?.Node?.next.next.value; +>mixedValue : number | undefined +>mixedCycles.optional?.Node?.next.next.value : number | undefined +>mixedCycles.optional?.Node?.next.next : { value: number; next: any; } | undefined +>mixedCycles.optional?.Node?.next : { value: number; next: any; } | undefined +>mixedCycles.optional?.Node : { value: number; next: any; } | undefined +>mixedCycles.optional : { Node?: { value: number; next: any; } | undefined; } | null | undefined +>mixedCycles : { required: { Node?: { value: number; next: any; } | undefined; }; optional?: { Node?: { value: number; next: any; } | undefined; } | null | undefined; } +>optional : { Node?: { value: number; next: any; } | undefined; } | null | undefined +>Node : { value: number; next: any; } | undefined +>next : { value: number; next: any; } | undefined +>next : { value: number; next: any; } | undefined +>value : number | undefined + +const sharedValue: number | undefined = sharedOptionalCycles.second.Node?.next.next.value; +>sharedValue : number | undefined +>sharedOptionalCycles.second.Node?.next.next.value : number | undefined +>sharedOptionalCycles.second.Node?.next.next : { value: number; next: any; } | undefined +>sharedOptionalCycles.second.Node?.next : { value: number; next: any; } | undefined +>sharedOptionalCycles.second.Node : { value: number; next: any; } | undefined +>sharedOptionalCycles.second : { Node?: { value: number; next: any; } | undefined; } +>sharedOptionalCycles : { first: { Node?: { value: number; next: any; } | undefined; }; second: { Node?: { value: number; next: any; } | undefined; }; } +>second : { Node?: { value: number; next: any; } | undefined; } +>Node : { value: number; next: any; } | undefined +>next : { value: number; next: any; } | undefined +>next : { value: number; next: any; } | undefined +>value : number | undefined + +const quotedValue: string | undefined = nullableKeys["a-b"]?.next.next.value; +>quotedValue : string | undefined +>nullableKeys["a-b"]?.next.next.value : string | undefined +>nullableKeys["a-b"]?.next.next : { value: string; next: any; } | undefined +>nullableKeys["a-b"]?.next : { value: string; next: any; } | undefined +>nullableKeys["a-b"] : { value: string; next: any; } | null +>nullableKeys : { "a-b": { value: string; next: any; } | null; 0: { value: boolean; next: any; } | null; [nullableKey]: { value: number; next: any; } | null; } +>"a-b" : "a-b" +>next : { value: string; next: any; } | undefined +>next : { value: string; next: any; } | undefined +>value : string | undefined + +const numericValue: boolean | undefined = nullableKeys[0]?.next.next.value; +>numericValue : boolean | undefined +>nullableKeys[0]?.next.next.value : boolean | undefined +>nullableKeys[0]?.next.next : { value: boolean; next: any; } | undefined +>nullableKeys[0]?.next : { value: boolean; next: any; } | undefined +>nullableKeys[0] : { value: boolean; next: any; } | null +>nullableKeys : { "a-b": { value: string; next: any; } | null; 0: { value: boolean; next: any; } | null; [nullableKey]: { value: number; next: any; } | null; } +>0 : 0 +>next : { value: boolean; next: any; } | undefined +>next : { value: boolean; next: any; } | undefined +>value : boolean | undefined + +const symbolValue: number | undefined = nullableKeys[nullableKey]?.next.next.value; +>symbolValue : number | undefined +>nullableKeys[nullableKey]?.next.next.value : number | undefined +>nullableKeys[nullableKey]?.next.next : { value: number; next: any; } | undefined +>nullableKeys[nullableKey]?.next : { value: number; next: any; } | undefined +>nullableKeys[nullableKey] : { value: number; next: any; } | null +>nullableKeys : { "a-b": { value: string; next: any; } | null; 0: { value: boolean; next: any; } | null; [nullableKey]: { value: number; next: any; } | null; } +>nullableKey : unique symbol +>next : { value: number; next: any; } | undefined +>next : { value: number; next: any; } | undefined +>value : number | undefined + +const nullableRootValue: number | undefined = nullableRoot?.next.next.value; +>nullableRootValue : number | undefined +>nullableRoot?.next.next.value : number | undefined +>nullableRoot?.next.next : { value: number; next: any; } | undefined +>nullableRoot?.next : { value: number; next: any; } | undefined +>nullableRoot : { value: number; next: any; } | null +>next : { value: number; next: any; } | undefined +>next : { value: number; next: any; } | undefined +>value : number | undefined + +const optionalRootValue: string | undefined = optionalRoot?.next.next.value; +>optionalRootValue : string | undefined +>optionalRoot?.next.next.value : string | undefined +>optionalRoot?.next.next : { value: string; next: any; } | undefined +>optionalRoot?.next : { value: string; next: any; } | undefined +>optionalRoot : { value: string; next: any; } | undefined +>next : { value: string; next: any; } | undefined +>next : { value: string; next: any; } | undefined +>value : string | undefined + +const nullableLinkValue: number | undefined = nullableLinks.Node?.next?.next?.value; +>nullableLinkValue : number | undefined +>nullableLinks.Node?.next?.next?.value : number | undefined +>nullableLinks.Node?.next?.next : { value: number; next: any | null; } | null | undefined +>nullableLinks.Node?.next : { value: number; next: any | null; } | null | undefined +>nullableLinks.Node : { value: number; next: any | null; } | null +>nullableLinks : { Node: { value: number; next: any | null; } | null; } +>Node : { value: number; next: any | null; } | null +>next : { value: number; next: any | null; } | null | undefined +>next : { value: number; next: any | null; } | null | undefined +>value : number | undefined + +const nullishLinkValue: number | undefined = nullishLinks.Node?.next?.next?.value; +>nullishLinkValue : number | undefined +>nullishLinks.Node?.next?.next?.value : number | undefined +>nullishLinks.Node?.next?.next : { value: number; next: any | null | undefined; } | null | undefined +>nullishLinks.Node?.next : { value: number; next: any | null | undefined; } | null | undefined +>nullishLinks.Node : { value: number; next: any | null | undefined; } | null | undefined +>nullishLinks : { Node?: { value: number; next: any | null | undefined; } | null | undefined; } +>Node : { value: number; next: any | null | undefined; } | null | undefined +>next : { value: number; next: any | null | undefined; } | null | undefined +>next : { value: number; next: any | null | undefined; } | null | undefined +>value : number | undefined + +const optionalNullableLinkValue: number | undefined = optionalNullableLinks.Node?.next?.next?.value; +>optionalNullableLinkValue : number | undefined +>optionalNullableLinks.Node?.next?.next?.value : number | undefined +>optionalNullableLinks.Node?.next?.next : { value: number; next: any | null; } | null | undefined +>optionalNullableLinks.Node?.next : { value: number; next: any | null; } | null | undefined +>optionalNullableLinks.Node : { value: number; next: any | null; } | null | undefined +>optionalNullableLinks : { Node?: { value: number; next: any | null; } | null | undefined; } +>Node : { value: number; next: any | null; } | null | undefined +>next : { value: number; next: any | null; } | null | undefined +>next : { value: number; next: any | null; } | null | undefined +>value : number | undefined + +const nullableOptionalLinkValue: number | undefined = nullableOptionalLinks.Node?.next?.next?.value; +>nullableOptionalLinkValue : number | undefined +>nullableOptionalLinks.Node?.next?.next?.value : number | undefined +>nullableOptionalLinks.Node?.next?.next : { value: number; next: any | undefined; } | undefined +>nullableOptionalLinks.Node?.next : { value: number; next: any | undefined; } | undefined +>nullableOptionalLinks.Node : { value: number; next: any | undefined; } | null +>nullableOptionalLinks : { Node: { value: number; next: any | undefined; } | null; } +>Node : { value: number; next: any | undefined; } | null +>next : { value: number; next: any | undefined; } | undefined +>next : { value: number; next: any | undefined; } | undefined +>value : number | undefined + +const optionalNextHasNull: null extends OptionalNode["next"] ? true : false = false; +>optionalNextHasNull : false +>true : true +>false : false +>false : false + +const optionalNextHasUndefined: undefined extends OptionalNode["next"] ? true : false = false; +>optionalNextHasUndefined : false +>true : true +>false : false +>false : false + +const nullableNextHasNull: null extends NullableNode["next"] ? true : false = false; +>nullableNextHasNull : false +>true : true +>false : false +>false : false + +const nullableNextHasUndefined: undefined extends NullableNode["next"] ? true : false = false; +>nullableNextHasUndefined : false +>true : true +>false : false +>false : false + +const nullableLinkHasNull: null extends NullableLinkNode["next"] ? true : false = true; +>nullableLinkHasNull : true +>true : true +>false : false +>true : true + +const nullableLinkHasUndefined: undefined extends NullableLinkNode["next"] ? true : false = false; +>nullableLinkHasUndefined : false +>true : true +>false : false +>false : false + +const nullishLinkHasNull: null extends NullishLinkNode["next"] ? true : false = true; +>nullishLinkHasNull : true +>true : true +>false : false +>true : true + +const nullishLinkHasUndefined: undefined extends NullishLinkNode["next"] ? true : false = true; +>nullishLinkHasUndefined : true +>true : true +>false : false +>true : true + +const optionalNullableLinkHasNull: null extends OptionalNullableLinkNode["next"] ? true : false = true; +>optionalNullableLinkHasNull : true +>true : true +>false : false +>true : true + +const optionalNullableLinkHasUndefined: undefined extends OptionalNullableLinkNode["next"] ? true : false = false; +>optionalNullableLinkHasUndefined : false +>true : true +>false : false +>false : false + +const nullableOptionalLinkHasNull: null extends NullableOptionalLinkNode["next"] ? true : false = false; +>nullableOptionalLinkHasNull : false +>true : true +>false : false +>false : false + +const nullableOptionalLinkHasUndefined: undefined extends NullableOptionalLinkNode["next"] ? true : false = true; +>nullableOptionalLinkHasUndefined : true +>true : true +>false : false +>true : true + +const invalidNullNext: OptionalNode["next"] = null; +>invalidNullNext : { value: number; next: any; } + +const invalidUndefinedNext: OptionalNode["next"] = undefined; +>invalidUndefinedNext : { value: number; next: any; } +>undefined : undefined + +const invalidNullableLinkValue: number = nullableLinks.Node!.next.value; +>invalidNullableLinkValue : number +>nullableLinks.Node!.next.value : number +>nullableLinks.Node!.next : { value: number; next: any | null; } | null +>nullableLinks.Node! : { value: number; next: any | null; } +>nullableLinks.Node : { value: number; next: any | null; } | null +>nullableLinks : { Node: { value: number; next: any | null; } | null; } +>Node : { value: number; next: any | null; } | null +>next : { value: number; next: any | null; } | null +>value : number + +const invalidNullishLinkValue: number = nullishLinks.Node!.next.value; +>invalidNullishLinkValue : number +>nullishLinks.Node!.next.value : number +>nullishLinks.Node!.next : { value: number; next: any | null | undefined; } | null | undefined +>nullishLinks.Node! : { value: number; next: any | null | undefined; } +>nullishLinks.Node : { value: number; next: any | null | undefined; } | null | undefined +>nullishLinks : { Node?: { value: number; next: any | null | undefined; } | null | undefined; } +>Node : { value: number; next: any | null | undefined; } | null | undefined +>next : { value: number; next: any | null | undefined; } | null | undefined +>value : number + +=== mixedMappedCycle.ts === +type Show = { [K in keyof T]: T[K] } & unknown; +>Show : { [K in keyof T]: T[K]; } + +type Resolve = Show<{ +>Resolve : { [P in keyof M[K]]: M[K][P] extends "ref" ? any extends infer T_1 ? { [K_1 in keyof T_1]: T_1[K_1]; } : never : M[K][P]; } extends infer T ? { [K_1 in keyof T]: T[K_1]; } : never + + [P in keyof M[K]]: M[K][P] extends "ref" ? Resolve : M[K][P]; +}>; +declare const build: () => { [K in keyof M]: Resolve | false | null }; +>build : () => { [K in keyof M]: Resolve | false | null; } +>false : false + +export const mixedCycle = build<{ Node: { value: number; next: "ref" } }>(); +>mixedCycle : { Node: false | { value: number; next: any; } | null; } +>build<{ Node: { value: number; next: "ref" } }>() : { Node: false | { value: number; next: any; } | null; } +>build : () => { [K in keyof M]: Resolve | false | null; } +>Node : { value: number; next: "ref"; } +>value : number +>next : "ref" + +if (mixedCycle.Node) { +>mixedCycle.Node : false | { value: number; next: any; } | null +>mixedCycle : { Node: false | { value: number; next: any; } | null; } +>Node : false | { value: number; next: any; } | null + + const value: number = mixedCycle.Node.next.next.value; +>value : number +>mixedCycle.Node.next.next.value : number +>mixedCycle.Node.next.next : { value: number; next: any; } +>mixedCycle.Node.next : { value: number; next: any; } +>mixedCycle.Node : { value: number; next: any; } +>mixedCycle : { Node: false | { value: number; next: any; } | null; } +>Node : { value: number; next: any; } +>next : { value: number; next: any; } +>next : { value: number; next: any; } +>value : number +} + +=== anonymousBindings.ts === +export const _recursive = 1; +>_recursive : 1 +>1 : 1 + +export const factory = () => function self() { return self; }; +>factory : () => () => () => any +>() => function self() { return self; } : () => () => () => any +>function self() { return self; } : () => any +>self : () => typeof self +>self : () => typeof self + +export function captured(value: T) { +>captured : (value: T) => { value: T; next: () => typeof node; consume: (other: T) => typeof node; } +>value : T + + const node = { value, next: () => node, consume: (other: T) => node }; +>node : { value: T; next: () => typeof node; consume: (other: T) => typeof node; } +>{ value, next: () => node, consume: (other: T) => node } : { value: T; next: () => typeof node; consume: (other: T) => typeof node; } +>value : T +>next : () => { value: T; next: (typeof node)["next"]; consume: (other: T) => typeof node; } +>() => node : () => { value: T; next: (typeof node)["next"]; consume: (other: T) => typeof node; } +>node : { value: T; next: () => typeof node; consume: (other: T) => typeof node; } +>consume : (other: T) => { value: T; next: () => typeof node; consume: (typeof node)["consume"]; } +>(other: T) => node : (other: T) => { value: T; next: () => typeof node; consume: (typeof node)["consume"]; } +>other : T +>node : { value: T; next: () => typeof node; consume: (other: T) => typeof node; } + + return node; +>node : { value: T; next: () => typeof node; consume: (other: T) => typeof node; } +} +export function nestedCaptured(outer: T) { +>nestedCaptured : (outer: T) => (inner: U) => { outer: T; inner: U; next: () => any; shadow: (value: T_1) => { outer: T; inner: U; value: T_1; next: any; }; } +>outer : T + + return (inner: U) => { +>(inner: U) => { const node = { outer, inner, next: () => node, shadow: (value: T) => ({ outer, inner, value, next: node }), }; return node; } : (inner: U) => { outer: T; inner: U; next: () => any; shadow: (value: T_1) => { outer: T; inner: U; value: T_1; next: any; }; } +>inner : U + + const node = { +>node : { outer: T; inner: U; next: () => typeof node; shadow: (value: T_1) => { outer: T; inner: U; value: T_1; next: typeof node; }; } +>{ outer, inner, next: () => node, shadow: (value: T) => ({ outer, inner, value, next: node }), } : { outer: T; inner: U; next: () => typeof node; shadow: (value: T_1) => { outer: T; inner: U; value: T_1; next: typeof node; }; } + + outer, +>outer : T + + inner, +>inner : U + + next: () => node, +>next : () => { outer: T; inner: U; next: (typeof node)["next"]; shadow: (value: T_1) => { outer: T; inner: U; value: T_1; next: typeof node; }; } +>() => node : () => { outer: T; inner: U; next: (typeof node)["next"]; shadow: (value: T_1) => { outer: T; inner: U; value: T_1; next: typeof node; }; } +>node : { outer: T; inner: U; next: () => typeof node; shadow: (value: T_1) => { outer: T; inner: U; value: T_1; next: typeof node; }; } + + shadow: (value: T) => ({ outer, inner, value, next: node }), +>shadow : (value: T_1) => { outer: T; inner: U; value: T_1; next: { outer: T; inner: U; next: () => typeof node; shadow: (typeof node)["shadow"]; }; } +>(value: T) => ({ outer, inner, value, next: node }) : (value: T_1) => { outer: T; inner: U; value: T_1; next: { outer: T; inner: U; next: () => typeof node; shadow: (typeof node)["shadow"]; }; } +>value : T +>({ outer, inner, value, next: node }) : { outer: T_1; inner: U; value: T; next: { outer: T_1; inner: U; next: () => typeof node; shadow: (value: T) => any; }; } +>{ outer, inner, value, next: node } : { outer: T_1; inner: U; value: T; next: { outer: T_1; inner: U; next: () => typeof node; shadow: (value: T) => any; }; } +>outer : T_1 +>inner : U +>value : T +>next : { outer: T_1; inner: U; next: () => typeof node; shadow: (value: T) => { outer: T_1; inner: U; value: T; next: typeof node; }; } +>node : { outer: T_1; inner: U; next: () => typeof node; shadow: (value: T) => { outer: T_1; inner: U; value: T; next: typeof node; }; } + + }; + return node; +>node : { outer: T; inner: U; next: () => typeof node; shadow: (value: T_1) => { outer: T; inner: U; value: T_1; next: typeof node; }; } + + }; +} +export function constrained(key: K) { +>constrained : (key: K) => { value: T[K]; next: () => typeof node; } +>value : number +>key : K + + const node = { value: null! as T[K], next: () => node }; +>node : { value: T[K]; next: () => typeof node; } +>{ value: null! as T[K], next: () => node } : { value: T[K]; next: () => typeof node; } +>value : T[K] +>null! as T[K] : T[K] +>null! : never +>next : () => { value: T[K]; next: (typeof node)["next"]; } +>() => node : () => { value: T[K]; next: (typeof node)["next"]; } +>node : { value: T[K]; next: () => typeof node; } + + return node; +>node : { value: T[K]; next: () => typeof node; } +} +export function optionalCaptured(value: T) { +>optionalCaptured : (value: T) => { node?: { value: T; next: any; } | false | null; } +>value : T + + type Node = { value: T; next: Node }; +>Node : { value: T; next: any; } +>value : T +>next : { value: T; next: any; } + + return null! as { node?: Node | false | null }; +>null! as { node?: Node | false | null } : { node?: { value: T; next: any; } | false | null; } +>null! : never +>node : false | { value: T; next: any; } | null | undefined +>false : false +} +export function annotatedCaptured(value: T) { +>annotatedCaptured : (value: T) => { value: typeof value; next: any; } +>value : T + + const node: { value: typeof value; next: typeof node } = { value, next: null! }; +>node : { value: typeof value; next: any; } +>value : T +>value : T +>next : { value: typeof value; next: any; } +>node : { value: typeof value; next: any; } +>{ value, next: null! } : { value: T; next: never; } +>value : T +>next : never +>null! : never + + return node; +>node : { value: typeof value; next: any; } +} +export function recursiveTuple(value: T) { +>recursiveTuple : (value: T) => readonly [T, any] +>value : T + + type Tuple = readonly [T, Tuple]; +>Tuple : readonly [T, any] + + return null! as Tuple; +>null! as Tuple : readonly [T, any] +>null! : never +} +export function inferredCaptured() { +>inferredCaptured : () => (T extends () => infer U ? { value: U; next: any; } : never) + + type Node = { value: V; next: Node }; +>Node : { value: V; next: any; } +>value : V +>next : { value: V; next: any; } + + return null! as (T extends () => infer U ? Node : never); +>null! as (T extends () => infer U ? Node : never) : T extends () => infer U ? { value: U; next: any; } : never +>null! : never +} +export function mappedCaptured() { +>mappedCaptured : () => { [K in keyof T]: { value: T[K]; next: any; }; } + + type Node = { [K in keyof T]: { value: T[K]; next: Node } }; +>Node : { [K in keyof T]: { value: T[K]; next: any; }; } +>value : T[K] +>next : { [K in keyof T]: { value: T[K]; next: any; }; } + + return null! as Node; +>null! as Node : { [K in keyof T]: { value: T[K]; next: any; }; } +>null! : never +} +export function freshGeneric(unused: T) { +>freshGeneric : (unused: T) => (value: U) => typeof recur +>unused : T + + const recur = (value: U) => recur; +>recur : (value: U) => typeof recur +>(value: U) => recur : (value: U) => typeof recur +>value : U +>recur : (value: U) => typeof recur + + return recur; +>recur : (value: U) => typeof recur +} +export function mutualCaptured(left: T, right: U) { +>mutualCaptured : (left: T, right: U) => { left: { left: T; next: { right: U; self: any; next: any; }; }; right: { right: U; self: any; next: { left: T; next: any; }; }; } +>left : T +>right : U + + type Left = { left: T; next: Right }; +>Left : { left: T; next: { right: U; self: any; next: any; }; } +>left : T +>next : { right: U; self: any; next: { left: T; next: any; }; } + + type Right = { right: U; self: Right; next: Left }; +>Right : { right: U; self: any; next: { left: T; next: any; }; } +>right : U +>self : { right: U; self: any; next: { left: T; next: any; }; } +>next : { left: T; next: { right: U; self: any; next: any; }; } + + return { left: null! as Left, right: null! as Right }; +>{ left: null! as Left, right: null! as Right } : { left: { left: T; next: { right: U; self: any; next: any; }; }; right: { right: U; self: any; next: { left: T; next: any; }; }; } +>left : { left: T; next: { right: U; self: any; next: any; }; } +>null! as Left : { left: T; next: { right: U; self: any; next: any; }; } +>null! : never +>right : { right: U; self: any; next: { left: T; next: any; }; } +>null! as Right : { right: U; self: any; next: { left: T; next: any; }; } +>null! : never +} +export class CapturedClass { +>CapturedClass : CapturedClass + + constructor(public value: T) {} +>value : T + + make(inner: U) { +>make : (inner: U) => { outer: T; inner: U; next: () => typeof node; } +>inner : U + + const node = { outer: this.value, inner, next: () => node }; +>node : { outer: T; inner: U; next: () => typeof node; } +>{ outer: this.value, inner, next: () => node } : { outer: T; inner: U; next: () => typeof node; } +>outer : T +>this.value : T +>this : this +>value : T +>inner : U +>next : () => { outer: T; inner: U; next: (typeof node)["next"]; } +>() => node : () => { outer: T; inner: U; next: (typeof node)["next"]; } +>node : { outer: T; inner: U; next: () => typeof node; } + + return node; +>node : { outer: T; inner: U; next: () => typeof node; } + } +} +export function covariantClass() { +>covariantClass : () => typeof Node + + return class Node { +>class Node { value!: T; next(): Node { return this; } } : typeof Node +>Node : typeof Node + + value!: T; +>value : T + + next(): Node { return this; } +>next : () => Node +>this : this + + }; +} +export function contravariantClass() { +>contravariantClass : () => typeof Node + + return class Node { +>class Node { consume!: (value: T) => void; next(): Node { return this; } } : typeof Node +>Node : typeof Node + + consume!: (value: T) => void; +>consume : (value: T) => void +>value : T + + next(): Node { return this; } +>next : () => Node +>this : this + + }; +} +export namespace Nested { +>Nested : typeof Nested + + export function captured(value: T) { +>captured : (value: T) => { value: T; next: () => typeof node; } +>value : T + + const node = { value, next: () => node }; +>node : { value: T; next: () => typeof node; } +>{ value, next: () => node } : { value: T; next: () => typeof node; } +>value : T +>next : () => { value: T; next: (typeof node)["next"]; } +>() => node : () => { value: T; next: (typeof node)["next"]; } +>node : { value: T; next: () => typeof node; } + + return node; +>node : { value: T; next: () => typeof node; } + } +} +const capturedValue: string = captured("text").next().consume("other").value; +>capturedValue : string +>captured("text").next().consume("other").value : string +>captured("text").next().consume("other") : { value: string; next: () => any; consume: (other: string) => any; } +>captured("text").next().consume : (other: string) => { value: string; next: () => any; consume: any; } +>captured("text").next() : { value: string; next: () => any; consume: (other: string) => any; } +>captured("text").next : () => { value: string; next: any; consume: (other: string) => any; } +>captured("text") : { value: string; next: () => any; consume: (other: string) => any; } +>captured : (value: T) => { value: T; next: () => any; consume: (other: T) => any; } +>"text" : "text" +>next : () => { value: string; next: any; consume: (other: string) => any; } +>consume : (other: string) => { value: string; next: () => any; consume: any; } +>"other" : "other" +>value : string + +const nestedValue = nestedCaptured(1)("text").shadow(true).next.next(); +>nestedValue : { outer: number; inner: string; next: () => any; shadow: (value: T) => { outer: number; inner: string; value: T; next: any; }; } +>nestedCaptured(1)("text").shadow(true).next.next() : { outer: number; inner: string; next: () => any; shadow: (value: T) => { outer: number; inner: string; value: T; next: any; }; } +>nestedCaptured(1)("text").shadow(true).next.next : () => { outer: number; inner: string; next: any; shadow: (value: T) => { outer: number; inner: string; value: T; next: any; }; } +>nestedCaptured(1)("text").shadow(true).next : { outer: number; inner: string; next: () => any; shadow: (value: T) => { outer: number; inner: string; value: T; next: any; }; } +>nestedCaptured(1)("text").shadow(true) : { outer: number; inner: string; value: boolean; next: { outer: number; inner: string; next: () => any; shadow: (value: T) => { outer: number; inner: string; value: T; next: any; }; }; } +>nestedCaptured(1)("text").shadow : (value: T) => { outer: number; inner: string; value: T; next: { outer: number; inner: string; next: () => any; shadow: any; }; } +>nestedCaptured(1)("text") : { outer: number; inner: string; next: () => any; shadow: (value: T) => { outer: number; inner: string; value: T; next: any; }; } +>nestedCaptured(1) : (inner: U) => { outer: number; inner: U; next: () => any; shadow: (value: T) => { outer: number; inner: U; value: T; next: any; }; } +>nestedCaptured : (outer: T) => (inner: U) => { outer: T; inner: U; next: () => any; shadow: (value: T_1) => { outer: T; inner: U; value: T_1; next: any; }; } +>1 : 1 +>"text" : "text" +>shadow : (value: T) => { outer: number; inner: string; value: T; next: { outer: number; inner: string; next: () => any; shadow: any; }; } +>true : true +>next : { outer: number; inner: string; next: () => any; shadow: (value: T) => { outer: number; inner: string; value: T; next: any; }; } +>next : () => { outer: number; inner: string; next: any; shadow: (value: T) => { outer: number; inner: string; value: T; next: any; }; } + +const nestedOuter: number = nestedValue.outer; +>nestedOuter : number +>nestedValue.outer : number +>nestedValue : { outer: number; inner: string; next: () => any; shadow: (value: T) => { outer: number; inner: string; value: T; next: any; }; } +>outer : number + +const nestedInner: string = nestedValue.inner; +>nestedInner : string +>nestedValue.inner : string +>nestedValue : { outer: number; inner: string; next: () => any; shadow: (value: T) => { outer: number; inner: string; value: T; next: any; }; } +>inner : string + +const constrainedValue: number = constrained<{ value: number }, "value">("value").next().value; +>constrainedValue : number +>constrained<{ value: number }, "value">("value").next().value : number +>constrained<{ value: number }, "value">("value").next() : { value: number; next: () => any; } +>constrained<{ value: number }, "value">("value").next : () => { value: number; next: any; } +>constrained<{ value: number }, "value">("value") : { value: number; next: () => any; } +>constrained : (key: K) => { value: T[K]; next: () => any; } +>value : number +>"value" : "value" +>next : () => { value: number; next: any; } +>value : number + +const annotatedValue: string = annotatedCaptured("text").next.next.value; +>annotatedValue : string +>annotatedCaptured("text").next.next.value : string +>annotatedCaptured("text").next.next : { value: string; next: any; } +>annotatedCaptured("text").next : { value: string; next: any; } +>annotatedCaptured("text") : { value: string; next: any; } +>annotatedCaptured : (value: T) => { value: typeof value; next: any; } +>"text" : "text" +>next : { value: string; next: any; } +>next : { value: string; next: any; } +>value : string + +const tupleValue: string = recursiveTuple("text")[1][1][0]; +>tupleValue : string +>recursiveTuple("text")[1][1][0] : string +>recursiveTuple("text")[1][1] : readonly [string, any] +>recursiveTuple("text")[1] : readonly [string, any] +>recursiveTuple("text") : readonly [string, any] +>recursiveTuple : (value: T) => readonly [T, any] +>"text" : "text" +>1 : 1 +>1 : 1 +>0 : 0 + +const namespaceValue: number = Nested.captured(1).next().next().value; +>namespaceValue : number +>Nested.captured(1).next().next().value : number +>Nested.captured(1).next().next() : { value: number; next: () => any; } +>Nested.captured(1).next().next : () => { value: number; next: any; } +>Nested.captured(1).next() : { value: number; next: () => any; } +>Nested.captured(1).next : () => { value: number; next: any; } +>Nested.captured(1) : { value: number; next: () => any; } +>Nested.captured : (value: T) => { value: T; next: () => any; } +>Nested : typeof Nested +>captured : (value: T) => { value: T; next: () => any; } +>1 : 1 +>next : () => { value: number; next: any; } +>next : () => { value: number; next: any; } +>value : number + +const inferredValue: string = inferredCaptured<() => string>().next.next.value; +>inferredValue : string +>inferredCaptured<() => string>().next.next.value : string +>inferredCaptured<() => string>().next.next : { value: string; next: any; } +>inferredCaptured<() => string>().next : { value: string; next: any; } +>inferredCaptured<() => string>() : { value: string; next: any; } +>inferredCaptured : () => (T extends () => infer U ? { value: U; next: any; } : never) +>next : { value: string; next: any; } +>next : { value: string; next: any; } +>value : string + +const mappedValue: number = mappedCaptured<{ value: number }>().value.next.value.value; +>mappedValue : number +>mappedCaptured<{ value: number }>().value.next.value.value : number +>mappedCaptured<{ value: number }>().value.next.value : { value: number; next: { value: any; }; } +>mappedCaptured<{ value: number }>().value.next : { value: { value: number; next: any; }; } +>mappedCaptured<{ value: number }>().value : { value: number; next: { value: any; }; } +>mappedCaptured<{ value: number }>() : { value: { value: number; next: any; }; } +>mappedCaptured : () => { [K in keyof T]: { value: T[K]; next: any; }; } +>value : number +>value : { value: number; next: { value: any; }; } +>next : { value: { value: number; next: any; }; } +>value : { value: number; next: { value: any; }; } +>value : number + +const freshValue = freshGeneric(1)("text")(true)(2); +>freshValue : (value: U) => any +>freshGeneric(1)("text")(true)(2) : (value: U) => any +>freshGeneric(1)("text")(true) : (value: U) => any +>freshGeneric(1)("text") : (value: U) => any +>freshGeneric(1) : (value: U) => any +>freshGeneric : (unused: T) => (value: U) => any +>1 : 1 +>"text" : "text" +>true : true +>2 : 2 + +const mutualValue: string = mutualCaptured(1, "text").left.next.self.next.next.right; +>mutualValue : string +>mutualCaptured(1, "text").left.next.self.next.next.right : string +>mutualCaptured(1, "text").left.next.self.next.next : { right: string; self: any; next: { left: number; next: any; }; } +>mutualCaptured(1, "text").left.next.self.next : { left: number; next: { right: string; self: any; next: any; }; } +>mutualCaptured(1, "text").left.next.self : { right: string; self: any; next: { left: number; next: any; }; } +>mutualCaptured(1, "text").left.next : { right: string; self: any; next: { left: number; next: any; }; } +>mutualCaptured(1, "text").left : { left: number; next: { right: string; self: any; next: any; }; } +>mutualCaptured(1, "text") : { left: { left: number; next: { right: string; self: any; next: any; }; }; right: { right: string; self: any; next: { left: number; next: any; }; }; } +>mutualCaptured : (left: T, right: U) => { left: { left: T; next: { right: U; self: any; next: any; }; }; right: { right: U; self: any; next: { left: T; next: any; }; }; } +>1 : 1 +>"text" : "text" +>left : { left: number; next: { right: string; self: any; next: any; }; } +>next : { right: string; self: any; next: { left: number; next: any; }; } +>self : { right: string; self: any; next: { left: number; next: any; }; } +>next : { left: number; next: { right: string; self: any; next: any; }; } +>next : { right: string; self: any; next: { left: number; next: any; }; } +>right : string + +const classValue: string = new CapturedClass("text").make("other").next().outer; +>classValue : string +>new CapturedClass("text").make("other").next().outer : string +>new CapturedClass("text").make("other").next() : { outer: string; inner: "other"; next: () => any; } +>new CapturedClass("text").make("other").next : () => { outer: string; inner: "other"; next: any; } +>new CapturedClass("text").make("other") : { outer: string; inner: "other"; next: () => any; } +>new CapturedClass("text").make : (inner: U) => { outer: string; inner: U; next: () => any; } +>new CapturedClass("text") : CapturedClass +>CapturedClass : typeof CapturedClass +>"text" : "text" +>make : (inner: U) => { outer: string; inner: U; next: () => any; } +>"other" : "other" +>next : () => { outer: string; inner: "other"; next: any; } +>outer : string + +const optional = optionalCaptured("text"); +>optional : { node?: false | { value: string; next: any; } | null | undefined; } +>optionalCaptured("text") : { node?: false | { value: string; next: any; } | null | undefined; } +>optionalCaptured : (value: T) => { node?: { value: T; next: any; } | false | null; } +>"text" : "text" + +if (optional.node) { +>optional.node : false | { value: string; next: any; } | null | undefined +>optional : { node?: false | { value: string; next: any; } | null | undefined; } +>node : false | { value: string; next: any; } | null | undefined + + const value: string = optional.node.next.next.value; +>value : string +>optional.node.next.next.value : string +>optional.node.next.next : { value: string; next: any; } +>optional.node.next : { value: string; next: any; } +>optional.node : { value: string; next: any; } +>optional : { node?: false | { value: string; next: any; } | null | undefined; } +>node : { value: string; next: any; } +>next : { value: string; next: any; } +>next : { value: string; next: any; } +>value : string +} +captured("text").consume(1); +>captured("text").consume(1) : { value: string; next: () => any; consume: (other: string) => any; } +>captured("text").consume : (other: string) => { value: string; next: () => any; consume: any; } +>captured("text") : { value: string; next: () => any; consume: (other: string) => any; } +>captured : (value: T) => { value: T; next: () => any; consume: (other: T) => any; } +>"text" : "text" +>consume : (other: string) => { value: string; next: () => any; consume: any; } +>1 : 1 + +const invalidTupleValue: number = recursiveTuple("text")[1][0]; +>invalidTupleValue : number +>recursiveTuple("text")[1][0] : string +>recursiveTuple("text")[1] : readonly [string, any] +>recursiveTuple("text") : readonly [string, any] +>recursiveTuple : (value: T) => readonly [T, any] +>"text" : "text" +>1 : 1 +>0 : 0 + +=== shadowedMappedCycle.ts === +type Show = { [K in keyof T]: T[K] } & unknown; +>Show : { [K in keyof T]: T[K]; } + +type Resolve = Show<{ +>Resolve : { [P in keyof M[K]]: M[K][P] extends "ref" ? (shadowedCycle: T_1) => Resolve : M[K][P]; } extends infer T ? { [K_1 in keyof T]: T[K_1]; } : never + + [P in keyof M[K]]: M[K][P] extends "ref" ? (shadowedCycle: T) => Resolve : M[K][P]; +>shadowedCycle : T + +}>; +declare const build: () => { [K in keyof M]: Resolve }; +>build : () => { [K in keyof M]: Resolve; } + +export const shadowedCycle = build<{ Node: { value: number; next: "ref" } }>(); +>shadowedCycle : { Node: { value: number; next: (shadowedCycle: T) => any; }; } +>build<{ Node: { value: number; next: "ref" } }>() : { Node: { value: number; next: (shadowedCycle: T) => any; }; } +>build : () => { [K in keyof M]: Resolve; } +>Node : { value: number; next: "ref"; } +>value : number +>next : "ref" + +const shadowedValue: number = shadowedCycle.Node.next(1).next("text").value; +>shadowedValue : number +>shadowedCycle.Node.next(1).next("text").value : number +>shadowedCycle.Node.next(1).next("text") : { value: number; next: (shadowedCycle: T) => any; } +>shadowedCycle.Node.next(1).next : (shadowedCycle: T) => { value: number; next: any; } +>shadowedCycle.Node.next(1) : { value: number; next: (shadowedCycle: T) => any; } +>shadowedCycle.Node.next : (shadowedCycle: T) => { value: number; next: any; } +>shadowedCycle.Node : { value: number; next: (shadowedCycle: T) => any; } +>shadowedCycle : { Node: { value: number; next: (shadowedCycle: T) => any; }; } +>Node : { value: number; next: (shadowedCycle: T) => any; } +>next : (shadowedCycle: T) => { value: number; next: any; } +>1 : 1 +>next : (shadowedCycle: T) => { value: number; next: any; } +>"text" : "text" +>value : number + diff --git a/tsc/testdata/baselines/reference/fourslash/quickInfo/recursiveFunctionCallQuickInfo.baseline b/tsc/testdata/baselines/reference/fourslash/quickInfo/recursiveFunctionCallQuickInfo.baseline index 408d47c5c5516..0f187f8a8ef2d 100644 --- a/tsc/testdata/baselines/reference/fourslash/quickInfo/recursiveFunctionCallQuickInfo.baseline +++ b/tsc/testdata/baselines/reference/fourslash/quickInfo/recursiveFunctionCallQuickInfo.baseline @@ -892,6 +892,237 @@ // | // | (verbosity level: 0) // | ---------------------------------------------------------------------- +// type Show = { [K in keyof T]: T[K] } & unknown; +// type Resolve = Show<{ +// [P in keyof M[K]]: M[K][P] extends "ref" ? Resolve : M[K][P]; +// }>; +// declare const build: () => { [K in keyof M]: Resolve }; +// const mappedCycle = build<{ Node: { value: number; next: "ref" } }>(); +// ^^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const mappedCycle: { +// | Node: { +// | value: number; +// | next: ...; +// | }; +// | } +// | ``` +// | +// | (verbosity level: 1) +// | ---------------------------------------------------------------------- +// ^^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const mappedCycle: { +// | Node: { +// | value: number; +// | next: ...; +// | }; +// | } +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// mappedCycle.Node.next.next.value; +// ^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | (property) Node: { +// | value: number; +// | next: ...; +// | } +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// ^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | (property) next: { +// | value: number; +// | next: ...; +// | } +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// const nestedCycle = { wrapped: mappedCycle }; +// ^^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const nestedCycle: { +// | wrapped: { +// | Node: { +// | value: number; +// | next: ...; +// | }; +// | }; +// | } +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// const sharedCycles = { first: mappedCycle, second: mappedCycle }; +// ^^^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const sharedCycles: { +// | first: { +// | Node: { +// | value: number; +// | next: ...; +// | }; +// | }; +// | second: { +// | Node: { +// | value: number; +// | next: ...; +// | }; +// | }; +// | } +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// declare const buildOptional: () => { [K in keyof M]?: Resolve }; +// declare const buildNullable: () => { [K in keyof M]: Resolve | null }; +// const optionalBox = { cycle: buildOptional<{ Node: { value: number; next: "ref" } }>() }; +// ^^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const optionalBox: { +// | cycle: { +// | Node?: { +// | value: number; +// | next: ...; +// | } | undefined; +// | }; +// | } +// | ``` +// | +// | (verbosity level: 1) +// | ---------------------------------------------------------------------- +// ^^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const optionalBox: { +// | cycle: { +// | Node?: { +// | value: number; +// | next: ...; +// | } | undefined; +// | }; +// | } +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// const nullableBox = { cycle: buildNullable<{ Node: { value: number; next: "ref" } }>() }; +// ^^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const nullableBox: { +// | cycle: { +// | Node: { +// | value: number; +// | next: ...; +// | } | null; +// | }; +// | } +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// type ResolveNullable = Show<{ +// [P in keyof M[K]]: M[K][P] extends "ref" ? ResolveNullable | null : M[K][P]; +// }>; +// declare const buildNullableLinks: () => { [K in keyof M]: ResolveNullable | null }; +// const nullableLinkBox = { cycle: buildNullableLinks<{ Node: { value: number; next: "ref" } }>() }; +// ^^^^^^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const nullableLinkBox: { +// | cycle: { +// | Node: { +// | value: number; +// | next: ... | null; +// | } | null; +// | }; +// | } +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// function captured(value: T) { +// const node = { value, next: () => node }; +// return node; +// } +// const capturedValue = captured(1); +// ^^^^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const capturedValue: { +// | value: number; +// | next: () => ...; +// | } +// | ``` +// | +// | (verbosity level: 1) +// | ---------------------------------------------------------------------- +// ^^^^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const capturedValue: { +// | value: number; +// | next: () => ...; +// | } +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// capturedValue.next(); +// ^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | (property) next: () => { +// | value: number; +// | next: () => ...; +// | } +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// function inferredCaptured() { +// type Node = { value: V; next: Node }; +// return null! as (T extends () => infer U ? Node : never); +// } +// const inferredValue = inferredCaptured<() => string>(); +// ^^^^^^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const inferredValue: Node +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- +// declare const buildMixed: () => { [K in keyof M]?: Resolve | false | null }; +// const mixedBox = { cycle: buildMixed<{ Node: { value: number; next: "ref" } }>() }; +// ^^^^^^^^ +// | ---------------------------------------------------------------------- +// | ```typescript +// | const mixedBox: { +// | cycle: { +// | Node?: false | { +// | value: number; +// | next: ...; +// | } | null | undefined; +// | }; +// | } +// | ``` +// | +// | (verbosity level: 0) +// | ---------------------------------------------------------------------- [ { "marker": { @@ -2692,5 +2923,456 @@ }, "verbosityLevel": 0 } + }, + { + "marker": { + "Position": 2725, + "LSPosition": { + "line": 81, + "character": 17 + }, + "Name": "mappedCycle", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst mappedCycle: {\n Node: {\n value: number;\n next: ...;\n };\n}\n```\n" + }, + "range": { + "start": { + "line": 81, + "character": 6 + }, + "end": { + "line": 81, + "character": 17 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 2725, + "LSPosition": { + "line": 81, + "character": 17 + }, + "Name": "mappedCycle", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst mappedCycle: {\n Node: {\n value: number;\n next: ...;\n };\n}\n```\n" + }, + "range": { + "start": { + "line": 81, + "character": 6 + }, + "end": { + "line": 81, + "character": 17 + } + } + }, + "verbosityLevel": 1 + } + }, + { + "marker": { + "Position": 2795, + "LSPosition": { + "line": 82, + "character": 16 + }, + "Name": "mappedNode", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\n(property) Node: {\n value: number;\n next: ...;\n}\n```\n" + }, + "range": { + "start": { + "line": 82, + "character": 12 + }, + "end": { + "line": 82, + "character": 16 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 2800, + "LSPosition": { + "line": 82, + "character": 21 + }, + "Name": "mappedNext", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\n(property) next: {\n value: number;\n next: ...;\n}\n```\n" + }, + "range": { + "start": { + "line": 82, + "character": 17 + }, + "end": { + "line": 82, + "character": 21 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 2830, + "LSPosition": { + "line": 83, + "character": 17 + }, + "Name": "nestedMappedCycle", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst nestedCycle: {\n wrapped: {\n Node: {\n value: number;\n next: ...;\n };\n };\n}\n```\n" + }, + "range": { + "start": { + "line": 83, + "character": 6 + }, + "end": { + "line": 83, + "character": 17 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 2877, + "LSPosition": { + "line": 84, + "character": 18 + }, + "Name": "sharedMappedCycles", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst sharedCycles: {\n first: {\n Node: {\n value: number;\n next: ...;\n };\n };\n second: {\n Node: {\n value: number;\n next: ...;\n };\n };\n}\n```\n" + }, + "range": { + "start": { + "line": 84, + "character": 6 + }, + "end": { + "line": 84, + "character": 18 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 3096, + "LSPosition": { + "line": 87, + "character": 17 + }, + "Name": "optionalMappedCycle", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst optionalBox: {\n cycle: {\n Node?: {\n value: number;\n next: ...;\n } | undefined;\n };\n}\n```\n" + }, + "range": { + "start": { + "line": 87, + "character": 6 + }, + "end": { + "line": 87, + "character": 17 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 3096, + "LSPosition": { + "line": 87, + "character": 17 + }, + "Name": "optionalMappedCycle", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst optionalBox: {\n cycle: {\n Node?: {\n value: number;\n next: ...;\n } | undefined;\n };\n}\n```\n" + }, + "range": { + "start": { + "line": 87, + "character": 6 + }, + "end": { + "line": 87, + "character": 17 + } + } + }, + "verbosityLevel": 1 + } + }, + { + "marker": { + "Position": 3186, + "LSPosition": { + "line": 88, + "character": 17 + }, + "Name": "nullableMappedCycle", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst nullableBox: {\n cycle: {\n Node: {\n value: number;\n next: ...;\n } | null;\n };\n}\n```\n" + }, + "range": { + "start": { + "line": 88, + "character": 6 + }, + "end": { + "line": 88, + "character": 17 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 3516, + "LSPosition": { + "line": 93, + "character": 21 + }, + "Name": "nullableMappedLinks", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst nullableLinkBox: {\n cycle: {\n Node: {\n value: number;\n next: ... | null;\n } | null;\n };\n}\n```\n" + }, + "range": { + "start": { + "line": 93, + "character": 6 + }, + "end": { + "line": 93, + "character": 21 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 3711, + "LSPosition": { + "line": 98, + "character": 19 + }, + "Name": "capturedValue", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst capturedValue: {\n value: number;\n next: () => ...;\n}\n```\n" + }, + "range": { + "start": { + "line": 98, + "character": 6 + }, + "end": { + "line": 98, + "character": 19 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 3711, + "LSPosition": { + "line": 98, + "character": 19 + }, + "Name": "capturedValue", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst capturedValue: {\n value: number;\n next: () => ...;\n}\n```\n" + }, + "range": { + "start": { + "line": 98, + "character": 6 + }, + "end": { + "line": 98, + "character": 19 + } + } + }, + "verbosityLevel": 1 + } + }, + { + "marker": { + "Position": 3745, + "LSPosition": { + "line": 99, + "character": 18 + }, + "Name": "capturedNext", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\n(property) next: () => {\n value: number;\n next: () => ...;\n}\n```\n" + }, + "range": { + "start": { + "line": 99, + "character": 14 + }, + "end": { + "line": 99, + "character": 18 + } + } + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 3916, + "LSPosition": { + "line": 104, + "character": 19 + }, + "Name": "inferredCapturedValue", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst inferredValue: Node\n```\n" + }, + "range": { + "start": { + "line": 104, + "character": 6 + }, + "end": { + "line": 104, + "character": 19 + } + }, + "canIncreaseVerbosity": true + }, + "verbosityLevel": 0 + } + }, + { + "marker": { + "Position": 4053, + "LSPosition": { + "line": 106, + "character": 14 + }, + "Name": "mixedMappedCycle", + "Data": {} + }, + "item": { + "hover": { + "contents": { + "kind": "markdown", + "value": "```typescript\nconst mixedBox: {\n cycle: {\n Node?: false | {\n value: number;\n next: ...;\n } | null | undefined;\n };\n}\n```\n" + }, + "range": { + "start": { + "line": 106, + "character": 6 + }, + "end": { + "line": 106, + "character": 14 + } + } + }, + "verbosityLevel": 0 + } } ] \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/tsbuild/incremental/recursive-function-declaration-consumption.js b/tsc/testdata/baselines/reference/tsbuild/incremental/recursive-function-declaration-consumption.js index c5570226917f7..bcba60f7ebbea 100644 --- a/tsc/testdata/baselines/reference/tsbuild/incremental/recursive-function-declaration-consumption.js +++ b/tsc/testdata/baselines/reference/tsbuild/incremental/recursive-function-declaration-consumption.js @@ -9,6 +9,13 @@ import { indexed, mapped, viaAnnotation } from "../producer/dist/index.js"; import { nextLink, nextCallable, parenthesized, asserted, Methods, overloaded } from "../producer/dist/index.js"; import { hiddenAlias, siblingHiddenAliases } from "../producer/dist/index.js"; import { nestedNumber } from "../producer/dist/index.js"; +import { mappedCycle, mappedCycleCopy, nestedCycle, cycleKey, keyedCycles, sharedCycles, mutualCycle, shadowedCycle } from "../producer/dist/index.js"; +import { optionalCycle, nullableCycle, mixedCycles, sharedOptionalCycles, nullableKeys, nullableRoot, optionalRoot, nullableLinks, nullishLinks } from "../producer/dist/index.js"; +import { optionalNullableLinks, nullableOptionalLinks } from "../producer/dist/index.js"; +import { mixedUnionCycle, factory, captured, nestedCaptured, constrained, optionalCaptured, annotatedCaptured, recursiveTuple, Nested } from "../producer/dist/index.js"; +import { inferredCaptured, mappedCaptured, freshGeneric, mutualCaptured } from "../producer/dist/index.js"; +import { CapturedClass } from "../producer/dist/index.js"; +import { covariantClass, contravariantClass } from "../producer/dist/index.js"; const a: typeof arrow = arrow()()(); const b: typeof expression = expression()()(); const c: typeof first = first()()(); @@ -56,9 +63,102 @@ const copiedOuter: number = nestedNumber.copied("inner").outer; const copiedInner: string = nestedNumber.copied("inner").inner; const restOuter: number = nestedNumber.rest(true).outer; const restInner: boolean = nestedNumber.rest(true).inner; +const mappedCycleValue: number = mappedCycle.Node.next.next.value; +const copiedMappedValue: number = mappedCycleCopy.Node.next.next.value; +const nestedMappedValue: string = nestedCycle.wrapped.Node.next.next.value; +const quotedMappedValue: string = keyedCycles["a-b"].next.next.value; +const numericMappedValue: boolean = keyedCycles[0].next.next.value; +const symbolMappedValue: number = keyedCycles[cycleKey].next.next.value; +const sharedMappedValue: number = sharedCycles.second.Node.next.next.value; +const mutualFirstValue: number = mutualCycle.First.next.next.value; +const mutualSecondValue: string = mutualCycle.First.next.value; +const shadowedMappedValue: number = shadowedCycle.Node.next(1).next("text").value; +const optionalCycleValue: number | undefined = optionalCycle.Node?.next.next.value; +const nullableCycleValue: string | undefined = nullableCycle.Node?.next.next.value; +const mixedCycleValue: number | undefined = mixedCycles.optional?.Node?.next.next.value; +const mixedRequiredValue: number | undefined = mixedCycles.required.Node?.next.next.value; +const sharedOptionalValue: number | undefined = sharedOptionalCycles.second.Node?.next.next.value; +const quotedNullableValue: string | undefined = nullableKeys["a-b"]?.next.next.value; +const numericNullableValue: boolean | undefined = nullableKeys[0]?.next.next.value; +const symbolNullableValue: number | undefined = nullableKeys[cycleKey]?.next.next.value; +const nullableRootValue: number | undefined = nullableRoot?.next.next.value; +const optionalRootValue: string | undefined = optionalRoot?.next.next.value; +const nullableLinkValue: number | undefined = nullableLinks.Node?.next?.next?.value; +const nullishLinkValue: number | undefined = nullishLinks.Node?.next?.next?.value; +const optionalNullableLinkValue: number | undefined = optionalNullableLinks.Node?.next?.next?.value; +const nullableOptionalLinkValue: number | undefined = nullableOptionalLinks.Node?.next?.next?.value; +type OptionalNode = (typeof optionalCycle)["Node"] & {}; +type NullableNode = (typeof nullableCycle)["Node"] & {}; +type NullableLinkNode = (typeof nullableLinks)["Node"] & {}; +type NullishLinkNode = (typeof nullishLinks)["Node"] & {}; +type OptionalNullableLinkNode = (typeof optionalNullableLinks)["Node"] & {}; +type NullableOptionalLinkNode = (typeof nullableOptionalLinks)["Node"] & {}; +const optionalNextHasNull: null extends OptionalNode["next"] ? true : false = false; +const optionalNextHasUndefined: undefined extends OptionalNode["next"] ? true : false = false; +const nullableNextHasNull: null extends NullableNode["next"] ? true : false = false; +const nullableNextHasUndefined: undefined extends NullableNode["next"] ? true : false = false; +const nullableLinkHasNull: null extends NullableLinkNode["next"] ? true : false = true; +const nullableLinkHasUndefined: undefined extends NullableLinkNode["next"] ? true : false = false; +const nullishLinkHasNull: null extends NullishLinkNode["next"] ? true : false = true; +const nullishLinkHasUndefined: undefined extends NullishLinkNode["next"] ? true : false = true; +const optionalNullableLinkHasNull: null extends OptionalNullableLinkNode["next"] ? true : false = true; +const optionalNullableLinkHasUndefined: undefined extends OptionalNullableLinkNode["next"] ? true : false = false; +const nullableOptionalLinkHasNull: null extends NullableOptionalLinkNode["next"] ? true : false = false; +const nullableOptionalLinkHasUndefined: undefined extends NullableOptionalLinkNode["next"] ? true : false = true; type IsAny = 0 extends (1 & T) ? true : false; const result = arrow()()(); const notAny: false = null as unknown as IsAny; +const mappedNotAny: false = null as unknown as IsAny; +const mutualNotAny: false = null as unknown as IsAny; +const shadowedMappedNotAny: false = null as unknown as IsAny; +const optionalNotAny: IsAny = false; +const nullableNotAny: IsAny = false; +const nullableLinkNotAny: IsAny = false; +const nullishLinkNotAny: IsAny = false; +const optionalNullableLinkNotAny: IsAny = false; +const nullableOptionalLinkNotAny: IsAny = false; +const factoryResult = factory()()()(); +const factoryNotAny: IsAny = false; +const capturedValue: string = captured("text").next().consume("other").value; +const capturedResult = captured("text").next(); +const capturedNotAny: IsAny = false; +const nestedCapturedValue = nestedCaptured(1)("text").shadow(true).next.next(); +const capturedOuter: number = nestedCapturedValue.outer; +const capturedInner: string = nestedCapturedValue.inner; +const constrainedValue: number = constrained<{ value: number }, "value">("value").next().value; +const annotatedCapturedValue: string = annotatedCaptured("text").next.next.value; +const recursiveTupleValue: string = recursiveTuple("text")[1][1][0]; +const namespaceValue: number = Nested.captured(1).next().next().value; +const inferredCapturedValue: string = inferredCaptured<() => string>().next.next.value; +const mappedCapturedValue: number = mappedCaptured<{ value: number }>().value.next.value.value; +const freshGenericValue = freshGeneric(1)("text")(true)(2); +const freshGenericNotAny: IsAny = false; +const mutualCapturedValue: string = mutualCaptured(1, "text").left.next.self.next.next.right; +const mutualCapturedResult = mutualCaptured(1, "text").right.self.next.left; +const mutualCapturedNotAny: IsAny = false; +const capturedClassResult = new CapturedClass("text").make("other").next(); +const capturedClassOuter: string = capturedClassResult.outer; +const capturedClassInner: string = capturedClassResult.inner; +const capturedClassNotAny: IsAny = false; +const Covariant = covariantClass(); +const covariantString = new Covariant(); +const covariantUnknown = new Covariant(); +const covariantWide: typeof covariantUnknown = covariantString.next(); +const covariantNotAny: IsAny = false; +const Contravariant = contravariantClass(); +const contravariantString = new Contravariant(); +const contravariantUnknown = new Contravariant(); +const contravariantNarrow: typeof contravariantString = contravariantUnknown.next(); +const contravariantNotAny: IsAny = false; +const optionalCapturedValue = optionalCaptured("text"); +if (optionalCapturedValue.node) { + const value: string = optionalCapturedValue.node.next.next.value; + const notAny: IsAny = false; +} +if (mixedUnionCycle.Node) { + const value: number = mixedUnionCycle.Node.next.next.value; + const notAny: IsAny = false; +} const invalid: number = arrow()()(); const invalidExpression: number = expression()()(); const invalidObject: number = objectReturn().call; @@ -77,9 +177,28 @@ const invalidComputedMethod: number = Methods[key]()(); const invalidNestedOuter: boolean = nestedString.outer; const invalidNestedInner: string = nestedString.inner; nestedNumber.constrained("wrong"); +const invalidMappedCycleValue: string = mappedCycle.Node.next.next.value; +const invalidMutualCycleValue: number = mutualCycle.First.next.value; +const invalidShadowedMappedValue: string = shadowedCycle.Node.next(1).next("text").value; +const invalidNullNext: OptionalNode["next"] = null; +const invalidUndefinedNext: OptionalNode["next"] = undefined; +const invalidNullableLinkValue: number = nullableLinks.Node!.next.value; +const invalidNullishLinkValue: number = nullishLinks.Node!.next.value; +captured("text").consume(1); +const invalidRecursiveTupleValue: number = recursiveTuple("text")[1][0]; +const invalidCapturedOuter: string = nestedCapturedValue.outer; +const invalidCapturedInner: number = nestedCapturedValue.inner; +type WithoutFalseOrNullish = T extends false | null | undefined ? never : T; +const invalidMixedNext: WithoutFalseOrNullish["next"] = false; +const invalidInferredCapturedValue: number = inferredCaptured<() => string>().next.value; +const invalidMappedCapturedValue: string = mappedCaptured<{ value: number }>().value.next.value.value; +const invalidMutualCapturedValue: boolean = mutualCaptured(1, "text").right.self.next.left; +const invalidCapturedClassValue: number = capturedClassResult.outer; +const invalidCovariance: typeof covariantString = covariantUnknown.next(); +const invalidContravariance: typeof contravariantUnknown = contravariantString.next(); //// [/home/src/workspaces/project/consumer/tsconfig.json] *new* { - "compilerOptions": { "strict": true, "noEmit": true }, + "compilerOptions": { "strict": true, "exactOptionalPropertyTypes": true, "noEmit": true }, "references": [{ "path": "../producer" }] } //// [/home/src/workspaces/project/producer/index.ts] *new* @@ -160,106 +279,397 @@ export const nestedOwner = { }, }; export const nestedNumber = nestedOwner.make(1); +type Show = { [K in keyof T]: T[K] } & unknown; +type Resolve = Show<{ + [P in keyof M[K]]: M[K][P] extends "ref" ? Resolve : M[K][P]; +}>; +declare const build: () => { [K in keyof M]: Resolve }; +export const mappedCycle = build<{ Node: { value: number; next: "ref" } }>(); +export const mappedCycleCopy = mappedCycle; +export const nestedCycle = { wrapped: build<{ Node: { value: string; next: "ref" } }>() }; +export const cycleKey = Symbol(); +export const keyedCycles = build<{ + "a-b": { value: string; next: "ref" }; + 0: { value: boolean; next: "ref" }; + [cycleKey]: { value: number; next: "ref" }; +}>(); +export const sharedCycles = { first: mappedCycle, second: mappedCycle }; +type ResolveMutual = Show<{ + [P in keyof M[K]]: M[K][P] extends { ref: infer R extends keyof M } ? ResolveMutual : M[K][P]; +}>; +declare const buildMutual: () => { [K in keyof M]: ResolveMutual }; +export const mutualCycle = buildMutual<{ + First: { value: number; next: { ref: "Second" } }; + Second: { value: string; next: { ref: "First" } }; +}>(); +type ResolveShadowed = Show<{ + [P in keyof M[K]]: M[K][P] extends "ref" ? (shadowedCycle: T) => ResolveShadowed : M[K][P]; +}>; +declare const buildShadowed: () => { [K in keyof M]: ResolveShadowed }; +export const shadowedCycle = buildShadowed<{ Node: { value: number; next: "ref" } }>(); +declare const buildOptional: () => { [K in keyof M]?: Resolve }; +export const optionalCycle = buildOptional<{ Node: { value: number; next: "ref" } }>(); +declare const buildNullable: () => { [K in keyof M]: Resolve | null }; +export const nullableCycle = buildNullable<{ Node: { value: string; next: "ref" } }>(); +declare const wrap: (value: T) => { required: T; optional?: T | null }; +export const mixedCycles = wrap(optionalCycle); +export const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle }; +export const nullableKeys = buildNullable<{ + "a-b": { value: string; next: "ref" }; + 0: { value: boolean; next: "ref" }; + [cycleKey]: { value: number; next: "ref" }; +}>(); +declare const buildNullableRoot: () => Resolve | null; +export const nullableRoot = buildNullableRoot<{ Node: { value: number; next: "ref" } }>(); +declare const buildOptionalRoot: () => Resolve | undefined; +export const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: "ref" } }>(); +type ResolveNullable = Show<{ + [P in keyof M[K]]: M[K][P] extends "ref" ? ResolveNullable | null : M[K][P]; +}>; +declare const buildNullableLinks: () => { [K in keyof M]: ResolveNullable | null }; +export const nullableLinks = buildNullableLinks<{ Node: { value: number; next: "ref" } }>(); +declare const buildOptionalNullableLinks: () => { [K in keyof M]?: ResolveNullable | null }; +export const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: "ref" } }>(); +type ResolveOptional = Show<{ + [P in keyof M[K]]: M[K][P] extends "ref" ? ResolveOptional | undefined : M[K][P]; +}>; +declare const buildNullableOptionalLinks: () => { [K in keyof M]: ResolveOptional | null }; +export const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: "ref" } }>(); +type ResolveNullish = Show<{ + [P in keyof M[K]]: M[K][P] extends "ref" ? ResolveNullish | null | undefined : M[K][P]; +}>; +declare const buildNullishLinks: () => { [K in keyof M]?: ResolveNullish | null }; +export const nullishLinks = buildNullishLinks<{ Node: { value: number; next: "ref" } }>(); +declare const buildMixed: () => { [K in keyof M]?: Resolve | false | null }; +export const mixedUnionCycle = buildMixed<{ Node: { value: number; next: "ref" } }>(); +export const _recursive = 1; +export const factory = () => function self() { return self; }; +export function captured(value: T) { + const node = { value, next: () => node, consume: (other: T) => node }; + return node; +} +export function nestedCaptured(outer: T) { + return (inner: U) => { + const node = { + outer, inner, next: () => node, + shadow: (value: T) => ({ outer, inner, value, next: node }), + }; + return node; + }; +} +export function constrained(key: K) { + const node = { value: null! as T[K], next: () => node }; + return node; +} +export function optionalCaptured(value: T) { + type Node = { value: T; next: Node }; + return null! as { node?: Node | false | null }; +} +export function annotatedCaptured(value: T) { + const node: { value: typeof value; next: typeof node } = { value, next: null! }; + return node; +} +export function recursiveTuple(value: T) { + type Tuple = readonly [T, Tuple]; + return null! as Tuple; +} +export function inferredCaptured() { + type Node = { value: V; next: Node }; + return null! as (T extends () => infer U ? Node : never); +} +export function mappedCaptured() { + type Node = { [K in keyof T]: { value: T[K]; next: Node } }; + return null! as Node; +} +export function freshGeneric(unused: T) { + const recur = (value: U) => recur; + return recur; +} +export function mutualCaptured(left: T, right: U) { + type Left = { left: T; next: Right }; + type Right = { right: U; self: Right; next: Left }; + return { left: null! as Left, right: null! as Right }; +} +export class CapturedClass { + constructor(public value: T) {} + make(inner: U) { + const node = { outer: this.value, inner, next: () => node }; + return node; + } +} +export function covariantClass() { + return class Node { + value!: T; + next(): Node { return this; } + }; +} +export function contravariantClass() { + return class Node { + consume!: (value: T) => void; + next(): Node { return this; } + }; +} +export namespace Nested { + export function captured(value: T) { + const node = { value, next: () => node }; + return node; + } +} +type NonNullable = "shadowed"; //// [/home/src/workspaces/project/producer/tsconfig.json] *new* { - "compilerOptions": { "strict": true, "composite": true, "outDir": "dist" } + "compilerOptions": { "strict": true, "exactOptionalPropertyTypes": true, "composite": true, "outDir": "dist" } } tsgo --build consumer ExitStatus:: DiagnosticsPresent_OutputsGenerated Output:: -consumer/index.ts:58:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. +producer/index.ts:83:14 - error TS5088: The inferred type of 'mappedCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +83 export const mappedCycle = build<{ Node: { value: number; next: "ref" } }>(); +   ~~~~~~~~~~~ + +producer/index.ts:84:14 - error TS5088: The inferred type of 'mappedCycleCopy' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +84 export const mappedCycleCopy = mappedCycle; +   ~~~~~~~~~~~~~~~ + +producer/index.ts:85:14 - error TS5088: The inferred type of 'nestedCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +85 export const nestedCycle = { wrapped: build<{ Node: { value: string; next: "ref" } }>() }; +   ~~~~~~~~~~~ + +producer/index.ts:87:14 - error TS5088: The inferred type of 'keyedCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +87 export const keyedCycles = build<{ +   ~~~~~~~~~~~ + +producer/index.ts:92:14 - error TS5088: The inferred type of 'sharedCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +92 export const sharedCycles = { first: mappedCycle, second: mappedCycle }; +   ~~~~~~~~~~~~ + +producer/index.ts:97:14 - error TS5088: The inferred type of 'mutualCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +97 export const mutualCycle = buildMutual<{ +   ~~~~~~~~~~~ + +producer/index.ts:105:14 - error TS5088: The inferred type of 'shadowedCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +105 export const shadowedCycle = buildShadowed<{ Node: { value: number; next: "ref" } }>(); +   ~~~~~~~~~~~~~ + +producer/index.ts:107:14 - error TS5088: The inferred type of 'optionalCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +107 export const optionalCycle = buildOptional<{ Node: { value: number; next: "ref" } }>(); +   ~~~~~~~~~~~~~ + +producer/index.ts:109:14 - error TS5088: The inferred type of 'nullableCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +109 export const nullableCycle = buildNullable<{ Node: { value: string; next: "ref" } }>(); +   ~~~~~~~~~~~~~ + +producer/index.ts:111:14 - error TS5088: The inferred type of 'mixedCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +111 export const mixedCycles = wrap(optionalCycle); +   ~~~~~~~~~~~ + +producer/index.ts:112:14 - error TS5088: The inferred type of 'sharedOptionalCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +112 export const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle }; +   ~~~~~~~~~~~~~~~~~~~~ + +producer/index.ts:113:14 - error TS5088: The inferred type of 'nullableKeys' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +113 export const nullableKeys = buildNullable<{ +   ~~~~~~~~~~~~ + +producer/index.ts:119:14 - error TS5088: The inferred type of 'nullableRoot' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +119 export const nullableRoot = buildNullableRoot<{ Node: { value: number; next: "ref" } }>(); +   ~~~~~~~~~~~~ + +producer/index.ts:121:14 - error TS5088: The inferred type of 'optionalRoot' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -58 const invalid: number = arrow()()(); -   ~~~~~~~ +121 export const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: "ref" } }>(); +   ~~~~~~~~~~~~ -consumer/index.ts:59:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. +producer/index.ts:126:14 - error TS5088: The inferred type of 'nullableLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -59 const invalidExpression: number = expression()()(); -   ~~~~~~~~~~~~~~~~~ +126 export const nullableLinks = buildNullableLinks<{ Node: { value: number; next: "ref" } }>(); +   ~~~~~~~~~~~~~ -consumer/index.ts:60:7 - error TS2322: Type '() => { call: ...; }' is not assignable to type 'number'. +producer/index.ts:128:14 - error TS5088: The inferred type of 'optionalNullableLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -60 const invalidObject: number = objectReturn().call; -   ~~~~~~~~~~~~~ +128 export const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: "ref" } }>(); +   ~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:61:7 - error TS2322: Type '() => readonly [...]' is not assignable to type 'number'. +producer/index.ts:133:14 - error TS5088: The inferred type of 'nullableOptionalLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -61 const invalidTuple: number = tupleReturn()[0]; -   ~~~~~~~~~~~~ +133 export const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: "ref" } }>(); +   ~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:62:7 - error TS2322: Type '(shadowed: number) => ...' is not assignable to type 'number'. +producer/index.ts:138:14 - error TS5088: The inferred type of 'nullishLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -62 const invalidShadowed: number = shadowed(1); -   ~~~~~~~~~~~~~~~ +138 export const nullishLinks = buildNullishLinks<{ Node: { value: number; next: "ref" } }>(); +   ~~~~~~~~~~~~ -consumer/index.ts:63:7 - error TS2322: Type 'number' is not assignable to type 'string'. +producer/index.ts:140:14 - error TS5088: The inferred type of 'mixedUnionCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -63 const invalidObjectValue: string = object.next().value; -   ~~~~~~~~~~~~~~~~~~ +140 export const mixedUnionCycle = buildMixed<{ Node: { value: number; next: "ref" } }>(); +   ~~~~~~~~~~~~~~~ -consumer/index.ts:64:7 - error TS2322: Type 'readonly [() => ...]' is not assignable to type 'number'. +producer/index.ts:142:14 - error TS5088: The inferred type of 'factory' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -64 const invalidTupleValue: number = tuple[0](); -   ~~~~~~~~~~~~~~~~~ +142 export const factory = () => function self() { return self; }; +   ~~~~~~~ -consumer/index.ts:65:7 - error TS2322: Type 'string' is not assignable to type 'number'. +producer/index.ts:143:17 - error TS5088: The inferred type of 'captured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -65 const invalidSpecialized: number = specialized.next().value; -   ~~~~~~~~~~~~~~~~~~ +143 export function captured(value: T) { +   ~~~~~~~~ -consumer/index.ts:66:7 - error TS2322: Type '{ next: ...; }' is not assignable to type 'number'. +producer/index.ts:147:17 - error TS5088: The inferred type of 'nestedCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -66 const invalidMapped: number = mapped.next; -   ~~~~~~~~~~~~~ +147 export function nestedCaptured(outer: T) { +   ~~~~~~~~~~~~~~ -consumer/index.ts:67:7 - error TS2322: Type 'string' is not assignable to type 'number'. +producer/index.ts:156:17 - error TS5088: The inferred type of 'constrained' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -67 const invalidAnnotation: number = viaAnnotation.next().value; -   ~~~~~~~~~~~~~~~~~ +156 export function constrained(key: K) { +   ~~~~~~~~~~~ -consumer/index.ts:68:7 - error TS2322: Type 'string' is not assignable to type 'number'. +producer/index.ts:160:17 - error TS5088: The inferred type of 'optionalCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -68 const invalidLink: number = nextLink.next.value; -   ~~~~~~~~~~~ +160 export function optionalCaptured(value: T) { +   ~~~~~~~~~~~~~~~~ -consumer/index.ts:69:7 - error TS2322: Type 'number' is not assignable to type 'string'. +producer/index.ts:164:17 - error TS5088: The inferred type of 'annotatedCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -69 const invalidCallable: string = nextCallable(1).link.value; -   ~~~~~~~~~~~~~~~ +164 export function annotatedCaptured(value: T) { +   ~~~~~~~~~~~~~~~~~ -consumer/index.ts:70:7 - error TS2322: Type 'string' is not assignable to type 'number'. +producer/index.ts:168:17 - error TS5088: The inferred type of 'recursiveTuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -70 const invalidHiddenValue: number = hiddenAlias.next.next.value; -   ~~~~~~~~~~~~~~~~~~ +168 export function recursiveTuple(value: T) { +   ~~~~~~~~~~~~~~ -consumer/index.ts:71:7 - error TS2322: Type '() => (typeof Methods)["recur"]' is not assignable to type 'number'. +producer/index.ts:172:17 - error TS5088: The inferred type of 'inferredCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -71 const invalidMethod: number = Methods.recur()(); -   ~~~~~~~~~~~~~ +172 export function inferredCaptured() { +   ~~~~~~~~~~~~~~~~ -consumer/index.ts:72:7 - error TS2322: Type '() => (typeof Methods)[typeof key]' is not assignable to type 'number'. +producer/index.ts:176:17 - error TS5088: The inferred type of 'mappedCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -72 const invalidComputedMethod: number = Methods[key]()(); -   ~~~~~~~~~~~~~~~~~~~~~ +176 export function mappedCaptured() { +   ~~~~~~~~~~~~~~ -consumer/index.ts:73:7 - error TS2322: Type 'string' is not assignable to type 'boolean'. +producer/index.ts:180:17 - error TS5088: The inferred type of 'freshGeneric' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -73 const invalidNestedOuter: boolean = nestedString.outer; -   ~~~~~~~~~~~~~~~~~~ +180 export function freshGeneric(unused: T) { +   ~~~~~~~~~~~~ -consumer/index.ts:74:7 - error TS2322: Type 'number' is not assignable to type 'string'. +producer/index.ts:184:17 - error TS5088: The inferred type of 'mutualCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -74 const invalidNestedInner: string = nestedString.inner; -   ~~~~~~~~~~~~~~~~~~ +184 export function mutualCaptured(left: T, right: U) { +   ~~~~~~~~~~~~~~ -consumer/index.ts:75:26 - error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. +producer/index.ts:191:5 - error TS5088: The inferred type of 'make' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -75 nestedNumber.constrained("wrong"); -   ~~~~~~~ +191 make(inner: U) { +   ~~~~ +producer/index.ts:196:17 - error TS5088: The inferred type of 'covariantClass' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -Found 18 errors in the same file, starting at: consumer/index.ts:58 +196 export function covariantClass() { +   ~~~~~~~~~~~~~~ + +producer/index.ts:202:17 - error TS5088: The inferred type of 'contravariantClass' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +202 export function contravariantClass() { +   ~~~~~~~~~~~~~~~~~~ + +producer/index.ts:209:21 - error TS5088: The inferred type of 'captured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +209 export function captured(value: T) { +   ~~~~~~~~ + +consumer/index.ts:1:88 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +1 import { arrow, expression, first, generic, objectReturn, tupleReturn, shadowed } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:2:64 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +2 import { object, method, accessor, tuple, array, nested } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:3:94 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +3 import { memberTuple, memberArray, quoted, numeric, key, computed, union, specialized } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:4:48 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +4 import { indexed, mapped, viaAnnotation } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:5:86 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +5 import { nextLink, nextCallable, parenthesized, asserted, Methods, overloaded } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:6:51 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +6 import { hiddenAlias, siblingHiddenAliases } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:7:30 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +7 import { nestedNumber } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:8:124 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +8 import { mappedCycle, mappedCycleCopy, nestedCycle, cycleKey, keyedCycles, sharedCycles, mutualCycle, shadowedCycle } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:9:152 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +9 import { optionalCycle, nullableCycle, mixedCycles, sharedOptionalCycles, nullableKeys, nullableRoot, optionalRoot, nullableLinks, nullishLinks } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:10:62 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +10 import { optionalNullableLinks, nullableOptionalLinks } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:11:142 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +11 import { mixedUnionCycle, factory, captured, nestedCaptured, constrained, optionalCaptured, annotatedCaptured, recursiveTuple, Nested } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:12:80 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +12 import { inferredCaptured, mappedCaptured, freshGeneric, mutualCaptured } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:13:31 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +13 import { CapturedClass } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:14:52 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +14 import { covariantClass, contravariantClass } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +Found 48 errors in 2 files. + +Errors Files + 14 consumer/index.ts:1 + 34 producer/index.ts:83 //// [/home/src/tslibs/TS/Lib/lib.es2026.full.d.ts] *Lib* /// @@ -300,219 +710,6 @@ declare const console: { log(msg: any): void; }; "size": 71, "semanticErrors": true } -//// [/home/src/workspaces/project/producer/dist/index.d.ts] *new* -export declare const arrow: () => typeof arrow; -export declare const expression: () => typeof expression; -export declare const first: () => typeof second; -export declare const second: () => typeof first; -export declare const generic: (value: T) => typeof generic; -export declare const objectReturn: () => { - call: typeof objectReturn; -}; -export declare const tupleReturn: () => readonly [typeof tupleReturn]; -export declare const shadowed: (shadowed: number) => typeof import(".").shadowed; -export declare const object: { - value: number; - next: () => typeof object; -}; -export declare const method: { - value: number; - next(): typeof method; -}; -export declare const accessor: { - value: number; - readonly next: typeof accessor; -}; -export declare const tuple: readonly [() => typeof tuple]; -export declare const array: (() => typeof array)[]; -export declare const nested: { - inner: { - next(): { - next(): (typeof nested)["inner"]; - }; - }; -}; -export declare const memberTuple: readonly [() => (typeof memberTuple)[0]]; -export declare const memberArray: (() => (typeof memberArray)[0])[]; -export declare const quoted: { - "a-b": () => (typeof quoted)["a-b"]; -}; -export declare const numeric: { - 0: () => (typeof numeric)[0]; -}; -export declare const key: unique symbol; -export declare const computed: { - [key]: () => (typeof computed)[typeof key]; -}; -export declare const union: { - next: () => typeof union; -} | undefined; -export declare const specialized: { - value: string; - next: () => typeof specialized; -}; -export declare const indexed: { - [key: string]: typeof indexed; -}; -export declare const mapped: { - next: typeof mapped; -}; -export declare const viaAnnotation: { - value: string; - next: () => typeof viaAnnotation; -}; -export type Link = { - value: T; - next: Link; -}; -export type Callable = { - (value: T): Callable; - link: Link; -}; -export declare const link: Link; -export declare const callable: Callable; -export declare const nextLink: Link; -export declare const nextCallable: Callable; -export declare const hiddenAlias: { - value: string; - next: typeof hiddenAlias; -}; -export declare const siblingHiddenAliases: { - first: { - value: string; - next: (typeof siblingHiddenAliases)["first"]; - }; - second: { - value: string; - next: (typeof siblingHiddenAliases)["second"]; - }; -}; -export declare const parenthesized: () => typeof parenthesized; -export declare const asserted: () => typeof asserted; -export declare class Methods { - static recur(): (typeof Methods)["recur"]; - static "a-b"(): (typeof Methods)["a-b"]; - static [key](): (typeof Methods)[typeof key]; - recur(): Methods["recur"]; -} -export declare function overloaded(value: string): typeof overloaded; -export declare function overloaded(value: number): typeof overloaded; -export declare const nestedOwner: { - make(outer: T): { - nested(inner: U): { - outer: T; - inner: U; - owner: typeof nestedOwner; - }; - constrained(inner: U): { - outer: T; - inner: U; - owner: typeof nestedOwner; - }; - copied(inner: U): { - outer: T; - inner: U; - owner: typeof nestedOwner; - }; - rest(values_0: U): { - outer: T; - inner: U; - owner: typeof nestedOwner; - }; - }; -}; -export declare const nestedNumber: { - nested(inner: U): { - outer: number; - inner: U; - owner: { - make(outer: T): { - nested(inner: U_1): { - outer: T; - inner: U_1; - owner: typeof nestedOwner; - }; - constrained(inner: U_1): { - outer: T; - inner: U_1; - owner: typeof nestedOwner; - }; - copied(inner: U_1): { - outer: T; - inner: U_1; - owner: typeof nestedOwner; - }; - rest(values_0: U_1): { - outer: T; - inner: U_1; - owner: typeof nestedOwner; - }; - }; - }; - }; - constrained(inner: U): { - outer: number; - inner: U; - owner: { - make(outer: T): { - nested(inner: U_1): { - outer: T; - inner: U_1; - owner: typeof nestedOwner; - }; - constrained(inner: U_1): { - outer: T; - inner: U_1; - owner: typeof nestedOwner; - }; - copied(inner: U_1): { - outer: T; - inner: U_1; - owner: typeof nestedOwner; - }; - rest(values_0: U_1): { - outer: T; - inner: U_1; - owner: typeof nestedOwner; - }; - }; - }; - }; - copied(inner: U): { - outer: number; - inner: U; - owner: typeof nestedOwner; - }; - rest(values_0: U): { - outer: number; - inner: U; - owner: { - make(outer: T): { - nested(inner: U_1): { - outer: T; - inner: U_1; - owner: typeof nestedOwner; - }; - constrained(inner: U_1): { - outer: T; - inner: U_1; - owner: typeof nestedOwner; - }; - copied(inner: U_1): { - outer: T; - inner: U_1; - owner: typeof nestedOwner; - }; - rest(values_0: U_1): { - outer: T; - inner: U_1; - owner: typeof nestedOwner; - }; - }; - }; - }; -}; - //// [/home/src/workspaces/project/producer/dist/index.js] *new* export const arrow = () => arrow; export const expression = function self() { return self; }; @@ -584,9 +781,101 @@ export const nestedOwner = { }, }; export const nestedNumber = nestedOwner.make(1); +export const mappedCycle = build(); +export const mappedCycleCopy = mappedCycle; +export const nestedCycle = { wrapped: build() }; +export const cycleKey = Symbol(); +export const keyedCycles = build(); +export const sharedCycles = { first: mappedCycle, second: mappedCycle }; +export const mutualCycle = buildMutual(); +export const shadowedCycle = buildShadowed(); +export const optionalCycle = buildOptional(); +export const nullableCycle = buildNullable(); +export const mixedCycles = wrap(optionalCycle); +export const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle }; +export const nullableKeys = buildNullable(); +export const nullableRoot = buildNullableRoot(); +export const optionalRoot = buildOptionalRoot(); +export const nullableLinks = buildNullableLinks(); +export const optionalNullableLinks = buildOptionalNullableLinks(); +export const nullableOptionalLinks = buildNullableOptionalLinks(); +export const nullishLinks = buildNullishLinks(); +export const mixedUnionCycle = buildMixed(); +export const _recursive = 1; +export const factory = () => function self() { return self; }; +export function captured(value) { + const node = { value, next: () => node, consume: (other) => node }; + return node; +} +export function nestedCaptured(outer) { + return (inner) => { + const node = { + outer, inner, next: () => node, + shadow: (value) => ({ outer, inner, value, next: node }), + }; + return node; + }; +} +export function constrained(key) { + const node = { value: null, next: () => node }; + return node; +} +export function optionalCaptured(value) { + return null; +} +export function annotatedCaptured(value) { + const node = { value, next: null }; + return node; +} +export function recursiveTuple(value) { + return null; +} +export function inferredCaptured() { + return null; +} +export function mappedCaptured() { + return null; +} +export function freshGeneric(unused) { + const recur = (value) => recur; + return recur; +} +export function mutualCaptured(left, right) { + return { left: null, right: null }; +} +export class CapturedClass { + value; + constructor(value) { + this.value = value; + } + make(inner) { + const node = { outer: this.value, inner, next: () => node }; + return node; + } +} +export function covariantClass() { + return class Node { + value; + next() { return this; } + }; +} +export function contravariantClass() { + return class Node { + consume; + next() { return this; } + }; +} +export var Nested; +(function (Nested) { + function captured(value) { + const node = { value, next: () => node }; + return node; + } + Nested.captured = captured; +})(Nested || (Nested = {})); //// [/home/src/workspaces/project/producer/dist/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2026.full.d.ts","../index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"c50047250d0afa431800786fe8ac0f71-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);","signature":"ac680f9630fda193ccd7e95d350590d1-export declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: () => {\n call: typeof objectReturn;\n};\nexport declare const tupleReturn: () => readonly [typeof tupleReturn];\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: {\n value: number;\n next: () => typeof object;\n};\nexport declare const method: {\n value: number;\n next(): typeof method;\n};\nexport declare const accessor: {\n value: number;\n readonly next: typeof accessor;\n};\nexport declare const tuple: readonly [() => typeof tuple];\nexport declare const array: (() => typeof array)[];\nexport declare const nested: {\n inner: {\n next(): {\n next(): (typeof nested)[\"inner\"];\n };\n };\n};\nexport declare const memberTuple: readonly [() => (typeof memberTuple)[0]];\nexport declare const memberArray: (() => (typeof memberArray)[0])[];\nexport declare const quoted: {\n \"a-b\": () => (typeof quoted)[\"a-b\"];\n};\nexport declare const numeric: {\n 0: () => (typeof numeric)[0];\n};\nexport declare const key: unique symbol;\nexport declare const computed: {\n [key]: () => (typeof computed)[typeof key];\n};\nexport declare const union: {\n next: () => typeof union;\n} | undefined;\nexport declare const specialized: {\n value: string;\n next: () => typeof specialized;\n};\nexport declare const indexed: {\n [key: string]: typeof indexed;\n};\nexport declare const mapped: {\n next: typeof mapped;\n};\nexport declare const viaAnnotation: {\n value: string;\n next: () => typeof viaAnnotation;\n};\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: typeof hiddenAlias;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"first\"];\n };\n second: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"second\"];\n };\n};\nexport declare const parenthesized: () => typeof parenthesized;\nexport declare const asserted: () => typeof asserted;\nexport declare class Methods {\n static recur(): (typeof Methods)[\"recur\"];\n static \"a-b\"(): (typeof Methods)[\"a-b\"];\n static [key](): (typeof Methods)[typeof key];\n recur(): Methods[\"recur\"];\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n};\nexport declare const nestedNumber: {\n nested(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n constrained(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n copied(inner: U): {\n outer: number;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n};\n","impliedNodeFormat":1}],"options":{"composite":true,"outDir":"./","strict":true},"latestChangedDtsFile":"./index.d.ts"} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2026.full.d.ts","../index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"0127123bf85d43331672f7890bd05d57-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);\ntype Show = { [K in keyof T]: T[K] } & unknown;\ntype Resolve = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? Resolve : M[K][P];\n}>;\ndeclare const build: () => { [K in keyof M]: Resolve };\nexport const mappedCycle = build<{ Node: { value: number; next: \"ref\" } }>();\nexport const mappedCycleCopy = mappedCycle;\nexport const nestedCycle = { wrapped: build<{ Node: { value: string; next: \"ref\" } }>() };\nexport const cycleKey = Symbol();\nexport const keyedCycles = build<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\nexport const sharedCycles = { first: mappedCycle, second: mappedCycle };\ntype ResolveMutual = Show<{\n [P in keyof M[K]]: M[K][P] extends { ref: infer R extends keyof M } ? ResolveMutual : M[K][P];\n}>;\ndeclare const buildMutual: () => { [K in keyof M]: ResolveMutual };\nexport const mutualCycle = buildMutual<{\n First: { value: number; next: { ref: \"Second\" } };\n Second: { value: string; next: { ref: \"First\" } };\n}>();\ntype ResolveShadowed = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? (shadowedCycle: T) => ResolveShadowed : M[K][P];\n}>;\ndeclare const buildShadowed: () => { [K in keyof M]: ResolveShadowed };\nexport const shadowedCycle = buildShadowed<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptional: () => { [K in keyof M]?: Resolve };\nexport const optionalCycle = buildOptional<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildNullable: () => { [K in keyof M]: Resolve | null };\nexport const nullableCycle = buildNullable<{ Node: { value: string; next: \"ref\" } }>();\ndeclare const wrap: (value: T) => { required: T; optional?: T | null };\nexport const mixedCycles = wrap(optionalCycle);\nexport const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle };\nexport const nullableKeys = buildNullable<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\ndeclare const buildNullableRoot: () => Resolve | null;\nexport const nullableRoot = buildNullableRoot<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalRoot: () => Resolve | undefined;\nexport const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: \"ref\" } }>();\ntype ResolveNullable = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullable | null : M[K][P];\n}>;\ndeclare const buildNullableLinks: () => { [K in keyof M]: ResolveNullable | null };\nexport const nullableLinks = buildNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalNullableLinks: () => { [K in keyof M]?: ResolveNullable | null };\nexport const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveOptional = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveOptional | undefined : M[K][P];\n}>;\ndeclare const buildNullableOptionalLinks: () => { [K in keyof M]: ResolveOptional | null };\nexport const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveNullish = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullish | null | undefined : M[K][P];\n}>;\ndeclare const buildNullishLinks: () => { [K in keyof M]?: ResolveNullish | null };\nexport const nullishLinks = buildNullishLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildMixed: () => { [K in keyof M]?: Resolve | false | null };\nexport const mixedUnionCycle = buildMixed<{ Node: { value: number; next: \"ref\" } }>();\nexport const _recursive = 1;\nexport const factory = () => function self() { return self; };\nexport function captured(value: T) {\n const node = { value, next: () => node, consume: (other: T) => node };\n return node;\n}\nexport function nestedCaptured(outer: T) {\n return (inner: U) => {\n const node = {\n outer, inner, next: () => node,\n shadow: (value: T) => ({ outer, inner, value, next: node }),\n };\n return node;\n };\n}\nexport function constrained(key: K) {\n const node = { value: null! as T[K], next: () => node };\n return node;\n}\nexport function optionalCaptured(value: T) {\n type Node = { value: T; next: Node };\n return null! as { node?: Node | false | null };\n}\nexport function annotatedCaptured(value: T) {\n const node: { value: typeof value; next: typeof node } = { value, next: null! };\n return node;\n}\nexport function recursiveTuple(value: T) {\n type Tuple = readonly [T, Tuple];\n return null! as Tuple;\n}\nexport function inferredCaptured() {\n type Node = { value: V; next: Node };\n return null! as (T extends () => infer U ? Node : never);\n}\nexport function mappedCaptured() {\n type Node = { [K in keyof T]: { value: T[K]; next: Node } };\n return null! as Node;\n}\nexport function freshGeneric(unused: T) {\n const recur = (value: U) => recur;\n return recur;\n}\nexport function mutualCaptured(left: T, right: U) {\n type Left = { left: T; next: Right };\n type Right = { right: U; self: Right; next: Left };\n return { left: null! as Left, right: null! as Right };\n}\nexport class CapturedClass {\n constructor(public value: T) {}\n make(inner: U) {\n const node = { outer: this.value, inner, next: () => node };\n return node;\n }\n}\nexport function covariantClass() {\n return class Node {\n value!: T;\n next(): Node { return this; }\n };\n}\nexport function contravariantClass() {\n return class Node {\n consume!: (value: T) => void;\n next(): Node { return this; }\n };\n}\nexport namespace Nested {\n export function captured(value: T) {\n const node = { value, next: () => node };\n return node;\n }\n}\ntype NonNullable = \"shadowed\";"],"options":{"composite":true,"exactOptionalPropertyTypes":true,"outDir":"./","strict":true},"emitDiagnosticsPerFile":[[2,[{"pos":3735,"end":3746,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["mappedCycle"]},{"pos":3813,"end":3828,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["mappedCycleCopy"]},{"pos":3857,"end":3868,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nestedCycle"]},{"pos":3982,"end":3993,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["keyedCycles"]},{"pos":4154,"end":4166,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["sharedCycles"]},{"pos":4463,"end":4474,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["mutualCycle"]},{"pos":4862,"end":4875,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["shadowedCycle"]},{"pos":5024,"end":5037,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["optionalCycle"]},{"pos":5192,"end":5205,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nullableCycle"]},{"pos":5355,"end":5366,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["mixedCycles"]},{"pos":5403,"end":5423,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["sharedOptionalCycles"]},{"pos":5488,"end":5500,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nullableKeys"]},{"pos":5739,"end":5751,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nullableRoot"]},{"pos":5905,"end":5917,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["optionalRoot"]},{"pos":6232,"end":6245,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nullableLinks"]},{"pos":6427,"end":6448,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["optionalNullableLinks"]},{"pos":6785,"end":6806,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nullableOptionalLinks"]},{"pos":7139,"end":7151,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nullishLinks"]},{"pos":7316,"end":7331,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["mixedUnionCycle"]},{"pos":7432,"end":7439,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["factory"]},{"pos":7498,"end":7506,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["captured"]},{"pos":7632,"end":7646,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nestedCaptured"]},{"pos":7892,"end":7903,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["constrained"]},{"pos":8058,"end":8074,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["optionalCaptured"]},{"pos":8202,"end":8219,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["annotatedCaptured"]},{"pos":8355,"end":8369,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["recursiveTuple"]},{"pos":8468,"end":8484,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["inferredCaptured"]},{"pos":8623,"end":8637,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["mappedCaptured"]},{"pos":8754,"end":8766,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["freshGeneric"]},{"pos":8861,"end":8875,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["mutualCaptured"]},{"pos":9134,"end":9138,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["make"]},{"pos":9278,"end":9292,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["covariantClass"]},{"pos":9413,"end":9431,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["contravariantClass"]},{"pos":9600,"end":9608,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["captured"]}]]],"emitSignatures":[2]} //// [/home/src/workspaces/project/producer/dist/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -617,23 +906,371 @@ export const nestedNumber = nestedOwner.make(1); }, { "fileName": "../index.ts", - "version": "c50047250d0afa431800786fe8ac0f71-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);", - "signature": "ac680f9630fda193ccd7e95d350590d1-export declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: () => {\n call: typeof objectReturn;\n};\nexport declare const tupleReturn: () => readonly [typeof tupleReturn];\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: {\n value: number;\n next: () => typeof object;\n};\nexport declare const method: {\n value: number;\n next(): typeof method;\n};\nexport declare const accessor: {\n value: number;\n readonly next: typeof accessor;\n};\nexport declare const tuple: readonly [() => typeof tuple];\nexport declare const array: (() => typeof array)[];\nexport declare const nested: {\n inner: {\n next(): {\n next(): (typeof nested)[\"inner\"];\n };\n };\n};\nexport declare const memberTuple: readonly [() => (typeof memberTuple)[0]];\nexport declare const memberArray: (() => (typeof memberArray)[0])[];\nexport declare const quoted: {\n \"a-b\": () => (typeof quoted)[\"a-b\"];\n};\nexport declare const numeric: {\n 0: () => (typeof numeric)[0];\n};\nexport declare const key: unique symbol;\nexport declare const computed: {\n [key]: () => (typeof computed)[typeof key];\n};\nexport declare const union: {\n next: () => typeof union;\n} | undefined;\nexport declare const specialized: {\n value: string;\n next: () => typeof specialized;\n};\nexport declare const indexed: {\n [key: string]: typeof indexed;\n};\nexport declare const mapped: {\n next: typeof mapped;\n};\nexport declare const viaAnnotation: {\n value: string;\n next: () => typeof viaAnnotation;\n};\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: typeof hiddenAlias;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"first\"];\n };\n second: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"second\"];\n };\n};\nexport declare const parenthesized: () => typeof parenthesized;\nexport declare const asserted: () => typeof asserted;\nexport declare class Methods {\n static recur(): (typeof Methods)[\"recur\"];\n static \"a-b\"(): (typeof Methods)[\"a-b\"];\n static [key](): (typeof Methods)[typeof key];\n recur(): Methods[\"recur\"];\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n};\nexport declare const nestedNumber: {\n nested(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n constrained(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n copied(inner: U): {\n outer: number;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n};\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "c50047250d0afa431800786fe8ac0f71-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);", - "signature": "ac680f9630fda193ccd7e95d350590d1-export declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: () => {\n call: typeof objectReturn;\n};\nexport declare const tupleReturn: () => readonly [typeof tupleReturn];\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: {\n value: number;\n next: () => typeof object;\n};\nexport declare const method: {\n value: number;\n next(): typeof method;\n};\nexport declare const accessor: {\n value: number;\n readonly next: typeof accessor;\n};\nexport declare const tuple: readonly [() => typeof tuple];\nexport declare const array: (() => typeof array)[];\nexport declare const nested: {\n inner: {\n next(): {\n next(): (typeof nested)[\"inner\"];\n };\n };\n};\nexport declare const memberTuple: readonly [() => (typeof memberTuple)[0]];\nexport declare const memberArray: (() => (typeof memberArray)[0])[];\nexport declare const quoted: {\n \"a-b\": () => (typeof quoted)[\"a-b\"];\n};\nexport declare const numeric: {\n 0: () => (typeof numeric)[0];\n};\nexport declare const key: unique symbol;\nexport declare const computed: {\n [key]: () => (typeof computed)[typeof key];\n};\nexport declare const union: {\n next: () => typeof union;\n} | undefined;\nexport declare const specialized: {\n value: string;\n next: () => typeof specialized;\n};\nexport declare const indexed: {\n [key: string]: typeof indexed;\n};\nexport declare const mapped: {\n next: typeof mapped;\n};\nexport declare const viaAnnotation: {\n value: string;\n next: () => typeof viaAnnotation;\n};\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: typeof hiddenAlias;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"first\"];\n };\n second: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"second\"];\n };\n};\nexport declare const parenthesized: () => typeof parenthesized;\nexport declare const asserted: () => typeof asserted;\nexport declare class Methods {\n static recur(): (typeof Methods)[\"recur\"];\n static \"a-b\"(): (typeof Methods)[\"a-b\"];\n static [key](): (typeof Methods)[typeof key];\n recur(): Methods[\"recur\"];\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n};\nexport declare const nestedNumber: {\n nested(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n constrained(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n copied(inner: U): {\n outer: number;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n};\n", - "impliedNodeFormat": 1 - } + "version": "0127123bf85d43331672f7890bd05d57-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);\ntype Show = { [K in keyof T]: T[K] } & unknown;\ntype Resolve = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? Resolve : M[K][P];\n}>;\ndeclare const build: () => { [K in keyof M]: Resolve };\nexport const mappedCycle = build<{ Node: { value: number; next: \"ref\" } }>();\nexport const mappedCycleCopy = mappedCycle;\nexport const nestedCycle = { wrapped: build<{ Node: { value: string; next: \"ref\" } }>() };\nexport const cycleKey = Symbol();\nexport const keyedCycles = build<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\nexport const sharedCycles = { first: mappedCycle, second: mappedCycle };\ntype ResolveMutual = Show<{\n [P in keyof M[K]]: M[K][P] extends { ref: infer R extends keyof M } ? ResolveMutual : M[K][P];\n}>;\ndeclare const buildMutual: () => { [K in keyof M]: ResolveMutual };\nexport const mutualCycle = buildMutual<{\n First: { value: number; next: { ref: \"Second\" } };\n Second: { value: string; next: { ref: \"First\" } };\n}>();\ntype ResolveShadowed = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? (shadowedCycle: T) => ResolveShadowed : M[K][P];\n}>;\ndeclare const buildShadowed: () => { [K in keyof M]: ResolveShadowed };\nexport const shadowedCycle = buildShadowed<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptional: () => { [K in keyof M]?: Resolve };\nexport const optionalCycle = buildOptional<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildNullable: () => { [K in keyof M]: Resolve | null };\nexport const nullableCycle = buildNullable<{ Node: { value: string; next: \"ref\" } }>();\ndeclare const wrap: (value: T) => { required: T; optional?: T | null };\nexport const mixedCycles = wrap(optionalCycle);\nexport const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle };\nexport const nullableKeys = buildNullable<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\ndeclare const buildNullableRoot: () => Resolve | null;\nexport const nullableRoot = buildNullableRoot<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalRoot: () => Resolve | undefined;\nexport const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: \"ref\" } }>();\ntype ResolveNullable = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullable | null : M[K][P];\n}>;\ndeclare const buildNullableLinks: () => { [K in keyof M]: ResolveNullable | null };\nexport const nullableLinks = buildNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalNullableLinks: () => { [K in keyof M]?: ResolveNullable | null };\nexport const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveOptional = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveOptional | undefined : M[K][P];\n}>;\ndeclare const buildNullableOptionalLinks: () => { [K in keyof M]: ResolveOptional | null };\nexport const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveNullish = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullish | null | undefined : M[K][P];\n}>;\ndeclare const buildNullishLinks: () => { [K in keyof M]?: ResolveNullish | null };\nexport const nullishLinks = buildNullishLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildMixed: () => { [K in keyof M]?: Resolve | false | null };\nexport const mixedUnionCycle = buildMixed<{ Node: { value: number; next: \"ref\" } }>();\nexport const _recursive = 1;\nexport const factory = () => function self() { return self; };\nexport function captured(value: T) {\n const node = { value, next: () => node, consume: (other: T) => node };\n return node;\n}\nexport function nestedCaptured(outer: T) {\n return (inner: U) => {\n const node = {\n outer, inner, next: () => node,\n shadow: (value: T) => ({ outer, inner, value, next: node }),\n };\n return node;\n };\n}\nexport function constrained(key: K) {\n const node = { value: null! as T[K], next: () => node };\n return node;\n}\nexport function optionalCaptured(value: T) {\n type Node = { value: T; next: Node };\n return null! as { node?: Node | false | null };\n}\nexport function annotatedCaptured(value: T) {\n const node: { value: typeof value; next: typeof node } = { value, next: null! };\n return node;\n}\nexport function recursiveTuple(value: T) {\n type Tuple = readonly [T, Tuple];\n return null! as Tuple;\n}\nexport function inferredCaptured() {\n type Node = { value: V; next: Node };\n return null! as (T extends () => infer U ? Node : never);\n}\nexport function mappedCaptured() {\n type Node = { [K in keyof T]: { value: T[K]; next: Node } };\n return null! as Node;\n}\nexport function freshGeneric(unused: T) {\n const recur = (value: U) => recur;\n return recur;\n}\nexport function mutualCaptured(left: T, right: U) {\n type Left = { left: T; next: Right };\n type Right = { right: U; self: Right; next: Left };\n return { left: null! as Left, right: null! as Right };\n}\nexport class CapturedClass {\n constructor(public value: T) {}\n make(inner: U) {\n const node = { outer: this.value, inner, next: () => node };\n return node;\n }\n}\nexport function covariantClass() {\n return class Node {\n value!: T;\n next(): Node { return this; }\n };\n}\nexport function contravariantClass() {\n return class Node {\n consume!: (value: T) => void;\n next(): Node { return this; }\n };\n}\nexport namespace Nested {\n export function captured(value: T) {\n const node = { value, next: () => node };\n return node;\n }\n}\ntype NonNullable = \"shadowed\";", + "signature": "0127123bf85d43331672f7890bd05d57-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);\ntype Show = { [K in keyof T]: T[K] } & unknown;\ntype Resolve = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? Resolve : M[K][P];\n}>;\ndeclare const build: () => { [K in keyof M]: Resolve };\nexport const mappedCycle = build<{ Node: { value: number; next: \"ref\" } }>();\nexport const mappedCycleCopy = mappedCycle;\nexport const nestedCycle = { wrapped: build<{ Node: { value: string; next: \"ref\" } }>() };\nexport const cycleKey = Symbol();\nexport const keyedCycles = build<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\nexport const sharedCycles = { first: mappedCycle, second: mappedCycle };\ntype ResolveMutual = Show<{\n [P in keyof M[K]]: M[K][P] extends { ref: infer R extends keyof M } ? ResolveMutual : M[K][P];\n}>;\ndeclare const buildMutual: () => { [K in keyof M]: ResolveMutual };\nexport const mutualCycle = buildMutual<{\n First: { value: number; next: { ref: \"Second\" } };\n Second: { value: string; next: { ref: \"First\" } };\n}>();\ntype ResolveShadowed = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? (shadowedCycle: T) => ResolveShadowed : M[K][P];\n}>;\ndeclare const buildShadowed: () => { [K in keyof M]: ResolveShadowed };\nexport const shadowedCycle = buildShadowed<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptional: () => { [K in keyof M]?: Resolve };\nexport const optionalCycle = buildOptional<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildNullable: () => { [K in keyof M]: Resolve | null };\nexport const nullableCycle = buildNullable<{ Node: { value: string; next: \"ref\" } }>();\ndeclare const wrap: (value: T) => { required: T; optional?: T | null };\nexport const mixedCycles = wrap(optionalCycle);\nexport const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle };\nexport const nullableKeys = buildNullable<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\ndeclare const buildNullableRoot: () => Resolve | null;\nexport const nullableRoot = buildNullableRoot<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalRoot: () => Resolve | undefined;\nexport const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: \"ref\" } }>();\ntype ResolveNullable = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullable | null : M[K][P];\n}>;\ndeclare const buildNullableLinks: () => { [K in keyof M]: ResolveNullable | null };\nexport const nullableLinks = buildNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalNullableLinks: () => { [K in keyof M]?: ResolveNullable | null };\nexport const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveOptional = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveOptional | undefined : M[K][P];\n}>;\ndeclare const buildNullableOptionalLinks: () => { [K in keyof M]: ResolveOptional | null };\nexport const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveNullish = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullish | null | undefined : M[K][P];\n}>;\ndeclare const buildNullishLinks: () => { [K in keyof M]?: ResolveNullish | null };\nexport const nullishLinks = buildNullishLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildMixed: () => { [K in keyof M]?: Resolve | false | null };\nexport const mixedUnionCycle = buildMixed<{ Node: { value: number; next: \"ref\" } }>();\nexport const _recursive = 1;\nexport const factory = () => function self() { return self; };\nexport function captured(value: T) {\n const node = { value, next: () => node, consume: (other: T) => node };\n return node;\n}\nexport function nestedCaptured(outer: T) {\n return (inner: U) => {\n const node = {\n outer, inner, next: () => node,\n shadow: (value: T) => ({ outer, inner, value, next: node }),\n };\n return node;\n };\n}\nexport function constrained(key: K) {\n const node = { value: null! as T[K], next: () => node };\n return node;\n}\nexport function optionalCaptured(value: T) {\n type Node = { value: T; next: Node };\n return null! as { node?: Node | false | null };\n}\nexport function annotatedCaptured(value: T) {\n const node: { value: typeof value; next: typeof node } = { value, next: null! };\n return node;\n}\nexport function recursiveTuple(value: T) {\n type Tuple = readonly [T, Tuple];\n return null! as Tuple;\n}\nexport function inferredCaptured() {\n type Node = { value: V; next: Node };\n return null! as (T extends () => infer U ? Node : never);\n}\nexport function mappedCaptured() {\n type Node = { [K in keyof T]: { value: T[K]; next: Node } };\n return null! as Node;\n}\nexport function freshGeneric(unused: T) {\n const recur = (value: U) => recur;\n return recur;\n}\nexport function mutualCaptured(left: T, right: U) {\n type Left = { left: T; next: Right };\n type Right = { right: U; self: Right; next: Left };\n return { left: null! as Left, right: null! as Right };\n}\nexport class CapturedClass {\n constructor(public value: T) {}\n make(inner: U) {\n const node = { outer: this.value, inner, next: () => node };\n return node;\n }\n}\nexport function covariantClass() {\n return class Node {\n value!: T;\n next(): Node { return this; }\n };\n}\nexport function contravariantClass() {\n return class Node {\n consume!: (value: T) => void;\n next(): Node { return this; }\n };\n}\nexport namespace Nested {\n export function captured(value: T) {\n const node = { value, next: () => node };\n return node;\n }\n}\ntype NonNullable = \"shadowed\";", + "impliedNodeFormat": "CommonJS" } ], "options": { "composite": true, + "exactOptionalPropertyTypes": true, "outDir": "./", "strict": true }, - "latestChangedDtsFile": "./index.d.ts", - "size": 11151 + "emitDiagnosticsPerFile": [ + [ + "../index.ts", + [ + { + "pos": 3735, + "end": 3746, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "mappedCycle" + ] + }, + { + "pos": 3813, + "end": 3828, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "mappedCycleCopy" + ] + }, + { + "pos": 3857, + "end": 3868, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "nestedCycle" + ] + }, + { + "pos": 3982, + "end": 3993, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "keyedCycles" + ] + }, + { + "pos": 4154, + "end": 4166, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "sharedCycles" + ] + }, + { + "pos": 4463, + "end": 4474, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "mutualCycle" + ] + }, + { + "pos": 4862, + "end": 4875, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "shadowedCycle" + ] + }, + { + "pos": 5024, + "end": 5037, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "optionalCycle" + ] + }, + { + "pos": 5192, + "end": 5205, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "nullableCycle" + ] + }, + { + "pos": 5355, + "end": 5366, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "mixedCycles" + ] + }, + { + "pos": 5403, + "end": 5423, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "sharedOptionalCycles" + ] + }, + { + "pos": 5488, + "end": 5500, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "nullableKeys" + ] + }, + { + "pos": 5739, + "end": 5751, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "nullableRoot" + ] + }, + { + "pos": 5905, + "end": 5917, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "optionalRoot" + ] + }, + { + "pos": 6232, + "end": 6245, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "nullableLinks" + ] + }, + { + "pos": 6427, + "end": 6448, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "optionalNullableLinks" + ] + }, + { + "pos": 6785, + "end": 6806, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "nullableOptionalLinks" + ] + }, + { + "pos": 7139, + "end": 7151, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "nullishLinks" + ] + }, + { + "pos": 7316, + "end": 7331, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "mixedUnionCycle" + ] + }, + { + "pos": 7432, + "end": 7439, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "factory" + ] + }, + { + "pos": 7498, + "end": 7506, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "captured" + ] + }, + { + "pos": 7632, + "end": 7646, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "nestedCaptured" + ] + }, + { + "pos": 7892, + "end": 7903, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "constrained" + ] + }, + { + "pos": 8058, + "end": 8074, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "optionalCaptured" + ] + }, + { + "pos": 8202, + "end": 8219, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "annotatedCaptured" + ] + }, + { + "pos": 8355, + "end": 8369, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "recursiveTuple" + ] + }, + { + "pos": 8468, + "end": 8484, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "inferredCaptured" + ] + }, + { + "pos": 8623, + "end": 8637, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "mappedCaptured" + ] + }, + { + "pos": 8754, + "end": 8766, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "freshGeneric" + ] + }, + { + "pos": 8861, + "end": 8875, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "mutualCaptured" + ] + }, + { + "pos": 9134, + "end": 9138, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "make" + ] + }, + { + "pos": 9278, + "end": 9292, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "covariantClass" + ] + }, + { + "pos": 9413, + "end": 9431, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "contravariantClass" + ] + }, + { + "pos": 9600, + "end": 9608, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "captured" + ] + } + ] + ] + ], + "emitSignatures": [ + { + "file": "../index.ts", + "original": 2 + } + ], + "size": 17943 } producer/tsconfig.json:: @@ -641,12 +1278,10 @@ SemanticDiagnostics:: *refresh* /home/src/tslibs/TS/Lib/lib.es2026.full.d.ts *refresh* /home/src/workspaces/project/producer/index.ts Signatures:: -(stored at emit) /home/src/workspaces/project/producer/index.ts consumer/tsconfig.json:: SemanticDiagnostics:: *refresh* /home/src/tslibs/TS/Lib/lib.es2026.full.d.ts -*refresh* /home/src/workspaces/project/producer/dist/index.d.ts *refresh* /home/src/workspaces/project/consumer/index.ts Signatures:: @@ -656,106 +1291,263 @@ Edit [0]:: no change tsgo --build consumer ExitStatus:: DiagnosticsPresent_OutputsGenerated Output:: -consumer/index.ts:58:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. +producer/index.ts:83:14 - error TS5088: The inferred type of 'mappedCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +83 export const mappedCycle = build<{ Node: { value: number; next: "ref" } }>(); +   ~~~~~~~~~~~ + +producer/index.ts:84:14 - error TS5088: The inferred type of 'mappedCycleCopy' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +84 export const mappedCycleCopy = mappedCycle; +   ~~~~~~~~~~~~~~~ + +producer/index.ts:85:14 - error TS5088: The inferred type of 'nestedCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +85 export const nestedCycle = { wrapped: build<{ Node: { value: string; next: "ref" } }>() }; +   ~~~~~~~~~~~ + +producer/index.ts:87:14 - error TS5088: The inferred type of 'keyedCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +87 export const keyedCycles = build<{ +   ~~~~~~~~~~~ + +producer/index.ts:92:14 - error TS5088: The inferred type of 'sharedCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +92 export const sharedCycles = { first: mappedCycle, second: mappedCycle }; +   ~~~~~~~~~~~~ + +producer/index.ts:97:14 - error TS5088: The inferred type of 'mutualCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +97 export const mutualCycle = buildMutual<{ +   ~~~~~~~~~~~ + +producer/index.ts:105:14 - error TS5088: The inferred type of 'shadowedCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +105 export const shadowedCycle = buildShadowed<{ Node: { value: number; next: "ref" } }>(); +   ~~~~~~~~~~~~~ + +producer/index.ts:107:14 - error TS5088: The inferred type of 'optionalCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +107 export const optionalCycle = buildOptional<{ Node: { value: number; next: "ref" } }>(); +   ~~~~~~~~~~~~~ + +producer/index.ts:109:14 - error TS5088: The inferred type of 'nullableCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +109 export const nullableCycle = buildNullable<{ Node: { value: string; next: "ref" } }>(); +   ~~~~~~~~~~~~~ + +producer/index.ts:111:14 - error TS5088: The inferred type of 'mixedCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +111 export const mixedCycles = wrap(optionalCycle); +   ~~~~~~~~~~~ + +producer/index.ts:112:14 - error TS5088: The inferred type of 'sharedOptionalCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +112 export const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle }; +   ~~~~~~~~~~~~~~~~~~~~ + +producer/index.ts:113:14 - error TS5088: The inferred type of 'nullableKeys' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +113 export const nullableKeys = buildNullable<{ +   ~~~~~~~~~~~~ + +producer/index.ts:119:14 - error TS5088: The inferred type of 'nullableRoot' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +119 export const nullableRoot = buildNullableRoot<{ Node: { value: number; next: "ref" } }>(); +   ~~~~~~~~~~~~ + +producer/index.ts:121:14 - error TS5088: The inferred type of 'optionalRoot' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +121 export const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: "ref" } }>(); +   ~~~~~~~~~~~~ + +producer/index.ts:126:14 - error TS5088: The inferred type of 'nullableLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +126 export const nullableLinks = buildNullableLinks<{ Node: { value: number; next: "ref" } }>(); +   ~~~~~~~~~~~~~ + +producer/index.ts:128:14 - error TS5088: The inferred type of 'optionalNullableLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +128 export const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: "ref" } }>(); +   ~~~~~~~~~~~~~~~~~~~~~ + +producer/index.ts:133:14 - error TS5088: The inferred type of 'nullableOptionalLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +133 export const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: "ref" } }>(); +   ~~~~~~~~~~~~~~~~~~~~~ + +producer/index.ts:138:14 - error TS5088: The inferred type of 'nullishLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +138 export const nullishLinks = buildNullishLinks<{ Node: { value: number; next: "ref" } }>(); +   ~~~~~~~~~~~~ + +producer/index.ts:140:14 - error TS5088: The inferred type of 'mixedUnionCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +140 export const mixedUnionCycle = buildMixed<{ Node: { value: number; next: "ref" } }>(); +   ~~~~~~~~~~~~~~~ + +producer/index.ts:142:14 - error TS5088: The inferred type of 'factory' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +142 export const factory = () => function self() { return self; }; +   ~~~~~~~ + +producer/index.ts:143:17 - error TS5088: The inferred type of 'captured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +143 export function captured(value: T) { +   ~~~~~~~~ + +producer/index.ts:147:17 - error TS5088: The inferred type of 'nestedCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +147 export function nestedCaptured(outer: T) { +   ~~~~~~~~~~~~~~ + +producer/index.ts:156:17 - error TS5088: The inferred type of 'constrained' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -58 const invalid: number = arrow()()(); -   ~~~~~~~ +156 export function constrained(key: K) { +   ~~~~~~~~~~~ -consumer/index.ts:59:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. +producer/index.ts:160:17 - error TS5088: The inferred type of 'optionalCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -59 const invalidExpression: number = expression()()(); -   ~~~~~~~~~~~~~~~~~ +160 export function optionalCaptured(value: T) { +   ~~~~~~~~~~~~~~~~ -consumer/index.ts:60:7 - error TS2322: Type '() => { call: ...; }' is not assignable to type 'number'. +producer/index.ts:164:17 - error TS5088: The inferred type of 'annotatedCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -60 const invalidObject: number = objectReturn().call; -   ~~~~~~~~~~~~~ +164 export function annotatedCaptured(value: T) { +   ~~~~~~~~~~~~~~~~~ -consumer/index.ts:61:7 - error TS2322: Type '() => readonly [...]' is not assignable to type 'number'. +producer/index.ts:168:17 - error TS5088: The inferred type of 'recursiveTuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -61 const invalidTuple: number = tupleReturn()[0]; -   ~~~~~~~~~~~~ +168 export function recursiveTuple(value: T) { +   ~~~~~~~~~~~~~~ -consumer/index.ts:62:7 - error TS2322: Type '(shadowed: number) => ...' is not assignable to type 'number'. +producer/index.ts:172:17 - error TS5088: The inferred type of 'inferredCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -62 const invalidShadowed: number = shadowed(1); -   ~~~~~~~~~~~~~~~ +172 export function inferredCaptured() { +   ~~~~~~~~~~~~~~~~ -consumer/index.ts:63:7 - error TS2322: Type 'number' is not assignable to type 'string'. +producer/index.ts:176:17 - error TS5088: The inferred type of 'mappedCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -63 const invalidObjectValue: string = object.next().value; -   ~~~~~~~~~~~~~~~~~~ +176 export function mappedCaptured() { +   ~~~~~~~~~~~~~~ -consumer/index.ts:64:7 - error TS2322: Type 'readonly [() => ...]' is not assignable to type 'number'. +producer/index.ts:180:17 - error TS5088: The inferred type of 'freshGeneric' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -64 const invalidTupleValue: number = tuple[0](); -   ~~~~~~~~~~~~~~~~~ +180 export function freshGeneric(unused: T) { +   ~~~~~~~~~~~~ -consumer/index.ts:65:7 - error TS2322: Type 'string' is not assignable to type 'number'. +producer/index.ts:184:17 - error TS5088: The inferred type of 'mutualCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -65 const invalidSpecialized: number = specialized.next().value; -   ~~~~~~~~~~~~~~~~~~ +184 export function mutualCaptured(left: T, right: U) { +   ~~~~~~~~~~~~~~ -consumer/index.ts:66:7 - error TS2322: Type '{ next: ...; }' is not assignable to type 'number'. +producer/index.ts:191:5 - error TS5088: The inferred type of 'make' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -66 const invalidMapped: number = mapped.next; -   ~~~~~~~~~~~~~ +191 make(inner: U) { +   ~~~~ -consumer/index.ts:67:7 - error TS2322: Type 'string' is not assignable to type 'number'. +producer/index.ts:196:17 - error TS5088: The inferred type of 'covariantClass' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -67 const invalidAnnotation: number = viaAnnotation.next().value; -   ~~~~~~~~~~~~~~~~~ +196 export function covariantClass() { +   ~~~~~~~~~~~~~~ -consumer/index.ts:68:7 - error TS2322: Type 'string' is not assignable to type 'number'. +producer/index.ts:202:17 - error TS5088: The inferred type of 'contravariantClass' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -68 const invalidLink: number = nextLink.next.value; -   ~~~~~~~~~~~ +202 export function contravariantClass() { +   ~~~~~~~~~~~~~~~~~~ -consumer/index.ts:69:7 - error TS2322: Type 'number' is not assignable to type 'string'. +producer/index.ts:209:21 - error TS5088: The inferred type of 'captured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -69 const invalidCallable: string = nextCallable(1).link.value; -   ~~~~~~~~~~~~~~~ +209 export function captured(value: T) { +   ~~~~~~~~ -consumer/index.ts:70:7 - error TS2322: Type 'string' is not assignable to type 'number'. +consumer/index.ts:1:88 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. -70 const invalidHiddenValue: number = hiddenAlias.next.next.value; -   ~~~~~~~~~~~~~~~~~~ +1 import { arrow, expression, first, generic, objectReturn, tupleReturn, shadowed } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:71:7 - error TS2322: Type '() => (typeof Methods)["recur"]' is not assignable to type 'number'. +consumer/index.ts:2:64 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. -71 const invalidMethod: number = Methods.recur()(); -   ~~~~~~~~~~~~~ +2 import { object, method, accessor, tuple, array, nested } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:72:7 - error TS2322: Type '() => (typeof Methods)[typeof key]' is not assignable to type 'number'. +consumer/index.ts:3:94 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. -72 const invalidComputedMethod: number = Methods[key]()(); -   ~~~~~~~~~~~~~~~~~~~~~ +3 import { memberTuple, memberArray, quoted, numeric, key, computed, union, specialized } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:73:7 - error TS2322: Type 'string' is not assignable to type 'boolean'. +consumer/index.ts:4:48 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. -73 const invalidNestedOuter: boolean = nestedString.outer; -   ~~~~~~~~~~~~~~~~~~ +4 import { indexed, mapped, viaAnnotation } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:74:7 - error TS2322: Type 'number' is not assignable to type 'string'. +consumer/index.ts:5:86 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. -74 const invalidNestedInner: string = nestedString.inner; -   ~~~~~~~~~~~~~~~~~~ +5 import { nextLink, nextCallable, parenthesized, asserted, Methods, overloaded } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:75:26 - error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. +consumer/index.ts:6:51 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. -75 nestedNumber.constrained("wrong"); -   ~~~~~~~ +6 import { hiddenAlias, siblingHiddenAliases } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +consumer/index.ts:7:30 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. -Found 18 errors in the same file, starting at: consumer/index.ts:58 +7 import { nestedNumber } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:8:124 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +8 import { mappedCycle, mappedCycleCopy, nestedCycle, cycleKey, keyedCycles, sharedCycles, mutualCycle, shadowedCycle } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:9:152 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +9 import { optionalCycle, nullableCycle, mixedCycles, sharedOptionalCycles, nullableKeys, nullableRoot, optionalRoot, nullableLinks, nullishLinks } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:10:62 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +10 import { optionalNullableLinks, nullableOptionalLinks } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:11:142 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +11 import { mixedUnionCycle, factory, captured, nestedCaptured, constrained, optionalCaptured, annotatedCaptured, recursiveTuple, Nested } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:12:80 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +12 import { inferredCaptured, mappedCaptured, freshGeneric, mutualCaptured } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:13:31 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +13 import { CapturedClass } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:14:52 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +14 import { covariantClass, contravariantClass } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +Found 48 errors in 2 files. + +Errors Files + 14 consumer/index.ts:1 + 34 producer/index.ts:83 //// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo] *rewrite with same content* //// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo.readable.baseline.txt] *rewrite with same content* +producer/tsconfig.json:: +SemanticDiagnostics:: +Signatures:: + consumer/tsconfig.json:: SemanticDiagnostics:: *refresh* /home/src/tslibs/TS/Lib/lib.es2026.full.d.ts -*refresh* /home/src/workspaces/project/producer/dist/index.d.ts *refresh* /home/src/workspaces/project/consumer/index.ts Signatures:: @@ -839,104 +1631,395 @@ export const nestedOwner = { }, }; export const nestedNumber = nestedOwner.make(1); +type Show = { [K in keyof T]: T[K] } & unknown; +type Resolve = Show<{ + [P in keyof M[K]]: M[K][P] extends "ref" ? Resolve : M[K][P]; +}>; +declare const build: () => { [K in keyof M]: Resolve }; +export const mappedCycle = build<{ Node: { value: number; next: "ref" } }>(); +export const mappedCycleCopy = mappedCycle; +export const nestedCycle = { wrapped: build<{ Node: { value: string; next: "ref" } }>() }; +export const cycleKey = Symbol(); +export const keyedCycles = build<{ + "a-b": { value: string; next: "ref" }; + 0: { value: boolean; next: "ref" }; + [cycleKey]: { value: number; next: "ref" }; +}>(); +export const sharedCycles = { first: mappedCycle, second: mappedCycle }; +type ResolveMutual = Show<{ + [P in keyof M[K]]: M[K][P] extends { ref: infer R extends keyof M } ? ResolveMutual : M[K][P]; +}>; +declare const buildMutual: () => { [K in keyof M]: ResolveMutual }; +export const mutualCycle = buildMutual<{ + First: { value: number; next: { ref: "Second" } }; + Second: { value: string; next: { ref: "First" } }; +}>(); +type ResolveShadowed = Show<{ + [P in keyof M[K]]: M[K][P] extends "ref" ? (shadowedCycle: T) => ResolveShadowed : M[K][P]; +}>; +declare const buildShadowed: () => { [K in keyof M]: ResolveShadowed }; +export const shadowedCycle = buildShadowed<{ Node: { value: number; next: "ref" } }>(); +declare const buildOptional: () => { [K in keyof M]?: Resolve }; +export const optionalCycle = buildOptional<{ Node: { value: number; next: "ref" } }>(); +declare const buildNullable: () => { [K in keyof M]: Resolve | null }; +export const nullableCycle = buildNullable<{ Node: { value: string; next: "ref" } }>(); +declare const wrap: (value: T) => { required: T; optional?: T | null }; +export const mixedCycles = wrap(optionalCycle); +export const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle }; +export const nullableKeys = buildNullable<{ + "a-b": { value: string; next: "ref" }; + 0: { value: boolean; next: "ref" }; + [cycleKey]: { value: number; next: "ref" }; +}>(); +declare const buildNullableRoot: () => Resolve | null; +export const nullableRoot = buildNullableRoot<{ Node: { value: number; next: "ref" } }>(); +declare const buildOptionalRoot: () => Resolve | undefined; +export const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: "ref" } }>(); +type ResolveNullable = Show<{ + [P in keyof M[K]]: M[K][P] extends "ref" ? ResolveNullable | null : M[K][P]; +}>; +declare const buildNullableLinks: () => { [K in keyof M]: ResolveNullable | null }; +export const nullableLinks = buildNullableLinks<{ Node: { value: number; next: "ref" } }>(); +declare const buildOptionalNullableLinks: () => { [K in keyof M]?: ResolveNullable | null }; +export const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: "ref" } }>(); +type ResolveOptional = Show<{ + [P in keyof M[K]]: M[K][P] extends "ref" ? ResolveOptional | undefined : M[K][P]; +}>; +declare const buildNullableOptionalLinks: () => { [K in keyof M]: ResolveOptional | null }; +export const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: "ref" } }>(); +type ResolveNullish = Show<{ + [P in keyof M[K]]: M[K][P] extends "ref" ? ResolveNullish | null | undefined : M[K][P]; +}>; +declare const buildNullishLinks: () => { [K in keyof M]?: ResolveNullish | null }; +export const nullishLinks = buildNullishLinks<{ Node: { value: number; next: "ref" } }>(); +declare const buildMixed: () => { [K in keyof M]?: Resolve | false | null }; +export const mixedUnionCycle = buildMixed<{ Node: { value: number; next: "ref" } }>(); +export const _recursive = 1; +export const factory = () => function self() { return self; }; +export function captured(value: T) { + const node = { value, next: () => node, consume: (other: T) => node }; + return node; +} +export function nestedCaptured(outer: T) { + return (inner: U) => { + const node = { + outer, inner, next: () => node, + shadow: (value: T) => ({ outer, inner, value, next: node }), + }; + return node; + }; +} +export function constrained(key: K) { + const node = { value: null! as T[K], next: () => node }; + return node; +} +export function optionalCaptured(value: T) { + type Node = { value: T; next: Node }; + return null! as { node?: Node | false | null }; +} +export function annotatedCaptured(value: T) { + const node: { value: typeof value; next: typeof node } = { value, next: null! }; + return node; +} +export function recursiveTuple(value: T) { + type Tuple = readonly [T, Tuple]; + return null! as Tuple; +} +export function inferredCaptured() { + type Node = { value: V; next: Node }; + return null! as (T extends () => infer U ? Node : never); +} +export function mappedCaptured() { + type Node = { [K in keyof T]: { value: T[K]; next: Node } }; + return null! as Node; +} +export function freshGeneric(unused: T) { + const recur = (value: U) => recur; + return recur; +} +export function mutualCaptured(left: T, right: U) { + type Left = { left: T; next: Right }; + type Right = { right: U; self: Right; next: Left }; + return { left: null! as Left, right: null! as Right }; +} +export class CapturedClass { + constructor(public value: T) {} + make(inner: U) { + const node = { outer: this.value, inner, next: () => node }; + return node; + } +} +export function covariantClass() { + return class Node { + value!: T; + next(): Node { return this; } + }; +} +export function contravariantClass() { + return class Node { + consume!: (value: T) => void; + next(): Node { return this; } + }; +} +export namespace Nested { + export function captured(value: T) { + const node = { value, next: () => node }; + return node; + } +} +type NonNullable = "shadowed"; // comment-only edit tsgo --build consumer ExitStatus:: DiagnosticsPresent_OutputsGenerated Output:: -consumer/index.ts:58:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. +producer/index.ts:83:14 - error TS5088: The inferred type of 'mappedCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +83 export const mappedCycle = build<{ Node: { value: number; next: "ref" } }>(); +   ~~~~~~~~~~~ + +producer/index.ts:84:14 - error TS5088: The inferred type of 'mappedCycleCopy' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +84 export const mappedCycleCopy = mappedCycle; +   ~~~~~~~~~~~~~~~ + +producer/index.ts:85:14 - error TS5088: The inferred type of 'nestedCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +85 export const nestedCycle = { wrapped: build<{ Node: { value: string; next: "ref" } }>() }; +   ~~~~~~~~~~~ + +producer/index.ts:87:14 - error TS5088: The inferred type of 'keyedCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +87 export const keyedCycles = build<{ +   ~~~~~~~~~~~ + +producer/index.ts:92:14 - error TS5088: The inferred type of 'sharedCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +92 export const sharedCycles = { first: mappedCycle, second: mappedCycle }; +   ~~~~~~~~~~~~ + +producer/index.ts:97:14 - error TS5088: The inferred type of 'mutualCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +97 export const mutualCycle = buildMutual<{ +   ~~~~~~~~~~~ + +producer/index.ts:105:14 - error TS5088: The inferred type of 'shadowedCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +105 export const shadowedCycle = buildShadowed<{ Node: { value: number; next: "ref" } }>(); +   ~~~~~~~~~~~~~ + +producer/index.ts:107:14 - error TS5088: The inferred type of 'optionalCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +107 export const optionalCycle = buildOptional<{ Node: { value: number; next: "ref" } }>(); +   ~~~~~~~~~~~~~ + +producer/index.ts:109:14 - error TS5088: The inferred type of 'nullableCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +109 export const nullableCycle = buildNullable<{ Node: { value: string; next: "ref" } }>(); +   ~~~~~~~~~~~~~ + +producer/index.ts:111:14 - error TS5088: The inferred type of 'mixedCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +111 export const mixedCycles = wrap(optionalCycle); +   ~~~~~~~~~~~ + +producer/index.ts:112:14 - error TS5088: The inferred type of 'sharedOptionalCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +112 export const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle }; +   ~~~~~~~~~~~~~~~~~~~~ + +producer/index.ts:113:14 - error TS5088: The inferred type of 'nullableKeys' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +113 export const nullableKeys = buildNullable<{ +   ~~~~~~~~~~~~ + +producer/index.ts:119:14 - error TS5088: The inferred type of 'nullableRoot' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +119 export const nullableRoot = buildNullableRoot<{ Node: { value: number; next: "ref" } }>(); +   ~~~~~~~~~~~~ + +producer/index.ts:121:14 - error TS5088: The inferred type of 'optionalRoot' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +121 export const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: "ref" } }>(); +   ~~~~~~~~~~~~ + +producer/index.ts:126:14 - error TS5088: The inferred type of 'nullableLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +126 export const nullableLinks = buildNullableLinks<{ Node: { value: number; next: "ref" } }>(); +   ~~~~~~~~~~~~~ + +producer/index.ts:128:14 - error TS5088: The inferred type of 'optionalNullableLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +128 export const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: "ref" } }>(); +   ~~~~~~~~~~~~~~~~~~~~~ + +producer/index.ts:133:14 - error TS5088: The inferred type of 'nullableOptionalLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +133 export const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: "ref" } }>(); +   ~~~~~~~~~~~~~~~~~~~~~ + +producer/index.ts:138:14 - error TS5088: The inferred type of 'nullishLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +138 export const nullishLinks = buildNullishLinks<{ Node: { value: number; next: "ref" } }>(); +   ~~~~~~~~~~~~ + +producer/index.ts:140:14 - error TS5088: The inferred type of 'mixedUnionCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +140 export const mixedUnionCycle = buildMixed<{ Node: { value: number; next: "ref" } }>(); +   ~~~~~~~~~~~~~~~ + +producer/index.ts:142:14 - error TS5088: The inferred type of 'factory' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +142 export const factory = () => function self() { return self; }; +   ~~~~~~~ + +producer/index.ts:143:17 - error TS5088: The inferred type of 'captured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +143 export function captured(value: T) { +   ~~~~~~~~ + +producer/index.ts:147:17 - error TS5088: The inferred type of 'nestedCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +147 export function nestedCaptured(outer: T) { +   ~~~~~~~~~~~~~~ + +producer/index.ts:156:17 - error TS5088: The inferred type of 'constrained' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +156 export function constrained(key: K) { +   ~~~~~~~~~~~ + +producer/index.ts:160:17 - error TS5088: The inferred type of 'optionalCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +160 export function optionalCaptured(value: T) { +   ~~~~~~~~~~~~~~~~ + +producer/index.ts:164:17 - error TS5088: The inferred type of 'annotatedCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +164 export function annotatedCaptured(value: T) { +   ~~~~~~~~~~~~~~~~~ + +producer/index.ts:168:17 - error TS5088: The inferred type of 'recursiveTuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +168 export function recursiveTuple(value: T) { +   ~~~~~~~~~~~~~~ + +producer/index.ts:172:17 - error TS5088: The inferred type of 'inferredCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +172 export function inferredCaptured() { +   ~~~~~~~~~~~~~~~~ + +producer/index.ts:176:17 - error TS5088: The inferred type of 'mappedCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +176 export function mappedCaptured() { +   ~~~~~~~~~~~~~~ + +producer/index.ts:180:17 - error TS5088: The inferred type of 'freshGeneric' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +180 export function freshGeneric(unused: T) { +   ~~~~~~~~~~~~ -58 const invalid: number = arrow()()(); -   ~~~~~~~ +producer/index.ts:184:17 - error TS5088: The inferred type of 'mutualCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -consumer/index.ts:59:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. +184 export function mutualCaptured(left: T, right: U) { +   ~~~~~~~~~~~~~~ -59 const invalidExpression: number = expression()()(); -   ~~~~~~~~~~~~~~~~~ +producer/index.ts:191:5 - error TS5088: The inferred type of 'make' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -consumer/index.ts:60:7 - error TS2322: Type '() => { call: ...; }' is not assignable to type 'number'. +191 make(inner: U) { +   ~~~~ -60 const invalidObject: number = objectReturn().call; -   ~~~~~~~~~~~~~ +producer/index.ts:196:17 - error TS5088: The inferred type of 'covariantClass' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -consumer/index.ts:61:7 - error TS2322: Type '() => readonly [...]' is not assignable to type 'number'. +196 export function covariantClass() { +   ~~~~~~~~~~~~~~ -61 const invalidTuple: number = tupleReturn()[0]; -   ~~~~~~~~~~~~ +producer/index.ts:202:17 - error TS5088: The inferred type of 'contravariantClass' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -consumer/index.ts:62:7 - error TS2322: Type '(shadowed: number) => ...' is not assignable to type 'number'. +202 export function contravariantClass() { +   ~~~~~~~~~~~~~~~~~~ -62 const invalidShadowed: number = shadowed(1); -   ~~~~~~~~~~~~~~~ +producer/index.ts:209:21 - error TS5088: The inferred type of 'captured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -consumer/index.ts:63:7 - error TS2322: Type 'number' is not assignable to type 'string'. +209 export function captured(value: T) { +   ~~~~~~~~ -63 const invalidObjectValue: string = object.next().value; -   ~~~~~~~~~~~~~~~~~~ +consumer/index.ts:1:88 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. -consumer/index.ts:64:7 - error TS2322: Type 'readonly [() => ...]' is not assignable to type 'number'. +1 import { arrow, expression, first, generic, objectReturn, tupleReturn, shadowed } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ -64 const invalidTupleValue: number = tuple[0](); -   ~~~~~~~~~~~~~~~~~ +consumer/index.ts:2:64 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. -consumer/index.ts:65:7 - error TS2322: Type 'string' is not assignable to type 'number'. +2 import { object, method, accessor, tuple, array, nested } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ -65 const invalidSpecialized: number = specialized.next().value; -   ~~~~~~~~~~~~~~~~~~ +consumer/index.ts:3:94 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. -consumer/index.ts:66:7 - error TS2322: Type '{ next: ...; }' is not assignable to type 'number'. +3 import { memberTuple, memberArray, quoted, numeric, key, computed, union, specialized } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ -66 const invalidMapped: number = mapped.next; -   ~~~~~~~~~~~~~ +consumer/index.ts:4:48 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. -consumer/index.ts:67:7 - error TS2322: Type 'string' is not assignable to type 'number'. +4 import { indexed, mapped, viaAnnotation } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ -67 const invalidAnnotation: number = viaAnnotation.next().value; -   ~~~~~~~~~~~~~~~~~ +consumer/index.ts:5:86 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. -consumer/index.ts:68:7 - error TS2322: Type 'string' is not assignable to type 'number'. +5 import { nextLink, nextCallable, parenthesized, asserted, Methods, overloaded } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ -68 const invalidLink: number = nextLink.next.value; -   ~~~~~~~~~~~ +consumer/index.ts:6:51 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. -consumer/index.ts:69:7 - error TS2322: Type 'number' is not assignable to type 'string'. +6 import { hiddenAlias, siblingHiddenAliases } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ -69 const invalidCallable: string = nextCallable(1).link.value; -   ~~~~~~~~~~~~~~~ +consumer/index.ts:7:30 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. -consumer/index.ts:70:7 - error TS2322: Type 'string' is not assignable to type 'number'. +7 import { nestedNumber } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ -70 const invalidHiddenValue: number = hiddenAlias.next.next.value; -   ~~~~~~~~~~~~~~~~~~ +consumer/index.ts:8:124 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. -consumer/index.ts:71:7 - error TS2322: Type '() => (typeof Methods)["recur"]' is not assignable to type 'number'. +8 import { mappedCycle, mappedCycleCopy, nestedCycle, cycleKey, keyedCycles, sharedCycles, mutualCycle, shadowedCycle } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ -71 const invalidMethod: number = Methods.recur()(); -   ~~~~~~~~~~~~~ +consumer/index.ts:9:152 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. -consumer/index.ts:72:7 - error TS2322: Type '() => (typeof Methods)[typeof key]' is not assignable to type 'number'. +9 import { optionalCycle, nullableCycle, mixedCycles, sharedOptionalCycles, nullableKeys, nullableRoot, optionalRoot, nullableLinks, nullishLinks } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ -72 const invalidComputedMethod: number = Methods[key]()(); -   ~~~~~~~~~~~~~~~~~~~~~ +consumer/index.ts:10:62 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. -consumer/index.ts:73:7 - error TS2322: Type 'string' is not assignable to type 'boolean'. +10 import { optionalNullableLinks, nullableOptionalLinks } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ -73 const invalidNestedOuter: boolean = nestedString.outer; -   ~~~~~~~~~~~~~~~~~~ +consumer/index.ts:11:142 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. -consumer/index.ts:74:7 - error TS2322: Type 'number' is not assignable to type 'string'. +11 import { mixedUnionCycle, factory, captured, nestedCaptured, constrained, optionalCaptured, annotatedCaptured, recursiveTuple, Nested } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ -74 const invalidNestedInner: string = nestedString.inner; -   ~~~~~~~~~~~~~~~~~~ +consumer/index.ts:12:80 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. -consumer/index.ts:75:26 - error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. +12 import { inferredCaptured, mappedCaptured, freshGeneric, mutualCaptured } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ -75 nestedNumber.constrained("wrong"); -   ~~~~~~~ +consumer/index.ts:13:31 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. +13 import { CapturedClass } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Found 18 errors in the same file, starting at: consumer/index.ts:58 +consumer/index.ts:14:52 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +14 import { covariantClass, contravariantClass } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +Found 48 errors in 2 files. + +Errors Files + 14 consumer/index.ts:1 + 34 producer/index.ts:83 //// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo] *rewrite with same content* //// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo.readable.baseline.txt] *rewrite with same content* @@ -1011,10 +2094,102 @@ export const nestedOwner = { }, }; export const nestedNumber = nestedOwner.make(1); +export const mappedCycle = build(); +export const mappedCycleCopy = mappedCycle; +export const nestedCycle = { wrapped: build() }; +export const cycleKey = Symbol(); +export const keyedCycles = build(); +export const sharedCycles = { first: mappedCycle, second: mappedCycle }; +export const mutualCycle = buildMutual(); +export const shadowedCycle = buildShadowed(); +export const optionalCycle = buildOptional(); +export const nullableCycle = buildNullable(); +export const mixedCycles = wrap(optionalCycle); +export const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle }; +export const nullableKeys = buildNullable(); +export const nullableRoot = buildNullableRoot(); +export const optionalRoot = buildOptionalRoot(); +export const nullableLinks = buildNullableLinks(); +export const optionalNullableLinks = buildOptionalNullableLinks(); +export const nullableOptionalLinks = buildNullableOptionalLinks(); +export const nullishLinks = buildNullishLinks(); +export const mixedUnionCycle = buildMixed(); +export const _recursive = 1; +export const factory = () => function self() { return self; }; +export function captured(value) { + const node = { value, next: () => node, consume: (other) => node }; + return node; +} +export function nestedCaptured(outer) { + return (inner) => { + const node = { + outer, inner, next: () => node, + shadow: (value) => ({ outer, inner, value, next: node }), + }; + return node; + }; +} +export function constrained(key) { + const node = { value: null, next: () => node }; + return node; +} +export function optionalCaptured(value) { + return null; +} +export function annotatedCaptured(value) { + const node = { value, next: null }; + return node; +} +export function recursiveTuple(value) { + return null; +} +export function inferredCaptured() { + return null; +} +export function mappedCaptured() { + return null; +} +export function freshGeneric(unused) { + const recur = (value) => recur; + return recur; +} +export function mutualCaptured(left, right) { + return { left: null, right: null }; +} +export class CapturedClass { + value; + constructor(value) { + this.value = value; + } + make(inner) { + const node = { outer: this.value, inner, next: () => node }; + return node; + } +} +export function covariantClass() { + return class Node { + value; + next() { return this; } + }; +} +export function contravariantClass() { + return class Node { + consume; + next() { return this; } + }; +} +export var Nested; +(function (Nested) { + function captured(value) { + const node = { value, next: () => node }; + return node; + } + Nested.captured = captured; +})(Nested || (Nested = {})); // comment-only edit //// [/home/src/workspaces/project/producer/dist/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2026.full.d.ts","../index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"633d60bb4cc3a6318b4832fd7a0a90fd-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);\n// comment-only edit\n","signature":"ac680f9630fda193ccd7e95d350590d1-export declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: () => {\n call: typeof objectReturn;\n};\nexport declare const tupleReturn: () => readonly [typeof tupleReturn];\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: {\n value: number;\n next: () => typeof object;\n};\nexport declare const method: {\n value: number;\n next(): typeof method;\n};\nexport declare const accessor: {\n value: number;\n readonly next: typeof accessor;\n};\nexport declare const tuple: readonly [() => typeof tuple];\nexport declare const array: (() => typeof array)[];\nexport declare const nested: {\n inner: {\n next(): {\n next(): (typeof nested)[\"inner\"];\n };\n };\n};\nexport declare const memberTuple: readonly [() => (typeof memberTuple)[0]];\nexport declare const memberArray: (() => (typeof memberArray)[0])[];\nexport declare const quoted: {\n \"a-b\": () => (typeof quoted)[\"a-b\"];\n};\nexport declare const numeric: {\n 0: () => (typeof numeric)[0];\n};\nexport declare const key: unique symbol;\nexport declare const computed: {\n [key]: () => (typeof computed)[typeof key];\n};\nexport declare const union: {\n next: () => typeof union;\n} | undefined;\nexport declare const specialized: {\n value: string;\n next: () => typeof specialized;\n};\nexport declare const indexed: {\n [key: string]: typeof indexed;\n};\nexport declare const mapped: {\n next: typeof mapped;\n};\nexport declare const viaAnnotation: {\n value: string;\n next: () => typeof viaAnnotation;\n};\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: typeof hiddenAlias;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"first\"];\n };\n second: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"second\"];\n };\n};\nexport declare const parenthesized: () => typeof parenthesized;\nexport declare const asserted: () => typeof asserted;\nexport declare class Methods {\n static recur(): (typeof Methods)[\"recur\"];\n static \"a-b\"(): (typeof Methods)[\"a-b\"];\n static [key](): (typeof Methods)[typeof key];\n recur(): Methods[\"recur\"];\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n};\nexport declare const nestedNumber: {\n nested(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n constrained(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n copied(inner: U): {\n outer: number;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n};\n","impliedNodeFormat":1}],"options":{"composite":true,"outDir":"./","strict":true},"latestChangedDtsFile":"./index.d.ts"} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2026.full.d.ts","../index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"8be79633abc8e3e9d5c07f355c360ccf-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);\ntype Show = { [K in keyof T]: T[K] } & unknown;\ntype Resolve = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? Resolve : M[K][P];\n}>;\ndeclare const build: () => { [K in keyof M]: Resolve };\nexport const mappedCycle = build<{ Node: { value: number; next: \"ref\" } }>();\nexport const mappedCycleCopy = mappedCycle;\nexport const nestedCycle = { wrapped: build<{ Node: { value: string; next: \"ref\" } }>() };\nexport const cycleKey = Symbol();\nexport const keyedCycles = build<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\nexport const sharedCycles = { first: mappedCycle, second: mappedCycle };\ntype ResolveMutual = Show<{\n [P in keyof M[K]]: M[K][P] extends { ref: infer R extends keyof M } ? ResolveMutual : M[K][P];\n}>;\ndeclare const buildMutual: () => { [K in keyof M]: ResolveMutual };\nexport const mutualCycle = buildMutual<{\n First: { value: number; next: { ref: \"Second\" } };\n Second: { value: string; next: { ref: \"First\" } };\n}>();\ntype ResolveShadowed = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? (shadowedCycle: T) => ResolveShadowed : M[K][P];\n}>;\ndeclare const buildShadowed: () => { [K in keyof M]: ResolveShadowed };\nexport const shadowedCycle = buildShadowed<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptional: () => { [K in keyof M]?: Resolve };\nexport const optionalCycle = buildOptional<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildNullable: () => { [K in keyof M]: Resolve | null };\nexport const nullableCycle = buildNullable<{ Node: { value: string; next: \"ref\" } }>();\ndeclare const wrap: (value: T) => { required: T; optional?: T | null };\nexport const mixedCycles = wrap(optionalCycle);\nexport const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle };\nexport const nullableKeys = buildNullable<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\ndeclare const buildNullableRoot: () => Resolve | null;\nexport const nullableRoot = buildNullableRoot<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalRoot: () => Resolve | undefined;\nexport const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: \"ref\" } }>();\ntype ResolveNullable = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullable | null : M[K][P];\n}>;\ndeclare const buildNullableLinks: () => { [K in keyof M]: ResolveNullable | null };\nexport const nullableLinks = buildNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalNullableLinks: () => { [K in keyof M]?: ResolveNullable | null };\nexport const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveOptional = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveOptional | undefined : M[K][P];\n}>;\ndeclare const buildNullableOptionalLinks: () => { [K in keyof M]: ResolveOptional | null };\nexport const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveNullish = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullish | null | undefined : M[K][P];\n}>;\ndeclare const buildNullishLinks: () => { [K in keyof M]?: ResolveNullish | null };\nexport const nullishLinks = buildNullishLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildMixed: () => { [K in keyof M]?: Resolve | false | null };\nexport const mixedUnionCycle = buildMixed<{ Node: { value: number; next: \"ref\" } }>();\nexport const _recursive = 1;\nexport const factory = () => function self() { return self; };\nexport function captured(value: T) {\n const node = { value, next: () => node, consume: (other: T) => node };\n return node;\n}\nexport function nestedCaptured(outer: T) {\n return (inner: U) => {\n const node = {\n outer, inner, next: () => node,\n shadow: (value: T) => ({ outer, inner, value, next: node }),\n };\n return node;\n };\n}\nexport function constrained(key: K) {\n const node = { value: null! as T[K], next: () => node };\n return node;\n}\nexport function optionalCaptured(value: T) {\n type Node = { value: T; next: Node };\n return null! as { node?: Node | false | null };\n}\nexport function annotatedCaptured(value: T) {\n const node: { value: typeof value; next: typeof node } = { value, next: null! };\n return node;\n}\nexport function recursiveTuple(value: T) {\n type Tuple = readonly [T, Tuple];\n return null! as Tuple;\n}\nexport function inferredCaptured() {\n type Node = { value: V; next: Node };\n return null! as (T extends () => infer U ? Node : never);\n}\nexport function mappedCaptured() {\n type Node = { [K in keyof T]: { value: T[K]; next: Node } };\n return null! as Node;\n}\nexport function freshGeneric(unused: T) {\n const recur = (value: U) => recur;\n return recur;\n}\nexport function mutualCaptured(left: T, right: U) {\n type Left = { left: T; next: Right };\n type Right = { right: U; self: Right; next: Left };\n return { left: null! as Left, right: null! as Right };\n}\nexport class CapturedClass {\n constructor(public value: T) {}\n make(inner: U) {\n const node = { outer: this.value, inner, next: () => node };\n return node;\n }\n}\nexport function covariantClass() {\n return class Node {\n value!: T;\n next(): Node { return this; }\n };\n}\nexport function contravariantClass() {\n return class Node {\n consume!: (value: T) => void;\n next(): Node { return this; }\n };\n}\nexport namespace Nested {\n export function captured(value: T) {\n const node = { value, next: () => node };\n return node;\n }\n}\ntype NonNullable = \"shadowed\";\n// comment-only edit\n","signature":"67d95aa5b29b3462564c69678c5a8fa4-export declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: () => {\n call: typeof objectReturn;\n};\nexport declare const tupleReturn: () => readonly [typeof tupleReturn];\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: {\n value: number;\n next: () => typeof object;\n};\nexport declare const method: {\n value: number;\n next(): typeof method;\n};\nexport declare const accessor: {\n value: number;\n readonly next: typeof accessor;\n};\nexport declare const tuple: readonly [() => typeof tuple];\nexport declare const array: (() => typeof array)[];\nexport declare const nested: {\n inner: {\n next(): {\n next(): (typeof nested)[\"inner\"];\n };\n };\n};\nexport declare const memberTuple: readonly [() => (typeof memberTuple)[0]];\nexport declare const memberArray: (() => (typeof memberArray)[0])[];\nexport declare const quoted: {\n \"a-b\": () => (typeof quoted)[\"a-b\"];\n};\nexport declare const numeric: {\n 0: () => (typeof numeric)[0];\n};\nexport declare const key: unique symbol;\nexport declare const computed: {\n [key]: () => (typeof computed)[typeof key];\n};\nexport declare const union: {\n next: () => typeof union;\n} | undefined;\nexport declare const specialized: {\n value: string;\n next: () => typeof specialized;\n};\nexport declare const indexed: {\n [key: string]: typeof indexed;\n};\nexport declare const mapped: {\n next: typeof mapped;\n};\nexport declare const viaAnnotation: {\n value: string;\n next: () => typeof viaAnnotation;\n};\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: typeof hiddenAlias;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"first\"];\n };\n second: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"second\"];\n };\n};\nexport declare const parenthesized: () => typeof parenthesized;\nexport declare const asserted: () => typeof asserted;\nexport declare class Methods {\n static recur(): (typeof Methods)[\"recur\"];\n static \"a-b\"(): (typeof Methods)[\"a-b\"];\n static [key](): (typeof Methods)[typeof key];\n recur(): Methods[\"recur\"];\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n};\nexport declare const nestedNumber: {\n nested(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n constrained(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n copied(inner: U): {\n outer: number;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n};\nexport declare const mappedCycle: any;\nexport declare const mappedCycleCopy: any;\nexport declare const nestedCycle: any;\nexport declare const cycleKey: unique symbol;\nexport declare const keyedCycles: any;\nexport declare const sharedCycles: any;\nexport declare const mutualCycle: any;\nexport declare const shadowedCycle: any;\nexport declare const optionalCycle: any;\nexport declare const nullableCycle: any;\nexport declare const mixedCycles: any;\nexport declare const sharedOptionalCycles: any;\nexport declare const nullableKeys: any;\nexport declare const nullableRoot: any;\nexport declare const optionalRoot: any;\nexport declare const nullableLinks: any;\nexport declare const optionalNullableLinks: any;\nexport declare const nullableOptionalLinks: any;\nexport declare const nullishLinks: any;\nexport declare const mixedUnionCycle: any;\nexport declare const _recursive = 1;\nexport declare const factory: any;\nexport declare function captured(value: T): any;\nexport declare function nestedCaptured(outer: T): any;\nexport declare function constrained(key: K): any;\nexport declare function optionalCaptured(value: T): any;\nexport declare function annotatedCaptured(value: T): any;\nexport declare function recursiveTuple(value: T): any;\nexport declare function inferredCaptured(): any;\nexport declare function mappedCaptured(): any;\nexport declare function freshGeneric(unused: T): any;\nexport declare function mutualCaptured(left: T, right: U): any;\nexport declare class CapturedClass {\n value: T;\n constructor(value: T);\n make(inner: U): any;\n}\nexport declare function covariantClass(): any;\nexport declare function contravariantClass(): any;\nexport declare namespace Nested {\n function captured(value: T): any;\n}\n\n(3735,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmappedCycle\n\n(3813,15): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmappedCycleCopy\n\n(3857,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnestedCycle\n\n(3982,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nkeyedCycles\n\n(4154,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nsharedCycles\n\n(4463,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmutualCycle\n\n(4862,13): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nshadowedCycle\n\n(5024,13): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\noptionalCycle\n\n(5192,13): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnullableCycle\n\n(5355,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmixedCycles\n\n(5403,20): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nsharedOptionalCycles\n\n(5488,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnullableKeys\n\n(5739,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnullableRoot\n\n(5905,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\noptionalRoot\n\n(6232,13): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnullableLinks\n\n(6427,21): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\noptionalNullableLinks\n\n(6785,21): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnullableOptionalLinks\n\n(7139,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnullishLinks\n\n(7316,15): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmixedUnionCycle\n\n(7432,7): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nfactory\n\n(7498,8): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ncaptured\n\n(7632,14): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnestedCaptured\n\n(7892,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nconstrained\n\n(8058,16): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\noptionalCaptured\n\n(8202,17): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nannotatedCaptured\n\n(8355,14): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nrecursiveTuple\n\n(8468,16): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ninferredCaptured\n\n(8623,14): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmappedCaptured\n\n(8754,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nfreshGeneric\n\n(8861,14): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmutualCaptured\n\n(9134,4): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmake\n\n(9278,14): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ncovariantClass\n\n(9413,18): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ncontravariantClass\n\n(9600,8): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ncaptured\n","impliedNodeFormat":1}],"options":{"composite":true,"exactOptionalPropertyTypes":true,"outDir":"./","strict":true},"emitDiagnosticsPerFile":[[2,[{"pos":3735,"end":3746,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["mappedCycle"]},{"pos":3813,"end":3828,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["mappedCycleCopy"]},{"pos":3857,"end":3868,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nestedCycle"]},{"pos":3982,"end":3993,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["keyedCycles"]},{"pos":4154,"end":4166,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["sharedCycles"]},{"pos":4463,"end":4474,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["mutualCycle"]},{"pos":4862,"end":4875,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["shadowedCycle"]},{"pos":5024,"end":5037,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["optionalCycle"]},{"pos":5192,"end":5205,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nullableCycle"]},{"pos":5355,"end":5366,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["mixedCycles"]},{"pos":5403,"end":5423,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["sharedOptionalCycles"]},{"pos":5488,"end":5500,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nullableKeys"]},{"pos":5739,"end":5751,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nullableRoot"]},{"pos":5905,"end":5917,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["optionalRoot"]},{"pos":6232,"end":6245,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nullableLinks"]},{"pos":6427,"end":6448,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["optionalNullableLinks"]},{"pos":6785,"end":6806,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nullableOptionalLinks"]},{"pos":7139,"end":7151,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nullishLinks"]},{"pos":7316,"end":7331,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["mixedUnionCycle"]},{"pos":7432,"end":7439,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["factory"]},{"pos":7498,"end":7506,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["captured"]},{"pos":7632,"end":7646,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nestedCaptured"]},{"pos":7892,"end":7903,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["constrained"]},{"pos":8058,"end":8074,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["optionalCaptured"]},{"pos":8202,"end":8219,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["annotatedCaptured"]},{"pos":8355,"end":8369,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["recursiveTuple"]},{"pos":8468,"end":8484,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["inferredCaptured"]},{"pos":8623,"end":8637,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["mappedCaptured"]},{"pos":8754,"end":8766,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["freshGeneric"]},{"pos":8861,"end":8875,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["mutualCaptured"]},{"pos":9134,"end":9138,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["make"]},{"pos":9278,"end":9292,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["covariantClass"]},{"pos":9413,"end":9431,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["contravariantClass"]},{"pos":9600,"end":9608,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["captured"]}]]],"emitSignatures":[2]} //// [/home/src/workspaces/project/producer/dist/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -1045,23 +2220,376 @@ export const nestedNumber = nestedOwner.make(1); }, { "fileName": "../index.ts", - "version": "633d60bb4cc3a6318b4832fd7a0a90fd-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);\n// comment-only edit\n", - "signature": "ac680f9630fda193ccd7e95d350590d1-export declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: () => {\n call: typeof objectReturn;\n};\nexport declare const tupleReturn: () => readonly [typeof tupleReturn];\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: {\n value: number;\n next: () => typeof object;\n};\nexport declare const method: {\n value: number;\n next(): typeof method;\n};\nexport declare const accessor: {\n value: number;\n readonly next: typeof accessor;\n};\nexport declare const tuple: readonly [() => typeof tuple];\nexport declare const array: (() => typeof array)[];\nexport declare const nested: {\n inner: {\n next(): {\n next(): (typeof nested)[\"inner\"];\n };\n };\n};\nexport declare const memberTuple: readonly [() => (typeof memberTuple)[0]];\nexport declare const memberArray: (() => (typeof memberArray)[0])[];\nexport declare const quoted: {\n \"a-b\": () => (typeof quoted)[\"a-b\"];\n};\nexport declare const numeric: {\n 0: () => (typeof numeric)[0];\n};\nexport declare const key: unique symbol;\nexport declare const computed: {\n [key]: () => (typeof computed)[typeof key];\n};\nexport declare const union: {\n next: () => typeof union;\n} | undefined;\nexport declare const specialized: {\n value: string;\n next: () => typeof specialized;\n};\nexport declare const indexed: {\n [key: string]: typeof indexed;\n};\nexport declare const mapped: {\n next: typeof mapped;\n};\nexport declare const viaAnnotation: {\n value: string;\n next: () => typeof viaAnnotation;\n};\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: typeof hiddenAlias;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"first\"];\n };\n second: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"second\"];\n };\n};\nexport declare const parenthesized: () => typeof parenthesized;\nexport declare const asserted: () => typeof asserted;\nexport declare class Methods {\n static recur(): (typeof Methods)[\"recur\"];\n static \"a-b\"(): (typeof Methods)[\"a-b\"];\n static [key](): (typeof Methods)[typeof key];\n recur(): Methods[\"recur\"];\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n};\nexport declare const nestedNumber: {\n nested(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n constrained(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n copied(inner: U): {\n outer: number;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n};\n", + "version": "8be79633abc8e3e9d5c07f355c360ccf-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);\ntype Show = { [K in keyof T]: T[K] } & unknown;\ntype Resolve = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? Resolve : M[K][P];\n}>;\ndeclare const build: () => { [K in keyof M]: Resolve };\nexport const mappedCycle = build<{ Node: { value: number; next: \"ref\" } }>();\nexport const mappedCycleCopy = mappedCycle;\nexport const nestedCycle = { wrapped: build<{ Node: { value: string; next: \"ref\" } }>() };\nexport const cycleKey = Symbol();\nexport const keyedCycles = build<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\nexport const sharedCycles = { first: mappedCycle, second: mappedCycle };\ntype ResolveMutual = Show<{\n [P in keyof M[K]]: M[K][P] extends { ref: infer R extends keyof M } ? ResolveMutual : M[K][P];\n}>;\ndeclare const buildMutual: () => { [K in keyof M]: ResolveMutual };\nexport const mutualCycle = buildMutual<{\n First: { value: number; next: { ref: \"Second\" } };\n Second: { value: string; next: { ref: \"First\" } };\n}>();\ntype ResolveShadowed = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? (shadowedCycle: T) => ResolveShadowed : M[K][P];\n}>;\ndeclare const buildShadowed: () => { [K in keyof M]: ResolveShadowed };\nexport const shadowedCycle = buildShadowed<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptional: () => { [K in keyof M]?: Resolve };\nexport const optionalCycle = buildOptional<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildNullable: () => { [K in keyof M]: Resolve | null };\nexport const nullableCycle = buildNullable<{ Node: { value: string; next: \"ref\" } }>();\ndeclare const wrap: (value: T) => { required: T; optional?: T | null };\nexport const mixedCycles = wrap(optionalCycle);\nexport const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle };\nexport const nullableKeys = buildNullable<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\ndeclare const buildNullableRoot: () => Resolve | null;\nexport const nullableRoot = buildNullableRoot<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalRoot: () => Resolve | undefined;\nexport const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: \"ref\" } }>();\ntype ResolveNullable = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullable | null : M[K][P];\n}>;\ndeclare const buildNullableLinks: () => { [K in keyof M]: ResolveNullable | null };\nexport const nullableLinks = buildNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalNullableLinks: () => { [K in keyof M]?: ResolveNullable | null };\nexport const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveOptional = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveOptional | undefined : M[K][P];\n}>;\ndeclare const buildNullableOptionalLinks: () => { [K in keyof M]: ResolveOptional | null };\nexport const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveNullish = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullish | null | undefined : M[K][P];\n}>;\ndeclare const buildNullishLinks: () => { [K in keyof M]?: ResolveNullish | null };\nexport const nullishLinks = buildNullishLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildMixed: () => { [K in keyof M]?: Resolve | false | null };\nexport const mixedUnionCycle = buildMixed<{ Node: { value: number; next: \"ref\" } }>();\nexport const _recursive = 1;\nexport const factory = () => function self() { return self; };\nexport function captured(value: T) {\n const node = { value, next: () => node, consume: (other: T) => node };\n return node;\n}\nexport function nestedCaptured(outer: T) {\n return (inner: U) => {\n const node = {\n outer, inner, next: () => node,\n shadow: (value: T) => ({ outer, inner, value, next: node }),\n };\n return node;\n };\n}\nexport function constrained(key: K) {\n const node = { value: null! as T[K], next: () => node };\n return node;\n}\nexport function optionalCaptured(value: T) {\n type Node = { value: T; next: Node };\n return null! as { node?: Node | false | null };\n}\nexport function annotatedCaptured(value: T) {\n const node: { value: typeof value; next: typeof node } = { value, next: null! };\n return node;\n}\nexport function recursiveTuple(value: T) {\n type Tuple = readonly [T, Tuple];\n return null! as Tuple;\n}\nexport function inferredCaptured() {\n type Node = { value: V; next: Node };\n return null! as (T extends () => infer U ? Node : never);\n}\nexport function mappedCaptured() {\n type Node = { [K in keyof T]: { value: T[K]; next: Node } };\n return null! as Node;\n}\nexport function freshGeneric(unused: T) {\n const recur = (value: U) => recur;\n return recur;\n}\nexport function mutualCaptured(left: T, right: U) {\n type Left = { left: T; next: Right };\n type Right = { right: U; self: Right; next: Left };\n return { left: null! as Left, right: null! as Right };\n}\nexport class CapturedClass {\n constructor(public value: T) {}\n make(inner: U) {\n const node = { outer: this.value, inner, next: () => node };\n return node;\n }\n}\nexport function covariantClass() {\n return class Node {\n value!: T;\n next(): Node { return this; }\n };\n}\nexport function contravariantClass() {\n return class Node {\n consume!: (value: T) => void;\n next(): Node { return this; }\n };\n}\nexport namespace Nested {\n export function captured(value: T) {\n const node = { value, next: () => node };\n return node;\n }\n}\ntype NonNullable = \"shadowed\";\n// comment-only edit\n", + "signature": "67d95aa5b29b3462564c69678c5a8fa4-export declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: () => {\n call: typeof objectReturn;\n};\nexport declare const tupleReturn: () => readonly [typeof tupleReturn];\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: {\n value: number;\n next: () => typeof object;\n};\nexport declare const method: {\n value: number;\n next(): typeof method;\n};\nexport declare const accessor: {\n value: number;\n readonly next: typeof accessor;\n};\nexport declare const tuple: readonly [() => typeof tuple];\nexport declare const array: (() => typeof array)[];\nexport declare const nested: {\n inner: {\n next(): {\n next(): (typeof nested)[\"inner\"];\n };\n };\n};\nexport declare const memberTuple: readonly [() => (typeof memberTuple)[0]];\nexport declare const memberArray: (() => (typeof memberArray)[0])[];\nexport declare const quoted: {\n \"a-b\": () => (typeof quoted)[\"a-b\"];\n};\nexport declare const numeric: {\n 0: () => (typeof numeric)[0];\n};\nexport declare const key: unique symbol;\nexport declare const computed: {\n [key]: () => (typeof computed)[typeof key];\n};\nexport declare const union: {\n next: () => typeof union;\n} | undefined;\nexport declare const specialized: {\n value: string;\n next: () => typeof specialized;\n};\nexport declare const indexed: {\n [key: string]: typeof indexed;\n};\nexport declare const mapped: {\n next: typeof mapped;\n};\nexport declare const viaAnnotation: {\n value: string;\n next: () => typeof viaAnnotation;\n};\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: typeof hiddenAlias;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"first\"];\n };\n second: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"second\"];\n };\n};\nexport declare const parenthesized: () => typeof parenthesized;\nexport declare const asserted: () => typeof asserted;\nexport declare class Methods {\n static recur(): (typeof Methods)[\"recur\"];\n static \"a-b\"(): (typeof Methods)[\"a-b\"];\n static [key](): (typeof Methods)[typeof key];\n recur(): Methods[\"recur\"];\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n};\nexport declare const nestedNumber: {\n nested(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n constrained(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n copied(inner: U): {\n outer: number;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n};\nexport declare const mappedCycle: any;\nexport declare const mappedCycleCopy: any;\nexport declare const nestedCycle: any;\nexport declare const cycleKey: unique symbol;\nexport declare const keyedCycles: any;\nexport declare const sharedCycles: any;\nexport declare const mutualCycle: any;\nexport declare const shadowedCycle: any;\nexport declare const optionalCycle: any;\nexport declare const nullableCycle: any;\nexport declare const mixedCycles: any;\nexport declare const sharedOptionalCycles: any;\nexport declare const nullableKeys: any;\nexport declare const nullableRoot: any;\nexport declare const optionalRoot: any;\nexport declare const nullableLinks: any;\nexport declare const optionalNullableLinks: any;\nexport declare const nullableOptionalLinks: any;\nexport declare const nullishLinks: any;\nexport declare const mixedUnionCycle: any;\nexport declare const _recursive = 1;\nexport declare const factory: any;\nexport declare function captured(value: T): any;\nexport declare function nestedCaptured(outer: T): any;\nexport declare function constrained(key: K): any;\nexport declare function optionalCaptured(value: T): any;\nexport declare function annotatedCaptured(value: T): any;\nexport declare function recursiveTuple(value: T): any;\nexport declare function inferredCaptured(): any;\nexport declare function mappedCaptured(): any;\nexport declare function freshGeneric(unused: T): any;\nexport declare function mutualCaptured(left: T, right: U): any;\nexport declare class CapturedClass {\n value: T;\n constructor(value: T);\n make(inner: U): any;\n}\nexport declare function covariantClass(): any;\nexport declare function contravariantClass(): any;\nexport declare namespace Nested {\n function captured(value: T): any;\n}\n\n(3735,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmappedCycle\n\n(3813,15): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmappedCycleCopy\n\n(3857,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnestedCycle\n\n(3982,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nkeyedCycles\n\n(4154,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nsharedCycles\n\n(4463,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmutualCycle\n\n(4862,13): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nshadowedCycle\n\n(5024,13): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\noptionalCycle\n\n(5192,13): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnullableCycle\n\n(5355,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmixedCycles\n\n(5403,20): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nsharedOptionalCycles\n\n(5488,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnullableKeys\n\n(5739,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnullableRoot\n\n(5905,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\noptionalRoot\n\n(6232,13): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnullableLinks\n\n(6427,21): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\noptionalNullableLinks\n\n(6785,21): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnullableOptionalLinks\n\n(7139,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnullishLinks\n\n(7316,15): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmixedUnionCycle\n\n(7432,7): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nfactory\n\n(7498,8): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ncaptured\n\n(7632,14): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnestedCaptured\n\n(7892,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nconstrained\n\n(8058,16): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\noptionalCaptured\n\n(8202,17): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nannotatedCaptured\n\n(8355,14): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nrecursiveTuple\n\n(8468,16): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ninferredCaptured\n\n(8623,14): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmappedCaptured\n\n(8754,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nfreshGeneric\n\n(8861,14): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmutualCaptured\n\n(9134,4): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmake\n\n(9278,14): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ncovariantClass\n\n(9413,18): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ncontravariantClass\n\n(9600,8): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ncaptured\n", "impliedNodeFormat": "CommonJS", "original": { - "version": "633d60bb4cc3a6318b4832fd7a0a90fd-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);\n// comment-only edit\n", - "signature": "ac680f9630fda193ccd7e95d350590d1-export declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: () => {\n call: typeof objectReturn;\n};\nexport declare const tupleReturn: () => readonly [typeof tupleReturn];\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: {\n value: number;\n next: () => typeof object;\n};\nexport declare const method: {\n value: number;\n next(): typeof method;\n};\nexport declare const accessor: {\n value: number;\n readonly next: typeof accessor;\n};\nexport declare const tuple: readonly [() => typeof tuple];\nexport declare const array: (() => typeof array)[];\nexport declare const nested: {\n inner: {\n next(): {\n next(): (typeof nested)[\"inner\"];\n };\n };\n};\nexport declare const memberTuple: readonly [() => (typeof memberTuple)[0]];\nexport declare const memberArray: (() => (typeof memberArray)[0])[];\nexport declare const quoted: {\n \"a-b\": () => (typeof quoted)[\"a-b\"];\n};\nexport declare const numeric: {\n 0: () => (typeof numeric)[0];\n};\nexport declare const key: unique symbol;\nexport declare const computed: {\n [key]: () => (typeof computed)[typeof key];\n};\nexport declare const union: {\n next: () => typeof union;\n} | undefined;\nexport declare const specialized: {\n value: string;\n next: () => typeof specialized;\n};\nexport declare const indexed: {\n [key: string]: typeof indexed;\n};\nexport declare const mapped: {\n next: typeof mapped;\n};\nexport declare const viaAnnotation: {\n value: string;\n next: () => typeof viaAnnotation;\n};\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: typeof hiddenAlias;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"first\"];\n };\n second: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"second\"];\n };\n};\nexport declare const parenthesized: () => typeof parenthesized;\nexport declare const asserted: () => typeof asserted;\nexport declare class Methods {\n static recur(): (typeof Methods)[\"recur\"];\n static \"a-b\"(): (typeof Methods)[\"a-b\"];\n static [key](): (typeof Methods)[typeof key];\n recur(): Methods[\"recur\"];\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n};\nexport declare const nestedNumber: {\n nested(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n constrained(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n copied(inner: U): {\n outer: number;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n};\n", + "version": "8be79633abc8e3e9d5c07f355c360ccf-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);\ntype Show = { [K in keyof T]: T[K] } & unknown;\ntype Resolve = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? Resolve : M[K][P];\n}>;\ndeclare const build: () => { [K in keyof M]: Resolve };\nexport const mappedCycle = build<{ Node: { value: number; next: \"ref\" } }>();\nexport const mappedCycleCopy = mappedCycle;\nexport const nestedCycle = { wrapped: build<{ Node: { value: string; next: \"ref\" } }>() };\nexport const cycleKey = Symbol();\nexport const keyedCycles = build<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\nexport const sharedCycles = { first: mappedCycle, second: mappedCycle };\ntype ResolveMutual = Show<{\n [P in keyof M[K]]: M[K][P] extends { ref: infer R extends keyof M } ? ResolveMutual : M[K][P];\n}>;\ndeclare const buildMutual: () => { [K in keyof M]: ResolveMutual };\nexport const mutualCycle = buildMutual<{\n First: { value: number; next: { ref: \"Second\" } };\n Second: { value: string; next: { ref: \"First\" } };\n}>();\ntype ResolveShadowed = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? (shadowedCycle: T) => ResolveShadowed : M[K][P];\n}>;\ndeclare const buildShadowed: () => { [K in keyof M]: ResolveShadowed };\nexport const shadowedCycle = buildShadowed<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptional: () => { [K in keyof M]?: Resolve };\nexport const optionalCycle = buildOptional<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildNullable: () => { [K in keyof M]: Resolve | null };\nexport const nullableCycle = buildNullable<{ Node: { value: string; next: \"ref\" } }>();\ndeclare const wrap: (value: T) => { required: T; optional?: T | null };\nexport const mixedCycles = wrap(optionalCycle);\nexport const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle };\nexport const nullableKeys = buildNullable<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\ndeclare const buildNullableRoot: () => Resolve | null;\nexport const nullableRoot = buildNullableRoot<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalRoot: () => Resolve | undefined;\nexport const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: \"ref\" } }>();\ntype ResolveNullable = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullable | null : M[K][P];\n}>;\ndeclare const buildNullableLinks: () => { [K in keyof M]: ResolveNullable | null };\nexport const nullableLinks = buildNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalNullableLinks: () => { [K in keyof M]?: ResolveNullable | null };\nexport const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveOptional = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveOptional | undefined : M[K][P];\n}>;\ndeclare const buildNullableOptionalLinks: () => { [K in keyof M]: ResolveOptional | null };\nexport const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveNullish = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullish | null | undefined : M[K][P];\n}>;\ndeclare const buildNullishLinks: () => { [K in keyof M]?: ResolveNullish | null };\nexport const nullishLinks = buildNullishLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildMixed: () => { [K in keyof M]?: Resolve | false | null };\nexport const mixedUnionCycle = buildMixed<{ Node: { value: number; next: \"ref\" } }>();\nexport const _recursive = 1;\nexport const factory = () => function self() { return self; };\nexport function captured(value: T) {\n const node = { value, next: () => node, consume: (other: T) => node };\n return node;\n}\nexport function nestedCaptured(outer: T) {\n return (inner: U) => {\n const node = {\n outer, inner, next: () => node,\n shadow: (value: T) => ({ outer, inner, value, next: node }),\n };\n return node;\n };\n}\nexport function constrained(key: K) {\n const node = { value: null! as T[K], next: () => node };\n return node;\n}\nexport function optionalCaptured(value: T) {\n type Node = { value: T; next: Node };\n return null! as { node?: Node | false | null };\n}\nexport function annotatedCaptured(value: T) {\n const node: { value: typeof value; next: typeof node } = { value, next: null! };\n return node;\n}\nexport function recursiveTuple(value: T) {\n type Tuple = readonly [T, Tuple];\n return null! as Tuple;\n}\nexport function inferredCaptured() {\n type Node = { value: V; next: Node };\n return null! as (T extends () => infer U ? Node : never);\n}\nexport function mappedCaptured() {\n type Node = { [K in keyof T]: { value: T[K]; next: Node } };\n return null! as Node;\n}\nexport function freshGeneric(unused: T) {\n const recur = (value: U) => recur;\n return recur;\n}\nexport function mutualCaptured(left: T, right: U) {\n type Left = { left: T; next: Right };\n type Right = { right: U; self: Right; next: Left };\n return { left: null! as Left, right: null! as Right };\n}\nexport class CapturedClass {\n constructor(public value: T) {}\n make(inner: U) {\n const node = { outer: this.value, inner, next: () => node };\n return node;\n }\n}\nexport function covariantClass() {\n return class Node {\n value!: T;\n next(): Node { return this; }\n };\n}\nexport function contravariantClass() {\n return class Node {\n consume!: (value: T) => void;\n next(): Node { return this; }\n };\n}\nexport namespace Nested {\n export function captured(value: T) {\n const node = { value, next: () => node };\n return node;\n }\n}\ntype NonNullable = \"shadowed\";\n// comment-only edit\n", + "signature": "67d95aa5b29b3462564c69678c5a8fa4-export declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: () => {\n call: typeof objectReturn;\n};\nexport declare const tupleReturn: () => readonly [typeof tupleReturn];\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: {\n value: number;\n next: () => typeof object;\n};\nexport declare const method: {\n value: number;\n next(): typeof method;\n};\nexport declare const accessor: {\n value: number;\n readonly next: typeof accessor;\n};\nexport declare const tuple: readonly [() => typeof tuple];\nexport declare const array: (() => typeof array)[];\nexport declare const nested: {\n inner: {\n next(): {\n next(): (typeof nested)[\"inner\"];\n };\n };\n};\nexport declare const memberTuple: readonly [() => (typeof memberTuple)[0]];\nexport declare const memberArray: (() => (typeof memberArray)[0])[];\nexport declare const quoted: {\n \"a-b\": () => (typeof quoted)[\"a-b\"];\n};\nexport declare const numeric: {\n 0: () => (typeof numeric)[0];\n};\nexport declare const key: unique symbol;\nexport declare const computed: {\n [key]: () => (typeof computed)[typeof key];\n};\nexport declare const union: {\n next: () => typeof union;\n} | undefined;\nexport declare const specialized: {\n value: string;\n next: () => typeof specialized;\n};\nexport declare const indexed: {\n [key: string]: typeof indexed;\n};\nexport declare const mapped: {\n next: typeof mapped;\n};\nexport declare const viaAnnotation: {\n value: string;\n next: () => typeof viaAnnotation;\n};\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: typeof hiddenAlias;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"first\"];\n };\n second: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"second\"];\n };\n};\nexport declare const parenthesized: () => typeof parenthesized;\nexport declare const asserted: () => typeof asserted;\nexport declare class Methods {\n static recur(): (typeof Methods)[\"recur\"];\n static \"a-b\"(): (typeof Methods)[\"a-b\"];\n static [key](): (typeof Methods)[typeof key];\n recur(): Methods[\"recur\"];\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n};\nexport declare const nestedNumber: {\n nested(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n constrained(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n copied(inner: U): {\n outer: number;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n};\nexport declare const mappedCycle: any;\nexport declare const mappedCycleCopy: any;\nexport declare const nestedCycle: any;\nexport declare const cycleKey: unique symbol;\nexport declare const keyedCycles: any;\nexport declare const sharedCycles: any;\nexport declare const mutualCycle: any;\nexport declare const shadowedCycle: any;\nexport declare const optionalCycle: any;\nexport declare const nullableCycle: any;\nexport declare const mixedCycles: any;\nexport declare const sharedOptionalCycles: any;\nexport declare const nullableKeys: any;\nexport declare const nullableRoot: any;\nexport declare const optionalRoot: any;\nexport declare const nullableLinks: any;\nexport declare const optionalNullableLinks: any;\nexport declare const nullableOptionalLinks: any;\nexport declare const nullishLinks: any;\nexport declare const mixedUnionCycle: any;\nexport declare const _recursive = 1;\nexport declare const factory: any;\nexport declare function captured(value: T): any;\nexport declare function nestedCaptured(outer: T): any;\nexport declare function constrained(key: K): any;\nexport declare function optionalCaptured(value: T): any;\nexport declare function annotatedCaptured(value: T): any;\nexport declare function recursiveTuple(value: T): any;\nexport declare function inferredCaptured(): any;\nexport declare function mappedCaptured(): any;\nexport declare function freshGeneric(unused: T): any;\nexport declare function mutualCaptured(left: T, right: U): any;\nexport declare class CapturedClass {\n value: T;\n constructor(value: T);\n make(inner: U): any;\n}\nexport declare function covariantClass(): any;\nexport declare function contravariantClass(): any;\nexport declare namespace Nested {\n function captured(value: T): any;\n}\n\n(3735,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmappedCycle\n\n(3813,15): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmappedCycleCopy\n\n(3857,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnestedCycle\n\n(3982,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nkeyedCycles\n\n(4154,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nsharedCycles\n\n(4463,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmutualCycle\n\n(4862,13): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nshadowedCycle\n\n(5024,13): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\noptionalCycle\n\n(5192,13): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnullableCycle\n\n(5355,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmixedCycles\n\n(5403,20): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nsharedOptionalCycles\n\n(5488,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnullableKeys\n\n(5739,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnullableRoot\n\n(5905,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\noptionalRoot\n\n(6232,13): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnullableLinks\n\n(6427,21): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\noptionalNullableLinks\n\n(6785,21): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnullableOptionalLinks\n\n(7139,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnullishLinks\n\n(7316,15): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmixedUnionCycle\n\n(7432,7): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nfactory\n\n(7498,8): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ncaptured\n\n(7632,14): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnestedCaptured\n\n(7892,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nconstrained\n\n(8058,16): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\noptionalCaptured\n\n(8202,17): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nannotatedCaptured\n\n(8355,14): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nrecursiveTuple\n\n(8468,16): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ninferredCaptured\n\n(8623,14): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmappedCaptured\n\n(8754,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nfreshGeneric\n\n(8861,14): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmutualCaptured\n\n(9134,4): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmake\n\n(9278,14): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ncovariantClass\n\n(9413,18): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ncontravariantClass\n\n(9600,8): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ncaptured\n", "impliedNodeFormat": 1 } } ], "options": { "composite": true, + "exactOptionalPropertyTypes": true, "outDir": "./", "strict": true }, - "latestChangedDtsFile": "./index.d.ts", - "size": 11175 + "emitDiagnosticsPerFile": [ + [ + "../index.ts", + [ + { + "pos": 3735, + "end": 3746, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "mappedCycle" + ] + }, + { + "pos": 3813, + "end": 3828, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "mappedCycleCopy" + ] + }, + { + "pos": 3857, + "end": 3868, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "nestedCycle" + ] + }, + { + "pos": 3982, + "end": 3993, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "keyedCycles" + ] + }, + { + "pos": 4154, + "end": 4166, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "sharedCycles" + ] + }, + { + "pos": 4463, + "end": 4474, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "mutualCycle" + ] + }, + { + "pos": 4862, + "end": 4875, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "shadowedCycle" + ] + }, + { + "pos": 5024, + "end": 5037, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "optionalCycle" + ] + }, + { + "pos": 5192, + "end": 5205, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "nullableCycle" + ] + }, + { + "pos": 5355, + "end": 5366, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "mixedCycles" + ] + }, + { + "pos": 5403, + "end": 5423, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "sharedOptionalCycles" + ] + }, + { + "pos": 5488, + "end": 5500, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "nullableKeys" + ] + }, + { + "pos": 5739, + "end": 5751, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "nullableRoot" + ] + }, + { + "pos": 5905, + "end": 5917, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "optionalRoot" + ] + }, + { + "pos": 6232, + "end": 6245, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "nullableLinks" + ] + }, + { + "pos": 6427, + "end": 6448, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "optionalNullableLinks" + ] + }, + { + "pos": 6785, + "end": 6806, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "nullableOptionalLinks" + ] + }, + { + "pos": 7139, + "end": 7151, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "nullishLinks" + ] + }, + { + "pos": 7316, + "end": 7331, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "mixedUnionCycle" + ] + }, + { + "pos": 7432, + "end": 7439, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "factory" + ] + }, + { + "pos": 7498, + "end": 7506, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "captured" + ] + }, + { + "pos": 7632, + "end": 7646, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "nestedCaptured" + ] + }, + { + "pos": 7892, + "end": 7903, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "constrained" + ] + }, + { + "pos": 8058, + "end": 8074, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "optionalCaptured" + ] + }, + { + "pos": 8202, + "end": 8219, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "annotatedCaptured" + ] + }, + { + "pos": 8355, + "end": 8369, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "recursiveTuple" + ] + }, + { + "pos": 8468, + "end": 8484, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "inferredCaptured" + ] + }, + { + "pos": 8623, + "end": 8637, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "mappedCaptured" + ] + }, + { + "pos": 8754, + "end": 8766, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "freshGeneric" + ] + }, + { + "pos": 8861, + "end": 8875, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "mutualCaptured" + ] + }, + { + "pos": 9134, + "end": 9138, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "make" + ] + }, + { + "pos": 9278, + "end": 9292, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "covariantClass" + ] + }, + { + "pos": 9413, + "end": 9431, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "contravariantClass" + ] + }, + { + "pos": 9600, + "end": 9608, + "code": 5088, + "category": 1, + "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", + "messageArgs": [ + "captured" + ] + } + ] + ] + ], + "emitSignatures": [ + { + "file": "../index.ts", + "original": 2 + } + ], + "size": 31375 } producer/tsconfig.json:: @@ -1073,7 +2601,6 @@ Signatures:: consumer/tsconfig.json:: SemanticDiagnostics:: *refresh* /home/src/tslibs/TS/Lib/lib.es2026.full.d.ts -*refresh* /home/src/workspaces/project/producer/dist/index.d.ts *refresh* /home/src/workspaces/project/consumer/index.ts Signatures:: @@ -1083,105 +2610,262 @@ Edit [2]:: no change tsgo --build consumer ExitStatus:: DiagnosticsPresent_OutputsGenerated Output:: -consumer/index.ts:58:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. +producer/index.ts:83:14 - error TS5088: The inferred type of 'mappedCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +83 export const mappedCycle = build<{ Node: { value: number; next: "ref" } }>(); +   ~~~~~~~~~~~ + +producer/index.ts:84:14 - error TS5088: The inferred type of 'mappedCycleCopy' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +84 export const mappedCycleCopy = mappedCycle; +   ~~~~~~~~~~~~~~~ + +producer/index.ts:85:14 - error TS5088: The inferred type of 'nestedCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +85 export const nestedCycle = { wrapped: build<{ Node: { value: string; next: "ref" } }>() }; +   ~~~~~~~~~~~ + +producer/index.ts:87:14 - error TS5088: The inferred type of 'keyedCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +87 export const keyedCycles = build<{ +   ~~~~~~~~~~~ + +producer/index.ts:92:14 - error TS5088: The inferred type of 'sharedCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +92 export const sharedCycles = { first: mappedCycle, second: mappedCycle }; +   ~~~~~~~~~~~~ + +producer/index.ts:97:14 - error TS5088: The inferred type of 'mutualCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +97 export const mutualCycle = buildMutual<{ +   ~~~~~~~~~~~ + +producer/index.ts:105:14 - error TS5088: The inferred type of 'shadowedCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +105 export const shadowedCycle = buildShadowed<{ Node: { value: number; next: "ref" } }>(); +   ~~~~~~~~~~~~~ + +producer/index.ts:107:14 - error TS5088: The inferred type of 'optionalCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +107 export const optionalCycle = buildOptional<{ Node: { value: number; next: "ref" } }>(); +   ~~~~~~~~~~~~~ -58 const invalid: number = arrow()()(); -   ~~~~~~~ +producer/index.ts:109:14 - error TS5088: The inferred type of 'nullableCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -consumer/index.ts:59:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. +109 export const nullableCycle = buildNullable<{ Node: { value: string; next: "ref" } }>(); +   ~~~~~~~~~~~~~ -59 const invalidExpression: number = expression()()(); -   ~~~~~~~~~~~~~~~~~ +producer/index.ts:111:14 - error TS5088: The inferred type of 'mixedCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -consumer/index.ts:60:7 - error TS2322: Type '() => { call: ...; }' is not assignable to type 'number'. +111 export const mixedCycles = wrap(optionalCycle); +   ~~~~~~~~~~~ -60 const invalidObject: number = objectReturn().call; -   ~~~~~~~~~~~~~ +producer/index.ts:112:14 - error TS5088: The inferred type of 'sharedOptionalCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -consumer/index.ts:61:7 - error TS2322: Type '() => readonly [...]' is not assignable to type 'number'. +112 export const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle }; +   ~~~~~~~~~~~~~~~~~~~~ -61 const invalidTuple: number = tupleReturn()[0]; -   ~~~~~~~~~~~~ +producer/index.ts:113:14 - error TS5088: The inferred type of 'nullableKeys' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -consumer/index.ts:62:7 - error TS2322: Type '(shadowed: number) => ...' is not assignable to type 'number'. +113 export const nullableKeys = buildNullable<{ +   ~~~~~~~~~~~~ -62 const invalidShadowed: number = shadowed(1); -   ~~~~~~~~~~~~~~~ +producer/index.ts:119:14 - error TS5088: The inferred type of 'nullableRoot' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -consumer/index.ts:63:7 - error TS2322: Type 'number' is not assignable to type 'string'. +119 export const nullableRoot = buildNullableRoot<{ Node: { value: number; next: "ref" } }>(); +   ~~~~~~~~~~~~ -63 const invalidObjectValue: string = object.next().value; -   ~~~~~~~~~~~~~~~~~~ +producer/index.ts:121:14 - error TS5088: The inferred type of 'optionalRoot' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -consumer/index.ts:64:7 - error TS2322: Type 'readonly [() => ...]' is not assignable to type 'number'. +121 export const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: "ref" } }>(); +   ~~~~~~~~~~~~ -64 const invalidTupleValue: number = tuple[0](); -   ~~~~~~~~~~~~~~~~~ +producer/index.ts:126:14 - error TS5088: The inferred type of 'nullableLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -consumer/index.ts:65:7 - error TS2322: Type 'string' is not assignable to type 'number'. +126 export const nullableLinks = buildNullableLinks<{ Node: { value: number; next: "ref" } }>(); +   ~~~~~~~~~~~~~ -65 const invalidSpecialized: number = specialized.next().value; -   ~~~~~~~~~~~~~~~~~~ +producer/index.ts:128:14 - error TS5088: The inferred type of 'optionalNullableLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -consumer/index.ts:66:7 - error TS2322: Type '{ next: ...; }' is not assignable to type 'number'. +128 export const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: "ref" } }>(); +   ~~~~~~~~~~~~~~~~~~~~~ -66 const invalidMapped: number = mapped.next; -   ~~~~~~~~~~~~~ +producer/index.ts:133:14 - error TS5088: The inferred type of 'nullableOptionalLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -consumer/index.ts:67:7 - error TS2322: Type 'string' is not assignable to type 'number'. +133 export const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: "ref" } }>(); +   ~~~~~~~~~~~~~~~~~~~~~ -67 const invalidAnnotation: number = viaAnnotation.next().value; -   ~~~~~~~~~~~~~~~~~ +producer/index.ts:138:14 - error TS5088: The inferred type of 'nullishLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -consumer/index.ts:68:7 - error TS2322: Type 'string' is not assignable to type 'number'. +138 export const nullishLinks = buildNullishLinks<{ Node: { value: number; next: "ref" } }>(); +   ~~~~~~~~~~~~ -68 const invalidLink: number = nextLink.next.value; -   ~~~~~~~~~~~ +producer/index.ts:140:14 - error TS5088: The inferred type of 'mixedUnionCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -consumer/index.ts:69:7 - error TS2322: Type 'number' is not assignable to type 'string'. +140 export const mixedUnionCycle = buildMixed<{ Node: { value: number; next: "ref" } }>(); +   ~~~~~~~~~~~~~~~ -69 const invalidCallable: string = nextCallable(1).link.value; -   ~~~~~~~~~~~~~~~ +producer/index.ts:142:14 - error TS5088: The inferred type of 'factory' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -consumer/index.ts:70:7 - error TS2322: Type 'string' is not assignable to type 'number'. +142 export const factory = () => function self() { return self; }; +   ~~~~~~~ -70 const invalidHiddenValue: number = hiddenAlias.next.next.value; -   ~~~~~~~~~~~~~~~~~~ +producer/index.ts:143:17 - error TS5088: The inferred type of 'captured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -consumer/index.ts:71:7 - error TS2322: Type '() => (typeof Methods)["recur"]' is not assignable to type 'number'. +143 export function captured(value: T) { +   ~~~~~~~~ -71 const invalidMethod: number = Methods.recur()(); -   ~~~~~~~~~~~~~ +producer/index.ts:147:17 - error TS5088: The inferred type of 'nestedCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -consumer/index.ts:72:7 - error TS2322: Type '() => (typeof Methods)[typeof key]' is not assignable to type 'number'. +147 export function nestedCaptured(outer: T) { +   ~~~~~~~~~~~~~~ -72 const invalidComputedMethod: number = Methods[key]()(); -   ~~~~~~~~~~~~~~~~~~~~~ +producer/index.ts:156:17 - error TS5088: The inferred type of 'constrained' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -consumer/index.ts:73:7 - error TS2322: Type 'string' is not assignable to type 'boolean'. +156 export function constrained(key: K) { +   ~~~~~~~~~~~ -73 const invalidNestedOuter: boolean = nestedString.outer; -   ~~~~~~~~~~~~~~~~~~ +producer/index.ts:160:17 - error TS5088: The inferred type of 'optionalCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -consumer/index.ts:74:7 - error TS2322: Type 'number' is not assignable to type 'string'. +160 export function optionalCaptured(value: T) { +   ~~~~~~~~~~~~~~~~ -74 const invalidNestedInner: string = nestedString.inner; -   ~~~~~~~~~~~~~~~~~~ +producer/index.ts:164:17 - error TS5088: The inferred type of 'annotatedCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -consumer/index.ts:75:26 - error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. +164 export function annotatedCaptured(value: T) { +   ~~~~~~~~~~~~~~~~~ -75 nestedNumber.constrained("wrong"); -   ~~~~~~~ +producer/index.ts:168:17 - error TS5088: The inferred type of 'recursiveTuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +168 export function recursiveTuple(value: T) { +   ~~~~~~~~~~~~~~ -Found 18 errors in the same file, starting at: consumer/index.ts:58 +producer/index.ts:172:17 - error TS5088: The inferred type of 'inferredCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +172 export function inferredCaptured() { +   ~~~~~~~~~~~~~~~~ + +producer/index.ts:176:17 - error TS5088: The inferred type of 'mappedCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +176 export function mappedCaptured() { +   ~~~~~~~~~~~~~~ + +producer/index.ts:180:17 - error TS5088: The inferred type of 'freshGeneric' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +180 export function freshGeneric(unused: T) { +   ~~~~~~~~~~~~ + +producer/index.ts:184:17 - error TS5088: The inferred type of 'mutualCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +184 export function mutualCaptured(left: T, right: U) { +   ~~~~~~~~~~~~~~ + +producer/index.ts:191:5 - error TS5088: The inferred type of 'make' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +191 make(inner: U) { +   ~~~~ + +producer/index.ts:196:17 - error TS5088: The inferred type of 'covariantClass' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +196 export function covariantClass() { +   ~~~~~~~~~~~~~~ + +producer/index.ts:202:17 - error TS5088: The inferred type of 'contravariantClass' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +202 export function contravariantClass() { +   ~~~~~~~~~~~~~~~~~~ + +producer/index.ts:209:21 - error TS5088: The inferred type of 'captured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. + +209 export function captured(value: T) { +   ~~~~~~~~ + +consumer/index.ts:1:88 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +1 import { arrow, expression, first, generic, objectReturn, tupleReturn, shadowed } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:2:64 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +2 import { object, method, accessor, tuple, array, nested } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:3:94 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +3 import { memberTuple, memberArray, quoted, numeric, key, computed, union, specialized } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:4:48 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +4 import { indexed, mapped, viaAnnotation } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:5:86 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +5 import { nextLink, nextCallable, parenthesized, asserted, Methods, overloaded } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:6:51 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +6 import { hiddenAlias, siblingHiddenAliases } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:7:30 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +7 import { nestedNumber } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:8:124 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +8 import { mappedCycle, mappedCycleCopy, nestedCycle, cycleKey, keyedCycles, sharedCycles, mutualCycle, shadowedCycle } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:9:152 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +9 import { optionalCycle, nullableCycle, mixedCycles, sharedOptionalCycles, nullableKeys, nullableRoot, optionalRoot, nullableLinks, nullishLinks } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:10:62 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +10 import { optionalNullableLinks, nullableOptionalLinks } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:11:142 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +11 import { mixedUnionCycle, factory, captured, nestedCaptured, constrained, optionalCaptured, annotatedCaptured, recursiveTuple, Nested } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:12:80 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +12 import { inferredCaptured, mappedCaptured, freshGeneric, mutualCaptured } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:13:31 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +13 import { CapturedClass } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:14:52 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. + +14 import { covariantClass, contravariantClass } from "../producer/dist/index.js"; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +Found 48 errors in 2 files. + +Errors Files + 14 consumer/index.ts:1 + 34 producer/index.ts:83 //// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo] *rewrite with same content* //// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo.readable.baseline.txt] *rewrite with same content* +producer/tsconfig.json:: +SemanticDiagnostics:: +Signatures:: + consumer/tsconfig.json:: SemanticDiagnostics:: *refresh* /home/src/tslibs/TS/Lib/lib.es2026.full.d.ts -*refresh* /home/src/workspaces/project/producer/dist/index.d.ts *refresh* /home/src/workspaces/project/consumer/index.ts Signatures:: diff --git a/tsc/testdata/tests/cases/compiler/recursiveFunctionDeclarationSerialization.ts b/tsc/testdata/tests/cases/compiler/recursiveFunctionDeclarationSerialization.ts index 21f4a0718bb77..eab02793e124a 100644 --- a/tsc/testdata/tests/cases/compiler/recursiveFunctionDeclarationSerialization.ts +++ b/tsc/testdata/tests/cases/compiler/recursiveFunctionDeclarationSerialization.ts @@ -243,3 +243,238 @@ export type Inferred = T extends (value: infer U) => infer R export declare const inferred: Inferred<(value: number) => { next: typeof reused }>; export const inferredCopy = inferred; const inferredValue: string = inferredCopy.next(1).second("text").value; + +// @filename: mappedCycles.ts +type Show = { [K in keyof T]: T[K] } & unknown; +type Resolve = Show<{ + [P in keyof M[K]]: M[K][P] extends "ref" ? Resolve : M[K][P]; +}>; +declare const build: () => { [K in keyof M]: Resolve }; +export const mappedCycle = build<{ Node: { value: number; next: "ref" } }>(); +export const mappedCycleCopy = mappedCycle; +export const nestedCycle = { wrapped: build<{ Node: { value: string; next: "ref" } }>() }; +export const cycleKey = Symbol(); +export const keyedCycles = build<{ + "a-b": { value: string; next: "ref" }; + 0: { value: boolean; next: "ref" }; + [cycleKey]: { value: number; next: "ref" }; +}>(); +export const sharedCycles = { + first: mappedCycle, + second: mappedCycle, +}; +export const broadCycle: { Node: unknown } = mappedCycle; + +type ResolveMutual = Show<{ + [P in keyof M[K]]: M[K][P] extends { ref: infer R extends keyof M } ? ResolveMutual : M[K][P]; +}>; +declare const buildMutual: () => { [K in keyof M]: ResolveMutual }; +export const mutualCycle = buildMutual<{ + First: { value: number; next: { ref: "Second" } }; + Second: { value: string; next: { ref: "First" } }; +}>(); + +const mappedValue: number = mappedCycle.Node.next.next.value; +const nestedMappedValue: string = nestedCycle.wrapped.Node.next.next.value; +const quotedMappedValue: string = keyedCycles["a-b"].next.next.value; +const numericMappedValue: boolean = keyedCycles[0].next.next.value; +const symbolMappedValue: number = keyedCycles[cycleKey].next.next.value; +const sharedMappedValue: number = sharedCycles.second.Node.next.next.value; +const mutualFirstValue: number = mutualCycle.First.next.next.value; +const mutualSecondValue: string = mutualCycle.First.next.value; +const invalidMappedValue: string = mappedCycle.Node.next.next.value; +const invalidMutualValue: number = mutualCycle.First.next.value; + +// @filename: optionalMappedCycle.ts +type Show = { [K in keyof T]: T[K] } & unknown; +type Resolve = Show<{ + [P in keyof M[K]]: M[K][P] extends "ref" ? Resolve : M[K][P]; +}>; +declare const build: () => { [K in keyof M]?: Resolve }; +export const optionalCycle = build<{ Node: { value: number; next: "ref" } }>(); +const optionalValue: number | undefined = optionalCycle.Node?.next.next.value; +export const optionalCopy = optionalCycle; +declare const buildNullable: () => { [K in keyof M]: Resolve | null }; +export const nullableCycle = buildNullable<{ Node: { value: string; next: "ref" } }>(); +declare const wrap: (value: T) => { required: T; optional?: T | null }; +export const mixedCycles = wrap(optionalCycle); +export const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle }; +export const nullableKey = Symbol(); +export const nullableKeys = buildNullable<{ + "a-b": { value: string; next: "ref" }; + 0: { value: boolean; next: "ref" }; + [nullableKey]: { value: number; next: "ref" }; +}>(); +declare const buildNullableRoot: () => Resolve | null; +export const nullableRoot = buildNullableRoot<{ Node: { value: number; next: "ref" } }>(); +declare const buildOptionalRoot: () => Resolve | undefined; +export const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: "ref" } }>(); +type ResolveNullable = Show<{ + [P in keyof M[K]]: M[K][P] extends "ref" ? ResolveNullable | null : M[K][P]; +}>; +declare const buildNullableLinks: () => { [K in keyof M]: ResolveNullable | null }; +export const nullableLinks = buildNullableLinks<{ Node: { value: number; next: "ref" } }>(); +declare const buildOptionalNullableLinks: () => { [K in keyof M]?: ResolveNullable | null }; +export const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: "ref" } }>(); +type ResolveOptional = Show<{ + [P in keyof M[K]]: M[K][P] extends "ref" ? ResolveOptional | undefined : M[K][P]; +}>; +declare const buildNullableOptionalLinks: () => { [K in keyof M]: ResolveOptional | null }; +export const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: "ref" } }>(); +type ResolveNullish = Show<{ + [P in keyof M[K]]: M[K][P] extends "ref" ? ResolveNullish | null | undefined : M[K][P]; +}>; +declare const buildNullishLinks: () => { [K in keyof M]?: ResolveNullish | null }; +export const nullishLinks = buildNullishLinks<{ Node: { value: number; next: "ref" } }>(); +type NonNullable = "shadowed"; +type OptionalNode = (typeof optionalCycle)["Node"] & {}; +type NullableNode = (typeof nullableCycle)["Node"] & {}; +type NullableLinkNode = (typeof nullableLinks)["Node"] & {}; +type NullishLinkNode = (typeof nullishLinks)["Node"] & {}; +type OptionalNullableLinkNode = (typeof optionalNullableLinks)["Node"] & {}; +type NullableOptionalLinkNode = (typeof nullableOptionalLinks)["Node"] & {}; +const copiedValue: number | undefined = optionalCopy.Node?.next.next.value; +const nullableValue: string | undefined = nullableCycle.Node?.next.next.value; +const mixedValue: number | undefined = mixedCycles.optional?.Node?.next.next.value; +const sharedValue: number | undefined = sharedOptionalCycles.second.Node?.next.next.value; +const quotedValue: string | undefined = nullableKeys["a-b"]?.next.next.value; +const numericValue: boolean | undefined = nullableKeys[0]?.next.next.value; +const symbolValue: number | undefined = nullableKeys[nullableKey]?.next.next.value; +const nullableRootValue: number | undefined = nullableRoot?.next.next.value; +const optionalRootValue: string | undefined = optionalRoot?.next.next.value; +const nullableLinkValue: number | undefined = nullableLinks.Node?.next?.next?.value; +const nullishLinkValue: number | undefined = nullishLinks.Node?.next?.next?.value; +const optionalNullableLinkValue: number | undefined = optionalNullableLinks.Node?.next?.next?.value; +const nullableOptionalLinkValue: number | undefined = nullableOptionalLinks.Node?.next?.next?.value; +const optionalNextHasNull: null extends OptionalNode["next"] ? true : false = false; +const optionalNextHasUndefined: undefined extends OptionalNode["next"] ? true : false = false; +const nullableNextHasNull: null extends NullableNode["next"] ? true : false = false; +const nullableNextHasUndefined: undefined extends NullableNode["next"] ? true : false = false; +const nullableLinkHasNull: null extends NullableLinkNode["next"] ? true : false = true; +const nullableLinkHasUndefined: undefined extends NullableLinkNode["next"] ? true : false = false; +const nullishLinkHasNull: null extends NullishLinkNode["next"] ? true : false = true; +const nullishLinkHasUndefined: undefined extends NullishLinkNode["next"] ? true : false = true; +const optionalNullableLinkHasNull: null extends OptionalNullableLinkNode["next"] ? true : false = true; +const optionalNullableLinkHasUndefined: undefined extends OptionalNullableLinkNode["next"] ? true : false = false; +const nullableOptionalLinkHasNull: null extends NullableOptionalLinkNode["next"] ? true : false = false; +const nullableOptionalLinkHasUndefined: undefined extends NullableOptionalLinkNode["next"] ? true : false = true; +const invalidNullNext: OptionalNode["next"] = null; +const invalidUndefinedNext: OptionalNode["next"] = undefined; +const invalidNullableLinkValue: number = nullableLinks.Node!.next.value; +const invalidNullishLinkValue: number = nullishLinks.Node!.next.value; + +// @filename: mixedMappedCycle.ts +type Show = { [K in keyof T]: T[K] } & unknown; +type Resolve = Show<{ + [P in keyof M[K]]: M[K][P] extends "ref" ? Resolve : M[K][P]; +}>; +declare const build: () => { [K in keyof M]: Resolve | false | null }; +export const mixedCycle = build<{ Node: { value: number; next: "ref" } }>(); +if (mixedCycle.Node) { + const value: number = mixedCycle.Node.next.next.value; +} + +// @filename: anonymousBindings.ts +export const _recursive = 1; +export const factory = () => function self() { return self; }; +export function captured(value: T) { + const node = { value, next: () => node, consume: (other: T) => node }; + return node; +} +export function nestedCaptured(outer: T) { + return (inner: U) => { + const node = { + outer, + inner, + next: () => node, + shadow: (value: T) => ({ outer, inner, value, next: node }), + }; + return node; + }; +} +export function constrained(key: K) { + const node = { value: null! as T[K], next: () => node }; + return node; +} +export function optionalCaptured(value: T) { + type Node = { value: T; next: Node }; + return null! as { node?: Node | false | null }; +} +export function annotatedCaptured(value: T) { + const node: { value: typeof value; next: typeof node } = { value, next: null! }; + return node; +} +export function recursiveTuple(value: T) { + type Tuple = readonly [T, Tuple]; + return null! as Tuple; +} +export function inferredCaptured() { + type Node = { value: V; next: Node }; + return null! as (T extends () => infer U ? Node : never); +} +export function mappedCaptured() { + type Node = { [K in keyof T]: { value: T[K]; next: Node } }; + return null! as Node; +} +export function freshGeneric(unused: T) { + const recur = (value: U) => recur; + return recur; +} +export function mutualCaptured(left: T, right: U) { + type Left = { left: T; next: Right }; + type Right = { right: U; self: Right; next: Left }; + return { left: null! as Left, right: null! as Right }; +} +export class CapturedClass { + constructor(public value: T) {} + make(inner: U) { + const node = { outer: this.value, inner, next: () => node }; + return node; + } +} +export function covariantClass() { + return class Node { + value!: T; + next(): Node { return this; } + }; +} +export function contravariantClass() { + return class Node { + consume!: (value: T) => void; + next(): Node { return this; } + }; +} +export namespace Nested { + export function captured(value: T) { + const node = { value, next: () => node }; + return node; + } +} +const capturedValue: string = captured("text").next().consume("other").value; +const nestedValue = nestedCaptured(1)("text").shadow(true).next.next(); +const nestedOuter: number = nestedValue.outer; +const nestedInner: string = nestedValue.inner; +const constrainedValue: number = constrained<{ value: number }, "value">("value").next().value; +const annotatedValue: string = annotatedCaptured("text").next.next.value; +const tupleValue: string = recursiveTuple("text")[1][1][0]; +const namespaceValue: number = Nested.captured(1).next().next().value; +const inferredValue: string = inferredCaptured<() => string>().next.next.value; +const mappedValue: number = mappedCaptured<{ value: number }>().value.next.value.value; +const freshValue = freshGeneric(1)("text")(true)(2); +const mutualValue: string = mutualCaptured(1, "text").left.next.self.next.next.right; +const classValue: string = new CapturedClass("text").make("other").next().outer; +const optional = optionalCaptured("text"); +if (optional.node) { + const value: string = optional.node.next.next.value; +} +captured("text").consume(1); +const invalidTupleValue: number = recursiveTuple("text")[1][0]; + +// @filename: shadowedMappedCycle.ts +type Show = { [K in keyof T]: T[K] } & unknown; +type Resolve = Show<{ + [P in keyof M[K]]: M[K][P] extends "ref" ? (shadowedCycle: T) => Resolve : M[K][P]; +}>; +declare const build: () => { [K in keyof M]: Resolve }; +export const shadowedCycle = build<{ Node: { value: number; next: "ref" } }>(); +const shadowedValue: number = shadowedCycle.Node.next(1).next("text").value; From 0c0344319e09bdc70e73f9c9ddeed77c876339e7 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Thu, 8 Oct 2026 20:43:18 -0700 Subject: [PATCH 4/5] Bind anonymous recursive types during declaration serialization Value projections do not necessarily denote the recursive constituent being serialized, especially through optional or union-valued members. Anonymous cycles therefore need bindings independent of their placement inside an exported declaration. Captured generic scopes and declaration visibility must survive that representation so consumers retain the original recursive relationships. Fixes 52415 Fixes 64656 For 44045 --- tsc/internal/checker/nodebuilder.go | 16 +- tsc/internal/checker/nodebuilderbindings.go | 227 ++ tsc/internal/checker/nodebuilderimpl.go | 143 +- tsc/internal/checker/nodebuilderscopes.go | 133 +- tsc/internal/checker/pseudotypenodebuilder.go | 2 +- tsc/internal/checker/symboltracker.go | 1 + tsc/internal/nodebuilder/types.go | 7 + .../transformers/declarations/tracker.go | 10 + .../transformers/declarations/transform.go | 17 + ...latNoCrashInferenceDeclarations.errors.txt | 21 - ...rayFakeFlatNoCrashInferenceDeclarations.js | 12 + ...clarationEmitInferredTypeAlias4.errors.txt | 5 +- .../declarationEmitInferredTypeAlias4.js | 7 + ...tStaticMethodNonIdentifierNames.errors.txt | 74 - ...ationEmitStaticMethodNonIdentifierNames.js | 37 + ...larationEmitUnserializableTypes.errors.txt | 11 +- .../declarationEmitUnserializableTypes.js | 14 + ...lassExpressionInDeclarationFile.errors.txt | 36 - .../emitClassExpressionInDeclarationFile.js | 40 + ...isolatedDeclarationErrorsReturnTypes.types | 2 +- ...ithPrototypeNoErrorTruncationNoCrash.types | 4 +- .../compiler/noImplicitThisBigThis.errors.txt | 57 - .../compiler/noImplicitThisBigThis.js | 35 + ...ntainerDeclarationSerialization.errors.txt | 48 - ...ursiveContainerDeclarationSerialization.js | 10 + ...unctionDeclarationSerialization.errors.txt | 139 +- ...cursiveFunctionDeclarationSerialization.js | 347 ++- ...siveFunctionDeclarationSerialization.types | 18 +- ...eMappedDeclarationSerialization.errors.txt | 5 +- ...SImportNestedClassTypeReference.errors.txt | 5 +- .../commonJSImportNestedClassTypeReference.js | 8 + ...ibleWithinNestedClass(target=es2015).types | 12 +- ...ibleWithinNestedClass(target=es2015).types | 12 +- .../varianceAnnotations.errors.txt | 5 +- .../conformance/varianceAnnotations.js | 118 + .../recursiveFunctionCallQuickInfo.baseline | 26 +- ...ursive-function-declaration-consumption.js | 2363 +++++++---------- ...e-with-multiple-files-and-complex-types.js | 12 +- ...ve-tagged-tuple-after-incremental-edits.js | 24 +- 39 files changed, 2104 insertions(+), 1959 deletions(-) create mode 100644 tsc/internal/checker/nodebuilderbindings.go delete mode 100644 tsc/testdata/baselines/reference/compiler/arrayFakeFlatNoCrashInferenceDeclarations.errors.txt delete mode 100644 tsc/testdata/baselines/reference/compiler/declarationEmitStaticMethodNonIdentifierNames.errors.txt delete mode 100644 tsc/testdata/baselines/reference/compiler/emitClassExpressionInDeclarationFile.errors.txt delete mode 100644 tsc/testdata/baselines/reference/compiler/noImplicitThisBigThis.errors.txt delete mode 100644 tsc/testdata/baselines/reference/compiler/recursiveContainerDeclarationSerialization.errors.txt diff --git a/tsc/internal/checker/nodebuilder.go b/tsc/internal/checker/nodebuilder.go index e6ccb962191f7..7cf7ffb339359 100644 --- a/tsc/internal/checker/nodebuilder.go +++ b/tsc/internal/checker/nodebuilder.go @@ -54,8 +54,17 @@ func (b *NodeBuilder) enterContext(enclosingDeclaration *ast.Node, flags nodebui enclosingSymbolTypes: make(map[ast.SymbolId]*Type), remappedSymbolReferences: make(map[ast.SymbolId]*ast.Symbol), } - tracker = NewSymbolTrackerImpl(b.impl.ctx, tracker) - b.impl.ctx.tracker = tracker + for node := enclosingDeclaration; node != nil; node = node.Parent { + if ast.IsClassLike(node) || ast.IsInterfaceDeclaration(node) { + if symbol := b.impl.ch.getSymbolOfDeclaration(node); symbol != nil { + parameters := b.impl.ch.getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol) + b.impl.ctx.typeParameters = append(parameters, b.impl.ctx.typeParameters...) + } + } + } + wrappedTracker := NewSymbolTrackerImpl(b.impl.ctx, tracker) + b.impl.ctx.tracker = wrappedTracker + b.impl.ctx.typeAliasTracker, _ = wrappedTracker.inner.(nodebuilder.TypeAliasTracker) } // propagateVerbosityOut copies expansion signals from the context to the VerbosityContext output. @@ -102,6 +111,9 @@ func (b *NodeBuilder) exitContextSlice(result []*ast.Node) []*ast.Node { } func (b *NodeBuilder) exitContextCheck() { + if !b.impl.ctx.encounteredError { + b.impl.emitSerializationTypeAliases() + } if b.impl.ctx.truncating && b.impl.ctx.flags&nodebuilder.FlagsNoTruncation != 0 { b.impl.ctx.tracker.ReportTruncationError() } diff --git a/tsc/internal/checker/nodebuilderbindings.go b/tsc/internal/checker/nodebuilderbindings.go new file mode 100644 index 0000000000000..cc0a3f3529f56 --- /dev/null +++ b/tsc/internal/checker/nodebuilderbindings.go @@ -0,0 +1,227 @@ +package checker + +import ( + "slices" + + "github.com/microsoft/TypeScript/tsc/internal/ast" + "github.com/microsoft/TypeScript/tsc/internal/nodebuilder" + "github.com/microsoft/TypeScript/tsc/internal/printer" +) + +type serializationTypeAlias struct { + t *Type + typeId TypeId + name *ast.IdentifierNode + scope *ast.Node + typeParameters []*Type + usedParameters []bool + parameterNodes []*ast.Node + mapper *TypeMapper + body *ast.TypeNode +} + +type serializationTypeAliasReference struct { + alias *serializationTypeAlias + node *ast.TypeReferenceNode + arguments []*ast.TypeNode + owner *serializationTypeAlias + freeArguments []bool +} + +func (ctx *NodeBuilderContext) recordTypeAliasParameter(symbol *ast.Symbol) { + alias := ctx.currentTypeAlias + if alias == nil || ctx.writingTypeAliasArguments || symbol == nil || symbol.Flags&ast.SymbolFlagsTypeParameter == 0 { + return + } + for _, parameter := range ctx.typeParameters[ctx.typeAliasParameterDepth:] { + if parameter.symbol == symbol { + return + } + } + for i, parameter := range alias.typeParameters { + if parameter.symbol == symbol { + alias.usedParameters[i] = true + } + } +} + +func (b *NodeBuilderImpl) createSerializationTypeAlias(expansion *serializationExpansion) *serializationTypeAlias { + // Hoisted helpers need unscoped uniqueness even when first referenced inside a class. + name := b.e.Factory.NewUniqueNameEx("_recursive", printer.AutoGenerateOptions{ + Flags: printer.GeneratedIdentifierFlagsOptimistic, + }) + scope := b.f.NewBlock(b.f.NewNodeList(nil), false) + scope.Parent = b.ctx.typeAliasTracker.TypeAliasScope() + parameters := []*Type{} + for _, parameter := range expansion.typeParameters { + if !slices.Contains(parameters, parameter) { + parameters = append(parameters, parameter) + } + } + alias := &serializationTypeAlias{ + t: expansion.t, + typeId: expansion.typeId, + name: name, + scope: scope, + typeParameters: parameters, + usedParameters: make([]bool, len(parameters)), + parameterNodes: make([]*ast.Node, len(parameters)), + mapper: expansion.mapper, + } + b.ctx.typeAliases = append(b.ctx.typeAliases, alias) + return alias +} + +func (b *NodeBuilderImpl) getSerializationTypeAlias(t *Type) *serializationTypeAlias { + if len(b.ctx.typeAliases) == 0 { + return nil + } + typeId := b.serializationTypeId(t) + for _, alias := range b.ctx.typeAliases { + if b.isSameSerializationType(t, typeId, alias.t, alias.typeId) { + return alias + } + } + return nil +} + +func (b *NodeBuilderImpl) serializationTypeAliasToNode(alias *serializationTypeAlias) *ast.TypeNode { + arguments := make([]*ast.TypeNode, len(alias.typeParameters)) + freeArguments := make([]bool, len(arguments)) + writingArguments := b.ctx.writingTypeAliasArguments + b.ctx.writingTypeAliasArguments = true + for i, parameter := range alias.typeParameters { + arguments[i] = b.typeToTypeNode(parameter) + freeArguments[i] = b.ctx.currentTypeAlias != nil && + !slices.Contains(b.ctx.typeParameters[b.ctx.typeAliasParameterDepth:], parameter) + } + b.ctx.writingTypeAliasArguments = writingArguments + node := b.f.NewTypeReferenceNode(alias.name, b.f.NewNodeList(arguments)) + b.ctx.typeAliasReferences = append(b.ctx.typeAliasReferences, serializationTypeAliasReference{ + alias: alias, node: node.AsTypeReferenceNode(), arguments: arguments, + owner: b.ctx.currentTypeAlias, freeArguments: freeArguments, + }) + b.ctx.approximateLength += len(alias.name.Text()) + return node +} + +func (b *NodeBuilderImpl) enterSerializationTypeAliasScope(alias *serializationTypeAlias) func() { + ctx := b.ctx + bindings, expansions := ctx.bindings, ctx.expansions + parameters, enclosingDeclaration, mapper := ctx.typeParameters, ctx.enclosingDeclaration, ctx.mapper + currentAlias, parameterDepth := ctx.currentTypeAlias, ctx.typeAliasParameterDepth + inferParameters, flags := ctx.inferTypeParameters, ctx.flags + ctx.bindings, ctx.expansions, ctx.typeParameters = nil, nil, nil + ctx.enclosingDeclaration = alias.scope + ctx.mapper = alias.mapper + ctx.currentTypeAlias = alias + ctx.inferTypeParameters = nil + ctx.flags &^= nodebuilder.FlagsInObjectTypeLiteral | nodebuilder.FlagsInTypeAlias + restoreScope := b.enterNewScope(alias.scope, nil, alias.typeParameters, nil, nil) + ctx.typeAliasParameterDepth = len(ctx.typeParameters) + return func() { + restoreScope() + ctx.bindings, ctx.expansions, ctx.typeParameters = bindings, expansions, parameters + ctx.enclosingDeclaration, ctx.mapper = enclosingDeclaration, mapper + ctx.currentTypeAlias, ctx.typeAliasParameterDepth = currentAlias, parameterDepth + ctx.inferTypeParameters, ctx.flags = inferParameters, flags + } +} + +func (b *NodeBuilderImpl) emitSerializationTypeAliases() { + if b.ctx.typeAliasTracker == nil || len(b.ctx.typeAliases) == 0 { + return + } + // Bodies are rebuilt in their destination scope, not moved out of a source signature. + // This also makes lexical value references and captured generic parameters independent. + for { + changed := false + for i := range len(b.ctx.typeAliases) { + alias := b.ctx.typeAliases[i] + if alias.body == nil { + changed = true + restoreScope := b.enterSerializationTypeAliasScope(alias) + b.ctx.flags |= nodebuilder.FlagsInTypeAlias + b.ctx.skipTypeAliasReference = true + alias.body = b.typeToTypeNode(alias.t) + restoreScope() + if alias.body == nil && !b.ctx.encounteredError { + b.ctx.encounteredError = true + b.ctx.tracker.ReportCyclicStructureError() + } + if b.ctx.encounteredError { + return + } + } + } + for _, reference := range b.ctx.typeAliasReferences { + if reference.owner == nil { + continue + } + for i, parameter := range reference.alias.typeParameters { + if !reference.alias.usedParameters[i] || !reference.freeArguments[i] { + continue + } + index := slices.Index(reference.owner.typeParameters, parameter) + if index >= 0 && !reference.owner.usedParameters[index] { + reference.owner.usedParameters[index] = true + changed = true + } + } + } + // Capture constraints can introduce further captures or recursive bindings. + for _, alias := range b.ctx.typeAliases { + restoreScope := b.enterSerializationTypeAliasScope(alias) + for i, parameter := range alias.typeParameters { + if alias.usedParameters[i] && alias.parameterNodes[i] == nil { + var constraint *ast.TypeNode + if t := b.ch.getConstraintOfTypeParameter(parameter); t != nil { + constraint = b.typeToTypeNode(t) + } + var modifiers *ast.ModifierList + if symbol := alias.t.symbol; symbol != nil && symbol.Flags&(ast.SymbolFlagsClass|ast.SymbolFlagsInterface) != 0 && + slices.Contains(b.ch.getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol), parameter) { + if flags := b.ch.getTypeParameterModifiers(parameter) & (ast.ModifierFlagsIn | ast.ModifierFlagsOut); flags != ast.ModifierFlagsNone { + modifiers = b.f.NewModifierList(ast.CreateModifiersFromModifierFlags(flags, b.f.NewModifier)) + } + } + alias.parameterNodes[i] = b.f.NewTypeParameterDeclaration(modifiers, b.typeParameterToName(parameter).AsNode(), constraint, nil, nil) + changed = true + } + } + restoreScope() + if b.ctx.encounteredError { + return + } + } + if !changed { + break + } + } + for _, reference := range b.ctx.typeAliasReferences { + arguments := []*ast.TypeNode{} + for i, argument := range reference.arguments { + if reference.alias.usedParameters[i] { + arguments = append(arguments, argument) + } + } + if len(arguments) == 0 { + reference.node.TypeArguments = nil + } else { + reference.node.TypeArguments = b.f.NewNodeList(arguments) + } + } + for _, alias := range b.ctx.typeAliases { + parameters := []*ast.Node{} + for i, parameter := range alias.parameterNodes { + if alias.usedParameters[i] { + parameters = append(parameters, parameter) + } + } + var parameterList *ast.NodeList + if len(parameters) != 0 { + parameterList = b.f.NewNodeList(parameters) + } + b.ctx.typeAliasTracker.AddTypeAliasDeclaration(b.f.NewTypeAliasDeclaration(nil, alias.name, parameterList, alias.body)) + } +} diff --git a/tsc/internal/checker/nodebuilderimpl.go b/tsc/internal/checker/nodebuilderimpl.go index 25bd98bbf567b..74eafadf0c471 100644 --- a/tsc/internal/checker/nodebuilderimpl.go +++ b/tsc/internal/checker/nodebuilderimpl.go @@ -45,7 +45,9 @@ type CompositeTypeCacheIdentity struct { flags nodebuilder.Flags internalFlags nodebuilder.InternalFlags inferTypeParameters CacheHashKey - definitions CacheHashKey + bindings CacheHashKey + expansions CacheHashKey + typeAliasSupport bool } // A reference's spelling is independent of the definition currently being emitted. @@ -56,14 +58,22 @@ type serializationTypeName struct { path []*Type } -// Definitions include standalone signatures and types emitted syntactically or structurally. -type serializationDefinition struct { - t *Type - typeId TypeId - signature *Signature - symbol *ast.Symbol - depth int - expanding bool +// A value binding denotes its complete annotation, not an arbitrary constituent. +type serializationTypeBinding struct { + t *Type + typeId TypeId + symbol *ast.Symbol + path []*Type + depth int +} + +// Structural graph traversal is independent of the bindings chosen for its cycles. +type serializationExpansion struct { + t *Type + typeId TypeId + typeParameters []*Type + mapper *TypeMapper + alias *serializationTypeAlias } type NodeBuilderLinks struct { @@ -105,8 +115,17 @@ type NodeBuilderContext struct { enclosingSymbolTypes map[ast.SymbolId]*Type suppressReportInferenceFallback bool remappedSymbolReferences map[ast.SymbolId]*ast.Symbol - definitions []serializationDefinition + bindings []serializationTypeBinding + expansions []*serializationExpansion deferredTypeDepth int // Lazy member boundaries, excluding eager type arguments and container elements. + typeParameters []*Type + typeAliasTracker nodebuilder.TypeAliasTracker + typeAliases []*serializationTypeAlias + typeAliasReferences []serializationTypeAliasReference + currentTypeAlias *serializationTypeAlias + typeAliasParameterDepth int + writingTypeAliasArguments bool + skipTypeAliasReference bool // per signature scope state typeParameterNames collections.CopyOnWriteMap[TypeId, *ast.Identifier] @@ -1898,7 +1917,17 @@ func (b *NodeBuilderImpl) signatureToSignatureDeclarationHelper(signature *Signa } } else { for _, parameter := range signature.typeParameters { - typeParameters = append(typeParameters, b.typeParameterToDeclaration(parameter)) + declaration := b.typeParameterToDeclaration(parameter) + flags := b.ch.getTypeParameterModifiers(parameter) + if (kind == ast.KindConstructorType || kind == ast.KindConstructSignature) && flags&(ast.ModifierFlagsIn|ast.ModifierFlagsOut) != 0 { + // Class variance does not apply to constructor signatures. + var modifiers *ast.ModifierList + if flags := flags &^ (ast.ModifierFlagsIn | ast.ModifierFlagsOut); flags != ast.ModifierFlagsNone { + modifiers = b.f.NewModifierList(ast.CreateModifiersFromModifierFlags(flags, b.f.NewModifier)) + } + declaration = ast.ReplaceModifiers(b.f, declaration, modifiers) + } + typeParameters = append(typeParameters, declaration) } } @@ -2312,8 +2341,8 @@ func (b *NodeBuilderImpl) serializeTypeForDeclaration(declaration *ast.Declarati t = b.ch.getOptionalType(t, false) } - restoreDefinition := b.enterTypeDefinition(t, symbol, false /*expanding*/) - defer restoreDefinition() + restoreBinding := b.enterTypeBinding(t, symbol) + defer restoreBinding() restoreFlags := b.saveRestoreFlags() if t.flags&TypeFlagsUniqueESSymbol != 0 && t.symbol == symbol && (b.ctx.enclosingDeclaration == nil || core.Some(symbol.Declarations, func(d *ast.Declaration) bool { @@ -2998,10 +3027,12 @@ func (b *NodeBuilderImpl) conditionalTypeToTypeNode(_t *Type) *ast.TypeNode { b.ctx.approximateLength += 37 // 15 each for two added conditionals, 7 for an added infer type newMapper := prependTypeMapping(t.root.checkType, newParam, t.mapper) + restoreScope := b.enterNewScope(t.root.node.AsNode(), nil, append([]*Type{newParam}, t.root.inferTypeParameters...), nil, nil) restoreInferTypeParameters := b.enterInferTypeParameterScope(t.root.inferTypeParameters) extendsTypeNode := b.typeToTypeNode(b.ch.instantiateType(t.root.extendsType, newMapper)) restoreInferTypeParameters() trueTypeNode := b.typeToTypeNodeOrCircularityElision(b.ch.instantiateType(b.getTypeFromTypeNode(t.root.node.TrueType, false), newMapper)) + restoreScope() falseTypeNode := b.typeToTypeNodeOrCircularityElision(b.ch.instantiateType(b.getTypeFromTypeNode(t.root.node.FalseType, false), newMapper)) // outermost conditional makes `T` a type parameter, allowing the inner conditionals to be distributive @@ -3020,10 +3051,12 @@ func (b *NodeBuilderImpl) conditionalTypeToTypeNode(_t *Type) *ast.TypeNode { syntheticTrueNode := b.f.NewConditionalTypeNode(b.f.NewTypeReferenceNode(name.Clone(b.f), nil), b.f.DeepCloneNode(checkTypeNode), innerCheckConditionalNode, b.f.NewKeywordTypeNode(ast.KindNeverKeyword)) return b.f.NewConditionalTypeNode(checkTypeNode, syntheticExtendsNode, syntheticTrueNode, b.f.NewKeywordTypeNode(ast.KindNeverKeyword)) } + restoreScope := b.enterNewScope(t.root.node.AsNode(), nil, t.root.inferTypeParameters, nil, nil) restoreInferTypeParameters := b.enterInferTypeParameterScope(t.root.inferTypeParameters) extendsTypeNode := b.typeToTypeNode(t.extendsType) restoreInferTypeParameters() trueTypeNode := b.typeToTypeNodeOrCircularityElision(b.ch.getTrueTypeFromConditionalType(_t)) + restoreScope() falseTypeNode := b.typeToTypeNodeOrCircularityElision(b.ch.getFalseTypeFromConditionalType(_t)) return b.f.NewConditionalTypeNode(checkTypeNode, extendsTypeNode, trueTypeNode, falseTypeNode) } @@ -3193,14 +3226,31 @@ func (b *NodeBuilderImpl) typeReferenceToTypeNode(t *Type) *ast.TypeNode { func (b *NodeBuilderImpl) visitType(t *Type, transform func(b *NodeBuilderImpl, t *Type) *ast.TypeNode) *ast.TypeNode { typeId := b.serializationTypeId(t) - for _, definition := range b.ctx.definitions { - if definition.expanding && b.isSameSerializationType(t, typeId, definition) { + for _, expansion := range b.ctx.expansions { + if b.isSameSerializationType(t, typeId, expansion.t, expansion.typeId) { + if b.ctx.typeAliasTracker != nil { + if expansion.alias == nil { + expansion.alias = b.createSerializationTypeAlias(expansion) + } + return b.serializationTypeAliasToNode(expansion.alias) + } return b.createCyclicStructurePlaceholder() } } - restoreDefinition := b.enterTypeDefinition(t, nil, true /*expanding*/) - defer restoreDefinition() - return transform(b, t) + expansion := &serializationExpansion{t: t, typeId: typeId, typeParameters: slices.Clone(b.ctx.typeParameters), mapper: b.ctx.mapper} + expansions := b.ctx.expansions + bindings := b.ctx.bindings + if name := b.getSerializationValueName(t); name.symbol != nil && b.isSerializationTypeNameAccessible(name) { + b.ctx.bindings = append(bindings, serializationTypeBinding{t: t, typeId: typeId, symbol: name.symbol, path: name.path, depth: b.ctx.deferredTypeDepth}) + } + b.ctx.expansions = append(expansions, expansion) + result := transform(b, t) + b.ctx.expansions = expansions + b.ctx.bindings = bindings + if expansion.alias != nil { + return b.serializationTypeAliasToNode(expansion.alias) + } + return result } func (b *NodeBuilderImpl) visitAndTransformType(t *Type, transform func(b *NodeBuilderImpl, t *Type) *ast.TypeNode) *ast.TypeNode { @@ -3235,34 +3285,35 @@ func (b *NodeBuilderImpl) transformType(t *Type, transform func(b *NodeBuilderIm // of types allows us to catch circular references to instantiations of the same anonymous type key := CompositeTypeCacheIdentity{ - typeId: typeId, - flags: b.ctx.flags, - internalFlags: b.ctx.internalFlags, + typeId: typeId, + flags: b.ctx.flags, + internalFlags: b.ctx.internalFlags, + typeAliasSupport: b.ctx.typeAliasTracker != nil, } // Expansion must recompute canIncreaseExpansionDepth instead of reusing cached output. - canUseCache := b.ctx.maxExpansionDepth < 0 + canUseCache := b.ctx.maxExpansionDepth < 0 && b.ctx.currentTypeAlias == nil && len(b.ctx.typeAliases) == 0 if canUseCache && len(b.ctx.inferTypeParameters) != 0 { key.inferTypeParameters = getTypeListKey(b.ctx.inferTypeParameters) } - if canUseCache && len(b.ctx.definitions) != 0 { - // Unnamed definitions matter too: they determine where cyclic output is elided. - var definitions keyBuilder - for _, definition := range b.ctx.definitions { - definitions.writeUint32(uint32(definition.typeId)) - if definition.signature != nil { - definitions.writeUint32(uint32(definition.signature.id)) - } else { - definitions.writeUint32(0) + if canUseCache && len(b.ctx.bindings) != 0 { + var bindings keyBuilder + for _, binding := range b.ctx.bindings { + bindings.writeUint32(uint32(binding.typeId)) + bindings.writeSymbol(binding.symbol) + bindings.writeInt(len(binding.path)) + for _, index := range binding.path { + bindings.writeType(index) } - if definition.symbol != nil { - definitions.writeSymbol(definition.symbol) - } else { - definitions.writeUint64(0) - } - definitions.writeByte(core.IfElse(definition.expanding, byte(1), byte(0))) - definitions.writeByte(core.IfElse(b.ctx.deferredTypeDepth > definition.depth, byte(1), byte(0))) + bindings.writeByte(core.IfElse(b.ctx.deferredTypeDepth > binding.depth, byte(1), byte(0))) } - key.definitions = definitions.hash() + key.bindings = bindings.hash() + } + if canUseCache && len(b.ctx.expansions) != 0 { + var expansions keyBuilder + for _, expansion := range b.ctx.expansions { + expansions.writeUint32(uint32(expansion.typeId)) + } + key.expansions = expansions.hash() } if canUseCache && b.ctx.enclosingDeclaration != nil && b.links.Has(b.ctx.enclosingDeclaration) { links := b.links.Get(b.ctx.enclosingDeclaration) @@ -3307,7 +3358,7 @@ func (b *NodeBuilderImpl) transformType(t *Type, transform func(b *NodeBuilderIm startLength := b.ctx.approximateLength result := transform(b, t) addedLength := b.ctx.approximateLength - startLength - if canUseCache && !b.ctx.reportedDiagnostic && !b.ctx.encounteredError { + if canUseCache && len(b.ctx.typeAliases) == 0 && !b.ctx.reportedDiagnostic && !b.ctx.encounteredError { links := b.links.Get(b.ctx.enclosingDeclaration) if links.serializedTypes == nil { links.serializedTypes = make(map[CompositeTypeCacheIdentity]*SerializedTypeEntry) @@ -3344,6 +3395,8 @@ func (b *NodeBuilderImpl) transformType(t *Type, transform func(b *NodeBuilderIm } func (b *NodeBuilderImpl) typeToTypeNode(t *Type) *ast.TypeNode { + skipTypeAliasReference := b.ctx.skipTypeAliasReference + b.ctx.skipTypeAliasReference = false inTypeAlias := b.ctx.flags & nodebuilder.FlagsInTypeAlias b.ctx.flags &^= nodebuilder.FlagsInTypeAlias @@ -3513,7 +3566,12 @@ func (b *NodeBuilderImpl) typeToTypeNode(t *Type) *ast.TypeNode { defer func() { b.ctx.depth-- }() } - if name := b.getTypeDefinitionReference(t); name.symbol != nil { + if !skipTypeAliasReference { + if alias := b.getSerializationTypeAlias(t); alias != nil { + return b.serializationTypeAliasToNode(alias) + } + } + if name := b.getTypeBindingReference(t); name.symbol != nil { return b.serializationTypeNameToNode(name) } @@ -3537,6 +3595,9 @@ func (b *NodeBuilderImpl) typeToTypeNode(t *Type) *ast.TypeNode { } } if t.flags&TypeFlagsTypeParameter != 0 || objectFlags&ObjectFlagsClassOrInterface != 0 { + if t.flags&TypeFlagsTypeParameter != 0 { + b.ctx.recordTypeAliasParameter(t.symbol) + } // When expanding class or interface types, show their structural form if objectFlags&ObjectFlagsClassOrInterface != 0 && b.shouldExpandType(t, false /*isAlias*/) { b.ctx.depth++ diff --git a/tsc/internal/checker/nodebuilderscopes.go b/tsc/internal/checker/nodebuilderscopes.go index ea1f07b8b0973..9f85785ac227b 100644 --- a/tsc/internal/checker/nodebuilderscopes.go +++ b/tsc/internal/checker/nodebuilderscopes.go @@ -62,15 +62,44 @@ func (b *NodeBuilderImpl) serializationTypeId(t *Type) TypeId { return t.id } -func (b *NodeBuilderImpl) enterTypeDefinition(t *Type, symbol *ast.Symbol, expanding bool) func() { - return b.enterDefinition(serializationDefinition{t: t, typeId: b.serializationTypeId(t), symbol: symbol, expanding: expanding}) +func (b *NodeBuilderImpl) enterTypeBinding(t *Type, symbol *ast.Symbol) func() { + bindings := b.ctx.bindings + if symbol != nil { + binding := serializationTypeBinding{t: t, typeId: b.serializationTypeId(t), symbol: symbol, depth: b.ctx.deferredTypeDepth} + if len(bindings) != 0 && t.flags&TypeFlagsStructuredOrInstantiable != 0 && + symbol.Flags&(ast.SymbolFlagsProperty|ast.SymbolFlagsMethod|ast.SymbolFlagsAccessor) != 0 { + name := b.getTypeBindingName(t, binding) + if name.symbol == nil || !b.isSerializationTypeNameAccessible(name) { + index := b.getSerializationPropertyIndex(symbol) + if isTypeUsableAsPropertyName(index) { + for _, parent := range slices.Backward(bindings) { + if b.ch.getPropertyOfType(parent.t, symbol.Name) != symbol { + continue + } + parentName := b.getTypeBindingName(parent.t, parent) + if parentName.symbol == nil || !b.isSerializationTypeNameAccessible(parentName) { + continue + } + path := append(slices.Clone(parentName.path), index) + if name := b.getValueTypeName(t, parentName.symbol, path); name.symbol != nil { + binding.symbol, binding.path = name.symbol, name.path + break + } + } + } + } + } + b.ctx.bindings = append(bindings, binding) + } + return func() { b.ctx.bindings = bindings } } -func (b *NodeBuilderImpl) enterDefinition(definition serializationDefinition) func() { - definitions := b.ctx.definitions - definition.depth = b.ctx.deferredTypeDepth - b.ctx.definitions = append(definitions, definition) - return func() { b.ctx.definitions = definitions } +func (b *NodeBuilderImpl) getSerializationPropertyIndex(symbol *ast.Symbol) *Type { + name := ast.GetNameOfDeclaration(symbol.ValueDeclaration) + if name != nil && !ast.IsPropertyName(name) && b.ch.valueSymbolLinks.Get(b.ch.getLateBoundSymbol(symbol)).nameType == nil { + return b.ch.neverType + } + return b.ch.getLiteralTypeFromProperty(symbol, TypeFlagsStringOrNumberLiteralOrUnique, false /*includeNonPublic*/) } // Lexical scopes alone do not guard back-references; only lazy member boundaries do. @@ -86,11 +115,10 @@ func (b *NodeBuilderImpl) enterInferTypeParameterScope(typeParameters []*Type) f return func() { b.ctx.inferTypeParameters = inferTypeParameters } } -func (b *NodeBuilderImpl) isSameSerializationType(t *Type, typeId TypeId, definition serializationDefinition) bool { - if typeId == definition.typeId { +func (b *NodeBuilderImpl) isSameSerializationType(t *Type, typeId TypeId, other *Type, otherTypeId TypeId) bool { + if typeId == otherTypeId { return true } - other := definition.t // Regular and widened objects may have different IDs without changing shape. // Do not collapse distinct generic instantiations. return t.objectFlags&(ObjectFlagsAnonymous|ObjectFlagsInstantiated) == ObjectFlagsAnonymous && @@ -98,38 +126,14 @@ func (b *NodeBuilderImpl) isSameSerializationType(t *Type, typeId TypeId, defini t.symbol != nil && t.symbol == other.symbol && b.ch.isTypeIdenticalTo(t, other) } -func (b *NodeBuilderImpl) getTypeDefinitionReference(t *Type) serializationTypeName { - var typeId TypeId - for _, definition := range b.ctx.definitions { - if b.ctx.deferredTypeDepth <= definition.depth { +func (b *NodeBuilderImpl) getTypeBindingReference(t *Type) serializationTypeName { + typeId := b.serializationTypeId(t) + for _, binding := range b.ctx.bindings { + if b.ctx.deferredTypeDepth <= binding.depth || + !b.isSameSerializationBindingType(t, typeId, binding.t, binding.typeId) { continue } - if signature := definition.signature; signature != nil { - if t.objectFlags&ObjectFlagsAnonymous == 0 { - continue - } - kind := core.IfElse(signature.flags&SignatureFlagsConstruct != 0, SignatureKindConstruct, SignatureKindCall) - if !slices.Contains(b.ch.getSignaturesOfType(t, kind), signature) { - continue - } - } else { - if typeId == 0 { - typeId = b.serializationTypeId(t) - } - if !b.isSameSerializationType(t, typeId, definition) { - continue - } - } - var name serializationTypeName - if symbol := definition.symbol; symbol != nil { - if symbol.Flags&(ast.SymbolFlagsProperty|ast.SymbolFlagsMethod|ast.SymbolFlagsAccessor) != 0 { - name = b.getSerializationTypeNameFromDeclaration(t, symbol.ValueDeclaration) - } else { - name = b.getValueTypeName(t, symbol, nil) - } - } else { - name = b.getSerializationValueName(t) - } + name := b.getTypeBindingName(t, binding) if name.symbol != nil && b.isSerializationTypeNameAccessible(name) { return name } @@ -137,8 +141,27 @@ func (b *NodeBuilderImpl) getTypeDefinitionReference(t *Type) serializationTypeN return serializationTypeName{} } +func (b *NodeBuilderImpl) isSameSerializationBindingType(t *Type, typeId TypeId, other *Type, otherTypeId TypeId) bool { + // A proven name can denote equivalent specializations without merging their graph identities. + return b.isSameSerializationType(t, typeId, other, otherTypeId) || + t.objectFlags&ObjectFlagsAnonymous != 0 && other.objectFlags&ObjectFlagsAnonymous != 0 && + t.symbol != nil && t.symbol == other.symbol && b.ch.isTypeIdenticalTo(t, other) +} + +func (b *NodeBuilderImpl) getTypeBindingName(t *Type, binding serializationTypeBinding) serializationTypeName { + if symbol := binding.symbol; symbol != nil { + if len(binding.path) == 0 && symbol.Flags&(ast.SymbolFlagsProperty|ast.SymbolFlagsMethod|ast.SymbolFlagsAccessor) != 0 { + if name := b.getSerializationTypeNameFromDeclaration(t, symbol.ValueDeclaration); name.symbol != nil { + return name + } + } + return b.getValueTypeName(t, symbol, binding.path) + } + return b.getSerializationValueName(t) +} + func (b *NodeBuilderImpl) getValueTypeName(t *Type, symbol *ast.Symbol, path []*Type) serializationTypeName { - if symbol == nil || symbol.Flags&ast.SymbolFlagsValue == 0 || t.flags&TypeFlagsStructuredOrInstantiable == 0 || + if symbol == nil || symbol.Flags&ast.SymbolFlagsValue == 0 || symbol.Flags&ast.SymbolFlagsModuleExports != 0 || t.flags&TypeFlagsStructuredOrInstantiable == 0 || IsPrivateIdentifierSymbol(symbol) || b.ctx.flags&nodebuilder.FlagsUseStructuralFallback != 0 && getDeclarationModifierFlagsFromSymbol(symbol)&(ast.ModifierFlagsPrivate|ast.ModifierFlagsProtected) != 0 || !scanner.IsIdentifierText(symbol.Name, core.LanguageVariantStandard) { return serializationTypeName{} @@ -159,7 +182,7 @@ func (b *NodeBuilderImpl) getValueTypeName(t *Type, symbol *ast.Symbol, path []* } namedType = b.ch.getIndexedAccessType(namedType, index) } - if b.serializationTypeId(namedType) != b.serializationTypeId(t) { + if !b.isSameSerializationBindingType(t, b.serializationTypeId(t), namedType, b.serializationTypeId(namedType)) { return serializationTypeName{} } return serializationTypeName{symbol: symbol, meaning: ast.SymbolFlagsValue, path: path} @@ -290,19 +313,40 @@ func (b *NodeBuilderImpl) getSerializationTypeNameFromDeclaration(t *Type, node } func (b *NodeBuilderImpl) enterSignatureScope(signature *Signature) (expandedParams []*ast.Symbol, cleanup func()) { - restoreDefinition := b.enterDefinition(serializationDefinition{signature: signature}) + bindings := b.ctx.bindings + if signature.declaration != nil { + var declarations []*ast.Node + if assigned := getAssignedValueDeclaration(signature.declaration); assigned != nil { + declarations = append(declarations, assigned) + } + declarations = append(declarations, signature.declaration) + for _, declaration := range declarations { + if symbol := b.ch.getSymbolOfDeclaration(declaration); symbol != nil { + t := b.ch.valueSymbolLinks.Get(symbol).resolvedType + if t == nil && symbol.Flags&(ast.SymbolFlagsFunction|ast.SymbolFlagsMethod) != 0 && symbol.CheckFlags&ast.CheckFlagsInstantiated == 0 { + // Function type shells do not require resolving their signatures. + t = b.ch.getTypeOfFuncClassEnumModule(symbol) + } + if t != nil { + b.enterTypeBinding(t, symbol) + } + } + } + } restoreDeferredTypeScope := b.enterDeferredTypeScope() expandedParams = b.ch.getExpandedParameters(signature, true /*skipUnionExpanding*/)[0] restoreScope := b.enterNewScope(signature.declaration, expandedParams, signature.typeParameters, signature.parameters, signature.mapper) cleanup = func() { restoreScope() restoreDeferredTypeScope() - restoreDefinition() + b.ctx.bindings = bindings } return expandedParams, cleanup } func (b *NodeBuilderImpl) enterNewScope(declaration *ast.Node, expandedParams []*ast.Symbol, typeParameters []*Type, originalParameters []*ast.Symbol, mapper *TypeMapper) func() { + oldTypeParameters := b.ctx.typeParameters + b.ctx.typeParameters = append(slices.Clone(oldTypeParameters), typeParameters...) cleanupNames := enterTypeParameterNameScope(b.ctx) // For regular function/method declarations, the enclosing declaration will already be signature.declaration, // so this is a no-op, but for arrow functions and function expressions, the enclosing declaration will be @@ -502,5 +546,6 @@ func (b *NodeBuilderImpl) enterNewScope(declaration *ast.Node, expandedParams [] cleanupNames() b.ctx.enclosingDeclaration = oldEnclosingDecl b.ctx.mapper = oldMapper + b.ctx.typeParameters = oldTypeParameters } } diff --git a/tsc/internal/checker/pseudotypenodebuilder.go b/tsc/internal/checker/pseudotypenodebuilder.go index 7366ec0a51741..37cb3f53eb3db 100644 --- a/tsc/internal/checker/pseudotypenodebuilder.go +++ b/tsc/internal/checker/pseudotypenodebuilder.go @@ -41,7 +41,7 @@ func (b *NodeBuilderImpl) pseudoTypeToNodeWithCheckerFallback(t *pseudochecker.P return result } } else if (t.Kind == pseudochecker.PseudoTypeKindSingleCallSignature || t.Kind == pseudochecker.PseudoTypeKindObjectLiteral) && - b.getTypeDefinitionReference(checkerType).symbol != nil { + b.getTypeBindingReference(checkerType).symbol != nil { // Reusing structural syntax must not unfold an already available back-reference. return b.typeToTypeNode(checkerType) } diff --git a/tsc/internal/checker/symboltracker.go b/tsc/internal/checker/symboltracker.go index 1a1b7ad28bec8..5c5c909345a55 100644 --- a/tsc/internal/checker/symboltracker.go +++ b/tsc/internal/checker/symboltracker.go @@ -26,6 +26,7 @@ func NewSymbolTrackerImpl(context *NodeBuilderContext, tracker nodebuilder.Symbo } func (this *SymbolTrackerImpl) TrackSymbol(symbol *ast.Symbol, enclosingDeclaration *ast.Node, meaning ast.SymbolFlags) bool { + this.context.recordTypeAliasParameter(symbol) if !this.DisableTrackSymbol { if this.inner != nil && this.inner.TrackSymbol(symbol, enclosingDeclaration, meaning) { this.onDiagnosticReported() diff --git a/tsc/internal/nodebuilder/types.go b/tsc/internal/nodebuilder/types.go index 92f3d36d1144f..6c4796aabfbfb 100644 --- a/tsc/internal/nodebuilder/types.go +++ b/tsc/internal/nodebuilder/types.go @@ -22,6 +22,13 @@ type SymbolTracker interface { PopErrorFallbackNode() } +// Declaration emit can supply bindings that cannot be expressed by a type node alone. +type TypeAliasTracker interface { + // The destination lexical scope for helper declarations. + TypeAliasScope() *ast.Node + AddTypeAliasDeclaration(declaration *ast.Node) +} + // NOTE: If modifying this enum, must modify `TypeFormatFlags` too! type Flags uint32 diff --git a/tsc/internal/transformers/declarations/tracker.go b/tsc/internal/transformers/declarations/tracker.go index 29735b2dc2b97..d0550f3ab4a57 100644 --- a/tsc/internal/transformers/declarations/tracker.go +++ b/tsc/internal/transformers/declarations/tracker.go @@ -23,6 +23,14 @@ type SymbolTrackerImpl struct { getIsolatedDeclarationError func(node *ast.Node) *ast.Diagnostic } +func (s *SymbolTrackerImpl) TypeAliasScope() *ast.Node { + return s.state.typeAliasScope +} + +func (s *SymbolTrackerImpl) AddTypeAliasDeclaration(declaration *ast.Node) { + s.state.typeAliases = append(s.state.typeAliases, declaration) +} + // PopErrorFallbackNode implements checker.SymbolTracker. func (s *SymbolTrackerImpl) PopErrorFallbackNode() { s.fallbackStack = s.fallbackStack[:len(s.fallbackStack)-1] @@ -237,6 +245,8 @@ func createDiagnosticForNode(node *ast.Node, message *diagnostics.Message, args } type SymbolTrackerSharedState struct { + typeAliasScope *ast.Node + typeAliases []*ast.Node lateMarkedStatements []*ast.Node diagnostics []*ast.Diagnostic getSymbolAccessibilityDiagnostic GetSymbolAccessibilityDiagnostic diff --git a/tsc/internal/transformers/declarations/transform.go b/tsc/internal/transformers/declarations/transform.go index 0daf681bfb59e..3e58dbb46940f 100644 --- a/tsc/internal/transformers/declarations/transform.go +++ b/tsc/internal/transformers/declarations/transform.go @@ -298,6 +298,8 @@ func (tx *DeclarationTransformer) visitSourceFile(node *ast.SourceFile) *ast.Nod tx.rawLibReferenceDirectives = make([]*ast.FileReference, 0) tx.witnessedCjsExports.Clear() tx.state.currentSourceFile = node + tx.state.typeAliasScope = node.AsNode() + tx.state.typeAliases = nil tx.collectFileReferences(node) tx.resolver.PrecalculateDeclarationEmitVisibility(tx.EmitContext().MostOriginal(node.AsNode()).AsSourceFile()) updated := tx.transformSourceFile(node) @@ -351,6 +353,14 @@ func (tx *DeclarationTransformer) transformSourceFile(node *ast.SourceFile) *ast statements := tx.Visitor().VisitNodes(node.Statements) combinedStatements = tx.transformAndReplaceLatePaintedStatements(statements) combinedStatements = tx.appendCjsExports(combinedStatements) + if len(tx.state.typeAliases) != 0 { + combinedStatements = tx.Factory().NewNodeList(append(tx.state.typeAliases, combinedStatements.Nodes...)) + tx.needsScopeFixMarker = true + if ast.IsExternalOrCommonJSModule(node) && !hasScopeMarker(combinedStatements) { + combinedStatements = tx.Factory().NewNodeList(append(combinedStatements.Nodes, createEmptyExports(tx.Factory().AsNodeFactory()))) + tx.resultHasScopeMarker = true + } + } combinedStatements.Loc = statements.Loc // setTextRange if ast.IsExternalOrCommonJSModule(node) { if ast.IsInJSFile(node.AsNode()) { @@ -1843,6 +1853,8 @@ func (tx *DeclarationTransformer) transformModuleDeclaration(input *ast.ModuleDe attributes := tx.Visitor().Visit(input.Attributes) if inner != nil && inner.Kind == ast.KindModuleBlock { + oldTypeAliasScope, oldTypeAliases := tx.state.typeAliasScope, tx.state.typeAliases + tx.state.typeAliasScope, tx.state.typeAliases = input.AsNode(), nil oldNeedsScopeFix := tx.needsScopeFixMarker oldHasScopeFix := tx.resultHasScopeMarker tx.resultHasScopeMarker = false @@ -1852,6 +1864,11 @@ func (tx *DeclarationTransformer) transformModuleDeclaration(input *ast.ModuleDe if input.Flags&ast.NodeFlagsAmbient != 0 { tx.needsScopeFixMarker = false // If it was `declare`'d everything is implicitly exported already, ignore late printed "privates" } + if len(tx.state.typeAliases) != 0 { + lateStatements = tx.Factory().NewNodeList(append(tx.state.typeAliases, lateStatements.Nodes...)) + tx.needsScopeFixMarker = true + } + tx.state.typeAliasScope, tx.state.typeAliases = oldTypeAliasScope, oldTypeAliases // With the final list of statements, there are 3 possibilities: // 1. There's an export assignment or export declaration in the namespace - do nothing // 2. Everything is exported and there are no export assignments or export declarations - strip all export modifiers diff --git a/tsc/testdata/baselines/reference/compiler/arrayFakeFlatNoCrashInferenceDeclarations.errors.txt b/tsc/testdata/baselines/reference/compiler/arrayFakeFlatNoCrashInferenceDeclarations.errors.txt deleted file mode 100644 index 2108e03d4a196..0000000000000 --- a/tsc/testdata/baselines/reference/compiler/arrayFakeFlatNoCrashInferenceDeclarations.errors.txt +++ /dev/null @@ -1,21 +0,0 @@ -arrayFakeFlatNoCrashInferenceDeclarations.ts(13,10): error TS5088: The inferred type of 'foo' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - - -==== arrayFakeFlatNoCrashInferenceDeclarations.ts (1 errors) ==== - type BadFlatArray = {obj: { - "done": Arr, - "recur": Arr extends ReadonlyArray - ? BadFlatArray - : Arr - }[Depth extends -1 ? "done" : "recur"]}["obj"]; - - declare function flat( - arr: A, - depth?: D - ): BadFlatArray[] - - function foo(arr: T[], depth: number) { - ~~~ -!!! error TS5088: The inferred type of 'foo' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - return flat(arr, depth); - } \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/arrayFakeFlatNoCrashInferenceDeclarations.js b/tsc/testdata/baselines/reference/compiler/arrayFakeFlatNoCrashInferenceDeclarations.js index b743d30cd5d36..2d5ccf90459f8 100644 --- a/tsc/testdata/baselines/reference/compiler/arrayFakeFlatNoCrashInferenceDeclarations.js +++ b/tsc/testdata/baselines/reference/compiler/arrayFakeFlatNoCrashInferenceDeclarations.js @@ -22,3 +22,15 @@ function foo(arr: T[], depth: number) { function foo(arr, depth) { return flat(arr, depth); } + + +//// [arrayFakeFlatNoCrashInferenceDeclarations.d.ts] +type _recursive = InnerArr | (InnerArr extends readonly (infer InnerArr)[] ? _recursive : InnerArr); +type BadFlatArray = { + obj: { + "done": Arr; + "recur": Arr extends ReadonlyArray ? BadFlatArray : Arr; + }[Depth extends -1 ? "done" : "recur"]; +}["obj"]; +declare function flat(arr: A, depth?: D): BadFlatArray[]; +declare function foo(arr: T[], depth: number): (T | (T extends readonly (infer InnerArr)[] ? _recursive : T))[]; diff --git a/tsc/testdata/baselines/reference/compiler/declarationEmitInferredTypeAlias4.errors.txt b/tsc/testdata/baselines/reference/compiler/declarationEmitInferredTypeAlias4.errors.txt index f4858319ecf28..beed1cd04564c 100644 --- a/tsc/testdata/baselines/reference/compiler/declarationEmitInferredTypeAlias4.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/declarationEmitInferredTypeAlias4.errors.txt @@ -1,11 +1,8 @@ -declarationEmitInferredTypeAlias4.ts(1,10): error TS5088: The inferred type of 'f' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. declarationEmitInferredTypeAlias4.ts(4,12): error TS2454: Variable 'x' is used before being assigned. -==== declarationEmitInferredTypeAlias4.ts (2 errors) ==== +==== declarationEmitInferredTypeAlias4.ts (1 errors) ==== function f() { - ~ -!!! error TS5088: The inferred type of 'f' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. type Foo = T | { x: Foo }; var x: Foo; return x; diff --git a/tsc/testdata/baselines/reference/compiler/declarationEmitInferredTypeAlias4.js b/tsc/testdata/baselines/reference/compiler/declarationEmitInferredTypeAlias4.js index 00652e1bd00da..beb300c4551dd 100644 --- a/tsc/testdata/baselines/reference/compiler/declarationEmitInferredTypeAlias4.js +++ b/tsc/testdata/baselines/reference/compiler/declarationEmitInferredTypeAlias4.js @@ -13,3 +13,10 @@ function f() { var x; return x; } + + +//// [declarationEmitInferredTypeAlias4.d.ts] +type _recursive = { + x: A[] | _recursive; +}; +declare function f(): A[] | _recursive; diff --git a/tsc/testdata/baselines/reference/compiler/declarationEmitStaticMethodNonIdentifierNames.errors.txt b/tsc/testdata/baselines/reference/compiler/declarationEmitStaticMethodNonIdentifierNames.errors.txt deleted file mode 100644 index 567eef6a3269f..0000000000000 --- a/tsc/testdata/baselines/reference/compiler/declarationEmitStaticMethodNonIdentifierNames.errors.txt +++ /dev/null @@ -1,74 +0,0 @@ -declarationEmitStaticMethodNonIdentifierNames.ts(56,12): error TS5088: The inferred type of 'getRec' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - - -==== declarationEmitStaticMethodNonIdentifierNames.ts (1 errors) ==== - declare const uniqueSym: unique symbol; - - // none of these names can be written as `typeof Foo.` - export class Foo { - static #priv() { } - static getPriv() { - return Foo.#priv; - } - - static "quoted-name"() { } - static getQuoted() { - return Foo["quoted-name"]; - } - - static ["computed-name"]() { } - static getComputed() { - return Foo["computed-name"]; - } - - static 1() { } - static getNumeric() { - return Foo[1]; - } - - static [uniqueSym]() { } - static getUnique() { - return Foo[uniqueSym]; - } - - // property types go through the same path - static privRef = Foo.#priv; - } - - // identifier names still use `typeof` - export class Writable { - static normalName() { } - static getNormal() { - return Writable.normalName; - } - - static $dollar() { } - static getDollar() { - return Writable.$dollar; - } - } - - export class Generic { - static #priv(x: T): T { return x; } - static getPriv() { - return Generic.#priv; - } - } - - export class Recursive { - static #rec() { return Recursive.#rec; } - static getRec() { - ~~~~~~ -!!! error TS5088: The inferred type of 'getRec' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - return Recursive.#rec; - } - } - - // instance members already fall back to a structural type - export class Instance { - #priv() { } - getPriv() { - return this.#priv; - } - } - \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/declarationEmitStaticMethodNonIdentifierNames.js b/tsc/testdata/baselines/reference/compiler/declarationEmitStaticMethodNonIdentifierNames.js index 22995a34b56a3..c52b200cc5b69 100644 --- a/tsc/testdata/baselines/reference/compiler/declarationEmitStaticMethodNonIdentifierNames.js +++ b/tsc/testdata/baselines/reference/compiler/declarationEmitStaticMethodNonIdentifierNames.js @@ -126,3 +126,40 @@ export class Instance { return this.#priv; } } + + +//// [declarationEmitStaticMethodNonIdentifierNames.d.ts] +type _recursive = () => _recursive; +declare const uniqueSym: unique symbol; +export declare class Foo { + #private; + static getPriv(): () => void; + static "quoted-name"(): void; + static getQuoted(): (typeof Foo)["quoted-name"]; + static ["computed-name"](): void; + static getComputed(): (typeof Foo)["computed-name"]; + static 1(): void; + static getNumeric(): (typeof Foo)[1]; + static [uniqueSym](): void; + static getUnique(): (typeof Foo)[typeof uniqueSym]; + static privRef: () => void; +} +export declare class Writable { + static normalName(): void; + static getNormal(): (typeof Writable)["normalName"]; + static $dollar(): void; + static getDollar(): (typeof Writable)["$dollar"]; +} +export declare class Generic { + #private; + static getPriv(): (x: T) => T; +} +export declare class Recursive { + #private; + static getRec(): _recursive; +} +export declare class Instance { + #private; + getPriv(): () => void; +} +export {}; diff --git a/tsc/testdata/baselines/reference/compiler/declarationEmitUnserializableTypes.errors.txt b/tsc/testdata/baselines/reference/compiler/declarationEmitUnserializableTypes.errors.txt index 79536369d0a1a..177d8ae829611 100644 --- a/tsc/testdata/baselines/reference/compiler/declarationEmitUnserializableTypes.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/declarationEmitUnserializableTypes.errors.txt @@ -1,25 +1,16 @@ growing.ts(1,17): error TS7056: The inferred type of this node exceeds the maximum length the compiler will serialize. An explicit type annotation is needed. -local.ts(1,17): error TS5088: The inferred type of 'localArrow' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -local.ts(5,17): error TS5088: The inferred type of 'localDeclaration' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -local.ts(9,17): error TS5088: The inferred type of 'localInstantiation' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -==== local.ts (3 errors) ==== +==== local.ts (0 errors) ==== export function localArrow() { - ~~~~~~~~~~ -!!! error TS5088: The inferred type of 'localArrow' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. const inner = () => inner; return inner; } export function localDeclaration() { - ~~~~~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'localDeclaration' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. function inner() { return inner; } return inner; } export function localInstantiation() { - ~~~~~~~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'localInstantiation' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. function inner(): typeof inner { return inner; } return inner; } diff --git a/tsc/testdata/baselines/reference/compiler/declarationEmitUnserializableTypes.js b/tsc/testdata/baselines/reference/compiler/declarationEmitUnserializableTypes.js index 459a409101941..5e09b418a6036 100644 --- a/tsc/testdata/baselines/reference/compiler/declarationEmitUnserializableTypes.js +++ b/tsc/testdata/baselines/reference/compiler/declarationEmitUnserializableTypes.js @@ -71,6 +71,20 @@ export function local() { } +//// [local.d.ts] +type _recursive = () => _recursive; +type _recursive_1 = () => _recursive_1; +type _recursive_2 = () => _recursive_2; +export declare function localArrow(): _recursive; +export declare function localDeclaration(): _recursive_1; +export declare function localInstantiation(): () => _recursive_2; +export declare const object: { + self(): typeof object; +}; +export declare const annotatedObject: { + self(): typeof annotatedObject; +}; +export {}; //// [annotatedLocal.d.ts] interface Recursive { (): Recursive; diff --git a/tsc/testdata/baselines/reference/compiler/emitClassExpressionInDeclarationFile.errors.txt b/tsc/testdata/baselines/reference/compiler/emitClassExpressionInDeclarationFile.errors.txt deleted file mode 100644 index 4f2b2899d9424..0000000000000 --- a/tsc/testdata/baselines/reference/compiler/emitClassExpressionInDeclarationFile.errors.txt +++ /dev/null @@ -1,36 +0,0 @@ -emitClassExpressionInDeclarationFile.ts(5,12): error TS5088: The inferred type of 'circularReference' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - - -==== emitClassExpressionInDeclarationFile.ts (1 errors) ==== - export var simpleExample = class { - static getTags() { } - tags() { } - } - export var circularReference = class C { - ~~~~~~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'circularReference' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - static getTags(c: C): C { return c } - tags(c: C): C { return c } - } - - // repro from #15066 - export class FooItem { - foo(): void { } - name?: string; - } - - export type Constructor = new(...args: any[]) => T; - export function WithTags>(Base: T) { - return class extends Base { - static getTags(): void { } - tags(): void { } - } - } - - export class Test extends WithTags(FooItem) {} - - const test = new Test(); - - Test.getTags() - test.tags(); - \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/emitClassExpressionInDeclarationFile.js b/tsc/testdata/baselines/reference/compiler/emitClassExpressionInDeclarationFile.js index 5fb0a6eb4a94c..3433a63a074ee 100644 --- a/tsc/testdata/baselines/reference/compiler/emitClassExpressionInDeclarationFile.js +++ b/tsc/testdata/baselines/reference/compiler/emitClassExpressionInDeclarationFile.js @@ -64,3 +64,43 @@ exports.Test = Test; const test = new Test(); Test.getTags(); test.tags(); + + +//// [emitClassExpressionInDeclarationFile.d.ts] +type _recursive = { + tags(c: _recursive): _recursive; +}; +export declare var simpleExample: { + new (): { + tags(): void; + }; + getTags(): void; +}; +export declare var circularReference: { + new (): _recursive; + getTags(c: _recursive): _recursive; +}; +export declare class FooItem { + foo(): void; + name?: string; +} +export type Constructor = new (...args: any[]) => T; +export declare function WithTags>(Base: T): { + new (...args: any[]): { + tags(): void; + foo(): void; + name?: string; + }; + getTags(): void; +} & T; +declare const Test_base: { + new (...args: any[]): { + tags(): void; + foo(): void; + name?: string; + }; + getTags(): void; +} & typeof FooItem; +export declare class Test extends Test_base { +} +export {}; diff --git a/tsc/testdata/baselines/reference/compiler/isolatedDeclarationErrorsReturnTypes.types b/tsc/testdata/baselines/reference/compiler/isolatedDeclarationErrorsReturnTypes.types index 018c65416107d..1861b303b9d64 100644 --- a/tsc/testdata/baselines/reference/compiler/isolatedDeclarationErrorsReturnTypes.types +++ b/tsc/testdata/baselines/reference/compiler/isolatedDeclarationErrorsReturnTypes.types @@ -34,7 +34,7 @@ export const recursiveNamed = function self() { return self; }; export const annotatedRecursiveArrow: () => typeof annotatedRecursiveArrow = () => annotatedRecursiveArrow; >annotatedRecursiveArrow : () => typeof annotatedRecursiveArrow >annotatedRecursiveArrow : () => typeof annotatedRecursiveArrow ->() => annotatedRecursiveArrow : () => () => typeof annotatedRecursiveArrow +>() => annotatedRecursiveArrow : () => typeof annotatedRecursiveArrow >annotatedRecursiveArrow : () => typeof annotatedRecursiveArrow export const annotatedRecursiveObject: { next: () => typeof annotatedRecursiveObject } = { diff --git a/tsc/testdata/baselines/reference/compiler/jsFunctionWithPrototypeNoErrorTruncationNoCrash.types b/tsc/testdata/baselines/reference/compiler/jsFunctionWithPrototypeNoErrorTruncationNoCrash.types index 78d4ddc68b3f1..d6f8de4e5f5e4 100644 --- a/tsc/testdata/baselines/reference/compiler/jsFunctionWithPrototypeNoErrorTruncationNoCrash.types +++ b/tsc/testdata/baselines/reference/compiler/jsFunctionWithPrototypeNoErrorTruncationNoCrash.types @@ -2,7 +2,7 @@ === index.js === function Color(obj) { ->Color : { (obj: any): void; prototype: { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; }; } +>Color : { (obj: any): void; prototype: { negate: () => typeof Color.prototype; lighten: (ratio: any) => typeof Color.prototype; darken: (ratio: any) => typeof Color.prototype; saturate: (ratio: any) => typeof Color.prototype; desaturate: (ratio: any) => typeof Color.prototype; whiten: (ratio: any) => typeof Color.prototype; blacken: (ratio: any) => typeof Color.prototype; greyscale: () => typeof Color.prototype; clearer: (ratio: any) => typeof Color.prototype; toJSON: () => any; }; } >obj : any this.example = true @@ -16,7 +16,7 @@ function Color(obj) { Color.prototype = { >Color.prototype = { negate: function () {return this;}, lighten: function (ratio) {return this;}, darken: function (ratio) {return this;}, saturate: function (ratio) {return this;}, desaturate: function (ratio) {return this;}, whiten: function (ratio) {return this;}, blacken: function (ratio) {return this;}, greyscale: function () {return this;}, clearer: function (ratio) {return this;}, toJSON: function () {return this.rgb();},} : { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; } >Color.prototype : { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; } ->Color : { (obj: any): void; prototype: { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; }; } +>Color : { (obj: any): void; prototype: { negate: () => typeof Color.prototype; lighten: (ratio: any) => typeof Color.prototype; darken: (ratio: any) => typeof Color.prototype; saturate: (ratio: any) => typeof Color.prototype; desaturate: (ratio: any) => typeof Color.prototype; whiten: (ratio: any) => typeof Color.prototype; blacken: (ratio: any) => typeof Color.prototype; greyscale: () => typeof Color.prototype; clearer: (ratio: any) => typeof Color.prototype; toJSON: () => any; }; } >prototype : { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; } >{ negate: function () {return this;}, lighten: function (ratio) {return this;}, darken: function (ratio) {return this;}, saturate: function (ratio) {return this;}, desaturate: function (ratio) {return this;}, whiten: function (ratio) {return this;}, blacken: function (ratio) {return this;}, greyscale: function () {return this;}, clearer: function (ratio) {return this;}, toJSON: function () {return this.rgb();},} : { negate: () => any; lighten: (ratio: any) => any; darken: (ratio: any) => any; saturate: (ratio: any) => any; desaturate: (ratio: any) => any; whiten: (ratio: any) => any; blacken: (ratio: any) => any; greyscale: () => any; clearer: (ratio: any) => any; toJSON: () => any; } diff --git a/tsc/testdata/baselines/reference/compiler/noImplicitThisBigThis.errors.txt b/tsc/testdata/baselines/reference/compiler/noImplicitThisBigThis.errors.txt deleted file mode 100644 index f4a4732e45395..0000000000000 --- a/tsc/testdata/baselines/reference/compiler/noImplicitThisBigThis.errors.txt +++ /dev/null @@ -1,57 +0,0 @@ -noImplicitThisBigThis.ts(3,10): error TS5088: The inferred type of 'createObj' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -noImplicitThisBigThis.ts(17,10): error TS5088: The inferred type of 'createObjNoCrash' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - - -==== noImplicitThisBigThis.ts (2 errors) ==== - // https://github.com/microsoft/TypeScript/issues/29902 - - function createObj() { - ~~~~~~~~~ -!!! error TS5088: The inferred type of 'createObj' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - return { - func1() { - return this; - }, - func2() { - return this; - }, - func3() { - return this; - } - }; - } - - function createObjNoCrash() { - ~~~~~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'createObjNoCrash' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - return { - func1() { - return this; - }, - func2() { - return this; - }, - func3() { - return this; - }, - func4() { - return this; - }, - func5() { - return this; - }, - func6() { - return this; - }, - func7() { - return this; - }, - func8() { - return this; - }, - func9() { - return this; - } - }; - } - \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/noImplicitThisBigThis.js b/tsc/testdata/baselines/reference/compiler/noImplicitThisBigThis.js index 57b0614056a9f..650b2cd89d740 100644 --- a/tsc/testdata/baselines/reference/compiler/noImplicitThisBigThis.js +++ b/tsc/testdata/baselines/reference/compiler/noImplicitThisBigThis.js @@ -97,3 +97,38 @@ function createObjNoCrash() { } }; } + + +//// [noImplicitThisBigThis.d.ts] +type _recursive = { + func1(): _recursive; + func2(): _recursive; + func3(): _recursive; +}; +type _recursive_1 = { + func1(): _recursive_1; + func2(): _recursive_1; + func3(): _recursive_1; + func4(): _recursive_1; + func5(): _recursive_1; + func6(): _recursive_1; + func7(): _recursive_1; + func8(): _recursive_1; + func9(): _recursive_1; +}; +declare function createObj(): { + func1(): _recursive; + func2(): _recursive; + func3(): _recursive; +}; +declare function createObjNoCrash(): { + func1(): _recursive_1; + func2(): _recursive_1; + func3(): _recursive_1; + func4(): _recursive_1; + func5(): _recursive_1; + func6(): _recursive_1; + func7(): _recursive_1; + func8(): _recursive_1; + func9(): _recursive_1; +}; diff --git a/tsc/testdata/baselines/reference/compiler/recursiveContainerDeclarationSerialization.errors.txt b/tsc/testdata/baselines/reference/compiler/recursiveContainerDeclarationSerialization.errors.txt deleted file mode 100644 index d46d1d28ca109..0000000000000 --- a/tsc/testdata/baselines/reference/compiler/recursiveContainerDeclarationSerialization.errors.txt +++ /dev/null @@ -1,48 +0,0 @@ -local.ts(1,17): error TS5088: The inferred type of 'array' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -local.ts(5,17): error TS5088: The inferred type of 'tuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -local.ts(9,17): error TS5088: The inferred type of 'readonlyTuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -local.ts(13,17): error TS5088: The inferred type of 'union' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - - -==== local.ts (4 errors) ==== - export function array() { - ~~~~~ -!!! error TS5088: The inferred type of 'array' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - type Recursive = Recursive[]; - return null as unknown as Recursive; - } - export function tuple() { - ~~~~~ -!!! error TS5088: The inferred type of 'tuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - type Recursive = [Recursive]; - return null as unknown as Recursive; - } - export function readonlyTuple() { - ~~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'readonlyTuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - type Recursive = readonly [Recursive]; - return null as unknown as Recursive; - } - export function union() { - ~~~~~ -!!! error TS5088: The inferred type of 'union' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - type Recursive = string | Recursive[]; - return null as unknown as Recursive; - } - -==== nameable.ts (0 errors) ==== - export type RecursiveArray = RecursiveArray[]; - export type RecursiveTuple = readonly [RecursiveTuple]; - declare const array: RecursiveArray; - declare const tuple: RecursiveTuple; - export const namedArray = array; - export const namedTuple = tuple; - export function finite() { - type Nested = [[[[[[[[[[[[[number]]]]]]]]]]]]]; - return null as unknown as Nested; - } - export function finiteArray() { - type Nested = number[][][][][][][][][][][][][]; - return null as unknown as Nested; - } - \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/recursiveContainerDeclarationSerialization.js b/tsc/testdata/baselines/reference/compiler/recursiveContainerDeclarationSerialization.js index 41639f70320d7..6d49bbc5f05b9 100644 --- a/tsc/testdata/baselines/reference/compiler/recursiveContainerDeclarationSerialization.js +++ b/tsc/testdata/baselines/reference/compiler/recursiveContainerDeclarationSerialization.js @@ -59,6 +59,16 @@ export function finiteArray() { } +//// [local.d.ts] +type _recursive = _recursive[]; +type _recursive_1 = [_recursive_1]; +type _recursive_2 = readonly [_recursive_2]; +type _recursive_3 = (string | _recursive_3)[]; +export declare function array(): _recursive; +export declare function tuple(): _recursive_1; +export declare function readonlyTuple(): _recursive_2; +export declare function union(): string | _recursive_3; +export {}; //// [nameable.d.ts] export type RecursiveArray = RecursiveArray[]; export type RecursiveTuple = readonly [RecursiveTuple]; diff --git a/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.errors.txt b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.errors.txt index 676689754d10b..3e7c3dfe38d9a 100644 --- a/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.errors.txt @@ -1,50 +1,11 @@ -anonymousBindings.ts(2,14): error TS5088: The inferred type of 'factory' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -anonymousBindings.ts(3,17): error TS5088: The inferred type of 'captured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -anonymousBindings.ts(7,17): error TS5088: The inferred type of 'nestedCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -anonymousBindings.ts(18,17): error TS5088: The inferred type of 'constrained' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -anonymousBindings.ts(22,17): error TS5088: The inferred type of 'optionalCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -anonymousBindings.ts(26,17): error TS5088: The inferred type of 'annotatedCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -anonymousBindings.ts(30,17): error TS5088: The inferred type of 'recursiveTuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -anonymousBindings.ts(34,17): error TS5088: The inferred type of 'inferredCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -anonymousBindings.ts(38,17): error TS5088: The inferred type of 'mappedCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -anonymousBindings.ts(42,17): error TS5088: The inferred type of 'freshGeneric' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -anonymousBindings.ts(46,17): error TS5088: The inferred type of 'mutualCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -anonymousBindings.ts(53,5): error TS5088: The inferred type of 'make' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -anonymousBindings.ts(58,17): error TS5088: The inferred type of 'covariantClass' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -anonymousBindings.ts(64,17): error TS5088: The inferred type of 'contravariantClass' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -anonymousBindings.ts(71,21): error TS5088: The inferred type of 'captured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. anonymousBindings.ts(93,26): error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. anonymousBindings.ts(94,7): error TS2322: Type 'string' is not assignable to type 'number'. consumer.ts(11,7): error TS2322: Type '() => typeof arrow' is not assignable to type 'number'. consumer.ts(13,25): error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. -hiddenReferences.ts(3,12): error TS5088: The inferred type of 'expose' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -hiddenReferences.ts(4,15): error TS5088: The inferred type of 'next' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -hiddenReferences.ts(5,5): error TS5088: The inferred type of 'expose' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -mappedCycles.ts(6,14): error TS5088: The inferred type of 'mappedCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -mappedCycles.ts(7,14): error TS5088: The inferred type of 'mappedCycleCopy' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -mappedCycles.ts(8,14): error TS5088: The inferred type of 'nestedCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -mappedCycles.ts(10,14): error TS5088: The inferred type of 'keyedCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -mappedCycles.ts(15,14): error TS5088: The inferred type of 'sharedCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -mappedCycles.ts(25,14): error TS5088: The inferred type of 'mutualCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. mappedCycles.ts(38,7): error TS2322: Type 'number' is not assignable to type 'string'. mappedCycles.ts(39,7): error TS2322: Type 'string' is not assignable to type 'number'. -mixedMappedCycle.ts(6,14): error TS5088: The inferred type of 'mixedCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. namedReferences.ts(28,7): error TS2322: Type 'string' is not assignable to type 'number'. namedReferences.ts(29,14): error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. -nestedNamedFunctions.ts(5,14): error TS5088: The inferred type of 'factory' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -nestedNamedFunctions.ts(8,17): error TS5088: The inferred type of 'local' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -optionalMappedCycle.ts(6,14): error TS5088: The inferred type of 'optionalCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -optionalMappedCycle.ts(8,14): error TS5088: The inferred type of 'optionalCopy' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -optionalMappedCycle.ts(10,14): error TS5088: The inferred type of 'nullableCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -optionalMappedCycle.ts(12,14): error TS5088: The inferred type of 'mixedCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -optionalMappedCycle.ts(13,14): error TS5088: The inferred type of 'sharedOptionalCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -optionalMappedCycle.ts(15,14): error TS5088: The inferred type of 'nullableKeys' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -optionalMappedCycle.ts(21,14): error TS5088: The inferred type of 'nullableRoot' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -optionalMappedCycle.ts(23,14): error TS5088: The inferred type of 'optionalRoot' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -optionalMappedCycle.ts(28,14): error TS5088: The inferred type of 'nullableLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -optionalMappedCycle.ts(30,14): error TS5088: The inferred type of 'optionalNullableLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -optionalMappedCycle.ts(35,14): error TS5088: The inferred type of 'nullableOptionalLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -optionalMappedCycle.ts(40,14): error TS5088: The inferred type of 'nullishLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. optionalMappedCycle.ts(73,7): error TS2322: Type 'null' is not assignable to type '{ value: number; next: any; }'. optionalMappedCycle.ts(74,7): error TS2322: Type 'undefined' is not assignable to type '{ value: number; next: any; }'. optionalMappedCycle.ts(75,42): error TS2531: Object is possibly 'null'. @@ -53,11 +14,9 @@ recursiveAnnotations.ts(2,15): error TS2502: 'tuple' is referenced directly or i recursiveAnnotations.ts(3,15): error TS2502: 'array' is referenced directly or indirectly in its own type annotation. recursiveAnnotations.ts(8,15): error TS2502: 'union' is referenced directly or indirectly in its own type annotation. recursiveAnnotations.ts(9,15): error TS2502: 'conditional' is referenced directly or indirectly in its own type annotation. -recursiveObject.ts(1,17): error TS5088: The inferred type of 'recursiveObject' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. recursiveObject.ts(12,7): error TS2322: Type '(arg: U) => { call: any; consume: (arg: number) => any; }' is not assignable to type 'number'. recursiveObject.ts(13,16): error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. recursiveStructures.ts(47,7): error TS2322: Type 'string' is not assignable to type 'number'. -shadowedMappedCycle.ts(6,14): error TS5088: The inferred type of 'shadowedCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. ==== script.ts (0 errors) ==== @@ -117,10 +76,8 @@ shadowedMappedCycle.ts(6,14): error TS5088: The inferred type of 'shadowedCycle' const tupleCall: typeof tupleReturn = tupleReturn()[0]()[0]; const shadowedCall: typeof shadowed = shadowed(1)(2); -==== recursiveObject.ts (3 errors) ==== +==== recursiveObject.ts (2 errors) ==== export function recursiveObject() { - ~~~~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'recursiveObject' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. const value = { call: (arg: U) => value, consume: (arg: T) => value, @@ -138,19 +95,15 @@ shadowedMappedCycle.ts(6,14): error TS5088: The inferred type of 'shadowedCycle' ~~~~~~~ !!! error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. -==== nestedNamedFunctions.ts (2 errors) ==== +==== nestedNamedFunctions.ts (0 errors) ==== export const nestedObject = { recur: () => nestedObject.recur }; export const nestedTuple = [() => nestedTuple[0]] as const; export const object = { recur: function self() { return self; } }; export const tuple = [function self() { return self; }] as const; export const factory = () => function self() { return self; }; - ~~~~~~~ -!!! error TS5088: The inferred type of 'factory' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export const method = { recur() { return method; } }; export const accessor = { get recur() { return accessor; } }; export function local() { - ~~~~~ -!!! error TS5088: The inferred type of 'local' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. function recur() { return recur; } return recur; } @@ -260,18 +213,12 @@ shadowedMappedCycle.ts(6,14): error TS5088: The inferred type of 'shadowedCycle' ~~~~~~~ !!! error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. -==== hiddenReferences.ts (3 errors) ==== +==== hiddenReferences.ts (0 errors) ==== export class Hidden { private static recur() { return Hidden.recur; } static expose() { return Hidden.recur; } - ~~~~~~ -!!! error TS5088: The inferred type of 'expose' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. protected next() { return this.next; } - ~~~~ -!!! error TS5088: The inferred type of 'next' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. expose() { return this.next; } - ~~~~~~ -!!! error TS5088: The inferred type of 'expose' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. } ==== signatureScopes.ts (0 errors) ==== @@ -337,32 +284,22 @@ shadowedMappedCycle.ts(6,14): error TS5088: The inferred type of 'shadowedCycle' export const inferredCopy = inferred; const inferredValue: string = inferredCopy.next(1).second("text").value; -==== mappedCycles.ts (8 errors) ==== +==== mappedCycles.ts (2 errors) ==== type Show = { [K in keyof T]: T[K] } & unknown; type Resolve = Show<{ [P in keyof M[K]]: M[K][P] extends "ref" ? Resolve : M[K][P]; }>; declare const build: () => { [K in keyof M]: Resolve }; export const mappedCycle = build<{ Node: { value: number; next: "ref" } }>(); - ~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'mappedCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export const mappedCycleCopy = mappedCycle; - ~~~~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'mappedCycleCopy' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export const nestedCycle = { wrapped: build<{ Node: { value: string; next: "ref" } }>() }; - ~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'nestedCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export const cycleKey = Symbol(); export const keyedCycles = build<{ - ~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'keyedCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. "a-b": { value: string; next: "ref" }; 0: { value: boolean; next: "ref" }; [cycleKey]: { value: number; next: "ref" }; }>(); export const sharedCycles = { - ~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'sharedCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. first: mappedCycle, second: mappedCycle, }; @@ -373,8 +310,6 @@ shadowedMappedCycle.ts(6,14): error TS5088: The inferred type of 'shadowedCycle' }>; declare const buildMutual: () => { [K in keyof M]: ResolveMutual }; export const mutualCycle = buildMutual<{ - ~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'mutualCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. First: { value: number; next: { ref: "Second" } }; Second: { value: string; next: { ref: "First" } }; }>(); @@ -394,71 +329,47 @@ shadowedMappedCycle.ts(6,14): error TS5088: The inferred type of 'shadowedCycle' ~~~~~~~~~~~~~~~~~~ !!! error TS2322: Type 'string' is not assignable to type 'number'. -==== optionalMappedCycle.ts (16 errors) ==== +==== optionalMappedCycle.ts (4 errors) ==== type Show = { [K in keyof T]: T[K] } & unknown; type Resolve = Show<{ [P in keyof M[K]]: M[K][P] extends "ref" ? Resolve : M[K][P]; }>; declare const build: () => { [K in keyof M]?: Resolve }; export const optionalCycle = build<{ Node: { value: number; next: "ref" } }>(); - ~~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'optionalCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. const optionalValue: number | undefined = optionalCycle.Node?.next.next.value; export const optionalCopy = optionalCycle; - ~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'optionalCopy' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. declare const buildNullable: () => { [K in keyof M]: Resolve | null }; export const nullableCycle = buildNullable<{ Node: { value: string; next: "ref" } }>(); - ~~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'nullableCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. declare const wrap: (value: T) => { required: T; optional?: T | null }; export const mixedCycles = wrap(optionalCycle); - ~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'mixedCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle }; - ~~~~~~~~~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'sharedOptionalCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export const nullableKey = Symbol(); export const nullableKeys = buildNullable<{ - ~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'nullableKeys' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. "a-b": { value: string; next: "ref" }; 0: { value: boolean; next: "ref" }; [nullableKey]: { value: number; next: "ref" }; }>(); declare const buildNullableRoot: () => Resolve | null; export const nullableRoot = buildNullableRoot<{ Node: { value: number; next: "ref" } }>(); - ~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'nullableRoot' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. declare const buildOptionalRoot: () => Resolve | undefined; export const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: "ref" } }>(); - ~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'optionalRoot' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. type ResolveNullable = Show<{ [P in keyof M[K]]: M[K][P] extends "ref" ? ResolveNullable | null : M[K][P]; }>; declare const buildNullableLinks: () => { [K in keyof M]: ResolveNullable | null }; export const nullableLinks = buildNullableLinks<{ Node: { value: number; next: "ref" } }>(); - ~~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'nullableLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. declare const buildOptionalNullableLinks: () => { [K in keyof M]?: ResolveNullable | null }; export const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: "ref" } }>(); - ~~~~~~~~~~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'optionalNullableLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. type ResolveOptional = Show<{ [P in keyof M[K]]: M[K][P] extends "ref" ? ResolveOptional | undefined : M[K][P]; }>; declare const buildNullableOptionalLinks: () => { [K in keyof M]: ResolveOptional | null }; export const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: "ref" } }>(); - ~~~~~~~~~~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'nullableOptionalLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. type ResolveNullish = Show<{ [P in keyof M[K]]: M[K][P] extends "ref" ? ResolveNullish | null | undefined : M[K][P]; }>; declare const buildNullishLinks: () => { [K in keyof M]?: ResolveNullish | null }; export const nullishLinks = buildNullishLinks<{ Node: { value: number; next: "ref" } }>(); - ~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'nullishLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. type NonNullable = "shadowed"; type OptionalNode = (typeof optionalCycle)["Node"] & {}; type NullableNode = (typeof nullableCycle)["Node"] & {}; @@ -504,33 +415,25 @@ shadowedMappedCycle.ts(6,14): error TS5088: The inferred type of 'shadowedCycle' ~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2533: Object is possibly 'null' or 'undefined'. -==== mixedMappedCycle.ts (1 errors) ==== +==== mixedMappedCycle.ts (0 errors) ==== type Show = { [K in keyof T]: T[K] } & unknown; type Resolve = Show<{ [P in keyof M[K]]: M[K][P] extends "ref" ? Resolve : M[K][P]; }>; declare const build: () => { [K in keyof M]: Resolve | false | null }; export const mixedCycle = build<{ Node: { value: number; next: "ref" } }>(); - ~~~~~~~~~~ -!!! error TS5088: The inferred type of 'mixedCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. if (mixedCycle.Node) { const value: number = mixedCycle.Node.next.next.value; } -==== anonymousBindings.ts (17 errors) ==== +==== anonymousBindings.ts (2 errors) ==== export const _recursive = 1; export const factory = () => function self() { return self; }; - ~~~~~~~ -!!! error TS5088: The inferred type of 'factory' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. export function captured(value: T) { - ~~~~~~~~ -!!! error TS5088: The inferred type of 'captured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. const node = { value, next: () => node, consume: (other: T) => node }; return node; } export function nestedCaptured(outer: T) { - ~~~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'nestedCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. return (inner: U) => { const node = { outer, @@ -542,50 +445,34 @@ shadowedMappedCycle.ts(6,14): error TS5088: The inferred type of 'shadowedCycle' }; } export function constrained(key: K) { - ~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'constrained' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. const node = { value: null! as T[K], next: () => node }; return node; } export function optionalCaptured(value: T) { - ~~~~~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'optionalCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. type Node = { value: T; next: Node }; return null! as { node?: Node | false | null }; } export function annotatedCaptured(value: T) { - ~~~~~~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'annotatedCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. const node: { value: typeof value; next: typeof node } = { value, next: null! }; return node; } export function recursiveTuple(value: T) { - ~~~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'recursiveTuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. type Tuple = readonly [T, Tuple]; return null! as Tuple; } export function inferredCaptured() { - ~~~~~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'inferredCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. type Node = { value: V; next: Node }; return null! as (T extends () => infer U ? Node : never); } export function mappedCaptured() { - ~~~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'mappedCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. type Node = { [K in keyof T]: { value: T[K]; next: Node } }; return null! as Node; } export function freshGeneric(unused: T) { - ~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'freshGeneric' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. const recur = (value: U) => recur; return recur; } export function mutualCaptured(left: T, right: U) { - ~~~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'mutualCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. type Left = { left: T; next: Right }; type Right = { right: U; self: Right; next: Left }; return { left: null! as Left, right: null! as Right }; @@ -593,23 +480,17 @@ shadowedMappedCycle.ts(6,14): error TS5088: The inferred type of 'shadowedCycle' export class CapturedClass { constructor(public value: T) {} make(inner: U) { - ~~~~ -!!! error TS5088: The inferred type of 'make' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. const node = { outer: this.value, inner, next: () => node }; return node; } } export function covariantClass() { - ~~~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'covariantClass' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. return class Node { value!: T; next(): Node { return this; } }; } export function contravariantClass() { - ~~~~~~~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'contravariantClass' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. return class Node { consume!: (value: T) => void; next(): Node { return this; } @@ -617,8 +498,6 @@ shadowedMappedCycle.ts(6,14): error TS5088: The inferred type of 'shadowedCycle' } export namespace Nested { export function captured(value: T) { - ~~~~~~~~ -!!! error TS5088: The inferred type of 'captured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. const node = { value, next: () => node }; return node; } @@ -647,14 +526,12 @@ shadowedMappedCycle.ts(6,14): error TS5088: The inferred type of 'shadowedCycle' ~~~~~~~~~~~~~~~~~ !!! error TS2322: Type 'string' is not assignable to type 'number'. -==== shadowedMappedCycle.ts (1 errors) ==== +==== shadowedMappedCycle.ts (0 errors) ==== type Show = { [K in keyof T]: T[K] } & unknown; type Resolve = Show<{ [P in keyof M[K]]: M[K][P] extends "ref" ? (shadowedCycle: T) => Resolve : M[K][P]; }>; declare const build: () => { [K in keyof M]: Resolve }; export const shadowedCycle = build<{ Node: { value: number; next: "ref" } }>(); - ~~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'shadowedCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. const shadowedValue: number = shadowedCycle.Node.next(1).next("text").value; \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.js b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.js index a80d20aab73f8..4d2859d4c9013 100644 --- a/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.js +++ b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.js @@ -896,6 +896,33 @@ export declare const tupleReturn: () => readonly [typeof tupleReturn]; export declare const shadowed: (shadowed: number) => typeof import("./exported").shadowed; //// [consumer.d.ts] export {}; +//// [recursiveObject.d.ts] +type _recursive = { + call: (arg: U) => _recursive; + consume: (arg: T) => _recursive; +}; +export declare function recursiveObject(): _recursive; +export {}; +//// [nestedNamedFunctions.d.ts] +type _recursive = () => _recursive; +type _recursive_1 = () => _recursive_1; +export declare const nestedObject: { + recur: () => () => (typeof nestedObject)["recur"]; +}; +export declare const nestedTuple: readonly [() => () => (typeof nestedTuple)[0]]; +export declare const object: { + recur: () => () => (typeof object)["recur"]; +}; +export declare const tuple: readonly [() => () => (typeof tuple)[0]]; +export declare const factory: () => () => _recursive; +export declare const method: { + recur(): typeof method; +}; +export declare const accessor: { + readonly recur: typeof accessor; +}; +export declare function local(): _recursive_1; +export {}; //// [recursiveStructures.d.ts] export declare const object: { value: number; @@ -932,15 +959,15 @@ export declare const nested: { }; }; export declare const shadowed: { - next: (shadowed: number) => typeof import("./recursiveStructures").shadowed["next"]; + next: (shadowed: number) => (shadowed: number) => typeof import("./recursiveStructures").shadowed["next"]; }; -export declare const memberTuple: readonly [() => (typeof memberTuple)[0]]; +export declare const memberTuple: readonly [() => () => (typeof memberTuple)[0]]; export declare const memberArray: (() => (typeof memberArray)[0])[]; export declare const quoted: { - "a-b": () => (typeof quoted)["a-b"]; + "a-b": () => () => (typeof quoted)["a-b"]; }; export declare const numeric: { - 0: () => (typeof numeric)[0]; + 0: () => () => (typeof numeric)[0]; }; export declare const key: unique symbol; export declare const computed: { @@ -1024,6 +1051,17 @@ export declare class Methods { } export declare function overloaded(value: string): typeof overloaded; export declare function overloaded(value: number): typeof overloaded; +//// [hiddenReferences.d.ts] +type _recursive = () => _recursive; +type _recursive_1 = () => _recursive_1; +type _recursive_2 = () => _recursive_2; +export declare class Hidden { + private static recur; + static expose(): _recursive; + protected next(): _recursive_1; + expose(): _recursive_2; +} +export {}; //// [signatureScopes.d.ts] export declare const scoped: { first(outer: T): { @@ -1258,12 +1296,12 @@ export declare const nestedString: { nested(inner: U): { outer: T; inner: U; - owner: typeof nestedOwner; + owner: (typeof nestedString)["owner"]; }; constrained(inner: U): { outer: T; inner: U; - owner: typeof nestedOwner; + owner: (typeof nestedString)["owner"]; }; copied(inner: U): { outer: T; @@ -1273,7 +1311,7 @@ export declare const nestedString: { rest(values_0: U): { outer: T; inner: U; - owner: typeof nestedOwner; + owner: (typeof nestedString)["owner"]; }; }; }; @@ -1286,12 +1324,12 @@ export declare const nestedBoolean: { nested(inner: U): { outer: T; inner: U; - owner: typeof nestedOwner; + owner: (typeof nestedBoolean)["owner"]; }; constrained(inner: U): { outer: T; inner: U; - owner: typeof nestedOwner; + owner: (typeof nestedBoolean)["owner"]; }; copied(inner: U): { outer: T; @@ -1301,7 +1339,7 @@ export declare const nestedBoolean: { rest(values_0: U): { outer: T; inner: U; - owner: typeof nestedOwner; + owner: (typeof nestedBoolean)["owner"]; }; }; }; @@ -1356,3 +1394,292 @@ export declare const inferredCopy: { }; }; }; +//// [mappedCycles.d.ts] +export declare const mappedCycle: { + Node: { + value: number; + next: (typeof mappedCycle)["Node"]; + }; +}; +export declare const mappedCycleCopy: { + Node: { + value: number; + next: (typeof mappedCycleCopy)["Node"]; + }; +}; +export declare const nestedCycle: { + wrapped: { + Node: { + value: string; + next: (typeof nestedCycle)["wrapped"]["Node"]; + }; + }; +}; +export declare const cycleKey: unique symbol; +export declare const keyedCycles: { + "a-b": { + value: string; + next: (typeof keyedCycles)["a-b"]; + }; + 0: { + value: boolean; + next: (typeof keyedCycles)[0]; + }; + [cycleKey]: { + value: number; + next: (typeof keyedCycles)[typeof cycleKey]; + }; +}; +export declare const sharedCycles: { + first: { + Node: { + value: number; + next: (typeof sharedCycles)["first"]["Node"]; + }; + }; + second: { + Node: { + value: number; + next: (typeof sharedCycles)["second"]["Node"]; + }; + }; +}; +export declare const broadCycle: { + Node: unknown; +}; +export declare const mutualCycle: { + First: { + value: number; + next: { + value: string; + next: (typeof mutualCycle)["First"]; + }; + }; + Second: { + value: string; + next: { + value: number; + next: (typeof mutualCycle)["Second"]; + }; + }; +}; +//// [optionalMappedCycle.d.ts] +type _recursive = { + value: number; + next: _recursive; +}; +type _recursive_1 = { + value: number; + next: _recursive_1; +}; +type _recursive_2 = { + value: string; + next: _recursive_2; +}; +type _recursive_3 = { + value: number; + next: _recursive_3; +}; +type _recursive_4 = { + value: number; + next: _recursive_4; +}; +type _recursive_5 = { + value: string; + next: _recursive_5; +}; +type _recursive_6 = { + value: boolean; + next: _recursive_6; +}; +type _recursive_7 = { + value: number; + next: _recursive_7; +}; +type _recursive_8 = { + value: number; + next: _recursive_8; +}; +type _recursive_9 = { + value: string; + next: _recursive_9; +}; +type _recursive_10 = { + value: number; + next: _recursive_10 | null; +}; +type _recursive_11 = { + value: number; + next: _recursive_11 | undefined; +}; +export declare const optionalCycle: { + Node?: _recursive | undefined; +}; +export declare const optionalCopy: { + Node?: _recursive_1 | undefined; +}; +export declare const nullableCycle: { + Node: _recursive_2 | null; +}; +export declare const mixedCycles: { + required: { + Node?: _recursive_3 | undefined; + }; + optional?: { + Node?: _recursive_3 | undefined; + } | null | undefined; +}; +export declare const sharedOptionalCycles: { + first: { + Node?: _recursive_4 | undefined; + }; + second: { + Node?: _recursive_4 | undefined; + }; +}; +export declare const nullableKey: unique symbol; +export declare const nullableKeys: { + "a-b": _recursive_5 | null; + 0: _recursive_6 | null; + [nullableKey]: _recursive_7 | null; +}; +export declare const nullableRoot: _recursive_8 | null; +export declare const optionalRoot: _recursive_9 | undefined; +export declare const nullableLinks: { + Node: { + value: number; + next: (typeof nullableLinks)["Node"]; + } | null; +}; +export declare const optionalNullableLinks: { + Node?: _recursive_10 | null | undefined; +}; +export declare const nullableOptionalLinks: { + Node: _recursive_11 | null; +}; +export declare const nullishLinks: { + Node?: { + value: number; + next: (typeof nullishLinks)["Node"]; + } | null | undefined; +}; +export {}; +//// [mixedMappedCycle.d.ts] +type _recursive = { + value: number; + next: _recursive; +}; +export declare const mixedCycle: { + Node: false | _recursive | null; +}; +export {}; +//// [anonymousBindings.d.ts] +type _recursive_1 = () => _recursive_1; +type _recursive_2 = { + value: T; + next: () => _recursive_2; + consume: (other: T) => _recursive_2; +}; +type _recursive_3 = { + outer: T; + inner: U; + next: () => _recursive_3; + shadow: (value: T_1) => { + outer: T; + inner: U; + value: T_1; + next: _recursive_3; + }; +}; +type _recursive_4 = { + value: T[K]; + next: () => _recursive_4; +}; +type _recursive_5 = { + value: T; + next: _recursive_5; +}; +type _recursive_6 = { + value: T; + next: _recursive_6; +}; +type _recursive_7 = readonly [T, _recursive_7]; +type _recursive_8 = { + value: U; + next: _recursive_8; +}; +type _recursive_9 = { [K in keyof T]: { + value: T[K]; + next: _recursive_9; +}; }; +type _recursive_10 = (value: U) => _recursive_10; +type _recursive_11 = { + right: U; + self: _recursive_11; + next: _recursive_12; +}; +type _recursive_12 = { + left: T; + next: _recursive_11; +}; +type _recursive_13 = { + outer: T; + inner: U; + next: () => _recursive_13; +}; +type _recursive_14 = { + value: T; + next(): _recursive_14; +}; +type _recursive_15 = { + consume: (value: T) => void; + next(): _recursive_15; +}; +export declare const _recursive = 1; +export declare const factory: () => () => _recursive_1; +export declare function captured(value: T): _recursive_2; +export declare function nestedCaptured(outer: T): (inner: U) => _recursive_3; +export declare function constrained(key: K): _recursive_4; +export declare function optionalCaptured(value: T): { + node?: _recursive_5 | false | null; +}; +export declare function annotatedCaptured(value: T): _recursive_6; +export declare function recursiveTuple(value: T): _recursive_7; +export declare function inferredCaptured(): (T extends () => infer U ? _recursive_8 : never); +export declare function mappedCaptured(): _recursive_9; +export declare function freshGeneric(unused: T): _recursive_10; +export declare function mutualCaptured(left: T, right: U): { + left: _recursive_12; + right: _recursive_11; +}; +export declare class CapturedClass { + value: T; + constructor(value: T); + make(inner: U): _recursive_13; +} +export declare function covariantClass(): { + new (): _recursive_14; +}; +export declare function contravariantClass(): { + new (): _recursive_15; +}; +export declare namespace Nested { + type _recursive_16 = { + value: T; + next: () => _recursive_16; + }; + export function captured(value: T): _recursive_16; + export {}; +} +export {}; +//// [shadowedMappedCycle.d.ts] +export declare const shadowedCycle: { + Node: { + value: number; + next: (shadowedCycle: T) => typeof import("./shadowedMappedCycle").shadowedCycle["Node"]; + }; +}; diff --git a/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.types b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.types index 824f65210aff0..324a771b62af4 100644 --- a/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.types +++ b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.types @@ -33,7 +33,7 @@ export function declaration() { return declaration; } export const annotated: () => typeof annotated = () => annotated; >annotated : () => typeof annotated >annotated : () => typeof annotated ->() => annotated : () => () => typeof annotated +>() => annotated : () => typeof annotated >annotated : () => typeof annotated export const first = () => second; @@ -88,8 +88,8 @@ export const contextual: () => unknown = function self() { return self; }; >self : () => typeof self export const specialized = generic; ->specialized : (value: number) => (value: T) => typeof generic ->generic : (value: number) => (value: T) => typeof generic +>specialized : (value: number) => typeof generic +>generic : (value: number) => typeof generic >generic : (value: T) => typeof generic export const annotatedParameter = (value: string | number) => annotatedParameter; @@ -1395,8 +1395,8 @@ export const mappedCycleCopy = mappedCycle; >mappedCycle : { Node: { value: number; next: any; }; } export const nestedCycle = { wrapped: build<{ Node: { value: string; next: "ref" } }>() }; ->nestedCycle : { wrapped: { Node: { value: string; next: any; }; }; } ->{ wrapped: build<{ Node: { value: string; next: "ref" } }>() } : { wrapped: { Node: { value: string; next: any; }; }; } +>nestedCycle : { wrapped: { Node: { value: string; next: (typeof nestedCycle)["wrapped"]["Node"]; }; }; } +>{ wrapped: build<{ Node: { value: string; next: "ref" } }>() } : { wrapped: { Node: { value: string; next: (typeof nestedCycle)["wrapped"]["Node"]; }; }; } >wrapped : { Node: { value: string; next: any; }; } >build<{ Node: { value: string; next: "ref" } }>() : { Node: { value: string; next: any; }; } >build : () => { [K in keyof M]: Resolve; } @@ -1432,8 +1432,8 @@ export const keyedCycles = build<{ }>(); export const sharedCycles = { ->sharedCycles : { first: { Node: { value: number; next: any; }; }; second: { Node: { value: number; next: any; }; }; } ->{ first: mappedCycle, second: mappedCycle,} : { first: { Node: { value: number; next: any; }; }; second: { Node: { value: number; next: any; }; }; } +>sharedCycles : { first: { Node: { value: number; next: (typeof sharedCycles)["first"]["Node"]; }; }; second: { Node: { value: number; next: (typeof sharedCycles)["second"]["Node"]; }; }; } +>{ first: mappedCycle, second: mappedCycle,} : { first: { Node: { value: number; next: (typeof sharedCycles)["first"]["Node"]; }; }; second: { Node: { value: number; next: (typeof sharedCycles)["second"]["Node"]; }; }; } first: mappedCycle, >first : { Node: { value: number; next: any; }; } @@ -1497,7 +1497,7 @@ const nestedMappedValue: string = nestedCycle.wrapped.Node.next.next.value; >nestedCycle.wrapped.Node.next : { value: string; next: any; } >nestedCycle.wrapped.Node : { value: string; next: any; } >nestedCycle.wrapped : { Node: { value: string; next: any; }; } ->nestedCycle : { wrapped: { Node: { value: string; next: any; }; }; } +>nestedCycle : { wrapped: { Node: { value: string; next: (typeof nestedCycle)["wrapped"]["Node"]; }; }; } >wrapped : { Node: { value: string; next: any; }; } >Node : { value: string; next: any; } >next : { value: string; next: any; } @@ -1547,7 +1547,7 @@ const sharedMappedValue: number = sharedCycles.second.Node.next.next.value; >sharedCycles.second.Node.next : { value: number; next: any; } >sharedCycles.second.Node : { value: number; next: any; } >sharedCycles.second : { Node: { value: number; next: any; }; } ->sharedCycles : { first: { Node: { value: number; next: any; }; }; second: { Node: { value: number; next: any; }; }; } +>sharedCycles : { first: { Node: { value: number; next: (typeof sharedCycles)["first"]["Node"]; }; }; second: { Node: { value: number; next: (typeof sharedCycles)["second"]["Node"]; }; }; } >second : { Node: { value: number; next: any; }; } >Node : { value: number; next: any; } >next : { value: number; next: any; } diff --git a/tsc/testdata/baselines/reference/compiler/reverseMappedDeclarationSerialization.errors.txt b/tsc/testdata/baselines/reference/compiler/reverseMappedDeclarationSerialization.errors.txt index 3d014b41978e9..b8d7e315acc12 100644 --- a/tsc/testdata/baselines/reference/compiler/reverseMappedDeclarationSerialization.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/reverseMappedDeclarationSerialization.errors.txt @@ -1,4 +1,3 @@ -recursive.ts(10,14): error TS5088: The inferred type of 'recursive' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. recursive.ts(17,14): error TS7056: The inferred type of this node exceeds the maximum length the compiler will serialize. An explicit type annotation is needed. recursive.ts(23,14): error TS7056: The inferred type of this node exceeds the maximum length the compiler will serialize. An explicit type annotation is needed. @@ -35,7 +34,7 @@ recursive.ts(23,14): error TS7056: The inferred type of this node exceeds the ma export const deepExplicit: { a: { b: { c: { d: string } } } } = decode({ a: { b: { c: { d: stringValidator } } } }); -==== recursive.ts (3 errors) ==== +==== recursive.ts (2 errors) ==== type Validator = ((input: unknown) => T | undefined) | { [K in keyof T]: Validator; }; @@ -46,8 +45,6 @@ recursive.ts(23,14): error TS7056: The inferred type of this node exceeds the ma }; declare const recursiveInput: RecursiveInput; export const recursive = decode(recursiveInput); - ~~~~~~~~~ -!!! error TS5088: The inferred type of 'recursive' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. interface GrowingInput { value: (input: unknown) => T; diff --git a/tsc/testdata/baselines/reference/conformance/commonJSImportNestedClassTypeReference.errors.txt b/tsc/testdata/baselines/reference/conformance/commonJSImportNestedClassTypeReference.errors.txt index 230158e37d47e..109a57b0b746b 100644 --- a/tsc/testdata/baselines/reference/conformance/commonJSImportNestedClassTypeReference.errors.txt +++ b/tsc/testdata/baselines/reference/conformance/commonJSImportNestedClassTypeReference.errors.txt @@ -1,5 +1,4 @@ main.js(2,13): error TS2749: 'K' refers to a value, but is being used as a type here. Did you mean 'typeof K'? -mod1.js(7,1): error TS5088: The inferred type of 'K' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. ==== main.js (1 errors) ==== @@ -11,7 +10,7 @@ mod1.js(7,1): error TS5088: The inferred type of 'K' references a type with a cy k.values() } -==== mod1.js (1 errors) ==== +==== mod1.js (0 errors) ==== var NS = {} NS.K =class { values() { @@ -19,6 +18,4 @@ mod1.js(7,1): error TS5088: The inferred type of 'K' references a type with a cy } } exports.K = NS.K; - ~~~~~~~~~~~~~~~~ -!!! error TS5088: The inferred type of 'K' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. \ No newline at end of file diff --git a/tsc/testdata/baselines/reference/conformance/commonJSImportNestedClassTypeReference.js b/tsc/testdata/baselines/reference/conformance/commonJSImportNestedClassTypeReference.js index 2e19813a3b123..921d80dafe416 100644 --- a/tsc/testdata/baselines/reference/conformance/commonJSImportNestedClassTypeReference.js +++ b/tsc/testdata/baselines/reference/conformance/commonJSImportNestedClassTypeReference.js @@ -35,5 +35,13 @@ function f(k) { } +//// [mod1.d.ts] +type _recursive = { + values(): _recursive; +}; +export declare var K: { + new (): _recursive; +}; +export {}; //// [main.d.ts] export {}; diff --git a/tsc/testdata/baselines/reference/conformance/privateClassPropertyAccessibleWithinNestedClass(target=es2015).types b/tsc/testdata/baselines/reference/conformance/privateClassPropertyAccessibleWithinNestedClass(target=es2015).types index 56f726294d255..c07dc8b91c407 100644 --- a/tsc/testdata/baselines/reference/conformance/privateClassPropertyAccessibleWithinNestedClass(target=es2015).types +++ b/tsc/testdata/baselines/reference/conformance/privateClassPropertyAccessibleWithinNestedClass(target=es2015).types @@ -78,10 +78,10 @@ class C { >x : C var x1 = x.foo; ->x1 : () => any ->x.foo : () => any +>x1 : () => C["foo"] +>x.foo : () => C["foo"] >x : C ->foo : () => any +>foo : () => C["foo"] var x2 = x.bar; >x2 : () => void @@ -131,10 +131,10 @@ class C { >C : typeof C var y1 = y.foo; ->y1 : () => any ->y.foo : () => any +>y1 : () => C["foo"] +>y.foo : () => C["foo"] >y : C ->foo : () => any +>foo : () => C["foo"] var y2 = y.bar; >y2 : () => void diff --git a/tsc/testdata/baselines/reference/conformance/protectedClassPropertyAccessibleWithinNestedClass(target=es2015).types b/tsc/testdata/baselines/reference/conformance/protectedClassPropertyAccessibleWithinNestedClass(target=es2015).types index 22b9007a7b0d6..4501ee18e5cac 100644 --- a/tsc/testdata/baselines/reference/conformance/protectedClassPropertyAccessibleWithinNestedClass(target=es2015).types +++ b/tsc/testdata/baselines/reference/conformance/protectedClassPropertyAccessibleWithinNestedClass(target=es2015).types @@ -78,10 +78,10 @@ class C { >x : C var x1 = x.foo; ->x1 : () => any ->x.foo : () => any +>x1 : () => C["foo"] +>x.foo : () => C["foo"] >x : C ->foo : () => any +>foo : () => C["foo"] var x2 = x.bar; >x2 : () => void @@ -131,10 +131,10 @@ class C { >C : typeof C var y1 = y.foo; ->y1 : () => any ->y.foo : () => any +>y1 : () => C["foo"] +>y.foo : () => C["foo"] >y : C ->foo : () => any +>foo : () => C["foo"] var y2 = y.bar; >y2 : () => void diff --git a/tsc/testdata/baselines/reference/conformance/varianceAnnotations.errors.txt b/tsc/testdata/baselines/reference/conformance/varianceAnnotations.errors.txt index b47254c0503e3..c58ce8ee943af 100644 --- a/tsc/testdata/baselines/reference/conformance/varianceAnnotations.errors.txt +++ b/tsc/testdata/baselines/reference/conformance/varianceAnnotations.errors.txt @@ -64,10 +64,9 @@ varianceAnnotations.ts(160,68): error TS2345: Argument of type 'ActionObject<{ t Types of property '_storedEvent' are incompatible. Type '{ type: "PLAY"; value: number; } | { type: "RESET"; }' is not assignable to type '{ type: "PLAY"; value: number; }'. Property 'value' is missing in type '{ type: "RESET"; }' but required in type '{ type: "PLAY"; value: number; }'. -varianceAnnotations.ts(170,5): error TS5088: The inferred type of 'OuterC' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. -==== varianceAnnotations.ts (32 errors) ==== +==== varianceAnnotations.ts (31 errors) ==== type Covariant = { x: T; } @@ -336,8 +335,6 @@ varianceAnnotations.ts(170,5): error TS5088: The inferred type of 'OuterC' refer } let OuterC = class C { - ~~~~~~ -!!! error TS5088: The inferred type of 'OuterC' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. foo(): C { return this; } diff --git a/tsc/testdata/baselines/reference/conformance/varianceAnnotations.js b/tsc/testdata/baselines/reference/conformance/varianceAnnotations.js index 050275ef773ca..5d30bdbb834b2 100644 --- a/tsc/testdata/baselines/reference/conformance/varianceAnnotations.js +++ b/tsc/testdata/baselines/reference/conformance/varianceAnnotations.js @@ -212,3 +212,121 @@ let OuterC = class C { return this; } }; + + +//// [varianceAnnotations.d.ts] +type _recursive = { + foo(): _recursive; +}; +type Covariant = { + x: T; +}; +declare let super_covariant: Covariant; +declare let sub_covariant: Covariant; +type Contravariant = { + f: (x: T) => void; +}; +declare let super_contravariant: Contravariant; +declare let sub_contravariant: Contravariant; +type Invariant = { + f: (x: T) => T; +}; +declare let super_invariant: Invariant; +declare let sub_invariant: Invariant; +type T10 = T; +type T11 = keyof T; +type T12 = T[K]; +type T13 = T[keyof T]; +type Covariant1 = { + x: T; +}; +type Contravariant1 = keyof T; +type Contravariant2 = { + f: (x: T) => void; +}; +type Invariant1 = { + f: (x: T) => T; +}; +type Invariant2 = { + f: (x: T) => T; +}; +type Foo1 = { + x: T; + f: FooFn1; +}; +type FooFn1 = (foo: Bar1) => void; +type Bar1 = { + value: Foo1; +}; +type Foo2 = { + x: T; + f: FooFn2; +}; +type FooFn2 = (foo: Bar2) => void; +type Bar2 = { + value: Foo2; +}; +type Foo3 = { + x: T; + f: FooFn3; +}; +type FooFn3 = (foo: Bar3) => void; +type Bar3 = { + value: Foo3; +}; +type T20 = T; +type T21 = T; +type T22 = T; +type T23 = T; +declare function f1(x: T): void; +declare function f2(): T; +declare class C { + in a: number; + out b: number; +} +interface Baz { +} +interface Baz { +} +declare let baz1: Baz; +declare let baz2: Baz; +interface Parent { + child: Child | null; + parent: Parent | null; +} +interface Child extends Parent { + readonly a: A; + readonly b: B; +} +declare function fn(inp: Child): void; +declare const pu: Parent; +declare const notString: Parent; +declare class StateNode { + _storedEvent: TEvent; + _action: ActionObject; + _state: StateNode; +} +interface ActionObject { + exec: (meta: StateNode) => void; +} +declare function createMachine(action: ActionObject): StateNode; +declare function interpret(machine: StateNode): void; +declare const machine: StateNode; +declare const qq: ActionObject<{ + type: "PLAY"; + value: number; +}>; +declare let Anon: { + new (): { + foo(): InstanceType<(typeof Anon)>; + }; +}; +declare let OuterC: { + new (): _recursive; +}; diff --git a/tsc/testdata/baselines/reference/fourslash/quickInfo/recursiveFunctionCallQuickInfo.baseline b/tsc/testdata/baselines/reference/fourslash/quickInfo/recursiveFunctionCallQuickInfo.baseline index 0f187f8a8ef2d..ebe00ea2286a0 100644 --- a/tsc/testdata/baselines/reference/fourslash/quickInfo/recursiveFunctionCallQuickInfo.baseline +++ b/tsc/testdata/baselines/reference/fourslash/quickInfo/recursiveFunctionCallQuickInfo.baseline @@ -107,7 +107,7 @@ // ^^^^^^^ // | ---------------------------------------------------------------------- // | ```typescript -// | const generic: (value: number) => (value: T) => typeof generic +// | const generic: (value: number) => typeof generic // | ``` // | // | (verbosity level: 0) @@ -117,7 +117,7 @@ // ^^^^^^^^^^^ // | ---------------------------------------------------------------------- // | ```typescript -// | const specialized: (value: string) => (value: T) => typeof generic +// | const specialized: (value: string) => typeof generic // | ``` // | // | (verbosity level: 0) @@ -311,7 +311,7 @@ // ^^^^^^^^^^^^^^^ // | ---------------------------------------------------------------------- // | ```typescript -// | function genericFunction(value: number): (value: T) => typeof genericFunction +// | function genericFunction(value: number): typeof genericFunction // | ``` // | // | (verbosity level: 0) @@ -955,7 +955,7 @@ // | wrapped: { // | Node: { // | value: number; -// | next: ...; +// | next: (typeof nestedCycle)["wrapped"]["Node"]; // | }; // | }; // | } @@ -971,13 +971,13 @@ // | first: { // | Node: { // | value: number; -// | next: ...; +// | next: (typeof sharedCycles)["first"]["Node"]; // | }; // | }; // | second: { // | Node: { // | value: number; -// | next: ...; +// | next: (typeof sharedCycles)["second"]["Node"]; // | }; // | }; // | } @@ -1046,7 +1046,7 @@ // | cycle: { // | Node: { // | value: number; -// | next: ... | null; +// | next: (typeof nullableLinkBox)["cycle"]["Node"]; // | } | null; // | }; // | } @@ -1498,7 +1498,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\nconst generic: (value: number) => (value: T) => typeof generic\n```\n" + "value": "```typescript\nconst generic: (value: number) => typeof generic\n```\n" }, "range": { "start": { @@ -1528,7 +1528,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\nconst specialized: (value: string) => (value: T) => typeof generic\n```\n" + "value": "```typescript\nconst specialized: (value: string) => typeof generic\n```\n" }, "range": { "start": { @@ -2188,7 +2188,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\nfunction genericFunction(value: number): (value: T) => typeof genericFunction\n```\n" + "value": "```typescript\nfunction genericFunction(value: number): typeof genericFunction\n```\n" }, "range": { "start": { @@ -3058,7 +3058,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\nconst nestedCycle: {\n wrapped: {\n Node: {\n value: number;\n next: ...;\n };\n };\n}\n```\n" + "value": "```typescript\nconst nestedCycle: {\n wrapped: {\n Node: {\n value: number;\n next: (typeof nestedCycle)[\"wrapped\"][\"Node\"];\n };\n };\n}\n```\n" }, "range": { "start": { @@ -3088,7 +3088,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\nconst sharedCycles: {\n first: {\n Node: {\n value: number;\n next: ...;\n };\n };\n second: {\n Node: {\n value: number;\n next: ...;\n };\n };\n}\n```\n" + "value": "```typescript\nconst sharedCycles: {\n first: {\n Node: {\n value: number;\n next: (typeof sharedCycles)[\"first\"][\"Node\"];\n };\n };\n second: {\n Node: {\n value: number;\n next: (typeof sharedCycles)[\"second\"][\"Node\"];\n };\n };\n}\n```\n" }, "range": { "start": { @@ -3208,7 +3208,7 @@ "hover": { "contents": { "kind": "markdown", - "value": "```typescript\nconst nullableLinkBox: {\n cycle: {\n Node: {\n value: number;\n next: ... | null;\n } | null;\n };\n}\n```\n" + "value": "```typescript\nconst nullableLinkBox: {\n cycle: {\n Node: {\n value: number;\n next: (typeof nullableLinkBox)[\"cycle\"][\"Node\"];\n } | null;\n };\n}\n```\n" }, "range": { "start": { diff --git a/tsc/testdata/baselines/reference/tsbuild/incremental/recursive-function-declaration-consumption.js b/tsc/testdata/baselines/reference/tsbuild/incremental/recursive-function-declaration-consumption.js index bcba60f7ebbea..b2ab4fd63380e 100644 --- a/tsc/testdata/baselines/reference/tsbuild/incremental/recursive-function-declaration-consumption.js +++ b/tsc/testdata/baselines/reference/tsbuild/incremental/recursive-function-declaration-consumption.js @@ -424,252 +424,190 @@ type NonNullable = "shadowed"; tsgo --build consumer ExitStatus:: DiagnosticsPresent_OutputsGenerated Output:: -producer/index.ts:83:14 - error TS5088: The inferred type of 'mappedCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:158:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. -83 export const mappedCycle = build<{ Node: { value: number; next: "ref" } }>(); -   ~~~~~~~~~~~ +158 const invalid: number = arrow()()(); +   ~~~~~~~ -producer/index.ts:84:14 - error TS5088: The inferred type of 'mappedCycleCopy' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:159:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. -84 export const mappedCycleCopy = mappedCycle; -   ~~~~~~~~~~~~~~~ +159 const invalidExpression: number = expression()()(); +   ~~~~~~~~~~~~~~~~~ -producer/index.ts:85:14 - error TS5088: The inferred type of 'nestedCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:160:7 - error TS2322: Type '() => { call: ...; }' is not assignable to type 'number'. -85 export const nestedCycle = { wrapped: build<{ Node: { value: string; next: "ref" } }>() }; -   ~~~~~~~~~~~ +160 const invalidObject: number = objectReturn().call; +   ~~~~~~~~~~~~~ -producer/index.ts:87:14 - error TS5088: The inferred type of 'keyedCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:161:7 - error TS2322: Type '() => readonly [...]' is not assignable to type 'number'. -87 export const keyedCycles = build<{ -   ~~~~~~~~~~~ +161 const invalidTuple: number = tupleReturn()[0]; +   ~~~~~~~~~~~~ -producer/index.ts:92:14 - error TS5088: The inferred type of 'sharedCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:162:7 - error TS2322: Type '(shadowed: number) => ...' is not assignable to type 'number'. -92 export const sharedCycles = { first: mappedCycle, second: mappedCycle }; -   ~~~~~~~~~~~~ +162 const invalidShadowed: number = shadowed(1); +   ~~~~~~~~~~~~~~~ -producer/index.ts:97:14 - error TS5088: The inferred type of 'mutualCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:163:7 - error TS2322: Type 'number' is not assignable to type 'string'. -97 export const mutualCycle = buildMutual<{ -   ~~~~~~~~~~~ +163 const invalidObjectValue: string = object.next().value; +   ~~~~~~~~~~~~~~~~~~ -producer/index.ts:105:14 - error TS5088: The inferred type of 'shadowedCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:164:7 - error TS2322: Type 'readonly [() => ...]' is not assignable to type 'number'. -105 export const shadowedCycle = buildShadowed<{ Node: { value: number; next: "ref" } }>(); -   ~~~~~~~~~~~~~ +164 const invalidTupleValue: number = tuple[0](); +   ~~~~~~~~~~~~~~~~~ -producer/index.ts:107:14 - error TS5088: The inferred type of 'optionalCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:165:7 - error TS2322: Type 'string' is not assignable to type 'number'. -107 export const optionalCycle = buildOptional<{ Node: { value: number; next: "ref" } }>(); -   ~~~~~~~~~~~~~ +165 const invalidSpecialized: number = specialized.next().value; +   ~~~~~~~~~~~~~~~~~~ -producer/index.ts:109:14 - error TS5088: The inferred type of 'nullableCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:166:7 - error TS2322: Type '{ next: ...; }' is not assignable to type 'number'. -109 export const nullableCycle = buildNullable<{ Node: { value: string; next: "ref" } }>(); -   ~~~~~~~~~~~~~ +166 const invalidMapped: number = mapped.next; +   ~~~~~~~~~~~~~ -producer/index.ts:111:14 - error TS5088: The inferred type of 'mixedCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:167:7 - error TS2322: Type 'string' is not assignable to type 'number'. -111 export const mixedCycles = wrap(optionalCycle); -   ~~~~~~~~~~~ +167 const invalidAnnotation: number = viaAnnotation.next().value; +   ~~~~~~~~~~~~~~~~~ -producer/index.ts:112:14 - error TS5088: The inferred type of 'sharedOptionalCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:168:7 - error TS2322: Type 'string' is not assignable to type 'number'. -112 export const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle }; -   ~~~~~~~~~~~~~~~~~~~~ +168 const invalidLink: number = nextLink.next.value; +   ~~~~~~~~~~~ -producer/index.ts:113:14 - error TS5088: The inferred type of 'nullableKeys' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:169:7 - error TS2322: Type 'number' is not assignable to type 'string'. -113 export const nullableKeys = buildNullable<{ -   ~~~~~~~~~~~~ +169 const invalidCallable: string = nextCallable(1).link.value; +   ~~~~~~~~~~~~~~~ -producer/index.ts:119:14 - error TS5088: The inferred type of 'nullableRoot' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:170:7 - error TS2322: Type 'string' is not assignable to type 'number'. -119 export const nullableRoot = buildNullableRoot<{ Node: { value: number; next: "ref" } }>(); -   ~~~~~~~~~~~~ +170 const invalidHiddenValue: number = hiddenAlias.next.next.value; +   ~~~~~~~~~~~~~~~~~~ -producer/index.ts:121:14 - error TS5088: The inferred type of 'optionalRoot' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:171:7 - error TS2322: Type '() => (typeof Methods)["recur"]' is not assignable to type 'number'. -121 export const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: "ref" } }>(); -   ~~~~~~~~~~~~ +171 const invalidMethod: number = Methods.recur()(); +   ~~~~~~~~~~~~~ -producer/index.ts:126:14 - error TS5088: The inferred type of 'nullableLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:172:7 - error TS2322: Type '() => (typeof Methods)[typeof key]' is not assignable to type 'number'. -126 export const nullableLinks = buildNullableLinks<{ Node: { value: number; next: "ref" } }>(); -   ~~~~~~~~~~~~~ +172 const invalidComputedMethod: number = Methods[key]()(); +   ~~~~~~~~~~~~~~~~~~~~~ -producer/index.ts:128:14 - error TS5088: The inferred type of 'optionalNullableLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:173:7 - error TS2322: Type 'string' is not assignable to type 'boolean'. -128 export const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: "ref" } }>(); -   ~~~~~~~~~~~~~~~~~~~~~ +173 const invalidNestedOuter: boolean = nestedString.outer; +   ~~~~~~~~~~~~~~~~~~ -producer/index.ts:133:14 - error TS5088: The inferred type of 'nullableOptionalLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:174:7 - error TS2322: Type 'number' is not assignable to type 'string'. -133 export const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: "ref" } }>(); -   ~~~~~~~~~~~~~~~~~~~~~ +174 const invalidNestedInner: string = nestedString.inner; +   ~~~~~~~~~~~~~~~~~~ -producer/index.ts:138:14 - error TS5088: The inferred type of 'nullishLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:175:26 - error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. -138 export const nullishLinks = buildNullishLinks<{ Node: { value: number; next: "ref" } }>(); -   ~~~~~~~~~~~~ +175 nestedNumber.constrained("wrong"); +   ~~~~~~~ -producer/index.ts:140:14 - error TS5088: The inferred type of 'mixedUnionCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:176:7 - error TS2322: Type 'number' is not assignable to type 'string'. -140 export const mixedUnionCycle = buildMixed<{ Node: { value: number; next: "ref" } }>(); -   ~~~~~~~~~~~~~~~ +176 const invalidMappedCycleValue: string = mappedCycle.Node.next.next.value; +   ~~~~~~~~~~~~~~~~~~~~~~~ -producer/index.ts:142:14 - error TS5088: The inferred type of 'factory' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:177:7 - error TS2322: Type 'string' is not assignable to type 'number'. -142 export const factory = () => function self() { return self; }; -   ~~~~~~~ +177 const invalidMutualCycleValue: number = mutualCycle.First.next.value; +   ~~~~~~~~~~~~~~~~~~~~~~~ -producer/index.ts:143:17 - error TS5088: The inferred type of 'captured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:178:7 - error TS2322: Type 'number' is not assignable to type 'string'. -143 export function captured(value: T) { -   ~~~~~~~~ +178 const invalidShadowedMappedValue: string = shadowedCycle.Node.next(1).next("text").value; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~ -producer/index.ts:147:17 - error TS5088: The inferred type of 'nestedCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:179:7 - error TS2322: Type 'null' is not assignable to type '_recursive_1'. -147 export function nestedCaptured(outer: T) { -   ~~~~~~~~~~~~~~ +179 const invalidNullNext: OptionalNode["next"] = null; +   ~~~~~~~~~~~~~~~ -producer/index.ts:156:17 - error TS5088: The inferred type of 'constrained' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:180:7 - error TS2322: Type 'undefined' is not assignable to type '_recursive_1'. -156 export function constrained(key: K) { -   ~~~~~~~~~~~ +180 const invalidUndefinedNext: OptionalNode["next"] = undefined; +   ~~~~~~~~~~~~~~~~~~~~ -producer/index.ts:160:17 - error TS5088: The inferred type of 'optionalCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:181:42 - error TS2531: Object is possibly 'null'. -160 export function optionalCaptured(value: T) { -   ~~~~~~~~~~~~~~~~ +181 const invalidNullableLinkValue: number = nullableLinks.Node!.next.value; +   ~~~~~~~~~~~~~~~~~~~~~~~~ -producer/index.ts:164:17 - error TS5088: The inferred type of 'annotatedCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:182:41 - error TS2533: Object is possibly 'null' or 'undefined'. -164 export function annotatedCaptured(value: T) { -   ~~~~~~~~~~~~~~~~~ +182 const invalidNullishLinkValue: number = nullishLinks.Node!.next.value; +   ~~~~~~~~~~~~~~~~~~~~~~~ -producer/index.ts:168:17 - error TS5088: The inferred type of 'recursiveTuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:183:26 - error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. -168 export function recursiveTuple(value: T) { -   ~~~~~~~~~~~~~~ +183 captured("text").consume(1); +   ~ -producer/index.ts:172:17 - error TS5088: The inferred type of 'inferredCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:184:7 - error TS2322: Type 'string' is not assignable to type 'number'. -172 export function inferredCaptured() { -   ~~~~~~~~~~~~~~~~ +184 const invalidRecursiveTupleValue: number = recursiveTuple("text")[1][0]; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~ -producer/index.ts:176:17 - error TS5088: The inferred type of 'mappedCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:185:7 - error TS2322: Type 'number' is not assignable to type 'string'. -176 export function mappedCaptured() { -   ~~~~~~~~~~~~~~ +185 const invalidCapturedOuter: string = nestedCapturedValue.outer; +   ~~~~~~~~~~~~~~~~~~~~ -producer/index.ts:180:17 - error TS5088: The inferred type of 'freshGeneric' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:186:7 - error TS2322: Type 'string' is not assignable to type 'number'. -180 export function freshGeneric(unused: T) { -   ~~~~~~~~~~~~ +186 const invalidCapturedInner: number = nestedCapturedValue.inner; +   ~~~~~~~~~~~~~~~~~~~~ -producer/index.ts:184:17 - error TS5088: The inferred type of 'mutualCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:188:7 - error TS2322: Type 'boolean' is not assignable to type '_recursive_13'. -184 export function mutualCaptured(left: T, right: U) { -   ~~~~~~~~~~~~~~ +188 const invalidMixedNext: WithoutFalseOrNullish["next"] = false; +   ~~~~~~~~~~~~~~~~ -producer/index.ts:191:5 - error TS5088: The inferred type of 'make' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:189:7 - error TS2322: Type 'string' is not assignable to type 'number'. -191 make(inner: U) { -   ~~~~ +189 const invalidInferredCapturedValue: number = inferredCaptured<() => string>().next.value; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -producer/index.ts:196:17 - error TS5088: The inferred type of 'covariantClass' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:190:7 - error TS2322: Type 'number' is not assignable to type 'string'. -196 export function covariantClass() { -   ~~~~~~~~~~~~~~ +190 const invalidMappedCapturedValue: string = mappedCaptured<{ value: number }>().value.next.value.value; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~ -producer/index.ts:202:17 - error TS5088: The inferred type of 'contravariantClass' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:191:7 - error TS2322: Type 'number' is not assignable to type 'boolean'. -202 export function contravariantClass() { -   ~~~~~~~~~~~~~~~~~~ +191 const invalidMutualCapturedValue: boolean = mutualCaptured(1, "text").right.self.next.left; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~ -producer/index.ts:209:21 - error TS5088: The inferred type of 'captured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:192:7 - error TS2322: Type 'string' is not assignable to type 'number'. -209 export function captured(value: T) { -   ~~~~~~~~ +192 const invalidCapturedClassValue: number = capturedClassResult.outer; +   ~~~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:1:88 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. +consumer/index.ts:193:7 - error TS2322: Type '_recursive_27' is not assignable to type '_recursive_27'. + Type 'unknown' is not assignable to type 'string'. -1 import { arrow, expression, first, generic, objectReturn, tupleReturn, shadowed } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +193 const invalidCovariance: typeof covariantString = covariantUnknown.next(); +   ~~~~~~~~~~~~~~~~~ -consumer/index.ts:2:64 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. +consumer/index.ts:194:7 - error TS2322: Type '_recursive_28' is not assignable to type '_recursive_28'. + Type 'unknown' is not assignable to type 'string'. -2 import { object, method, accessor, tuple, array, nested } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +194 const invalidContravariance: typeof contravariantUnknown = contravariantString.next(); +   ~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:3:94 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. -3 import { memberTuple, memberArray, quoted, numeric, key, computed, union, specialized } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:4:48 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -4 import { indexed, mapped, viaAnnotation } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:5:86 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -5 import { nextLink, nextCallable, parenthesized, asserted, Methods, overloaded } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:6:51 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -6 import { hiddenAlias, siblingHiddenAliases } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:7:30 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -7 import { nestedNumber } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:8:124 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -8 import { mappedCycle, mappedCycleCopy, nestedCycle, cycleKey, keyedCycles, sharedCycles, mutualCycle, shadowedCycle } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:9:152 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -9 import { optionalCycle, nullableCycle, mixedCycles, sharedOptionalCycles, nullableKeys, nullableRoot, optionalRoot, nullableLinks, nullishLinks } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:10:62 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -10 import { optionalNullableLinks, nullableOptionalLinks } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:11:142 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -11 import { mixedUnionCycle, factory, captured, nestedCaptured, constrained, optionalCaptured, annotatedCaptured, recursiveTuple, Nested } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:12:80 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -12 import { inferredCaptured, mappedCaptured, freshGeneric, mutualCaptured } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:13:31 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -13 import { CapturedClass } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:14:52 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -14 import { covariantClass, contravariantClass } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - -Found 48 errors in 2 files. - -Errors Files - 14 consumer/index.ts:1 - 34 producer/index.ts:83 +Found 36 errors in the same file, starting at: consumer/index.ts:158 //// [/home/src/tslibs/TS/Lib/lib.es2026.full.d.ts] *Lib* /// @@ -710,6 +648,491 @@ declare const console: { log(msg: any): void; }; "size": 71, "semanticErrors": true } +//// [/home/src/workspaces/project/producer/dist/index.d.ts] *new* +type _recursive_1 = { + value: number; + next: _recursive_1; +}; +type _recursive_2 = { + value: string; + next: _recursive_2; +}; +type _recursive_3 = { + value: number; + next: _recursive_3; +}; +type _recursive_4 = { + value: number; + next: _recursive_4; +}; +type _recursive_5 = { + value: string; + next: _recursive_5; +}; +type _recursive_6 = { + value: boolean; + next: _recursive_6; +}; +type _recursive_7 = { + value: number; + next: _recursive_7; +}; +type _recursive_8 = { + value: number; + next: _recursive_8; +}; +type _recursive_9 = { + value: string; + next: _recursive_9; +}; +type _recursive_10 = { + value: number; + next: _recursive_10 | null; +}; +type _recursive_11 = { + value: number; + next: _recursive_11 | undefined; +}; +type _recursive_12 = { + value: number; + next: _recursive_12 | null | undefined; +}; +type _recursive_13 = { + value: number; + next: _recursive_13; +}; +type _recursive_14 = () => _recursive_14; +type _recursive_15 = { + value: T; + next: () => _recursive_15; + consume: (other: T) => _recursive_15; +}; +type _recursive_16 = { + outer: T; + inner: U; + next: () => _recursive_16; + shadow: (value: T_1) => { + outer: T; + inner: U; + value: T_1; + next: _recursive_16; + }; +}; +type _recursive_17 = { + value: T[K]; + next: () => _recursive_17; +}; +type _recursive_18 = { + value: T; + next: _recursive_18; +}; +type _recursive_19 = { + value: T; + next: _recursive_19; +}; +type _recursive_20 = readonly [T, _recursive_20]; +type _recursive_21 = { + value: U; + next: _recursive_21; +}; +type _recursive_22 = { [K in keyof T]: { + value: T[K]; + next: _recursive_22; +}; }; +type _recursive_23 = (value: U) => _recursive_23; +type _recursive_24 = { + right: U; + self: _recursive_24; + next: _recursive_25; +}; +type _recursive_25 = { + left: T; + next: _recursive_24; +}; +type _recursive_26 = { + outer: T; + inner: U; + next: () => _recursive_26; +}; +type _recursive_27 = { + value: T; + next(): _recursive_27; +}; +type _recursive_28 = { + consume: (value: T) => void; + next(): _recursive_28; +}; +export declare const arrow: () => typeof arrow; +export declare const expression: () => typeof expression; +export declare const first: () => typeof second; +export declare const second: () => typeof first; +export declare const generic: (value: T) => typeof generic; +export declare const objectReturn: () => { + call: typeof objectReturn; +}; +export declare const tupleReturn: () => readonly [typeof tupleReturn]; +export declare const shadowed: (shadowed: number) => typeof import(".").shadowed; +export declare const object: { + value: number; + next: () => typeof object; +}; +export declare const method: { + value: number; + next(): typeof method; +}; +export declare const accessor: { + value: number; + readonly next: typeof accessor; +}; +export declare const tuple: readonly [() => typeof tuple]; +export declare const array: (() => typeof array)[]; +export declare const nested: { + inner: { + next(): { + next(): (typeof nested)["inner"]; + }; + }; +}; +export declare const memberTuple: readonly [() => () => (typeof memberTuple)[0]]; +export declare const memberArray: (() => (typeof memberArray)[0])[]; +export declare const quoted: { + "a-b": () => () => (typeof quoted)["a-b"]; +}; +export declare const numeric: { + 0: () => () => (typeof numeric)[0]; +}; +export declare const key: unique symbol; +export declare const computed: { + [key]: () => (typeof computed)[typeof key]; +}; +export declare const union: { + next: () => typeof union; +} | undefined; +export declare const specialized: { + value: string; + next: () => typeof specialized; +}; +export declare const indexed: { + [key: string]: typeof indexed; +}; +export declare const mapped: { + next: typeof mapped; +}; +export declare const viaAnnotation: { + value: string; + next: () => typeof viaAnnotation; +}; +export type Link = { + value: T; + next: Link; +}; +export type Callable = { + (value: T): Callable; + link: Link; +}; +export declare const link: Link; +export declare const callable: Callable; +export declare const nextLink: Link; +export declare const nextCallable: Callable; +export declare const hiddenAlias: { + value: string; + next: typeof hiddenAlias; +}; +export declare const siblingHiddenAliases: { + first: { + value: string; + next: (typeof siblingHiddenAliases)["first"]; + }; + second: { + value: string; + next: (typeof siblingHiddenAliases)["second"]; + }; +}; +export declare const parenthesized: () => typeof parenthesized; +export declare const asserted: () => typeof asserted; +export declare class Methods { + static recur(): (typeof Methods)["recur"]; + static "a-b"(): (typeof Methods)["a-b"]; + static [key](): (typeof Methods)[typeof key]; + recur(): Methods["recur"]; +} +export declare function overloaded(value: string): typeof overloaded; +export declare function overloaded(value: number): typeof overloaded; +export declare const nestedOwner: { + make(outer: T): { + nested(inner: U): { + outer: T; + inner: U; + owner: typeof nestedOwner; + }; + constrained(inner: U): { + outer: T; + inner: U; + owner: typeof nestedOwner; + }; + copied(inner: U): { + outer: T; + inner: U; + owner: typeof nestedOwner; + }; + rest(values_0: U): { + outer: T; + inner: U; + owner: typeof nestedOwner; + }; + }; +}; +export declare const nestedNumber: { + nested(inner: U): { + outer: number; + inner: U; + owner: { + make(outer: T): { + nested(inner: U_1): { + outer: T; + inner: U_1; + owner: typeof nestedOwner; + }; + constrained(inner: U_1): { + outer: T; + inner: U_1; + owner: typeof nestedOwner; + }; + copied(inner: U_1): { + outer: T; + inner: U_1; + owner: typeof nestedOwner; + }; + rest(values_0: U_1): { + outer: T; + inner: U_1; + owner: typeof nestedOwner; + }; + }; + }; + }; + constrained(inner: U): { + outer: number; + inner: U; + owner: { + make(outer: T): { + nested(inner: U_1): { + outer: T; + inner: U_1; + owner: typeof nestedOwner; + }; + constrained(inner: U_1): { + outer: T; + inner: U_1; + owner: typeof nestedOwner; + }; + copied(inner: U_1): { + outer: T; + inner: U_1; + owner: typeof nestedOwner; + }; + rest(values_0: U_1): { + outer: T; + inner: U_1; + owner: typeof nestedOwner; + }; + }; + }; + }; + copied(inner: U): { + outer: number; + inner: U; + owner: typeof nestedOwner; + }; + rest(values_0: U): { + outer: number; + inner: U; + owner: { + make(outer: T): { + nested(inner: U_1): { + outer: T; + inner: U_1; + owner: typeof nestedOwner; + }; + constrained(inner: U_1): { + outer: T; + inner: U_1; + owner: typeof nestedOwner; + }; + copied(inner: U_1): { + outer: T; + inner: U_1; + owner: typeof nestedOwner; + }; + rest(values_0: U_1): { + outer: T; + inner: U_1; + owner: typeof nestedOwner; + }; + }; + }; + }; +}; +export declare const mappedCycle: { + Node: { + value: number; + next: (typeof mappedCycle)["Node"]; + }; +}; +export declare const mappedCycleCopy: { + Node: { + value: number; + next: (typeof mappedCycleCopy)["Node"]; + }; +}; +export declare const nestedCycle: { + wrapped: { + Node: { + value: string; + next: (typeof nestedCycle)["wrapped"]["Node"]; + }; + }; +}; +export declare const cycleKey: unique symbol; +export declare const keyedCycles: { + "a-b": { + value: string; + next: (typeof keyedCycles)["a-b"]; + }; + 0: { + value: boolean; + next: (typeof keyedCycles)[0]; + }; + [cycleKey]: { + value: number; + next: (typeof keyedCycles)[typeof cycleKey]; + }; +}; +export declare const sharedCycles: { + first: { + Node: { + value: number; + next: (typeof sharedCycles)["first"]["Node"]; + }; + }; + second: { + Node: { + value: number; + next: (typeof sharedCycles)["second"]["Node"]; + }; + }; +}; +export declare const mutualCycle: { + First: { + value: number; + next: { + value: string; + next: (typeof mutualCycle)["First"]; + }; + }; + Second: { + value: string; + next: { + value: number; + next: (typeof mutualCycle)["Second"]; + }; + }; +}; +export declare const shadowedCycle: { + Node: { + value: number; + next: (shadowedCycle: T) => typeof import(".").shadowedCycle["Node"]; + }; +}; +export declare const optionalCycle: { + Node?: _recursive_1; +}; +export declare const nullableCycle: { + Node: _recursive_2 | null; +}; +export declare const mixedCycles: { + required: { + Node?: _recursive_3; + }; + optional?: { + Node?: _recursive_3; + } | null; +}; +export declare const sharedOptionalCycles: { + first: { + Node?: _recursive_4; + }; + second: { + Node?: _recursive_4; + }; +}; +export declare const nullableKeys: { + "a-b": _recursive_5 | null; + 0: _recursive_6 | null; + [cycleKey]: _recursive_7 | null; +}; +export declare const nullableRoot: _recursive_8 | null; +export declare const optionalRoot: _recursive_9 | undefined; +export declare const nullableLinks: { + Node: { + value: number; + next: (typeof nullableLinks)["Node"]; + } | null; +}; +export declare const optionalNullableLinks: { + Node?: _recursive_10 | null; +}; +export declare const nullableOptionalLinks: { + Node: _recursive_11 | null; +}; +export declare const nullishLinks: { + Node?: _recursive_12 | null; +}; +export declare const mixedUnionCycle: { + Node?: false | _recursive_13 | null; +}; +export declare const _recursive = 1; +export declare const factory: () => () => _recursive_14; +export declare function captured(value: T): _recursive_15; +export declare function nestedCaptured(outer: T): (inner: U) => _recursive_16; +export declare function constrained(key: K): _recursive_17; +export declare function optionalCaptured(value: T): { + node?: _recursive_18 | false | null; +}; +export declare function annotatedCaptured(value: T): _recursive_19; +export declare function recursiveTuple(value: T): _recursive_20; +export declare function inferredCaptured(): (T extends () => infer U ? _recursive_21 : never); +export declare function mappedCaptured(): _recursive_22; +export declare function freshGeneric(unused: T): _recursive_23; +export declare function mutualCaptured(left: T, right: U): { + left: _recursive_25; + right: _recursive_24; +}; +export declare class CapturedClass { + value: T; + constructor(value: T); + make(inner: U): _recursive_26; +} +export declare function covariantClass(): { + new (): _recursive_27; +}; +export declare function contravariantClass(): { + new (): _recursive_28; +}; +export declare namespace Nested { + type _recursive_29 = { + value: T; + next: () => _recursive_29; + }; + export function captured(value: T): _recursive_29; + export {}; +} +export {}; + //// [/home/src/workspaces/project/producer/dist/index.js] *new* export const arrow = () => arrow; export const expression = function self() { return self; }; @@ -875,7 +1298,7 @@ export var Nested; })(Nested || (Nested = {})); //// [/home/src/workspaces/project/producer/dist/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2026.full.d.ts","../index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"0127123bf85d43331672f7890bd05d57-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);\ntype Show = { [K in keyof T]: T[K] } & unknown;\ntype Resolve = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? Resolve : M[K][P];\n}>;\ndeclare const build: () => { [K in keyof M]: Resolve };\nexport const mappedCycle = build<{ Node: { value: number; next: \"ref\" } }>();\nexport const mappedCycleCopy = mappedCycle;\nexport const nestedCycle = { wrapped: build<{ Node: { value: string; next: \"ref\" } }>() };\nexport const cycleKey = Symbol();\nexport const keyedCycles = build<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\nexport const sharedCycles = { first: mappedCycle, second: mappedCycle };\ntype ResolveMutual = Show<{\n [P in keyof M[K]]: M[K][P] extends { ref: infer R extends keyof M } ? ResolveMutual : M[K][P];\n}>;\ndeclare const buildMutual: () => { [K in keyof M]: ResolveMutual };\nexport const mutualCycle = buildMutual<{\n First: { value: number; next: { ref: \"Second\" } };\n Second: { value: string; next: { ref: \"First\" } };\n}>();\ntype ResolveShadowed = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? (shadowedCycle: T) => ResolveShadowed : M[K][P];\n}>;\ndeclare const buildShadowed: () => { [K in keyof M]: ResolveShadowed };\nexport const shadowedCycle = buildShadowed<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptional: () => { [K in keyof M]?: Resolve };\nexport const optionalCycle = buildOptional<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildNullable: () => { [K in keyof M]: Resolve | null };\nexport const nullableCycle = buildNullable<{ Node: { value: string; next: \"ref\" } }>();\ndeclare const wrap: (value: T) => { required: T; optional?: T | null };\nexport const mixedCycles = wrap(optionalCycle);\nexport const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle };\nexport const nullableKeys = buildNullable<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\ndeclare const buildNullableRoot: () => Resolve | null;\nexport const nullableRoot = buildNullableRoot<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalRoot: () => Resolve | undefined;\nexport const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: \"ref\" } }>();\ntype ResolveNullable = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullable | null : M[K][P];\n}>;\ndeclare const buildNullableLinks: () => { [K in keyof M]: ResolveNullable | null };\nexport const nullableLinks = buildNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalNullableLinks: () => { [K in keyof M]?: ResolveNullable | null };\nexport const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveOptional = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveOptional | undefined : M[K][P];\n}>;\ndeclare const buildNullableOptionalLinks: () => { [K in keyof M]: ResolveOptional | null };\nexport const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveNullish = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullish | null | undefined : M[K][P];\n}>;\ndeclare const buildNullishLinks: () => { [K in keyof M]?: ResolveNullish | null };\nexport const nullishLinks = buildNullishLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildMixed: () => { [K in keyof M]?: Resolve | false | null };\nexport const mixedUnionCycle = buildMixed<{ Node: { value: number; next: \"ref\" } }>();\nexport const _recursive = 1;\nexport const factory = () => function self() { return self; };\nexport function captured(value: T) {\n const node = { value, next: () => node, consume: (other: T) => node };\n return node;\n}\nexport function nestedCaptured(outer: T) {\n return (inner: U) => {\n const node = {\n outer, inner, next: () => node,\n shadow: (value: T) => ({ outer, inner, value, next: node }),\n };\n return node;\n };\n}\nexport function constrained(key: K) {\n const node = { value: null! as T[K], next: () => node };\n return node;\n}\nexport function optionalCaptured(value: T) {\n type Node = { value: T; next: Node };\n return null! as { node?: Node | false | null };\n}\nexport function annotatedCaptured(value: T) {\n const node: { value: typeof value; next: typeof node } = { value, next: null! };\n return node;\n}\nexport function recursiveTuple(value: T) {\n type Tuple = readonly [T, Tuple];\n return null! as Tuple;\n}\nexport function inferredCaptured() {\n type Node = { value: V; next: Node };\n return null! as (T extends () => infer U ? Node : never);\n}\nexport function mappedCaptured() {\n type Node = { [K in keyof T]: { value: T[K]; next: Node } };\n return null! as Node;\n}\nexport function freshGeneric(unused: T) {\n const recur = (value: U) => recur;\n return recur;\n}\nexport function mutualCaptured(left: T, right: U) {\n type Left = { left: T; next: Right };\n type Right = { right: U; self: Right; next: Left };\n return { left: null! as Left, right: null! as Right };\n}\nexport class CapturedClass {\n constructor(public value: T) {}\n make(inner: U) {\n const node = { outer: this.value, inner, next: () => node };\n return node;\n }\n}\nexport function covariantClass() {\n return class Node {\n value!: T;\n next(): Node { return this; }\n };\n}\nexport function contravariantClass() {\n return class Node {\n consume!: (value: T) => void;\n next(): Node { return this; }\n };\n}\nexport namespace Nested {\n export function captured(value: T) {\n const node = { value, next: () => node };\n return node;\n }\n}\ntype NonNullable = \"shadowed\";"],"options":{"composite":true,"exactOptionalPropertyTypes":true,"outDir":"./","strict":true},"emitDiagnosticsPerFile":[[2,[{"pos":3735,"end":3746,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["mappedCycle"]},{"pos":3813,"end":3828,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["mappedCycleCopy"]},{"pos":3857,"end":3868,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nestedCycle"]},{"pos":3982,"end":3993,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["keyedCycles"]},{"pos":4154,"end":4166,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["sharedCycles"]},{"pos":4463,"end":4474,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["mutualCycle"]},{"pos":4862,"end":4875,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["shadowedCycle"]},{"pos":5024,"end":5037,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["optionalCycle"]},{"pos":5192,"end":5205,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nullableCycle"]},{"pos":5355,"end":5366,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["mixedCycles"]},{"pos":5403,"end":5423,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["sharedOptionalCycles"]},{"pos":5488,"end":5500,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nullableKeys"]},{"pos":5739,"end":5751,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nullableRoot"]},{"pos":5905,"end":5917,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["optionalRoot"]},{"pos":6232,"end":6245,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nullableLinks"]},{"pos":6427,"end":6448,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["optionalNullableLinks"]},{"pos":6785,"end":6806,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nullableOptionalLinks"]},{"pos":7139,"end":7151,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nullishLinks"]},{"pos":7316,"end":7331,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["mixedUnionCycle"]},{"pos":7432,"end":7439,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["factory"]},{"pos":7498,"end":7506,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["captured"]},{"pos":7632,"end":7646,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nestedCaptured"]},{"pos":7892,"end":7903,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["constrained"]},{"pos":8058,"end":8074,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["optionalCaptured"]},{"pos":8202,"end":8219,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["annotatedCaptured"]},{"pos":8355,"end":8369,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["recursiveTuple"]},{"pos":8468,"end":8484,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["inferredCaptured"]},{"pos":8623,"end":8637,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["mappedCaptured"]},{"pos":8754,"end":8766,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["freshGeneric"]},{"pos":8861,"end":8875,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["mutualCaptured"]},{"pos":9134,"end":9138,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["make"]},{"pos":9278,"end":9292,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["covariantClass"]},{"pos":9413,"end":9431,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["contravariantClass"]},{"pos":9600,"end":9608,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["captured"]}]]],"emitSignatures":[2]} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2026.full.d.ts","../index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"0127123bf85d43331672f7890bd05d57-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);\ntype Show = { [K in keyof T]: T[K] } & unknown;\ntype Resolve = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? Resolve : M[K][P];\n}>;\ndeclare const build: () => { [K in keyof M]: Resolve };\nexport const mappedCycle = build<{ Node: { value: number; next: \"ref\" } }>();\nexport const mappedCycleCopy = mappedCycle;\nexport const nestedCycle = { wrapped: build<{ Node: { value: string; next: \"ref\" } }>() };\nexport const cycleKey = Symbol();\nexport const keyedCycles = build<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\nexport const sharedCycles = { first: mappedCycle, second: mappedCycle };\ntype ResolveMutual = Show<{\n [P in keyof M[K]]: M[K][P] extends { ref: infer R extends keyof M } ? ResolveMutual : M[K][P];\n}>;\ndeclare const buildMutual: () => { [K in keyof M]: ResolveMutual };\nexport const mutualCycle = buildMutual<{\n First: { value: number; next: { ref: \"Second\" } };\n Second: { value: string; next: { ref: \"First\" } };\n}>();\ntype ResolveShadowed = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? (shadowedCycle: T) => ResolveShadowed : M[K][P];\n}>;\ndeclare const buildShadowed: () => { [K in keyof M]: ResolveShadowed };\nexport const shadowedCycle = buildShadowed<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptional: () => { [K in keyof M]?: Resolve };\nexport const optionalCycle = buildOptional<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildNullable: () => { [K in keyof M]: Resolve | null };\nexport const nullableCycle = buildNullable<{ Node: { value: string; next: \"ref\" } }>();\ndeclare const wrap: (value: T) => { required: T; optional?: T | null };\nexport const mixedCycles = wrap(optionalCycle);\nexport const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle };\nexport const nullableKeys = buildNullable<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\ndeclare const buildNullableRoot: () => Resolve | null;\nexport const nullableRoot = buildNullableRoot<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalRoot: () => Resolve | undefined;\nexport const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: \"ref\" } }>();\ntype ResolveNullable = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullable | null : M[K][P];\n}>;\ndeclare const buildNullableLinks: () => { [K in keyof M]: ResolveNullable | null };\nexport const nullableLinks = buildNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalNullableLinks: () => { [K in keyof M]?: ResolveNullable | null };\nexport const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveOptional = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveOptional | undefined : M[K][P];\n}>;\ndeclare const buildNullableOptionalLinks: () => { [K in keyof M]: ResolveOptional | null };\nexport const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveNullish = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullish | null | undefined : M[K][P];\n}>;\ndeclare const buildNullishLinks: () => { [K in keyof M]?: ResolveNullish | null };\nexport const nullishLinks = buildNullishLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildMixed: () => { [K in keyof M]?: Resolve | false | null };\nexport const mixedUnionCycle = buildMixed<{ Node: { value: number; next: \"ref\" } }>();\nexport const _recursive = 1;\nexport const factory = () => function self() { return self; };\nexport function captured(value: T) {\n const node = { value, next: () => node, consume: (other: T) => node };\n return node;\n}\nexport function nestedCaptured(outer: T) {\n return (inner: U) => {\n const node = {\n outer, inner, next: () => node,\n shadow: (value: T) => ({ outer, inner, value, next: node }),\n };\n return node;\n };\n}\nexport function constrained(key: K) {\n const node = { value: null! as T[K], next: () => node };\n return node;\n}\nexport function optionalCaptured(value: T) {\n type Node = { value: T; next: Node };\n return null! as { node?: Node | false | null };\n}\nexport function annotatedCaptured(value: T) {\n const node: { value: typeof value; next: typeof node } = { value, next: null! };\n return node;\n}\nexport function recursiveTuple(value: T) {\n type Tuple = readonly [T, Tuple];\n return null! as Tuple;\n}\nexport function inferredCaptured() {\n type Node = { value: V; next: Node };\n return null! as (T extends () => infer U ? Node : never);\n}\nexport function mappedCaptured() {\n type Node = { [K in keyof T]: { value: T[K]; next: Node } };\n return null! as Node;\n}\nexport function freshGeneric(unused: T) {\n const recur = (value: U) => recur;\n return recur;\n}\nexport function mutualCaptured(left: T, right: U) {\n type Left = { left: T; next: Right };\n type Right = { right: U; self: Right; next: Left };\n return { left: null! as Left, right: null! as Right };\n}\nexport class CapturedClass {\n constructor(public value: T) {}\n make(inner: U) {\n const node = { outer: this.value, inner, next: () => node };\n return node;\n }\n}\nexport function covariantClass() {\n return class Node {\n value!: T;\n next(): Node { return this; }\n };\n}\nexport function contravariantClass() {\n return class Node {\n consume!: (value: T) => void;\n next(): Node { return this; }\n };\n}\nexport namespace Nested {\n export function captured(value: T) {\n const node = { value, next: () => node };\n return node;\n }\n}\ntype NonNullable = \"shadowed\";","signature":"850dc9bfa8257128f209cdd8c49501cd-type _recursive_1 = {\n value: number;\n next: _recursive_1;\n};\ntype _recursive_2 = {\n value: string;\n next: _recursive_2;\n};\ntype _recursive_3 = {\n value: number;\n next: _recursive_3;\n};\ntype _recursive_4 = {\n value: number;\n next: _recursive_4;\n};\ntype _recursive_5 = {\n value: string;\n next: _recursive_5;\n};\ntype _recursive_6 = {\n value: boolean;\n next: _recursive_6;\n};\ntype _recursive_7 = {\n value: number;\n next: _recursive_7;\n};\ntype _recursive_8 = {\n value: number;\n next: _recursive_8;\n};\ntype _recursive_9 = {\n value: string;\n next: _recursive_9;\n};\ntype _recursive_10 = {\n value: number;\n next: _recursive_10 | null;\n};\ntype _recursive_11 = {\n value: number;\n next: _recursive_11 | undefined;\n};\ntype _recursive_12 = {\n value: number;\n next: _recursive_12 | null | undefined;\n};\ntype _recursive_13 = {\n value: number;\n next: _recursive_13;\n};\ntype _recursive_14 = () => _recursive_14;\ntype _recursive_15 = {\n value: T;\n next: () => _recursive_15;\n consume: (other: T) => _recursive_15;\n};\ntype _recursive_16 = {\n outer: T;\n inner: U;\n next: () => _recursive_16;\n shadow: (value: T_1) => {\n outer: T;\n inner: U;\n value: T_1;\n next: _recursive_16;\n };\n};\ntype _recursive_17 = {\n value: T[K];\n next: () => _recursive_17;\n};\ntype _recursive_18 = {\n value: T;\n next: _recursive_18;\n};\ntype _recursive_19 = {\n value: T;\n next: _recursive_19;\n};\ntype _recursive_20 = readonly [T, _recursive_20];\ntype _recursive_21 = {\n value: U;\n next: _recursive_21;\n};\ntype _recursive_22 = { [K in keyof T]: {\n value: T[K];\n next: _recursive_22;\n}; };\ntype _recursive_23 = (value: U) => _recursive_23;\ntype _recursive_24 = {\n right: U;\n self: _recursive_24;\n next: _recursive_25;\n};\ntype _recursive_25 = {\n left: T;\n next: _recursive_24;\n};\ntype _recursive_26 = {\n outer: T;\n inner: U;\n next: () => _recursive_26;\n};\ntype _recursive_27 = {\n value: T;\n next(): _recursive_27;\n};\ntype _recursive_28 = {\n consume: (value: T) => void;\n next(): _recursive_28;\n};\nexport declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: () => {\n call: typeof objectReturn;\n};\nexport declare const tupleReturn: () => readonly [typeof tupleReturn];\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: {\n value: number;\n next: () => typeof object;\n};\nexport declare const method: {\n value: number;\n next(): typeof method;\n};\nexport declare const accessor: {\n value: number;\n readonly next: typeof accessor;\n};\nexport declare const tuple: readonly [() => typeof tuple];\nexport declare const array: (() => typeof array)[];\nexport declare const nested: {\n inner: {\n next(): {\n next(): (typeof nested)[\"inner\"];\n };\n };\n};\nexport declare const memberTuple: readonly [() => () => (typeof memberTuple)[0]];\nexport declare const memberArray: (() => (typeof memberArray)[0])[];\nexport declare const quoted: {\n \"a-b\": () => () => (typeof quoted)[\"a-b\"];\n};\nexport declare const numeric: {\n 0: () => () => (typeof numeric)[0];\n};\nexport declare const key: unique symbol;\nexport declare const computed: {\n [key]: () => (typeof computed)[typeof key];\n};\nexport declare const union: {\n next: () => typeof union;\n} | undefined;\nexport declare const specialized: {\n value: string;\n next: () => typeof specialized;\n};\nexport declare const indexed: {\n [key: string]: typeof indexed;\n};\nexport declare const mapped: {\n next: typeof mapped;\n};\nexport declare const viaAnnotation: {\n value: string;\n next: () => typeof viaAnnotation;\n};\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: typeof hiddenAlias;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"first\"];\n };\n second: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"second\"];\n };\n};\nexport declare const parenthesized: () => typeof parenthesized;\nexport declare const asserted: () => typeof asserted;\nexport declare class Methods {\n static recur(): (typeof Methods)[\"recur\"];\n static \"a-b\"(): (typeof Methods)[\"a-b\"];\n static [key](): (typeof Methods)[typeof key];\n recur(): Methods[\"recur\"];\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n};\nexport declare const nestedNumber: {\n nested(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n constrained(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n copied(inner: U): {\n outer: number;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n};\nexport declare const mappedCycle: {\n Node: {\n value: number;\n next: (typeof mappedCycle)[\"Node\"];\n };\n};\nexport declare const mappedCycleCopy: {\n Node: {\n value: number;\n next: (typeof mappedCycleCopy)[\"Node\"];\n };\n};\nexport declare const nestedCycle: {\n wrapped: {\n Node: {\n value: string;\n next: (typeof nestedCycle)[\"wrapped\"][\"Node\"];\n };\n };\n};\nexport declare const cycleKey: unique symbol;\nexport declare const keyedCycles: {\n \"a-b\": {\n value: string;\n next: (typeof keyedCycles)[\"a-b\"];\n };\n 0: {\n value: boolean;\n next: (typeof keyedCycles)[0];\n };\n [cycleKey]: {\n value: number;\n next: (typeof keyedCycles)[typeof cycleKey];\n };\n};\nexport declare const sharedCycles: {\n first: {\n Node: {\n value: number;\n next: (typeof sharedCycles)[\"first\"][\"Node\"];\n };\n };\n second: {\n Node: {\n value: number;\n next: (typeof sharedCycles)[\"second\"][\"Node\"];\n };\n };\n};\nexport declare const mutualCycle: {\n First: {\n value: number;\n next: {\n value: string;\n next: (typeof mutualCycle)[\"First\"];\n };\n };\n Second: {\n value: string;\n next: {\n value: number;\n next: (typeof mutualCycle)[\"Second\"];\n };\n };\n};\nexport declare const shadowedCycle: {\n Node: {\n value: number;\n next: (shadowedCycle: T) => typeof import(\".\").shadowedCycle[\"Node\"];\n };\n};\nexport declare const optionalCycle: {\n Node?: _recursive_1;\n};\nexport declare const nullableCycle: {\n Node: _recursive_2 | null;\n};\nexport declare const mixedCycles: {\n required: {\n Node?: _recursive_3;\n };\n optional?: {\n Node?: _recursive_3;\n } | null;\n};\nexport declare const sharedOptionalCycles: {\n first: {\n Node?: _recursive_4;\n };\n second: {\n Node?: _recursive_4;\n };\n};\nexport declare const nullableKeys: {\n \"a-b\": _recursive_5 | null;\n 0: _recursive_6 | null;\n [cycleKey]: _recursive_7 | null;\n};\nexport declare const nullableRoot: _recursive_8 | null;\nexport declare const optionalRoot: _recursive_9 | undefined;\nexport declare const nullableLinks: {\n Node: {\n value: number;\n next: (typeof nullableLinks)[\"Node\"];\n } | null;\n};\nexport declare const optionalNullableLinks: {\n Node?: _recursive_10 | null;\n};\nexport declare const nullableOptionalLinks: {\n Node: _recursive_11 | null;\n};\nexport declare const nullishLinks: {\n Node?: _recursive_12 | null;\n};\nexport declare const mixedUnionCycle: {\n Node?: false | _recursive_13 | null;\n};\nexport declare const _recursive = 1;\nexport declare const factory: () => () => _recursive_14;\nexport declare function captured(value: T): _recursive_15;\nexport declare function nestedCaptured(outer: T): (inner: U) => _recursive_16;\nexport declare function constrained(key: K): _recursive_17;\nexport declare function optionalCaptured(value: T): {\n node?: _recursive_18 | false | null;\n};\nexport declare function annotatedCaptured(value: T): _recursive_19;\nexport declare function recursiveTuple(value: T): _recursive_20;\nexport declare function inferredCaptured(): (T extends () => infer U ? _recursive_21 : never);\nexport declare function mappedCaptured(): _recursive_22;\nexport declare function freshGeneric(unused: T): _recursive_23;\nexport declare function mutualCaptured(left: T, right: U): {\n left: _recursive_25;\n right: _recursive_24;\n};\nexport declare class CapturedClass {\n value: T;\n constructor(value: T);\n make(inner: U): _recursive_26;\n}\nexport declare function covariantClass(): {\n new (): _recursive_27;\n};\nexport declare function contravariantClass(): {\n new (): _recursive_28;\n};\nexport declare namespace Nested {\n type _recursive_29 = {\n value: T;\n next: () => _recursive_29;\n };\n export function captured(value: T): _recursive_29;\n export {};\n}\nexport {};\n","impliedNodeFormat":1}],"options":{"composite":true,"exactOptionalPropertyTypes":true,"outDir":"./","strict":true},"latestChangedDtsFile":"./index.d.ts"} //// [/home/src/workspaces/project/producer/dist/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", @@ -907,8 +1330,13 @@ export var Nested; { "fileName": "../index.ts", "version": "0127123bf85d43331672f7890bd05d57-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);\ntype Show = { [K in keyof T]: T[K] } & unknown;\ntype Resolve = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? Resolve : M[K][P];\n}>;\ndeclare const build: () => { [K in keyof M]: Resolve };\nexport const mappedCycle = build<{ Node: { value: number; next: \"ref\" } }>();\nexport const mappedCycleCopy = mappedCycle;\nexport const nestedCycle = { wrapped: build<{ Node: { value: string; next: \"ref\" } }>() };\nexport const cycleKey = Symbol();\nexport const keyedCycles = build<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\nexport const sharedCycles = { first: mappedCycle, second: mappedCycle };\ntype ResolveMutual = Show<{\n [P in keyof M[K]]: M[K][P] extends { ref: infer R extends keyof M } ? ResolveMutual : M[K][P];\n}>;\ndeclare const buildMutual: () => { [K in keyof M]: ResolveMutual };\nexport const mutualCycle = buildMutual<{\n First: { value: number; next: { ref: \"Second\" } };\n Second: { value: string; next: { ref: \"First\" } };\n}>();\ntype ResolveShadowed = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? (shadowedCycle: T) => ResolveShadowed : M[K][P];\n}>;\ndeclare const buildShadowed: () => { [K in keyof M]: ResolveShadowed };\nexport const shadowedCycle = buildShadowed<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptional: () => { [K in keyof M]?: Resolve };\nexport const optionalCycle = buildOptional<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildNullable: () => { [K in keyof M]: Resolve | null };\nexport const nullableCycle = buildNullable<{ Node: { value: string; next: \"ref\" } }>();\ndeclare const wrap: (value: T) => { required: T; optional?: T | null };\nexport const mixedCycles = wrap(optionalCycle);\nexport const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle };\nexport const nullableKeys = buildNullable<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\ndeclare const buildNullableRoot: () => Resolve | null;\nexport const nullableRoot = buildNullableRoot<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalRoot: () => Resolve | undefined;\nexport const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: \"ref\" } }>();\ntype ResolveNullable = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullable | null : M[K][P];\n}>;\ndeclare const buildNullableLinks: () => { [K in keyof M]: ResolveNullable | null };\nexport const nullableLinks = buildNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalNullableLinks: () => { [K in keyof M]?: ResolveNullable | null };\nexport const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveOptional = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveOptional | undefined : M[K][P];\n}>;\ndeclare const buildNullableOptionalLinks: () => { [K in keyof M]: ResolveOptional | null };\nexport const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveNullish = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullish | null | undefined : M[K][P];\n}>;\ndeclare const buildNullishLinks: () => { [K in keyof M]?: ResolveNullish | null };\nexport const nullishLinks = buildNullishLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildMixed: () => { [K in keyof M]?: Resolve | false | null };\nexport const mixedUnionCycle = buildMixed<{ Node: { value: number; next: \"ref\" } }>();\nexport const _recursive = 1;\nexport const factory = () => function self() { return self; };\nexport function captured(value: T) {\n const node = { value, next: () => node, consume: (other: T) => node };\n return node;\n}\nexport function nestedCaptured(outer: T) {\n return (inner: U) => {\n const node = {\n outer, inner, next: () => node,\n shadow: (value: T) => ({ outer, inner, value, next: node }),\n };\n return node;\n };\n}\nexport function constrained(key: K) {\n const node = { value: null! as T[K], next: () => node };\n return node;\n}\nexport function optionalCaptured(value: T) {\n type Node = { value: T; next: Node };\n return null! as { node?: Node | false | null };\n}\nexport function annotatedCaptured(value: T) {\n const node: { value: typeof value; next: typeof node } = { value, next: null! };\n return node;\n}\nexport function recursiveTuple(value: T) {\n type Tuple = readonly [T, Tuple];\n return null! as Tuple;\n}\nexport function inferredCaptured() {\n type Node = { value: V; next: Node };\n return null! as (T extends () => infer U ? Node : never);\n}\nexport function mappedCaptured() {\n type Node = { [K in keyof T]: { value: T[K]; next: Node } };\n return null! as Node;\n}\nexport function freshGeneric(unused: T) {\n const recur = (value: U) => recur;\n return recur;\n}\nexport function mutualCaptured(left: T, right: U) {\n type Left = { left: T; next: Right };\n type Right = { right: U; self: Right; next: Left };\n return { left: null! as Left, right: null! as Right };\n}\nexport class CapturedClass {\n constructor(public value: T) {}\n make(inner: U) {\n const node = { outer: this.value, inner, next: () => node };\n return node;\n }\n}\nexport function covariantClass() {\n return class Node {\n value!: T;\n next(): Node { return this; }\n };\n}\nexport function contravariantClass() {\n return class Node {\n consume!: (value: T) => void;\n next(): Node { return this; }\n };\n}\nexport namespace Nested {\n export function captured(value: T) {\n const node = { value, next: () => node };\n return node;\n }\n}\ntype NonNullable = \"shadowed\";", - "signature": "0127123bf85d43331672f7890bd05d57-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);\ntype Show = { [K in keyof T]: T[K] } & unknown;\ntype Resolve = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? Resolve : M[K][P];\n}>;\ndeclare const build: () => { [K in keyof M]: Resolve };\nexport const mappedCycle = build<{ Node: { value: number; next: \"ref\" } }>();\nexport const mappedCycleCopy = mappedCycle;\nexport const nestedCycle = { wrapped: build<{ Node: { value: string; next: \"ref\" } }>() };\nexport const cycleKey = Symbol();\nexport const keyedCycles = build<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\nexport const sharedCycles = { first: mappedCycle, second: mappedCycle };\ntype ResolveMutual = Show<{\n [P in keyof M[K]]: M[K][P] extends { ref: infer R extends keyof M } ? ResolveMutual : M[K][P];\n}>;\ndeclare const buildMutual: () => { [K in keyof M]: ResolveMutual };\nexport const mutualCycle = buildMutual<{\n First: { value: number; next: { ref: \"Second\" } };\n Second: { value: string; next: { ref: \"First\" } };\n}>();\ntype ResolveShadowed = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? (shadowedCycle: T) => ResolveShadowed : M[K][P];\n}>;\ndeclare const buildShadowed: () => { [K in keyof M]: ResolveShadowed };\nexport const shadowedCycle = buildShadowed<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptional: () => { [K in keyof M]?: Resolve };\nexport const optionalCycle = buildOptional<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildNullable: () => { [K in keyof M]: Resolve | null };\nexport const nullableCycle = buildNullable<{ Node: { value: string; next: \"ref\" } }>();\ndeclare const wrap: (value: T) => { required: T; optional?: T | null };\nexport const mixedCycles = wrap(optionalCycle);\nexport const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle };\nexport const nullableKeys = buildNullable<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\ndeclare const buildNullableRoot: () => Resolve | null;\nexport const nullableRoot = buildNullableRoot<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalRoot: () => Resolve | undefined;\nexport const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: \"ref\" } }>();\ntype ResolveNullable = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullable | null : M[K][P];\n}>;\ndeclare const buildNullableLinks: () => { [K in keyof M]: ResolveNullable | null };\nexport const nullableLinks = buildNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalNullableLinks: () => { [K in keyof M]?: ResolveNullable | null };\nexport const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveOptional = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveOptional | undefined : M[K][P];\n}>;\ndeclare const buildNullableOptionalLinks: () => { [K in keyof M]: ResolveOptional | null };\nexport const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveNullish = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullish | null | undefined : M[K][P];\n}>;\ndeclare const buildNullishLinks: () => { [K in keyof M]?: ResolveNullish | null };\nexport const nullishLinks = buildNullishLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildMixed: () => { [K in keyof M]?: Resolve | false | null };\nexport const mixedUnionCycle = buildMixed<{ Node: { value: number; next: \"ref\" } }>();\nexport const _recursive = 1;\nexport const factory = () => function self() { return self; };\nexport function captured(value: T) {\n const node = { value, next: () => node, consume: (other: T) => node };\n return node;\n}\nexport function nestedCaptured(outer: T) {\n return (inner: U) => {\n const node = {\n outer, inner, next: () => node,\n shadow: (value: T) => ({ outer, inner, value, next: node }),\n };\n return node;\n };\n}\nexport function constrained(key: K) {\n const node = { value: null! as T[K], next: () => node };\n return node;\n}\nexport function optionalCaptured(value: T) {\n type Node = { value: T; next: Node };\n return null! as { node?: Node | false | null };\n}\nexport function annotatedCaptured(value: T) {\n const node: { value: typeof value; next: typeof node } = { value, next: null! };\n return node;\n}\nexport function recursiveTuple(value: T) {\n type Tuple = readonly [T, Tuple];\n return null! as Tuple;\n}\nexport function inferredCaptured() {\n type Node = { value: V; next: Node };\n return null! as (T extends () => infer U ? Node : never);\n}\nexport function mappedCaptured() {\n type Node = { [K in keyof T]: { value: T[K]; next: Node } };\n return null! as Node;\n}\nexport function freshGeneric(unused: T) {\n const recur = (value: U) => recur;\n return recur;\n}\nexport function mutualCaptured(left: T, right: U) {\n type Left = { left: T; next: Right };\n type Right = { right: U; self: Right; next: Left };\n return { left: null! as Left, right: null! as Right };\n}\nexport class CapturedClass {\n constructor(public value: T) {}\n make(inner: U) {\n const node = { outer: this.value, inner, next: () => node };\n return node;\n }\n}\nexport function covariantClass() {\n return class Node {\n value!: T;\n next(): Node { return this; }\n };\n}\nexport function contravariantClass() {\n return class Node {\n consume!: (value: T) => void;\n next(): Node { return this; }\n };\n}\nexport namespace Nested {\n export function captured(value: T) {\n const node = { value, next: () => node };\n return node;\n }\n}\ntype NonNullable = \"shadowed\";", - "impliedNodeFormat": "CommonJS" + "signature": "850dc9bfa8257128f209cdd8c49501cd-type _recursive_1 = {\n value: number;\n next: _recursive_1;\n};\ntype _recursive_2 = {\n value: string;\n next: _recursive_2;\n};\ntype _recursive_3 = {\n value: number;\n next: _recursive_3;\n};\ntype _recursive_4 = {\n value: number;\n next: _recursive_4;\n};\ntype _recursive_5 = {\n value: string;\n next: _recursive_5;\n};\ntype _recursive_6 = {\n value: boolean;\n next: _recursive_6;\n};\ntype _recursive_7 = {\n value: number;\n next: _recursive_7;\n};\ntype _recursive_8 = {\n value: number;\n next: _recursive_8;\n};\ntype _recursive_9 = {\n value: string;\n next: _recursive_9;\n};\ntype _recursive_10 = {\n value: number;\n next: _recursive_10 | null;\n};\ntype _recursive_11 = {\n value: number;\n next: _recursive_11 | undefined;\n};\ntype _recursive_12 = {\n value: number;\n next: _recursive_12 | null | undefined;\n};\ntype _recursive_13 = {\n value: number;\n next: _recursive_13;\n};\ntype _recursive_14 = () => _recursive_14;\ntype _recursive_15 = {\n value: T;\n next: () => _recursive_15;\n consume: (other: T) => _recursive_15;\n};\ntype _recursive_16 = {\n outer: T;\n inner: U;\n next: () => _recursive_16;\n shadow: (value: T_1) => {\n outer: T;\n inner: U;\n value: T_1;\n next: _recursive_16;\n };\n};\ntype _recursive_17 = {\n value: T[K];\n next: () => _recursive_17;\n};\ntype _recursive_18 = {\n value: T;\n next: _recursive_18;\n};\ntype _recursive_19 = {\n value: T;\n next: _recursive_19;\n};\ntype _recursive_20 = readonly [T, _recursive_20];\ntype _recursive_21 = {\n value: U;\n next: _recursive_21;\n};\ntype _recursive_22 = { [K in keyof T]: {\n value: T[K];\n next: _recursive_22;\n}; };\ntype _recursive_23 = (value: U) => _recursive_23;\ntype _recursive_24 = {\n right: U;\n self: _recursive_24;\n next: _recursive_25;\n};\ntype _recursive_25 = {\n left: T;\n next: _recursive_24;\n};\ntype _recursive_26 = {\n outer: T;\n inner: U;\n next: () => _recursive_26;\n};\ntype _recursive_27 = {\n value: T;\n next(): _recursive_27;\n};\ntype _recursive_28 = {\n consume: (value: T) => void;\n next(): _recursive_28;\n};\nexport declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: () => {\n call: typeof objectReturn;\n};\nexport declare const tupleReturn: () => readonly [typeof tupleReturn];\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: {\n value: number;\n next: () => typeof object;\n};\nexport declare const method: {\n value: number;\n next(): typeof method;\n};\nexport declare const accessor: {\n value: number;\n readonly next: typeof accessor;\n};\nexport declare const tuple: readonly [() => typeof tuple];\nexport declare const array: (() => typeof array)[];\nexport declare const nested: {\n inner: {\n next(): {\n next(): (typeof nested)[\"inner\"];\n };\n };\n};\nexport declare const memberTuple: readonly [() => () => (typeof memberTuple)[0]];\nexport declare const memberArray: (() => (typeof memberArray)[0])[];\nexport declare const quoted: {\n \"a-b\": () => () => (typeof quoted)[\"a-b\"];\n};\nexport declare const numeric: {\n 0: () => () => (typeof numeric)[0];\n};\nexport declare const key: unique symbol;\nexport declare const computed: {\n [key]: () => (typeof computed)[typeof key];\n};\nexport declare const union: {\n next: () => typeof union;\n} | undefined;\nexport declare const specialized: {\n value: string;\n next: () => typeof specialized;\n};\nexport declare const indexed: {\n [key: string]: typeof indexed;\n};\nexport declare const mapped: {\n next: typeof mapped;\n};\nexport declare const viaAnnotation: {\n value: string;\n next: () => typeof viaAnnotation;\n};\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: typeof hiddenAlias;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"first\"];\n };\n second: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"second\"];\n };\n};\nexport declare const parenthesized: () => typeof parenthesized;\nexport declare const asserted: () => typeof asserted;\nexport declare class Methods {\n static recur(): (typeof Methods)[\"recur\"];\n static \"a-b\"(): (typeof Methods)[\"a-b\"];\n static [key](): (typeof Methods)[typeof key];\n recur(): Methods[\"recur\"];\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n};\nexport declare const nestedNumber: {\n nested(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n constrained(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n copied(inner: U): {\n outer: number;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n};\nexport declare const mappedCycle: {\n Node: {\n value: number;\n next: (typeof mappedCycle)[\"Node\"];\n };\n};\nexport declare const mappedCycleCopy: {\n Node: {\n value: number;\n next: (typeof mappedCycleCopy)[\"Node\"];\n };\n};\nexport declare const nestedCycle: {\n wrapped: {\n Node: {\n value: string;\n next: (typeof nestedCycle)[\"wrapped\"][\"Node\"];\n };\n };\n};\nexport declare const cycleKey: unique symbol;\nexport declare const keyedCycles: {\n \"a-b\": {\n value: string;\n next: (typeof keyedCycles)[\"a-b\"];\n };\n 0: {\n value: boolean;\n next: (typeof keyedCycles)[0];\n };\n [cycleKey]: {\n value: number;\n next: (typeof keyedCycles)[typeof cycleKey];\n };\n};\nexport declare const sharedCycles: {\n first: {\n Node: {\n value: number;\n next: (typeof sharedCycles)[\"first\"][\"Node\"];\n };\n };\n second: {\n Node: {\n value: number;\n next: (typeof sharedCycles)[\"second\"][\"Node\"];\n };\n };\n};\nexport declare const mutualCycle: {\n First: {\n value: number;\n next: {\n value: string;\n next: (typeof mutualCycle)[\"First\"];\n };\n };\n Second: {\n value: string;\n next: {\n value: number;\n next: (typeof mutualCycle)[\"Second\"];\n };\n };\n};\nexport declare const shadowedCycle: {\n Node: {\n value: number;\n next: (shadowedCycle: T) => typeof import(\".\").shadowedCycle[\"Node\"];\n };\n};\nexport declare const optionalCycle: {\n Node?: _recursive_1;\n};\nexport declare const nullableCycle: {\n Node: _recursive_2 | null;\n};\nexport declare const mixedCycles: {\n required: {\n Node?: _recursive_3;\n };\n optional?: {\n Node?: _recursive_3;\n } | null;\n};\nexport declare const sharedOptionalCycles: {\n first: {\n Node?: _recursive_4;\n };\n second: {\n Node?: _recursive_4;\n };\n};\nexport declare const nullableKeys: {\n \"a-b\": _recursive_5 | null;\n 0: _recursive_6 | null;\n [cycleKey]: _recursive_7 | null;\n};\nexport declare const nullableRoot: _recursive_8 | null;\nexport declare const optionalRoot: _recursive_9 | undefined;\nexport declare const nullableLinks: {\n Node: {\n value: number;\n next: (typeof nullableLinks)[\"Node\"];\n } | null;\n};\nexport declare const optionalNullableLinks: {\n Node?: _recursive_10 | null;\n};\nexport declare const nullableOptionalLinks: {\n Node: _recursive_11 | null;\n};\nexport declare const nullishLinks: {\n Node?: _recursive_12 | null;\n};\nexport declare const mixedUnionCycle: {\n Node?: false | _recursive_13 | null;\n};\nexport declare const _recursive = 1;\nexport declare const factory: () => () => _recursive_14;\nexport declare function captured(value: T): _recursive_15;\nexport declare function nestedCaptured(outer: T): (inner: U) => _recursive_16;\nexport declare function constrained(key: K): _recursive_17;\nexport declare function optionalCaptured(value: T): {\n node?: _recursive_18 | false | null;\n};\nexport declare function annotatedCaptured(value: T): _recursive_19;\nexport declare function recursiveTuple(value: T): _recursive_20;\nexport declare function inferredCaptured(): (T extends () => infer U ? _recursive_21 : never);\nexport declare function mappedCaptured(): _recursive_22;\nexport declare function freshGeneric(unused: T): _recursive_23;\nexport declare function mutualCaptured(left: T, right: U): {\n left: _recursive_25;\n right: _recursive_24;\n};\nexport declare class CapturedClass {\n value: T;\n constructor(value: T);\n make(inner: U): _recursive_26;\n}\nexport declare function covariantClass(): {\n new (): _recursive_27;\n};\nexport declare function contravariantClass(): {\n new (): _recursive_28;\n};\nexport declare namespace Nested {\n type _recursive_29 = {\n value: T;\n next: () => _recursive_29;\n };\n export function captured(value: T): _recursive_29;\n export {};\n}\nexport {};\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "0127123bf85d43331672f7890bd05d57-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);\ntype Show = { [K in keyof T]: T[K] } & unknown;\ntype Resolve = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? Resolve : M[K][P];\n}>;\ndeclare const build: () => { [K in keyof M]: Resolve };\nexport const mappedCycle = build<{ Node: { value: number; next: \"ref\" } }>();\nexport const mappedCycleCopy = mappedCycle;\nexport const nestedCycle = { wrapped: build<{ Node: { value: string; next: \"ref\" } }>() };\nexport const cycleKey = Symbol();\nexport const keyedCycles = build<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\nexport const sharedCycles = { first: mappedCycle, second: mappedCycle };\ntype ResolveMutual = Show<{\n [P in keyof M[K]]: M[K][P] extends { ref: infer R extends keyof M } ? ResolveMutual : M[K][P];\n}>;\ndeclare const buildMutual: () => { [K in keyof M]: ResolveMutual };\nexport const mutualCycle = buildMutual<{\n First: { value: number; next: { ref: \"Second\" } };\n Second: { value: string; next: { ref: \"First\" } };\n}>();\ntype ResolveShadowed = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? (shadowedCycle: T) => ResolveShadowed : M[K][P];\n}>;\ndeclare const buildShadowed: () => { [K in keyof M]: ResolveShadowed };\nexport const shadowedCycle = buildShadowed<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptional: () => { [K in keyof M]?: Resolve };\nexport const optionalCycle = buildOptional<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildNullable: () => { [K in keyof M]: Resolve | null };\nexport const nullableCycle = buildNullable<{ Node: { value: string; next: \"ref\" } }>();\ndeclare const wrap: (value: T) => { required: T; optional?: T | null };\nexport const mixedCycles = wrap(optionalCycle);\nexport const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle };\nexport const nullableKeys = buildNullable<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\ndeclare const buildNullableRoot: () => Resolve | null;\nexport const nullableRoot = buildNullableRoot<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalRoot: () => Resolve | undefined;\nexport const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: \"ref\" } }>();\ntype ResolveNullable = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullable | null : M[K][P];\n}>;\ndeclare const buildNullableLinks: () => { [K in keyof M]: ResolveNullable | null };\nexport const nullableLinks = buildNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalNullableLinks: () => { [K in keyof M]?: ResolveNullable | null };\nexport const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveOptional = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveOptional | undefined : M[K][P];\n}>;\ndeclare const buildNullableOptionalLinks: () => { [K in keyof M]: ResolveOptional | null };\nexport const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveNullish = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullish | null | undefined : M[K][P];\n}>;\ndeclare const buildNullishLinks: () => { [K in keyof M]?: ResolveNullish | null };\nexport const nullishLinks = buildNullishLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildMixed: () => { [K in keyof M]?: Resolve | false | null };\nexport const mixedUnionCycle = buildMixed<{ Node: { value: number; next: \"ref\" } }>();\nexport const _recursive = 1;\nexport const factory = () => function self() { return self; };\nexport function captured(value: T) {\n const node = { value, next: () => node, consume: (other: T) => node };\n return node;\n}\nexport function nestedCaptured(outer: T) {\n return (inner: U) => {\n const node = {\n outer, inner, next: () => node,\n shadow: (value: T) => ({ outer, inner, value, next: node }),\n };\n return node;\n };\n}\nexport function constrained(key: K) {\n const node = { value: null! as T[K], next: () => node };\n return node;\n}\nexport function optionalCaptured(value: T) {\n type Node = { value: T; next: Node };\n return null! as { node?: Node | false | null };\n}\nexport function annotatedCaptured(value: T) {\n const node: { value: typeof value; next: typeof node } = { value, next: null! };\n return node;\n}\nexport function recursiveTuple(value: T) {\n type Tuple = readonly [T, Tuple];\n return null! as Tuple;\n}\nexport function inferredCaptured() {\n type Node = { value: V; next: Node };\n return null! as (T extends () => infer U ? Node : never);\n}\nexport function mappedCaptured() {\n type Node = { [K in keyof T]: { value: T[K]; next: Node } };\n return null! as Node;\n}\nexport function freshGeneric(unused: T) {\n const recur = (value: U) => recur;\n return recur;\n}\nexport function mutualCaptured(left: T, right: U) {\n type Left = { left: T; next: Right };\n type Right = { right: U; self: Right; next: Left };\n return { left: null! as Left, right: null! as Right };\n}\nexport class CapturedClass {\n constructor(public value: T) {}\n make(inner: U) {\n const node = { outer: this.value, inner, next: () => node };\n return node;\n }\n}\nexport function covariantClass() {\n return class Node {\n value!: T;\n next(): Node { return this; }\n };\n}\nexport function contravariantClass() {\n return class Node {\n consume!: (value: T) => void;\n next(): Node { return this; }\n };\n}\nexport namespace Nested {\n export function captured(value: T) {\n const node = { value, next: () => node };\n return node;\n }\n}\ntype NonNullable = \"shadowed\";", + "signature": "850dc9bfa8257128f209cdd8c49501cd-type _recursive_1 = {\n value: number;\n next: _recursive_1;\n};\ntype _recursive_2 = {\n value: string;\n next: _recursive_2;\n};\ntype _recursive_3 = {\n value: number;\n next: _recursive_3;\n};\ntype _recursive_4 = {\n value: number;\n next: _recursive_4;\n};\ntype _recursive_5 = {\n value: string;\n next: _recursive_5;\n};\ntype _recursive_6 = {\n value: boolean;\n next: _recursive_6;\n};\ntype _recursive_7 = {\n value: number;\n next: _recursive_7;\n};\ntype _recursive_8 = {\n value: number;\n next: _recursive_8;\n};\ntype _recursive_9 = {\n value: string;\n next: _recursive_9;\n};\ntype _recursive_10 = {\n value: number;\n next: _recursive_10 | null;\n};\ntype _recursive_11 = {\n value: number;\n next: _recursive_11 | undefined;\n};\ntype _recursive_12 = {\n value: number;\n next: _recursive_12 | null | undefined;\n};\ntype _recursive_13 = {\n value: number;\n next: _recursive_13;\n};\ntype _recursive_14 = () => _recursive_14;\ntype _recursive_15 = {\n value: T;\n next: () => _recursive_15;\n consume: (other: T) => _recursive_15;\n};\ntype _recursive_16 = {\n outer: T;\n inner: U;\n next: () => _recursive_16;\n shadow: (value: T_1) => {\n outer: T;\n inner: U;\n value: T_1;\n next: _recursive_16;\n };\n};\ntype _recursive_17 = {\n value: T[K];\n next: () => _recursive_17;\n};\ntype _recursive_18 = {\n value: T;\n next: _recursive_18;\n};\ntype _recursive_19 = {\n value: T;\n next: _recursive_19;\n};\ntype _recursive_20 = readonly [T, _recursive_20];\ntype _recursive_21 = {\n value: U;\n next: _recursive_21;\n};\ntype _recursive_22 = { [K in keyof T]: {\n value: T[K];\n next: _recursive_22;\n}; };\ntype _recursive_23 = (value: U) => _recursive_23;\ntype _recursive_24 = {\n right: U;\n self: _recursive_24;\n next: _recursive_25;\n};\ntype _recursive_25 = {\n left: T;\n next: _recursive_24;\n};\ntype _recursive_26 = {\n outer: T;\n inner: U;\n next: () => _recursive_26;\n};\ntype _recursive_27 = {\n value: T;\n next(): _recursive_27;\n};\ntype _recursive_28 = {\n consume: (value: T) => void;\n next(): _recursive_28;\n};\nexport declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: () => {\n call: typeof objectReturn;\n};\nexport declare const tupleReturn: () => readonly [typeof tupleReturn];\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: {\n value: number;\n next: () => typeof object;\n};\nexport declare const method: {\n value: number;\n next(): typeof method;\n};\nexport declare const accessor: {\n value: number;\n readonly next: typeof accessor;\n};\nexport declare const tuple: readonly [() => typeof tuple];\nexport declare const array: (() => typeof array)[];\nexport declare const nested: {\n inner: {\n next(): {\n next(): (typeof nested)[\"inner\"];\n };\n };\n};\nexport declare const memberTuple: readonly [() => () => (typeof memberTuple)[0]];\nexport declare const memberArray: (() => (typeof memberArray)[0])[];\nexport declare const quoted: {\n \"a-b\": () => () => (typeof quoted)[\"a-b\"];\n};\nexport declare const numeric: {\n 0: () => () => (typeof numeric)[0];\n};\nexport declare const key: unique symbol;\nexport declare const computed: {\n [key]: () => (typeof computed)[typeof key];\n};\nexport declare const union: {\n next: () => typeof union;\n} | undefined;\nexport declare const specialized: {\n value: string;\n next: () => typeof specialized;\n};\nexport declare const indexed: {\n [key: string]: typeof indexed;\n};\nexport declare const mapped: {\n next: typeof mapped;\n};\nexport declare const viaAnnotation: {\n value: string;\n next: () => typeof viaAnnotation;\n};\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: typeof hiddenAlias;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"first\"];\n };\n second: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"second\"];\n };\n};\nexport declare const parenthesized: () => typeof parenthesized;\nexport declare const asserted: () => typeof asserted;\nexport declare class Methods {\n static recur(): (typeof Methods)[\"recur\"];\n static \"a-b\"(): (typeof Methods)[\"a-b\"];\n static [key](): (typeof Methods)[typeof key];\n recur(): Methods[\"recur\"];\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n};\nexport declare const nestedNumber: {\n nested(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n constrained(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n copied(inner: U): {\n outer: number;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n};\nexport declare const mappedCycle: {\n Node: {\n value: number;\n next: (typeof mappedCycle)[\"Node\"];\n };\n};\nexport declare const mappedCycleCopy: {\n Node: {\n value: number;\n next: (typeof mappedCycleCopy)[\"Node\"];\n };\n};\nexport declare const nestedCycle: {\n wrapped: {\n Node: {\n value: string;\n next: (typeof nestedCycle)[\"wrapped\"][\"Node\"];\n };\n };\n};\nexport declare const cycleKey: unique symbol;\nexport declare const keyedCycles: {\n \"a-b\": {\n value: string;\n next: (typeof keyedCycles)[\"a-b\"];\n };\n 0: {\n value: boolean;\n next: (typeof keyedCycles)[0];\n };\n [cycleKey]: {\n value: number;\n next: (typeof keyedCycles)[typeof cycleKey];\n };\n};\nexport declare const sharedCycles: {\n first: {\n Node: {\n value: number;\n next: (typeof sharedCycles)[\"first\"][\"Node\"];\n };\n };\n second: {\n Node: {\n value: number;\n next: (typeof sharedCycles)[\"second\"][\"Node\"];\n };\n };\n};\nexport declare const mutualCycle: {\n First: {\n value: number;\n next: {\n value: string;\n next: (typeof mutualCycle)[\"First\"];\n };\n };\n Second: {\n value: string;\n next: {\n value: number;\n next: (typeof mutualCycle)[\"Second\"];\n };\n };\n};\nexport declare const shadowedCycle: {\n Node: {\n value: number;\n next: (shadowedCycle: T) => typeof import(\".\").shadowedCycle[\"Node\"];\n };\n};\nexport declare const optionalCycle: {\n Node?: _recursive_1;\n};\nexport declare const nullableCycle: {\n Node: _recursive_2 | null;\n};\nexport declare const mixedCycles: {\n required: {\n Node?: _recursive_3;\n };\n optional?: {\n Node?: _recursive_3;\n } | null;\n};\nexport declare const sharedOptionalCycles: {\n first: {\n Node?: _recursive_4;\n };\n second: {\n Node?: _recursive_4;\n };\n};\nexport declare const nullableKeys: {\n \"a-b\": _recursive_5 | null;\n 0: _recursive_6 | null;\n [cycleKey]: _recursive_7 | null;\n};\nexport declare const nullableRoot: _recursive_8 | null;\nexport declare const optionalRoot: _recursive_9 | undefined;\nexport declare const nullableLinks: {\n Node: {\n value: number;\n next: (typeof nullableLinks)[\"Node\"];\n } | null;\n};\nexport declare const optionalNullableLinks: {\n Node?: _recursive_10 | null;\n};\nexport declare const nullableOptionalLinks: {\n Node: _recursive_11 | null;\n};\nexport declare const nullishLinks: {\n Node?: _recursive_12 | null;\n};\nexport declare const mixedUnionCycle: {\n Node?: false | _recursive_13 | null;\n};\nexport declare const _recursive = 1;\nexport declare const factory: () => () => _recursive_14;\nexport declare function captured(value: T): _recursive_15;\nexport declare function nestedCaptured(outer: T): (inner: U) => _recursive_16;\nexport declare function constrained(key: K): _recursive_17;\nexport declare function optionalCaptured(value: T): {\n node?: _recursive_18 | false | null;\n};\nexport declare function annotatedCaptured(value: T): _recursive_19;\nexport declare function recursiveTuple(value: T): _recursive_20;\nexport declare function inferredCaptured(): (T extends () => infer U ? _recursive_21 : never);\nexport declare function mappedCaptured(): _recursive_22;\nexport declare function freshGeneric(unused: T): _recursive_23;\nexport declare function mutualCaptured(left: T, right: U): {\n left: _recursive_25;\n right: _recursive_24;\n};\nexport declare class CapturedClass {\n value: T;\n constructor(value: T);\n make(inner: U): _recursive_26;\n}\nexport declare function covariantClass(): {\n new (): _recursive_27;\n};\nexport declare function contravariantClass(): {\n new (): _recursive_28;\n};\nexport declare namespace Nested {\n type _recursive_29 = {\n value: T;\n next: () => _recursive_29;\n };\n export function captured(value: T): _recursive_29;\n export {};\n}\nexport {};\n", + "impliedNodeFormat": 1 + } } ], "options": { @@ -917,360 +1345,8 @@ export var Nested; "outDir": "./", "strict": true }, - "emitDiagnosticsPerFile": [ - [ - "../index.ts", - [ - { - "pos": 3735, - "end": 3746, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "mappedCycle" - ] - }, - { - "pos": 3813, - "end": 3828, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "mappedCycleCopy" - ] - }, - { - "pos": 3857, - "end": 3868, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "nestedCycle" - ] - }, - { - "pos": 3982, - "end": 3993, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "keyedCycles" - ] - }, - { - "pos": 4154, - "end": 4166, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "sharedCycles" - ] - }, - { - "pos": 4463, - "end": 4474, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "mutualCycle" - ] - }, - { - "pos": 4862, - "end": 4875, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "shadowedCycle" - ] - }, - { - "pos": 5024, - "end": 5037, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "optionalCycle" - ] - }, - { - "pos": 5192, - "end": 5205, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "nullableCycle" - ] - }, - { - "pos": 5355, - "end": 5366, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "mixedCycles" - ] - }, - { - "pos": 5403, - "end": 5423, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "sharedOptionalCycles" - ] - }, - { - "pos": 5488, - "end": 5500, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "nullableKeys" - ] - }, - { - "pos": 5739, - "end": 5751, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "nullableRoot" - ] - }, - { - "pos": 5905, - "end": 5917, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "optionalRoot" - ] - }, - { - "pos": 6232, - "end": 6245, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "nullableLinks" - ] - }, - { - "pos": 6427, - "end": 6448, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "optionalNullableLinks" - ] - }, - { - "pos": 6785, - "end": 6806, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "nullableOptionalLinks" - ] - }, - { - "pos": 7139, - "end": 7151, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "nullishLinks" - ] - }, - { - "pos": 7316, - "end": 7331, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "mixedUnionCycle" - ] - }, - { - "pos": 7432, - "end": 7439, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "factory" - ] - }, - { - "pos": 7498, - "end": 7506, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "captured" - ] - }, - { - "pos": 7632, - "end": 7646, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "nestedCaptured" - ] - }, - { - "pos": 7892, - "end": 7903, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "constrained" - ] - }, - { - "pos": 8058, - "end": 8074, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "optionalCaptured" - ] - }, - { - "pos": 8202, - "end": 8219, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "annotatedCaptured" - ] - }, - { - "pos": 8355, - "end": 8369, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "recursiveTuple" - ] - }, - { - "pos": 8468, - "end": 8484, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "inferredCaptured" - ] - }, - { - "pos": 8623, - "end": 8637, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "mappedCaptured" - ] - }, - { - "pos": 8754, - "end": 8766, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "freshGeneric" - ] - }, - { - "pos": 8861, - "end": 8875, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "mutualCaptured" - ] - }, - { - "pos": 9134, - "end": 9138, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "make" - ] - }, - { - "pos": 9278, - "end": 9292, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "covariantClass" - ] - }, - { - "pos": 9413, - "end": 9431, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "contravariantClass" - ] - }, - { - "pos": 9600, - "end": 9608, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "captured" - ] - } - ] - ] - ], - "emitSignatures": [ - { - "file": "../index.ts", - "original": 2 - } - ], - "size": 17943 + "latestChangedDtsFile": "./index.d.ts", + "size": 24520 } producer/tsconfig.json:: @@ -1278,10 +1354,12 @@ SemanticDiagnostics:: *refresh* /home/src/tslibs/TS/Lib/lib.es2026.full.d.ts *refresh* /home/src/workspaces/project/producer/index.ts Signatures:: +(stored at emit) /home/src/workspaces/project/producer/index.ts consumer/tsconfig.json:: SemanticDiagnostics:: *refresh* /home/src/tslibs/TS/Lib/lib.es2026.full.d.ts +*refresh* /home/src/workspaces/project/producer/dist/index.d.ts *refresh* /home/src/workspaces/project/consumer/index.ts Signatures:: @@ -1291,263 +1369,198 @@ Edit [0]:: no change tsgo --build consumer ExitStatus:: DiagnosticsPresent_OutputsGenerated Output:: -producer/index.ts:83:14 - error TS5088: The inferred type of 'mappedCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -83 export const mappedCycle = build<{ Node: { value: number; next: "ref" } }>(); -   ~~~~~~~~~~~ - -producer/index.ts:84:14 - error TS5088: The inferred type of 'mappedCycleCopy' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -84 export const mappedCycleCopy = mappedCycle; -   ~~~~~~~~~~~~~~~ - -producer/index.ts:85:14 - error TS5088: The inferred type of 'nestedCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:158:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. -85 export const nestedCycle = { wrapped: build<{ Node: { value: string; next: "ref" } }>() }; -   ~~~~~~~~~~~ +158 const invalid: number = arrow()()(); +   ~~~~~~~ -producer/index.ts:87:14 - error TS5088: The inferred type of 'keyedCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:159:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. -87 export const keyedCycles = build<{ -   ~~~~~~~~~~~ +159 const invalidExpression: number = expression()()(); +   ~~~~~~~~~~~~~~~~~ -producer/index.ts:92:14 - error TS5088: The inferred type of 'sharedCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:160:7 - error TS2322: Type '() => { call: ...; }' is not assignable to type 'number'. -92 export const sharedCycles = { first: mappedCycle, second: mappedCycle }; -   ~~~~~~~~~~~~ +160 const invalidObject: number = objectReturn().call; +   ~~~~~~~~~~~~~ -producer/index.ts:97:14 - error TS5088: The inferred type of 'mutualCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:161:7 - error TS2322: Type '() => readonly [...]' is not assignable to type 'number'. -97 export const mutualCycle = buildMutual<{ -   ~~~~~~~~~~~ +161 const invalidTuple: number = tupleReturn()[0]; +   ~~~~~~~~~~~~ -producer/index.ts:105:14 - error TS5088: The inferred type of 'shadowedCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:162:7 - error TS2322: Type '(shadowed: number) => ...' is not assignable to type 'number'. -105 export const shadowedCycle = buildShadowed<{ Node: { value: number; next: "ref" } }>(); -   ~~~~~~~~~~~~~ +162 const invalidShadowed: number = shadowed(1); +   ~~~~~~~~~~~~~~~ -producer/index.ts:107:14 - error TS5088: The inferred type of 'optionalCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:163:7 - error TS2322: Type 'number' is not assignable to type 'string'. -107 export const optionalCycle = buildOptional<{ Node: { value: number; next: "ref" } }>(); -   ~~~~~~~~~~~~~ +163 const invalidObjectValue: string = object.next().value; +   ~~~~~~~~~~~~~~~~~~ -producer/index.ts:109:14 - error TS5088: The inferred type of 'nullableCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:164:7 - error TS2322: Type 'readonly [() => ...]' is not assignable to type 'number'. -109 export const nullableCycle = buildNullable<{ Node: { value: string; next: "ref" } }>(); -   ~~~~~~~~~~~~~ +164 const invalidTupleValue: number = tuple[0](); +   ~~~~~~~~~~~~~~~~~ -producer/index.ts:111:14 - error TS5088: The inferred type of 'mixedCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:165:7 - error TS2322: Type 'string' is not assignable to type 'number'. -111 export const mixedCycles = wrap(optionalCycle); -   ~~~~~~~~~~~ +165 const invalidSpecialized: number = specialized.next().value; +   ~~~~~~~~~~~~~~~~~~ -producer/index.ts:112:14 - error TS5088: The inferred type of 'sharedOptionalCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:166:7 - error TS2322: Type '{ next: ...; }' is not assignable to type 'number'. -112 export const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle }; -   ~~~~~~~~~~~~~~~~~~~~ +166 const invalidMapped: number = mapped.next; +   ~~~~~~~~~~~~~ -producer/index.ts:113:14 - error TS5088: The inferred type of 'nullableKeys' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:167:7 - error TS2322: Type 'string' is not assignable to type 'number'. -113 export const nullableKeys = buildNullable<{ -   ~~~~~~~~~~~~ +167 const invalidAnnotation: number = viaAnnotation.next().value; +   ~~~~~~~~~~~~~~~~~ -producer/index.ts:119:14 - error TS5088: The inferred type of 'nullableRoot' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:168:7 - error TS2322: Type 'string' is not assignable to type 'number'. -119 export const nullableRoot = buildNullableRoot<{ Node: { value: number; next: "ref" } }>(); -   ~~~~~~~~~~~~ +168 const invalidLink: number = nextLink.next.value; +   ~~~~~~~~~~~ -producer/index.ts:121:14 - error TS5088: The inferred type of 'optionalRoot' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:169:7 - error TS2322: Type 'number' is not assignable to type 'string'. -121 export const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: "ref" } }>(); -   ~~~~~~~~~~~~ +169 const invalidCallable: string = nextCallable(1).link.value; +   ~~~~~~~~~~~~~~~ -producer/index.ts:126:14 - error TS5088: The inferred type of 'nullableLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:170:7 - error TS2322: Type 'string' is not assignable to type 'number'. -126 export const nullableLinks = buildNullableLinks<{ Node: { value: number; next: "ref" } }>(); -   ~~~~~~~~~~~~~ +170 const invalidHiddenValue: number = hiddenAlias.next.next.value; +   ~~~~~~~~~~~~~~~~~~ -producer/index.ts:128:14 - error TS5088: The inferred type of 'optionalNullableLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:171:7 - error TS2322: Type '() => (typeof Methods)["recur"]' is not assignable to type 'number'. -128 export const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: "ref" } }>(); -   ~~~~~~~~~~~~~~~~~~~~~ +171 const invalidMethod: number = Methods.recur()(); +   ~~~~~~~~~~~~~ -producer/index.ts:133:14 - error TS5088: The inferred type of 'nullableOptionalLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:172:7 - error TS2322: Type '() => (typeof Methods)[typeof key]' is not assignable to type 'number'. -133 export const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: "ref" } }>(); -   ~~~~~~~~~~~~~~~~~~~~~ +172 const invalidComputedMethod: number = Methods[key]()(); +   ~~~~~~~~~~~~~~~~~~~~~ -producer/index.ts:138:14 - error TS5088: The inferred type of 'nullishLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:173:7 - error TS2322: Type 'string' is not assignable to type 'boolean'. -138 export const nullishLinks = buildNullishLinks<{ Node: { value: number; next: "ref" } }>(); -   ~~~~~~~~~~~~ +173 const invalidNestedOuter: boolean = nestedString.outer; +   ~~~~~~~~~~~~~~~~~~ -producer/index.ts:140:14 - error TS5088: The inferred type of 'mixedUnionCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:174:7 - error TS2322: Type 'number' is not assignable to type 'string'. -140 export const mixedUnionCycle = buildMixed<{ Node: { value: number; next: "ref" } }>(); -   ~~~~~~~~~~~~~~~ +174 const invalidNestedInner: string = nestedString.inner; +   ~~~~~~~~~~~~~~~~~~ -producer/index.ts:142:14 - error TS5088: The inferred type of 'factory' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:175:26 - error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. -142 export const factory = () => function self() { return self; }; -   ~~~~~~~ +175 nestedNumber.constrained("wrong"); +   ~~~~~~~ -producer/index.ts:143:17 - error TS5088: The inferred type of 'captured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:176:7 - error TS2322: Type 'number' is not assignable to type 'string'. -143 export function captured(value: T) { -   ~~~~~~~~ +176 const invalidMappedCycleValue: string = mappedCycle.Node.next.next.value; +   ~~~~~~~~~~~~~~~~~~~~~~~ -producer/index.ts:147:17 - error TS5088: The inferred type of 'nestedCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:177:7 - error TS2322: Type 'string' is not assignable to type 'number'. -147 export function nestedCaptured(outer: T) { -   ~~~~~~~~~~~~~~ +177 const invalidMutualCycleValue: number = mutualCycle.First.next.value; +   ~~~~~~~~~~~~~~~~~~~~~~~ -producer/index.ts:156:17 - error TS5088: The inferred type of 'constrained' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:178:7 - error TS2322: Type 'number' is not assignable to type 'string'. -156 export function constrained(key: K) { -   ~~~~~~~~~~~ +178 const invalidShadowedMappedValue: string = shadowedCycle.Node.next(1).next("text").value; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~ -producer/index.ts:160:17 - error TS5088: The inferred type of 'optionalCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:179:7 - error TS2322: Type 'null' is not assignable to type '_recursive_1'. -160 export function optionalCaptured(value: T) { -   ~~~~~~~~~~~~~~~~ +179 const invalidNullNext: OptionalNode["next"] = null; +   ~~~~~~~~~~~~~~~ -producer/index.ts:164:17 - error TS5088: The inferred type of 'annotatedCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:180:7 - error TS2322: Type 'undefined' is not assignable to type '_recursive_1'. -164 export function annotatedCaptured(value: T) { -   ~~~~~~~~~~~~~~~~~ +180 const invalidUndefinedNext: OptionalNode["next"] = undefined; +   ~~~~~~~~~~~~~~~~~~~~ -producer/index.ts:168:17 - error TS5088: The inferred type of 'recursiveTuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:181:42 - error TS2531: Object is possibly 'null'. -168 export function recursiveTuple(value: T) { -   ~~~~~~~~~~~~~~ +181 const invalidNullableLinkValue: number = nullableLinks.Node!.next.value; +   ~~~~~~~~~~~~~~~~~~~~~~~~ -producer/index.ts:172:17 - error TS5088: The inferred type of 'inferredCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:182:41 - error TS2533: Object is possibly 'null' or 'undefined'. -172 export function inferredCaptured() { -   ~~~~~~~~~~~~~~~~ +182 const invalidNullishLinkValue: number = nullishLinks.Node!.next.value; +   ~~~~~~~~~~~~~~~~~~~~~~~ -producer/index.ts:176:17 - error TS5088: The inferred type of 'mappedCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:183:26 - error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. -176 export function mappedCaptured() { -   ~~~~~~~~~~~~~~ +183 captured("text").consume(1); +   ~ -producer/index.ts:180:17 - error TS5088: The inferred type of 'freshGeneric' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:184:7 - error TS2322: Type 'string' is not assignable to type 'number'. -180 export function freshGeneric(unused: T) { -   ~~~~~~~~~~~~ +184 const invalidRecursiveTupleValue: number = recursiveTuple("text")[1][0]; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~ -producer/index.ts:184:17 - error TS5088: The inferred type of 'mutualCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:185:7 - error TS2322: Type 'number' is not assignable to type 'string'. -184 export function mutualCaptured(left: T, right: U) { -   ~~~~~~~~~~~~~~ +185 const invalidCapturedOuter: string = nestedCapturedValue.outer; +   ~~~~~~~~~~~~~~~~~~~~ -producer/index.ts:191:5 - error TS5088: The inferred type of 'make' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:186:7 - error TS2322: Type 'string' is not assignable to type 'number'. -191 make(inner: U) { -   ~~~~ +186 const invalidCapturedInner: number = nestedCapturedValue.inner; +   ~~~~~~~~~~~~~~~~~~~~ -producer/index.ts:196:17 - error TS5088: The inferred type of 'covariantClass' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:188:7 - error TS2322: Type 'boolean' is not assignable to type '_recursive_13'. -196 export function covariantClass() { -   ~~~~~~~~~~~~~~ +188 const invalidMixedNext: WithoutFalseOrNullish["next"] = false; +   ~~~~~~~~~~~~~~~~ -producer/index.ts:202:17 - error TS5088: The inferred type of 'contravariantClass' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:189:7 - error TS2322: Type 'string' is not assignable to type 'number'. -202 export function contravariantClass() { -   ~~~~~~~~~~~~~~~~~~ +189 const invalidInferredCapturedValue: number = inferredCaptured<() => string>().next.value; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -producer/index.ts:209:21 - error TS5088: The inferred type of 'captured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +consumer/index.ts:190:7 - error TS2322: Type 'number' is not assignable to type 'string'. -209 export function captured(value: T) { -   ~~~~~~~~ +190 const invalidMappedCapturedValue: string = mappedCaptured<{ value: number }>().value.next.value.value; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:1:88 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. +consumer/index.ts:191:7 - error TS2322: Type 'number' is not assignable to type 'boolean'. -1 import { arrow, expression, first, generic, objectReturn, tupleReturn, shadowed } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +191 const invalidMutualCapturedValue: boolean = mutualCaptured(1, "text").right.self.next.left; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:2:64 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. +consumer/index.ts:192:7 - error TS2322: Type 'string' is not assignable to type 'number'. -2 import { object, method, accessor, tuple, array, nested } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +192 const invalidCapturedClassValue: number = capturedClassResult.outer; +   ~~~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:3:94 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. +consumer/index.ts:193:7 - error TS2322: Type '_recursive_27' is not assignable to type '_recursive_27'. + Type 'unknown' is not assignable to type 'string'. -3 import { memberTuple, memberArray, quoted, numeric, key, computed, union, specialized } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +193 const invalidCovariance: typeof covariantString = covariantUnknown.next(); +   ~~~~~~~~~~~~~~~~~ -consumer/index.ts:4:48 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. +consumer/index.ts:194:7 - error TS2322: Type '_recursive_28' is not assignable to type '_recursive_28'. + Type 'unknown' is not assignable to type 'string'. -4 import { indexed, mapped, viaAnnotation } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +194 const invalidContravariance: typeof contravariantUnknown = contravariantString.next(); +   ~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:5:86 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. -5 import { nextLink, nextCallable, parenthesized, asserted, Methods, overloaded } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:6:51 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -6 import { hiddenAlias, siblingHiddenAliases } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:7:30 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -7 import { nestedNumber } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:8:124 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -8 import { mappedCycle, mappedCycleCopy, nestedCycle, cycleKey, keyedCycles, sharedCycles, mutualCycle, shadowedCycle } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:9:152 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -9 import { optionalCycle, nullableCycle, mixedCycles, sharedOptionalCycles, nullableKeys, nullableRoot, optionalRoot, nullableLinks, nullishLinks } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:10:62 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -10 import { optionalNullableLinks, nullableOptionalLinks } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:11:142 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -11 import { mixedUnionCycle, factory, captured, nestedCaptured, constrained, optionalCaptured, annotatedCaptured, recursiveTuple, Nested } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:12:80 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -12 import { inferredCaptured, mappedCaptured, freshGeneric, mutualCaptured } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:13:31 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -13 import { CapturedClass } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:14:52 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -14 import { covariantClass, contravariantClass } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - -Found 48 errors in 2 files. - -Errors Files - 14 consumer/index.ts:1 - 34 producer/index.ts:83 +Found 36 errors in the same file, starting at: consumer/index.ts:158 //// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo] *rewrite with same content* //// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo.readable.baseline.txt] *rewrite with same content* -producer/tsconfig.json:: -SemanticDiagnostics:: -Signatures:: - consumer/tsconfig.json:: SemanticDiagnostics:: *refresh* /home/src/tslibs/TS/Lib/lib.es2026.full.d.ts +*refresh* /home/src/workspaces/project/producer/dist/index.d.ts *refresh* /home/src/workspaces/project/consumer/index.ts Signatures:: @@ -1774,252 +1787,190 @@ type NonNullable = "shadowed"; tsgo --build consumer ExitStatus:: DiagnosticsPresent_OutputsGenerated Output:: -producer/index.ts:83:14 - error TS5088: The inferred type of 'mappedCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -83 export const mappedCycle = build<{ Node: { value: number; next: "ref" } }>(); -   ~~~~~~~~~~~ - -producer/index.ts:84:14 - error TS5088: The inferred type of 'mappedCycleCopy' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -84 export const mappedCycleCopy = mappedCycle; -   ~~~~~~~~~~~~~~~ +consumer/index.ts:158:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. -producer/index.ts:85:14 - error TS5088: The inferred type of 'nestedCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +158 const invalid: number = arrow()()(); +   ~~~~~~~ -85 export const nestedCycle = { wrapped: build<{ Node: { value: string; next: "ref" } }>() }; -   ~~~~~~~~~~~ +consumer/index.ts:159:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. -producer/index.ts:87:14 - error TS5088: The inferred type of 'keyedCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +159 const invalidExpression: number = expression()()(); +   ~~~~~~~~~~~~~~~~~ -87 export const keyedCycles = build<{ -   ~~~~~~~~~~~ +consumer/index.ts:160:7 - error TS2322: Type '() => { call: ...; }' is not assignable to type 'number'. -producer/index.ts:92:14 - error TS5088: The inferred type of 'sharedCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +160 const invalidObject: number = objectReturn().call; +   ~~~~~~~~~~~~~ -92 export const sharedCycles = { first: mappedCycle, second: mappedCycle }; -   ~~~~~~~~~~~~ +consumer/index.ts:161:7 - error TS2322: Type '() => readonly [...]' is not assignable to type 'number'. -producer/index.ts:97:14 - error TS5088: The inferred type of 'mutualCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +161 const invalidTuple: number = tupleReturn()[0]; +   ~~~~~~~~~~~~ -97 export const mutualCycle = buildMutual<{ -   ~~~~~~~~~~~ +consumer/index.ts:162:7 - error TS2322: Type '(shadowed: number) => ...' is not assignable to type 'number'. -producer/index.ts:105:14 - error TS5088: The inferred type of 'shadowedCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +162 const invalidShadowed: number = shadowed(1); +   ~~~~~~~~~~~~~~~ -105 export const shadowedCycle = buildShadowed<{ Node: { value: number; next: "ref" } }>(); -   ~~~~~~~~~~~~~ +consumer/index.ts:163:7 - error TS2322: Type 'number' is not assignable to type 'string'. -producer/index.ts:107:14 - error TS5088: The inferred type of 'optionalCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +163 const invalidObjectValue: string = object.next().value; +   ~~~~~~~~~~~~~~~~~~ -107 export const optionalCycle = buildOptional<{ Node: { value: number; next: "ref" } }>(); -   ~~~~~~~~~~~~~ +consumer/index.ts:164:7 - error TS2322: Type 'readonly [() => ...]' is not assignable to type 'number'. -producer/index.ts:109:14 - error TS5088: The inferred type of 'nullableCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +164 const invalidTupleValue: number = tuple[0](); +   ~~~~~~~~~~~~~~~~~ -109 export const nullableCycle = buildNullable<{ Node: { value: string; next: "ref" } }>(); -   ~~~~~~~~~~~~~ +consumer/index.ts:165:7 - error TS2322: Type 'string' is not assignable to type 'number'. -producer/index.ts:111:14 - error TS5088: The inferred type of 'mixedCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +165 const invalidSpecialized: number = specialized.next().value; +   ~~~~~~~~~~~~~~~~~~ -111 export const mixedCycles = wrap(optionalCycle); -   ~~~~~~~~~~~ +consumer/index.ts:166:7 - error TS2322: Type '{ next: ...; }' is not assignable to type 'number'. -producer/index.ts:112:14 - error TS5088: The inferred type of 'sharedOptionalCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +166 const invalidMapped: number = mapped.next; +   ~~~~~~~~~~~~~ -112 export const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle }; -   ~~~~~~~~~~~~~~~~~~~~ +consumer/index.ts:167:7 - error TS2322: Type 'string' is not assignable to type 'number'. -producer/index.ts:113:14 - error TS5088: The inferred type of 'nullableKeys' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +167 const invalidAnnotation: number = viaAnnotation.next().value; +   ~~~~~~~~~~~~~~~~~ -113 export const nullableKeys = buildNullable<{ -   ~~~~~~~~~~~~ +consumer/index.ts:168:7 - error TS2322: Type 'string' is not assignable to type 'number'. -producer/index.ts:119:14 - error TS5088: The inferred type of 'nullableRoot' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +168 const invalidLink: number = nextLink.next.value; +   ~~~~~~~~~~~ -119 export const nullableRoot = buildNullableRoot<{ Node: { value: number; next: "ref" } }>(); -   ~~~~~~~~~~~~ +consumer/index.ts:169:7 - error TS2322: Type 'number' is not assignable to type 'string'. -producer/index.ts:121:14 - error TS5088: The inferred type of 'optionalRoot' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +169 const invalidCallable: string = nextCallable(1).link.value; +   ~~~~~~~~~~~~~~~ -121 export const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: "ref" } }>(); -   ~~~~~~~~~~~~ +consumer/index.ts:170:7 - error TS2322: Type 'string' is not assignable to type 'number'. -producer/index.ts:126:14 - error TS5088: The inferred type of 'nullableLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +170 const invalidHiddenValue: number = hiddenAlias.next.next.value; +   ~~~~~~~~~~~~~~~~~~ -126 export const nullableLinks = buildNullableLinks<{ Node: { value: number; next: "ref" } }>(); -   ~~~~~~~~~~~~~ +consumer/index.ts:171:7 - error TS2322: Type '() => (typeof Methods)["recur"]' is not assignable to type 'number'. -producer/index.ts:128:14 - error TS5088: The inferred type of 'optionalNullableLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +171 const invalidMethod: number = Methods.recur()(); +   ~~~~~~~~~~~~~ -128 export const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: "ref" } }>(); -   ~~~~~~~~~~~~~~~~~~~~~ +consumer/index.ts:172:7 - error TS2322: Type '() => (typeof Methods)[typeof key]' is not assignable to type 'number'. -producer/index.ts:133:14 - error TS5088: The inferred type of 'nullableOptionalLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +172 const invalidComputedMethod: number = Methods[key]()(); +   ~~~~~~~~~~~~~~~~~~~~~ -133 export const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: "ref" } }>(); -   ~~~~~~~~~~~~~~~~~~~~~ +consumer/index.ts:173:7 - error TS2322: Type 'string' is not assignable to type 'boolean'. -producer/index.ts:138:14 - error TS5088: The inferred type of 'nullishLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +173 const invalidNestedOuter: boolean = nestedString.outer; +   ~~~~~~~~~~~~~~~~~~ -138 export const nullishLinks = buildNullishLinks<{ Node: { value: number; next: "ref" } }>(); -   ~~~~~~~~~~~~ +consumer/index.ts:174:7 - error TS2322: Type 'number' is not assignable to type 'string'. -producer/index.ts:140:14 - error TS5088: The inferred type of 'mixedUnionCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +174 const invalidNestedInner: string = nestedString.inner; +   ~~~~~~~~~~~~~~~~~~ -140 export const mixedUnionCycle = buildMixed<{ Node: { value: number; next: "ref" } }>(); -   ~~~~~~~~~~~~~~~ +consumer/index.ts:175:26 - error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. -producer/index.ts:142:14 - error TS5088: The inferred type of 'factory' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +175 nestedNumber.constrained("wrong"); +   ~~~~~~~ -142 export const factory = () => function self() { return self; }; -   ~~~~~~~ +consumer/index.ts:176:7 - error TS2322: Type 'number' is not assignable to type 'string'. -producer/index.ts:143:17 - error TS5088: The inferred type of 'captured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +176 const invalidMappedCycleValue: string = mappedCycle.Node.next.next.value; +   ~~~~~~~~~~~~~~~~~~~~~~~ -143 export function captured(value: T) { -   ~~~~~~~~ +consumer/index.ts:177:7 - error TS2322: Type 'string' is not assignable to type 'number'. -producer/index.ts:147:17 - error TS5088: The inferred type of 'nestedCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +177 const invalidMutualCycleValue: number = mutualCycle.First.next.value; +   ~~~~~~~~~~~~~~~~~~~~~~~ -147 export function nestedCaptured(outer: T) { -   ~~~~~~~~~~~~~~ +consumer/index.ts:178:7 - error TS2322: Type 'number' is not assignable to type 'string'. -producer/index.ts:156:17 - error TS5088: The inferred type of 'constrained' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +178 const invalidShadowedMappedValue: string = shadowedCycle.Node.next(1).next("text").value; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~ -156 export function constrained(key: K) { -   ~~~~~~~~~~~ +consumer/index.ts:179:7 - error TS2322: Type 'null' is not assignable to type '_recursive_1'. -producer/index.ts:160:17 - error TS5088: The inferred type of 'optionalCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +179 const invalidNullNext: OptionalNode["next"] = null; +   ~~~~~~~~~~~~~~~ -160 export function optionalCaptured(value: T) { -   ~~~~~~~~~~~~~~~~ +consumer/index.ts:180:7 - error TS2322: Type 'undefined' is not assignable to type '_recursive_1'. -producer/index.ts:164:17 - error TS5088: The inferred type of 'annotatedCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +180 const invalidUndefinedNext: OptionalNode["next"] = undefined; +   ~~~~~~~~~~~~~~~~~~~~ -164 export function annotatedCaptured(value: T) { -   ~~~~~~~~~~~~~~~~~ +consumer/index.ts:181:42 - error TS2531: Object is possibly 'null'. -producer/index.ts:168:17 - error TS5088: The inferred type of 'recursiveTuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +181 const invalidNullableLinkValue: number = nullableLinks.Node!.next.value; +   ~~~~~~~~~~~~~~~~~~~~~~~~ -168 export function recursiveTuple(value: T) { -   ~~~~~~~~~~~~~~ +consumer/index.ts:182:41 - error TS2533: Object is possibly 'null' or 'undefined'. -producer/index.ts:172:17 - error TS5088: The inferred type of 'inferredCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +182 const invalidNullishLinkValue: number = nullishLinks.Node!.next.value; +   ~~~~~~~~~~~~~~~~~~~~~~~ -172 export function inferredCaptured() { -   ~~~~~~~~~~~~~~~~ +consumer/index.ts:183:26 - error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. -producer/index.ts:176:17 - error TS5088: The inferred type of 'mappedCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +183 captured("text").consume(1); +   ~ -176 export function mappedCaptured() { -   ~~~~~~~~~~~~~~ +consumer/index.ts:184:7 - error TS2322: Type 'string' is not assignable to type 'number'. -producer/index.ts:180:17 - error TS5088: The inferred type of 'freshGeneric' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +184 const invalidRecursiveTupleValue: number = recursiveTuple("text")[1][0]; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~ -180 export function freshGeneric(unused: T) { -   ~~~~~~~~~~~~ +consumer/index.ts:185:7 - error TS2322: Type 'number' is not assignable to type 'string'. -producer/index.ts:184:17 - error TS5088: The inferred type of 'mutualCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +185 const invalidCapturedOuter: string = nestedCapturedValue.outer; +   ~~~~~~~~~~~~~~~~~~~~ -184 export function mutualCaptured(left: T, right: U) { -   ~~~~~~~~~~~~~~ +consumer/index.ts:186:7 - error TS2322: Type 'string' is not assignable to type 'number'. -producer/index.ts:191:5 - error TS5088: The inferred type of 'make' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +186 const invalidCapturedInner: number = nestedCapturedValue.inner; +   ~~~~~~~~~~~~~~~~~~~~ -191 make(inner: U) { -   ~~~~ +consumer/index.ts:188:7 - error TS2322: Type 'boolean' is not assignable to type '_recursive_13'. -producer/index.ts:196:17 - error TS5088: The inferred type of 'covariantClass' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +188 const invalidMixedNext: WithoutFalseOrNullish["next"] = false; +   ~~~~~~~~~~~~~~~~ -196 export function covariantClass() { -   ~~~~~~~~~~~~~~ +consumer/index.ts:189:7 - error TS2322: Type 'string' is not assignable to type 'number'. -producer/index.ts:202:17 - error TS5088: The inferred type of 'contravariantClass' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +189 const invalidInferredCapturedValue: number = inferredCaptured<() => string>().next.value; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -202 export function contravariantClass() { -   ~~~~~~~~~~~~~~~~~~ +consumer/index.ts:190:7 - error TS2322: Type 'number' is not assignable to type 'string'. -producer/index.ts:209:21 - error TS5088: The inferred type of 'captured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +190 const invalidMappedCapturedValue: string = mappedCaptured<{ value: number }>().value.next.value.value; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~ -209 export function captured(value: T) { -   ~~~~~~~~ +consumer/index.ts:191:7 - error TS2322: Type 'number' is not assignable to type 'boolean'. -consumer/index.ts:1:88 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. +191 const invalidMutualCapturedValue: boolean = mutualCaptured(1, "text").right.self.next.left; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~ -1 import { arrow, expression, first, generic, objectReturn, tupleReturn, shadowed } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +consumer/index.ts:192:7 - error TS2322: Type 'string' is not assignable to type 'number'. -consumer/index.ts:2:64 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. +192 const invalidCapturedClassValue: number = capturedClassResult.outer; +   ~~~~~~~~~~~~~~~~~~~~~~~~~ -2 import { object, method, accessor, tuple, array, nested } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +consumer/index.ts:193:7 - error TS2322: Type '_recursive_27' is not assignable to type '_recursive_27'. + Type 'unknown' is not assignable to type 'string'. -consumer/index.ts:3:94 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. +193 const invalidCovariance: typeof covariantString = covariantUnknown.next(); +   ~~~~~~~~~~~~~~~~~ -3 import { memberTuple, memberArray, quoted, numeric, key, computed, union, specialized } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +consumer/index.ts:194:7 - error TS2322: Type '_recursive_28' is not assignable to type '_recursive_28'. + Type 'unknown' is not assignable to type 'string'. -consumer/index.ts:4:48 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. +194 const invalidContravariance: typeof contravariantUnknown = contravariantString.next(); +   ~~~~~~~~~~~~~~~~~~~~~ -4 import { indexed, mapped, viaAnnotation } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:5:86 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -5 import { nextLink, nextCallable, parenthesized, asserted, Methods, overloaded } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:6:51 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -6 import { hiddenAlias, siblingHiddenAliases } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:7:30 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -7 import { nestedNumber } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:8:124 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -8 import { mappedCycle, mappedCycleCopy, nestedCycle, cycleKey, keyedCycles, sharedCycles, mutualCycle, shadowedCycle } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:9:152 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -9 import { optionalCycle, nullableCycle, mixedCycles, sharedOptionalCycles, nullableKeys, nullableRoot, optionalRoot, nullableLinks, nullishLinks } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:10:62 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -10 import { optionalNullableLinks, nullableOptionalLinks } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:11:142 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -11 import { mixedUnionCycle, factory, captured, nestedCaptured, constrained, optionalCaptured, annotatedCaptured, recursiveTuple, Nested } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:12:80 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -12 import { inferredCaptured, mappedCaptured, freshGeneric, mutualCaptured } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:13:31 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -13 import { CapturedClass } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:14:52 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -14 import { covariantClass, contravariantClass } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - -Found 48 errors in 2 files. - -Errors Files - 14 consumer/index.ts:1 - 34 producer/index.ts:83 +Found 36 errors in the same file, starting at: consumer/index.ts:158 //// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo] *rewrite with same content* //// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo.readable.baseline.txt] *rewrite with same content* @@ -2189,7 +2140,7 @@ export var Nested; // comment-only edit //// [/home/src/workspaces/project/producer/dist/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2026.full.d.ts","../index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"8be79633abc8e3e9d5c07f355c360ccf-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);\ntype Show = { [K in keyof T]: T[K] } & unknown;\ntype Resolve = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? Resolve : M[K][P];\n}>;\ndeclare const build: () => { [K in keyof M]: Resolve };\nexport const mappedCycle = build<{ Node: { value: number; next: \"ref\" } }>();\nexport const mappedCycleCopy = mappedCycle;\nexport const nestedCycle = { wrapped: build<{ Node: { value: string; next: \"ref\" } }>() };\nexport const cycleKey = Symbol();\nexport const keyedCycles = build<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\nexport const sharedCycles = { first: mappedCycle, second: mappedCycle };\ntype ResolveMutual = Show<{\n [P in keyof M[K]]: M[K][P] extends { ref: infer R extends keyof M } ? ResolveMutual : M[K][P];\n}>;\ndeclare const buildMutual: () => { [K in keyof M]: ResolveMutual };\nexport const mutualCycle = buildMutual<{\n First: { value: number; next: { ref: \"Second\" } };\n Second: { value: string; next: { ref: \"First\" } };\n}>();\ntype ResolveShadowed = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? (shadowedCycle: T) => ResolveShadowed : M[K][P];\n}>;\ndeclare const buildShadowed: () => { [K in keyof M]: ResolveShadowed };\nexport const shadowedCycle = buildShadowed<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptional: () => { [K in keyof M]?: Resolve };\nexport const optionalCycle = buildOptional<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildNullable: () => { [K in keyof M]: Resolve | null };\nexport const nullableCycle = buildNullable<{ Node: { value: string; next: \"ref\" } }>();\ndeclare const wrap: (value: T) => { required: T; optional?: T | null };\nexport const mixedCycles = wrap(optionalCycle);\nexport const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle };\nexport const nullableKeys = buildNullable<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\ndeclare const buildNullableRoot: () => Resolve | null;\nexport const nullableRoot = buildNullableRoot<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalRoot: () => Resolve | undefined;\nexport const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: \"ref\" } }>();\ntype ResolveNullable = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullable | null : M[K][P];\n}>;\ndeclare const buildNullableLinks: () => { [K in keyof M]: ResolveNullable | null };\nexport const nullableLinks = buildNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalNullableLinks: () => { [K in keyof M]?: ResolveNullable | null };\nexport const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveOptional = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveOptional | undefined : M[K][P];\n}>;\ndeclare const buildNullableOptionalLinks: () => { [K in keyof M]: ResolveOptional | null };\nexport const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveNullish = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullish | null | undefined : M[K][P];\n}>;\ndeclare const buildNullishLinks: () => { [K in keyof M]?: ResolveNullish | null };\nexport const nullishLinks = buildNullishLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildMixed: () => { [K in keyof M]?: Resolve | false | null };\nexport const mixedUnionCycle = buildMixed<{ Node: { value: number; next: \"ref\" } }>();\nexport const _recursive = 1;\nexport const factory = () => function self() { return self; };\nexport function captured(value: T) {\n const node = { value, next: () => node, consume: (other: T) => node };\n return node;\n}\nexport function nestedCaptured(outer: T) {\n return (inner: U) => {\n const node = {\n outer, inner, next: () => node,\n shadow: (value: T) => ({ outer, inner, value, next: node }),\n };\n return node;\n };\n}\nexport function constrained(key: K) {\n const node = { value: null! as T[K], next: () => node };\n return node;\n}\nexport function optionalCaptured(value: T) {\n type Node = { value: T; next: Node };\n return null! as { node?: Node | false | null };\n}\nexport function annotatedCaptured(value: T) {\n const node: { value: typeof value; next: typeof node } = { value, next: null! };\n return node;\n}\nexport function recursiveTuple(value: T) {\n type Tuple = readonly [T, Tuple];\n return null! as Tuple;\n}\nexport function inferredCaptured() {\n type Node = { value: V; next: Node };\n return null! as (T extends () => infer U ? Node : never);\n}\nexport function mappedCaptured() {\n type Node = { [K in keyof T]: { value: T[K]; next: Node } };\n return null! as Node;\n}\nexport function freshGeneric(unused: T) {\n const recur = (value: U) => recur;\n return recur;\n}\nexport function mutualCaptured(left: T, right: U) {\n type Left = { left: T; next: Right };\n type Right = { right: U; self: Right; next: Left };\n return { left: null! as Left, right: null! as Right };\n}\nexport class CapturedClass {\n constructor(public value: T) {}\n make(inner: U) {\n const node = { outer: this.value, inner, next: () => node };\n return node;\n }\n}\nexport function covariantClass() {\n return class Node {\n value!: T;\n next(): Node { return this; }\n };\n}\nexport function contravariantClass() {\n return class Node {\n consume!: (value: T) => void;\n next(): Node { return this; }\n };\n}\nexport namespace Nested {\n export function captured(value: T) {\n const node = { value, next: () => node };\n return node;\n }\n}\ntype NonNullable = \"shadowed\";\n// comment-only edit\n","signature":"67d95aa5b29b3462564c69678c5a8fa4-export declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: () => {\n call: typeof objectReturn;\n};\nexport declare const tupleReturn: () => readonly [typeof tupleReturn];\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: {\n value: number;\n next: () => typeof object;\n};\nexport declare const method: {\n value: number;\n next(): typeof method;\n};\nexport declare const accessor: {\n value: number;\n readonly next: typeof accessor;\n};\nexport declare const tuple: readonly [() => typeof tuple];\nexport declare const array: (() => typeof array)[];\nexport declare const nested: {\n inner: {\n next(): {\n next(): (typeof nested)[\"inner\"];\n };\n };\n};\nexport declare const memberTuple: readonly [() => (typeof memberTuple)[0]];\nexport declare const memberArray: (() => (typeof memberArray)[0])[];\nexport declare const quoted: {\n \"a-b\": () => (typeof quoted)[\"a-b\"];\n};\nexport declare const numeric: {\n 0: () => (typeof numeric)[0];\n};\nexport declare const key: unique symbol;\nexport declare const computed: {\n [key]: () => (typeof computed)[typeof key];\n};\nexport declare const union: {\n next: () => typeof union;\n} | undefined;\nexport declare const specialized: {\n value: string;\n next: () => typeof specialized;\n};\nexport declare const indexed: {\n [key: string]: typeof indexed;\n};\nexport declare const mapped: {\n next: typeof mapped;\n};\nexport declare const viaAnnotation: {\n value: string;\n next: () => typeof viaAnnotation;\n};\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: typeof hiddenAlias;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"first\"];\n };\n second: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"second\"];\n };\n};\nexport declare const parenthesized: () => typeof parenthesized;\nexport declare const asserted: () => typeof asserted;\nexport declare class Methods {\n static recur(): (typeof Methods)[\"recur\"];\n static \"a-b\"(): (typeof Methods)[\"a-b\"];\n static [key](): (typeof Methods)[typeof key];\n recur(): Methods[\"recur\"];\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n};\nexport declare const nestedNumber: {\n nested(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n constrained(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n copied(inner: U): {\n outer: number;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n};\nexport declare const mappedCycle: any;\nexport declare const mappedCycleCopy: any;\nexport declare const nestedCycle: any;\nexport declare const cycleKey: unique symbol;\nexport declare const keyedCycles: any;\nexport declare const sharedCycles: any;\nexport declare const mutualCycle: any;\nexport declare const shadowedCycle: any;\nexport declare const optionalCycle: any;\nexport declare const nullableCycle: any;\nexport declare const mixedCycles: any;\nexport declare const sharedOptionalCycles: any;\nexport declare const nullableKeys: any;\nexport declare const nullableRoot: any;\nexport declare const optionalRoot: any;\nexport declare const nullableLinks: any;\nexport declare const optionalNullableLinks: any;\nexport declare const nullableOptionalLinks: any;\nexport declare const nullishLinks: any;\nexport declare const mixedUnionCycle: any;\nexport declare const _recursive = 1;\nexport declare const factory: any;\nexport declare function captured(value: T): any;\nexport declare function nestedCaptured(outer: T): any;\nexport declare function constrained(key: K): any;\nexport declare function optionalCaptured(value: T): any;\nexport declare function annotatedCaptured(value: T): any;\nexport declare function recursiveTuple(value: T): any;\nexport declare function inferredCaptured(): any;\nexport declare function mappedCaptured(): any;\nexport declare function freshGeneric(unused: T): any;\nexport declare function mutualCaptured(left: T, right: U): any;\nexport declare class CapturedClass {\n value: T;\n constructor(value: T);\n make(inner: U): any;\n}\nexport declare function covariantClass(): any;\nexport declare function contravariantClass(): any;\nexport declare namespace Nested {\n function captured(value: T): any;\n}\n\n(3735,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmappedCycle\n\n(3813,15): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmappedCycleCopy\n\n(3857,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnestedCycle\n\n(3982,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nkeyedCycles\n\n(4154,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nsharedCycles\n\n(4463,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmutualCycle\n\n(4862,13): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nshadowedCycle\n\n(5024,13): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\noptionalCycle\n\n(5192,13): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnullableCycle\n\n(5355,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmixedCycles\n\n(5403,20): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nsharedOptionalCycles\n\n(5488,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnullableKeys\n\n(5739,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnullableRoot\n\n(5905,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\noptionalRoot\n\n(6232,13): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnullableLinks\n\n(6427,21): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\noptionalNullableLinks\n\n(6785,21): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnullableOptionalLinks\n\n(7139,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnullishLinks\n\n(7316,15): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmixedUnionCycle\n\n(7432,7): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nfactory\n\n(7498,8): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ncaptured\n\n(7632,14): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnestedCaptured\n\n(7892,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nconstrained\n\n(8058,16): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\noptionalCaptured\n\n(8202,17): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nannotatedCaptured\n\n(8355,14): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nrecursiveTuple\n\n(8468,16): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ninferredCaptured\n\n(8623,14): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmappedCaptured\n\n(8754,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nfreshGeneric\n\n(8861,14): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmutualCaptured\n\n(9134,4): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmake\n\n(9278,14): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ncovariantClass\n\n(9413,18): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ncontravariantClass\n\n(9600,8): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ncaptured\n","impliedNodeFormat":1}],"options":{"composite":true,"exactOptionalPropertyTypes":true,"outDir":"./","strict":true},"emitDiagnosticsPerFile":[[2,[{"pos":3735,"end":3746,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["mappedCycle"]},{"pos":3813,"end":3828,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["mappedCycleCopy"]},{"pos":3857,"end":3868,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nestedCycle"]},{"pos":3982,"end":3993,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["keyedCycles"]},{"pos":4154,"end":4166,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["sharedCycles"]},{"pos":4463,"end":4474,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["mutualCycle"]},{"pos":4862,"end":4875,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["shadowedCycle"]},{"pos":5024,"end":5037,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["optionalCycle"]},{"pos":5192,"end":5205,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nullableCycle"]},{"pos":5355,"end":5366,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["mixedCycles"]},{"pos":5403,"end":5423,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["sharedOptionalCycles"]},{"pos":5488,"end":5500,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nullableKeys"]},{"pos":5739,"end":5751,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nullableRoot"]},{"pos":5905,"end":5917,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["optionalRoot"]},{"pos":6232,"end":6245,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nullableLinks"]},{"pos":6427,"end":6448,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["optionalNullableLinks"]},{"pos":6785,"end":6806,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nullableOptionalLinks"]},{"pos":7139,"end":7151,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nullishLinks"]},{"pos":7316,"end":7331,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["mixedUnionCycle"]},{"pos":7432,"end":7439,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["factory"]},{"pos":7498,"end":7506,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["captured"]},{"pos":7632,"end":7646,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["nestedCaptured"]},{"pos":7892,"end":7903,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["constrained"]},{"pos":8058,"end":8074,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["optionalCaptured"]},{"pos":8202,"end":8219,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["annotatedCaptured"]},{"pos":8355,"end":8369,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["recursiveTuple"]},{"pos":8468,"end":8484,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["inferredCaptured"]},{"pos":8623,"end":8637,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["mappedCaptured"]},{"pos":8754,"end":8766,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["freshGeneric"]},{"pos":8861,"end":8875,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["mutualCaptured"]},{"pos":9134,"end":9138,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["make"]},{"pos":9278,"end":9292,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["covariantClass"]},{"pos":9413,"end":9431,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["contravariantClass"]},{"pos":9600,"end":9608,"code":5088,"category":1,"messageKey":"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","messageArgs":["captured"]}]]],"emitSignatures":[2]} +{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2026.full.d.ts","../index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"8be79633abc8e3e9d5c07f355c360ccf-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);\ntype Show = { [K in keyof T]: T[K] } & unknown;\ntype Resolve = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? Resolve : M[K][P];\n}>;\ndeclare const build: () => { [K in keyof M]: Resolve };\nexport const mappedCycle = build<{ Node: { value: number; next: \"ref\" } }>();\nexport const mappedCycleCopy = mappedCycle;\nexport const nestedCycle = { wrapped: build<{ Node: { value: string; next: \"ref\" } }>() };\nexport const cycleKey = Symbol();\nexport const keyedCycles = build<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\nexport const sharedCycles = { first: mappedCycle, second: mappedCycle };\ntype ResolveMutual = Show<{\n [P in keyof M[K]]: M[K][P] extends { ref: infer R extends keyof M } ? ResolveMutual : M[K][P];\n}>;\ndeclare const buildMutual: () => { [K in keyof M]: ResolveMutual };\nexport const mutualCycle = buildMutual<{\n First: { value: number; next: { ref: \"Second\" } };\n Second: { value: string; next: { ref: \"First\" } };\n}>();\ntype ResolveShadowed = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? (shadowedCycle: T) => ResolveShadowed : M[K][P];\n}>;\ndeclare const buildShadowed: () => { [K in keyof M]: ResolveShadowed };\nexport const shadowedCycle = buildShadowed<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptional: () => { [K in keyof M]?: Resolve };\nexport const optionalCycle = buildOptional<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildNullable: () => { [K in keyof M]: Resolve | null };\nexport const nullableCycle = buildNullable<{ Node: { value: string; next: \"ref\" } }>();\ndeclare const wrap: (value: T) => { required: T; optional?: T | null };\nexport const mixedCycles = wrap(optionalCycle);\nexport const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle };\nexport const nullableKeys = buildNullable<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\ndeclare const buildNullableRoot: () => Resolve | null;\nexport const nullableRoot = buildNullableRoot<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalRoot: () => Resolve | undefined;\nexport const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: \"ref\" } }>();\ntype ResolveNullable = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullable | null : M[K][P];\n}>;\ndeclare const buildNullableLinks: () => { [K in keyof M]: ResolveNullable | null };\nexport const nullableLinks = buildNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalNullableLinks: () => { [K in keyof M]?: ResolveNullable | null };\nexport const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveOptional = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveOptional | undefined : M[K][P];\n}>;\ndeclare const buildNullableOptionalLinks: () => { [K in keyof M]: ResolveOptional | null };\nexport const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveNullish = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullish | null | undefined : M[K][P];\n}>;\ndeclare const buildNullishLinks: () => { [K in keyof M]?: ResolveNullish | null };\nexport const nullishLinks = buildNullishLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildMixed: () => { [K in keyof M]?: Resolve | false | null };\nexport const mixedUnionCycle = buildMixed<{ Node: { value: number; next: \"ref\" } }>();\nexport const _recursive = 1;\nexport const factory = () => function self() { return self; };\nexport function captured(value: T) {\n const node = { value, next: () => node, consume: (other: T) => node };\n return node;\n}\nexport function nestedCaptured(outer: T) {\n return (inner: U) => {\n const node = {\n outer, inner, next: () => node,\n shadow: (value: T) => ({ outer, inner, value, next: node }),\n };\n return node;\n };\n}\nexport function constrained(key: K) {\n const node = { value: null! as T[K], next: () => node };\n return node;\n}\nexport function optionalCaptured(value: T) {\n type Node = { value: T; next: Node };\n return null! as { node?: Node | false | null };\n}\nexport function annotatedCaptured(value: T) {\n const node: { value: typeof value; next: typeof node } = { value, next: null! };\n return node;\n}\nexport function recursiveTuple(value: T) {\n type Tuple = readonly [T, Tuple];\n return null! as Tuple;\n}\nexport function inferredCaptured() {\n type Node = { value: V; next: Node };\n return null! as (T extends () => infer U ? Node : never);\n}\nexport function mappedCaptured() {\n type Node = { [K in keyof T]: { value: T[K]; next: Node } };\n return null! as Node;\n}\nexport function freshGeneric(unused: T) {\n const recur = (value: U) => recur;\n return recur;\n}\nexport function mutualCaptured(left: T, right: U) {\n type Left = { left: T; next: Right };\n type Right = { right: U; self: Right; next: Left };\n return { left: null! as Left, right: null! as Right };\n}\nexport class CapturedClass {\n constructor(public value: T) {}\n make(inner: U) {\n const node = { outer: this.value, inner, next: () => node };\n return node;\n }\n}\nexport function covariantClass() {\n return class Node {\n value!: T;\n next(): Node { return this; }\n };\n}\nexport function contravariantClass() {\n return class Node {\n consume!: (value: T) => void;\n next(): Node { return this; }\n };\n}\nexport namespace Nested {\n export function captured(value: T) {\n const node = { value, next: () => node };\n return node;\n }\n}\ntype NonNullable = \"shadowed\";\n// comment-only edit\n","signature":"850dc9bfa8257128f209cdd8c49501cd-type _recursive_1 = {\n value: number;\n next: _recursive_1;\n};\ntype _recursive_2 = {\n value: string;\n next: _recursive_2;\n};\ntype _recursive_3 = {\n value: number;\n next: _recursive_3;\n};\ntype _recursive_4 = {\n value: number;\n next: _recursive_4;\n};\ntype _recursive_5 = {\n value: string;\n next: _recursive_5;\n};\ntype _recursive_6 = {\n value: boolean;\n next: _recursive_6;\n};\ntype _recursive_7 = {\n value: number;\n next: _recursive_7;\n};\ntype _recursive_8 = {\n value: number;\n next: _recursive_8;\n};\ntype _recursive_9 = {\n value: string;\n next: _recursive_9;\n};\ntype _recursive_10 = {\n value: number;\n next: _recursive_10 | null;\n};\ntype _recursive_11 = {\n value: number;\n next: _recursive_11 | undefined;\n};\ntype _recursive_12 = {\n value: number;\n next: _recursive_12 | null | undefined;\n};\ntype _recursive_13 = {\n value: number;\n next: _recursive_13;\n};\ntype _recursive_14 = () => _recursive_14;\ntype _recursive_15 = {\n value: T;\n next: () => _recursive_15;\n consume: (other: T) => _recursive_15;\n};\ntype _recursive_16 = {\n outer: T;\n inner: U;\n next: () => _recursive_16;\n shadow: (value: T_1) => {\n outer: T;\n inner: U;\n value: T_1;\n next: _recursive_16;\n };\n};\ntype _recursive_17 = {\n value: T[K];\n next: () => _recursive_17;\n};\ntype _recursive_18 = {\n value: T;\n next: _recursive_18;\n};\ntype _recursive_19 = {\n value: T;\n next: _recursive_19;\n};\ntype _recursive_20 = readonly [T, _recursive_20];\ntype _recursive_21 = {\n value: U;\n next: _recursive_21;\n};\ntype _recursive_22 = { [K in keyof T]: {\n value: T[K];\n next: _recursive_22;\n}; };\ntype _recursive_23 = (value: U) => _recursive_23;\ntype _recursive_24 = {\n right: U;\n self: _recursive_24;\n next: _recursive_25;\n};\ntype _recursive_25 = {\n left: T;\n next: _recursive_24;\n};\ntype _recursive_26 = {\n outer: T;\n inner: U;\n next: () => _recursive_26;\n};\ntype _recursive_27 = {\n value: T;\n next(): _recursive_27;\n};\ntype _recursive_28 = {\n consume: (value: T) => void;\n next(): _recursive_28;\n};\nexport declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: () => {\n call: typeof objectReturn;\n};\nexport declare const tupleReturn: () => readonly [typeof tupleReturn];\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: {\n value: number;\n next: () => typeof object;\n};\nexport declare const method: {\n value: number;\n next(): typeof method;\n};\nexport declare const accessor: {\n value: number;\n readonly next: typeof accessor;\n};\nexport declare const tuple: readonly [() => typeof tuple];\nexport declare const array: (() => typeof array)[];\nexport declare const nested: {\n inner: {\n next(): {\n next(): (typeof nested)[\"inner\"];\n };\n };\n};\nexport declare const memberTuple: readonly [() => () => (typeof memberTuple)[0]];\nexport declare const memberArray: (() => (typeof memberArray)[0])[];\nexport declare const quoted: {\n \"a-b\": () => () => (typeof quoted)[\"a-b\"];\n};\nexport declare const numeric: {\n 0: () => () => (typeof numeric)[0];\n};\nexport declare const key: unique symbol;\nexport declare const computed: {\n [key]: () => (typeof computed)[typeof key];\n};\nexport declare const union: {\n next: () => typeof union;\n} | undefined;\nexport declare const specialized: {\n value: string;\n next: () => typeof specialized;\n};\nexport declare const indexed: {\n [key: string]: typeof indexed;\n};\nexport declare const mapped: {\n next: typeof mapped;\n};\nexport declare const viaAnnotation: {\n value: string;\n next: () => typeof viaAnnotation;\n};\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: typeof hiddenAlias;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"first\"];\n };\n second: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"second\"];\n };\n};\nexport declare const parenthesized: () => typeof parenthesized;\nexport declare const asserted: () => typeof asserted;\nexport declare class Methods {\n static recur(): (typeof Methods)[\"recur\"];\n static \"a-b\"(): (typeof Methods)[\"a-b\"];\n static [key](): (typeof Methods)[typeof key];\n recur(): Methods[\"recur\"];\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n};\nexport declare const nestedNumber: {\n nested(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n constrained(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n copied(inner: U): {\n outer: number;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n};\nexport declare const mappedCycle: {\n Node: {\n value: number;\n next: (typeof mappedCycle)[\"Node\"];\n };\n};\nexport declare const mappedCycleCopy: {\n Node: {\n value: number;\n next: (typeof mappedCycleCopy)[\"Node\"];\n };\n};\nexport declare const nestedCycle: {\n wrapped: {\n Node: {\n value: string;\n next: (typeof nestedCycle)[\"wrapped\"][\"Node\"];\n };\n };\n};\nexport declare const cycleKey: unique symbol;\nexport declare const keyedCycles: {\n \"a-b\": {\n value: string;\n next: (typeof keyedCycles)[\"a-b\"];\n };\n 0: {\n value: boolean;\n next: (typeof keyedCycles)[0];\n };\n [cycleKey]: {\n value: number;\n next: (typeof keyedCycles)[typeof cycleKey];\n };\n};\nexport declare const sharedCycles: {\n first: {\n Node: {\n value: number;\n next: (typeof sharedCycles)[\"first\"][\"Node\"];\n };\n };\n second: {\n Node: {\n value: number;\n next: (typeof sharedCycles)[\"second\"][\"Node\"];\n };\n };\n};\nexport declare const mutualCycle: {\n First: {\n value: number;\n next: {\n value: string;\n next: (typeof mutualCycle)[\"First\"];\n };\n };\n Second: {\n value: string;\n next: {\n value: number;\n next: (typeof mutualCycle)[\"Second\"];\n };\n };\n};\nexport declare const shadowedCycle: {\n Node: {\n value: number;\n next: (shadowedCycle: T) => typeof import(\".\").shadowedCycle[\"Node\"];\n };\n};\nexport declare const optionalCycle: {\n Node?: _recursive_1;\n};\nexport declare const nullableCycle: {\n Node: _recursive_2 | null;\n};\nexport declare const mixedCycles: {\n required: {\n Node?: _recursive_3;\n };\n optional?: {\n Node?: _recursive_3;\n } | null;\n};\nexport declare const sharedOptionalCycles: {\n first: {\n Node?: _recursive_4;\n };\n second: {\n Node?: _recursive_4;\n };\n};\nexport declare const nullableKeys: {\n \"a-b\": _recursive_5 | null;\n 0: _recursive_6 | null;\n [cycleKey]: _recursive_7 | null;\n};\nexport declare const nullableRoot: _recursive_8 | null;\nexport declare const optionalRoot: _recursive_9 | undefined;\nexport declare const nullableLinks: {\n Node: {\n value: number;\n next: (typeof nullableLinks)[\"Node\"];\n } | null;\n};\nexport declare const optionalNullableLinks: {\n Node?: _recursive_10 | null;\n};\nexport declare const nullableOptionalLinks: {\n Node: _recursive_11 | null;\n};\nexport declare const nullishLinks: {\n Node?: _recursive_12 | null;\n};\nexport declare const mixedUnionCycle: {\n Node?: false | _recursive_13 | null;\n};\nexport declare const _recursive = 1;\nexport declare const factory: () => () => _recursive_14;\nexport declare function captured(value: T): _recursive_15;\nexport declare function nestedCaptured(outer: T): (inner: U) => _recursive_16;\nexport declare function constrained(key: K): _recursive_17;\nexport declare function optionalCaptured(value: T): {\n node?: _recursive_18 | false | null;\n};\nexport declare function annotatedCaptured(value: T): _recursive_19;\nexport declare function recursiveTuple(value: T): _recursive_20;\nexport declare function inferredCaptured(): (T extends () => infer U ? _recursive_21 : never);\nexport declare function mappedCaptured(): _recursive_22;\nexport declare function freshGeneric(unused: T): _recursive_23;\nexport declare function mutualCaptured(left: T, right: U): {\n left: _recursive_25;\n right: _recursive_24;\n};\nexport declare class CapturedClass {\n value: T;\n constructor(value: T);\n make(inner: U): _recursive_26;\n}\nexport declare function covariantClass(): {\n new (): _recursive_27;\n};\nexport declare function contravariantClass(): {\n new (): _recursive_28;\n};\nexport declare namespace Nested {\n type _recursive_29 = {\n value: T;\n next: () => _recursive_29;\n };\n export function captured(value: T): _recursive_29;\n export {};\n}\nexport {};\n","impliedNodeFormat":1}],"options":{"composite":true,"exactOptionalPropertyTypes":true,"outDir":"./","strict":true},"latestChangedDtsFile":"./index.d.ts"} //// [/home/src/workspaces/project/producer/dist/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -2221,11 +2172,11 @@ export var Nested; { "fileName": "../index.ts", "version": "8be79633abc8e3e9d5c07f355c360ccf-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);\ntype Show = { [K in keyof T]: T[K] } & unknown;\ntype Resolve = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? Resolve : M[K][P];\n}>;\ndeclare const build: () => { [K in keyof M]: Resolve };\nexport const mappedCycle = build<{ Node: { value: number; next: \"ref\" } }>();\nexport const mappedCycleCopy = mappedCycle;\nexport const nestedCycle = { wrapped: build<{ Node: { value: string; next: \"ref\" } }>() };\nexport const cycleKey = Symbol();\nexport const keyedCycles = build<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\nexport const sharedCycles = { first: mappedCycle, second: mappedCycle };\ntype ResolveMutual = Show<{\n [P in keyof M[K]]: M[K][P] extends { ref: infer R extends keyof M } ? ResolveMutual : M[K][P];\n}>;\ndeclare const buildMutual: () => { [K in keyof M]: ResolveMutual };\nexport const mutualCycle = buildMutual<{\n First: { value: number; next: { ref: \"Second\" } };\n Second: { value: string; next: { ref: \"First\" } };\n}>();\ntype ResolveShadowed = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? (shadowedCycle: T) => ResolveShadowed : M[K][P];\n}>;\ndeclare const buildShadowed: () => { [K in keyof M]: ResolveShadowed };\nexport const shadowedCycle = buildShadowed<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptional: () => { [K in keyof M]?: Resolve };\nexport const optionalCycle = buildOptional<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildNullable: () => { [K in keyof M]: Resolve | null };\nexport const nullableCycle = buildNullable<{ Node: { value: string; next: \"ref\" } }>();\ndeclare const wrap: (value: T) => { required: T; optional?: T | null };\nexport const mixedCycles = wrap(optionalCycle);\nexport const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle };\nexport const nullableKeys = buildNullable<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\ndeclare const buildNullableRoot: () => Resolve | null;\nexport const nullableRoot = buildNullableRoot<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalRoot: () => Resolve | undefined;\nexport const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: \"ref\" } }>();\ntype ResolveNullable = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullable | null : M[K][P];\n}>;\ndeclare const buildNullableLinks: () => { [K in keyof M]: ResolveNullable | null };\nexport const nullableLinks = buildNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalNullableLinks: () => { [K in keyof M]?: ResolveNullable | null };\nexport const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveOptional = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveOptional | undefined : M[K][P];\n}>;\ndeclare const buildNullableOptionalLinks: () => { [K in keyof M]: ResolveOptional | null };\nexport const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveNullish = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullish | null | undefined : M[K][P];\n}>;\ndeclare const buildNullishLinks: () => { [K in keyof M]?: ResolveNullish | null };\nexport const nullishLinks = buildNullishLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildMixed: () => { [K in keyof M]?: Resolve | false | null };\nexport const mixedUnionCycle = buildMixed<{ Node: { value: number; next: \"ref\" } }>();\nexport const _recursive = 1;\nexport const factory = () => function self() { return self; };\nexport function captured(value: T) {\n const node = { value, next: () => node, consume: (other: T) => node };\n return node;\n}\nexport function nestedCaptured(outer: T) {\n return (inner: U) => {\n const node = {\n outer, inner, next: () => node,\n shadow: (value: T) => ({ outer, inner, value, next: node }),\n };\n return node;\n };\n}\nexport function constrained(key: K) {\n const node = { value: null! as T[K], next: () => node };\n return node;\n}\nexport function optionalCaptured(value: T) {\n type Node = { value: T; next: Node };\n return null! as { node?: Node | false | null };\n}\nexport function annotatedCaptured(value: T) {\n const node: { value: typeof value; next: typeof node } = { value, next: null! };\n return node;\n}\nexport function recursiveTuple(value: T) {\n type Tuple = readonly [T, Tuple];\n return null! as Tuple;\n}\nexport function inferredCaptured() {\n type Node = { value: V; next: Node };\n return null! as (T extends () => infer U ? Node : never);\n}\nexport function mappedCaptured() {\n type Node = { [K in keyof T]: { value: T[K]; next: Node } };\n return null! as Node;\n}\nexport function freshGeneric(unused: T) {\n const recur = (value: U) => recur;\n return recur;\n}\nexport function mutualCaptured(left: T, right: U) {\n type Left = { left: T; next: Right };\n type Right = { right: U; self: Right; next: Left };\n return { left: null! as Left, right: null! as Right };\n}\nexport class CapturedClass {\n constructor(public value: T) {}\n make(inner: U) {\n const node = { outer: this.value, inner, next: () => node };\n return node;\n }\n}\nexport function covariantClass() {\n return class Node {\n value!: T;\n next(): Node { return this; }\n };\n}\nexport function contravariantClass() {\n return class Node {\n consume!: (value: T) => void;\n next(): Node { return this; }\n };\n}\nexport namespace Nested {\n export function captured(value: T) {\n const node = { value, next: () => node };\n return node;\n }\n}\ntype NonNullable = \"shadowed\";\n// comment-only edit\n", - "signature": "67d95aa5b29b3462564c69678c5a8fa4-export declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: () => {\n call: typeof objectReturn;\n};\nexport declare const tupleReturn: () => readonly [typeof tupleReturn];\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: {\n value: number;\n next: () => typeof object;\n};\nexport declare const method: {\n value: number;\n next(): typeof method;\n};\nexport declare const accessor: {\n value: number;\n readonly next: typeof accessor;\n};\nexport declare const tuple: readonly [() => typeof tuple];\nexport declare const array: (() => typeof array)[];\nexport declare const nested: {\n inner: {\n next(): {\n next(): (typeof nested)[\"inner\"];\n };\n };\n};\nexport declare const memberTuple: readonly [() => (typeof memberTuple)[0]];\nexport declare const memberArray: (() => (typeof memberArray)[0])[];\nexport declare const quoted: {\n \"a-b\": () => (typeof quoted)[\"a-b\"];\n};\nexport declare const numeric: {\n 0: () => (typeof numeric)[0];\n};\nexport declare const key: unique symbol;\nexport declare const computed: {\n [key]: () => (typeof computed)[typeof key];\n};\nexport declare const union: {\n next: () => typeof union;\n} | undefined;\nexport declare const specialized: {\n value: string;\n next: () => typeof specialized;\n};\nexport declare const indexed: {\n [key: string]: typeof indexed;\n};\nexport declare const mapped: {\n next: typeof mapped;\n};\nexport declare const viaAnnotation: {\n value: string;\n next: () => typeof viaAnnotation;\n};\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: typeof hiddenAlias;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"first\"];\n };\n second: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"second\"];\n };\n};\nexport declare const parenthesized: () => typeof parenthesized;\nexport declare const asserted: () => typeof asserted;\nexport declare class Methods {\n static recur(): (typeof Methods)[\"recur\"];\n static \"a-b\"(): (typeof Methods)[\"a-b\"];\n static [key](): (typeof Methods)[typeof key];\n recur(): Methods[\"recur\"];\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n};\nexport declare const nestedNumber: {\n nested(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n constrained(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n copied(inner: U): {\n outer: number;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n};\nexport declare const mappedCycle: any;\nexport declare const mappedCycleCopy: any;\nexport declare const nestedCycle: any;\nexport declare const cycleKey: unique symbol;\nexport declare const keyedCycles: any;\nexport declare const sharedCycles: any;\nexport declare const mutualCycle: any;\nexport declare const shadowedCycle: any;\nexport declare const optionalCycle: any;\nexport declare const nullableCycle: any;\nexport declare const mixedCycles: any;\nexport declare const sharedOptionalCycles: any;\nexport declare const nullableKeys: any;\nexport declare const nullableRoot: any;\nexport declare const optionalRoot: any;\nexport declare const nullableLinks: any;\nexport declare const optionalNullableLinks: any;\nexport declare const nullableOptionalLinks: any;\nexport declare const nullishLinks: any;\nexport declare const mixedUnionCycle: any;\nexport declare const _recursive = 1;\nexport declare const factory: any;\nexport declare function captured(value: T): any;\nexport declare function nestedCaptured(outer: T): any;\nexport declare function constrained(key: K): any;\nexport declare function optionalCaptured(value: T): any;\nexport declare function annotatedCaptured(value: T): any;\nexport declare function recursiveTuple(value: T): any;\nexport declare function inferredCaptured(): any;\nexport declare function mappedCaptured(): any;\nexport declare function freshGeneric(unused: T): any;\nexport declare function mutualCaptured(left: T, right: U): any;\nexport declare class CapturedClass {\n value: T;\n constructor(value: T);\n make(inner: U): any;\n}\nexport declare function covariantClass(): any;\nexport declare function contravariantClass(): any;\nexport declare namespace Nested {\n function captured(value: T): any;\n}\n\n(3735,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmappedCycle\n\n(3813,15): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmappedCycleCopy\n\n(3857,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnestedCycle\n\n(3982,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nkeyedCycles\n\n(4154,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nsharedCycles\n\n(4463,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmutualCycle\n\n(4862,13): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nshadowedCycle\n\n(5024,13): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\noptionalCycle\n\n(5192,13): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnullableCycle\n\n(5355,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmixedCycles\n\n(5403,20): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nsharedOptionalCycles\n\n(5488,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnullableKeys\n\n(5739,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnullableRoot\n\n(5905,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\noptionalRoot\n\n(6232,13): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnullableLinks\n\n(6427,21): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\noptionalNullableLinks\n\n(6785,21): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnullableOptionalLinks\n\n(7139,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnullishLinks\n\n(7316,15): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmixedUnionCycle\n\n(7432,7): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nfactory\n\n(7498,8): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ncaptured\n\n(7632,14): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnestedCaptured\n\n(7892,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nconstrained\n\n(8058,16): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\noptionalCaptured\n\n(8202,17): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nannotatedCaptured\n\n(8355,14): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nrecursiveTuple\n\n(8468,16): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ninferredCaptured\n\n(8623,14): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmappedCaptured\n\n(8754,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nfreshGeneric\n\n(8861,14): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmutualCaptured\n\n(9134,4): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmake\n\n(9278,14): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ncovariantClass\n\n(9413,18): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ncontravariantClass\n\n(9600,8): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ncaptured\n", + "signature": "850dc9bfa8257128f209cdd8c49501cd-type _recursive_1 = {\n value: number;\n next: _recursive_1;\n};\ntype _recursive_2 = {\n value: string;\n next: _recursive_2;\n};\ntype _recursive_3 = {\n value: number;\n next: _recursive_3;\n};\ntype _recursive_4 = {\n value: number;\n next: _recursive_4;\n};\ntype _recursive_5 = {\n value: string;\n next: _recursive_5;\n};\ntype _recursive_6 = {\n value: boolean;\n next: _recursive_6;\n};\ntype _recursive_7 = {\n value: number;\n next: _recursive_7;\n};\ntype _recursive_8 = {\n value: number;\n next: _recursive_8;\n};\ntype _recursive_9 = {\n value: string;\n next: _recursive_9;\n};\ntype _recursive_10 = {\n value: number;\n next: _recursive_10 | null;\n};\ntype _recursive_11 = {\n value: number;\n next: _recursive_11 | undefined;\n};\ntype _recursive_12 = {\n value: number;\n next: _recursive_12 | null | undefined;\n};\ntype _recursive_13 = {\n value: number;\n next: _recursive_13;\n};\ntype _recursive_14 = () => _recursive_14;\ntype _recursive_15 = {\n value: T;\n next: () => _recursive_15;\n consume: (other: T) => _recursive_15;\n};\ntype _recursive_16 = {\n outer: T;\n inner: U;\n next: () => _recursive_16;\n shadow: (value: T_1) => {\n outer: T;\n inner: U;\n value: T_1;\n next: _recursive_16;\n };\n};\ntype _recursive_17 = {\n value: T[K];\n next: () => _recursive_17;\n};\ntype _recursive_18 = {\n value: T;\n next: _recursive_18;\n};\ntype _recursive_19 = {\n value: T;\n next: _recursive_19;\n};\ntype _recursive_20 = readonly [T, _recursive_20];\ntype _recursive_21 = {\n value: U;\n next: _recursive_21;\n};\ntype _recursive_22 = { [K in keyof T]: {\n value: T[K];\n next: _recursive_22;\n}; };\ntype _recursive_23 = (value: U) => _recursive_23;\ntype _recursive_24 = {\n right: U;\n self: _recursive_24;\n next: _recursive_25;\n};\ntype _recursive_25 = {\n left: T;\n next: _recursive_24;\n};\ntype _recursive_26 = {\n outer: T;\n inner: U;\n next: () => _recursive_26;\n};\ntype _recursive_27 = {\n value: T;\n next(): _recursive_27;\n};\ntype _recursive_28 = {\n consume: (value: T) => void;\n next(): _recursive_28;\n};\nexport declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: () => {\n call: typeof objectReturn;\n};\nexport declare const tupleReturn: () => readonly [typeof tupleReturn];\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: {\n value: number;\n next: () => typeof object;\n};\nexport declare const method: {\n value: number;\n next(): typeof method;\n};\nexport declare const accessor: {\n value: number;\n readonly next: typeof accessor;\n};\nexport declare const tuple: readonly [() => typeof tuple];\nexport declare const array: (() => typeof array)[];\nexport declare const nested: {\n inner: {\n next(): {\n next(): (typeof nested)[\"inner\"];\n };\n };\n};\nexport declare const memberTuple: readonly [() => () => (typeof memberTuple)[0]];\nexport declare const memberArray: (() => (typeof memberArray)[0])[];\nexport declare const quoted: {\n \"a-b\": () => () => (typeof quoted)[\"a-b\"];\n};\nexport declare const numeric: {\n 0: () => () => (typeof numeric)[0];\n};\nexport declare const key: unique symbol;\nexport declare const computed: {\n [key]: () => (typeof computed)[typeof key];\n};\nexport declare const union: {\n next: () => typeof union;\n} | undefined;\nexport declare const specialized: {\n value: string;\n next: () => typeof specialized;\n};\nexport declare const indexed: {\n [key: string]: typeof indexed;\n};\nexport declare const mapped: {\n next: typeof mapped;\n};\nexport declare const viaAnnotation: {\n value: string;\n next: () => typeof viaAnnotation;\n};\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: typeof hiddenAlias;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"first\"];\n };\n second: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"second\"];\n };\n};\nexport declare const parenthesized: () => typeof parenthesized;\nexport declare const asserted: () => typeof asserted;\nexport declare class Methods {\n static recur(): (typeof Methods)[\"recur\"];\n static \"a-b\"(): (typeof Methods)[\"a-b\"];\n static [key](): (typeof Methods)[typeof key];\n recur(): Methods[\"recur\"];\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n};\nexport declare const nestedNumber: {\n nested(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n constrained(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n copied(inner: U): {\n outer: number;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n};\nexport declare const mappedCycle: {\n Node: {\n value: number;\n next: (typeof mappedCycle)[\"Node\"];\n };\n};\nexport declare const mappedCycleCopy: {\n Node: {\n value: number;\n next: (typeof mappedCycleCopy)[\"Node\"];\n };\n};\nexport declare const nestedCycle: {\n wrapped: {\n Node: {\n value: string;\n next: (typeof nestedCycle)[\"wrapped\"][\"Node\"];\n };\n };\n};\nexport declare const cycleKey: unique symbol;\nexport declare const keyedCycles: {\n \"a-b\": {\n value: string;\n next: (typeof keyedCycles)[\"a-b\"];\n };\n 0: {\n value: boolean;\n next: (typeof keyedCycles)[0];\n };\n [cycleKey]: {\n value: number;\n next: (typeof keyedCycles)[typeof cycleKey];\n };\n};\nexport declare const sharedCycles: {\n first: {\n Node: {\n value: number;\n next: (typeof sharedCycles)[\"first\"][\"Node\"];\n };\n };\n second: {\n Node: {\n value: number;\n next: (typeof sharedCycles)[\"second\"][\"Node\"];\n };\n };\n};\nexport declare const mutualCycle: {\n First: {\n value: number;\n next: {\n value: string;\n next: (typeof mutualCycle)[\"First\"];\n };\n };\n Second: {\n value: string;\n next: {\n value: number;\n next: (typeof mutualCycle)[\"Second\"];\n };\n };\n};\nexport declare const shadowedCycle: {\n Node: {\n value: number;\n next: (shadowedCycle: T) => typeof import(\".\").shadowedCycle[\"Node\"];\n };\n};\nexport declare const optionalCycle: {\n Node?: _recursive_1;\n};\nexport declare const nullableCycle: {\n Node: _recursive_2 | null;\n};\nexport declare const mixedCycles: {\n required: {\n Node?: _recursive_3;\n };\n optional?: {\n Node?: _recursive_3;\n } | null;\n};\nexport declare const sharedOptionalCycles: {\n first: {\n Node?: _recursive_4;\n };\n second: {\n Node?: _recursive_4;\n };\n};\nexport declare const nullableKeys: {\n \"a-b\": _recursive_5 | null;\n 0: _recursive_6 | null;\n [cycleKey]: _recursive_7 | null;\n};\nexport declare const nullableRoot: _recursive_8 | null;\nexport declare const optionalRoot: _recursive_9 | undefined;\nexport declare const nullableLinks: {\n Node: {\n value: number;\n next: (typeof nullableLinks)[\"Node\"];\n } | null;\n};\nexport declare const optionalNullableLinks: {\n Node?: _recursive_10 | null;\n};\nexport declare const nullableOptionalLinks: {\n Node: _recursive_11 | null;\n};\nexport declare const nullishLinks: {\n Node?: _recursive_12 | null;\n};\nexport declare const mixedUnionCycle: {\n Node?: false | _recursive_13 | null;\n};\nexport declare const _recursive = 1;\nexport declare const factory: () => () => _recursive_14;\nexport declare function captured(value: T): _recursive_15;\nexport declare function nestedCaptured(outer: T): (inner: U) => _recursive_16;\nexport declare function constrained(key: K): _recursive_17;\nexport declare function optionalCaptured(value: T): {\n node?: _recursive_18 | false | null;\n};\nexport declare function annotatedCaptured(value: T): _recursive_19;\nexport declare function recursiveTuple(value: T): _recursive_20;\nexport declare function inferredCaptured(): (T extends () => infer U ? _recursive_21 : never);\nexport declare function mappedCaptured(): _recursive_22;\nexport declare function freshGeneric(unused: T): _recursive_23;\nexport declare function mutualCaptured(left: T, right: U): {\n left: _recursive_25;\n right: _recursive_24;\n};\nexport declare class CapturedClass {\n value: T;\n constructor(value: T);\n make(inner: U): _recursive_26;\n}\nexport declare function covariantClass(): {\n new (): _recursive_27;\n};\nexport declare function contravariantClass(): {\n new (): _recursive_28;\n};\nexport declare namespace Nested {\n type _recursive_29 = {\n value: T;\n next: () => _recursive_29;\n };\n export function captured(value: T): _recursive_29;\n export {};\n}\nexport {};\n", "impliedNodeFormat": "CommonJS", "original": { "version": "8be79633abc8e3e9d5c07f355c360ccf-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);\ntype Show = { [K in keyof T]: T[K] } & unknown;\ntype Resolve = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? Resolve : M[K][P];\n}>;\ndeclare const build: () => { [K in keyof M]: Resolve };\nexport const mappedCycle = build<{ Node: { value: number; next: \"ref\" } }>();\nexport const mappedCycleCopy = mappedCycle;\nexport const nestedCycle = { wrapped: build<{ Node: { value: string; next: \"ref\" } }>() };\nexport const cycleKey = Symbol();\nexport const keyedCycles = build<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\nexport const sharedCycles = { first: mappedCycle, second: mappedCycle };\ntype ResolveMutual = Show<{\n [P in keyof M[K]]: M[K][P] extends { ref: infer R extends keyof M } ? ResolveMutual : M[K][P];\n}>;\ndeclare const buildMutual: () => { [K in keyof M]: ResolveMutual };\nexport const mutualCycle = buildMutual<{\n First: { value: number; next: { ref: \"Second\" } };\n Second: { value: string; next: { ref: \"First\" } };\n}>();\ntype ResolveShadowed = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? (shadowedCycle: T) => ResolveShadowed : M[K][P];\n}>;\ndeclare const buildShadowed: () => { [K in keyof M]: ResolveShadowed };\nexport const shadowedCycle = buildShadowed<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptional: () => { [K in keyof M]?: Resolve };\nexport const optionalCycle = buildOptional<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildNullable: () => { [K in keyof M]: Resolve | null };\nexport const nullableCycle = buildNullable<{ Node: { value: string; next: \"ref\" } }>();\ndeclare const wrap: (value: T) => { required: T; optional?: T | null };\nexport const mixedCycles = wrap(optionalCycle);\nexport const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle };\nexport const nullableKeys = buildNullable<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\ndeclare const buildNullableRoot: () => Resolve | null;\nexport const nullableRoot = buildNullableRoot<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalRoot: () => Resolve | undefined;\nexport const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: \"ref\" } }>();\ntype ResolveNullable = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullable | null : M[K][P];\n}>;\ndeclare const buildNullableLinks: () => { [K in keyof M]: ResolveNullable | null };\nexport const nullableLinks = buildNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalNullableLinks: () => { [K in keyof M]?: ResolveNullable | null };\nexport const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveOptional = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveOptional | undefined : M[K][P];\n}>;\ndeclare const buildNullableOptionalLinks: () => { [K in keyof M]: ResolveOptional | null };\nexport const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveNullish = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullish | null | undefined : M[K][P];\n}>;\ndeclare const buildNullishLinks: () => { [K in keyof M]?: ResolveNullish | null };\nexport const nullishLinks = buildNullishLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildMixed: () => { [K in keyof M]?: Resolve | false | null };\nexport const mixedUnionCycle = buildMixed<{ Node: { value: number; next: \"ref\" } }>();\nexport const _recursive = 1;\nexport const factory = () => function self() { return self; };\nexport function captured(value: T) {\n const node = { value, next: () => node, consume: (other: T) => node };\n return node;\n}\nexport function nestedCaptured(outer: T) {\n return (inner: U) => {\n const node = {\n outer, inner, next: () => node,\n shadow: (value: T) => ({ outer, inner, value, next: node }),\n };\n return node;\n };\n}\nexport function constrained(key: K) {\n const node = { value: null! as T[K], next: () => node };\n return node;\n}\nexport function optionalCaptured(value: T) {\n type Node = { value: T; next: Node };\n return null! as { node?: Node | false | null };\n}\nexport function annotatedCaptured(value: T) {\n const node: { value: typeof value; next: typeof node } = { value, next: null! };\n return node;\n}\nexport function recursiveTuple(value: T) {\n type Tuple = readonly [T, Tuple];\n return null! as Tuple;\n}\nexport function inferredCaptured() {\n type Node = { value: V; next: Node };\n return null! as (T extends () => infer U ? Node : never);\n}\nexport function mappedCaptured() {\n type Node = { [K in keyof T]: { value: T[K]; next: Node } };\n return null! as Node;\n}\nexport function freshGeneric(unused: T) {\n const recur = (value: U) => recur;\n return recur;\n}\nexport function mutualCaptured(left: T, right: U) {\n type Left = { left: T; next: Right };\n type Right = { right: U; self: Right; next: Left };\n return { left: null! as Left, right: null! as Right };\n}\nexport class CapturedClass {\n constructor(public value: T) {}\n make(inner: U) {\n const node = { outer: this.value, inner, next: () => node };\n return node;\n }\n}\nexport function covariantClass() {\n return class Node {\n value!: T;\n next(): Node { return this; }\n };\n}\nexport function contravariantClass() {\n return class Node {\n consume!: (value: T) => void;\n next(): Node { return this; }\n };\n}\nexport namespace Nested {\n export function captured(value: T) {\n const node = { value, next: () => node };\n return node;\n }\n}\ntype NonNullable = \"shadowed\";\n// comment-only edit\n", - "signature": "67d95aa5b29b3462564c69678c5a8fa4-export declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: () => {\n call: typeof objectReturn;\n};\nexport declare const tupleReturn: () => readonly [typeof tupleReturn];\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: {\n value: number;\n next: () => typeof object;\n};\nexport declare const method: {\n value: number;\n next(): typeof method;\n};\nexport declare const accessor: {\n value: number;\n readonly next: typeof accessor;\n};\nexport declare const tuple: readonly [() => typeof tuple];\nexport declare const array: (() => typeof array)[];\nexport declare const nested: {\n inner: {\n next(): {\n next(): (typeof nested)[\"inner\"];\n };\n };\n};\nexport declare const memberTuple: readonly [() => (typeof memberTuple)[0]];\nexport declare const memberArray: (() => (typeof memberArray)[0])[];\nexport declare const quoted: {\n \"a-b\": () => (typeof quoted)[\"a-b\"];\n};\nexport declare const numeric: {\n 0: () => (typeof numeric)[0];\n};\nexport declare const key: unique symbol;\nexport declare const computed: {\n [key]: () => (typeof computed)[typeof key];\n};\nexport declare const union: {\n next: () => typeof union;\n} | undefined;\nexport declare const specialized: {\n value: string;\n next: () => typeof specialized;\n};\nexport declare const indexed: {\n [key: string]: typeof indexed;\n};\nexport declare const mapped: {\n next: typeof mapped;\n};\nexport declare const viaAnnotation: {\n value: string;\n next: () => typeof viaAnnotation;\n};\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: typeof hiddenAlias;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"first\"];\n };\n second: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"second\"];\n };\n};\nexport declare const parenthesized: () => typeof parenthesized;\nexport declare const asserted: () => typeof asserted;\nexport declare class Methods {\n static recur(): (typeof Methods)[\"recur\"];\n static \"a-b\"(): (typeof Methods)[\"a-b\"];\n static [key](): (typeof Methods)[typeof key];\n recur(): Methods[\"recur\"];\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n};\nexport declare const nestedNumber: {\n nested(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n constrained(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n copied(inner: U): {\n outer: number;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n};\nexport declare const mappedCycle: any;\nexport declare const mappedCycleCopy: any;\nexport declare const nestedCycle: any;\nexport declare const cycleKey: unique symbol;\nexport declare const keyedCycles: any;\nexport declare const sharedCycles: any;\nexport declare const mutualCycle: any;\nexport declare const shadowedCycle: any;\nexport declare const optionalCycle: any;\nexport declare const nullableCycle: any;\nexport declare const mixedCycles: any;\nexport declare const sharedOptionalCycles: any;\nexport declare const nullableKeys: any;\nexport declare const nullableRoot: any;\nexport declare const optionalRoot: any;\nexport declare const nullableLinks: any;\nexport declare const optionalNullableLinks: any;\nexport declare const nullableOptionalLinks: any;\nexport declare const nullishLinks: any;\nexport declare const mixedUnionCycle: any;\nexport declare const _recursive = 1;\nexport declare const factory: any;\nexport declare function captured(value: T): any;\nexport declare function nestedCaptured(outer: T): any;\nexport declare function constrained(key: K): any;\nexport declare function optionalCaptured(value: T): any;\nexport declare function annotatedCaptured(value: T): any;\nexport declare function recursiveTuple(value: T): any;\nexport declare function inferredCaptured(): any;\nexport declare function mappedCaptured(): any;\nexport declare function freshGeneric(unused: T): any;\nexport declare function mutualCaptured(left: T, right: U): any;\nexport declare class CapturedClass {\n value: T;\n constructor(value: T);\n make(inner: U): any;\n}\nexport declare function covariantClass(): any;\nexport declare function contravariantClass(): any;\nexport declare namespace Nested {\n function captured(value: T): any;\n}\n\n(3735,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmappedCycle\n\n(3813,15): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmappedCycleCopy\n\n(3857,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnestedCycle\n\n(3982,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nkeyedCycles\n\n(4154,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nsharedCycles\n\n(4463,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmutualCycle\n\n(4862,13): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nshadowedCycle\n\n(5024,13): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\noptionalCycle\n\n(5192,13): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnullableCycle\n\n(5355,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmixedCycles\n\n(5403,20): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nsharedOptionalCycles\n\n(5488,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnullableKeys\n\n(5739,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnullableRoot\n\n(5905,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\noptionalRoot\n\n(6232,13): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnullableLinks\n\n(6427,21): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\noptionalNullableLinks\n\n(6785,21): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnullableOptionalLinks\n\n(7139,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnullishLinks\n\n(7316,15): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmixedUnionCycle\n\n(7432,7): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nfactory\n\n(7498,8): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ncaptured\n\n(7632,14): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nnestedCaptured\n\n(7892,11): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nconstrained\n\n(8058,16): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\noptionalCaptured\n\n(8202,17): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nannotatedCaptured\n\n(8355,14): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nrecursiveTuple\n\n(8468,16): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ninferredCaptured\n\n(8623,14): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmappedCaptured\n\n(8754,12): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nfreshGeneric\n\n(8861,14): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmutualCaptured\n\n(9134,4): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nmake\n\n(9278,14): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ncovariantClass\n\n(9413,18): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ncontravariantClass\n\n(9600,8): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\ncaptured\n", + "signature": "850dc9bfa8257128f209cdd8c49501cd-type _recursive_1 = {\n value: number;\n next: _recursive_1;\n};\ntype _recursive_2 = {\n value: string;\n next: _recursive_2;\n};\ntype _recursive_3 = {\n value: number;\n next: _recursive_3;\n};\ntype _recursive_4 = {\n value: number;\n next: _recursive_4;\n};\ntype _recursive_5 = {\n value: string;\n next: _recursive_5;\n};\ntype _recursive_6 = {\n value: boolean;\n next: _recursive_6;\n};\ntype _recursive_7 = {\n value: number;\n next: _recursive_7;\n};\ntype _recursive_8 = {\n value: number;\n next: _recursive_8;\n};\ntype _recursive_9 = {\n value: string;\n next: _recursive_9;\n};\ntype _recursive_10 = {\n value: number;\n next: _recursive_10 | null;\n};\ntype _recursive_11 = {\n value: number;\n next: _recursive_11 | undefined;\n};\ntype _recursive_12 = {\n value: number;\n next: _recursive_12 | null | undefined;\n};\ntype _recursive_13 = {\n value: number;\n next: _recursive_13;\n};\ntype _recursive_14 = () => _recursive_14;\ntype _recursive_15 = {\n value: T;\n next: () => _recursive_15;\n consume: (other: T) => _recursive_15;\n};\ntype _recursive_16 = {\n outer: T;\n inner: U;\n next: () => _recursive_16;\n shadow: (value: T_1) => {\n outer: T;\n inner: U;\n value: T_1;\n next: _recursive_16;\n };\n};\ntype _recursive_17 = {\n value: T[K];\n next: () => _recursive_17;\n};\ntype _recursive_18 = {\n value: T;\n next: _recursive_18;\n};\ntype _recursive_19 = {\n value: T;\n next: _recursive_19;\n};\ntype _recursive_20 = readonly [T, _recursive_20];\ntype _recursive_21 = {\n value: U;\n next: _recursive_21;\n};\ntype _recursive_22 = { [K in keyof T]: {\n value: T[K];\n next: _recursive_22;\n}; };\ntype _recursive_23 = (value: U) => _recursive_23;\ntype _recursive_24 = {\n right: U;\n self: _recursive_24;\n next: _recursive_25;\n};\ntype _recursive_25 = {\n left: T;\n next: _recursive_24;\n};\ntype _recursive_26 = {\n outer: T;\n inner: U;\n next: () => _recursive_26;\n};\ntype _recursive_27 = {\n value: T;\n next(): _recursive_27;\n};\ntype _recursive_28 = {\n consume: (value: T) => void;\n next(): _recursive_28;\n};\nexport declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: () => {\n call: typeof objectReturn;\n};\nexport declare const tupleReturn: () => readonly [typeof tupleReturn];\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: {\n value: number;\n next: () => typeof object;\n};\nexport declare const method: {\n value: number;\n next(): typeof method;\n};\nexport declare const accessor: {\n value: number;\n readonly next: typeof accessor;\n};\nexport declare const tuple: readonly [() => typeof tuple];\nexport declare const array: (() => typeof array)[];\nexport declare const nested: {\n inner: {\n next(): {\n next(): (typeof nested)[\"inner\"];\n };\n };\n};\nexport declare const memberTuple: readonly [() => () => (typeof memberTuple)[0]];\nexport declare const memberArray: (() => (typeof memberArray)[0])[];\nexport declare const quoted: {\n \"a-b\": () => () => (typeof quoted)[\"a-b\"];\n};\nexport declare const numeric: {\n 0: () => () => (typeof numeric)[0];\n};\nexport declare const key: unique symbol;\nexport declare const computed: {\n [key]: () => (typeof computed)[typeof key];\n};\nexport declare const union: {\n next: () => typeof union;\n} | undefined;\nexport declare const specialized: {\n value: string;\n next: () => typeof specialized;\n};\nexport declare const indexed: {\n [key: string]: typeof indexed;\n};\nexport declare const mapped: {\n next: typeof mapped;\n};\nexport declare const viaAnnotation: {\n value: string;\n next: () => typeof viaAnnotation;\n};\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: typeof hiddenAlias;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"first\"];\n };\n second: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"second\"];\n };\n};\nexport declare const parenthesized: () => typeof parenthesized;\nexport declare const asserted: () => typeof asserted;\nexport declare class Methods {\n static recur(): (typeof Methods)[\"recur\"];\n static \"a-b\"(): (typeof Methods)[\"a-b\"];\n static [key](): (typeof Methods)[typeof key];\n recur(): Methods[\"recur\"];\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n};\nexport declare const nestedNumber: {\n nested(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n constrained(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n copied(inner: U): {\n outer: number;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n};\nexport declare const mappedCycle: {\n Node: {\n value: number;\n next: (typeof mappedCycle)[\"Node\"];\n };\n};\nexport declare const mappedCycleCopy: {\n Node: {\n value: number;\n next: (typeof mappedCycleCopy)[\"Node\"];\n };\n};\nexport declare const nestedCycle: {\n wrapped: {\n Node: {\n value: string;\n next: (typeof nestedCycle)[\"wrapped\"][\"Node\"];\n };\n };\n};\nexport declare const cycleKey: unique symbol;\nexport declare const keyedCycles: {\n \"a-b\": {\n value: string;\n next: (typeof keyedCycles)[\"a-b\"];\n };\n 0: {\n value: boolean;\n next: (typeof keyedCycles)[0];\n };\n [cycleKey]: {\n value: number;\n next: (typeof keyedCycles)[typeof cycleKey];\n };\n};\nexport declare const sharedCycles: {\n first: {\n Node: {\n value: number;\n next: (typeof sharedCycles)[\"first\"][\"Node\"];\n };\n };\n second: {\n Node: {\n value: number;\n next: (typeof sharedCycles)[\"second\"][\"Node\"];\n };\n };\n};\nexport declare const mutualCycle: {\n First: {\n value: number;\n next: {\n value: string;\n next: (typeof mutualCycle)[\"First\"];\n };\n };\n Second: {\n value: string;\n next: {\n value: number;\n next: (typeof mutualCycle)[\"Second\"];\n };\n };\n};\nexport declare const shadowedCycle: {\n Node: {\n value: number;\n next: (shadowedCycle: T) => typeof import(\".\").shadowedCycle[\"Node\"];\n };\n};\nexport declare const optionalCycle: {\n Node?: _recursive_1;\n};\nexport declare const nullableCycle: {\n Node: _recursive_2 | null;\n};\nexport declare const mixedCycles: {\n required: {\n Node?: _recursive_3;\n };\n optional?: {\n Node?: _recursive_3;\n } | null;\n};\nexport declare const sharedOptionalCycles: {\n first: {\n Node?: _recursive_4;\n };\n second: {\n Node?: _recursive_4;\n };\n};\nexport declare const nullableKeys: {\n \"a-b\": _recursive_5 | null;\n 0: _recursive_6 | null;\n [cycleKey]: _recursive_7 | null;\n};\nexport declare const nullableRoot: _recursive_8 | null;\nexport declare const optionalRoot: _recursive_9 | undefined;\nexport declare const nullableLinks: {\n Node: {\n value: number;\n next: (typeof nullableLinks)[\"Node\"];\n } | null;\n};\nexport declare const optionalNullableLinks: {\n Node?: _recursive_10 | null;\n};\nexport declare const nullableOptionalLinks: {\n Node: _recursive_11 | null;\n};\nexport declare const nullishLinks: {\n Node?: _recursive_12 | null;\n};\nexport declare const mixedUnionCycle: {\n Node?: false | _recursive_13 | null;\n};\nexport declare const _recursive = 1;\nexport declare const factory: () => () => _recursive_14;\nexport declare function captured(value: T): _recursive_15;\nexport declare function nestedCaptured(outer: T): (inner: U) => _recursive_16;\nexport declare function constrained(key: K): _recursive_17;\nexport declare function optionalCaptured(value: T): {\n node?: _recursive_18 | false | null;\n};\nexport declare function annotatedCaptured(value: T): _recursive_19;\nexport declare function recursiveTuple(value: T): _recursive_20;\nexport declare function inferredCaptured(): (T extends () => infer U ? _recursive_21 : never);\nexport declare function mappedCaptured(): _recursive_22;\nexport declare function freshGeneric(unused: T): _recursive_23;\nexport declare function mutualCaptured(left: T, right: U): {\n left: _recursive_25;\n right: _recursive_24;\n};\nexport declare class CapturedClass {\n value: T;\n constructor(value: T);\n make(inner: U): _recursive_26;\n}\nexport declare function covariantClass(): {\n new (): _recursive_27;\n};\nexport declare function contravariantClass(): {\n new (): _recursive_28;\n};\nexport declare namespace Nested {\n type _recursive_29 = {\n value: T;\n next: () => _recursive_29;\n };\n export function captured(value: T): _recursive_29;\n export {};\n}\nexport {};\n", "impliedNodeFormat": 1 } } @@ -2236,360 +2187,8 @@ export var Nested; "outDir": "./", "strict": true }, - "emitDiagnosticsPerFile": [ - [ - "../index.ts", - [ - { - "pos": 3735, - "end": 3746, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "mappedCycle" - ] - }, - { - "pos": 3813, - "end": 3828, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "mappedCycleCopy" - ] - }, - { - "pos": 3857, - "end": 3868, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "nestedCycle" - ] - }, - { - "pos": 3982, - "end": 3993, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "keyedCycles" - ] - }, - { - "pos": 4154, - "end": 4166, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "sharedCycles" - ] - }, - { - "pos": 4463, - "end": 4474, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "mutualCycle" - ] - }, - { - "pos": 4862, - "end": 4875, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "shadowedCycle" - ] - }, - { - "pos": 5024, - "end": 5037, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "optionalCycle" - ] - }, - { - "pos": 5192, - "end": 5205, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "nullableCycle" - ] - }, - { - "pos": 5355, - "end": 5366, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "mixedCycles" - ] - }, - { - "pos": 5403, - "end": 5423, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "sharedOptionalCycles" - ] - }, - { - "pos": 5488, - "end": 5500, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "nullableKeys" - ] - }, - { - "pos": 5739, - "end": 5751, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "nullableRoot" - ] - }, - { - "pos": 5905, - "end": 5917, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "optionalRoot" - ] - }, - { - "pos": 6232, - "end": 6245, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "nullableLinks" - ] - }, - { - "pos": 6427, - "end": 6448, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "optionalNullableLinks" - ] - }, - { - "pos": 6785, - "end": 6806, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "nullableOptionalLinks" - ] - }, - { - "pos": 7139, - "end": 7151, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "nullishLinks" - ] - }, - { - "pos": 7316, - "end": 7331, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "mixedUnionCycle" - ] - }, - { - "pos": 7432, - "end": 7439, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "factory" - ] - }, - { - "pos": 7498, - "end": 7506, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "captured" - ] - }, - { - "pos": 7632, - "end": 7646, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "nestedCaptured" - ] - }, - { - "pos": 7892, - "end": 7903, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "constrained" - ] - }, - { - "pos": 8058, - "end": 8074, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "optionalCaptured" - ] - }, - { - "pos": 8202, - "end": 8219, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "annotatedCaptured" - ] - }, - { - "pos": 8355, - "end": 8369, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "recursiveTuple" - ] - }, - { - "pos": 8468, - "end": 8484, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "inferredCaptured" - ] - }, - { - "pos": 8623, - "end": 8637, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "mappedCaptured" - ] - }, - { - "pos": 8754, - "end": 8766, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "freshGeneric" - ] - }, - { - "pos": 8861, - "end": 8875, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "mutualCaptured" - ] - }, - { - "pos": 9134, - "end": 9138, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "make" - ] - }, - { - "pos": 9278, - "end": 9292, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "covariantClass" - ] - }, - { - "pos": 9413, - "end": 9431, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "contravariantClass" - ] - }, - { - "pos": 9600, - "end": 9608, - "code": 5088, - "category": 1, - "messageKey": "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", - "messageArgs": [ - "captured" - ] - } - ] - ] - ], - "emitSignatures": [ - { - "file": "../index.ts", - "original": 2 - } - ], - "size": 31375 + "latestChangedDtsFile": "./index.d.ts", + "size": 24544 } producer/tsconfig.json:: @@ -2601,6 +2200,7 @@ Signatures:: consumer/tsconfig.json:: SemanticDiagnostics:: *refresh* /home/src/tslibs/TS/Lib/lib.es2026.full.d.ts +*refresh* /home/src/workspaces/project/producer/dist/index.d.ts *refresh* /home/src/workspaces/project/consumer/index.ts Signatures:: @@ -2610,262 +2210,197 @@ Edit [2]:: no change tsgo --build consumer ExitStatus:: DiagnosticsPresent_OutputsGenerated Output:: -producer/index.ts:83:14 - error TS5088: The inferred type of 'mappedCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. - -83 export const mappedCycle = build<{ Node: { value: number; next: "ref" } }>(); -   ~~~~~~~~~~~ +consumer/index.ts:158:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. -producer/index.ts:84:14 - error TS5088: The inferred type of 'mappedCycleCopy' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +158 const invalid: number = arrow()()(); +   ~~~~~~~ -84 export const mappedCycleCopy = mappedCycle; -   ~~~~~~~~~~~~~~~ +consumer/index.ts:159:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. -producer/index.ts:85:14 - error TS5088: The inferred type of 'nestedCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +159 const invalidExpression: number = expression()()(); +   ~~~~~~~~~~~~~~~~~ -85 export const nestedCycle = { wrapped: build<{ Node: { value: string; next: "ref" } }>() }; -   ~~~~~~~~~~~ +consumer/index.ts:160:7 - error TS2322: Type '() => { call: ...; }' is not assignable to type 'number'. -producer/index.ts:87:14 - error TS5088: The inferred type of 'keyedCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +160 const invalidObject: number = objectReturn().call; +   ~~~~~~~~~~~~~ -87 export const keyedCycles = build<{ -   ~~~~~~~~~~~ +consumer/index.ts:161:7 - error TS2322: Type '() => readonly [...]' is not assignable to type 'number'. -producer/index.ts:92:14 - error TS5088: The inferred type of 'sharedCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +161 const invalidTuple: number = tupleReturn()[0]; +   ~~~~~~~~~~~~ -92 export const sharedCycles = { first: mappedCycle, second: mappedCycle }; -   ~~~~~~~~~~~~ +consumer/index.ts:162:7 - error TS2322: Type '(shadowed: number) => ...' is not assignable to type 'number'. -producer/index.ts:97:14 - error TS5088: The inferred type of 'mutualCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +162 const invalidShadowed: number = shadowed(1); +   ~~~~~~~~~~~~~~~ -97 export const mutualCycle = buildMutual<{ -   ~~~~~~~~~~~ +consumer/index.ts:163:7 - error TS2322: Type 'number' is not assignable to type 'string'. -producer/index.ts:105:14 - error TS5088: The inferred type of 'shadowedCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +163 const invalidObjectValue: string = object.next().value; +   ~~~~~~~~~~~~~~~~~~ -105 export const shadowedCycle = buildShadowed<{ Node: { value: number; next: "ref" } }>(); -   ~~~~~~~~~~~~~ +consumer/index.ts:164:7 - error TS2322: Type 'readonly [() => ...]' is not assignable to type 'number'. -producer/index.ts:107:14 - error TS5088: The inferred type of 'optionalCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +164 const invalidTupleValue: number = tuple[0](); +   ~~~~~~~~~~~~~~~~~ -107 export const optionalCycle = buildOptional<{ Node: { value: number; next: "ref" } }>(); -   ~~~~~~~~~~~~~ +consumer/index.ts:165:7 - error TS2322: Type 'string' is not assignable to type 'number'. -producer/index.ts:109:14 - error TS5088: The inferred type of 'nullableCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +165 const invalidSpecialized: number = specialized.next().value; +   ~~~~~~~~~~~~~~~~~~ -109 export const nullableCycle = buildNullable<{ Node: { value: string; next: "ref" } }>(); -   ~~~~~~~~~~~~~ +consumer/index.ts:166:7 - error TS2322: Type '{ next: ...; }' is not assignable to type 'number'. -producer/index.ts:111:14 - error TS5088: The inferred type of 'mixedCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +166 const invalidMapped: number = mapped.next; +   ~~~~~~~~~~~~~ -111 export const mixedCycles = wrap(optionalCycle); -   ~~~~~~~~~~~ +consumer/index.ts:167:7 - error TS2322: Type 'string' is not assignable to type 'number'. -producer/index.ts:112:14 - error TS5088: The inferred type of 'sharedOptionalCycles' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +167 const invalidAnnotation: number = viaAnnotation.next().value; +   ~~~~~~~~~~~~~~~~~ -112 export const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle }; -   ~~~~~~~~~~~~~~~~~~~~ +consumer/index.ts:168:7 - error TS2322: Type 'string' is not assignable to type 'number'. -producer/index.ts:113:14 - error TS5088: The inferred type of 'nullableKeys' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +168 const invalidLink: number = nextLink.next.value; +   ~~~~~~~~~~~ -113 export const nullableKeys = buildNullable<{ -   ~~~~~~~~~~~~ +consumer/index.ts:169:7 - error TS2322: Type 'number' is not assignable to type 'string'. -producer/index.ts:119:14 - error TS5088: The inferred type of 'nullableRoot' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +169 const invalidCallable: string = nextCallable(1).link.value; +   ~~~~~~~~~~~~~~~ -119 export const nullableRoot = buildNullableRoot<{ Node: { value: number; next: "ref" } }>(); -   ~~~~~~~~~~~~ +consumer/index.ts:170:7 - error TS2322: Type 'string' is not assignable to type 'number'. -producer/index.ts:121:14 - error TS5088: The inferred type of 'optionalRoot' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +170 const invalidHiddenValue: number = hiddenAlias.next.next.value; +   ~~~~~~~~~~~~~~~~~~ -121 export const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: "ref" } }>(); -   ~~~~~~~~~~~~ +consumer/index.ts:171:7 - error TS2322: Type '() => (typeof Methods)["recur"]' is not assignable to type 'number'. -producer/index.ts:126:14 - error TS5088: The inferred type of 'nullableLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +171 const invalidMethod: number = Methods.recur()(); +   ~~~~~~~~~~~~~ -126 export const nullableLinks = buildNullableLinks<{ Node: { value: number; next: "ref" } }>(); -   ~~~~~~~~~~~~~ +consumer/index.ts:172:7 - error TS2322: Type '() => (typeof Methods)[typeof key]' is not assignable to type 'number'. -producer/index.ts:128:14 - error TS5088: The inferred type of 'optionalNullableLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +172 const invalidComputedMethod: number = Methods[key]()(); +   ~~~~~~~~~~~~~~~~~~~~~ -128 export const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: "ref" } }>(); -   ~~~~~~~~~~~~~~~~~~~~~ +consumer/index.ts:173:7 - error TS2322: Type 'string' is not assignable to type 'boolean'. -producer/index.ts:133:14 - error TS5088: The inferred type of 'nullableOptionalLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +173 const invalidNestedOuter: boolean = nestedString.outer; +   ~~~~~~~~~~~~~~~~~~ -133 export const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: "ref" } }>(); -   ~~~~~~~~~~~~~~~~~~~~~ +consumer/index.ts:174:7 - error TS2322: Type 'number' is not assignable to type 'string'. -producer/index.ts:138:14 - error TS5088: The inferred type of 'nullishLinks' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +174 const invalidNestedInner: string = nestedString.inner; +   ~~~~~~~~~~~~~~~~~~ -138 export const nullishLinks = buildNullishLinks<{ Node: { value: number; next: "ref" } }>(); -   ~~~~~~~~~~~~ +consumer/index.ts:175:26 - error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. -producer/index.ts:140:14 - error TS5088: The inferred type of 'mixedUnionCycle' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +175 nestedNumber.constrained("wrong"); +   ~~~~~~~ -140 export const mixedUnionCycle = buildMixed<{ Node: { value: number; next: "ref" } }>(); -   ~~~~~~~~~~~~~~~ +consumer/index.ts:176:7 - error TS2322: Type 'number' is not assignable to type 'string'. -producer/index.ts:142:14 - error TS5088: The inferred type of 'factory' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +176 const invalidMappedCycleValue: string = mappedCycle.Node.next.next.value; +   ~~~~~~~~~~~~~~~~~~~~~~~ -142 export const factory = () => function self() { return self; }; -   ~~~~~~~ +consumer/index.ts:177:7 - error TS2322: Type 'string' is not assignable to type 'number'. -producer/index.ts:143:17 - error TS5088: The inferred type of 'captured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +177 const invalidMutualCycleValue: number = mutualCycle.First.next.value; +   ~~~~~~~~~~~~~~~~~~~~~~~ -143 export function captured(value: T) { -   ~~~~~~~~ +consumer/index.ts:178:7 - error TS2322: Type 'number' is not assignable to type 'string'. -producer/index.ts:147:17 - error TS5088: The inferred type of 'nestedCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +178 const invalidShadowedMappedValue: string = shadowedCycle.Node.next(1).next("text").value; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~ -147 export function nestedCaptured(outer: T) { -   ~~~~~~~~~~~~~~ +consumer/index.ts:179:7 - error TS2322: Type 'null' is not assignable to type '_recursive_1'. -producer/index.ts:156:17 - error TS5088: The inferred type of 'constrained' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +179 const invalidNullNext: OptionalNode["next"] = null; +   ~~~~~~~~~~~~~~~ -156 export function constrained(key: K) { -   ~~~~~~~~~~~ +consumer/index.ts:180:7 - error TS2322: Type 'undefined' is not assignable to type '_recursive_1'. -producer/index.ts:160:17 - error TS5088: The inferred type of 'optionalCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +180 const invalidUndefinedNext: OptionalNode["next"] = undefined; +   ~~~~~~~~~~~~~~~~~~~~ -160 export function optionalCaptured(value: T) { -   ~~~~~~~~~~~~~~~~ +consumer/index.ts:181:42 - error TS2531: Object is possibly 'null'. -producer/index.ts:164:17 - error TS5088: The inferred type of 'annotatedCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +181 const invalidNullableLinkValue: number = nullableLinks.Node!.next.value; +   ~~~~~~~~~~~~~~~~~~~~~~~~ -164 export function annotatedCaptured(value: T) { -   ~~~~~~~~~~~~~~~~~ +consumer/index.ts:182:41 - error TS2533: Object is possibly 'null' or 'undefined'. -producer/index.ts:168:17 - error TS5088: The inferred type of 'recursiveTuple' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +182 const invalidNullishLinkValue: number = nullishLinks.Node!.next.value; +   ~~~~~~~~~~~~~~~~~~~~~~~ -168 export function recursiveTuple(value: T) { -   ~~~~~~~~~~~~~~ +consumer/index.ts:183:26 - error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. -producer/index.ts:172:17 - error TS5088: The inferred type of 'inferredCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +183 captured("text").consume(1); +   ~ -172 export function inferredCaptured() { -   ~~~~~~~~~~~~~~~~ +consumer/index.ts:184:7 - error TS2322: Type 'string' is not assignable to type 'number'. -producer/index.ts:176:17 - error TS5088: The inferred type of 'mappedCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +184 const invalidRecursiveTupleValue: number = recursiveTuple("text")[1][0]; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~ -176 export function mappedCaptured() { -   ~~~~~~~~~~~~~~ +consumer/index.ts:185:7 - error TS2322: Type 'number' is not assignable to type 'string'. -producer/index.ts:180:17 - error TS5088: The inferred type of 'freshGeneric' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +185 const invalidCapturedOuter: string = nestedCapturedValue.outer; +   ~~~~~~~~~~~~~~~~~~~~ -180 export function freshGeneric(unused: T) { -   ~~~~~~~~~~~~ +consumer/index.ts:186:7 - error TS2322: Type 'string' is not assignable to type 'number'. -producer/index.ts:184:17 - error TS5088: The inferred type of 'mutualCaptured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +186 const invalidCapturedInner: number = nestedCapturedValue.inner; +   ~~~~~~~~~~~~~~~~~~~~ -184 export function mutualCaptured(left: T, right: U) { -   ~~~~~~~~~~~~~~ +consumer/index.ts:188:7 - error TS2322: Type 'boolean' is not assignable to type '_recursive_13'. -producer/index.ts:191:5 - error TS5088: The inferred type of 'make' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +188 const invalidMixedNext: WithoutFalseOrNullish["next"] = false; +   ~~~~~~~~~~~~~~~~ -191 make(inner: U) { -   ~~~~ +consumer/index.ts:189:7 - error TS2322: Type 'string' is not assignable to type 'number'. -producer/index.ts:196:17 - error TS5088: The inferred type of 'covariantClass' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +189 const invalidInferredCapturedValue: number = inferredCaptured<() => string>().next.value; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -196 export function covariantClass() { -   ~~~~~~~~~~~~~~ +consumer/index.ts:190:7 - error TS2322: Type 'number' is not assignable to type 'string'. -producer/index.ts:202:17 - error TS5088: The inferred type of 'contravariantClass' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +190 const invalidMappedCapturedValue: string = mappedCaptured<{ value: number }>().value.next.value.value; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~ -202 export function contravariantClass() { -   ~~~~~~~~~~~~~~~~~~ +consumer/index.ts:191:7 - error TS2322: Type 'number' is not assignable to type 'boolean'. -producer/index.ts:209:21 - error TS5088: The inferred type of 'captured' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary. +191 const invalidMutualCapturedValue: boolean = mutualCaptured(1, "text").right.self.next.left; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~ -209 export function captured(value: T) { -   ~~~~~~~~ +consumer/index.ts:192:7 - error TS2322: Type 'string' is not assignable to type 'number'. -consumer/index.ts:1:88 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. +192 const invalidCapturedClassValue: number = capturedClassResult.outer; +   ~~~~~~~~~~~~~~~~~~~~~~~~~ -1 import { arrow, expression, first, generic, objectReturn, tupleReturn, shadowed } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +consumer/index.ts:193:7 - error TS2322: Type '_recursive_27' is not assignable to type '_recursive_27'. + Type 'unknown' is not assignable to type 'string'. -consumer/index.ts:2:64 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. +193 const invalidCovariance: typeof covariantString = covariantUnknown.next(); +   ~~~~~~~~~~~~~~~~~ -2 import { object, method, accessor, tuple, array, nested } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +consumer/index.ts:194:7 - error TS2322: Type '_recursive_28' is not assignable to type '_recursive_28'. + Type 'unknown' is not assignable to type 'string'. -consumer/index.ts:3:94 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. +194 const invalidContravariance: typeof contravariantUnknown = contravariantString.next(); +   ~~~~~~~~~~~~~~~~~~~~~ -3 import { memberTuple, memberArray, quoted, numeric, key, computed, union, specialized } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:4:48 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -4 import { indexed, mapped, viaAnnotation } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:5:86 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -5 import { nextLink, nextCallable, parenthesized, asserted, Methods, overloaded } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:6:51 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -6 import { hiddenAlias, siblingHiddenAliases } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:7:30 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -7 import { nestedNumber } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:8:124 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -8 import { mappedCycle, mappedCycleCopy, nestedCycle, cycleKey, keyedCycles, sharedCycles, mutualCycle, shadowedCycle } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:9:152 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -9 import { optionalCycle, nullableCycle, mixedCycles, sharedOptionalCycles, nullableKeys, nullableRoot, optionalRoot, nullableLinks, nullishLinks } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:10:62 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -10 import { optionalNullableLinks, nullableOptionalLinks } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:11:142 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -11 import { mixedUnionCycle, factory, captured, nestedCaptured, constrained, optionalCaptured, annotatedCaptured, recursiveTuple, Nested } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:12:80 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -12 import { inferredCaptured, mappedCaptured, freshGeneric, mutualCaptured } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:13:31 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -13 import { CapturedClass } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -consumer/index.ts:14:52 - error TS7016: Could not find a declaration file for module '../producer/dist/index.js'. '/home/src/workspaces/project/producer/dist/index.js' implicitly has an 'any' type. - -14 import { covariantClass, contravariantClass } from "../producer/dist/index.js"; -   ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - -Found 48 errors in 2 files. - -Errors Files - 14 consumer/index.ts:1 - 34 producer/index.ts:83 +Found 36 errors in the same file, starting at: consumer/index.ts:158 //// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo] *rewrite with same content* //// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo.readable.baseline.txt] *rewrite with same content* -producer/tsconfig.json:: -SemanticDiagnostics:: -Signatures:: - consumer/tsconfig.json:: SemanticDiagnostics:: *refresh* /home/src/tslibs/TS/Lib/lib.es2026.full.d.ts +*refresh* /home/src/workspaces/project/producer/dist/index.d.ts *refresh* /home/src/workspaces/project/consumer/index.ts Signatures:: diff --git a/tsc/testdata/baselines/reference/tsc/generateTrace/generateTrace-with-multiple-files-and-complex-types.js b/tsc/testdata/baselines/reference/tsc/generateTrace/generateTrace-with-multiple-files-and-complex-types.js index 21aa78f4efbca..ff1d0c052f99c 100644 --- a/tsc/testdata/baselines/reference/tsc/generateTrace/generateTrace-with-multiple-files-and-complex-types.js +++ b/tsc/testdata/baselines/reference/tsc/generateTrace/generateTrace-with-multiple-files-and-complex-types.js @@ -225,10 +225,12 @@ declare const console: { log(msg: any): void; }; {"id":115,"symbolName":"__type","recursionId":85,"firstDeclaration":{"path":"/home/src/workspaces/project/types.ts","start":{"line":3,"character":16},"end":{"line":3,"character":27}},"flags":["Object"],"display":"(x: U) => U"}, {"id":116,"recursionId":97,"flags":["StringLiteral"],"display":"\"value\""}, {"id":117,"recursionId":98,"flags":["StringLiteral"],"display":"\"map\""}, -{"id":118,"symbolName":"Container","recursionId":83,"instantiatedType":91,"typeArguments":[112],"firstDeclaration":{"path":"/home/src/workspaces/project/types.ts","start":{"line":1,"character":1},"end":{"line":4,"character":2}},"flags":["Object"]}, -{"id":119,"symbolName":"Nullable","recursionId":99,"unionTypes":[10,13,14],"aliasTypeArguments":[14],"firstDeclaration":{"path":"/home/src/workspaces/project/types.ts","start":{"line":5,"character":1},"end":{"line":5,"character":48}},"flags":["Union"],"display":"Nullable"}, -{"id":120,"recursionId":100,"flags":["StringLiteral"],"display":"\"hello\""}, -{"id":121,"recursionId":101,"flags":["StringLiteral"],"display":"\"hello\""}, -{"id":122,"symbolName":"__object","recursionId":102,"firstDeclaration":{"path":"/home/src/workspaces/project/main.ts","start":{"line":2,"character":57},"end":{"line":2,"character":86}},"flags":["Object"],"display":"{ value: U; map: (fn: (x: number) => U) => Container; }"}] +{"id":118,"symbolName":"__type","recursionId":85,"firstDeclaration":{"path":"/home/src/workspaces/project/types.ts","start":{"line":3,"character":16},"end":{"line":3,"character":27}},"flags":["Object"],"display":"(x: number) => U"}, +{"id":119,"symbolName":"__type","recursionId":85,"firstDeclaration":{"path":"/home/src/workspaces/project/types.ts","start":{"line":3,"character":16},"end":{"line":3,"character":27}},"flags":["Object"],"display":"(x: U) => U"}, +{"id":120,"symbolName":"Container","recursionId":83,"instantiatedType":91,"typeArguments":[112],"firstDeclaration":{"path":"/home/src/workspaces/project/types.ts","start":{"line":1,"character":1},"end":{"line":4,"character":2}},"flags":["Object"]}, +{"id":121,"symbolName":"Nullable","recursionId":99,"unionTypes":[10,13,14],"aliasTypeArguments":[14],"firstDeclaration":{"path":"/home/src/workspaces/project/types.ts","start":{"line":5,"character":1},"end":{"line":5,"character":48}},"flags":["Union"],"display":"Nullable"}, +{"id":122,"recursionId":100,"flags":["StringLiteral"],"display":"\"hello\""}, +{"id":123,"recursionId":101,"flags":["StringLiteral"],"display":"\"hello\""}, +{"id":124,"symbolName":"__object","recursionId":102,"firstDeclaration":{"path":"/home/src/workspaces/project/main.ts","start":{"line":2,"character":57},"end":{"line":2,"character":86}},"flags":["Object"],"display":"{ value: U; map: (fn: (x: number) => U) => Container; }"}] diff --git a/tsc/testdata/baselines/reference/tsc/incremental/recursive-tagged-tuple-after-incremental-edits.js b/tsc/testdata/baselines/reference/tsc/incremental/recursive-tagged-tuple-after-incremental-edits.js index 4b5a5ad527188..1a3fb1f23100a 100644 --- a/tsc/testdata/baselines/reference/tsc/incremental/recursive-tagged-tuple-after-incremental-edits.js +++ b/tsc/testdata/baselines/reference/tsc/incremental/recursive-tagged-tuple-after-incremental-edits.js @@ -155,7 +155,7 @@ tsgo ExitStatus:: Success Output:: //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.es2026.full.d.ts","./doc.ts","./consumer.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"209790a380ab2edc475c402e3a85e110-type Doc =\n | string\n | { [k: string]: Doc }\n | readonly [\"array\", Doc]\n | readonly [\"array\", Doc, { length: number }]\n | readonly [\"array\", Doc, { min?: number; max?: number }]\n | readonly [\"union\", Doc, ...Doc[]];\nexport declare const doc: Doc;\n// comment-only edit\n","signature":"17befdf8983ce76b78c64e0ef9b49c73-type Doc = string | {\n [k: string]: Doc;\n} | readonly [\"array\", Doc] | readonly [\"array\", Doc, {\n length: number;\n}] | readonly [\"array\", Doc, {\n min?: number;\n max?: number;\n}] | readonly [\"union\", Doc, ...Doc[]];\nexport declare const doc: Doc;\nexport {};\n","impliedNodeFormat":1},{"version":"e3e1863b40b48bf670281f2578788e0b-import { doc } from \"./doc\";\nexport const value = doc;","signature":"a56617d7ff45ff02880e982e94937f59-export declare const value: any;\n\n(42,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nvalue\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"module":99,"strict":true},"referencedMap":[[3,1]],"affectedFilesPendingEmit":[3,2]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.es2026.full.d.ts","./doc.ts","./consumer.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"209790a380ab2edc475c402e3a85e110-type Doc =\n | string\n | { [k: string]: Doc }\n | readonly [\"array\", Doc]\n | readonly [\"array\", Doc, { length: number }]\n | readonly [\"array\", Doc, { min?: number; max?: number }]\n | readonly [\"union\", Doc, ...Doc[]];\nexport declare const doc: Doc;\n// comment-only edit\n","signature":"17befdf8983ce76b78c64e0ef9b49c73-type Doc = string | {\n [k: string]: Doc;\n} | readonly [\"array\", Doc] | readonly [\"array\", Doc, {\n length: number;\n}] | readonly [\"array\", Doc, {\n min?: number;\n max?: number;\n}] | readonly [\"union\", Doc, ...Doc[]];\nexport declare const doc: Doc;\nexport {};\n","impliedNodeFormat":1},{"version":"e3e1863b40b48bf670281f2578788e0b-import { doc } from \"./doc\";\nexport const value = doc;","signature":"ac40ec9f570c9719a7b732c6ecc676ae-type _recursive = readonly [\"array\", string | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4];\ntype _recursive_2 = readonly [\"array\", string | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4, {\n length: number;\n}];\ntype _recursive_3 = readonly [\"array\", string | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4, {\n min?: number;\n max?: number;\n}];\ntype _recursive_4 = readonly [\"union\", string | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4, ...(string | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4)[]];\ntype _recursive_1 = {\n [k: string]: string | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4;\n};\nexport declare const value: string | {\n [k: string]: typeof value;\n} | _recursive | _recursive_2 | _recursive_3 | _recursive_4;\nexport {};\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"module":99,"strict":true},"referencedMap":[[3,1]],"affectedFilesPendingEmit":[3,2]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -203,11 +203,11 @@ Output:: { "fileName": "./consumer.ts", "version": "e3e1863b40b48bf670281f2578788e0b-import { doc } from \"./doc\";\nexport const value = doc;", - "signature": "a56617d7ff45ff02880e982e94937f59-export declare const value: any;\n\n(42,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nvalue\n", + "signature": "ac40ec9f570c9719a7b732c6ecc676ae-type _recursive = readonly [\"array\", string | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4];\ntype _recursive_2 = readonly [\"array\", string | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4, {\n length: number;\n}];\ntype _recursive_3 = readonly [\"array\", string | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4, {\n min?: number;\n max?: number;\n}];\ntype _recursive_4 = readonly [\"union\", string | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4, ...(string | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4)[]];\ntype _recursive_1 = {\n [k: string]: string | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4;\n};\nexport declare const value: string | {\n [k: string]: typeof value;\n} | _recursive | _recursive_2 | _recursive_3 | _recursive_4;\nexport {};\n", "impliedNodeFormat": "CommonJS", "original": { "version": "e3e1863b40b48bf670281f2578788e0b-import { doc } from \"./doc\";\nexport const value = doc;", - "signature": "a56617d7ff45ff02880e982e94937f59-export declare const value: any;\n\n(42,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nvalue\n", + "signature": "ac40ec9f570c9719a7b732c6ecc676ae-type _recursive = readonly [\"array\", string | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4];\ntype _recursive_2 = readonly [\"array\", string | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4, {\n length: number;\n}];\ntype _recursive_3 = readonly [\"array\", string | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4, {\n min?: number;\n max?: number;\n}];\ntype _recursive_4 = readonly [\"union\", string | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4, ...(string | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4)[]];\ntype _recursive_1 = {\n [k: string]: string | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4;\n};\nexport declare const value: string | {\n [k: string]: typeof value;\n} | _recursive | _recursive_2 | _recursive_3 | _recursive_4;\nexport {};\n", "impliedNodeFormat": 1 } } @@ -238,7 +238,7 @@ Output:: 2 ] ], - "size": 2108 + "size": 2864 } tsconfig.json:: @@ -279,7 +279,7 @@ tsgo ExitStatus:: Success Output:: //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.es2026.full.d.ts","./doc.ts","./consumer.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"703658314ddb6e78faa0ecabe01e9319-type Doc =\n | number\n | string\n | { [k: string]: Doc }\n | readonly [\"array\", Doc]\n | readonly [\"array\", Doc, { length: number }]\n | readonly [\"array\", Doc, { min?: number; max?: number }]\n | readonly [\"union\", Doc, ...Doc[]];\nexport declare const doc: Doc;\n// comment-only edit\n","signature":"e0d759702454fa5818ea5747e4408ca8-type Doc = number | string | {\n [k: string]: Doc;\n} | readonly [\"array\", Doc] | readonly [\"array\", Doc, {\n length: number;\n}] | readonly [\"array\", Doc, {\n min?: number;\n max?: number;\n}] | readonly [\"union\", Doc, ...Doc[]];\nexport declare const doc: Doc;\nexport {};\n","impliedNodeFormat":1},{"version":"e3e1863b40b48bf670281f2578788e0b-import { doc } from \"./doc\";\nexport const value = doc;","signature":"a56617d7ff45ff02880e982e94937f59-export declare const value: any;\n\n(42,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nvalue\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"module":99,"strict":true},"referencedMap":[[3,1]],"affectedFilesPendingEmit":[3,2]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.es2026.full.d.ts","./doc.ts","./consumer.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"703658314ddb6e78faa0ecabe01e9319-type Doc =\n | number\n | string\n | { [k: string]: Doc }\n | readonly [\"array\", Doc]\n | readonly [\"array\", Doc, { length: number }]\n | readonly [\"array\", Doc, { min?: number; max?: number }]\n | readonly [\"union\", Doc, ...Doc[]];\nexport declare const doc: Doc;\n// comment-only edit\n","signature":"e0d759702454fa5818ea5747e4408ca8-type Doc = number | string | {\n [k: string]: Doc;\n} | readonly [\"array\", Doc] | readonly [\"array\", Doc, {\n length: number;\n}] | readonly [\"array\", Doc, {\n min?: number;\n max?: number;\n}] | readonly [\"union\", Doc, ...Doc[]];\nexport declare const doc: Doc;\nexport {};\n","impliedNodeFormat":1},{"version":"e3e1863b40b48bf670281f2578788e0b-import { doc } from \"./doc\";\nexport const value = doc;","signature":"070750e8b361d97322f27628abd39ffe-type _recursive = readonly [\"array\", string | number | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4];\ntype _recursive_2 = readonly [\"array\", string | number | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4, {\n length: number;\n}];\ntype _recursive_3 = readonly [\"array\", string | number | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4, {\n min?: number;\n max?: number;\n}];\ntype _recursive_4 = readonly [\"union\", string | number | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4, ...(string | number | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4)[]];\ntype _recursive_1 = {\n [k: string]: string | number | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4;\n};\nexport declare const value: string | number | {\n [k: string]: typeof value;\n} | _recursive | _recursive_2 | _recursive_3 | _recursive_4;\nexport {};\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"module":99,"strict":true},"referencedMap":[[3,1]],"affectedFilesPendingEmit":[3,2]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -327,11 +327,11 @@ Output:: { "fileName": "./consumer.ts", "version": "e3e1863b40b48bf670281f2578788e0b-import { doc } from \"./doc\";\nexport const value = doc;", - "signature": "a56617d7ff45ff02880e982e94937f59-export declare const value: any;\n\n(42,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nvalue\n", + "signature": "070750e8b361d97322f27628abd39ffe-type _recursive = readonly [\"array\", string | number | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4];\ntype _recursive_2 = readonly [\"array\", string | number | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4, {\n length: number;\n}];\ntype _recursive_3 = readonly [\"array\", string | number | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4, {\n min?: number;\n max?: number;\n}];\ntype _recursive_4 = readonly [\"union\", string | number | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4, ...(string | number | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4)[]];\ntype _recursive_1 = {\n [k: string]: string | number | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4;\n};\nexport declare const value: string | number | {\n [k: string]: typeof value;\n} | _recursive | _recursive_2 | _recursive_3 | _recursive_4;\nexport {};\n", "impliedNodeFormat": "CommonJS", "original": { "version": "e3e1863b40b48bf670281f2578788e0b-import { doc } from \"./doc\";\nexport const value = doc;", - "signature": "a56617d7ff45ff02880e982e94937f59-export declare const value: any;\n\n(42,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nvalue\n", + "signature": "070750e8b361d97322f27628abd39ffe-type _recursive = readonly [\"array\", string | number | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4];\ntype _recursive_2 = readonly [\"array\", string | number | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4, {\n length: number;\n}];\ntype _recursive_3 = readonly [\"array\", string | number | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4, {\n min?: number;\n max?: number;\n}];\ntype _recursive_4 = readonly [\"union\", string | number | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4, ...(string | number | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4)[]];\ntype _recursive_1 = {\n [k: string]: string | number | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4;\n};\nexport declare const value: string | number | {\n [k: string]: typeof value;\n} | _recursive | _recursive_2 | _recursive_3 | _recursive_4;\nexport {};\n", "impliedNodeFormat": 1 } } @@ -362,7 +362,7 @@ Output:: 2 ] ], - "size": 2131 + "size": 2950 } tsconfig.json:: @@ -405,7 +405,7 @@ Output:: Found 1 error in consumer.ts:3 //// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.es2026.full.d.ts","./doc.ts","./consumer.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"703658314ddb6e78faa0ecabe01e9319-type Doc =\n | number\n | string\n | { [k: string]: Doc }\n | readonly [\"array\", Doc]\n | readonly [\"array\", Doc, { length: number }]\n | readonly [\"array\", Doc, { min?: number; max?: number }]\n | readonly [\"union\", Doc, ...Doc[]];\nexport declare const doc: Doc;\n// comment-only edit\n","signature":"e0d759702454fa5818ea5747e4408ca8-type Doc = number | string | {\n [k: string]: Doc;\n} | readonly [\"array\", Doc] | readonly [\"array\", Doc, {\n length: number;\n}] | readonly [\"array\", Doc, {\n min?: number;\n max?: number;\n}] | readonly [\"union\", Doc, ...Doc[]];\nexport declare const doc: Doc;\nexport {};\n","impliedNodeFormat":1},{"version":"8af491d326de0701fb4d07a415b35dec-import { doc } from \"./doc\";\nexport const value = doc;\nexport const invalid: number = value;\n","signature":"b0465247e2bd6863c6a086f723d673e8-export declare const value: any;\nexport declare const invalid: number;\n\n(42,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nvalue\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"module":99,"strict":true},"referencedMap":[[3,1]],"semanticDiagnosticsPerFile":[[3,[{"pos":68,"end":75,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["Doc","number"],"messageChain":[{"pos":68,"end":75,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]}]]],"affectedFilesPendingEmit":[3,2]} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.es2026.full.d.ts","./doc.ts","./consumer.ts"],"fileInfos":[{"version":"0e330bc1e98a7e2601e4b38548df5e2b-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray { readonly length: number; readonly [n: number]: T; }\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"703658314ddb6e78faa0ecabe01e9319-type Doc =\n | number\n | string\n | { [k: string]: Doc }\n | readonly [\"array\", Doc]\n | readonly [\"array\", Doc, { length: number }]\n | readonly [\"array\", Doc, { min?: number; max?: number }]\n | readonly [\"union\", Doc, ...Doc[]];\nexport declare const doc: Doc;\n// comment-only edit\n","signature":"e0d759702454fa5818ea5747e4408ca8-type Doc = number | string | {\n [k: string]: Doc;\n} | readonly [\"array\", Doc] | readonly [\"array\", Doc, {\n length: number;\n}] | readonly [\"array\", Doc, {\n min?: number;\n max?: number;\n}] | readonly [\"union\", Doc, ...Doc[]];\nexport declare const doc: Doc;\nexport {};\n","impliedNodeFormat":1},{"version":"8af491d326de0701fb4d07a415b35dec-import { doc } from \"./doc\";\nexport const value = doc;\nexport const invalid: number = value;\n","signature":"08cb525b00330ca9d6ee5045eece8ec0-type _recursive = readonly [\"array\", string | number | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4];\ntype _recursive_2 = readonly [\"array\", string | number | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4, {\n length: number;\n}];\ntype _recursive_3 = readonly [\"array\", string | number | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4, {\n min?: number;\n max?: number;\n}];\ntype _recursive_4 = readonly [\"union\", string | number | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4, ...(string | number | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4)[]];\ntype _recursive_1 = {\n [k: string]: string | number | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4;\n};\nexport declare const value: string | number | {\n [k: string]: typeof value;\n} | _recursive | _recursive_2 | _recursive_3 | _recursive_4;\nexport declare const invalid: number;\nexport {};\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"module":99,"strict":true},"referencedMap":[[3,1]],"semanticDiagnosticsPerFile":[[3,[{"pos":68,"end":75,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["Doc","number"],"messageChain":[{"pos":68,"end":75,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["string","number"]}]}]]],"affectedFilesPendingEmit":[3,2]} //// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", @@ -453,11 +453,11 @@ Found 1 error in consumer.ts:3 { "fileName": "./consumer.ts", "version": "8af491d326de0701fb4d07a415b35dec-import { doc } from \"./doc\";\nexport const value = doc;\nexport const invalid: number = value;\n", - "signature": "b0465247e2bd6863c6a086f723d673e8-export declare const value: any;\nexport declare const invalid: number;\n\n(42,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nvalue\n", + "signature": "08cb525b00330ca9d6ee5045eece8ec0-type _recursive = readonly [\"array\", string | number | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4];\ntype _recursive_2 = readonly [\"array\", string | number | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4, {\n length: number;\n}];\ntype _recursive_3 = readonly [\"array\", string | number | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4, {\n min?: number;\n max?: number;\n}];\ntype _recursive_4 = readonly [\"union\", string | number | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4, ...(string | number | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4)[]];\ntype _recursive_1 = {\n [k: string]: string | number | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4;\n};\nexport declare const value: string | number | {\n [k: string]: typeof value;\n} | _recursive | _recursive_2 | _recursive_3 | _recursive_4;\nexport declare const invalid: number;\nexport {};\n", "impliedNodeFormat": "CommonJS", "original": { "version": "8af491d326de0701fb4d07a415b35dec-import { doc } from \"./doc\";\nexport const value = doc;\nexport const invalid: number = value;\n", - "signature": "b0465247e2bd6863c6a086f723d673e8-export declare const value: any;\nexport declare const invalid: number;\n\n(42,5): error5088: The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\nvalue\n", + "signature": "08cb525b00330ca9d6ee5045eece8ec0-type _recursive = readonly [\"array\", string | number | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4];\ntype _recursive_2 = readonly [\"array\", string | number | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4, {\n length: number;\n}];\ntype _recursive_3 = readonly [\"array\", string | number | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4, {\n min?: number;\n max?: number;\n}];\ntype _recursive_4 = readonly [\"union\", string | number | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4, ...(string | number | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4)[]];\ntype _recursive_1 = {\n [k: string]: string | number | _recursive_1 | _recursive | _recursive_2 | _recursive_3 | _recursive_4;\n};\nexport declare const value: string | number | {\n [k: string]: typeof value;\n} | _recursive | _recursive_2 | _recursive_3 | _recursive_4;\nexport declare const invalid: number;\nexport {};\n", "impliedNodeFormat": 1 } } @@ -519,7 +519,7 @@ Found 1 error in consumer.ts:3 2 ] ], - "size": 2530 + "size": 3349 } tsconfig.json:: From c7994e2e1923c4a1257dfce4aabb7bb336932f8c Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Thu, 8 Oct 2026 22:31:25 -0700 Subject: [PATCH 5/5] Verify related recursive declaration emit reports Anonymous object returns and imported recursive conditional signatures must remain precise when consumed from emitted declarations. Local source checking alone does not expose declaration-only any regressions. The anonymous-object case is fixed by recursive helper bindings. The imported conditional-alias case already works in native before this branch, so retain coverage without attributing a new fix to it. For 52415 For 58696 --- tsc/internal/execute/tsctests/tsc_test.go | 27 + ...unctionDeclarationSerialization.errors.txt | 22 + ...cursiveFunctionDeclarationSerialization.js | 55 + ...veFunctionDeclarationSerialization.symbols | 55 + ...siveFunctionDeclarationSerialization.types | 54 + ...ursive-function-declaration-consumption.js | 973 +++++++++++------- ...cursiveFunctionDeclarationSerialization.ts | 22 + 7 files changed, 826 insertions(+), 382 deletions(-) diff --git a/tsc/internal/execute/tsctests/tsc_test.go b/tsc/internal/execute/tsctests/tsc_test.go index 9366f7b9fdd71..efca60ec439ee 100644 --- a/tsc/internal/execute/tsctests/tsc_test.go +++ b/tsc/internal/execute/tsctests/tsc_test.go @@ -2489,6 +2489,15 @@ func TestTscIncremental(t *testing.T) { "compilerOptions": { "strict": true, "exactOptionalPropertyTypes": true, "composite": true, "outDir": "dist" } }`, "/home/src/workspaces/project/producer/index.ts": stringtestutil.Dedent(` + import { f } from "./recursive-conditional-utils"; + export const conditionalAliasCopy = f; + export function anonymousThisReturn() { + return { + relyingOnThis() { + return this; + }, + }; + } export const arrow = () => arrow; export const expression = function self() { return self; }; export const first = () => second; @@ -2704,11 +2713,18 @@ func TestTscIncremental(t *testing.T) { } type NonNullable = "shadowed"; `), + "/home/src/workspaces/project/producer/recursive-conditional-utils.ts": stringtestutil.Dedent(` + type Recursive = T extends Array ? Recursive : T; + export const f = (): Recursive => { + return null!; + }; + `), "/home/src/workspaces/project/consumer/tsconfig.json": `{ "compilerOptions": { "strict": true, "exactOptionalPropertyTypes": true, "noEmit": true }, "references": [{ "path": "../producer" }] }`, "/home/src/workspaces/project/consumer/index.ts": stringtestutil.Dedent(` + import { conditionalAliasCopy, anonymousThisReturn } from "../producer/dist/index.js"; import { arrow, expression, first, generic, objectReturn, tupleReturn, shadowed } from "../producer/dist/index.js"; import { object, method, accessor, tuple, array, nested } from "../producer/dist/index.js"; import { memberTuple, memberArray, quoted, numeric, key, computed, union, specialized } from "../producer/dist/index.js"; @@ -2813,6 +2829,13 @@ func TestTscIncremental(t *testing.T) { const nullableOptionalLinkHasNull: null extends NullableOptionalLinkNode["next"] ? true : false = false; const nullableOptionalLinkHasUndefined: undefined extends NullableOptionalLinkNode["next"] ? true : false = true; type IsAny = 0 extends (1 & T) ? true : false; + const anonymousThisResult = anonymousThisReturn().relyingOnThis().relyingOnThis(); + const anonymousThisNotAny: IsAny = false; + const anonymousThisMethodNotAny: IsAny = false; + const conditionalAliasResult = conditionalAliasCopy(); + const conditionalNumber: number = conditionalAliasResult; + const conditionalString: string = conditionalAliasCopy(); + const conditionalNotAny: IsAny = false; const result = arrow()()(); const notAny: false = null as unknown as IsAny; const mappedNotAny: false = null as unknown as IsAny; @@ -2903,6 +2926,10 @@ func TestTscIncremental(t *testing.T) { const invalidCapturedClassValue: number = capturedClassResult.outer; const invalidCovariance: typeof covariantString = covariantUnknown.next(); const invalidContravariance: typeof contravariantUnknown = contravariantString.next(); + const invalidAnonymousThis: number = anonymousThisResult; + const invalidAnonymousThisMethod: number = anonymousThisResult.relyingOnThis; + const invalidConditionalAlias: string = conditionalAliasResult; + const invalidConditionalAliasArray: number[] = conditionalAliasResult; `), }, commandLineArgs: []string{"--build", "consumer"}, diff --git a/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.errors.txt b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.errors.txt index 3e7c3dfe38d9a..37d78659c8d7e 100644 --- a/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.errors.txt +++ b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.errors.txt @@ -426,6 +426,28 @@ recursiveStructures.ts(47,7): error TS2322: Type 'string' is not assignable to t const value: number = mixedCycle.Node.next.next.value; } +==== anonymousThisReturn.ts (0 errors) ==== + export function test() { + return { + relyingOnThis() { + return this; + }, + }; + } + test().relyingOnThis(); + +==== recursiveConditionalAliasUtils.ts (0 errors) ==== + type Recursive = T extends Array ? Recursive : T; + export const f = (): Recursive => { + return null!; + }; + +==== recursiveConditionalAliasCopy.ts (0 errors) ==== + import { f } from "./recursiveConditionalAliasUtils"; + export const a = f; + const numberValue: number = a(); + const stringValue: string = a(); + ==== anonymousBindings.ts (2 errors) ==== export const _recursive = 1; export const factory = () => function self() { return self; }; diff --git a/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.js b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.js index 4d2859d4c9013..bc76fd11752e3 100644 --- a/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.js +++ b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.js @@ -373,6 +373,28 @@ if (mixedCycle.Node) { const value: number = mixedCycle.Node.next.next.value; } +//// [anonymousThisReturn.ts] +export function test() { + return { + relyingOnThis() { + return this; + }, + }; +} +test().relyingOnThis(); + +//// [recursiveConditionalAliasUtils.ts] +type Recursive = T extends Array ? Recursive : T; +export const f = (): Recursive => { + return null!; +}; + +//// [recursiveConditionalAliasCopy.ts] +import { f } from "./recursiveConditionalAliasUtils"; +export const a = f; +const numberValue: number = a(); +const stringValue: string = a(); + //// [anonymousBindings.ts] export const _recursive = 1; export const factory = () => function self() { return self; }; @@ -752,6 +774,24 @@ export const mixedCycle = build(); if (mixedCycle.Node) { const value = mixedCycle.Node.next.next.value; } +//// [anonymousThisReturn.js] +export function test() { + return { + relyingOnThis() { + return this; + }, + }; +} +test().relyingOnThis(); +//// [recursiveConditionalAliasUtils.js] +export const f = () => { + return null; +}; +//// [recursiveConditionalAliasCopy.js] +import { f } from "./recursiveConditionalAliasUtils"; +export const a = f; +const numberValue = a(); +const stringValue = a(); //// [anonymousBindings.js] export const _recursive = 1; export const factory = () => function self() { return self; }; @@ -1573,6 +1613,21 @@ export declare const mixedCycle: { Node: false | _recursive | null; }; export {}; +//// [anonymousThisReturn.d.ts] +type _recursive = { + relyingOnThis(): _recursive; +}; +export declare function test(): { + relyingOnThis(): _recursive; +}; +export {}; +//// [recursiveConditionalAliasUtils.d.ts] +type Recursive = T extends Array ? Recursive : T; +export declare const f: () => Recursive; +export {}; +//// [recursiveConditionalAliasCopy.d.ts] +import { f } from "./recursiveConditionalAliasUtils"; +export declare const a: typeof f; //// [anonymousBindings.d.ts] type _recursive_1 = () => _recursive_1; type _recursive_2 = { diff --git a/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.symbols b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.symbols index ec5a88fc29d19..f114659577cc7 100644 --- a/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.symbols +++ b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.symbols @@ -2064,6 +2064,61 @@ if (mixedCycle.Node) { >value : Symbol(value, Decl(mixedMappedCycle.ts, 5, 41)) } +=== anonymousThisReturn.ts === +export function test() { +>test : Symbol(test, Decl(anonymousThisReturn.ts, 0, 0)) + + return { + relyingOnThis() { +>relyingOnThis : Symbol(relyingOnThis, Decl(anonymousThisReturn.ts, 1, 12)) + + return this; +>this : Symbol(__object, Decl(anonymousThisReturn.ts, 1, 10)) + + }, + }; +} +test().relyingOnThis(); +>test().relyingOnThis : Symbol(relyingOnThis, Decl(anonymousThisReturn.ts, 1, 12)) +>test : Symbol(test, Decl(anonymousThisReturn.ts, 0, 0)) +>relyingOnThis : Symbol(relyingOnThis, Decl(anonymousThisReturn.ts, 1, 12)) + +=== recursiveConditionalAliasUtils.ts === +type Recursive = T extends Array ? Recursive : T; +>Recursive : Symbol(Recursive, Decl(recursiveConditionalAliasUtils.ts, 0, 0)) +>T : Symbol(T, Decl(recursiveConditionalAliasUtils.ts, 0, 15)) +>T : Symbol(T, Decl(recursiveConditionalAliasUtils.ts, 0, 15)) +>Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --) ... and 4 more) +>V : Symbol(V, Decl(recursiveConditionalAliasUtils.ts, 0, 41)) +>Recursive : Symbol(Recursive, Decl(recursiveConditionalAliasUtils.ts, 0, 0)) +>V : Symbol(V, Decl(recursiveConditionalAliasUtils.ts, 0, 41)) +>T : Symbol(T, Decl(recursiveConditionalAliasUtils.ts, 0, 15)) + +export const f = (): Recursive => { +>f : Symbol(f, Decl(recursiveConditionalAliasUtils.ts, 1, 12)) +>T : Symbol(T, Decl(recursiveConditionalAliasUtils.ts, 1, 18)) +>Recursive : Symbol(Recursive, Decl(recursiveConditionalAliasUtils.ts, 0, 0)) +>T : Symbol(T, Decl(recursiveConditionalAliasUtils.ts, 1, 18)) + + return null!; +}; + +=== recursiveConditionalAliasCopy.ts === +import { f } from "./recursiveConditionalAliasUtils"; +>f : Symbol(f, Decl(recursiveConditionalAliasCopy.ts, 0, 8)) + +export const a = f; +>a : Symbol(a, Decl(recursiveConditionalAliasCopy.ts, 1, 12)) +>f : Symbol(f, Decl(recursiveConditionalAliasCopy.ts, 0, 8)) + +const numberValue: number = a(); +>numberValue : Symbol(numberValue, Decl(recursiveConditionalAliasCopy.ts, 2, 5)) +>a : Symbol(a, Decl(recursiveConditionalAliasCopy.ts, 1, 12)) + +const stringValue: string = a(); +>stringValue : Symbol(stringValue, Decl(recursiveConditionalAliasCopy.ts, 3, 5)) +>a : Symbol(a, Decl(recursiveConditionalAliasCopy.ts, 1, 12)) + === anonymousBindings.ts === export const _recursive = 1; >_recursive : Symbol(_recursive, Decl(anonymousBindings.ts, 0, 12)) diff --git a/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.types b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.types index 324a771b62af4..3bcafbe93413e 100644 --- a/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.types +++ b/tsc/testdata/baselines/reference/compiler/recursiveFunctionDeclarationSerialization.types @@ -2096,6 +2096,60 @@ if (mixedCycle.Node) { >value : number } +=== anonymousThisReturn.ts === +export function test() { +>test : () => { relyingOnThis(): { relyingOnThis(): any; }; } + + return { +>{ relyingOnThis() { return this; }, } : { relyingOnThis(): any; } + + relyingOnThis() { +>relyingOnThis : () => { relyingOnThis(): any; } + + return this; +>this : { relyingOnThis(): any; } + + }, + }; +} +test().relyingOnThis(); +>test().relyingOnThis() : { relyingOnThis(): any; } +>test().relyingOnThis : () => { relyingOnThis(): any; } +>test() : { relyingOnThis(): any; } +>test : () => { relyingOnThis(): { relyingOnThis(): any; }; } +>relyingOnThis : () => { relyingOnThis(): any; } + +=== recursiveConditionalAliasUtils.ts === +type Recursive = T extends Array ? Recursive : T; +>Recursive : Recursive + +export const f = (): Recursive => { +>f : () => Recursive +>(): Recursive => { return null!;} : () => Recursive + + return null!; +>null! : never + +}; + +=== recursiveConditionalAliasCopy.ts === +import { f } from "./recursiveConditionalAliasUtils"; +>f : () => T extends (infer V)[] ? V extends (infer V)[] ? any : V : T + +export const a = f; +>a : () => T extends (infer V)[] ? V extends (infer V)[] ? any : V : T +>f : () => T extends (infer V)[] ? V extends (infer V)[] ? any : V : T + +const numberValue: number = a(); +>numberValue : number +>a() : number +>a : () => T extends (infer V)[] ? V extends (infer V)[] ? any : V : T + +const stringValue: string = a(); +>stringValue : string +>a() : string +>a : () => T extends (infer V)[] ? V extends (infer V)[] ? any : V : T + === anonymousBindings.ts === export const _recursive = 1; >_recursive : 1 diff --git a/tsc/testdata/baselines/reference/tsbuild/incremental/recursive-function-declaration-consumption.js b/tsc/testdata/baselines/reference/tsbuild/incremental/recursive-function-declaration-consumption.js index b2ab4fd63380e..73b696bd09295 100644 --- a/tsc/testdata/baselines/reference/tsbuild/incremental/recursive-function-declaration-consumption.js +++ b/tsc/testdata/baselines/reference/tsbuild/incremental/recursive-function-declaration-consumption.js @@ -2,6 +2,7 @@ currentDirectory::/home/src/workspaces/project useCaseSensitiveFileNames::true Input:: //// [/home/src/workspaces/project/consumer/index.ts] *new* +import { conditionalAliasCopy, anonymousThisReturn } from "../producer/dist/index.js"; import { arrow, expression, first, generic, objectReturn, tupleReturn, shadowed } from "../producer/dist/index.js"; import { object, method, accessor, tuple, array, nested } from "../producer/dist/index.js"; import { memberTuple, memberArray, quoted, numeric, key, computed, union, specialized } from "../producer/dist/index.js"; @@ -106,6 +107,13 @@ const optionalNullableLinkHasUndefined: undefined extends OptionalNullableLinkNo const nullableOptionalLinkHasNull: null extends NullableOptionalLinkNode["next"] ? true : false = false; const nullableOptionalLinkHasUndefined: undefined extends NullableOptionalLinkNode["next"] ? true : false = true; type IsAny = 0 extends (1 & T) ? true : false; +const anonymousThisResult = anonymousThisReturn().relyingOnThis().relyingOnThis(); +const anonymousThisNotAny: IsAny = false; +const anonymousThisMethodNotAny: IsAny = false; +const conditionalAliasResult = conditionalAliasCopy(); +const conditionalNumber: number = conditionalAliasResult; +const conditionalString: string = conditionalAliasCopy(); +const conditionalNotAny: IsAny = false; const result = arrow()()(); const notAny: false = null as unknown as IsAny; const mappedNotAny: false = null as unknown as IsAny; @@ -196,12 +204,25 @@ const invalidMutualCapturedValue: boolean = mutualCaptured(1, "text").right.self const invalidCapturedClassValue: number = capturedClassResult.outer; const invalidCovariance: typeof covariantString = covariantUnknown.next(); const invalidContravariance: typeof contravariantUnknown = contravariantString.next(); +const invalidAnonymousThis: number = anonymousThisResult; +const invalidAnonymousThisMethod: number = anonymousThisResult.relyingOnThis; +const invalidConditionalAlias: string = conditionalAliasResult; +const invalidConditionalAliasArray: number[] = conditionalAliasResult; //// [/home/src/workspaces/project/consumer/tsconfig.json] *new* { "compilerOptions": { "strict": true, "exactOptionalPropertyTypes": true, "noEmit": true }, "references": [{ "path": "../producer" }] } //// [/home/src/workspaces/project/producer/index.ts] *new* +import { f } from "./recursive-conditional-utils"; +export const conditionalAliasCopy = f; +export function anonymousThisReturn() { + return { + relyingOnThis() { + return this; + }, + }; +} export const arrow = () => arrow; export const expression = function self() { return self; }; export const first = () => second; @@ -416,6 +437,11 @@ export namespace Nested { } } type NonNullable = "shadowed"; +//// [/home/src/workspaces/project/producer/recursive-conditional-utils.ts] *new* +type Recursive = T extends Array ? Recursive : T; +export const f = (): Recursive => { + return null!; +}; //// [/home/src/workspaces/project/producer/tsconfig.json] *new* { "compilerOptions": { "strict": true, "exactOptionalPropertyTypes": true, "composite": true, "outDir": "dist" } @@ -424,190 +450,210 @@ type NonNullable = "shadowed"; tsgo --build consumer ExitStatus:: DiagnosticsPresent_OutputsGenerated Output:: -consumer/index.ts:158:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. +consumer/index.ts:166:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. -158 const invalid: number = arrow()()(); +166 const invalid: number = arrow()()();    ~~~~~~~ -consumer/index.ts:159:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. +consumer/index.ts:167:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. -159 const invalidExpression: number = expression()()(); +167 const invalidExpression: number = expression()()();    ~~~~~~~~~~~~~~~~~ -consumer/index.ts:160:7 - error TS2322: Type '() => { call: ...; }' is not assignable to type 'number'. +consumer/index.ts:168:7 - error TS2322: Type '() => { call: ...; }' is not assignable to type 'number'. -160 const invalidObject: number = objectReturn().call; +168 const invalidObject: number = objectReturn().call;    ~~~~~~~~~~~~~ -consumer/index.ts:161:7 - error TS2322: Type '() => readonly [...]' is not assignable to type 'number'. +consumer/index.ts:169:7 - error TS2322: Type '() => readonly [...]' is not assignable to type 'number'. -161 const invalidTuple: number = tupleReturn()[0]; +169 const invalidTuple: number = tupleReturn()[0];    ~~~~~~~~~~~~ -consumer/index.ts:162:7 - error TS2322: Type '(shadowed: number) => ...' is not assignable to type 'number'. +consumer/index.ts:170:7 - error TS2322: Type '(shadowed: number) => ...' is not assignable to type 'number'. -162 const invalidShadowed: number = shadowed(1); +170 const invalidShadowed: number = shadowed(1);    ~~~~~~~~~~~~~~~ -consumer/index.ts:163:7 - error TS2322: Type 'number' is not assignable to type 'string'. +consumer/index.ts:171:7 - error TS2322: Type 'number' is not assignable to type 'string'. -163 const invalidObjectValue: string = object.next().value; +171 const invalidObjectValue: string = object.next().value;    ~~~~~~~~~~~~~~~~~~ -consumer/index.ts:164:7 - error TS2322: Type 'readonly [() => ...]' is not assignable to type 'number'. +consumer/index.ts:172:7 - error TS2322: Type 'readonly [() => ...]' is not assignable to type 'number'. -164 const invalidTupleValue: number = tuple[0](); +172 const invalidTupleValue: number = tuple[0]();    ~~~~~~~~~~~~~~~~~ -consumer/index.ts:165:7 - error TS2322: Type 'string' is not assignable to type 'number'. +consumer/index.ts:173:7 - error TS2322: Type 'string' is not assignable to type 'number'. -165 const invalidSpecialized: number = specialized.next().value; +173 const invalidSpecialized: number = specialized.next().value;    ~~~~~~~~~~~~~~~~~~ -consumer/index.ts:166:7 - error TS2322: Type '{ next: ...; }' is not assignable to type 'number'. +consumer/index.ts:174:7 - error TS2322: Type '{ next: ...; }' is not assignable to type 'number'. -166 const invalidMapped: number = mapped.next; +174 const invalidMapped: number = mapped.next;    ~~~~~~~~~~~~~ -consumer/index.ts:167:7 - error TS2322: Type 'string' is not assignable to type 'number'. +consumer/index.ts:175:7 - error TS2322: Type 'string' is not assignable to type 'number'. -167 const invalidAnnotation: number = viaAnnotation.next().value; +175 const invalidAnnotation: number = viaAnnotation.next().value;    ~~~~~~~~~~~~~~~~~ -consumer/index.ts:168:7 - error TS2322: Type 'string' is not assignable to type 'number'. +consumer/index.ts:176:7 - error TS2322: Type 'string' is not assignable to type 'number'. -168 const invalidLink: number = nextLink.next.value; +176 const invalidLink: number = nextLink.next.value;    ~~~~~~~~~~~ -consumer/index.ts:169:7 - error TS2322: Type 'number' is not assignable to type 'string'. +consumer/index.ts:177:7 - error TS2322: Type 'number' is not assignable to type 'string'. -169 const invalidCallable: string = nextCallable(1).link.value; +177 const invalidCallable: string = nextCallable(1).link.value;    ~~~~~~~~~~~~~~~ -consumer/index.ts:170:7 - error TS2322: Type 'string' is not assignable to type 'number'. +consumer/index.ts:178:7 - error TS2322: Type 'string' is not assignable to type 'number'. -170 const invalidHiddenValue: number = hiddenAlias.next.next.value; +178 const invalidHiddenValue: number = hiddenAlias.next.next.value;    ~~~~~~~~~~~~~~~~~~ -consumer/index.ts:171:7 - error TS2322: Type '() => (typeof Methods)["recur"]' is not assignable to type 'number'. +consumer/index.ts:179:7 - error TS2322: Type '() => (typeof Methods)["recur"]' is not assignable to type 'number'. -171 const invalidMethod: number = Methods.recur()(); +179 const invalidMethod: number = Methods.recur()();    ~~~~~~~~~~~~~ -consumer/index.ts:172:7 - error TS2322: Type '() => (typeof Methods)[typeof key]' is not assignable to type 'number'. +consumer/index.ts:180:7 - error TS2322: Type '() => (typeof Methods)[typeof key]' is not assignable to type 'number'. -172 const invalidComputedMethod: number = Methods[key]()(); +180 const invalidComputedMethod: number = Methods[key]()();    ~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:173:7 - error TS2322: Type 'string' is not assignable to type 'boolean'. +consumer/index.ts:181:7 - error TS2322: Type 'string' is not assignable to type 'boolean'. -173 const invalidNestedOuter: boolean = nestedString.outer; +181 const invalidNestedOuter: boolean = nestedString.outer;    ~~~~~~~~~~~~~~~~~~ -consumer/index.ts:174:7 - error TS2322: Type 'number' is not assignable to type 'string'. +consumer/index.ts:182:7 - error TS2322: Type 'number' is not assignable to type 'string'. -174 const invalidNestedInner: string = nestedString.inner; +182 const invalidNestedInner: string = nestedString.inner;    ~~~~~~~~~~~~~~~~~~ -consumer/index.ts:175:26 - error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. +consumer/index.ts:183:26 - error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. -175 nestedNumber.constrained("wrong"); +183 nestedNumber.constrained("wrong");    ~~~~~~~ -consumer/index.ts:176:7 - error TS2322: Type 'number' is not assignable to type 'string'. +consumer/index.ts:184:7 - error TS2322: Type 'number' is not assignable to type 'string'. -176 const invalidMappedCycleValue: string = mappedCycle.Node.next.next.value; +184 const invalidMappedCycleValue: string = mappedCycle.Node.next.next.value;    ~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:177:7 - error TS2322: Type 'string' is not assignable to type 'number'. +consumer/index.ts:185:7 - error TS2322: Type 'string' is not assignable to type 'number'. -177 const invalidMutualCycleValue: number = mutualCycle.First.next.value; +185 const invalidMutualCycleValue: number = mutualCycle.First.next.value;    ~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:178:7 - error TS2322: Type 'number' is not assignable to type 'string'. +consumer/index.ts:186:7 - error TS2322: Type 'number' is not assignable to type 'string'. -178 const invalidShadowedMappedValue: string = shadowedCycle.Node.next(1).next("text").value; +186 const invalidShadowedMappedValue: string = shadowedCycle.Node.next(1).next("text").value;    ~~~~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:179:7 - error TS2322: Type 'null' is not assignable to type '_recursive_1'. +consumer/index.ts:187:7 - error TS2322: Type 'null' is not assignable to type '_recursive_2'. -179 const invalidNullNext: OptionalNode["next"] = null; +187 const invalidNullNext: OptionalNode["next"] = null;    ~~~~~~~~~~~~~~~ -consumer/index.ts:180:7 - error TS2322: Type 'undefined' is not assignable to type '_recursive_1'. +consumer/index.ts:188:7 - error TS2322: Type 'undefined' is not assignable to type '_recursive_2'. -180 const invalidUndefinedNext: OptionalNode["next"] = undefined; +188 const invalidUndefinedNext: OptionalNode["next"] = undefined;    ~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:181:42 - error TS2531: Object is possibly 'null'. +consumer/index.ts:189:42 - error TS2531: Object is possibly 'null'. -181 const invalidNullableLinkValue: number = nullableLinks.Node!.next.value; +189 const invalidNullableLinkValue: number = nullableLinks.Node!.next.value;    ~~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:182:41 - error TS2533: Object is possibly 'null' or 'undefined'. +consumer/index.ts:190:41 - error TS2533: Object is possibly 'null' or 'undefined'. -182 const invalidNullishLinkValue: number = nullishLinks.Node!.next.value; +190 const invalidNullishLinkValue: number = nullishLinks.Node!.next.value;    ~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:183:26 - error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. +consumer/index.ts:191:26 - error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. -183 captured("text").consume(1); +191 captured("text").consume(1);    ~ -consumer/index.ts:184:7 - error TS2322: Type 'string' is not assignable to type 'number'. +consumer/index.ts:192:7 - error TS2322: Type 'string' is not assignable to type 'number'. -184 const invalidRecursiveTupleValue: number = recursiveTuple("text")[1][0]; +192 const invalidRecursiveTupleValue: number = recursiveTuple("text")[1][0];    ~~~~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:185:7 - error TS2322: Type 'number' is not assignable to type 'string'. +consumer/index.ts:193:7 - error TS2322: Type 'number' is not assignable to type 'string'. -185 const invalidCapturedOuter: string = nestedCapturedValue.outer; +193 const invalidCapturedOuter: string = nestedCapturedValue.outer;    ~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:186:7 - error TS2322: Type 'string' is not assignable to type 'number'. +consumer/index.ts:194:7 - error TS2322: Type 'string' is not assignable to type 'number'. -186 const invalidCapturedInner: number = nestedCapturedValue.inner; +194 const invalidCapturedInner: number = nestedCapturedValue.inner;    ~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:188:7 - error TS2322: Type 'boolean' is not assignable to type '_recursive_13'. +consumer/index.ts:196:7 - error TS2322: Type 'boolean' is not assignable to type '_recursive_14'. -188 const invalidMixedNext: WithoutFalseOrNullish["next"] = false; +196 const invalidMixedNext: WithoutFalseOrNullish["next"] = false;    ~~~~~~~~~~~~~~~~ -consumer/index.ts:189:7 - error TS2322: Type 'string' is not assignable to type 'number'. +consumer/index.ts:197:7 - error TS2322: Type 'string' is not assignable to type 'number'. -189 const invalidInferredCapturedValue: number = inferredCaptured<() => string>().next.value; +197 const invalidInferredCapturedValue: number = inferredCaptured<() => string>().next.value;    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:190:7 - error TS2322: Type 'number' is not assignable to type 'string'. +consumer/index.ts:198:7 - error TS2322: Type 'number' is not assignable to type 'string'. -190 const invalidMappedCapturedValue: string = mappedCaptured<{ value: number }>().value.next.value.value; +198 const invalidMappedCapturedValue: string = mappedCaptured<{ value: number }>().value.next.value.value;    ~~~~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:191:7 - error TS2322: Type 'number' is not assignable to type 'boolean'. +consumer/index.ts:199:7 - error TS2322: Type 'number' is not assignable to type 'boolean'. -191 const invalidMutualCapturedValue: boolean = mutualCaptured(1, "text").right.self.next.left; +199 const invalidMutualCapturedValue: boolean = mutualCaptured(1, "text").right.self.next.left;    ~~~~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:192:7 - error TS2322: Type 'string' is not assignable to type 'number'. +consumer/index.ts:200:7 - error TS2322: Type 'string' is not assignable to type 'number'. -192 const invalidCapturedClassValue: number = capturedClassResult.outer; +200 const invalidCapturedClassValue: number = capturedClassResult.outer;    ~~~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:193:7 - error TS2322: Type '_recursive_27' is not assignable to type '_recursive_27'. +consumer/index.ts:201:7 - error TS2322: Type '_recursive_28' is not assignable to type '_recursive_28'. Type 'unknown' is not assignable to type 'string'. -193 const invalidCovariance: typeof covariantString = covariantUnknown.next(); +201 const invalidCovariance: typeof covariantString = covariantUnknown.next();    ~~~~~~~~~~~~~~~~~ -consumer/index.ts:194:7 - error TS2322: Type '_recursive_28' is not assignable to type '_recursive_28'. +consumer/index.ts:202:7 - error TS2322: Type '_recursive_29' is not assignable to type '_recursive_29'. Type 'unknown' is not assignable to type 'string'. -194 const invalidContravariance: typeof contravariantUnknown = contravariantString.next(); +202 const invalidContravariance: typeof contravariantUnknown = contravariantString.next();    ~~~~~~~~~~~~~~~~~~~~~ +consumer/index.ts:203:7 - error TS2322: Type '_recursive_1' is not assignable to type 'number'. + +203 const invalidAnonymousThis: number = anonymousThisResult; +   ~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:204:7 - error TS2322: Type '() => _recursive_1' is not assignable to type 'number'. + +204 const invalidAnonymousThisMethod: number = anonymousThisResult.relyingOnThis; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:205:7 - error TS2322: Type 'number' is not assignable to type 'string'. + +205 const invalidConditionalAlias: string = conditionalAliasResult; +   ~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:206:7 - error TS2322: Type 'number' is not assignable to type 'number[]'. + +206 const invalidConditionalAliasArray: number[] = conditionalAliasResult; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + -Found 36 errors in the same file, starting at: consumer/index.ts:158 +Found 40 errors in the same file, starting at: consumer/index.ts:166 //// [/home/src/tslibs/TS/Lib/lib.es2026.full.d.ts] *Lib* /// @@ -650,15 +696,14 @@ declare const console: { log(msg: any): void; }; } //// [/home/src/workspaces/project/producer/dist/index.d.ts] *new* type _recursive_1 = { - value: number; - next: _recursive_1; + relyingOnThis(): _recursive_1; }; type _recursive_2 = { - value: string; + value: number; next: _recursive_2; }; type _recursive_3 = { - value: number; + value: string; next: _recursive_3; }; type _recursive_4 = { @@ -666,15 +711,15 @@ type _recursive_4 = { next: _recursive_4; }; type _recursive_5 = { - value: string; + value: number; next: _recursive_5; }; type _recursive_6 = { - value: boolean; + value: string; next: _recursive_6; }; type _recursive_7 = { - value: number; + value: boolean; next: _recursive_7; }; type _recursive_8 = { @@ -682,87 +727,96 @@ type _recursive_8 = { next: _recursive_8; }; type _recursive_9 = { - value: string; + value: number; next: _recursive_9; }; type _recursive_10 = { - value: number; - next: _recursive_10 | null; + value: string; + next: _recursive_10; }; type _recursive_11 = { value: number; - next: _recursive_11 | undefined; + next: _recursive_11 | null; }; type _recursive_12 = { value: number; - next: _recursive_12 | null | undefined; + next: _recursive_12 | undefined; }; type _recursive_13 = { value: number; - next: _recursive_13; + next: _recursive_13 | null | undefined; +}; +type _recursive_14 = { + value: number; + next: _recursive_14; }; -type _recursive_14 = () => _recursive_14; -type _recursive_15 = { +type _recursive_15 = () => _recursive_15; +type _recursive_16 = { value: T; - next: () => _recursive_15; - consume: (other: T) => _recursive_15; + next: () => _recursive_16; + consume: (other: T) => _recursive_16; }; -type _recursive_16 = { +type _recursive_17 = { outer: T; inner: U; - next: () => _recursive_16; + next: () => _recursive_17; shadow: (value: T_1) => { outer: T; inner: U; value: T_1; - next: _recursive_16; + next: _recursive_17; }; }; -type _recursive_17 = { value: T[K]; - next: () => _recursive_17; -}; -type _recursive_18 = { - value: T; - next: _recursive_18; + next: () => _recursive_18; }; type _recursive_19 = { value: T; next: _recursive_19; }; -type _recursive_20 = readonly [T, _recursive_20]; -type _recursive_21 = { +type _recursive_20 = { + value: T; + next: _recursive_20; +}; +type _recursive_21 = readonly [T, _recursive_21]; +type _recursive_22 = { value: U; - next: _recursive_21; + next: _recursive_22; }; -type _recursive_22 = { [K in keyof T]: { +type _recursive_23 = { [K in keyof T]: { value: T[K]; - next: _recursive_22; + next: _recursive_23; }; }; -type _recursive_23 = (value: U) => _recursive_23; -type _recursive_24 = { +type _recursive_24 = (value: U) => _recursive_24; +type _recursive_25 = { right: U; - self: _recursive_24; - next: _recursive_25; + self: _recursive_25; + next: _recursive_26; }; -type _recursive_25 = { +type _recursive_26 = { left: T; - next: _recursive_24; + next: _recursive_25; }; -type _recursive_26 = { +type _recursive_27 = { outer: T; inner: U; - next: () => _recursive_26; + next: () => _recursive_27; }; -type _recursive_27 = { +type _recursive_28 = { value: T; - next(): _recursive_27; + next(): _recursive_28; }; -type _recursive_28 = { +type _recursive_29 = { consume: (value: T) => void; - next(): _recursive_28; + next(): _recursive_29; +}; +import { f } from "./recursive-conditional-utils"; +export declare const conditionalAliasCopy: typeof f; +export declare function anonymousThisReturn(): { + relyingOnThis(): _recursive_1; }; export declare const arrow: () => typeof arrow; export declare const expression: () => typeof expression; @@ -1047,34 +1101,34 @@ export declare const shadowedCycle: { }; }; export declare const optionalCycle: { - Node?: _recursive_1; + Node?: _recursive_2; }; export declare const nullableCycle: { - Node: _recursive_2 | null; + Node: _recursive_3 | null; }; export declare const mixedCycles: { required: { - Node?: _recursive_3; + Node?: _recursive_4; }; optional?: { - Node?: _recursive_3; + Node?: _recursive_4; } | null; }; export declare const sharedOptionalCycles: { first: { - Node?: _recursive_4; + Node?: _recursive_5; }; second: { - Node?: _recursive_4; + Node?: _recursive_5; }; }; export declare const nullableKeys: { - "a-b": _recursive_5 | null; - 0: _recursive_6 | null; - [cycleKey]: _recursive_7 | null; + "a-b": _recursive_6 | null; + 0: _recursive_7 | null; + [cycleKey]: _recursive_8 | null; }; -export declare const nullableRoot: _recursive_8 | null; -export declare const optionalRoot: _recursive_9 | undefined; +export declare const nullableRoot: _recursive_9 | null; +export declare const optionalRoot: _recursive_10 | undefined; export declare const nullableLinks: { Node: { value: number; @@ -1082,58 +1136,67 @@ export declare const nullableLinks: { } | null; }; export declare const optionalNullableLinks: { - Node?: _recursive_10 | null; + Node?: _recursive_11 | null; }; export declare const nullableOptionalLinks: { - Node: _recursive_11 | null; + Node: _recursive_12 | null; }; export declare const nullishLinks: { - Node?: _recursive_12 | null; + Node?: _recursive_13 | null; }; export declare const mixedUnionCycle: { - Node?: false | _recursive_13 | null; + Node?: false | _recursive_14 | null; }; export declare const _recursive = 1; -export declare const factory: () => () => _recursive_14; -export declare function captured(value: T): _recursive_15; -export declare function nestedCaptured(outer: T): (inner: U) => _recursive_16; +export declare const factory: () => () => _recursive_15; +export declare function captured(value: T): _recursive_16; +export declare function nestedCaptured(outer: T): (inner: U) => _recursive_17; export declare function constrained(key: K): _recursive_17; +}, K extends keyof T>(key: K): _recursive_18; export declare function optionalCaptured(value: T): { - node?: _recursive_18 | false | null; + node?: _recursive_19 | false | null; }; -export declare function annotatedCaptured(value: T): _recursive_19; -export declare function recursiveTuple(value: T): _recursive_20; -export declare function inferredCaptured(): (T extends () => infer U ? _recursive_21 : never); -export declare function mappedCaptured(): _recursive_22; -export declare function freshGeneric(unused: T): _recursive_23; +export declare function annotatedCaptured(value: T): _recursive_20; +export declare function recursiveTuple(value: T): _recursive_21; +export declare function inferredCaptured(): (T extends () => infer U ? _recursive_22 : never); +export declare function mappedCaptured(): _recursive_23; +export declare function freshGeneric(unused: T): _recursive_24; export declare function mutualCaptured(left: T, right: U): { - left: _recursive_25; - right: _recursive_24; + left: _recursive_26; + right: _recursive_25; }; export declare class CapturedClass { value: T; constructor(value: T); - make(inner: U): _recursive_26; + make(inner: U): _recursive_27; } export declare function covariantClass(): { - new (): _recursive_27; + new (): _recursive_28; }; export declare function contravariantClass(): { - new (): _recursive_28; + new (): _recursive_29; }; export declare namespace Nested { - type _recursive_29 = { + type _recursive_30 = { value: T; - next: () => _recursive_29; + next: () => _recursive_30; }; - export function captured(value: T): _recursive_29; + export function captured(value: T): _recursive_30; export {}; } export {}; //// [/home/src/workspaces/project/producer/dist/index.js] *new* +import { f } from "./recursive-conditional-utils"; +export const conditionalAliasCopy = f; +export function anonymousThisReturn() { + return { + relyingOnThis() { + return this; + }, + }; +} export const arrow = () => arrow; export const expression = function self() { return self; }; export const first = () => second; @@ -1297,21 +1360,36 @@ export var Nested; Nested.captured = captured; })(Nested || (Nested = {})); +//// [/home/src/workspaces/project/producer/dist/recursive-conditional-utils.d.ts] *new* +type Recursive = T extends Array ? Recursive : T; +export declare const f: () => Recursive; +export {}; + +//// [/home/src/workspaces/project/producer/dist/recursive-conditional-utils.js] *new* +export const f = () => { + return null; +}; + //// [/home/src/workspaces/project/producer/dist/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2026.full.d.ts","../index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"0127123bf85d43331672f7890bd05d57-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);\ntype Show = { [K in keyof T]: T[K] } & unknown;\ntype Resolve = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? Resolve : M[K][P];\n}>;\ndeclare const build: () => { [K in keyof M]: Resolve };\nexport const mappedCycle = build<{ Node: { value: number; next: \"ref\" } }>();\nexport const mappedCycleCopy = mappedCycle;\nexport const nestedCycle = { wrapped: build<{ Node: { value: string; next: \"ref\" } }>() };\nexport const cycleKey = Symbol();\nexport const keyedCycles = build<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\nexport const sharedCycles = { first: mappedCycle, second: mappedCycle };\ntype ResolveMutual = Show<{\n [P in keyof M[K]]: M[K][P] extends { ref: infer R extends keyof M } ? ResolveMutual : M[K][P];\n}>;\ndeclare const buildMutual: () => { [K in keyof M]: ResolveMutual };\nexport const mutualCycle = buildMutual<{\n First: { value: number; next: { ref: \"Second\" } };\n Second: { value: string; next: { ref: \"First\" } };\n}>();\ntype ResolveShadowed = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? (shadowedCycle: T) => ResolveShadowed : M[K][P];\n}>;\ndeclare const buildShadowed: () => { [K in keyof M]: ResolveShadowed };\nexport const shadowedCycle = buildShadowed<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptional: () => { [K in keyof M]?: Resolve };\nexport const optionalCycle = buildOptional<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildNullable: () => { [K in keyof M]: Resolve | null };\nexport const nullableCycle = buildNullable<{ Node: { value: string; next: \"ref\" } }>();\ndeclare const wrap: (value: T) => { required: T; optional?: T | null };\nexport const mixedCycles = wrap(optionalCycle);\nexport const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle };\nexport const nullableKeys = buildNullable<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\ndeclare const buildNullableRoot: () => Resolve | null;\nexport const nullableRoot = buildNullableRoot<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalRoot: () => Resolve | undefined;\nexport const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: \"ref\" } }>();\ntype ResolveNullable = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullable | null : M[K][P];\n}>;\ndeclare const buildNullableLinks: () => { [K in keyof M]: ResolveNullable | null };\nexport const nullableLinks = buildNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalNullableLinks: () => { [K in keyof M]?: ResolveNullable | null };\nexport const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveOptional = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveOptional | undefined : M[K][P];\n}>;\ndeclare const buildNullableOptionalLinks: () => { [K in keyof M]: ResolveOptional | null };\nexport const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveNullish = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullish | null | undefined : M[K][P];\n}>;\ndeclare const buildNullishLinks: () => { [K in keyof M]?: ResolveNullish | null };\nexport const nullishLinks = buildNullishLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildMixed: () => { [K in keyof M]?: Resolve | false | null };\nexport const mixedUnionCycle = buildMixed<{ Node: { value: number; next: \"ref\" } }>();\nexport const _recursive = 1;\nexport const factory = () => function self() { return self; };\nexport function captured(value: T) {\n const node = { value, next: () => node, consume: (other: T) => node };\n return node;\n}\nexport function nestedCaptured(outer: T) {\n return (inner: U) => {\n const node = {\n outer, inner, next: () => node,\n shadow: (value: T) => ({ outer, inner, value, next: node }),\n };\n return node;\n };\n}\nexport function constrained(key: K) {\n const node = { value: null! as T[K], next: () => node };\n return node;\n}\nexport function optionalCaptured(value: T) {\n type Node = { value: T; next: Node };\n return null! as { node?: Node | false | null };\n}\nexport function annotatedCaptured(value: T) {\n const node: { value: typeof value; next: typeof node } = { value, next: null! };\n return node;\n}\nexport function recursiveTuple(value: T) {\n type Tuple = readonly [T, Tuple];\n return null! as Tuple;\n}\nexport function inferredCaptured() {\n type Node = { value: V; next: Node };\n return null! as (T extends () => infer U ? Node : never);\n}\nexport function mappedCaptured() {\n type Node = { [K in keyof T]: { value: T[K]; next: Node } };\n return null! as Node;\n}\nexport function freshGeneric(unused: T) {\n const recur = (value: U) => recur;\n return recur;\n}\nexport function mutualCaptured(left: T, right: U) {\n type Left = { left: T; next: Right };\n type Right = { right: U; self: Right; next: Left };\n return { left: null! as Left, right: null! as Right };\n}\nexport class CapturedClass {\n constructor(public value: T) {}\n make(inner: U) {\n const node = { outer: this.value, inner, next: () => node };\n return node;\n }\n}\nexport function covariantClass() {\n return class Node {\n value!: T;\n next(): Node { return this; }\n };\n}\nexport function contravariantClass() {\n return class Node {\n consume!: (value: T) => void;\n next(): Node { return this; }\n };\n}\nexport namespace Nested {\n export function captured(value: T) {\n const node = { value, next: () => node };\n return node;\n }\n}\ntype NonNullable = \"shadowed\";","signature":"850dc9bfa8257128f209cdd8c49501cd-type _recursive_1 = {\n value: number;\n next: _recursive_1;\n};\ntype _recursive_2 = {\n value: string;\n next: _recursive_2;\n};\ntype _recursive_3 = {\n value: number;\n next: _recursive_3;\n};\ntype _recursive_4 = {\n value: number;\n next: _recursive_4;\n};\ntype _recursive_5 = {\n value: string;\n next: _recursive_5;\n};\ntype _recursive_6 = {\n value: boolean;\n next: _recursive_6;\n};\ntype _recursive_7 = {\n value: number;\n next: _recursive_7;\n};\ntype _recursive_8 = {\n value: number;\n next: _recursive_8;\n};\ntype _recursive_9 = {\n value: string;\n next: _recursive_9;\n};\ntype _recursive_10 = {\n value: number;\n next: _recursive_10 | null;\n};\ntype _recursive_11 = {\n value: number;\n next: _recursive_11 | undefined;\n};\ntype _recursive_12 = {\n value: number;\n next: _recursive_12 | null | undefined;\n};\ntype _recursive_13 = {\n value: number;\n next: _recursive_13;\n};\ntype _recursive_14 = () => _recursive_14;\ntype _recursive_15 = {\n value: T;\n next: () => _recursive_15;\n consume: (other: T) => _recursive_15;\n};\ntype _recursive_16 = {\n outer: T;\n inner: U;\n next: () => _recursive_16;\n shadow: (value: T_1) => {\n outer: T;\n inner: U;\n value: T_1;\n next: _recursive_16;\n };\n};\ntype _recursive_17 = {\n value: T[K];\n next: () => _recursive_17;\n};\ntype _recursive_18 = {\n value: T;\n next: _recursive_18;\n};\ntype _recursive_19 = {\n value: T;\n next: _recursive_19;\n};\ntype _recursive_20 = readonly [T, _recursive_20];\ntype _recursive_21 = {\n value: U;\n next: _recursive_21;\n};\ntype _recursive_22 = { [K in keyof T]: {\n value: T[K];\n next: _recursive_22;\n}; };\ntype _recursive_23 = (value: U) => _recursive_23;\ntype _recursive_24 = {\n right: U;\n self: _recursive_24;\n next: _recursive_25;\n};\ntype _recursive_25 = {\n left: T;\n next: _recursive_24;\n};\ntype _recursive_26 = {\n outer: T;\n inner: U;\n next: () => _recursive_26;\n};\ntype _recursive_27 = {\n value: T;\n next(): _recursive_27;\n};\ntype _recursive_28 = {\n consume: (value: T) => void;\n next(): _recursive_28;\n};\nexport declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: () => {\n call: typeof objectReturn;\n};\nexport declare const tupleReturn: () => readonly [typeof tupleReturn];\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: {\n value: number;\n next: () => typeof object;\n};\nexport declare const method: {\n value: number;\n next(): typeof method;\n};\nexport declare const accessor: {\n value: number;\n readonly next: typeof accessor;\n};\nexport declare const tuple: readonly [() => typeof tuple];\nexport declare const array: (() => typeof array)[];\nexport declare const nested: {\n inner: {\n next(): {\n next(): (typeof nested)[\"inner\"];\n };\n };\n};\nexport declare const memberTuple: readonly [() => () => (typeof memberTuple)[0]];\nexport declare const memberArray: (() => (typeof memberArray)[0])[];\nexport declare const quoted: {\n \"a-b\": () => () => (typeof quoted)[\"a-b\"];\n};\nexport declare const numeric: {\n 0: () => () => (typeof numeric)[0];\n};\nexport declare const key: unique symbol;\nexport declare const computed: {\n [key]: () => (typeof computed)[typeof key];\n};\nexport declare const union: {\n next: () => typeof union;\n} | undefined;\nexport declare const specialized: {\n value: string;\n next: () => typeof specialized;\n};\nexport declare const indexed: {\n [key: string]: typeof indexed;\n};\nexport declare const mapped: {\n next: typeof mapped;\n};\nexport declare const viaAnnotation: {\n value: string;\n next: () => typeof viaAnnotation;\n};\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: typeof hiddenAlias;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"first\"];\n };\n second: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"second\"];\n };\n};\nexport declare const parenthesized: () => typeof parenthesized;\nexport declare const asserted: () => typeof asserted;\nexport declare class Methods {\n static recur(): (typeof Methods)[\"recur\"];\n static \"a-b\"(): (typeof Methods)[\"a-b\"];\n static [key](): (typeof Methods)[typeof key];\n recur(): Methods[\"recur\"];\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n};\nexport declare const nestedNumber: {\n nested(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n constrained(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n copied(inner: U): {\n outer: number;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n};\nexport declare const mappedCycle: {\n Node: {\n value: number;\n next: (typeof mappedCycle)[\"Node\"];\n };\n};\nexport declare const mappedCycleCopy: {\n Node: {\n value: number;\n next: (typeof mappedCycleCopy)[\"Node\"];\n };\n};\nexport declare const nestedCycle: {\n wrapped: {\n Node: {\n value: string;\n next: (typeof nestedCycle)[\"wrapped\"][\"Node\"];\n };\n };\n};\nexport declare const cycleKey: unique symbol;\nexport declare const keyedCycles: {\n \"a-b\": {\n value: string;\n next: (typeof keyedCycles)[\"a-b\"];\n };\n 0: {\n value: boolean;\n next: (typeof keyedCycles)[0];\n };\n [cycleKey]: {\n value: number;\n next: (typeof keyedCycles)[typeof cycleKey];\n };\n};\nexport declare const sharedCycles: {\n first: {\n Node: {\n value: number;\n next: (typeof sharedCycles)[\"first\"][\"Node\"];\n };\n };\n second: {\n Node: {\n value: number;\n next: (typeof sharedCycles)[\"second\"][\"Node\"];\n };\n };\n};\nexport declare const mutualCycle: {\n First: {\n value: number;\n next: {\n value: string;\n next: (typeof mutualCycle)[\"First\"];\n };\n };\n Second: {\n value: string;\n next: {\n value: number;\n next: (typeof mutualCycle)[\"Second\"];\n };\n };\n};\nexport declare const shadowedCycle: {\n Node: {\n value: number;\n next: (shadowedCycle: T) => typeof import(\".\").shadowedCycle[\"Node\"];\n };\n};\nexport declare const optionalCycle: {\n Node?: _recursive_1;\n};\nexport declare const nullableCycle: {\n Node: _recursive_2 | null;\n};\nexport declare const mixedCycles: {\n required: {\n Node?: _recursive_3;\n };\n optional?: {\n Node?: _recursive_3;\n } | null;\n};\nexport declare const sharedOptionalCycles: {\n first: {\n Node?: _recursive_4;\n };\n second: {\n Node?: _recursive_4;\n };\n};\nexport declare const nullableKeys: {\n \"a-b\": _recursive_5 | null;\n 0: _recursive_6 | null;\n [cycleKey]: _recursive_7 | null;\n};\nexport declare const nullableRoot: _recursive_8 | null;\nexport declare const optionalRoot: _recursive_9 | undefined;\nexport declare const nullableLinks: {\n Node: {\n value: number;\n next: (typeof nullableLinks)[\"Node\"];\n } | null;\n};\nexport declare const optionalNullableLinks: {\n Node?: _recursive_10 | null;\n};\nexport declare const nullableOptionalLinks: {\n Node: _recursive_11 | null;\n};\nexport declare const nullishLinks: {\n Node?: _recursive_12 | null;\n};\nexport declare const mixedUnionCycle: {\n Node?: false | _recursive_13 | null;\n};\nexport declare const _recursive = 1;\nexport declare const factory: () => () => _recursive_14;\nexport declare function captured(value: T): _recursive_15;\nexport declare function nestedCaptured(outer: T): (inner: U) => _recursive_16;\nexport declare function constrained(key: K): _recursive_17;\nexport declare function optionalCaptured(value: T): {\n node?: _recursive_18 | false | null;\n};\nexport declare function annotatedCaptured(value: T): _recursive_19;\nexport declare function recursiveTuple(value: T): _recursive_20;\nexport declare function inferredCaptured(): (T extends () => infer U ? _recursive_21 : never);\nexport declare function mappedCaptured(): _recursive_22;\nexport declare function freshGeneric(unused: T): _recursive_23;\nexport declare function mutualCaptured(left: T, right: U): {\n left: _recursive_25;\n right: _recursive_24;\n};\nexport declare class CapturedClass {\n value: T;\n constructor(value: T);\n make(inner: U): _recursive_26;\n}\nexport declare function covariantClass(): {\n new (): _recursive_27;\n};\nexport declare function contravariantClass(): {\n new (): _recursive_28;\n};\nexport declare namespace Nested {\n type _recursive_29 = {\n value: T;\n next: () => _recursive_29;\n };\n export function captured(value: T): _recursive_29;\n export {};\n}\nexport {};\n","impliedNodeFormat":1}],"options":{"composite":true,"exactOptionalPropertyTypes":true,"outDir":"./","strict":true},"latestChangedDtsFile":"./index.d.ts"} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.es2026.full.d.ts","../recursive-conditional-utils.ts","../index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"5f612a8da522ce136561c99ba028217b-type Recursive = T extends Array ? Recursive : T;\nexport const f = (): Recursive => {\n return null!;\n};","signature":"b7e553848a0db56da7124d58387f207a-type Recursive = T extends Array ? Recursive : T;\nexport declare const f: () => Recursive;\nexport {};\n","impliedNodeFormat":1},{"version":"647cf2affc61d839035c9d49279879e5-import { f } from \"./recursive-conditional-utils\";\nexport const conditionalAliasCopy = f;\nexport function anonymousThisReturn() {\n return {\n relyingOnThis() {\n return this;\n },\n };\n}\nexport const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);\ntype Show = { [K in keyof T]: T[K] } & unknown;\ntype Resolve = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? Resolve : M[K][P];\n}>;\ndeclare const build: () => { [K in keyof M]: Resolve };\nexport const mappedCycle = build<{ Node: { value: number; next: \"ref\" } }>();\nexport const mappedCycleCopy = mappedCycle;\nexport const nestedCycle = { wrapped: build<{ Node: { value: string; next: \"ref\" } }>() };\nexport const cycleKey = Symbol();\nexport const keyedCycles = build<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\nexport const sharedCycles = { first: mappedCycle, second: mappedCycle };\ntype ResolveMutual = Show<{\n [P in keyof M[K]]: M[K][P] extends { ref: infer R extends keyof M } ? ResolveMutual : M[K][P];\n}>;\ndeclare const buildMutual: () => { [K in keyof M]: ResolveMutual };\nexport const mutualCycle = buildMutual<{\n First: { value: number; next: { ref: \"Second\" } };\n Second: { value: string; next: { ref: \"First\" } };\n}>();\ntype ResolveShadowed = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? (shadowedCycle: T) => ResolveShadowed : M[K][P];\n}>;\ndeclare const buildShadowed: () => { [K in keyof M]: ResolveShadowed };\nexport const shadowedCycle = buildShadowed<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptional: () => { [K in keyof M]?: Resolve };\nexport const optionalCycle = buildOptional<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildNullable: () => { [K in keyof M]: Resolve | null };\nexport const nullableCycle = buildNullable<{ Node: { value: string; next: \"ref\" } }>();\ndeclare const wrap: (value: T) => { required: T; optional?: T | null };\nexport const mixedCycles = wrap(optionalCycle);\nexport const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle };\nexport const nullableKeys = buildNullable<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\ndeclare const buildNullableRoot: () => Resolve | null;\nexport const nullableRoot = buildNullableRoot<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalRoot: () => Resolve | undefined;\nexport const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: \"ref\" } }>();\ntype ResolveNullable = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullable | null : M[K][P];\n}>;\ndeclare const buildNullableLinks: () => { [K in keyof M]: ResolveNullable | null };\nexport const nullableLinks = buildNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalNullableLinks: () => { [K in keyof M]?: ResolveNullable | null };\nexport const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveOptional = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveOptional | undefined : M[K][P];\n}>;\ndeclare const buildNullableOptionalLinks: () => { [K in keyof M]: ResolveOptional | null };\nexport const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveNullish = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullish | null | undefined : M[K][P];\n}>;\ndeclare const buildNullishLinks: () => { [K in keyof M]?: ResolveNullish | null };\nexport const nullishLinks = buildNullishLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildMixed: () => { [K in keyof M]?: Resolve | false | null };\nexport const mixedUnionCycle = buildMixed<{ Node: { value: number; next: \"ref\" } }>();\nexport const _recursive = 1;\nexport const factory = () => function self() { return self; };\nexport function captured(value: T) {\n const node = { value, next: () => node, consume: (other: T) => node };\n return node;\n}\nexport function nestedCaptured(outer: T) {\n return (inner: U) => {\n const node = {\n outer, inner, next: () => node,\n shadow: (value: T) => ({ outer, inner, value, next: node }),\n };\n return node;\n };\n}\nexport function constrained(key: K) {\n const node = { value: null! as T[K], next: () => node };\n return node;\n}\nexport function optionalCaptured(value: T) {\n type Node = { value: T; next: Node };\n return null! as { node?: Node | false | null };\n}\nexport function annotatedCaptured(value: T) {\n const node: { value: typeof value; next: typeof node } = { value, next: null! };\n return node;\n}\nexport function recursiveTuple(value: T) {\n type Tuple = readonly [T, Tuple];\n return null! as Tuple;\n}\nexport function inferredCaptured() {\n type Node = { value: V; next: Node };\n return null! as (T extends () => infer U ? Node : never);\n}\nexport function mappedCaptured() {\n type Node = { [K in keyof T]: { value: T[K]; next: Node } };\n return null! as Node;\n}\nexport function freshGeneric(unused: T) {\n const recur = (value: U) => recur;\n return recur;\n}\nexport function mutualCaptured(left: T, right: U) {\n type Left = { left: T; next: Right };\n type Right = { right: U; self: Right; next: Left };\n return { left: null! as Left, right: null! as Right };\n}\nexport class CapturedClass {\n constructor(public value: T) {}\n make(inner: U) {\n const node = { outer: this.value, inner, next: () => node };\n return node;\n }\n}\nexport function covariantClass() {\n return class Node {\n value!: T;\n next(): Node { return this; }\n };\n}\nexport function contravariantClass() {\n return class Node {\n consume!: (value: T) => void;\n next(): Node { return this; }\n };\n}\nexport namespace Nested {\n export function captured(value: T) {\n const node = { value, next: () => node };\n return node;\n }\n}\ntype NonNullable = \"shadowed\";","signature":"31e970944add74d341dad7ccc3687e7d-type _recursive_1 = {\n relyingOnThis(): _recursive_1;\n};\ntype _recursive_2 = {\n value: number;\n next: _recursive_2;\n};\ntype _recursive_3 = {\n value: string;\n next: _recursive_3;\n};\ntype _recursive_4 = {\n value: number;\n next: _recursive_4;\n};\ntype _recursive_5 = {\n value: number;\n next: _recursive_5;\n};\ntype _recursive_6 = {\n value: string;\n next: _recursive_6;\n};\ntype _recursive_7 = {\n value: boolean;\n next: _recursive_7;\n};\ntype _recursive_8 = {\n value: number;\n next: _recursive_8;\n};\ntype _recursive_9 = {\n value: number;\n next: _recursive_9;\n};\ntype _recursive_10 = {\n value: string;\n next: _recursive_10;\n};\ntype _recursive_11 = {\n value: number;\n next: _recursive_11 | null;\n};\ntype _recursive_12 = {\n value: number;\n next: _recursive_12 | undefined;\n};\ntype _recursive_13 = {\n value: number;\n next: _recursive_13 | null | undefined;\n};\ntype _recursive_14 = {\n value: number;\n next: _recursive_14;\n};\ntype _recursive_15 = () => _recursive_15;\ntype _recursive_16 = {\n value: T;\n next: () => _recursive_16;\n consume: (other: T) => _recursive_16;\n};\ntype _recursive_17 = {\n outer: T;\n inner: U;\n next: () => _recursive_17;\n shadow: (value: T_1) => {\n outer: T;\n inner: U;\n value: T_1;\n next: _recursive_17;\n };\n};\ntype _recursive_18 = {\n value: T[K];\n next: () => _recursive_18;\n};\ntype _recursive_19 = {\n value: T;\n next: _recursive_19;\n};\ntype _recursive_20 = {\n value: T;\n next: _recursive_20;\n};\ntype _recursive_21 = readonly [T, _recursive_21];\ntype _recursive_22 = {\n value: U;\n next: _recursive_22;\n};\ntype _recursive_23 = { [K in keyof T]: {\n value: T[K];\n next: _recursive_23;\n}; };\ntype _recursive_24 = (value: U) => _recursive_24;\ntype _recursive_25 = {\n right: U;\n self: _recursive_25;\n next: _recursive_26;\n};\ntype _recursive_26 = {\n left: T;\n next: _recursive_25;\n};\ntype _recursive_27 = {\n outer: T;\n inner: U;\n next: () => _recursive_27;\n};\ntype _recursive_28 = {\n value: T;\n next(): _recursive_28;\n};\ntype _recursive_29 = {\n consume: (value: T) => void;\n next(): _recursive_29;\n};\nimport { f } from \"./recursive-conditional-utils\";\nexport declare const conditionalAliasCopy: typeof f;\nexport declare function anonymousThisReturn(): {\n relyingOnThis(): _recursive_1;\n};\nexport declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: () => {\n call: typeof objectReturn;\n};\nexport declare const tupleReturn: () => readonly [typeof tupleReturn];\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: {\n value: number;\n next: () => typeof object;\n};\nexport declare const method: {\n value: number;\n next(): typeof method;\n};\nexport declare const accessor: {\n value: number;\n readonly next: typeof accessor;\n};\nexport declare const tuple: readonly [() => typeof tuple];\nexport declare const array: (() => typeof array)[];\nexport declare const nested: {\n inner: {\n next(): {\n next(): (typeof nested)[\"inner\"];\n };\n };\n};\nexport declare const memberTuple: readonly [() => () => (typeof memberTuple)[0]];\nexport declare const memberArray: (() => (typeof memberArray)[0])[];\nexport declare const quoted: {\n \"a-b\": () => () => (typeof quoted)[\"a-b\"];\n};\nexport declare const numeric: {\n 0: () => () => (typeof numeric)[0];\n};\nexport declare const key: unique symbol;\nexport declare const computed: {\n [key]: () => (typeof computed)[typeof key];\n};\nexport declare const union: {\n next: () => typeof union;\n} | undefined;\nexport declare const specialized: {\n value: string;\n next: () => typeof specialized;\n};\nexport declare const indexed: {\n [key: string]: typeof indexed;\n};\nexport declare const mapped: {\n next: typeof mapped;\n};\nexport declare const viaAnnotation: {\n value: string;\n next: () => typeof viaAnnotation;\n};\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: typeof hiddenAlias;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"first\"];\n };\n second: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"second\"];\n };\n};\nexport declare const parenthesized: () => typeof parenthesized;\nexport declare const asserted: () => typeof asserted;\nexport declare class Methods {\n static recur(): (typeof Methods)[\"recur\"];\n static \"a-b\"(): (typeof Methods)[\"a-b\"];\n static [key](): (typeof Methods)[typeof key];\n recur(): Methods[\"recur\"];\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n};\nexport declare const nestedNumber: {\n nested(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n constrained(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n copied(inner: U): {\n outer: number;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n};\nexport declare const mappedCycle: {\n Node: {\n value: number;\n next: (typeof mappedCycle)[\"Node\"];\n };\n};\nexport declare const mappedCycleCopy: {\n Node: {\n value: number;\n next: (typeof mappedCycleCopy)[\"Node\"];\n };\n};\nexport declare const nestedCycle: {\n wrapped: {\n Node: {\n value: string;\n next: (typeof nestedCycle)[\"wrapped\"][\"Node\"];\n };\n };\n};\nexport declare const cycleKey: unique symbol;\nexport declare const keyedCycles: {\n \"a-b\": {\n value: string;\n next: (typeof keyedCycles)[\"a-b\"];\n };\n 0: {\n value: boolean;\n next: (typeof keyedCycles)[0];\n };\n [cycleKey]: {\n value: number;\n next: (typeof keyedCycles)[typeof cycleKey];\n };\n};\nexport declare const sharedCycles: {\n first: {\n Node: {\n value: number;\n next: (typeof sharedCycles)[\"first\"][\"Node\"];\n };\n };\n second: {\n Node: {\n value: number;\n next: (typeof sharedCycles)[\"second\"][\"Node\"];\n };\n };\n};\nexport declare const mutualCycle: {\n First: {\n value: number;\n next: {\n value: string;\n next: (typeof mutualCycle)[\"First\"];\n };\n };\n Second: {\n value: string;\n next: {\n value: number;\n next: (typeof mutualCycle)[\"Second\"];\n };\n };\n};\nexport declare const shadowedCycle: {\n Node: {\n value: number;\n next: (shadowedCycle: T) => typeof import(\".\").shadowedCycle[\"Node\"];\n };\n};\nexport declare const optionalCycle: {\n Node?: _recursive_2;\n};\nexport declare const nullableCycle: {\n Node: _recursive_3 | null;\n};\nexport declare const mixedCycles: {\n required: {\n Node?: _recursive_4;\n };\n optional?: {\n Node?: _recursive_4;\n } | null;\n};\nexport declare const sharedOptionalCycles: {\n first: {\n Node?: _recursive_5;\n };\n second: {\n Node?: _recursive_5;\n };\n};\nexport declare const nullableKeys: {\n \"a-b\": _recursive_6 | null;\n 0: _recursive_7 | null;\n [cycleKey]: _recursive_8 | null;\n};\nexport declare const nullableRoot: _recursive_9 | null;\nexport declare const optionalRoot: _recursive_10 | undefined;\nexport declare const nullableLinks: {\n Node: {\n value: number;\n next: (typeof nullableLinks)[\"Node\"];\n } | null;\n};\nexport declare const optionalNullableLinks: {\n Node?: _recursive_11 | null;\n};\nexport declare const nullableOptionalLinks: {\n Node: _recursive_12 | null;\n};\nexport declare const nullishLinks: {\n Node?: _recursive_13 | null;\n};\nexport declare const mixedUnionCycle: {\n Node?: false | _recursive_14 | null;\n};\nexport declare const _recursive = 1;\nexport declare const factory: () => () => _recursive_15;\nexport declare function captured(value: T): _recursive_16;\nexport declare function nestedCaptured(outer: T): (inner: U) => _recursive_17;\nexport declare function constrained(key: K): _recursive_18;\nexport declare function optionalCaptured(value: T): {\n node?: _recursive_19 | false | null;\n};\nexport declare function annotatedCaptured(value: T): _recursive_20;\nexport declare function recursiveTuple(value: T): _recursive_21;\nexport declare function inferredCaptured(): (T extends () => infer U ? _recursive_22 : never);\nexport declare function mappedCaptured(): _recursive_23;\nexport declare function freshGeneric(unused: T): _recursive_24;\nexport declare function mutualCaptured(left: T, right: U): {\n left: _recursive_26;\n right: _recursive_25;\n};\nexport declare class CapturedClass {\n value: T;\n constructor(value: T);\n make(inner: U): _recursive_27;\n}\nexport declare function covariantClass(): {\n new (): _recursive_28;\n};\nexport declare function contravariantClass(): {\n new (): _recursive_29;\n};\nexport declare namespace Nested {\n type _recursive_30 = {\n value: T;\n next: () => _recursive_30;\n };\n export function captured(value: T): _recursive_30;\n export {};\n}\nexport {};\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"composite":true,"exactOptionalPropertyTypes":true,"outDir":"./","strict":true},"referencedMap":[[3,1]],"latestChangedDtsFile":"./index.d.ts"} //// [/home/src/workspaces/project/producer/dist/tsconfig.tsbuildinfo.readable.baseline.txt] *new* { "version": "FakeTSVersion", "root": [ { "files": [ + "../recursive-conditional-utils.ts", "../index.ts" ], - "original": 2 + "original": [ + 2, + 3 + ] } ], "fileNames": [ "lib.es2026.full.d.ts", + "../recursive-conditional-utils.ts", "../index.ts" ], "fileInfos": [ @@ -1327,38 +1405,62 @@ export var Nested; "impliedNodeFormat": 1 } }, + { + "fileName": "../recursive-conditional-utils.ts", + "version": "5f612a8da522ce136561c99ba028217b-type Recursive = T extends Array ? Recursive : T;\nexport const f = (): Recursive => {\n return null!;\n};", + "signature": "b7e553848a0db56da7124d58387f207a-type Recursive = T extends Array ? Recursive : T;\nexport declare const f: () => Recursive;\nexport {};\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "5f612a8da522ce136561c99ba028217b-type Recursive = T extends Array ? Recursive : T;\nexport const f = (): Recursive => {\n return null!;\n};", + "signature": "b7e553848a0db56da7124d58387f207a-type Recursive = T extends Array ? Recursive : T;\nexport declare const f: () => Recursive;\nexport {};\n", + "impliedNodeFormat": 1 + } + }, { "fileName": "../index.ts", - "version": "0127123bf85d43331672f7890bd05d57-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);\ntype Show = { [K in keyof T]: T[K] } & unknown;\ntype Resolve = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? Resolve : M[K][P];\n}>;\ndeclare const build: () => { [K in keyof M]: Resolve };\nexport const mappedCycle = build<{ Node: { value: number; next: \"ref\" } }>();\nexport const mappedCycleCopy = mappedCycle;\nexport const nestedCycle = { wrapped: build<{ Node: { value: string; next: \"ref\" } }>() };\nexport const cycleKey = Symbol();\nexport const keyedCycles = build<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\nexport const sharedCycles = { first: mappedCycle, second: mappedCycle };\ntype ResolveMutual = Show<{\n [P in keyof M[K]]: M[K][P] extends { ref: infer R extends keyof M } ? ResolveMutual : M[K][P];\n}>;\ndeclare const buildMutual: () => { [K in keyof M]: ResolveMutual };\nexport const mutualCycle = buildMutual<{\n First: { value: number; next: { ref: \"Second\" } };\n Second: { value: string; next: { ref: \"First\" } };\n}>();\ntype ResolveShadowed = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? (shadowedCycle: T) => ResolveShadowed : M[K][P];\n}>;\ndeclare const buildShadowed: () => { [K in keyof M]: ResolveShadowed };\nexport const shadowedCycle = buildShadowed<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptional: () => { [K in keyof M]?: Resolve };\nexport const optionalCycle = buildOptional<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildNullable: () => { [K in keyof M]: Resolve | null };\nexport const nullableCycle = buildNullable<{ Node: { value: string; next: \"ref\" } }>();\ndeclare const wrap: (value: T) => { required: T; optional?: T | null };\nexport const mixedCycles = wrap(optionalCycle);\nexport const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle };\nexport const nullableKeys = buildNullable<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\ndeclare const buildNullableRoot: () => Resolve | null;\nexport const nullableRoot = buildNullableRoot<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalRoot: () => Resolve | undefined;\nexport const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: \"ref\" } }>();\ntype ResolveNullable = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullable | null : M[K][P];\n}>;\ndeclare const buildNullableLinks: () => { [K in keyof M]: ResolveNullable | null };\nexport const nullableLinks = buildNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalNullableLinks: () => { [K in keyof M]?: ResolveNullable | null };\nexport const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveOptional = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveOptional | undefined : M[K][P];\n}>;\ndeclare const buildNullableOptionalLinks: () => { [K in keyof M]: ResolveOptional | null };\nexport const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveNullish = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullish | null | undefined : M[K][P];\n}>;\ndeclare const buildNullishLinks: () => { [K in keyof M]?: ResolveNullish | null };\nexport const nullishLinks = buildNullishLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildMixed: () => { [K in keyof M]?: Resolve | false | null };\nexport const mixedUnionCycle = buildMixed<{ Node: { value: number; next: \"ref\" } }>();\nexport const _recursive = 1;\nexport const factory = () => function self() { return self; };\nexport function captured(value: T) {\n const node = { value, next: () => node, consume: (other: T) => node };\n return node;\n}\nexport function nestedCaptured(outer: T) {\n return (inner: U) => {\n const node = {\n outer, inner, next: () => node,\n shadow: (value: T) => ({ outer, inner, value, next: node }),\n };\n return node;\n };\n}\nexport function constrained(key: K) {\n const node = { value: null! as T[K], next: () => node };\n return node;\n}\nexport function optionalCaptured(value: T) {\n type Node = { value: T; next: Node };\n return null! as { node?: Node | false | null };\n}\nexport function annotatedCaptured(value: T) {\n const node: { value: typeof value; next: typeof node } = { value, next: null! };\n return node;\n}\nexport function recursiveTuple(value: T) {\n type Tuple = readonly [T, Tuple];\n return null! as Tuple;\n}\nexport function inferredCaptured() {\n type Node = { value: V; next: Node };\n return null! as (T extends () => infer U ? Node : never);\n}\nexport function mappedCaptured() {\n type Node = { [K in keyof T]: { value: T[K]; next: Node } };\n return null! as Node;\n}\nexport function freshGeneric(unused: T) {\n const recur = (value: U) => recur;\n return recur;\n}\nexport function mutualCaptured(left: T, right: U) {\n type Left = { left: T; next: Right };\n type Right = { right: U; self: Right; next: Left };\n return { left: null! as Left, right: null! as Right };\n}\nexport class CapturedClass {\n constructor(public value: T) {}\n make(inner: U) {\n const node = { outer: this.value, inner, next: () => node };\n return node;\n }\n}\nexport function covariantClass() {\n return class Node {\n value!: T;\n next(): Node { return this; }\n };\n}\nexport function contravariantClass() {\n return class Node {\n consume!: (value: T) => void;\n next(): Node { return this; }\n };\n}\nexport namespace Nested {\n export function captured(value: T) {\n const node = { value, next: () => node };\n return node;\n }\n}\ntype NonNullable = \"shadowed\";", - "signature": "850dc9bfa8257128f209cdd8c49501cd-type _recursive_1 = {\n value: number;\n next: _recursive_1;\n};\ntype _recursive_2 = {\n value: string;\n next: _recursive_2;\n};\ntype _recursive_3 = {\n value: number;\n next: _recursive_3;\n};\ntype _recursive_4 = {\n value: number;\n next: _recursive_4;\n};\ntype _recursive_5 = {\n value: string;\n next: _recursive_5;\n};\ntype _recursive_6 = {\n value: boolean;\n next: _recursive_6;\n};\ntype _recursive_7 = {\n value: number;\n next: _recursive_7;\n};\ntype _recursive_8 = {\n value: number;\n next: _recursive_8;\n};\ntype _recursive_9 = {\n value: string;\n next: _recursive_9;\n};\ntype _recursive_10 = {\n value: number;\n next: _recursive_10 | null;\n};\ntype _recursive_11 = {\n value: number;\n next: _recursive_11 | undefined;\n};\ntype _recursive_12 = {\n value: number;\n next: _recursive_12 | null | undefined;\n};\ntype _recursive_13 = {\n value: number;\n next: _recursive_13;\n};\ntype _recursive_14 = () => _recursive_14;\ntype _recursive_15 = {\n value: T;\n next: () => _recursive_15;\n consume: (other: T) => _recursive_15;\n};\ntype _recursive_16 = {\n outer: T;\n inner: U;\n next: () => _recursive_16;\n shadow: (value: T_1) => {\n outer: T;\n inner: U;\n value: T_1;\n next: _recursive_16;\n };\n};\ntype _recursive_17 = {\n value: T[K];\n next: () => _recursive_17;\n};\ntype _recursive_18 = {\n value: T;\n next: _recursive_18;\n};\ntype _recursive_19 = {\n value: T;\n next: _recursive_19;\n};\ntype _recursive_20 = readonly [T, _recursive_20];\ntype _recursive_21 = {\n value: U;\n next: _recursive_21;\n};\ntype _recursive_22 = { [K in keyof T]: {\n value: T[K];\n next: _recursive_22;\n}; };\ntype _recursive_23 = (value: U) => _recursive_23;\ntype _recursive_24 = {\n right: U;\n self: _recursive_24;\n next: _recursive_25;\n};\ntype _recursive_25 = {\n left: T;\n next: _recursive_24;\n};\ntype _recursive_26 = {\n outer: T;\n inner: U;\n next: () => _recursive_26;\n};\ntype _recursive_27 = {\n value: T;\n next(): _recursive_27;\n};\ntype _recursive_28 = {\n consume: (value: T) => void;\n next(): _recursive_28;\n};\nexport declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: () => {\n call: typeof objectReturn;\n};\nexport declare const tupleReturn: () => readonly [typeof tupleReturn];\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: {\n value: number;\n next: () => typeof object;\n};\nexport declare const method: {\n value: number;\n next(): typeof method;\n};\nexport declare const accessor: {\n value: number;\n readonly next: typeof accessor;\n};\nexport declare const tuple: readonly [() => typeof tuple];\nexport declare const array: (() => typeof array)[];\nexport declare const nested: {\n inner: {\n next(): {\n next(): (typeof nested)[\"inner\"];\n };\n };\n};\nexport declare const memberTuple: readonly [() => () => (typeof memberTuple)[0]];\nexport declare const memberArray: (() => (typeof memberArray)[0])[];\nexport declare const quoted: {\n \"a-b\": () => () => (typeof quoted)[\"a-b\"];\n};\nexport declare const numeric: {\n 0: () => () => (typeof numeric)[0];\n};\nexport declare const key: unique symbol;\nexport declare const computed: {\n [key]: () => (typeof computed)[typeof key];\n};\nexport declare const union: {\n next: () => typeof union;\n} | undefined;\nexport declare const specialized: {\n value: string;\n next: () => typeof specialized;\n};\nexport declare const indexed: {\n [key: string]: typeof indexed;\n};\nexport declare const mapped: {\n next: typeof mapped;\n};\nexport declare const viaAnnotation: {\n value: string;\n next: () => typeof viaAnnotation;\n};\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: typeof hiddenAlias;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"first\"];\n };\n second: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"second\"];\n };\n};\nexport declare const parenthesized: () => typeof parenthesized;\nexport declare const asserted: () => typeof asserted;\nexport declare class Methods {\n static recur(): (typeof Methods)[\"recur\"];\n static \"a-b\"(): (typeof Methods)[\"a-b\"];\n static [key](): (typeof Methods)[typeof key];\n recur(): Methods[\"recur\"];\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n};\nexport declare const nestedNumber: {\n nested(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n constrained(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n copied(inner: U): {\n outer: number;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n};\nexport declare const mappedCycle: {\n Node: {\n value: number;\n next: (typeof mappedCycle)[\"Node\"];\n };\n};\nexport declare const mappedCycleCopy: {\n Node: {\n value: number;\n next: (typeof mappedCycleCopy)[\"Node\"];\n };\n};\nexport declare const nestedCycle: {\n wrapped: {\n Node: {\n value: string;\n next: (typeof nestedCycle)[\"wrapped\"][\"Node\"];\n };\n };\n};\nexport declare const cycleKey: unique symbol;\nexport declare const keyedCycles: {\n \"a-b\": {\n value: string;\n next: (typeof keyedCycles)[\"a-b\"];\n };\n 0: {\n value: boolean;\n next: (typeof keyedCycles)[0];\n };\n [cycleKey]: {\n value: number;\n next: (typeof keyedCycles)[typeof cycleKey];\n };\n};\nexport declare const sharedCycles: {\n first: {\n Node: {\n value: number;\n next: (typeof sharedCycles)[\"first\"][\"Node\"];\n };\n };\n second: {\n Node: {\n value: number;\n next: (typeof sharedCycles)[\"second\"][\"Node\"];\n };\n };\n};\nexport declare const mutualCycle: {\n First: {\n value: number;\n next: {\n value: string;\n next: (typeof mutualCycle)[\"First\"];\n };\n };\n Second: {\n value: string;\n next: {\n value: number;\n next: (typeof mutualCycle)[\"Second\"];\n };\n };\n};\nexport declare const shadowedCycle: {\n Node: {\n value: number;\n next: (shadowedCycle: T) => typeof import(\".\").shadowedCycle[\"Node\"];\n };\n};\nexport declare const optionalCycle: {\n Node?: _recursive_1;\n};\nexport declare const nullableCycle: {\n Node: _recursive_2 | null;\n};\nexport declare const mixedCycles: {\n required: {\n Node?: _recursive_3;\n };\n optional?: {\n Node?: _recursive_3;\n } | null;\n};\nexport declare const sharedOptionalCycles: {\n first: {\n Node?: _recursive_4;\n };\n second: {\n Node?: _recursive_4;\n };\n};\nexport declare const nullableKeys: {\n \"a-b\": _recursive_5 | null;\n 0: _recursive_6 | null;\n [cycleKey]: _recursive_7 | null;\n};\nexport declare const nullableRoot: _recursive_8 | null;\nexport declare const optionalRoot: _recursive_9 | undefined;\nexport declare const nullableLinks: {\n Node: {\n value: number;\n next: (typeof nullableLinks)[\"Node\"];\n } | null;\n};\nexport declare const optionalNullableLinks: {\n Node?: _recursive_10 | null;\n};\nexport declare const nullableOptionalLinks: {\n Node: _recursive_11 | null;\n};\nexport declare const nullishLinks: {\n Node?: _recursive_12 | null;\n};\nexport declare const mixedUnionCycle: {\n Node?: false | _recursive_13 | null;\n};\nexport declare const _recursive = 1;\nexport declare const factory: () => () => _recursive_14;\nexport declare function captured(value: T): _recursive_15;\nexport declare function nestedCaptured(outer: T): (inner: U) => _recursive_16;\nexport declare function constrained(key: K): _recursive_17;\nexport declare function optionalCaptured(value: T): {\n node?: _recursive_18 | false | null;\n};\nexport declare function annotatedCaptured(value: T): _recursive_19;\nexport declare function recursiveTuple(value: T): _recursive_20;\nexport declare function inferredCaptured(): (T extends () => infer U ? _recursive_21 : never);\nexport declare function mappedCaptured(): _recursive_22;\nexport declare function freshGeneric(unused: T): _recursive_23;\nexport declare function mutualCaptured(left: T, right: U): {\n left: _recursive_25;\n right: _recursive_24;\n};\nexport declare class CapturedClass {\n value: T;\n constructor(value: T);\n make(inner: U): _recursive_26;\n}\nexport declare function covariantClass(): {\n new (): _recursive_27;\n};\nexport declare function contravariantClass(): {\n new (): _recursive_28;\n};\nexport declare namespace Nested {\n type _recursive_29 = {\n value: T;\n next: () => _recursive_29;\n };\n export function captured(value: T): _recursive_29;\n export {};\n}\nexport {};\n", + "version": "647cf2affc61d839035c9d49279879e5-import { f } from \"./recursive-conditional-utils\";\nexport const conditionalAliasCopy = f;\nexport function anonymousThisReturn() {\n return {\n relyingOnThis() {\n return this;\n },\n };\n}\nexport const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);\ntype Show = { [K in keyof T]: T[K] } & unknown;\ntype Resolve = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? Resolve : M[K][P];\n}>;\ndeclare const build: () => { [K in keyof M]: Resolve };\nexport const mappedCycle = build<{ Node: { value: number; next: \"ref\" } }>();\nexport const mappedCycleCopy = mappedCycle;\nexport const nestedCycle = { wrapped: build<{ Node: { value: string; next: \"ref\" } }>() };\nexport const cycleKey = Symbol();\nexport const keyedCycles = build<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\nexport const sharedCycles = { first: mappedCycle, second: mappedCycle };\ntype ResolveMutual = Show<{\n [P in keyof M[K]]: M[K][P] extends { ref: infer R extends keyof M } ? ResolveMutual : M[K][P];\n}>;\ndeclare const buildMutual: () => { [K in keyof M]: ResolveMutual };\nexport const mutualCycle = buildMutual<{\n First: { value: number; next: { ref: \"Second\" } };\n Second: { value: string; next: { ref: \"First\" } };\n}>();\ntype ResolveShadowed = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? (shadowedCycle: T) => ResolveShadowed : M[K][P];\n}>;\ndeclare const buildShadowed: () => { [K in keyof M]: ResolveShadowed };\nexport const shadowedCycle = buildShadowed<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptional: () => { [K in keyof M]?: Resolve };\nexport const optionalCycle = buildOptional<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildNullable: () => { [K in keyof M]: Resolve | null };\nexport const nullableCycle = buildNullable<{ Node: { value: string; next: \"ref\" } }>();\ndeclare const wrap: (value: T) => { required: T; optional?: T | null };\nexport const mixedCycles = wrap(optionalCycle);\nexport const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle };\nexport const nullableKeys = buildNullable<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\ndeclare const buildNullableRoot: () => Resolve | null;\nexport const nullableRoot = buildNullableRoot<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalRoot: () => Resolve | undefined;\nexport const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: \"ref\" } }>();\ntype ResolveNullable = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullable | null : M[K][P];\n}>;\ndeclare const buildNullableLinks: () => { [K in keyof M]: ResolveNullable | null };\nexport const nullableLinks = buildNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalNullableLinks: () => { [K in keyof M]?: ResolveNullable | null };\nexport const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveOptional = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveOptional | undefined : M[K][P];\n}>;\ndeclare const buildNullableOptionalLinks: () => { [K in keyof M]: ResolveOptional | null };\nexport const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveNullish = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullish | null | undefined : M[K][P];\n}>;\ndeclare const buildNullishLinks: () => { [K in keyof M]?: ResolveNullish | null };\nexport const nullishLinks = buildNullishLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildMixed: () => { [K in keyof M]?: Resolve | false | null };\nexport const mixedUnionCycle = buildMixed<{ Node: { value: number; next: \"ref\" } }>();\nexport const _recursive = 1;\nexport const factory = () => function self() { return self; };\nexport function captured(value: T) {\n const node = { value, next: () => node, consume: (other: T) => node };\n return node;\n}\nexport function nestedCaptured(outer: T) {\n return (inner: U) => {\n const node = {\n outer, inner, next: () => node,\n shadow: (value: T) => ({ outer, inner, value, next: node }),\n };\n return node;\n };\n}\nexport function constrained(key: K) {\n const node = { value: null! as T[K], next: () => node };\n return node;\n}\nexport function optionalCaptured(value: T) {\n type Node = { value: T; next: Node };\n return null! as { node?: Node | false | null };\n}\nexport function annotatedCaptured(value: T) {\n const node: { value: typeof value; next: typeof node } = { value, next: null! };\n return node;\n}\nexport function recursiveTuple(value: T) {\n type Tuple = readonly [T, Tuple];\n return null! as Tuple;\n}\nexport function inferredCaptured() {\n type Node = { value: V; next: Node };\n return null! as (T extends () => infer U ? Node : never);\n}\nexport function mappedCaptured() {\n type Node = { [K in keyof T]: { value: T[K]; next: Node } };\n return null! as Node;\n}\nexport function freshGeneric(unused: T) {\n const recur = (value: U) => recur;\n return recur;\n}\nexport function mutualCaptured(left: T, right: U) {\n type Left = { left: T; next: Right };\n type Right = { right: U; self: Right; next: Left };\n return { left: null! as Left, right: null! as Right };\n}\nexport class CapturedClass {\n constructor(public value: T) {}\n make(inner: U) {\n const node = { outer: this.value, inner, next: () => node };\n return node;\n }\n}\nexport function covariantClass() {\n return class Node {\n value!: T;\n next(): Node { return this; }\n };\n}\nexport function contravariantClass() {\n return class Node {\n consume!: (value: T) => void;\n next(): Node { return this; }\n };\n}\nexport namespace Nested {\n export function captured(value: T) {\n const node = { value, next: () => node };\n return node;\n }\n}\ntype NonNullable = \"shadowed\";", + "signature": "31e970944add74d341dad7ccc3687e7d-type _recursive_1 = {\n relyingOnThis(): _recursive_1;\n};\ntype _recursive_2 = {\n value: number;\n next: _recursive_2;\n};\ntype _recursive_3 = {\n value: string;\n next: _recursive_3;\n};\ntype _recursive_4 = {\n value: number;\n next: _recursive_4;\n};\ntype _recursive_5 = {\n value: number;\n next: _recursive_5;\n};\ntype _recursive_6 = {\n value: string;\n next: _recursive_6;\n};\ntype _recursive_7 = {\n value: boolean;\n next: _recursive_7;\n};\ntype _recursive_8 = {\n value: number;\n next: _recursive_8;\n};\ntype _recursive_9 = {\n value: number;\n next: _recursive_9;\n};\ntype _recursive_10 = {\n value: string;\n next: _recursive_10;\n};\ntype _recursive_11 = {\n value: number;\n next: _recursive_11 | null;\n};\ntype _recursive_12 = {\n value: number;\n next: _recursive_12 | undefined;\n};\ntype _recursive_13 = {\n value: number;\n next: _recursive_13 | null | undefined;\n};\ntype _recursive_14 = {\n value: number;\n next: _recursive_14;\n};\ntype _recursive_15 = () => _recursive_15;\ntype _recursive_16 = {\n value: T;\n next: () => _recursive_16;\n consume: (other: T) => _recursive_16;\n};\ntype _recursive_17 = {\n outer: T;\n inner: U;\n next: () => _recursive_17;\n shadow: (value: T_1) => {\n outer: T;\n inner: U;\n value: T_1;\n next: _recursive_17;\n };\n};\ntype _recursive_18 = {\n value: T[K];\n next: () => _recursive_18;\n};\ntype _recursive_19 = {\n value: T;\n next: _recursive_19;\n};\ntype _recursive_20 = {\n value: T;\n next: _recursive_20;\n};\ntype _recursive_21 = readonly [T, _recursive_21];\ntype _recursive_22 = {\n value: U;\n next: _recursive_22;\n};\ntype _recursive_23 = { [K in keyof T]: {\n value: T[K];\n next: _recursive_23;\n}; };\ntype _recursive_24 = (value: U) => _recursive_24;\ntype _recursive_25 = {\n right: U;\n self: _recursive_25;\n next: _recursive_26;\n};\ntype _recursive_26 = {\n left: T;\n next: _recursive_25;\n};\ntype _recursive_27 = {\n outer: T;\n inner: U;\n next: () => _recursive_27;\n};\ntype _recursive_28 = {\n value: T;\n next(): _recursive_28;\n};\ntype _recursive_29 = {\n consume: (value: T) => void;\n next(): _recursive_29;\n};\nimport { f } from \"./recursive-conditional-utils\";\nexport declare const conditionalAliasCopy: typeof f;\nexport declare function anonymousThisReturn(): {\n relyingOnThis(): _recursive_1;\n};\nexport declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: () => {\n call: typeof objectReturn;\n};\nexport declare const tupleReturn: () => readonly [typeof tupleReturn];\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: {\n value: number;\n next: () => typeof object;\n};\nexport declare const method: {\n value: number;\n next(): typeof method;\n};\nexport declare const accessor: {\n value: number;\n readonly next: typeof accessor;\n};\nexport declare const tuple: readonly [() => typeof tuple];\nexport declare const array: (() => typeof array)[];\nexport declare const nested: {\n inner: {\n next(): {\n next(): (typeof nested)[\"inner\"];\n };\n };\n};\nexport declare const memberTuple: readonly [() => () => (typeof memberTuple)[0]];\nexport declare const memberArray: (() => (typeof memberArray)[0])[];\nexport declare const quoted: {\n \"a-b\": () => () => (typeof quoted)[\"a-b\"];\n};\nexport declare const numeric: {\n 0: () => () => (typeof numeric)[0];\n};\nexport declare const key: unique symbol;\nexport declare const computed: {\n [key]: () => (typeof computed)[typeof key];\n};\nexport declare const union: {\n next: () => typeof union;\n} | undefined;\nexport declare const specialized: {\n value: string;\n next: () => typeof specialized;\n};\nexport declare const indexed: {\n [key: string]: typeof indexed;\n};\nexport declare const mapped: {\n next: typeof mapped;\n};\nexport declare const viaAnnotation: {\n value: string;\n next: () => typeof viaAnnotation;\n};\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: typeof hiddenAlias;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"first\"];\n };\n second: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"second\"];\n };\n};\nexport declare const parenthesized: () => typeof parenthesized;\nexport declare const asserted: () => typeof asserted;\nexport declare class Methods {\n static recur(): (typeof Methods)[\"recur\"];\n static \"a-b\"(): (typeof Methods)[\"a-b\"];\n static [key](): (typeof Methods)[typeof key];\n recur(): Methods[\"recur\"];\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n};\nexport declare const nestedNumber: {\n nested(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n constrained(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n copied(inner: U): {\n outer: number;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n};\nexport declare const mappedCycle: {\n Node: {\n value: number;\n next: (typeof mappedCycle)[\"Node\"];\n };\n};\nexport declare const mappedCycleCopy: {\n Node: {\n value: number;\n next: (typeof mappedCycleCopy)[\"Node\"];\n };\n};\nexport declare const nestedCycle: {\n wrapped: {\n Node: {\n value: string;\n next: (typeof nestedCycle)[\"wrapped\"][\"Node\"];\n };\n };\n};\nexport declare const cycleKey: unique symbol;\nexport declare const keyedCycles: {\n \"a-b\": {\n value: string;\n next: (typeof keyedCycles)[\"a-b\"];\n };\n 0: {\n value: boolean;\n next: (typeof keyedCycles)[0];\n };\n [cycleKey]: {\n value: number;\n next: (typeof keyedCycles)[typeof cycleKey];\n };\n};\nexport declare const sharedCycles: {\n first: {\n Node: {\n value: number;\n next: (typeof sharedCycles)[\"first\"][\"Node\"];\n };\n };\n second: {\n Node: {\n value: number;\n next: (typeof sharedCycles)[\"second\"][\"Node\"];\n };\n };\n};\nexport declare const mutualCycle: {\n First: {\n value: number;\n next: {\n value: string;\n next: (typeof mutualCycle)[\"First\"];\n };\n };\n Second: {\n value: string;\n next: {\n value: number;\n next: (typeof mutualCycle)[\"Second\"];\n };\n };\n};\nexport declare const shadowedCycle: {\n Node: {\n value: number;\n next: (shadowedCycle: T) => typeof import(\".\").shadowedCycle[\"Node\"];\n };\n};\nexport declare const optionalCycle: {\n Node?: _recursive_2;\n};\nexport declare const nullableCycle: {\n Node: _recursive_3 | null;\n};\nexport declare const mixedCycles: {\n required: {\n Node?: _recursive_4;\n };\n optional?: {\n Node?: _recursive_4;\n } | null;\n};\nexport declare const sharedOptionalCycles: {\n first: {\n Node?: _recursive_5;\n };\n second: {\n Node?: _recursive_5;\n };\n};\nexport declare const nullableKeys: {\n \"a-b\": _recursive_6 | null;\n 0: _recursive_7 | null;\n [cycleKey]: _recursive_8 | null;\n};\nexport declare const nullableRoot: _recursive_9 | null;\nexport declare const optionalRoot: _recursive_10 | undefined;\nexport declare const nullableLinks: {\n Node: {\n value: number;\n next: (typeof nullableLinks)[\"Node\"];\n } | null;\n};\nexport declare const optionalNullableLinks: {\n Node?: _recursive_11 | null;\n};\nexport declare const nullableOptionalLinks: {\n Node: _recursive_12 | null;\n};\nexport declare const nullishLinks: {\n Node?: _recursive_13 | null;\n};\nexport declare const mixedUnionCycle: {\n Node?: false | _recursive_14 | null;\n};\nexport declare const _recursive = 1;\nexport declare const factory: () => () => _recursive_15;\nexport declare function captured(value: T): _recursive_16;\nexport declare function nestedCaptured(outer: T): (inner: U) => _recursive_17;\nexport declare function constrained(key: K): _recursive_18;\nexport declare function optionalCaptured(value: T): {\n node?: _recursive_19 | false | null;\n};\nexport declare function annotatedCaptured(value: T): _recursive_20;\nexport declare function recursiveTuple(value: T): _recursive_21;\nexport declare function inferredCaptured(): (T extends () => infer U ? _recursive_22 : never);\nexport declare function mappedCaptured(): _recursive_23;\nexport declare function freshGeneric(unused: T): _recursive_24;\nexport declare function mutualCaptured(left: T, right: U): {\n left: _recursive_26;\n right: _recursive_25;\n};\nexport declare class CapturedClass {\n value: T;\n constructor(value: T);\n make(inner: U): _recursive_27;\n}\nexport declare function covariantClass(): {\n new (): _recursive_28;\n};\nexport declare function contravariantClass(): {\n new (): _recursive_29;\n};\nexport declare namespace Nested {\n type _recursive_30 = {\n value: T;\n next: () => _recursive_30;\n };\n export function captured(value: T): _recursive_30;\n export {};\n}\nexport {};\n", "impliedNodeFormat": "CommonJS", "original": { - "version": "0127123bf85d43331672f7890bd05d57-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);\ntype Show = { [K in keyof T]: T[K] } & unknown;\ntype Resolve = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? Resolve : M[K][P];\n}>;\ndeclare const build: () => { [K in keyof M]: Resolve };\nexport const mappedCycle = build<{ Node: { value: number; next: \"ref\" } }>();\nexport const mappedCycleCopy = mappedCycle;\nexport const nestedCycle = { wrapped: build<{ Node: { value: string; next: \"ref\" } }>() };\nexport const cycleKey = Symbol();\nexport const keyedCycles = build<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\nexport const sharedCycles = { first: mappedCycle, second: mappedCycle };\ntype ResolveMutual = Show<{\n [P in keyof M[K]]: M[K][P] extends { ref: infer R extends keyof M } ? ResolveMutual : M[K][P];\n}>;\ndeclare const buildMutual: () => { [K in keyof M]: ResolveMutual };\nexport const mutualCycle = buildMutual<{\n First: { value: number; next: { ref: \"Second\" } };\n Second: { value: string; next: { ref: \"First\" } };\n}>();\ntype ResolveShadowed = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? (shadowedCycle: T) => ResolveShadowed : M[K][P];\n}>;\ndeclare const buildShadowed: () => { [K in keyof M]: ResolveShadowed };\nexport const shadowedCycle = buildShadowed<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptional: () => { [K in keyof M]?: Resolve };\nexport const optionalCycle = buildOptional<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildNullable: () => { [K in keyof M]: Resolve | null };\nexport const nullableCycle = buildNullable<{ Node: { value: string; next: \"ref\" } }>();\ndeclare const wrap: (value: T) => { required: T; optional?: T | null };\nexport const mixedCycles = wrap(optionalCycle);\nexport const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle };\nexport const nullableKeys = buildNullable<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\ndeclare const buildNullableRoot: () => Resolve | null;\nexport const nullableRoot = buildNullableRoot<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalRoot: () => Resolve | undefined;\nexport const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: \"ref\" } }>();\ntype ResolveNullable = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullable | null : M[K][P];\n}>;\ndeclare const buildNullableLinks: () => { [K in keyof M]: ResolveNullable | null };\nexport const nullableLinks = buildNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalNullableLinks: () => { [K in keyof M]?: ResolveNullable | null };\nexport const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveOptional = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveOptional | undefined : M[K][P];\n}>;\ndeclare const buildNullableOptionalLinks: () => { [K in keyof M]: ResolveOptional | null };\nexport const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveNullish = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullish | null | undefined : M[K][P];\n}>;\ndeclare const buildNullishLinks: () => { [K in keyof M]?: ResolveNullish | null };\nexport const nullishLinks = buildNullishLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildMixed: () => { [K in keyof M]?: Resolve | false | null };\nexport const mixedUnionCycle = buildMixed<{ Node: { value: number; next: \"ref\" } }>();\nexport const _recursive = 1;\nexport const factory = () => function self() { return self; };\nexport function captured(value: T) {\n const node = { value, next: () => node, consume: (other: T) => node };\n return node;\n}\nexport function nestedCaptured(outer: T) {\n return (inner: U) => {\n const node = {\n outer, inner, next: () => node,\n shadow: (value: T) => ({ outer, inner, value, next: node }),\n };\n return node;\n };\n}\nexport function constrained(key: K) {\n const node = { value: null! as T[K], next: () => node };\n return node;\n}\nexport function optionalCaptured(value: T) {\n type Node = { value: T; next: Node };\n return null! as { node?: Node | false | null };\n}\nexport function annotatedCaptured(value: T) {\n const node: { value: typeof value; next: typeof node } = { value, next: null! };\n return node;\n}\nexport function recursiveTuple(value: T) {\n type Tuple = readonly [T, Tuple];\n return null! as Tuple;\n}\nexport function inferredCaptured() {\n type Node = { value: V; next: Node };\n return null! as (T extends () => infer U ? Node : never);\n}\nexport function mappedCaptured() {\n type Node = { [K in keyof T]: { value: T[K]; next: Node } };\n return null! as Node;\n}\nexport function freshGeneric(unused: T) {\n const recur = (value: U) => recur;\n return recur;\n}\nexport function mutualCaptured(left: T, right: U) {\n type Left = { left: T; next: Right };\n type Right = { right: U; self: Right; next: Left };\n return { left: null! as Left, right: null! as Right };\n}\nexport class CapturedClass {\n constructor(public value: T) {}\n make(inner: U) {\n const node = { outer: this.value, inner, next: () => node };\n return node;\n }\n}\nexport function covariantClass() {\n return class Node {\n value!: T;\n next(): Node { return this; }\n };\n}\nexport function contravariantClass() {\n return class Node {\n consume!: (value: T) => void;\n next(): Node { return this; }\n };\n}\nexport namespace Nested {\n export function captured(value: T) {\n const node = { value, next: () => node };\n return node;\n }\n}\ntype NonNullable = \"shadowed\";", - "signature": "850dc9bfa8257128f209cdd8c49501cd-type _recursive_1 = {\n value: number;\n next: _recursive_1;\n};\ntype _recursive_2 = {\n value: string;\n next: _recursive_2;\n};\ntype _recursive_3 = {\n value: number;\n next: _recursive_3;\n};\ntype _recursive_4 = {\n value: number;\n next: _recursive_4;\n};\ntype _recursive_5 = {\n value: string;\n next: _recursive_5;\n};\ntype _recursive_6 = {\n value: boolean;\n next: _recursive_6;\n};\ntype _recursive_7 = {\n value: number;\n next: _recursive_7;\n};\ntype _recursive_8 = {\n value: number;\n next: _recursive_8;\n};\ntype _recursive_9 = {\n value: string;\n next: _recursive_9;\n};\ntype _recursive_10 = {\n value: number;\n next: _recursive_10 | null;\n};\ntype _recursive_11 = {\n value: number;\n next: _recursive_11 | undefined;\n};\ntype _recursive_12 = {\n value: number;\n next: _recursive_12 | null | undefined;\n};\ntype _recursive_13 = {\n value: number;\n next: _recursive_13;\n};\ntype _recursive_14 = () => _recursive_14;\ntype _recursive_15 = {\n value: T;\n next: () => _recursive_15;\n consume: (other: T) => _recursive_15;\n};\ntype _recursive_16 = {\n outer: T;\n inner: U;\n next: () => _recursive_16;\n shadow: (value: T_1) => {\n outer: T;\n inner: U;\n value: T_1;\n next: _recursive_16;\n };\n};\ntype _recursive_17 = {\n value: T[K];\n next: () => _recursive_17;\n};\ntype _recursive_18 = {\n value: T;\n next: _recursive_18;\n};\ntype _recursive_19 = {\n value: T;\n next: _recursive_19;\n};\ntype _recursive_20 = readonly [T, _recursive_20];\ntype _recursive_21 = {\n value: U;\n next: _recursive_21;\n};\ntype _recursive_22 = { [K in keyof T]: {\n value: T[K];\n next: _recursive_22;\n}; };\ntype _recursive_23 = (value: U) => _recursive_23;\ntype _recursive_24 = {\n right: U;\n self: _recursive_24;\n next: _recursive_25;\n};\ntype _recursive_25 = {\n left: T;\n next: _recursive_24;\n};\ntype _recursive_26 = {\n outer: T;\n inner: U;\n next: () => _recursive_26;\n};\ntype _recursive_27 = {\n value: T;\n next(): _recursive_27;\n};\ntype _recursive_28 = {\n consume: (value: T) => void;\n next(): _recursive_28;\n};\nexport declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: () => {\n call: typeof objectReturn;\n};\nexport declare const tupleReturn: () => readonly [typeof tupleReturn];\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: {\n value: number;\n next: () => typeof object;\n};\nexport declare const method: {\n value: number;\n next(): typeof method;\n};\nexport declare const accessor: {\n value: number;\n readonly next: typeof accessor;\n};\nexport declare const tuple: readonly [() => typeof tuple];\nexport declare const array: (() => typeof array)[];\nexport declare const nested: {\n inner: {\n next(): {\n next(): (typeof nested)[\"inner\"];\n };\n };\n};\nexport declare const memberTuple: readonly [() => () => (typeof memberTuple)[0]];\nexport declare const memberArray: (() => (typeof memberArray)[0])[];\nexport declare const quoted: {\n \"a-b\": () => () => (typeof quoted)[\"a-b\"];\n};\nexport declare const numeric: {\n 0: () => () => (typeof numeric)[0];\n};\nexport declare const key: unique symbol;\nexport declare const computed: {\n [key]: () => (typeof computed)[typeof key];\n};\nexport declare const union: {\n next: () => typeof union;\n} | undefined;\nexport declare const specialized: {\n value: string;\n next: () => typeof specialized;\n};\nexport declare const indexed: {\n [key: string]: typeof indexed;\n};\nexport declare const mapped: {\n next: typeof mapped;\n};\nexport declare const viaAnnotation: {\n value: string;\n next: () => typeof viaAnnotation;\n};\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: typeof hiddenAlias;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"first\"];\n };\n second: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"second\"];\n };\n};\nexport declare const parenthesized: () => typeof parenthesized;\nexport declare const asserted: () => typeof asserted;\nexport declare class Methods {\n static recur(): (typeof Methods)[\"recur\"];\n static \"a-b\"(): (typeof Methods)[\"a-b\"];\n static [key](): (typeof Methods)[typeof key];\n recur(): Methods[\"recur\"];\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n};\nexport declare const nestedNumber: {\n nested(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n constrained(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n copied(inner: U): {\n outer: number;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n};\nexport declare const mappedCycle: {\n Node: {\n value: number;\n next: (typeof mappedCycle)[\"Node\"];\n };\n};\nexport declare const mappedCycleCopy: {\n Node: {\n value: number;\n next: (typeof mappedCycleCopy)[\"Node\"];\n };\n};\nexport declare const nestedCycle: {\n wrapped: {\n Node: {\n value: string;\n next: (typeof nestedCycle)[\"wrapped\"][\"Node\"];\n };\n };\n};\nexport declare const cycleKey: unique symbol;\nexport declare const keyedCycles: {\n \"a-b\": {\n value: string;\n next: (typeof keyedCycles)[\"a-b\"];\n };\n 0: {\n value: boolean;\n next: (typeof keyedCycles)[0];\n };\n [cycleKey]: {\n value: number;\n next: (typeof keyedCycles)[typeof cycleKey];\n };\n};\nexport declare const sharedCycles: {\n first: {\n Node: {\n value: number;\n next: (typeof sharedCycles)[\"first\"][\"Node\"];\n };\n };\n second: {\n Node: {\n value: number;\n next: (typeof sharedCycles)[\"second\"][\"Node\"];\n };\n };\n};\nexport declare const mutualCycle: {\n First: {\n value: number;\n next: {\n value: string;\n next: (typeof mutualCycle)[\"First\"];\n };\n };\n Second: {\n value: string;\n next: {\n value: number;\n next: (typeof mutualCycle)[\"Second\"];\n };\n };\n};\nexport declare const shadowedCycle: {\n Node: {\n value: number;\n next: (shadowedCycle: T) => typeof import(\".\").shadowedCycle[\"Node\"];\n };\n};\nexport declare const optionalCycle: {\n Node?: _recursive_1;\n};\nexport declare const nullableCycle: {\n Node: _recursive_2 | null;\n};\nexport declare const mixedCycles: {\n required: {\n Node?: _recursive_3;\n };\n optional?: {\n Node?: _recursive_3;\n } | null;\n};\nexport declare const sharedOptionalCycles: {\n first: {\n Node?: _recursive_4;\n };\n second: {\n Node?: _recursive_4;\n };\n};\nexport declare const nullableKeys: {\n \"a-b\": _recursive_5 | null;\n 0: _recursive_6 | null;\n [cycleKey]: _recursive_7 | null;\n};\nexport declare const nullableRoot: _recursive_8 | null;\nexport declare const optionalRoot: _recursive_9 | undefined;\nexport declare const nullableLinks: {\n Node: {\n value: number;\n next: (typeof nullableLinks)[\"Node\"];\n } | null;\n};\nexport declare const optionalNullableLinks: {\n Node?: _recursive_10 | null;\n};\nexport declare const nullableOptionalLinks: {\n Node: _recursive_11 | null;\n};\nexport declare const nullishLinks: {\n Node?: _recursive_12 | null;\n};\nexport declare const mixedUnionCycle: {\n Node?: false | _recursive_13 | null;\n};\nexport declare const _recursive = 1;\nexport declare const factory: () => () => _recursive_14;\nexport declare function captured(value: T): _recursive_15;\nexport declare function nestedCaptured(outer: T): (inner: U) => _recursive_16;\nexport declare function constrained(key: K): _recursive_17;\nexport declare function optionalCaptured(value: T): {\n node?: _recursive_18 | false | null;\n};\nexport declare function annotatedCaptured(value: T): _recursive_19;\nexport declare function recursiveTuple(value: T): _recursive_20;\nexport declare function inferredCaptured(): (T extends () => infer U ? _recursive_21 : never);\nexport declare function mappedCaptured(): _recursive_22;\nexport declare function freshGeneric(unused: T): _recursive_23;\nexport declare function mutualCaptured(left: T, right: U): {\n left: _recursive_25;\n right: _recursive_24;\n};\nexport declare class CapturedClass {\n value: T;\n constructor(value: T);\n make(inner: U): _recursive_26;\n}\nexport declare function covariantClass(): {\n new (): _recursive_27;\n};\nexport declare function contravariantClass(): {\n new (): _recursive_28;\n};\nexport declare namespace Nested {\n type _recursive_29 = {\n value: T;\n next: () => _recursive_29;\n };\n export function captured(value: T): _recursive_29;\n export {};\n}\nexport {};\n", + "version": "647cf2affc61d839035c9d49279879e5-import { f } from \"./recursive-conditional-utils\";\nexport const conditionalAliasCopy = f;\nexport function anonymousThisReturn() {\n return {\n relyingOnThis() {\n return this;\n },\n };\n}\nexport const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);\ntype Show = { [K in keyof T]: T[K] } & unknown;\ntype Resolve = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? Resolve : M[K][P];\n}>;\ndeclare const build: () => { [K in keyof M]: Resolve };\nexport const mappedCycle = build<{ Node: { value: number; next: \"ref\" } }>();\nexport const mappedCycleCopy = mappedCycle;\nexport const nestedCycle = { wrapped: build<{ Node: { value: string; next: \"ref\" } }>() };\nexport const cycleKey = Symbol();\nexport const keyedCycles = build<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\nexport const sharedCycles = { first: mappedCycle, second: mappedCycle };\ntype ResolveMutual = Show<{\n [P in keyof M[K]]: M[K][P] extends { ref: infer R extends keyof M } ? ResolveMutual : M[K][P];\n}>;\ndeclare const buildMutual: () => { [K in keyof M]: ResolveMutual };\nexport const mutualCycle = buildMutual<{\n First: { value: number; next: { ref: \"Second\" } };\n Second: { value: string; next: { ref: \"First\" } };\n}>();\ntype ResolveShadowed = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? (shadowedCycle: T) => ResolveShadowed : M[K][P];\n}>;\ndeclare const buildShadowed: () => { [K in keyof M]: ResolveShadowed };\nexport const shadowedCycle = buildShadowed<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptional: () => { [K in keyof M]?: Resolve };\nexport const optionalCycle = buildOptional<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildNullable: () => { [K in keyof M]: Resolve | null };\nexport const nullableCycle = buildNullable<{ Node: { value: string; next: \"ref\" } }>();\ndeclare const wrap: (value: T) => { required: T; optional?: T | null };\nexport const mixedCycles = wrap(optionalCycle);\nexport const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle };\nexport const nullableKeys = buildNullable<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\ndeclare const buildNullableRoot: () => Resolve | null;\nexport const nullableRoot = buildNullableRoot<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalRoot: () => Resolve | undefined;\nexport const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: \"ref\" } }>();\ntype ResolveNullable = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullable | null : M[K][P];\n}>;\ndeclare const buildNullableLinks: () => { [K in keyof M]: ResolveNullable | null };\nexport const nullableLinks = buildNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalNullableLinks: () => { [K in keyof M]?: ResolveNullable | null };\nexport const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveOptional = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveOptional | undefined : M[K][P];\n}>;\ndeclare const buildNullableOptionalLinks: () => { [K in keyof M]: ResolveOptional | null };\nexport const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveNullish = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullish | null | undefined : M[K][P];\n}>;\ndeclare const buildNullishLinks: () => { [K in keyof M]?: ResolveNullish | null };\nexport const nullishLinks = buildNullishLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildMixed: () => { [K in keyof M]?: Resolve | false | null };\nexport const mixedUnionCycle = buildMixed<{ Node: { value: number; next: \"ref\" } }>();\nexport const _recursive = 1;\nexport const factory = () => function self() { return self; };\nexport function captured(value: T) {\n const node = { value, next: () => node, consume: (other: T) => node };\n return node;\n}\nexport function nestedCaptured(outer: T) {\n return (inner: U) => {\n const node = {\n outer, inner, next: () => node,\n shadow: (value: T) => ({ outer, inner, value, next: node }),\n };\n return node;\n };\n}\nexport function constrained(key: K) {\n const node = { value: null! as T[K], next: () => node };\n return node;\n}\nexport function optionalCaptured(value: T) {\n type Node = { value: T; next: Node };\n return null! as { node?: Node | false | null };\n}\nexport function annotatedCaptured(value: T) {\n const node: { value: typeof value; next: typeof node } = { value, next: null! };\n return node;\n}\nexport function recursiveTuple(value: T) {\n type Tuple = readonly [T, Tuple];\n return null! as Tuple;\n}\nexport function inferredCaptured() {\n type Node = { value: V; next: Node };\n return null! as (T extends () => infer U ? Node : never);\n}\nexport function mappedCaptured() {\n type Node = { [K in keyof T]: { value: T[K]; next: Node } };\n return null! as Node;\n}\nexport function freshGeneric(unused: T) {\n const recur = (value: U) => recur;\n return recur;\n}\nexport function mutualCaptured(left: T, right: U) {\n type Left = { left: T; next: Right };\n type Right = { right: U; self: Right; next: Left };\n return { left: null! as Left, right: null! as Right };\n}\nexport class CapturedClass {\n constructor(public value: T) {}\n make(inner: U) {\n const node = { outer: this.value, inner, next: () => node };\n return node;\n }\n}\nexport function covariantClass() {\n return class Node {\n value!: T;\n next(): Node { return this; }\n };\n}\nexport function contravariantClass() {\n return class Node {\n consume!: (value: T) => void;\n next(): Node { return this; }\n };\n}\nexport namespace Nested {\n export function captured(value: T) {\n const node = { value, next: () => node };\n return node;\n }\n}\ntype NonNullable = \"shadowed\";", + "signature": "31e970944add74d341dad7ccc3687e7d-type _recursive_1 = {\n relyingOnThis(): _recursive_1;\n};\ntype _recursive_2 = {\n value: number;\n next: _recursive_2;\n};\ntype _recursive_3 = {\n value: string;\n next: _recursive_3;\n};\ntype _recursive_4 = {\n value: number;\n next: _recursive_4;\n};\ntype _recursive_5 = {\n value: number;\n next: _recursive_5;\n};\ntype _recursive_6 = {\n value: string;\n next: _recursive_6;\n};\ntype _recursive_7 = {\n value: boolean;\n next: _recursive_7;\n};\ntype _recursive_8 = {\n value: number;\n next: _recursive_8;\n};\ntype _recursive_9 = {\n value: number;\n next: _recursive_9;\n};\ntype _recursive_10 = {\n value: string;\n next: _recursive_10;\n};\ntype _recursive_11 = {\n value: number;\n next: _recursive_11 | null;\n};\ntype _recursive_12 = {\n value: number;\n next: _recursive_12 | undefined;\n};\ntype _recursive_13 = {\n value: number;\n next: _recursive_13 | null | undefined;\n};\ntype _recursive_14 = {\n value: number;\n next: _recursive_14;\n};\ntype _recursive_15 = () => _recursive_15;\ntype _recursive_16 = {\n value: T;\n next: () => _recursive_16;\n consume: (other: T) => _recursive_16;\n};\ntype _recursive_17 = {\n outer: T;\n inner: U;\n next: () => _recursive_17;\n shadow: (value: T_1) => {\n outer: T;\n inner: U;\n value: T_1;\n next: _recursive_17;\n };\n};\ntype _recursive_18 = {\n value: T[K];\n next: () => _recursive_18;\n};\ntype _recursive_19 = {\n value: T;\n next: _recursive_19;\n};\ntype _recursive_20 = {\n value: T;\n next: _recursive_20;\n};\ntype _recursive_21 = readonly [T, _recursive_21];\ntype _recursive_22 = {\n value: U;\n next: _recursive_22;\n};\ntype _recursive_23 = { [K in keyof T]: {\n value: T[K];\n next: _recursive_23;\n}; };\ntype _recursive_24 = (value: U) => _recursive_24;\ntype _recursive_25 = {\n right: U;\n self: _recursive_25;\n next: _recursive_26;\n};\ntype _recursive_26 = {\n left: T;\n next: _recursive_25;\n};\ntype _recursive_27 = {\n outer: T;\n inner: U;\n next: () => _recursive_27;\n};\ntype _recursive_28 = {\n value: T;\n next(): _recursive_28;\n};\ntype _recursive_29 = {\n consume: (value: T) => void;\n next(): _recursive_29;\n};\nimport { f } from \"./recursive-conditional-utils\";\nexport declare const conditionalAliasCopy: typeof f;\nexport declare function anonymousThisReturn(): {\n relyingOnThis(): _recursive_1;\n};\nexport declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: () => {\n call: typeof objectReturn;\n};\nexport declare const tupleReturn: () => readonly [typeof tupleReturn];\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: {\n value: number;\n next: () => typeof object;\n};\nexport declare const method: {\n value: number;\n next(): typeof method;\n};\nexport declare const accessor: {\n value: number;\n readonly next: typeof accessor;\n};\nexport declare const tuple: readonly [() => typeof tuple];\nexport declare const array: (() => typeof array)[];\nexport declare const nested: {\n inner: {\n next(): {\n next(): (typeof nested)[\"inner\"];\n };\n };\n};\nexport declare const memberTuple: readonly [() => () => (typeof memberTuple)[0]];\nexport declare const memberArray: (() => (typeof memberArray)[0])[];\nexport declare const quoted: {\n \"a-b\": () => () => (typeof quoted)[\"a-b\"];\n};\nexport declare const numeric: {\n 0: () => () => (typeof numeric)[0];\n};\nexport declare const key: unique symbol;\nexport declare const computed: {\n [key]: () => (typeof computed)[typeof key];\n};\nexport declare const union: {\n next: () => typeof union;\n} | undefined;\nexport declare const specialized: {\n value: string;\n next: () => typeof specialized;\n};\nexport declare const indexed: {\n [key: string]: typeof indexed;\n};\nexport declare const mapped: {\n next: typeof mapped;\n};\nexport declare const viaAnnotation: {\n value: string;\n next: () => typeof viaAnnotation;\n};\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: typeof hiddenAlias;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"first\"];\n };\n second: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"second\"];\n };\n};\nexport declare const parenthesized: () => typeof parenthesized;\nexport declare const asserted: () => typeof asserted;\nexport declare class Methods {\n static recur(): (typeof Methods)[\"recur\"];\n static \"a-b\"(): (typeof Methods)[\"a-b\"];\n static [key](): (typeof Methods)[typeof key];\n recur(): Methods[\"recur\"];\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n};\nexport declare const nestedNumber: {\n nested(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n constrained(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n copied(inner: U): {\n outer: number;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n};\nexport declare const mappedCycle: {\n Node: {\n value: number;\n next: (typeof mappedCycle)[\"Node\"];\n };\n};\nexport declare const mappedCycleCopy: {\n Node: {\n value: number;\n next: (typeof mappedCycleCopy)[\"Node\"];\n };\n};\nexport declare const nestedCycle: {\n wrapped: {\n Node: {\n value: string;\n next: (typeof nestedCycle)[\"wrapped\"][\"Node\"];\n };\n };\n};\nexport declare const cycleKey: unique symbol;\nexport declare const keyedCycles: {\n \"a-b\": {\n value: string;\n next: (typeof keyedCycles)[\"a-b\"];\n };\n 0: {\n value: boolean;\n next: (typeof keyedCycles)[0];\n };\n [cycleKey]: {\n value: number;\n next: (typeof keyedCycles)[typeof cycleKey];\n };\n};\nexport declare const sharedCycles: {\n first: {\n Node: {\n value: number;\n next: (typeof sharedCycles)[\"first\"][\"Node\"];\n };\n };\n second: {\n Node: {\n value: number;\n next: (typeof sharedCycles)[\"second\"][\"Node\"];\n };\n };\n};\nexport declare const mutualCycle: {\n First: {\n value: number;\n next: {\n value: string;\n next: (typeof mutualCycle)[\"First\"];\n };\n };\n Second: {\n value: string;\n next: {\n value: number;\n next: (typeof mutualCycle)[\"Second\"];\n };\n };\n};\nexport declare const shadowedCycle: {\n Node: {\n value: number;\n next: (shadowedCycle: T) => typeof import(\".\").shadowedCycle[\"Node\"];\n };\n};\nexport declare const optionalCycle: {\n Node?: _recursive_2;\n};\nexport declare const nullableCycle: {\n Node: _recursive_3 | null;\n};\nexport declare const mixedCycles: {\n required: {\n Node?: _recursive_4;\n };\n optional?: {\n Node?: _recursive_4;\n } | null;\n};\nexport declare const sharedOptionalCycles: {\n first: {\n Node?: _recursive_5;\n };\n second: {\n Node?: _recursive_5;\n };\n};\nexport declare const nullableKeys: {\n \"a-b\": _recursive_6 | null;\n 0: _recursive_7 | null;\n [cycleKey]: _recursive_8 | null;\n};\nexport declare const nullableRoot: _recursive_9 | null;\nexport declare const optionalRoot: _recursive_10 | undefined;\nexport declare const nullableLinks: {\n Node: {\n value: number;\n next: (typeof nullableLinks)[\"Node\"];\n } | null;\n};\nexport declare const optionalNullableLinks: {\n Node?: _recursive_11 | null;\n};\nexport declare const nullableOptionalLinks: {\n Node: _recursive_12 | null;\n};\nexport declare const nullishLinks: {\n Node?: _recursive_13 | null;\n};\nexport declare const mixedUnionCycle: {\n Node?: false | _recursive_14 | null;\n};\nexport declare const _recursive = 1;\nexport declare const factory: () => () => _recursive_15;\nexport declare function captured(value: T): _recursive_16;\nexport declare function nestedCaptured(outer: T): (inner: U) => _recursive_17;\nexport declare function constrained(key: K): _recursive_18;\nexport declare function optionalCaptured(value: T): {\n node?: _recursive_19 | false | null;\n};\nexport declare function annotatedCaptured(value: T): _recursive_20;\nexport declare function recursiveTuple(value: T): _recursive_21;\nexport declare function inferredCaptured(): (T extends () => infer U ? _recursive_22 : never);\nexport declare function mappedCaptured(): _recursive_23;\nexport declare function freshGeneric(unused: T): _recursive_24;\nexport declare function mutualCaptured(left: T, right: U): {\n left: _recursive_26;\n right: _recursive_25;\n};\nexport declare class CapturedClass {\n value: T;\n constructor(value: T);\n make(inner: U): _recursive_27;\n}\nexport declare function covariantClass(): {\n new (): _recursive_28;\n};\nexport declare function contravariantClass(): {\n new (): _recursive_29;\n};\nexport declare namespace Nested {\n type _recursive_30 = {\n value: T;\n next: () => _recursive_30;\n };\n export function captured(value: T): _recursive_30;\n export {};\n}\nexport {};\n", "impliedNodeFormat": 1 } } ], + "fileIdsList": [ + [ + "../recursive-conditional-utils.ts" + ] + ], "options": { "composite": true, "exactOptionalPropertyTypes": true, "outDir": "./", "strict": true }, + "referencedMap": { + "../index.ts": [ + "../recursive-conditional-utils.ts" + ] + }, "latestChangedDtsFile": "./index.d.ts", - "size": 24520 + "size": 25467 } producer/tsconfig.json:: SemanticDiagnostics:: *refresh* /home/src/tslibs/TS/Lib/lib.es2026.full.d.ts +*refresh* /home/src/workspaces/project/producer/recursive-conditional-utils.ts *refresh* /home/src/workspaces/project/producer/index.ts Signatures:: +(stored at emit) /home/src/workspaces/project/producer/recursive-conditional-utils.ts (stored at emit) /home/src/workspaces/project/producer/index.ts consumer/tsconfig.json:: SemanticDiagnostics:: *refresh* /home/src/tslibs/TS/Lib/lib.es2026.full.d.ts +*refresh* /home/src/workspaces/project/producer/dist/recursive-conditional-utils.d.ts *refresh* /home/src/workspaces/project/producer/dist/index.d.ts *refresh* /home/src/workspaces/project/consumer/index.ts Signatures:: @@ -1369,190 +1471,210 @@ Edit [0]:: no change tsgo --build consumer ExitStatus:: DiagnosticsPresent_OutputsGenerated Output:: -consumer/index.ts:158:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. +consumer/index.ts:166:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. -158 const invalid: number = arrow()()(); +166 const invalid: number = arrow()()();    ~~~~~~~ -consumer/index.ts:159:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. +consumer/index.ts:167:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. -159 const invalidExpression: number = expression()()(); +167 const invalidExpression: number = expression()()();    ~~~~~~~~~~~~~~~~~ -consumer/index.ts:160:7 - error TS2322: Type '() => { call: ...; }' is not assignable to type 'number'. +consumer/index.ts:168:7 - error TS2322: Type '() => { call: ...; }' is not assignable to type 'number'. -160 const invalidObject: number = objectReturn().call; +168 const invalidObject: number = objectReturn().call;    ~~~~~~~~~~~~~ -consumer/index.ts:161:7 - error TS2322: Type '() => readonly [...]' is not assignable to type 'number'. +consumer/index.ts:169:7 - error TS2322: Type '() => readonly [...]' is not assignable to type 'number'. -161 const invalidTuple: number = tupleReturn()[0]; +169 const invalidTuple: number = tupleReturn()[0];    ~~~~~~~~~~~~ -consumer/index.ts:162:7 - error TS2322: Type '(shadowed: number) => ...' is not assignable to type 'number'. +consumer/index.ts:170:7 - error TS2322: Type '(shadowed: number) => ...' is not assignable to type 'number'. -162 const invalidShadowed: number = shadowed(1); +170 const invalidShadowed: number = shadowed(1);    ~~~~~~~~~~~~~~~ -consumer/index.ts:163:7 - error TS2322: Type 'number' is not assignable to type 'string'. +consumer/index.ts:171:7 - error TS2322: Type 'number' is not assignable to type 'string'. -163 const invalidObjectValue: string = object.next().value; +171 const invalidObjectValue: string = object.next().value;    ~~~~~~~~~~~~~~~~~~ -consumer/index.ts:164:7 - error TS2322: Type 'readonly [() => ...]' is not assignable to type 'number'. +consumer/index.ts:172:7 - error TS2322: Type 'readonly [() => ...]' is not assignable to type 'number'. -164 const invalidTupleValue: number = tuple[0](); +172 const invalidTupleValue: number = tuple[0]();    ~~~~~~~~~~~~~~~~~ -consumer/index.ts:165:7 - error TS2322: Type 'string' is not assignable to type 'number'. +consumer/index.ts:173:7 - error TS2322: Type 'string' is not assignable to type 'number'. -165 const invalidSpecialized: number = specialized.next().value; +173 const invalidSpecialized: number = specialized.next().value;    ~~~~~~~~~~~~~~~~~~ -consumer/index.ts:166:7 - error TS2322: Type '{ next: ...; }' is not assignable to type 'number'. +consumer/index.ts:174:7 - error TS2322: Type '{ next: ...; }' is not assignable to type 'number'. -166 const invalidMapped: number = mapped.next; +174 const invalidMapped: number = mapped.next;    ~~~~~~~~~~~~~ -consumer/index.ts:167:7 - error TS2322: Type 'string' is not assignable to type 'number'. +consumer/index.ts:175:7 - error TS2322: Type 'string' is not assignable to type 'number'. -167 const invalidAnnotation: number = viaAnnotation.next().value; +175 const invalidAnnotation: number = viaAnnotation.next().value;    ~~~~~~~~~~~~~~~~~ -consumer/index.ts:168:7 - error TS2322: Type 'string' is not assignable to type 'number'. +consumer/index.ts:176:7 - error TS2322: Type 'string' is not assignable to type 'number'. -168 const invalidLink: number = nextLink.next.value; +176 const invalidLink: number = nextLink.next.value;    ~~~~~~~~~~~ -consumer/index.ts:169:7 - error TS2322: Type 'number' is not assignable to type 'string'. +consumer/index.ts:177:7 - error TS2322: Type 'number' is not assignable to type 'string'. -169 const invalidCallable: string = nextCallable(1).link.value; +177 const invalidCallable: string = nextCallable(1).link.value;    ~~~~~~~~~~~~~~~ -consumer/index.ts:170:7 - error TS2322: Type 'string' is not assignable to type 'number'. +consumer/index.ts:178:7 - error TS2322: Type 'string' is not assignable to type 'number'. -170 const invalidHiddenValue: number = hiddenAlias.next.next.value; +178 const invalidHiddenValue: number = hiddenAlias.next.next.value;    ~~~~~~~~~~~~~~~~~~ -consumer/index.ts:171:7 - error TS2322: Type '() => (typeof Methods)["recur"]' is not assignable to type 'number'. +consumer/index.ts:179:7 - error TS2322: Type '() => (typeof Methods)["recur"]' is not assignable to type 'number'. -171 const invalidMethod: number = Methods.recur()(); +179 const invalidMethod: number = Methods.recur()();    ~~~~~~~~~~~~~ -consumer/index.ts:172:7 - error TS2322: Type '() => (typeof Methods)[typeof key]' is not assignable to type 'number'. +consumer/index.ts:180:7 - error TS2322: Type '() => (typeof Methods)[typeof key]' is not assignable to type 'number'. -172 const invalidComputedMethod: number = Methods[key]()(); +180 const invalidComputedMethod: number = Methods[key]()();    ~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:173:7 - error TS2322: Type 'string' is not assignable to type 'boolean'. +consumer/index.ts:181:7 - error TS2322: Type 'string' is not assignable to type 'boolean'. -173 const invalidNestedOuter: boolean = nestedString.outer; +181 const invalidNestedOuter: boolean = nestedString.outer;    ~~~~~~~~~~~~~~~~~~ -consumer/index.ts:174:7 - error TS2322: Type 'number' is not assignable to type 'string'. +consumer/index.ts:182:7 - error TS2322: Type 'number' is not assignable to type 'string'. -174 const invalidNestedInner: string = nestedString.inner; +182 const invalidNestedInner: string = nestedString.inner;    ~~~~~~~~~~~~~~~~~~ -consumer/index.ts:175:26 - error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. +consumer/index.ts:183:26 - error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. -175 nestedNumber.constrained("wrong"); +183 nestedNumber.constrained("wrong");    ~~~~~~~ -consumer/index.ts:176:7 - error TS2322: Type 'number' is not assignable to type 'string'. +consumer/index.ts:184:7 - error TS2322: Type 'number' is not assignable to type 'string'. -176 const invalidMappedCycleValue: string = mappedCycle.Node.next.next.value; +184 const invalidMappedCycleValue: string = mappedCycle.Node.next.next.value;    ~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:177:7 - error TS2322: Type 'string' is not assignable to type 'number'. +consumer/index.ts:185:7 - error TS2322: Type 'string' is not assignable to type 'number'. -177 const invalidMutualCycleValue: number = mutualCycle.First.next.value; +185 const invalidMutualCycleValue: number = mutualCycle.First.next.value;    ~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:178:7 - error TS2322: Type 'number' is not assignable to type 'string'. +consumer/index.ts:186:7 - error TS2322: Type 'number' is not assignable to type 'string'. -178 const invalidShadowedMappedValue: string = shadowedCycle.Node.next(1).next("text").value; +186 const invalidShadowedMappedValue: string = shadowedCycle.Node.next(1).next("text").value;    ~~~~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:179:7 - error TS2322: Type 'null' is not assignable to type '_recursive_1'. +consumer/index.ts:187:7 - error TS2322: Type 'null' is not assignable to type '_recursive_2'. -179 const invalidNullNext: OptionalNode["next"] = null; +187 const invalidNullNext: OptionalNode["next"] = null;    ~~~~~~~~~~~~~~~ -consumer/index.ts:180:7 - error TS2322: Type 'undefined' is not assignable to type '_recursive_1'. +consumer/index.ts:188:7 - error TS2322: Type 'undefined' is not assignable to type '_recursive_2'. -180 const invalidUndefinedNext: OptionalNode["next"] = undefined; +188 const invalidUndefinedNext: OptionalNode["next"] = undefined;    ~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:181:42 - error TS2531: Object is possibly 'null'. +consumer/index.ts:189:42 - error TS2531: Object is possibly 'null'. -181 const invalidNullableLinkValue: number = nullableLinks.Node!.next.value; +189 const invalidNullableLinkValue: number = nullableLinks.Node!.next.value;    ~~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:182:41 - error TS2533: Object is possibly 'null' or 'undefined'. +consumer/index.ts:190:41 - error TS2533: Object is possibly 'null' or 'undefined'. -182 const invalidNullishLinkValue: number = nullishLinks.Node!.next.value; +190 const invalidNullishLinkValue: number = nullishLinks.Node!.next.value;    ~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:183:26 - error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. +consumer/index.ts:191:26 - error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. -183 captured("text").consume(1); +191 captured("text").consume(1);    ~ -consumer/index.ts:184:7 - error TS2322: Type 'string' is not assignable to type 'number'. +consumer/index.ts:192:7 - error TS2322: Type 'string' is not assignable to type 'number'. -184 const invalidRecursiveTupleValue: number = recursiveTuple("text")[1][0]; +192 const invalidRecursiveTupleValue: number = recursiveTuple("text")[1][0];    ~~~~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:185:7 - error TS2322: Type 'number' is not assignable to type 'string'. +consumer/index.ts:193:7 - error TS2322: Type 'number' is not assignable to type 'string'. -185 const invalidCapturedOuter: string = nestedCapturedValue.outer; +193 const invalidCapturedOuter: string = nestedCapturedValue.outer;    ~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:186:7 - error TS2322: Type 'string' is not assignable to type 'number'. +consumer/index.ts:194:7 - error TS2322: Type 'string' is not assignable to type 'number'. -186 const invalidCapturedInner: number = nestedCapturedValue.inner; +194 const invalidCapturedInner: number = nestedCapturedValue.inner;    ~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:188:7 - error TS2322: Type 'boolean' is not assignable to type '_recursive_13'. +consumer/index.ts:196:7 - error TS2322: Type 'boolean' is not assignable to type '_recursive_14'. -188 const invalidMixedNext: WithoutFalseOrNullish["next"] = false; +196 const invalidMixedNext: WithoutFalseOrNullish["next"] = false;    ~~~~~~~~~~~~~~~~ -consumer/index.ts:189:7 - error TS2322: Type 'string' is not assignable to type 'number'. +consumer/index.ts:197:7 - error TS2322: Type 'string' is not assignable to type 'number'. -189 const invalidInferredCapturedValue: number = inferredCaptured<() => string>().next.value; +197 const invalidInferredCapturedValue: number = inferredCaptured<() => string>().next.value;    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:190:7 - error TS2322: Type 'number' is not assignable to type 'string'. +consumer/index.ts:198:7 - error TS2322: Type 'number' is not assignable to type 'string'. -190 const invalidMappedCapturedValue: string = mappedCaptured<{ value: number }>().value.next.value.value; +198 const invalidMappedCapturedValue: string = mappedCaptured<{ value: number }>().value.next.value.value;    ~~~~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:191:7 - error TS2322: Type 'number' is not assignable to type 'boolean'. +consumer/index.ts:199:7 - error TS2322: Type 'number' is not assignable to type 'boolean'. -191 const invalidMutualCapturedValue: boolean = mutualCaptured(1, "text").right.self.next.left; +199 const invalidMutualCapturedValue: boolean = mutualCaptured(1, "text").right.self.next.left;    ~~~~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:192:7 - error TS2322: Type 'string' is not assignable to type 'number'. +consumer/index.ts:200:7 - error TS2322: Type 'string' is not assignable to type 'number'. -192 const invalidCapturedClassValue: number = capturedClassResult.outer; +200 const invalidCapturedClassValue: number = capturedClassResult.outer;    ~~~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:193:7 - error TS2322: Type '_recursive_27' is not assignable to type '_recursive_27'. +consumer/index.ts:201:7 - error TS2322: Type '_recursive_28' is not assignable to type '_recursive_28'. Type 'unknown' is not assignable to type 'string'. -193 const invalidCovariance: typeof covariantString = covariantUnknown.next(); +201 const invalidCovariance: typeof covariantString = covariantUnknown.next();    ~~~~~~~~~~~~~~~~~ -consumer/index.ts:194:7 - error TS2322: Type '_recursive_28' is not assignable to type '_recursive_28'. +consumer/index.ts:202:7 - error TS2322: Type '_recursive_29' is not assignable to type '_recursive_29'. Type 'unknown' is not assignable to type 'string'. -194 const invalidContravariance: typeof contravariantUnknown = contravariantString.next(); +202 const invalidContravariance: typeof contravariantUnknown = contravariantString.next();    ~~~~~~~~~~~~~~~~~~~~~ +consumer/index.ts:203:7 - error TS2322: Type '_recursive_1' is not assignable to type 'number'. + +203 const invalidAnonymousThis: number = anonymousThisResult; +   ~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:204:7 - error TS2322: Type '() => _recursive_1' is not assignable to type 'number'. + +204 const invalidAnonymousThisMethod: number = anonymousThisResult.relyingOnThis; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:205:7 - error TS2322: Type 'number' is not assignable to type 'string'. + +205 const invalidConditionalAlias: string = conditionalAliasResult; +   ~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:206:7 - error TS2322: Type 'number' is not assignable to type 'number[]'. + +206 const invalidConditionalAliasArray: number[] = conditionalAliasResult; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Found 36 errors in the same file, starting at: consumer/index.ts:158 + +Found 40 errors in the same file, starting at: consumer/index.ts:166 //// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo] *rewrite with same content* //// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo.readable.baseline.txt] *rewrite with same content* @@ -1560,6 +1682,7 @@ Found 36 errors in the same file, starting at: consumer/index.ts:158 consumer/tsconfig.json:: SemanticDiagnostics:: *refresh* /home/src/tslibs/TS/Lib/lib.es2026.full.d.ts +*refresh* /home/src/workspaces/project/producer/dist/recursive-conditional-utils.d.ts *refresh* /home/src/workspaces/project/producer/dist/index.d.ts *refresh* /home/src/workspaces/project/consumer/index.ts Signatures:: @@ -1567,6 +1690,15 @@ Signatures:: Edit [1]:: add a comment to the producer //// [/home/src/workspaces/project/producer/index.ts] *modified* +import { f } from "./recursive-conditional-utils"; +export const conditionalAliasCopy = f; +export function anonymousThisReturn() { + return { + relyingOnThis() { + return this; + }, + }; +} export const arrow = () => arrow; export const expression = function self() { return self; }; export const first = () => second; @@ -1787,194 +1919,223 @@ type NonNullable = "shadowed"; tsgo --build consumer ExitStatus:: DiagnosticsPresent_OutputsGenerated Output:: -consumer/index.ts:158:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. +consumer/index.ts:166:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. -158 const invalid: number = arrow()()(); +166 const invalid: number = arrow()()();    ~~~~~~~ -consumer/index.ts:159:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. +consumer/index.ts:167:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. -159 const invalidExpression: number = expression()()(); +167 const invalidExpression: number = expression()()();    ~~~~~~~~~~~~~~~~~ -consumer/index.ts:160:7 - error TS2322: Type '() => { call: ...; }' is not assignable to type 'number'. +consumer/index.ts:168:7 - error TS2322: Type '() => { call: ...; }' is not assignable to type 'number'. -160 const invalidObject: number = objectReturn().call; +168 const invalidObject: number = objectReturn().call;    ~~~~~~~~~~~~~ -consumer/index.ts:161:7 - error TS2322: Type '() => readonly [...]' is not assignable to type 'number'. +consumer/index.ts:169:7 - error TS2322: Type '() => readonly [...]' is not assignable to type 'number'. -161 const invalidTuple: number = tupleReturn()[0]; +169 const invalidTuple: number = tupleReturn()[0];    ~~~~~~~~~~~~ -consumer/index.ts:162:7 - error TS2322: Type '(shadowed: number) => ...' is not assignable to type 'number'. +consumer/index.ts:170:7 - error TS2322: Type '(shadowed: number) => ...' is not assignable to type 'number'. -162 const invalidShadowed: number = shadowed(1); +170 const invalidShadowed: number = shadowed(1);    ~~~~~~~~~~~~~~~ -consumer/index.ts:163:7 - error TS2322: Type 'number' is not assignable to type 'string'. +consumer/index.ts:171:7 - error TS2322: Type 'number' is not assignable to type 'string'. -163 const invalidObjectValue: string = object.next().value; +171 const invalidObjectValue: string = object.next().value;    ~~~~~~~~~~~~~~~~~~ -consumer/index.ts:164:7 - error TS2322: Type 'readonly [() => ...]' is not assignable to type 'number'. +consumer/index.ts:172:7 - error TS2322: Type 'readonly [() => ...]' is not assignable to type 'number'. -164 const invalidTupleValue: number = tuple[0](); +172 const invalidTupleValue: number = tuple[0]();    ~~~~~~~~~~~~~~~~~ -consumer/index.ts:165:7 - error TS2322: Type 'string' is not assignable to type 'number'. +consumer/index.ts:173:7 - error TS2322: Type 'string' is not assignable to type 'number'. -165 const invalidSpecialized: number = specialized.next().value; +173 const invalidSpecialized: number = specialized.next().value;    ~~~~~~~~~~~~~~~~~~ -consumer/index.ts:166:7 - error TS2322: Type '{ next: ...; }' is not assignable to type 'number'. +consumer/index.ts:174:7 - error TS2322: Type '{ next: ...; }' is not assignable to type 'number'. -166 const invalidMapped: number = mapped.next; +174 const invalidMapped: number = mapped.next;    ~~~~~~~~~~~~~ -consumer/index.ts:167:7 - error TS2322: Type 'string' is not assignable to type 'number'. +consumer/index.ts:175:7 - error TS2322: Type 'string' is not assignable to type 'number'. -167 const invalidAnnotation: number = viaAnnotation.next().value; +175 const invalidAnnotation: number = viaAnnotation.next().value;    ~~~~~~~~~~~~~~~~~ -consumer/index.ts:168:7 - error TS2322: Type 'string' is not assignable to type 'number'. +consumer/index.ts:176:7 - error TS2322: Type 'string' is not assignable to type 'number'. -168 const invalidLink: number = nextLink.next.value; +176 const invalidLink: number = nextLink.next.value;    ~~~~~~~~~~~ -consumer/index.ts:169:7 - error TS2322: Type 'number' is not assignable to type 'string'. +consumer/index.ts:177:7 - error TS2322: Type 'number' is not assignable to type 'string'. -169 const invalidCallable: string = nextCallable(1).link.value; +177 const invalidCallable: string = nextCallable(1).link.value;    ~~~~~~~~~~~~~~~ -consumer/index.ts:170:7 - error TS2322: Type 'string' is not assignable to type 'number'. +consumer/index.ts:178:7 - error TS2322: Type 'string' is not assignable to type 'number'. -170 const invalidHiddenValue: number = hiddenAlias.next.next.value; +178 const invalidHiddenValue: number = hiddenAlias.next.next.value;    ~~~~~~~~~~~~~~~~~~ -consumer/index.ts:171:7 - error TS2322: Type '() => (typeof Methods)["recur"]' is not assignable to type 'number'. +consumer/index.ts:179:7 - error TS2322: Type '() => (typeof Methods)["recur"]' is not assignable to type 'number'. -171 const invalidMethod: number = Methods.recur()(); +179 const invalidMethod: number = Methods.recur()();    ~~~~~~~~~~~~~ -consumer/index.ts:172:7 - error TS2322: Type '() => (typeof Methods)[typeof key]' is not assignable to type 'number'. +consumer/index.ts:180:7 - error TS2322: Type '() => (typeof Methods)[typeof key]' is not assignable to type 'number'. -172 const invalidComputedMethod: number = Methods[key]()(); +180 const invalidComputedMethod: number = Methods[key]()();    ~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:173:7 - error TS2322: Type 'string' is not assignable to type 'boolean'. +consumer/index.ts:181:7 - error TS2322: Type 'string' is not assignable to type 'boolean'. -173 const invalidNestedOuter: boolean = nestedString.outer; +181 const invalidNestedOuter: boolean = nestedString.outer;    ~~~~~~~~~~~~~~~~~~ -consumer/index.ts:174:7 - error TS2322: Type 'number' is not assignable to type 'string'. +consumer/index.ts:182:7 - error TS2322: Type 'number' is not assignable to type 'string'. -174 const invalidNestedInner: string = nestedString.inner; +182 const invalidNestedInner: string = nestedString.inner;    ~~~~~~~~~~~~~~~~~~ -consumer/index.ts:175:26 - error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. +consumer/index.ts:183:26 - error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. -175 nestedNumber.constrained("wrong"); +183 nestedNumber.constrained("wrong");    ~~~~~~~ -consumer/index.ts:176:7 - error TS2322: Type 'number' is not assignable to type 'string'. +consumer/index.ts:184:7 - error TS2322: Type 'number' is not assignable to type 'string'. -176 const invalidMappedCycleValue: string = mappedCycle.Node.next.next.value; +184 const invalidMappedCycleValue: string = mappedCycle.Node.next.next.value;    ~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:177:7 - error TS2322: Type 'string' is not assignable to type 'number'. +consumer/index.ts:185:7 - error TS2322: Type 'string' is not assignable to type 'number'. -177 const invalidMutualCycleValue: number = mutualCycle.First.next.value; +185 const invalidMutualCycleValue: number = mutualCycle.First.next.value;    ~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:178:7 - error TS2322: Type 'number' is not assignable to type 'string'. +consumer/index.ts:186:7 - error TS2322: Type 'number' is not assignable to type 'string'. -178 const invalidShadowedMappedValue: string = shadowedCycle.Node.next(1).next("text").value; +186 const invalidShadowedMappedValue: string = shadowedCycle.Node.next(1).next("text").value;    ~~~~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:179:7 - error TS2322: Type 'null' is not assignable to type '_recursive_1'. +consumer/index.ts:187:7 - error TS2322: Type 'null' is not assignable to type '_recursive_2'. -179 const invalidNullNext: OptionalNode["next"] = null; +187 const invalidNullNext: OptionalNode["next"] = null;    ~~~~~~~~~~~~~~~ -consumer/index.ts:180:7 - error TS2322: Type 'undefined' is not assignable to type '_recursive_1'. +consumer/index.ts:188:7 - error TS2322: Type 'undefined' is not assignable to type '_recursive_2'. -180 const invalidUndefinedNext: OptionalNode["next"] = undefined; +188 const invalidUndefinedNext: OptionalNode["next"] = undefined;    ~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:181:42 - error TS2531: Object is possibly 'null'. +consumer/index.ts:189:42 - error TS2531: Object is possibly 'null'. -181 const invalidNullableLinkValue: number = nullableLinks.Node!.next.value; +189 const invalidNullableLinkValue: number = nullableLinks.Node!.next.value;    ~~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:182:41 - error TS2533: Object is possibly 'null' or 'undefined'. +consumer/index.ts:190:41 - error TS2533: Object is possibly 'null' or 'undefined'. -182 const invalidNullishLinkValue: number = nullishLinks.Node!.next.value; +190 const invalidNullishLinkValue: number = nullishLinks.Node!.next.value;    ~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:183:26 - error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. +consumer/index.ts:191:26 - error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. -183 captured("text").consume(1); +191 captured("text").consume(1);    ~ -consumer/index.ts:184:7 - error TS2322: Type 'string' is not assignable to type 'number'. +consumer/index.ts:192:7 - error TS2322: Type 'string' is not assignable to type 'number'. -184 const invalidRecursiveTupleValue: number = recursiveTuple("text")[1][0]; +192 const invalidRecursiveTupleValue: number = recursiveTuple("text")[1][0];    ~~~~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:185:7 - error TS2322: Type 'number' is not assignable to type 'string'. +consumer/index.ts:193:7 - error TS2322: Type 'number' is not assignable to type 'string'. -185 const invalidCapturedOuter: string = nestedCapturedValue.outer; +193 const invalidCapturedOuter: string = nestedCapturedValue.outer;    ~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:186:7 - error TS2322: Type 'string' is not assignable to type 'number'. +consumer/index.ts:194:7 - error TS2322: Type 'string' is not assignable to type 'number'. -186 const invalidCapturedInner: number = nestedCapturedValue.inner; +194 const invalidCapturedInner: number = nestedCapturedValue.inner;    ~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:188:7 - error TS2322: Type 'boolean' is not assignable to type '_recursive_13'. +consumer/index.ts:196:7 - error TS2322: Type 'boolean' is not assignable to type '_recursive_14'. -188 const invalidMixedNext: WithoutFalseOrNullish["next"] = false; +196 const invalidMixedNext: WithoutFalseOrNullish["next"] = false;    ~~~~~~~~~~~~~~~~ -consumer/index.ts:189:7 - error TS2322: Type 'string' is not assignable to type 'number'. +consumer/index.ts:197:7 - error TS2322: Type 'string' is not assignable to type 'number'. -189 const invalidInferredCapturedValue: number = inferredCaptured<() => string>().next.value; +197 const invalidInferredCapturedValue: number = inferredCaptured<() => string>().next.value;    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:190:7 - error TS2322: Type 'number' is not assignable to type 'string'. +consumer/index.ts:198:7 - error TS2322: Type 'number' is not assignable to type 'string'. -190 const invalidMappedCapturedValue: string = mappedCaptured<{ value: number }>().value.next.value.value; +198 const invalidMappedCapturedValue: string = mappedCaptured<{ value: number }>().value.next.value.value;    ~~~~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:191:7 - error TS2322: Type 'number' is not assignable to type 'boolean'. +consumer/index.ts:199:7 - error TS2322: Type 'number' is not assignable to type 'boolean'. -191 const invalidMutualCapturedValue: boolean = mutualCaptured(1, "text").right.self.next.left; +199 const invalidMutualCapturedValue: boolean = mutualCaptured(1, "text").right.self.next.left;    ~~~~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:192:7 - error TS2322: Type 'string' is not assignable to type 'number'. +consumer/index.ts:200:7 - error TS2322: Type 'string' is not assignable to type 'number'. -192 const invalidCapturedClassValue: number = capturedClassResult.outer; +200 const invalidCapturedClassValue: number = capturedClassResult.outer;    ~~~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:193:7 - error TS2322: Type '_recursive_27' is not assignable to type '_recursive_27'. +consumer/index.ts:201:7 - error TS2322: Type '_recursive_28' is not assignable to type '_recursive_28'. Type 'unknown' is not assignable to type 'string'. -193 const invalidCovariance: typeof covariantString = covariantUnknown.next(); +201 const invalidCovariance: typeof covariantString = covariantUnknown.next();    ~~~~~~~~~~~~~~~~~ -consumer/index.ts:194:7 - error TS2322: Type '_recursive_28' is not assignable to type '_recursive_28'. +consumer/index.ts:202:7 - error TS2322: Type '_recursive_29' is not assignable to type '_recursive_29'. Type 'unknown' is not assignable to type 'string'. -194 const invalidContravariance: typeof contravariantUnknown = contravariantString.next(); +202 const invalidContravariance: typeof contravariantUnknown = contravariantString.next();    ~~~~~~~~~~~~~~~~~~~~~ +consumer/index.ts:203:7 - error TS2322: Type '_recursive_1' is not assignable to type 'number'. + +203 const invalidAnonymousThis: number = anonymousThisResult; +   ~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:204:7 - error TS2322: Type '() => _recursive_1' is not assignable to type 'number'. + +204 const invalidAnonymousThisMethod: number = anonymousThisResult.relyingOnThis; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:205:7 - error TS2322: Type 'number' is not assignable to type 'string'. -Found 36 errors in the same file, starting at: consumer/index.ts:158 +205 const invalidConditionalAlias: string = conditionalAliasResult; +   ~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:206:7 - error TS2322: Type 'number' is not assignable to type 'number[]'. + +206 const invalidConditionalAliasArray: number[] = conditionalAliasResult; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +Found 40 errors in the same file, starting at: consumer/index.ts:166 //// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo] *rewrite with same content* //// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo.readable.baseline.txt] *rewrite with same content* //// [/home/src/workspaces/project/producer/dist/index.js] *modified* +import { f } from "./recursive-conditional-utils"; +export const conditionalAliasCopy = f; +export function anonymousThisReturn() { + return { + relyingOnThis() { + return this; + }, + }; +} export const arrow = () => arrow; export const expression = function self() { return self; }; export const first = () => second; @@ -2140,20 +2301,25 @@ export var Nested; // comment-only edit //// [/home/src/workspaces/project/producer/dist/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[2],"fileNames":["lib.es2026.full.d.ts","../index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"8be79633abc8e3e9d5c07f355c360ccf-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);\ntype Show = { [K in keyof T]: T[K] } & unknown;\ntype Resolve = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? Resolve : M[K][P];\n}>;\ndeclare const build: () => { [K in keyof M]: Resolve };\nexport const mappedCycle = build<{ Node: { value: number; next: \"ref\" } }>();\nexport const mappedCycleCopy = mappedCycle;\nexport const nestedCycle = { wrapped: build<{ Node: { value: string; next: \"ref\" } }>() };\nexport const cycleKey = Symbol();\nexport const keyedCycles = build<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\nexport const sharedCycles = { first: mappedCycle, second: mappedCycle };\ntype ResolveMutual = Show<{\n [P in keyof M[K]]: M[K][P] extends { ref: infer R extends keyof M } ? ResolveMutual : M[K][P];\n}>;\ndeclare const buildMutual: () => { [K in keyof M]: ResolveMutual };\nexport const mutualCycle = buildMutual<{\n First: { value: number; next: { ref: \"Second\" } };\n Second: { value: string; next: { ref: \"First\" } };\n}>();\ntype ResolveShadowed = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? (shadowedCycle: T) => ResolveShadowed : M[K][P];\n}>;\ndeclare const buildShadowed: () => { [K in keyof M]: ResolveShadowed };\nexport const shadowedCycle = buildShadowed<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptional: () => { [K in keyof M]?: Resolve };\nexport const optionalCycle = buildOptional<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildNullable: () => { [K in keyof M]: Resolve | null };\nexport const nullableCycle = buildNullable<{ Node: { value: string; next: \"ref\" } }>();\ndeclare const wrap: (value: T) => { required: T; optional?: T | null };\nexport const mixedCycles = wrap(optionalCycle);\nexport const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle };\nexport const nullableKeys = buildNullable<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\ndeclare const buildNullableRoot: () => Resolve | null;\nexport const nullableRoot = buildNullableRoot<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalRoot: () => Resolve | undefined;\nexport const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: \"ref\" } }>();\ntype ResolveNullable = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullable | null : M[K][P];\n}>;\ndeclare const buildNullableLinks: () => { [K in keyof M]: ResolveNullable | null };\nexport const nullableLinks = buildNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalNullableLinks: () => { [K in keyof M]?: ResolveNullable | null };\nexport const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveOptional = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveOptional | undefined : M[K][P];\n}>;\ndeclare const buildNullableOptionalLinks: () => { [K in keyof M]: ResolveOptional | null };\nexport const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveNullish = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullish | null | undefined : M[K][P];\n}>;\ndeclare const buildNullishLinks: () => { [K in keyof M]?: ResolveNullish | null };\nexport const nullishLinks = buildNullishLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildMixed: () => { [K in keyof M]?: Resolve | false | null };\nexport const mixedUnionCycle = buildMixed<{ Node: { value: number; next: \"ref\" } }>();\nexport const _recursive = 1;\nexport const factory = () => function self() { return self; };\nexport function captured(value: T) {\n const node = { value, next: () => node, consume: (other: T) => node };\n return node;\n}\nexport function nestedCaptured(outer: T) {\n return (inner: U) => {\n const node = {\n outer, inner, next: () => node,\n shadow: (value: T) => ({ outer, inner, value, next: node }),\n };\n return node;\n };\n}\nexport function constrained(key: K) {\n const node = { value: null! as T[K], next: () => node };\n return node;\n}\nexport function optionalCaptured(value: T) {\n type Node = { value: T; next: Node };\n return null! as { node?: Node | false | null };\n}\nexport function annotatedCaptured(value: T) {\n const node: { value: typeof value; next: typeof node } = { value, next: null! };\n return node;\n}\nexport function recursiveTuple(value: T) {\n type Tuple = readonly [T, Tuple];\n return null! as Tuple;\n}\nexport function inferredCaptured() {\n type Node = { value: V; next: Node };\n return null! as (T extends () => infer U ? Node : never);\n}\nexport function mappedCaptured() {\n type Node = { [K in keyof T]: { value: T[K]; next: Node } };\n return null! as Node;\n}\nexport function freshGeneric(unused: T) {\n const recur = (value: U) => recur;\n return recur;\n}\nexport function mutualCaptured(left: T, right: U) {\n type Left = { left: T; next: Right };\n type Right = { right: U; self: Right; next: Left };\n return { left: null! as Left, right: null! as Right };\n}\nexport class CapturedClass {\n constructor(public value: T) {}\n make(inner: U) {\n const node = { outer: this.value, inner, next: () => node };\n return node;\n }\n}\nexport function covariantClass() {\n return class Node {\n value!: T;\n next(): Node { return this; }\n };\n}\nexport function contravariantClass() {\n return class Node {\n consume!: (value: T) => void;\n next(): Node { return this; }\n };\n}\nexport namespace Nested {\n export function captured(value: T) {\n const node = { value, next: () => node };\n return node;\n }\n}\ntype NonNullable = \"shadowed\";\n// comment-only edit\n","signature":"850dc9bfa8257128f209cdd8c49501cd-type _recursive_1 = {\n value: number;\n next: _recursive_1;\n};\ntype _recursive_2 = {\n value: string;\n next: _recursive_2;\n};\ntype _recursive_3 = {\n value: number;\n next: _recursive_3;\n};\ntype _recursive_4 = {\n value: number;\n next: _recursive_4;\n};\ntype _recursive_5 = {\n value: string;\n next: _recursive_5;\n};\ntype _recursive_6 = {\n value: boolean;\n next: _recursive_6;\n};\ntype _recursive_7 = {\n value: number;\n next: _recursive_7;\n};\ntype _recursive_8 = {\n value: number;\n next: _recursive_8;\n};\ntype _recursive_9 = {\n value: string;\n next: _recursive_9;\n};\ntype _recursive_10 = {\n value: number;\n next: _recursive_10 | null;\n};\ntype _recursive_11 = {\n value: number;\n next: _recursive_11 | undefined;\n};\ntype _recursive_12 = {\n value: number;\n next: _recursive_12 | null | undefined;\n};\ntype _recursive_13 = {\n value: number;\n next: _recursive_13;\n};\ntype _recursive_14 = () => _recursive_14;\ntype _recursive_15 = {\n value: T;\n next: () => _recursive_15;\n consume: (other: T) => _recursive_15;\n};\ntype _recursive_16 = {\n outer: T;\n inner: U;\n next: () => _recursive_16;\n shadow: (value: T_1) => {\n outer: T;\n inner: U;\n value: T_1;\n next: _recursive_16;\n };\n};\ntype _recursive_17 = {\n value: T[K];\n next: () => _recursive_17;\n};\ntype _recursive_18 = {\n value: T;\n next: _recursive_18;\n};\ntype _recursive_19 = {\n value: T;\n next: _recursive_19;\n};\ntype _recursive_20 = readonly [T, _recursive_20];\ntype _recursive_21 = {\n value: U;\n next: _recursive_21;\n};\ntype _recursive_22 = { [K in keyof T]: {\n value: T[K];\n next: _recursive_22;\n}; };\ntype _recursive_23 = (value: U) => _recursive_23;\ntype _recursive_24 = {\n right: U;\n self: _recursive_24;\n next: _recursive_25;\n};\ntype _recursive_25 = {\n left: T;\n next: _recursive_24;\n};\ntype _recursive_26 = {\n outer: T;\n inner: U;\n next: () => _recursive_26;\n};\ntype _recursive_27 = {\n value: T;\n next(): _recursive_27;\n};\ntype _recursive_28 = {\n consume: (value: T) => void;\n next(): _recursive_28;\n};\nexport declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: () => {\n call: typeof objectReturn;\n};\nexport declare const tupleReturn: () => readonly [typeof tupleReturn];\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: {\n value: number;\n next: () => typeof object;\n};\nexport declare const method: {\n value: number;\n next(): typeof method;\n};\nexport declare const accessor: {\n value: number;\n readonly next: typeof accessor;\n};\nexport declare const tuple: readonly [() => typeof tuple];\nexport declare const array: (() => typeof array)[];\nexport declare const nested: {\n inner: {\n next(): {\n next(): (typeof nested)[\"inner\"];\n };\n };\n};\nexport declare const memberTuple: readonly [() => () => (typeof memberTuple)[0]];\nexport declare const memberArray: (() => (typeof memberArray)[0])[];\nexport declare const quoted: {\n \"a-b\": () => () => (typeof quoted)[\"a-b\"];\n};\nexport declare const numeric: {\n 0: () => () => (typeof numeric)[0];\n};\nexport declare const key: unique symbol;\nexport declare const computed: {\n [key]: () => (typeof computed)[typeof key];\n};\nexport declare const union: {\n next: () => typeof union;\n} | undefined;\nexport declare const specialized: {\n value: string;\n next: () => typeof specialized;\n};\nexport declare const indexed: {\n [key: string]: typeof indexed;\n};\nexport declare const mapped: {\n next: typeof mapped;\n};\nexport declare const viaAnnotation: {\n value: string;\n next: () => typeof viaAnnotation;\n};\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: typeof hiddenAlias;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"first\"];\n };\n second: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"second\"];\n };\n};\nexport declare const parenthesized: () => typeof parenthesized;\nexport declare const asserted: () => typeof asserted;\nexport declare class Methods {\n static recur(): (typeof Methods)[\"recur\"];\n static \"a-b\"(): (typeof Methods)[\"a-b\"];\n static [key](): (typeof Methods)[typeof key];\n recur(): Methods[\"recur\"];\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n};\nexport declare const nestedNumber: {\n nested(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n constrained(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n copied(inner: U): {\n outer: number;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n};\nexport declare const mappedCycle: {\n Node: {\n value: number;\n next: (typeof mappedCycle)[\"Node\"];\n };\n};\nexport declare const mappedCycleCopy: {\n Node: {\n value: number;\n next: (typeof mappedCycleCopy)[\"Node\"];\n };\n};\nexport declare const nestedCycle: {\n wrapped: {\n Node: {\n value: string;\n next: (typeof nestedCycle)[\"wrapped\"][\"Node\"];\n };\n };\n};\nexport declare const cycleKey: unique symbol;\nexport declare const keyedCycles: {\n \"a-b\": {\n value: string;\n next: (typeof keyedCycles)[\"a-b\"];\n };\n 0: {\n value: boolean;\n next: (typeof keyedCycles)[0];\n };\n [cycleKey]: {\n value: number;\n next: (typeof keyedCycles)[typeof cycleKey];\n };\n};\nexport declare const sharedCycles: {\n first: {\n Node: {\n value: number;\n next: (typeof sharedCycles)[\"first\"][\"Node\"];\n };\n };\n second: {\n Node: {\n value: number;\n next: (typeof sharedCycles)[\"second\"][\"Node\"];\n };\n };\n};\nexport declare const mutualCycle: {\n First: {\n value: number;\n next: {\n value: string;\n next: (typeof mutualCycle)[\"First\"];\n };\n };\n Second: {\n value: string;\n next: {\n value: number;\n next: (typeof mutualCycle)[\"Second\"];\n };\n };\n};\nexport declare const shadowedCycle: {\n Node: {\n value: number;\n next: (shadowedCycle: T) => typeof import(\".\").shadowedCycle[\"Node\"];\n };\n};\nexport declare const optionalCycle: {\n Node?: _recursive_1;\n};\nexport declare const nullableCycle: {\n Node: _recursive_2 | null;\n};\nexport declare const mixedCycles: {\n required: {\n Node?: _recursive_3;\n };\n optional?: {\n Node?: _recursive_3;\n } | null;\n};\nexport declare const sharedOptionalCycles: {\n first: {\n Node?: _recursive_4;\n };\n second: {\n Node?: _recursive_4;\n };\n};\nexport declare const nullableKeys: {\n \"a-b\": _recursive_5 | null;\n 0: _recursive_6 | null;\n [cycleKey]: _recursive_7 | null;\n};\nexport declare const nullableRoot: _recursive_8 | null;\nexport declare const optionalRoot: _recursive_9 | undefined;\nexport declare const nullableLinks: {\n Node: {\n value: number;\n next: (typeof nullableLinks)[\"Node\"];\n } | null;\n};\nexport declare const optionalNullableLinks: {\n Node?: _recursive_10 | null;\n};\nexport declare const nullableOptionalLinks: {\n Node: _recursive_11 | null;\n};\nexport declare const nullishLinks: {\n Node?: _recursive_12 | null;\n};\nexport declare const mixedUnionCycle: {\n Node?: false | _recursive_13 | null;\n};\nexport declare const _recursive = 1;\nexport declare const factory: () => () => _recursive_14;\nexport declare function captured(value: T): _recursive_15;\nexport declare function nestedCaptured(outer: T): (inner: U) => _recursive_16;\nexport declare function constrained(key: K): _recursive_17;\nexport declare function optionalCaptured(value: T): {\n node?: _recursive_18 | false | null;\n};\nexport declare function annotatedCaptured(value: T): _recursive_19;\nexport declare function recursiveTuple(value: T): _recursive_20;\nexport declare function inferredCaptured(): (T extends () => infer U ? _recursive_21 : never);\nexport declare function mappedCaptured(): _recursive_22;\nexport declare function freshGeneric(unused: T): _recursive_23;\nexport declare function mutualCaptured(left: T, right: U): {\n left: _recursive_25;\n right: _recursive_24;\n};\nexport declare class CapturedClass {\n value: T;\n constructor(value: T);\n make(inner: U): _recursive_26;\n}\nexport declare function covariantClass(): {\n new (): _recursive_27;\n};\nexport declare function contravariantClass(): {\n new (): _recursive_28;\n};\nexport declare namespace Nested {\n type _recursive_29 = {\n value: T;\n next: () => _recursive_29;\n };\n export function captured(value: T): _recursive_29;\n export {};\n}\nexport {};\n","impliedNodeFormat":1}],"options":{"composite":true,"exactOptionalPropertyTypes":true,"outDir":"./","strict":true},"latestChangedDtsFile":"./index.d.ts"} +{"version":"FakeTSVersion","root":[[2,3]],"fileNames":["lib.es2026.full.d.ts","../recursive-conditional-utils.ts","../index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"5f612a8da522ce136561c99ba028217b-type Recursive = T extends Array ? Recursive : T;\nexport const f = (): Recursive => {\n return null!;\n};","signature":"b7e553848a0db56da7124d58387f207a-type Recursive = T extends Array ? Recursive : T;\nexport declare const f: () => Recursive;\nexport {};\n","impliedNodeFormat":1},{"version":"90c799933358055d40b311c2862a4ccf-import { f } from \"./recursive-conditional-utils\";\nexport const conditionalAliasCopy = f;\nexport function anonymousThisReturn() {\n return {\n relyingOnThis() {\n return this;\n },\n };\n}\nexport const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);\ntype Show = { [K in keyof T]: T[K] } & unknown;\ntype Resolve = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? Resolve : M[K][P];\n}>;\ndeclare const build: () => { [K in keyof M]: Resolve };\nexport const mappedCycle = build<{ Node: { value: number; next: \"ref\" } }>();\nexport const mappedCycleCopy = mappedCycle;\nexport const nestedCycle = { wrapped: build<{ Node: { value: string; next: \"ref\" } }>() };\nexport const cycleKey = Symbol();\nexport const keyedCycles = build<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\nexport const sharedCycles = { first: mappedCycle, second: mappedCycle };\ntype ResolveMutual = Show<{\n [P in keyof M[K]]: M[K][P] extends { ref: infer R extends keyof M } ? ResolveMutual : M[K][P];\n}>;\ndeclare const buildMutual: () => { [K in keyof M]: ResolveMutual };\nexport const mutualCycle = buildMutual<{\n First: { value: number; next: { ref: \"Second\" } };\n Second: { value: string; next: { ref: \"First\" } };\n}>();\ntype ResolveShadowed = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? (shadowedCycle: T) => ResolveShadowed : M[K][P];\n}>;\ndeclare const buildShadowed: () => { [K in keyof M]: ResolveShadowed };\nexport const shadowedCycle = buildShadowed<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptional: () => { [K in keyof M]?: Resolve };\nexport const optionalCycle = buildOptional<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildNullable: () => { [K in keyof M]: Resolve | null };\nexport const nullableCycle = buildNullable<{ Node: { value: string; next: \"ref\" } }>();\ndeclare const wrap: (value: T) => { required: T; optional?: T | null };\nexport const mixedCycles = wrap(optionalCycle);\nexport const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle };\nexport const nullableKeys = buildNullable<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\ndeclare const buildNullableRoot: () => Resolve | null;\nexport const nullableRoot = buildNullableRoot<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalRoot: () => Resolve | undefined;\nexport const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: \"ref\" } }>();\ntype ResolveNullable = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullable | null : M[K][P];\n}>;\ndeclare const buildNullableLinks: () => { [K in keyof M]: ResolveNullable | null };\nexport const nullableLinks = buildNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalNullableLinks: () => { [K in keyof M]?: ResolveNullable | null };\nexport const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveOptional = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveOptional | undefined : M[K][P];\n}>;\ndeclare const buildNullableOptionalLinks: () => { [K in keyof M]: ResolveOptional | null };\nexport const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveNullish = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullish | null | undefined : M[K][P];\n}>;\ndeclare const buildNullishLinks: () => { [K in keyof M]?: ResolveNullish | null };\nexport const nullishLinks = buildNullishLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildMixed: () => { [K in keyof M]?: Resolve | false | null };\nexport const mixedUnionCycle = buildMixed<{ Node: { value: number; next: \"ref\" } }>();\nexport const _recursive = 1;\nexport const factory = () => function self() { return self; };\nexport function captured(value: T) {\n const node = { value, next: () => node, consume: (other: T) => node };\n return node;\n}\nexport function nestedCaptured(outer: T) {\n return (inner: U) => {\n const node = {\n outer, inner, next: () => node,\n shadow: (value: T) => ({ outer, inner, value, next: node }),\n };\n return node;\n };\n}\nexport function constrained(key: K) {\n const node = { value: null! as T[K], next: () => node };\n return node;\n}\nexport function optionalCaptured(value: T) {\n type Node = { value: T; next: Node };\n return null! as { node?: Node | false | null };\n}\nexport function annotatedCaptured(value: T) {\n const node: { value: typeof value; next: typeof node } = { value, next: null! };\n return node;\n}\nexport function recursiveTuple(value: T) {\n type Tuple = readonly [T, Tuple];\n return null! as Tuple;\n}\nexport function inferredCaptured() {\n type Node = { value: V; next: Node };\n return null! as (T extends () => infer U ? Node : never);\n}\nexport function mappedCaptured() {\n type Node = { [K in keyof T]: { value: T[K]; next: Node } };\n return null! as Node;\n}\nexport function freshGeneric(unused: T) {\n const recur = (value: U) => recur;\n return recur;\n}\nexport function mutualCaptured(left: T, right: U) {\n type Left = { left: T; next: Right };\n type Right = { right: U; self: Right; next: Left };\n return { left: null! as Left, right: null! as Right };\n}\nexport class CapturedClass {\n constructor(public value: T) {}\n make(inner: U) {\n const node = { outer: this.value, inner, next: () => node };\n return node;\n }\n}\nexport function covariantClass() {\n return class Node {\n value!: T;\n next(): Node { return this; }\n };\n}\nexport function contravariantClass() {\n return class Node {\n consume!: (value: T) => void;\n next(): Node { return this; }\n };\n}\nexport namespace Nested {\n export function captured(value: T) {\n const node = { value, next: () => node };\n return node;\n }\n}\ntype NonNullable = \"shadowed\";\n// comment-only edit\n","signature":"31e970944add74d341dad7ccc3687e7d-type _recursive_1 = {\n relyingOnThis(): _recursive_1;\n};\ntype _recursive_2 = {\n value: number;\n next: _recursive_2;\n};\ntype _recursive_3 = {\n value: string;\n next: _recursive_3;\n};\ntype _recursive_4 = {\n value: number;\n next: _recursive_4;\n};\ntype _recursive_5 = {\n value: number;\n next: _recursive_5;\n};\ntype _recursive_6 = {\n value: string;\n next: _recursive_6;\n};\ntype _recursive_7 = {\n value: boolean;\n next: _recursive_7;\n};\ntype _recursive_8 = {\n value: number;\n next: _recursive_8;\n};\ntype _recursive_9 = {\n value: number;\n next: _recursive_9;\n};\ntype _recursive_10 = {\n value: string;\n next: _recursive_10;\n};\ntype _recursive_11 = {\n value: number;\n next: _recursive_11 | null;\n};\ntype _recursive_12 = {\n value: number;\n next: _recursive_12 | undefined;\n};\ntype _recursive_13 = {\n value: number;\n next: _recursive_13 | null | undefined;\n};\ntype _recursive_14 = {\n value: number;\n next: _recursive_14;\n};\ntype _recursive_15 = () => _recursive_15;\ntype _recursive_16 = {\n value: T;\n next: () => _recursive_16;\n consume: (other: T) => _recursive_16;\n};\ntype _recursive_17 = {\n outer: T;\n inner: U;\n next: () => _recursive_17;\n shadow: (value: T_1) => {\n outer: T;\n inner: U;\n value: T_1;\n next: _recursive_17;\n };\n};\ntype _recursive_18 = {\n value: T[K];\n next: () => _recursive_18;\n};\ntype _recursive_19 = {\n value: T;\n next: _recursive_19;\n};\ntype _recursive_20 = {\n value: T;\n next: _recursive_20;\n};\ntype _recursive_21 = readonly [T, _recursive_21];\ntype _recursive_22 = {\n value: U;\n next: _recursive_22;\n};\ntype _recursive_23 = { [K in keyof T]: {\n value: T[K];\n next: _recursive_23;\n}; };\ntype _recursive_24 = (value: U) => _recursive_24;\ntype _recursive_25 = {\n right: U;\n self: _recursive_25;\n next: _recursive_26;\n};\ntype _recursive_26 = {\n left: T;\n next: _recursive_25;\n};\ntype _recursive_27 = {\n outer: T;\n inner: U;\n next: () => _recursive_27;\n};\ntype _recursive_28 = {\n value: T;\n next(): _recursive_28;\n};\ntype _recursive_29 = {\n consume: (value: T) => void;\n next(): _recursive_29;\n};\nimport { f } from \"./recursive-conditional-utils\";\nexport declare const conditionalAliasCopy: typeof f;\nexport declare function anonymousThisReturn(): {\n relyingOnThis(): _recursive_1;\n};\nexport declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: () => {\n call: typeof objectReturn;\n};\nexport declare const tupleReturn: () => readonly [typeof tupleReturn];\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: {\n value: number;\n next: () => typeof object;\n};\nexport declare const method: {\n value: number;\n next(): typeof method;\n};\nexport declare const accessor: {\n value: number;\n readonly next: typeof accessor;\n};\nexport declare const tuple: readonly [() => typeof tuple];\nexport declare const array: (() => typeof array)[];\nexport declare const nested: {\n inner: {\n next(): {\n next(): (typeof nested)[\"inner\"];\n };\n };\n};\nexport declare const memberTuple: readonly [() => () => (typeof memberTuple)[0]];\nexport declare const memberArray: (() => (typeof memberArray)[0])[];\nexport declare const quoted: {\n \"a-b\": () => () => (typeof quoted)[\"a-b\"];\n};\nexport declare const numeric: {\n 0: () => () => (typeof numeric)[0];\n};\nexport declare const key: unique symbol;\nexport declare const computed: {\n [key]: () => (typeof computed)[typeof key];\n};\nexport declare const union: {\n next: () => typeof union;\n} | undefined;\nexport declare const specialized: {\n value: string;\n next: () => typeof specialized;\n};\nexport declare const indexed: {\n [key: string]: typeof indexed;\n};\nexport declare const mapped: {\n next: typeof mapped;\n};\nexport declare const viaAnnotation: {\n value: string;\n next: () => typeof viaAnnotation;\n};\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: typeof hiddenAlias;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"first\"];\n };\n second: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"second\"];\n };\n};\nexport declare const parenthesized: () => typeof parenthesized;\nexport declare const asserted: () => typeof asserted;\nexport declare class Methods {\n static recur(): (typeof Methods)[\"recur\"];\n static \"a-b\"(): (typeof Methods)[\"a-b\"];\n static [key](): (typeof Methods)[typeof key];\n recur(): Methods[\"recur\"];\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n};\nexport declare const nestedNumber: {\n nested(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n constrained(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n copied(inner: U): {\n outer: number;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n};\nexport declare const mappedCycle: {\n Node: {\n value: number;\n next: (typeof mappedCycle)[\"Node\"];\n };\n};\nexport declare const mappedCycleCopy: {\n Node: {\n value: number;\n next: (typeof mappedCycleCopy)[\"Node\"];\n };\n};\nexport declare const nestedCycle: {\n wrapped: {\n Node: {\n value: string;\n next: (typeof nestedCycle)[\"wrapped\"][\"Node\"];\n };\n };\n};\nexport declare const cycleKey: unique symbol;\nexport declare const keyedCycles: {\n \"a-b\": {\n value: string;\n next: (typeof keyedCycles)[\"a-b\"];\n };\n 0: {\n value: boolean;\n next: (typeof keyedCycles)[0];\n };\n [cycleKey]: {\n value: number;\n next: (typeof keyedCycles)[typeof cycleKey];\n };\n};\nexport declare const sharedCycles: {\n first: {\n Node: {\n value: number;\n next: (typeof sharedCycles)[\"first\"][\"Node\"];\n };\n };\n second: {\n Node: {\n value: number;\n next: (typeof sharedCycles)[\"second\"][\"Node\"];\n };\n };\n};\nexport declare const mutualCycle: {\n First: {\n value: number;\n next: {\n value: string;\n next: (typeof mutualCycle)[\"First\"];\n };\n };\n Second: {\n value: string;\n next: {\n value: number;\n next: (typeof mutualCycle)[\"Second\"];\n };\n };\n};\nexport declare const shadowedCycle: {\n Node: {\n value: number;\n next: (shadowedCycle: T) => typeof import(\".\").shadowedCycle[\"Node\"];\n };\n};\nexport declare const optionalCycle: {\n Node?: _recursive_2;\n};\nexport declare const nullableCycle: {\n Node: _recursive_3 | null;\n};\nexport declare const mixedCycles: {\n required: {\n Node?: _recursive_4;\n };\n optional?: {\n Node?: _recursive_4;\n } | null;\n};\nexport declare const sharedOptionalCycles: {\n first: {\n Node?: _recursive_5;\n };\n second: {\n Node?: _recursive_5;\n };\n};\nexport declare const nullableKeys: {\n \"a-b\": _recursive_6 | null;\n 0: _recursive_7 | null;\n [cycleKey]: _recursive_8 | null;\n};\nexport declare const nullableRoot: _recursive_9 | null;\nexport declare const optionalRoot: _recursive_10 | undefined;\nexport declare const nullableLinks: {\n Node: {\n value: number;\n next: (typeof nullableLinks)[\"Node\"];\n } | null;\n};\nexport declare const optionalNullableLinks: {\n Node?: _recursive_11 | null;\n};\nexport declare const nullableOptionalLinks: {\n Node: _recursive_12 | null;\n};\nexport declare const nullishLinks: {\n Node?: _recursive_13 | null;\n};\nexport declare const mixedUnionCycle: {\n Node?: false | _recursive_14 | null;\n};\nexport declare const _recursive = 1;\nexport declare const factory: () => () => _recursive_15;\nexport declare function captured(value: T): _recursive_16;\nexport declare function nestedCaptured(outer: T): (inner: U) => _recursive_17;\nexport declare function constrained(key: K): _recursive_18;\nexport declare function optionalCaptured(value: T): {\n node?: _recursive_19 | false | null;\n};\nexport declare function annotatedCaptured(value: T): _recursive_20;\nexport declare function recursiveTuple(value: T): _recursive_21;\nexport declare function inferredCaptured(): (T extends () => infer U ? _recursive_22 : never);\nexport declare function mappedCaptured(): _recursive_23;\nexport declare function freshGeneric(unused: T): _recursive_24;\nexport declare function mutualCaptured(left: T, right: U): {\n left: _recursive_26;\n right: _recursive_25;\n};\nexport declare class CapturedClass {\n value: T;\n constructor(value: T);\n make(inner: U): _recursive_27;\n}\nexport declare function covariantClass(): {\n new (): _recursive_28;\n};\nexport declare function contravariantClass(): {\n new (): _recursive_29;\n};\nexport declare namespace Nested {\n type _recursive_30 = {\n value: T;\n next: () => _recursive_30;\n };\n export function captured(value: T): _recursive_30;\n export {};\n}\nexport {};\n","impliedNodeFormat":1}],"fileIdsList":[[2]],"options":{"composite":true,"exactOptionalPropertyTypes":true,"outDir":"./","strict":true},"referencedMap":[[3,1]],"latestChangedDtsFile":"./index.d.ts"} //// [/home/src/workspaces/project/producer/dist/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* { "version": "FakeTSVersion", "root": [ { "files": [ + "../recursive-conditional-utils.ts", "../index.ts" ], - "original": 2 + "original": [ + 2, + 3 + ] } ], "fileNames": [ "lib.es2026.full.d.ts", + "../recursive-conditional-utils.ts", "../index.ts" ], "fileInfos": [ @@ -2169,26 +2335,47 @@ export var Nested; "impliedNodeFormat": 1 } }, + { + "fileName": "../recursive-conditional-utils.ts", + "version": "5f612a8da522ce136561c99ba028217b-type Recursive = T extends Array ? Recursive : T;\nexport const f = (): Recursive => {\n return null!;\n};", + "signature": "b7e553848a0db56da7124d58387f207a-type Recursive = T extends Array ? Recursive : T;\nexport declare const f: () => Recursive;\nexport {};\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "5f612a8da522ce136561c99ba028217b-type Recursive = T extends Array ? Recursive : T;\nexport const f = (): Recursive => {\n return null!;\n};", + "signature": "b7e553848a0db56da7124d58387f207a-type Recursive = T extends Array ? Recursive : T;\nexport declare const f: () => Recursive;\nexport {};\n", + "impliedNodeFormat": 1 + } + }, { "fileName": "../index.ts", - "version": "8be79633abc8e3e9d5c07f355c360ccf-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);\ntype Show = { [K in keyof T]: T[K] } & unknown;\ntype Resolve = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? Resolve : M[K][P];\n}>;\ndeclare const build: () => { [K in keyof M]: Resolve };\nexport const mappedCycle = build<{ Node: { value: number; next: \"ref\" } }>();\nexport const mappedCycleCopy = mappedCycle;\nexport const nestedCycle = { wrapped: build<{ Node: { value: string; next: \"ref\" } }>() };\nexport const cycleKey = Symbol();\nexport const keyedCycles = build<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\nexport const sharedCycles = { first: mappedCycle, second: mappedCycle };\ntype ResolveMutual = Show<{\n [P in keyof M[K]]: M[K][P] extends { ref: infer R extends keyof M } ? ResolveMutual : M[K][P];\n}>;\ndeclare const buildMutual: () => { [K in keyof M]: ResolveMutual };\nexport const mutualCycle = buildMutual<{\n First: { value: number; next: { ref: \"Second\" } };\n Second: { value: string; next: { ref: \"First\" } };\n}>();\ntype ResolveShadowed = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? (shadowedCycle: T) => ResolveShadowed : M[K][P];\n}>;\ndeclare const buildShadowed: () => { [K in keyof M]: ResolveShadowed };\nexport const shadowedCycle = buildShadowed<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptional: () => { [K in keyof M]?: Resolve };\nexport const optionalCycle = buildOptional<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildNullable: () => { [K in keyof M]: Resolve | null };\nexport const nullableCycle = buildNullable<{ Node: { value: string; next: \"ref\" } }>();\ndeclare const wrap: (value: T) => { required: T; optional?: T | null };\nexport const mixedCycles = wrap(optionalCycle);\nexport const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle };\nexport const nullableKeys = buildNullable<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\ndeclare const buildNullableRoot: () => Resolve | null;\nexport const nullableRoot = buildNullableRoot<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalRoot: () => Resolve | undefined;\nexport const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: \"ref\" } }>();\ntype ResolveNullable = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullable | null : M[K][P];\n}>;\ndeclare const buildNullableLinks: () => { [K in keyof M]: ResolveNullable | null };\nexport const nullableLinks = buildNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalNullableLinks: () => { [K in keyof M]?: ResolveNullable | null };\nexport const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveOptional = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveOptional | undefined : M[K][P];\n}>;\ndeclare const buildNullableOptionalLinks: () => { [K in keyof M]: ResolveOptional | null };\nexport const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveNullish = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullish | null | undefined : M[K][P];\n}>;\ndeclare const buildNullishLinks: () => { [K in keyof M]?: ResolveNullish | null };\nexport const nullishLinks = buildNullishLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildMixed: () => { [K in keyof M]?: Resolve | false | null };\nexport const mixedUnionCycle = buildMixed<{ Node: { value: number; next: \"ref\" } }>();\nexport const _recursive = 1;\nexport const factory = () => function self() { return self; };\nexport function captured(value: T) {\n const node = { value, next: () => node, consume: (other: T) => node };\n return node;\n}\nexport function nestedCaptured(outer: T) {\n return (inner: U) => {\n const node = {\n outer, inner, next: () => node,\n shadow: (value: T) => ({ outer, inner, value, next: node }),\n };\n return node;\n };\n}\nexport function constrained(key: K) {\n const node = { value: null! as T[K], next: () => node };\n return node;\n}\nexport function optionalCaptured(value: T) {\n type Node = { value: T; next: Node };\n return null! as { node?: Node | false | null };\n}\nexport function annotatedCaptured(value: T) {\n const node: { value: typeof value; next: typeof node } = { value, next: null! };\n return node;\n}\nexport function recursiveTuple(value: T) {\n type Tuple = readonly [T, Tuple];\n return null! as Tuple;\n}\nexport function inferredCaptured() {\n type Node = { value: V; next: Node };\n return null! as (T extends () => infer U ? Node : never);\n}\nexport function mappedCaptured() {\n type Node = { [K in keyof T]: { value: T[K]; next: Node } };\n return null! as Node;\n}\nexport function freshGeneric(unused: T) {\n const recur = (value: U) => recur;\n return recur;\n}\nexport function mutualCaptured(left: T, right: U) {\n type Left = { left: T; next: Right };\n type Right = { right: U; self: Right; next: Left };\n return { left: null! as Left, right: null! as Right };\n}\nexport class CapturedClass {\n constructor(public value: T) {}\n make(inner: U) {\n const node = { outer: this.value, inner, next: () => node };\n return node;\n }\n}\nexport function covariantClass() {\n return class Node {\n value!: T;\n next(): Node { return this; }\n };\n}\nexport function contravariantClass() {\n return class Node {\n consume!: (value: T) => void;\n next(): Node { return this; }\n };\n}\nexport namespace Nested {\n export function captured(value: T) {\n const node = { value, next: () => node };\n return node;\n }\n}\ntype NonNullable = \"shadowed\";\n// comment-only edit\n", - "signature": "850dc9bfa8257128f209cdd8c49501cd-type _recursive_1 = {\n value: number;\n next: _recursive_1;\n};\ntype _recursive_2 = {\n value: string;\n next: _recursive_2;\n};\ntype _recursive_3 = {\n value: number;\n next: _recursive_3;\n};\ntype _recursive_4 = {\n value: number;\n next: _recursive_4;\n};\ntype _recursive_5 = {\n value: string;\n next: _recursive_5;\n};\ntype _recursive_6 = {\n value: boolean;\n next: _recursive_6;\n};\ntype _recursive_7 = {\n value: number;\n next: _recursive_7;\n};\ntype _recursive_8 = {\n value: number;\n next: _recursive_8;\n};\ntype _recursive_9 = {\n value: string;\n next: _recursive_9;\n};\ntype _recursive_10 = {\n value: number;\n next: _recursive_10 | null;\n};\ntype _recursive_11 = {\n value: number;\n next: _recursive_11 | undefined;\n};\ntype _recursive_12 = {\n value: number;\n next: _recursive_12 | null | undefined;\n};\ntype _recursive_13 = {\n value: number;\n next: _recursive_13;\n};\ntype _recursive_14 = () => _recursive_14;\ntype _recursive_15 = {\n value: T;\n next: () => _recursive_15;\n consume: (other: T) => _recursive_15;\n};\ntype _recursive_16 = {\n outer: T;\n inner: U;\n next: () => _recursive_16;\n shadow: (value: T_1) => {\n outer: T;\n inner: U;\n value: T_1;\n next: _recursive_16;\n };\n};\ntype _recursive_17 = {\n value: T[K];\n next: () => _recursive_17;\n};\ntype _recursive_18 = {\n value: T;\n next: _recursive_18;\n};\ntype _recursive_19 = {\n value: T;\n next: _recursive_19;\n};\ntype _recursive_20 = readonly [T, _recursive_20];\ntype _recursive_21 = {\n value: U;\n next: _recursive_21;\n};\ntype _recursive_22 = { [K in keyof T]: {\n value: T[K];\n next: _recursive_22;\n}; };\ntype _recursive_23 = (value: U) => _recursive_23;\ntype _recursive_24 = {\n right: U;\n self: _recursive_24;\n next: _recursive_25;\n};\ntype _recursive_25 = {\n left: T;\n next: _recursive_24;\n};\ntype _recursive_26 = {\n outer: T;\n inner: U;\n next: () => _recursive_26;\n};\ntype _recursive_27 = {\n value: T;\n next(): _recursive_27;\n};\ntype _recursive_28 = {\n consume: (value: T) => void;\n next(): _recursive_28;\n};\nexport declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: () => {\n call: typeof objectReturn;\n};\nexport declare const tupleReturn: () => readonly [typeof tupleReturn];\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: {\n value: number;\n next: () => typeof object;\n};\nexport declare const method: {\n value: number;\n next(): typeof method;\n};\nexport declare const accessor: {\n value: number;\n readonly next: typeof accessor;\n};\nexport declare const tuple: readonly [() => typeof tuple];\nexport declare const array: (() => typeof array)[];\nexport declare const nested: {\n inner: {\n next(): {\n next(): (typeof nested)[\"inner\"];\n };\n };\n};\nexport declare const memberTuple: readonly [() => () => (typeof memberTuple)[0]];\nexport declare const memberArray: (() => (typeof memberArray)[0])[];\nexport declare const quoted: {\n \"a-b\": () => () => (typeof quoted)[\"a-b\"];\n};\nexport declare const numeric: {\n 0: () => () => (typeof numeric)[0];\n};\nexport declare const key: unique symbol;\nexport declare const computed: {\n [key]: () => (typeof computed)[typeof key];\n};\nexport declare const union: {\n next: () => typeof union;\n} | undefined;\nexport declare const specialized: {\n value: string;\n next: () => typeof specialized;\n};\nexport declare const indexed: {\n [key: string]: typeof indexed;\n};\nexport declare const mapped: {\n next: typeof mapped;\n};\nexport declare const viaAnnotation: {\n value: string;\n next: () => typeof viaAnnotation;\n};\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: typeof hiddenAlias;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"first\"];\n };\n second: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"second\"];\n };\n};\nexport declare const parenthesized: () => typeof parenthesized;\nexport declare const asserted: () => typeof asserted;\nexport declare class Methods {\n static recur(): (typeof Methods)[\"recur\"];\n static \"a-b\"(): (typeof Methods)[\"a-b\"];\n static [key](): (typeof Methods)[typeof key];\n recur(): Methods[\"recur\"];\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n};\nexport declare const nestedNumber: {\n nested(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n constrained(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n copied(inner: U): {\n outer: number;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n};\nexport declare const mappedCycle: {\n Node: {\n value: number;\n next: (typeof mappedCycle)[\"Node\"];\n };\n};\nexport declare const mappedCycleCopy: {\n Node: {\n value: number;\n next: (typeof mappedCycleCopy)[\"Node\"];\n };\n};\nexport declare const nestedCycle: {\n wrapped: {\n Node: {\n value: string;\n next: (typeof nestedCycle)[\"wrapped\"][\"Node\"];\n };\n };\n};\nexport declare const cycleKey: unique symbol;\nexport declare const keyedCycles: {\n \"a-b\": {\n value: string;\n next: (typeof keyedCycles)[\"a-b\"];\n };\n 0: {\n value: boolean;\n next: (typeof keyedCycles)[0];\n };\n [cycleKey]: {\n value: number;\n next: (typeof keyedCycles)[typeof cycleKey];\n };\n};\nexport declare const sharedCycles: {\n first: {\n Node: {\n value: number;\n next: (typeof sharedCycles)[\"first\"][\"Node\"];\n };\n };\n second: {\n Node: {\n value: number;\n next: (typeof sharedCycles)[\"second\"][\"Node\"];\n };\n };\n};\nexport declare const mutualCycle: {\n First: {\n value: number;\n next: {\n value: string;\n next: (typeof mutualCycle)[\"First\"];\n };\n };\n Second: {\n value: string;\n next: {\n value: number;\n next: (typeof mutualCycle)[\"Second\"];\n };\n };\n};\nexport declare const shadowedCycle: {\n Node: {\n value: number;\n next: (shadowedCycle: T) => typeof import(\".\").shadowedCycle[\"Node\"];\n };\n};\nexport declare const optionalCycle: {\n Node?: _recursive_1;\n};\nexport declare const nullableCycle: {\n Node: _recursive_2 | null;\n};\nexport declare const mixedCycles: {\n required: {\n Node?: _recursive_3;\n };\n optional?: {\n Node?: _recursive_3;\n } | null;\n};\nexport declare const sharedOptionalCycles: {\n first: {\n Node?: _recursive_4;\n };\n second: {\n Node?: _recursive_4;\n };\n};\nexport declare const nullableKeys: {\n \"a-b\": _recursive_5 | null;\n 0: _recursive_6 | null;\n [cycleKey]: _recursive_7 | null;\n};\nexport declare const nullableRoot: _recursive_8 | null;\nexport declare const optionalRoot: _recursive_9 | undefined;\nexport declare const nullableLinks: {\n Node: {\n value: number;\n next: (typeof nullableLinks)[\"Node\"];\n } | null;\n};\nexport declare const optionalNullableLinks: {\n Node?: _recursive_10 | null;\n};\nexport declare const nullableOptionalLinks: {\n Node: _recursive_11 | null;\n};\nexport declare const nullishLinks: {\n Node?: _recursive_12 | null;\n};\nexport declare const mixedUnionCycle: {\n Node?: false | _recursive_13 | null;\n};\nexport declare const _recursive = 1;\nexport declare const factory: () => () => _recursive_14;\nexport declare function captured(value: T): _recursive_15;\nexport declare function nestedCaptured(outer: T): (inner: U) => _recursive_16;\nexport declare function constrained(key: K): _recursive_17;\nexport declare function optionalCaptured(value: T): {\n node?: _recursive_18 | false | null;\n};\nexport declare function annotatedCaptured(value: T): _recursive_19;\nexport declare function recursiveTuple(value: T): _recursive_20;\nexport declare function inferredCaptured(): (T extends () => infer U ? _recursive_21 : never);\nexport declare function mappedCaptured(): _recursive_22;\nexport declare function freshGeneric(unused: T): _recursive_23;\nexport declare function mutualCaptured(left: T, right: U): {\n left: _recursive_25;\n right: _recursive_24;\n};\nexport declare class CapturedClass {\n value: T;\n constructor(value: T);\n make(inner: U): _recursive_26;\n}\nexport declare function covariantClass(): {\n new (): _recursive_27;\n};\nexport declare function contravariantClass(): {\n new (): _recursive_28;\n};\nexport declare namespace Nested {\n type _recursive_29 = {\n value: T;\n next: () => _recursive_29;\n };\n export function captured(value: T): _recursive_29;\n export {};\n}\nexport {};\n", + "version": "90c799933358055d40b311c2862a4ccf-import { f } from \"./recursive-conditional-utils\";\nexport const conditionalAliasCopy = f;\nexport function anonymousThisReturn() {\n return {\n relyingOnThis() {\n return this;\n },\n };\n}\nexport const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);\ntype Show = { [K in keyof T]: T[K] } & unknown;\ntype Resolve = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? Resolve : M[K][P];\n}>;\ndeclare const build: () => { [K in keyof M]: Resolve };\nexport const mappedCycle = build<{ Node: { value: number; next: \"ref\" } }>();\nexport const mappedCycleCopy = mappedCycle;\nexport const nestedCycle = { wrapped: build<{ Node: { value: string; next: \"ref\" } }>() };\nexport const cycleKey = Symbol();\nexport const keyedCycles = build<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\nexport const sharedCycles = { first: mappedCycle, second: mappedCycle };\ntype ResolveMutual = Show<{\n [P in keyof M[K]]: M[K][P] extends { ref: infer R extends keyof M } ? ResolveMutual : M[K][P];\n}>;\ndeclare const buildMutual: () => { [K in keyof M]: ResolveMutual };\nexport const mutualCycle = buildMutual<{\n First: { value: number; next: { ref: \"Second\" } };\n Second: { value: string; next: { ref: \"First\" } };\n}>();\ntype ResolveShadowed = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? (shadowedCycle: T) => ResolveShadowed : M[K][P];\n}>;\ndeclare const buildShadowed: () => { [K in keyof M]: ResolveShadowed };\nexport const shadowedCycle = buildShadowed<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptional: () => { [K in keyof M]?: Resolve };\nexport const optionalCycle = buildOptional<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildNullable: () => { [K in keyof M]: Resolve | null };\nexport const nullableCycle = buildNullable<{ Node: { value: string; next: \"ref\" } }>();\ndeclare const wrap: (value: T) => { required: T; optional?: T | null };\nexport const mixedCycles = wrap(optionalCycle);\nexport const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle };\nexport const nullableKeys = buildNullable<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\ndeclare const buildNullableRoot: () => Resolve | null;\nexport const nullableRoot = buildNullableRoot<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalRoot: () => Resolve | undefined;\nexport const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: \"ref\" } }>();\ntype ResolveNullable = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullable | null : M[K][P];\n}>;\ndeclare const buildNullableLinks: () => { [K in keyof M]: ResolveNullable | null };\nexport const nullableLinks = buildNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalNullableLinks: () => { [K in keyof M]?: ResolveNullable | null };\nexport const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveOptional = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveOptional | undefined : M[K][P];\n}>;\ndeclare const buildNullableOptionalLinks: () => { [K in keyof M]: ResolveOptional | null };\nexport const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveNullish = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullish | null | undefined : M[K][P];\n}>;\ndeclare const buildNullishLinks: () => { [K in keyof M]?: ResolveNullish | null };\nexport const nullishLinks = buildNullishLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildMixed: () => { [K in keyof M]?: Resolve | false | null };\nexport const mixedUnionCycle = buildMixed<{ Node: { value: number; next: \"ref\" } }>();\nexport const _recursive = 1;\nexport const factory = () => function self() { return self; };\nexport function captured(value: T) {\n const node = { value, next: () => node, consume: (other: T) => node };\n return node;\n}\nexport function nestedCaptured(outer: T) {\n return (inner: U) => {\n const node = {\n outer, inner, next: () => node,\n shadow: (value: T) => ({ outer, inner, value, next: node }),\n };\n return node;\n };\n}\nexport function constrained(key: K) {\n const node = { value: null! as T[K], next: () => node };\n return node;\n}\nexport function optionalCaptured(value: T) {\n type Node = { value: T; next: Node };\n return null! as { node?: Node | false | null };\n}\nexport function annotatedCaptured(value: T) {\n const node: { value: typeof value; next: typeof node } = { value, next: null! };\n return node;\n}\nexport function recursiveTuple(value: T) {\n type Tuple = readonly [T, Tuple];\n return null! as Tuple;\n}\nexport function inferredCaptured() {\n type Node = { value: V; next: Node };\n return null! as (T extends () => infer U ? Node : never);\n}\nexport function mappedCaptured() {\n type Node = { [K in keyof T]: { value: T[K]; next: Node } };\n return null! as Node;\n}\nexport function freshGeneric(unused: T) {\n const recur = (value: U) => recur;\n return recur;\n}\nexport function mutualCaptured(left: T, right: U) {\n type Left = { left: T; next: Right };\n type Right = { right: U; self: Right; next: Left };\n return { left: null! as Left, right: null! as Right };\n}\nexport class CapturedClass {\n constructor(public value: T) {}\n make(inner: U) {\n const node = { outer: this.value, inner, next: () => node };\n return node;\n }\n}\nexport function covariantClass() {\n return class Node {\n value!: T;\n next(): Node { return this; }\n };\n}\nexport function contravariantClass() {\n return class Node {\n consume!: (value: T) => void;\n next(): Node { return this; }\n };\n}\nexport namespace Nested {\n export function captured(value: T) {\n const node = { value, next: () => node };\n return node;\n }\n}\ntype NonNullable = \"shadowed\";\n// comment-only edit\n", + "signature": "31e970944add74d341dad7ccc3687e7d-type _recursive_1 = {\n relyingOnThis(): _recursive_1;\n};\ntype _recursive_2 = {\n value: number;\n next: _recursive_2;\n};\ntype _recursive_3 = {\n value: string;\n next: _recursive_3;\n};\ntype _recursive_4 = {\n value: number;\n next: _recursive_4;\n};\ntype _recursive_5 = {\n value: number;\n next: _recursive_5;\n};\ntype _recursive_6 = {\n value: string;\n next: _recursive_6;\n};\ntype _recursive_7 = {\n value: boolean;\n next: _recursive_7;\n};\ntype _recursive_8 = {\n value: number;\n next: _recursive_8;\n};\ntype _recursive_9 = {\n value: number;\n next: _recursive_9;\n};\ntype _recursive_10 = {\n value: string;\n next: _recursive_10;\n};\ntype _recursive_11 = {\n value: number;\n next: _recursive_11 | null;\n};\ntype _recursive_12 = {\n value: number;\n next: _recursive_12 | undefined;\n};\ntype _recursive_13 = {\n value: number;\n next: _recursive_13 | null | undefined;\n};\ntype _recursive_14 = {\n value: number;\n next: _recursive_14;\n};\ntype _recursive_15 = () => _recursive_15;\ntype _recursive_16 = {\n value: T;\n next: () => _recursive_16;\n consume: (other: T) => _recursive_16;\n};\ntype _recursive_17 = {\n outer: T;\n inner: U;\n next: () => _recursive_17;\n shadow: (value: T_1) => {\n outer: T;\n inner: U;\n value: T_1;\n next: _recursive_17;\n };\n};\ntype _recursive_18 = {\n value: T[K];\n next: () => _recursive_18;\n};\ntype _recursive_19 = {\n value: T;\n next: _recursive_19;\n};\ntype _recursive_20 = {\n value: T;\n next: _recursive_20;\n};\ntype _recursive_21 = readonly [T, _recursive_21];\ntype _recursive_22 = {\n value: U;\n next: _recursive_22;\n};\ntype _recursive_23 = { [K in keyof T]: {\n value: T[K];\n next: _recursive_23;\n}; };\ntype _recursive_24 = (value: U) => _recursive_24;\ntype _recursive_25 = {\n right: U;\n self: _recursive_25;\n next: _recursive_26;\n};\ntype _recursive_26 = {\n left: T;\n next: _recursive_25;\n};\ntype _recursive_27 = {\n outer: T;\n inner: U;\n next: () => _recursive_27;\n};\ntype _recursive_28 = {\n value: T;\n next(): _recursive_28;\n};\ntype _recursive_29 = {\n consume: (value: T) => void;\n next(): _recursive_29;\n};\nimport { f } from \"./recursive-conditional-utils\";\nexport declare const conditionalAliasCopy: typeof f;\nexport declare function anonymousThisReturn(): {\n relyingOnThis(): _recursive_1;\n};\nexport declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: () => {\n call: typeof objectReturn;\n};\nexport declare const tupleReturn: () => readonly [typeof tupleReturn];\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: {\n value: number;\n next: () => typeof object;\n};\nexport declare const method: {\n value: number;\n next(): typeof method;\n};\nexport declare const accessor: {\n value: number;\n readonly next: typeof accessor;\n};\nexport declare const tuple: readonly [() => typeof tuple];\nexport declare const array: (() => typeof array)[];\nexport declare const nested: {\n inner: {\n next(): {\n next(): (typeof nested)[\"inner\"];\n };\n };\n};\nexport declare const memberTuple: readonly [() => () => (typeof memberTuple)[0]];\nexport declare const memberArray: (() => (typeof memberArray)[0])[];\nexport declare const quoted: {\n \"a-b\": () => () => (typeof quoted)[\"a-b\"];\n};\nexport declare const numeric: {\n 0: () => () => (typeof numeric)[0];\n};\nexport declare const key: unique symbol;\nexport declare const computed: {\n [key]: () => (typeof computed)[typeof key];\n};\nexport declare const union: {\n next: () => typeof union;\n} | undefined;\nexport declare const specialized: {\n value: string;\n next: () => typeof specialized;\n};\nexport declare const indexed: {\n [key: string]: typeof indexed;\n};\nexport declare const mapped: {\n next: typeof mapped;\n};\nexport declare const viaAnnotation: {\n value: string;\n next: () => typeof viaAnnotation;\n};\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: typeof hiddenAlias;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"first\"];\n };\n second: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"second\"];\n };\n};\nexport declare const parenthesized: () => typeof parenthesized;\nexport declare const asserted: () => typeof asserted;\nexport declare class Methods {\n static recur(): (typeof Methods)[\"recur\"];\n static \"a-b\"(): (typeof Methods)[\"a-b\"];\n static [key](): (typeof Methods)[typeof key];\n recur(): Methods[\"recur\"];\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n};\nexport declare const nestedNumber: {\n nested(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n constrained(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n copied(inner: U): {\n outer: number;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n};\nexport declare const mappedCycle: {\n Node: {\n value: number;\n next: (typeof mappedCycle)[\"Node\"];\n };\n};\nexport declare const mappedCycleCopy: {\n Node: {\n value: number;\n next: (typeof mappedCycleCopy)[\"Node\"];\n };\n};\nexport declare const nestedCycle: {\n wrapped: {\n Node: {\n value: string;\n next: (typeof nestedCycle)[\"wrapped\"][\"Node\"];\n };\n };\n};\nexport declare const cycleKey: unique symbol;\nexport declare const keyedCycles: {\n \"a-b\": {\n value: string;\n next: (typeof keyedCycles)[\"a-b\"];\n };\n 0: {\n value: boolean;\n next: (typeof keyedCycles)[0];\n };\n [cycleKey]: {\n value: number;\n next: (typeof keyedCycles)[typeof cycleKey];\n };\n};\nexport declare const sharedCycles: {\n first: {\n Node: {\n value: number;\n next: (typeof sharedCycles)[\"first\"][\"Node\"];\n };\n };\n second: {\n Node: {\n value: number;\n next: (typeof sharedCycles)[\"second\"][\"Node\"];\n };\n };\n};\nexport declare const mutualCycle: {\n First: {\n value: number;\n next: {\n value: string;\n next: (typeof mutualCycle)[\"First\"];\n };\n };\n Second: {\n value: string;\n next: {\n value: number;\n next: (typeof mutualCycle)[\"Second\"];\n };\n };\n};\nexport declare const shadowedCycle: {\n Node: {\n value: number;\n next: (shadowedCycle: T) => typeof import(\".\").shadowedCycle[\"Node\"];\n };\n};\nexport declare const optionalCycle: {\n Node?: _recursive_2;\n};\nexport declare const nullableCycle: {\n Node: _recursive_3 | null;\n};\nexport declare const mixedCycles: {\n required: {\n Node?: _recursive_4;\n };\n optional?: {\n Node?: _recursive_4;\n } | null;\n};\nexport declare const sharedOptionalCycles: {\n first: {\n Node?: _recursive_5;\n };\n second: {\n Node?: _recursive_5;\n };\n};\nexport declare const nullableKeys: {\n \"a-b\": _recursive_6 | null;\n 0: _recursive_7 | null;\n [cycleKey]: _recursive_8 | null;\n};\nexport declare const nullableRoot: _recursive_9 | null;\nexport declare const optionalRoot: _recursive_10 | undefined;\nexport declare const nullableLinks: {\n Node: {\n value: number;\n next: (typeof nullableLinks)[\"Node\"];\n } | null;\n};\nexport declare const optionalNullableLinks: {\n Node?: _recursive_11 | null;\n};\nexport declare const nullableOptionalLinks: {\n Node: _recursive_12 | null;\n};\nexport declare const nullishLinks: {\n Node?: _recursive_13 | null;\n};\nexport declare const mixedUnionCycle: {\n Node?: false | _recursive_14 | null;\n};\nexport declare const _recursive = 1;\nexport declare const factory: () => () => _recursive_15;\nexport declare function captured(value: T): _recursive_16;\nexport declare function nestedCaptured(outer: T): (inner: U) => _recursive_17;\nexport declare function constrained(key: K): _recursive_18;\nexport declare function optionalCaptured(value: T): {\n node?: _recursive_19 | false | null;\n};\nexport declare function annotatedCaptured(value: T): _recursive_20;\nexport declare function recursiveTuple(value: T): _recursive_21;\nexport declare function inferredCaptured(): (T extends () => infer U ? _recursive_22 : never);\nexport declare function mappedCaptured(): _recursive_23;\nexport declare function freshGeneric(unused: T): _recursive_24;\nexport declare function mutualCaptured(left: T, right: U): {\n left: _recursive_26;\n right: _recursive_25;\n};\nexport declare class CapturedClass {\n value: T;\n constructor(value: T);\n make(inner: U): _recursive_27;\n}\nexport declare function covariantClass(): {\n new (): _recursive_28;\n};\nexport declare function contravariantClass(): {\n new (): _recursive_29;\n};\nexport declare namespace Nested {\n type _recursive_30 = {\n value: T;\n next: () => _recursive_30;\n };\n export function captured(value: T): _recursive_30;\n export {};\n}\nexport {};\n", "impliedNodeFormat": "CommonJS", "original": { - "version": "8be79633abc8e3e9d5c07f355c360ccf-export const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);\ntype Show = { [K in keyof T]: T[K] } & unknown;\ntype Resolve = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? Resolve : M[K][P];\n}>;\ndeclare const build: () => { [K in keyof M]: Resolve };\nexport const mappedCycle = build<{ Node: { value: number; next: \"ref\" } }>();\nexport const mappedCycleCopy = mappedCycle;\nexport const nestedCycle = { wrapped: build<{ Node: { value: string; next: \"ref\" } }>() };\nexport const cycleKey = Symbol();\nexport const keyedCycles = build<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\nexport const sharedCycles = { first: mappedCycle, second: mappedCycle };\ntype ResolveMutual = Show<{\n [P in keyof M[K]]: M[K][P] extends { ref: infer R extends keyof M } ? ResolveMutual : M[K][P];\n}>;\ndeclare const buildMutual: () => { [K in keyof M]: ResolveMutual };\nexport const mutualCycle = buildMutual<{\n First: { value: number; next: { ref: \"Second\" } };\n Second: { value: string; next: { ref: \"First\" } };\n}>();\ntype ResolveShadowed = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? (shadowedCycle: T) => ResolveShadowed : M[K][P];\n}>;\ndeclare const buildShadowed: () => { [K in keyof M]: ResolveShadowed };\nexport const shadowedCycle = buildShadowed<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptional: () => { [K in keyof M]?: Resolve };\nexport const optionalCycle = buildOptional<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildNullable: () => { [K in keyof M]: Resolve | null };\nexport const nullableCycle = buildNullable<{ Node: { value: string; next: \"ref\" } }>();\ndeclare const wrap: (value: T) => { required: T; optional?: T | null };\nexport const mixedCycles = wrap(optionalCycle);\nexport const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle };\nexport const nullableKeys = buildNullable<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\ndeclare const buildNullableRoot: () => Resolve | null;\nexport const nullableRoot = buildNullableRoot<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalRoot: () => Resolve | undefined;\nexport const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: \"ref\" } }>();\ntype ResolveNullable = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullable | null : M[K][P];\n}>;\ndeclare const buildNullableLinks: () => { [K in keyof M]: ResolveNullable | null };\nexport const nullableLinks = buildNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalNullableLinks: () => { [K in keyof M]?: ResolveNullable | null };\nexport const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveOptional = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveOptional | undefined : M[K][P];\n}>;\ndeclare const buildNullableOptionalLinks: () => { [K in keyof M]: ResolveOptional | null };\nexport const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveNullish = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullish | null | undefined : M[K][P];\n}>;\ndeclare const buildNullishLinks: () => { [K in keyof M]?: ResolveNullish | null };\nexport const nullishLinks = buildNullishLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildMixed: () => { [K in keyof M]?: Resolve | false | null };\nexport const mixedUnionCycle = buildMixed<{ Node: { value: number; next: \"ref\" } }>();\nexport const _recursive = 1;\nexport const factory = () => function self() { return self; };\nexport function captured(value: T) {\n const node = { value, next: () => node, consume: (other: T) => node };\n return node;\n}\nexport function nestedCaptured(outer: T) {\n return (inner: U) => {\n const node = {\n outer, inner, next: () => node,\n shadow: (value: T) => ({ outer, inner, value, next: node }),\n };\n return node;\n };\n}\nexport function constrained(key: K) {\n const node = { value: null! as T[K], next: () => node };\n return node;\n}\nexport function optionalCaptured(value: T) {\n type Node = { value: T; next: Node };\n return null! as { node?: Node | false | null };\n}\nexport function annotatedCaptured(value: T) {\n const node: { value: typeof value; next: typeof node } = { value, next: null! };\n return node;\n}\nexport function recursiveTuple(value: T) {\n type Tuple = readonly [T, Tuple];\n return null! as Tuple;\n}\nexport function inferredCaptured() {\n type Node = { value: V; next: Node };\n return null! as (T extends () => infer U ? Node : never);\n}\nexport function mappedCaptured() {\n type Node = { [K in keyof T]: { value: T[K]; next: Node } };\n return null! as Node;\n}\nexport function freshGeneric(unused: T) {\n const recur = (value: U) => recur;\n return recur;\n}\nexport function mutualCaptured(left: T, right: U) {\n type Left = { left: T; next: Right };\n type Right = { right: U; self: Right; next: Left };\n return { left: null! as Left, right: null! as Right };\n}\nexport class CapturedClass {\n constructor(public value: T) {}\n make(inner: U) {\n const node = { outer: this.value, inner, next: () => node };\n return node;\n }\n}\nexport function covariantClass() {\n return class Node {\n value!: T;\n next(): Node { return this; }\n };\n}\nexport function contravariantClass() {\n return class Node {\n consume!: (value: T) => void;\n next(): Node { return this; }\n };\n}\nexport namespace Nested {\n export function captured(value: T) {\n const node = { value, next: () => node };\n return node;\n }\n}\ntype NonNullable = \"shadowed\";\n// comment-only edit\n", - "signature": "850dc9bfa8257128f209cdd8c49501cd-type _recursive_1 = {\n value: number;\n next: _recursive_1;\n};\ntype _recursive_2 = {\n value: string;\n next: _recursive_2;\n};\ntype _recursive_3 = {\n value: number;\n next: _recursive_3;\n};\ntype _recursive_4 = {\n value: number;\n next: _recursive_4;\n};\ntype _recursive_5 = {\n value: string;\n next: _recursive_5;\n};\ntype _recursive_6 = {\n value: boolean;\n next: _recursive_6;\n};\ntype _recursive_7 = {\n value: number;\n next: _recursive_7;\n};\ntype _recursive_8 = {\n value: number;\n next: _recursive_8;\n};\ntype _recursive_9 = {\n value: string;\n next: _recursive_9;\n};\ntype _recursive_10 = {\n value: number;\n next: _recursive_10 | null;\n};\ntype _recursive_11 = {\n value: number;\n next: _recursive_11 | undefined;\n};\ntype _recursive_12 = {\n value: number;\n next: _recursive_12 | null | undefined;\n};\ntype _recursive_13 = {\n value: number;\n next: _recursive_13;\n};\ntype _recursive_14 = () => _recursive_14;\ntype _recursive_15 = {\n value: T;\n next: () => _recursive_15;\n consume: (other: T) => _recursive_15;\n};\ntype _recursive_16 = {\n outer: T;\n inner: U;\n next: () => _recursive_16;\n shadow: (value: T_1) => {\n outer: T;\n inner: U;\n value: T_1;\n next: _recursive_16;\n };\n};\ntype _recursive_17 = {\n value: T[K];\n next: () => _recursive_17;\n};\ntype _recursive_18 = {\n value: T;\n next: _recursive_18;\n};\ntype _recursive_19 = {\n value: T;\n next: _recursive_19;\n};\ntype _recursive_20 = readonly [T, _recursive_20];\ntype _recursive_21 = {\n value: U;\n next: _recursive_21;\n};\ntype _recursive_22 = { [K in keyof T]: {\n value: T[K];\n next: _recursive_22;\n}; };\ntype _recursive_23 = (value: U) => _recursive_23;\ntype _recursive_24 = {\n right: U;\n self: _recursive_24;\n next: _recursive_25;\n};\ntype _recursive_25 = {\n left: T;\n next: _recursive_24;\n};\ntype _recursive_26 = {\n outer: T;\n inner: U;\n next: () => _recursive_26;\n};\ntype _recursive_27 = {\n value: T;\n next(): _recursive_27;\n};\ntype _recursive_28 = {\n consume: (value: T) => void;\n next(): _recursive_28;\n};\nexport declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: () => {\n call: typeof objectReturn;\n};\nexport declare const tupleReturn: () => readonly [typeof tupleReturn];\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: {\n value: number;\n next: () => typeof object;\n};\nexport declare const method: {\n value: number;\n next(): typeof method;\n};\nexport declare const accessor: {\n value: number;\n readonly next: typeof accessor;\n};\nexport declare const tuple: readonly [() => typeof tuple];\nexport declare const array: (() => typeof array)[];\nexport declare const nested: {\n inner: {\n next(): {\n next(): (typeof nested)[\"inner\"];\n };\n };\n};\nexport declare const memberTuple: readonly [() => () => (typeof memberTuple)[0]];\nexport declare const memberArray: (() => (typeof memberArray)[0])[];\nexport declare const quoted: {\n \"a-b\": () => () => (typeof quoted)[\"a-b\"];\n};\nexport declare const numeric: {\n 0: () => () => (typeof numeric)[0];\n};\nexport declare const key: unique symbol;\nexport declare const computed: {\n [key]: () => (typeof computed)[typeof key];\n};\nexport declare const union: {\n next: () => typeof union;\n} | undefined;\nexport declare const specialized: {\n value: string;\n next: () => typeof specialized;\n};\nexport declare const indexed: {\n [key: string]: typeof indexed;\n};\nexport declare const mapped: {\n next: typeof mapped;\n};\nexport declare const viaAnnotation: {\n value: string;\n next: () => typeof viaAnnotation;\n};\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: typeof hiddenAlias;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"first\"];\n };\n second: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"second\"];\n };\n};\nexport declare const parenthesized: () => typeof parenthesized;\nexport declare const asserted: () => typeof asserted;\nexport declare class Methods {\n static recur(): (typeof Methods)[\"recur\"];\n static \"a-b\"(): (typeof Methods)[\"a-b\"];\n static [key](): (typeof Methods)[typeof key];\n recur(): Methods[\"recur\"];\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n};\nexport declare const nestedNumber: {\n nested(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n constrained(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n copied(inner: U): {\n outer: number;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n};\nexport declare const mappedCycle: {\n Node: {\n value: number;\n next: (typeof mappedCycle)[\"Node\"];\n };\n};\nexport declare const mappedCycleCopy: {\n Node: {\n value: number;\n next: (typeof mappedCycleCopy)[\"Node\"];\n };\n};\nexport declare const nestedCycle: {\n wrapped: {\n Node: {\n value: string;\n next: (typeof nestedCycle)[\"wrapped\"][\"Node\"];\n };\n };\n};\nexport declare const cycleKey: unique symbol;\nexport declare const keyedCycles: {\n \"a-b\": {\n value: string;\n next: (typeof keyedCycles)[\"a-b\"];\n };\n 0: {\n value: boolean;\n next: (typeof keyedCycles)[0];\n };\n [cycleKey]: {\n value: number;\n next: (typeof keyedCycles)[typeof cycleKey];\n };\n};\nexport declare const sharedCycles: {\n first: {\n Node: {\n value: number;\n next: (typeof sharedCycles)[\"first\"][\"Node\"];\n };\n };\n second: {\n Node: {\n value: number;\n next: (typeof sharedCycles)[\"second\"][\"Node\"];\n };\n };\n};\nexport declare const mutualCycle: {\n First: {\n value: number;\n next: {\n value: string;\n next: (typeof mutualCycle)[\"First\"];\n };\n };\n Second: {\n value: string;\n next: {\n value: number;\n next: (typeof mutualCycle)[\"Second\"];\n };\n };\n};\nexport declare const shadowedCycle: {\n Node: {\n value: number;\n next: (shadowedCycle: T) => typeof import(\".\").shadowedCycle[\"Node\"];\n };\n};\nexport declare const optionalCycle: {\n Node?: _recursive_1;\n};\nexport declare const nullableCycle: {\n Node: _recursive_2 | null;\n};\nexport declare const mixedCycles: {\n required: {\n Node?: _recursive_3;\n };\n optional?: {\n Node?: _recursive_3;\n } | null;\n};\nexport declare const sharedOptionalCycles: {\n first: {\n Node?: _recursive_4;\n };\n second: {\n Node?: _recursive_4;\n };\n};\nexport declare const nullableKeys: {\n \"a-b\": _recursive_5 | null;\n 0: _recursive_6 | null;\n [cycleKey]: _recursive_7 | null;\n};\nexport declare const nullableRoot: _recursive_8 | null;\nexport declare const optionalRoot: _recursive_9 | undefined;\nexport declare const nullableLinks: {\n Node: {\n value: number;\n next: (typeof nullableLinks)[\"Node\"];\n } | null;\n};\nexport declare const optionalNullableLinks: {\n Node?: _recursive_10 | null;\n};\nexport declare const nullableOptionalLinks: {\n Node: _recursive_11 | null;\n};\nexport declare const nullishLinks: {\n Node?: _recursive_12 | null;\n};\nexport declare const mixedUnionCycle: {\n Node?: false | _recursive_13 | null;\n};\nexport declare const _recursive = 1;\nexport declare const factory: () => () => _recursive_14;\nexport declare function captured(value: T): _recursive_15;\nexport declare function nestedCaptured(outer: T): (inner: U) => _recursive_16;\nexport declare function constrained(key: K): _recursive_17;\nexport declare function optionalCaptured(value: T): {\n node?: _recursive_18 | false | null;\n};\nexport declare function annotatedCaptured(value: T): _recursive_19;\nexport declare function recursiveTuple(value: T): _recursive_20;\nexport declare function inferredCaptured(): (T extends () => infer U ? _recursive_21 : never);\nexport declare function mappedCaptured(): _recursive_22;\nexport declare function freshGeneric(unused: T): _recursive_23;\nexport declare function mutualCaptured(left: T, right: U): {\n left: _recursive_25;\n right: _recursive_24;\n};\nexport declare class CapturedClass {\n value: T;\n constructor(value: T);\n make(inner: U): _recursive_26;\n}\nexport declare function covariantClass(): {\n new (): _recursive_27;\n};\nexport declare function contravariantClass(): {\n new (): _recursive_28;\n};\nexport declare namespace Nested {\n type _recursive_29 = {\n value: T;\n next: () => _recursive_29;\n };\n export function captured(value: T): _recursive_29;\n export {};\n}\nexport {};\n", + "version": "90c799933358055d40b311c2862a4ccf-import { f } from \"./recursive-conditional-utils\";\nexport const conditionalAliasCopy = f;\nexport function anonymousThisReturn() {\n return {\n relyingOnThis() {\n return this;\n },\n };\n}\nexport const arrow = () => arrow;\nexport const expression = function self() { return self; };\nexport const first = () => second;\nexport const second = () => first;\nexport const generic = (value: T) => generic;\nexport const objectReturn = () => ({ call: objectReturn });\nexport const tupleReturn = () => [tupleReturn] as const;\nexport const shadowed = function self(shadowed: number) { return self; };\nexport const object = { value: 1, next: () => object };\nexport const method = { value: 1, next() { return method; } };\nexport const accessor = { value: 1, get next() { return accessor; } };\nexport const tuple = [() => tuple] as const;\nexport const array = [() => array];\nexport const nested = { inner: { next() { return nested.inner; } } };\nexport const memberTuple = [function self() { return self; }] as const;\nexport const memberArray = [function self() { return self; }];\nexport const quoted = { \"a-b\": function self() { return self; } };\nexport const numeric = { 0: function self() { return self; } };\nexport const key = Symbol();\nexport const computed = { [key]: function self() { return self; } };\nexport const union = true as boolean ? { next: () => union } : undefined;\nfunction create(value: T) {\n const result = { value, next: () => result };\n return result;\n}\nexport const specialized = create(\"text\");\nfunction createIndexed() {\n const value: { [key: string]: typeof value } = {};\n return value;\n}\nexport const indexed = createIndexed();\nfunction createMapped() {\n const value: { [K in keyof T]: typeof value } = null!;\n return value;\n}\nexport const mapped = createMapped<{ next: unknown }>();\nfunction createAnnotated(value: T) {\n const node: { value: T; next: () => typeof node } = { value, next: () => node };\n return node;\n}\nexport const viaAnnotation = createAnnotated(\"text\");\nexport type Link = { value: T; next: Link };\nexport type Callable = { (value: T): Callable; link: Link };\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport const nextLink = link.next;\nexport const nextCallable = callable(1);\nfunction createHidden(value: T) {\n type Hidden = { value: T; next: Hidden };\n return null! as Hidden;\n}\nexport const hiddenAlias = createHidden(\"text\");\nexport const siblingHiddenAliases = { first: hiddenAlias, second: hiddenAlias };\nexport const parenthesized = (function self() { return self; });\nexport const asserted = (function self() { return self; }) satisfies () => unknown;\nexport class Methods {\n static recur() { return Methods.recur; }\n static \"a-b\"() { return Methods[\"a-b\"]; }\n static [key]() { return Methods[key]; }\n recur() { return this.recur; }\n}\nexport function overloaded(value: string): typeof overloaded;\nexport function overloaded(value: number): typeof overloaded;\nexport function overloaded(value: string | number) { return overloaded; }\nexport const nestedOwner = {\n make(outer: T) {\n return {\n nested(inner: U) { return { outer, inner, owner: nestedOwner }; },\n constrained(inner: U) { return { outer, inner, owner: nestedOwner }; },\n copied(inner: U): { outer: T; inner: U; owner: typeof nestedOwner } {\n return { outer, inner, owner: nestedOwner };\n },\n rest(...values: [U]) { return { outer, inner: values[0], owner: nestedOwner }; },\n };\n },\n};\nexport const nestedNumber = nestedOwner.make(1);\ntype Show = { [K in keyof T]: T[K] } & unknown;\ntype Resolve = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? Resolve : M[K][P];\n}>;\ndeclare const build: () => { [K in keyof M]: Resolve };\nexport const mappedCycle = build<{ Node: { value: number; next: \"ref\" } }>();\nexport const mappedCycleCopy = mappedCycle;\nexport const nestedCycle = { wrapped: build<{ Node: { value: string; next: \"ref\" } }>() };\nexport const cycleKey = Symbol();\nexport const keyedCycles = build<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\nexport const sharedCycles = { first: mappedCycle, second: mappedCycle };\ntype ResolveMutual = Show<{\n [P in keyof M[K]]: M[K][P] extends { ref: infer R extends keyof M } ? ResolveMutual : M[K][P];\n}>;\ndeclare const buildMutual: () => { [K in keyof M]: ResolveMutual };\nexport const mutualCycle = buildMutual<{\n First: { value: number; next: { ref: \"Second\" } };\n Second: { value: string; next: { ref: \"First\" } };\n}>();\ntype ResolveShadowed = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? (shadowedCycle: T) => ResolveShadowed : M[K][P];\n}>;\ndeclare const buildShadowed: () => { [K in keyof M]: ResolveShadowed };\nexport const shadowedCycle = buildShadowed<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptional: () => { [K in keyof M]?: Resolve };\nexport const optionalCycle = buildOptional<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildNullable: () => { [K in keyof M]: Resolve | null };\nexport const nullableCycle = buildNullable<{ Node: { value: string; next: \"ref\" } }>();\ndeclare const wrap: (value: T) => { required: T; optional?: T | null };\nexport const mixedCycles = wrap(optionalCycle);\nexport const sharedOptionalCycles = { first: optionalCycle, second: optionalCycle };\nexport const nullableKeys = buildNullable<{\n \"a-b\": { value: string; next: \"ref\" };\n 0: { value: boolean; next: \"ref\" };\n [cycleKey]: { value: number; next: \"ref\" };\n}>();\ndeclare const buildNullableRoot: () => Resolve | null;\nexport const nullableRoot = buildNullableRoot<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalRoot: () => Resolve | undefined;\nexport const optionalRoot = buildOptionalRoot<{ Node: { value: string; next: \"ref\" } }>();\ntype ResolveNullable = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullable | null : M[K][P];\n}>;\ndeclare const buildNullableLinks: () => { [K in keyof M]: ResolveNullable | null };\nexport const nullableLinks = buildNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildOptionalNullableLinks: () => { [K in keyof M]?: ResolveNullable | null };\nexport const optionalNullableLinks = buildOptionalNullableLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveOptional = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveOptional | undefined : M[K][P];\n}>;\ndeclare const buildNullableOptionalLinks: () => { [K in keyof M]: ResolveOptional | null };\nexport const nullableOptionalLinks = buildNullableOptionalLinks<{ Node: { value: number; next: \"ref\" } }>();\ntype ResolveNullish = Show<{\n [P in keyof M[K]]: M[K][P] extends \"ref\" ? ResolveNullish | null | undefined : M[K][P];\n}>;\ndeclare const buildNullishLinks: () => { [K in keyof M]?: ResolveNullish | null };\nexport const nullishLinks = buildNullishLinks<{ Node: { value: number; next: \"ref\" } }>();\ndeclare const buildMixed: () => { [K in keyof M]?: Resolve | false | null };\nexport const mixedUnionCycle = buildMixed<{ Node: { value: number; next: \"ref\" } }>();\nexport const _recursive = 1;\nexport const factory = () => function self() { return self; };\nexport function captured(value: T) {\n const node = { value, next: () => node, consume: (other: T) => node };\n return node;\n}\nexport function nestedCaptured(outer: T) {\n return (inner: U) => {\n const node = {\n outer, inner, next: () => node,\n shadow: (value: T) => ({ outer, inner, value, next: node }),\n };\n return node;\n };\n}\nexport function constrained(key: K) {\n const node = { value: null! as T[K], next: () => node };\n return node;\n}\nexport function optionalCaptured(value: T) {\n type Node = { value: T; next: Node };\n return null! as { node?: Node | false | null };\n}\nexport function annotatedCaptured(value: T) {\n const node: { value: typeof value; next: typeof node } = { value, next: null! };\n return node;\n}\nexport function recursiveTuple(value: T) {\n type Tuple = readonly [T, Tuple];\n return null! as Tuple;\n}\nexport function inferredCaptured() {\n type Node = { value: V; next: Node };\n return null! as (T extends () => infer U ? Node : never);\n}\nexport function mappedCaptured() {\n type Node = { [K in keyof T]: { value: T[K]; next: Node } };\n return null! as Node;\n}\nexport function freshGeneric(unused: T) {\n const recur = (value: U) => recur;\n return recur;\n}\nexport function mutualCaptured(left: T, right: U) {\n type Left = { left: T; next: Right };\n type Right = { right: U; self: Right; next: Left };\n return { left: null! as Left, right: null! as Right };\n}\nexport class CapturedClass {\n constructor(public value: T) {}\n make(inner: U) {\n const node = { outer: this.value, inner, next: () => node };\n return node;\n }\n}\nexport function covariantClass() {\n return class Node {\n value!: T;\n next(): Node { return this; }\n };\n}\nexport function contravariantClass() {\n return class Node {\n consume!: (value: T) => void;\n next(): Node { return this; }\n };\n}\nexport namespace Nested {\n export function captured(value: T) {\n const node = { value, next: () => node };\n return node;\n }\n}\ntype NonNullable = \"shadowed\";\n// comment-only edit\n", + "signature": "31e970944add74d341dad7ccc3687e7d-type _recursive_1 = {\n relyingOnThis(): _recursive_1;\n};\ntype _recursive_2 = {\n value: number;\n next: _recursive_2;\n};\ntype _recursive_3 = {\n value: string;\n next: _recursive_3;\n};\ntype _recursive_4 = {\n value: number;\n next: _recursive_4;\n};\ntype _recursive_5 = {\n value: number;\n next: _recursive_5;\n};\ntype _recursive_6 = {\n value: string;\n next: _recursive_6;\n};\ntype _recursive_7 = {\n value: boolean;\n next: _recursive_7;\n};\ntype _recursive_8 = {\n value: number;\n next: _recursive_8;\n};\ntype _recursive_9 = {\n value: number;\n next: _recursive_9;\n};\ntype _recursive_10 = {\n value: string;\n next: _recursive_10;\n};\ntype _recursive_11 = {\n value: number;\n next: _recursive_11 | null;\n};\ntype _recursive_12 = {\n value: number;\n next: _recursive_12 | undefined;\n};\ntype _recursive_13 = {\n value: number;\n next: _recursive_13 | null | undefined;\n};\ntype _recursive_14 = {\n value: number;\n next: _recursive_14;\n};\ntype _recursive_15 = () => _recursive_15;\ntype _recursive_16 = {\n value: T;\n next: () => _recursive_16;\n consume: (other: T) => _recursive_16;\n};\ntype _recursive_17 = {\n outer: T;\n inner: U;\n next: () => _recursive_17;\n shadow: (value: T_1) => {\n outer: T;\n inner: U;\n value: T_1;\n next: _recursive_17;\n };\n};\ntype _recursive_18 = {\n value: T[K];\n next: () => _recursive_18;\n};\ntype _recursive_19 = {\n value: T;\n next: _recursive_19;\n};\ntype _recursive_20 = {\n value: T;\n next: _recursive_20;\n};\ntype _recursive_21 = readonly [T, _recursive_21];\ntype _recursive_22 = {\n value: U;\n next: _recursive_22;\n};\ntype _recursive_23 = { [K in keyof T]: {\n value: T[K];\n next: _recursive_23;\n}; };\ntype _recursive_24 = (value: U) => _recursive_24;\ntype _recursive_25 = {\n right: U;\n self: _recursive_25;\n next: _recursive_26;\n};\ntype _recursive_26 = {\n left: T;\n next: _recursive_25;\n};\ntype _recursive_27 = {\n outer: T;\n inner: U;\n next: () => _recursive_27;\n};\ntype _recursive_28 = {\n value: T;\n next(): _recursive_28;\n};\ntype _recursive_29 = {\n consume: (value: T) => void;\n next(): _recursive_29;\n};\nimport { f } from \"./recursive-conditional-utils\";\nexport declare const conditionalAliasCopy: typeof f;\nexport declare function anonymousThisReturn(): {\n relyingOnThis(): _recursive_1;\n};\nexport declare const arrow: () => typeof arrow;\nexport declare const expression: () => typeof expression;\nexport declare const first: () => typeof second;\nexport declare const second: () => typeof first;\nexport declare const generic: (value: T) => typeof generic;\nexport declare const objectReturn: () => {\n call: typeof objectReturn;\n};\nexport declare const tupleReturn: () => readonly [typeof tupleReturn];\nexport declare const shadowed: (shadowed: number) => typeof import(\".\").shadowed;\nexport declare const object: {\n value: number;\n next: () => typeof object;\n};\nexport declare const method: {\n value: number;\n next(): typeof method;\n};\nexport declare const accessor: {\n value: number;\n readonly next: typeof accessor;\n};\nexport declare const tuple: readonly [() => typeof tuple];\nexport declare const array: (() => typeof array)[];\nexport declare const nested: {\n inner: {\n next(): {\n next(): (typeof nested)[\"inner\"];\n };\n };\n};\nexport declare const memberTuple: readonly [() => () => (typeof memberTuple)[0]];\nexport declare const memberArray: (() => (typeof memberArray)[0])[];\nexport declare const quoted: {\n \"a-b\": () => () => (typeof quoted)[\"a-b\"];\n};\nexport declare const numeric: {\n 0: () => () => (typeof numeric)[0];\n};\nexport declare const key: unique symbol;\nexport declare const computed: {\n [key]: () => (typeof computed)[typeof key];\n};\nexport declare const union: {\n next: () => typeof union;\n} | undefined;\nexport declare const specialized: {\n value: string;\n next: () => typeof specialized;\n};\nexport declare const indexed: {\n [key: string]: typeof indexed;\n};\nexport declare const mapped: {\n next: typeof mapped;\n};\nexport declare const viaAnnotation: {\n value: string;\n next: () => typeof viaAnnotation;\n};\nexport type Link = {\n value: T;\n next: Link;\n};\nexport type Callable = {\n (value: T): Callable;\n link: Link;\n};\nexport declare const link: Link;\nexport declare const callable: Callable;\nexport declare const nextLink: Link;\nexport declare const nextCallable: Callable;\nexport declare const hiddenAlias: {\n value: string;\n next: typeof hiddenAlias;\n};\nexport declare const siblingHiddenAliases: {\n first: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"first\"];\n };\n second: {\n value: string;\n next: (typeof siblingHiddenAliases)[\"second\"];\n };\n};\nexport declare const parenthesized: () => typeof parenthesized;\nexport declare const asserted: () => typeof asserted;\nexport declare class Methods {\n static recur(): (typeof Methods)[\"recur\"];\n static \"a-b\"(): (typeof Methods)[\"a-b\"];\n static [key](): (typeof Methods)[typeof key];\n recur(): Methods[\"recur\"];\n}\nexport declare function overloaded(value: string): typeof overloaded;\nexport declare function overloaded(value: number): typeof overloaded;\nexport declare const nestedOwner: {\n make(outer: T): {\n nested(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n constrained(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n copied(inner: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: T;\n inner: U;\n owner: typeof nestedOwner;\n };\n };\n};\nexport declare const nestedNumber: {\n nested(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n constrained(inner: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n copied(inner: U): {\n outer: number;\n inner: U;\n owner: typeof nestedOwner;\n };\n rest(values_0: U): {\n outer: number;\n inner: U;\n owner: {\n make(outer: T): {\n nested(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n constrained(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n copied(inner: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n rest(values_0: U_1): {\n outer: T;\n inner: U_1;\n owner: typeof nestedOwner;\n };\n };\n };\n };\n};\nexport declare const mappedCycle: {\n Node: {\n value: number;\n next: (typeof mappedCycle)[\"Node\"];\n };\n};\nexport declare const mappedCycleCopy: {\n Node: {\n value: number;\n next: (typeof mappedCycleCopy)[\"Node\"];\n };\n};\nexport declare const nestedCycle: {\n wrapped: {\n Node: {\n value: string;\n next: (typeof nestedCycle)[\"wrapped\"][\"Node\"];\n };\n };\n};\nexport declare const cycleKey: unique symbol;\nexport declare const keyedCycles: {\n \"a-b\": {\n value: string;\n next: (typeof keyedCycles)[\"a-b\"];\n };\n 0: {\n value: boolean;\n next: (typeof keyedCycles)[0];\n };\n [cycleKey]: {\n value: number;\n next: (typeof keyedCycles)[typeof cycleKey];\n };\n};\nexport declare const sharedCycles: {\n first: {\n Node: {\n value: number;\n next: (typeof sharedCycles)[\"first\"][\"Node\"];\n };\n };\n second: {\n Node: {\n value: number;\n next: (typeof sharedCycles)[\"second\"][\"Node\"];\n };\n };\n};\nexport declare const mutualCycle: {\n First: {\n value: number;\n next: {\n value: string;\n next: (typeof mutualCycle)[\"First\"];\n };\n };\n Second: {\n value: string;\n next: {\n value: number;\n next: (typeof mutualCycle)[\"Second\"];\n };\n };\n};\nexport declare const shadowedCycle: {\n Node: {\n value: number;\n next: (shadowedCycle: T) => typeof import(\".\").shadowedCycle[\"Node\"];\n };\n};\nexport declare const optionalCycle: {\n Node?: _recursive_2;\n};\nexport declare const nullableCycle: {\n Node: _recursive_3 | null;\n};\nexport declare const mixedCycles: {\n required: {\n Node?: _recursive_4;\n };\n optional?: {\n Node?: _recursive_4;\n } | null;\n};\nexport declare const sharedOptionalCycles: {\n first: {\n Node?: _recursive_5;\n };\n second: {\n Node?: _recursive_5;\n };\n};\nexport declare const nullableKeys: {\n \"a-b\": _recursive_6 | null;\n 0: _recursive_7 | null;\n [cycleKey]: _recursive_8 | null;\n};\nexport declare const nullableRoot: _recursive_9 | null;\nexport declare const optionalRoot: _recursive_10 | undefined;\nexport declare const nullableLinks: {\n Node: {\n value: number;\n next: (typeof nullableLinks)[\"Node\"];\n } | null;\n};\nexport declare const optionalNullableLinks: {\n Node?: _recursive_11 | null;\n};\nexport declare const nullableOptionalLinks: {\n Node: _recursive_12 | null;\n};\nexport declare const nullishLinks: {\n Node?: _recursive_13 | null;\n};\nexport declare const mixedUnionCycle: {\n Node?: false | _recursive_14 | null;\n};\nexport declare const _recursive = 1;\nexport declare const factory: () => () => _recursive_15;\nexport declare function captured(value: T): _recursive_16;\nexport declare function nestedCaptured(outer: T): (inner: U) => _recursive_17;\nexport declare function constrained(key: K): _recursive_18;\nexport declare function optionalCaptured(value: T): {\n node?: _recursive_19 | false | null;\n};\nexport declare function annotatedCaptured(value: T): _recursive_20;\nexport declare function recursiveTuple(value: T): _recursive_21;\nexport declare function inferredCaptured(): (T extends () => infer U ? _recursive_22 : never);\nexport declare function mappedCaptured(): _recursive_23;\nexport declare function freshGeneric(unused: T): _recursive_24;\nexport declare function mutualCaptured(left: T, right: U): {\n left: _recursive_26;\n right: _recursive_25;\n};\nexport declare class CapturedClass {\n value: T;\n constructor(value: T);\n make(inner: U): _recursive_27;\n}\nexport declare function covariantClass(): {\n new (): _recursive_28;\n};\nexport declare function contravariantClass(): {\n new (): _recursive_29;\n};\nexport declare namespace Nested {\n type _recursive_30 = {\n value: T;\n next: () => _recursive_30;\n };\n export function captured(value: T): _recursive_30;\n export {};\n}\nexport {};\n", "impliedNodeFormat": 1 } } ], + "fileIdsList": [ + [ + "../recursive-conditional-utils.ts" + ] + ], "options": { "composite": true, "exactOptionalPropertyTypes": true, "outDir": "./", "strict": true }, + "referencedMap": { + "../index.ts": [ + "../recursive-conditional-utils.ts" + ] + }, "latestChangedDtsFile": "./index.d.ts", - "size": 24544 + "size": 25491 } producer/tsconfig.json:: @@ -2200,6 +2387,7 @@ Signatures:: consumer/tsconfig.json:: SemanticDiagnostics:: *refresh* /home/src/tslibs/TS/Lib/lib.es2026.full.d.ts +*refresh* /home/src/workspaces/project/producer/dist/recursive-conditional-utils.d.ts *refresh* /home/src/workspaces/project/producer/dist/index.d.ts *refresh* /home/src/workspaces/project/consumer/index.ts Signatures:: @@ -2210,190 +2398,210 @@ Edit [2]:: no change tsgo --build consumer ExitStatus:: DiagnosticsPresent_OutputsGenerated Output:: -consumer/index.ts:158:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. +consumer/index.ts:166:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. -158 const invalid: number = arrow()()(); +166 const invalid: number = arrow()()();    ~~~~~~~ -consumer/index.ts:159:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. +consumer/index.ts:167:7 - error TS2322: Type '() => ...' is not assignable to type 'number'. -159 const invalidExpression: number = expression()()(); +167 const invalidExpression: number = expression()()();    ~~~~~~~~~~~~~~~~~ -consumer/index.ts:160:7 - error TS2322: Type '() => { call: ...; }' is not assignable to type 'number'. +consumer/index.ts:168:7 - error TS2322: Type '() => { call: ...; }' is not assignable to type 'number'. -160 const invalidObject: number = objectReturn().call; +168 const invalidObject: number = objectReturn().call;    ~~~~~~~~~~~~~ -consumer/index.ts:161:7 - error TS2322: Type '() => readonly [...]' is not assignable to type 'number'. +consumer/index.ts:169:7 - error TS2322: Type '() => readonly [...]' is not assignable to type 'number'. -161 const invalidTuple: number = tupleReturn()[0]; +169 const invalidTuple: number = tupleReturn()[0];    ~~~~~~~~~~~~ -consumer/index.ts:162:7 - error TS2322: Type '(shadowed: number) => ...' is not assignable to type 'number'. +consumer/index.ts:170:7 - error TS2322: Type '(shadowed: number) => ...' is not assignable to type 'number'. -162 const invalidShadowed: number = shadowed(1); +170 const invalidShadowed: number = shadowed(1);    ~~~~~~~~~~~~~~~ -consumer/index.ts:163:7 - error TS2322: Type 'number' is not assignable to type 'string'. +consumer/index.ts:171:7 - error TS2322: Type 'number' is not assignable to type 'string'. -163 const invalidObjectValue: string = object.next().value; +171 const invalidObjectValue: string = object.next().value;    ~~~~~~~~~~~~~~~~~~ -consumer/index.ts:164:7 - error TS2322: Type 'readonly [() => ...]' is not assignable to type 'number'. +consumer/index.ts:172:7 - error TS2322: Type 'readonly [() => ...]' is not assignable to type 'number'. -164 const invalidTupleValue: number = tuple[0](); +172 const invalidTupleValue: number = tuple[0]();    ~~~~~~~~~~~~~~~~~ -consumer/index.ts:165:7 - error TS2322: Type 'string' is not assignable to type 'number'. +consumer/index.ts:173:7 - error TS2322: Type 'string' is not assignable to type 'number'. -165 const invalidSpecialized: number = specialized.next().value; +173 const invalidSpecialized: number = specialized.next().value;    ~~~~~~~~~~~~~~~~~~ -consumer/index.ts:166:7 - error TS2322: Type '{ next: ...; }' is not assignable to type 'number'. +consumer/index.ts:174:7 - error TS2322: Type '{ next: ...; }' is not assignable to type 'number'. -166 const invalidMapped: number = mapped.next; +174 const invalidMapped: number = mapped.next;    ~~~~~~~~~~~~~ -consumer/index.ts:167:7 - error TS2322: Type 'string' is not assignable to type 'number'. +consumer/index.ts:175:7 - error TS2322: Type 'string' is not assignable to type 'number'. -167 const invalidAnnotation: number = viaAnnotation.next().value; +175 const invalidAnnotation: number = viaAnnotation.next().value;    ~~~~~~~~~~~~~~~~~ -consumer/index.ts:168:7 - error TS2322: Type 'string' is not assignable to type 'number'. +consumer/index.ts:176:7 - error TS2322: Type 'string' is not assignable to type 'number'. -168 const invalidLink: number = nextLink.next.value; +176 const invalidLink: number = nextLink.next.value;    ~~~~~~~~~~~ -consumer/index.ts:169:7 - error TS2322: Type 'number' is not assignable to type 'string'. +consumer/index.ts:177:7 - error TS2322: Type 'number' is not assignable to type 'string'. -169 const invalidCallable: string = nextCallable(1).link.value; +177 const invalidCallable: string = nextCallable(1).link.value;    ~~~~~~~~~~~~~~~ -consumer/index.ts:170:7 - error TS2322: Type 'string' is not assignable to type 'number'. +consumer/index.ts:178:7 - error TS2322: Type 'string' is not assignable to type 'number'. -170 const invalidHiddenValue: number = hiddenAlias.next.next.value; +178 const invalidHiddenValue: number = hiddenAlias.next.next.value;    ~~~~~~~~~~~~~~~~~~ -consumer/index.ts:171:7 - error TS2322: Type '() => (typeof Methods)["recur"]' is not assignable to type 'number'. +consumer/index.ts:179:7 - error TS2322: Type '() => (typeof Methods)["recur"]' is not assignable to type 'number'. -171 const invalidMethod: number = Methods.recur()(); +179 const invalidMethod: number = Methods.recur()();    ~~~~~~~~~~~~~ -consumer/index.ts:172:7 - error TS2322: Type '() => (typeof Methods)[typeof key]' is not assignable to type 'number'. +consumer/index.ts:180:7 - error TS2322: Type '() => (typeof Methods)[typeof key]' is not assignable to type 'number'. -172 const invalidComputedMethod: number = Methods[key]()(); +180 const invalidComputedMethod: number = Methods[key]()();    ~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:173:7 - error TS2322: Type 'string' is not assignable to type 'boolean'. +consumer/index.ts:181:7 - error TS2322: Type 'string' is not assignable to type 'boolean'. -173 const invalidNestedOuter: boolean = nestedString.outer; +181 const invalidNestedOuter: boolean = nestedString.outer;    ~~~~~~~~~~~~~~~~~~ -consumer/index.ts:174:7 - error TS2322: Type 'number' is not assignable to type 'string'. +consumer/index.ts:182:7 - error TS2322: Type 'number' is not assignable to type 'string'. -174 const invalidNestedInner: string = nestedString.inner; +182 const invalidNestedInner: string = nestedString.inner;    ~~~~~~~~~~~~~~~~~~ -consumer/index.ts:175:26 - error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. +consumer/index.ts:183:26 - error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. -175 nestedNumber.constrained("wrong"); +183 nestedNumber.constrained("wrong");    ~~~~~~~ -consumer/index.ts:176:7 - error TS2322: Type 'number' is not assignable to type 'string'. +consumer/index.ts:184:7 - error TS2322: Type 'number' is not assignable to type 'string'. -176 const invalidMappedCycleValue: string = mappedCycle.Node.next.next.value; +184 const invalidMappedCycleValue: string = mappedCycle.Node.next.next.value;    ~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:177:7 - error TS2322: Type 'string' is not assignable to type 'number'. +consumer/index.ts:185:7 - error TS2322: Type 'string' is not assignable to type 'number'. -177 const invalidMutualCycleValue: number = mutualCycle.First.next.value; +185 const invalidMutualCycleValue: number = mutualCycle.First.next.value;    ~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:178:7 - error TS2322: Type 'number' is not assignable to type 'string'. +consumer/index.ts:186:7 - error TS2322: Type 'number' is not assignable to type 'string'. -178 const invalidShadowedMappedValue: string = shadowedCycle.Node.next(1).next("text").value; +186 const invalidShadowedMappedValue: string = shadowedCycle.Node.next(1).next("text").value;    ~~~~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:179:7 - error TS2322: Type 'null' is not assignable to type '_recursive_1'. +consumer/index.ts:187:7 - error TS2322: Type 'null' is not assignable to type '_recursive_2'. -179 const invalidNullNext: OptionalNode["next"] = null; +187 const invalidNullNext: OptionalNode["next"] = null;    ~~~~~~~~~~~~~~~ -consumer/index.ts:180:7 - error TS2322: Type 'undefined' is not assignable to type '_recursive_1'. +consumer/index.ts:188:7 - error TS2322: Type 'undefined' is not assignable to type '_recursive_2'. -180 const invalidUndefinedNext: OptionalNode["next"] = undefined; +188 const invalidUndefinedNext: OptionalNode["next"] = undefined;    ~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:181:42 - error TS2531: Object is possibly 'null'. +consumer/index.ts:189:42 - error TS2531: Object is possibly 'null'. -181 const invalidNullableLinkValue: number = nullableLinks.Node!.next.value; +189 const invalidNullableLinkValue: number = nullableLinks.Node!.next.value;    ~~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:182:41 - error TS2533: Object is possibly 'null' or 'undefined'. +consumer/index.ts:190:41 - error TS2533: Object is possibly 'null' or 'undefined'. -182 const invalidNullishLinkValue: number = nullishLinks.Node!.next.value; +190 const invalidNullishLinkValue: number = nullishLinks.Node!.next.value;    ~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:183:26 - error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. +consumer/index.ts:191:26 - error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. -183 captured("text").consume(1); +191 captured("text").consume(1);    ~ -consumer/index.ts:184:7 - error TS2322: Type 'string' is not assignable to type 'number'. +consumer/index.ts:192:7 - error TS2322: Type 'string' is not assignable to type 'number'. -184 const invalidRecursiveTupleValue: number = recursiveTuple("text")[1][0]; +192 const invalidRecursiveTupleValue: number = recursiveTuple("text")[1][0];    ~~~~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:185:7 - error TS2322: Type 'number' is not assignable to type 'string'. +consumer/index.ts:193:7 - error TS2322: Type 'number' is not assignable to type 'string'. -185 const invalidCapturedOuter: string = nestedCapturedValue.outer; +193 const invalidCapturedOuter: string = nestedCapturedValue.outer;    ~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:186:7 - error TS2322: Type 'string' is not assignable to type 'number'. +consumer/index.ts:194:7 - error TS2322: Type 'string' is not assignable to type 'number'. -186 const invalidCapturedInner: number = nestedCapturedValue.inner; +194 const invalidCapturedInner: number = nestedCapturedValue.inner;    ~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:188:7 - error TS2322: Type 'boolean' is not assignable to type '_recursive_13'. +consumer/index.ts:196:7 - error TS2322: Type 'boolean' is not assignable to type '_recursive_14'. -188 const invalidMixedNext: WithoutFalseOrNullish["next"] = false; +196 const invalidMixedNext: WithoutFalseOrNullish["next"] = false;    ~~~~~~~~~~~~~~~~ -consumer/index.ts:189:7 - error TS2322: Type 'string' is not assignable to type 'number'. +consumer/index.ts:197:7 - error TS2322: Type 'string' is not assignable to type 'number'. -189 const invalidInferredCapturedValue: number = inferredCaptured<() => string>().next.value; +197 const invalidInferredCapturedValue: number = inferredCaptured<() => string>().next.value;    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:190:7 - error TS2322: Type 'number' is not assignable to type 'string'. +consumer/index.ts:198:7 - error TS2322: Type 'number' is not assignable to type 'string'. -190 const invalidMappedCapturedValue: string = mappedCaptured<{ value: number }>().value.next.value.value; +198 const invalidMappedCapturedValue: string = mappedCaptured<{ value: number }>().value.next.value.value;    ~~~~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:191:7 - error TS2322: Type 'number' is not assignable to type 'boolean'. +consumer/index.ts:199:7 - error TS2322: Type 'number' is not assignable to type 'boolean'. -191 const invalidMutualCapturedValue: boolean = mutualCaptured(1, "text").right.self.next.left; +199 const invalidMutualCapturedValue: boolean = mutualCaptured(1, "text").right.self.next.left;    ~~~~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:192:7 - error TS2322: Type 'string' is not assignable to type 'number'. +consumer/index.ts:200:7 - error TS2322: Type 'string' is not assignable to type 'number'. -192 const invalidCapturedClassValue: number = capturedClassResult.outer; +200 const invalidCapturedClassValue: number = capturedClassResult.outer;    ~~~~~~~~~~~~~~~~~~~~~~~~~ -consumer/index.ts:193:7 - error TS2322: Type '_recursive_27' is not assignable to type '_recursive_27'. +consumer/index.ts:201:7 - error TS2322: Type '_recursive_28' is not assignable to type '_recursive_28'. Type 'unknown' is not assignable to type 'string'. -193 const invalidCovariance: typeof covariantString = covariantUnknown.next(); +201 const invalidCovariance: typeof covariantString = covariantUnknown.next();    ~~~~~~~~~~~~~~~~~ -consumer/index.ts:194:7 - error TS2322: Type '_recursive_28' is not assignable to type '_recursive_28'. +consumer/index.ts:202:7 - error TS2322: Type '_recursive_29' is not assignable to type '_recursive_29'. Type 'unknown' is not assignable to type 'string'. -194 const invalidContravariance: typeof contravariantUnknown = contravariantString.next(); +202 const invalidContravariance: typeof contravariantUnknown = contravariantString.next();    ~~~~~~~~~~~~~~~~~~~~~ +consumer/index.ts:203:7 - error TS2322: Type '_recursive_1' is not assignable to type 'number'. + +203 const invalidAnonymousThis: number = anonymousThisResult; +   ~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:204:7 - error TS2322: Type '() => _recursive_1' is not assignable to type 'number'. + +204 const invalidAnonymousThisMethod: number = anonymousThisResult.relyingOnThis; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:205:7 - error TS2322: Type 'number' is not assignable to type 'string'. + +205 const invalidConditionalAlias: string = conditionalAliasResult; +   ~~~~~~~~~~~~~~~~~~~~~~~ + +consumer/index.ts:206:7 - error TS2322: Type 'number' is not assignable to type 'number[]'. + +206 const invalidConditionalAliasArray: number[] = conditionalAliasResult; +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + -Found 36 errors in the same file, starting at: consumer/index.ts:158 +Found 40 errors in the same file, starting at: consumer/index.ts:166 //// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo] *rewrite with same content* //// [/home/src/workspaces/project/consumer/tsconfig.tsbuildinfo.readable.baseline.txt] *rewrite with same content* @@ -2401,6 +2609,7 @@ Found 36 errors in the same file, starting at: consumer/index.ts:158 consumer/tsconfig.json:: SemanticDiagnostics:: *refresh* /home/src/tslibs/TS/Lib/lib.es2026.full.d.ts +*refresh* /home/src/workspaces/project/producer/dist/recursive-conditional-utils.d.ts *refresh* /home/src/workspaces/project/producer/dist/index.d.ts *refresh* /home/src/workspaces/project/consumer/index.ts Signatures:: diff --git a/tsc/testdata/tests/cases/compiler/recursiveFunctionDeclarationSerialization.ts b/tsc/testdata/tests/cases/compiler/recursiveFunctionDeclarationSerialization.ts index eab02793e124a..925a307c59e2b 100644 --- a/tsc/testdata/tests/cases/compiler/recursiveFunctionDeclarationSerialization.ts +++ b/tsc/testdata/tests/cases/compiler/recursiveFunctionDeclarationSerialization.ts @@ -374,6 +374,28 @@ if (mixedCycle.Node) { const value: number = mixedCycle.Node.next.next.value; } +// @filename: anonymousThisReturn.ts +export function test() { + return { + relyingOnThis() { + return this; + }, + }; +} +test().relyingOnThis(); + +// @filename: recursiveConditionalAliasUtils.ts +type Recursive = T extends Array ? Recursive : T; +export const f = (): Recursive => { + return null!; +}; + +// @filename: recursiveConditionalAliasCopy.ts +import { f } from "./recursiveConditionalAliasUtils"; +export const a = f; +const numberValue: number = a(); +const stringValue: string = a(); + // @filename: anonymousBindings.ts export const _recursive = 1; export const factory = () => function self() { return self; };