parseman 0.7.1 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/combinators/expect.d.ts +36 -0
- package/dist/combinators/expect.d.ts.map +1 -0
- package/dist/combinators/grammar.d.ts.map +1 -1
- package/dist/combinators/scanTo.d.ts.map +1 -1
- package/dist/compiler/codegen.d.ts +33 -0
- package/dist/compiler/codegen.d.ts.map +1 -1
- package/dist/compiler/scannable-run.d.ts +46 -0
- package/dist/compiler/scannable-run.d.ts.map +1 -0
- package/dist/compiler/trivia-fast-path.d.ts +27 -14
- package/dist/compiler/trivia-fast-path.d.ts.map +1 -1
- package/dist/index.cjs +534 -144
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +534 -144
- package/dist/index.js.map +4 -4
- package/dist/plugin/evaluator.d.ts +18 -0
- package/dist/plugin/evaluator.d.ts.map +1 -1
- package/dist/plugin/index.cjs +701 -162
- package/dist/plugin/index.cjs.map +4 -4
- package/dist/plugin/index.d.ts.map +1 -1
- package/dist/plugin/index.js +701 -162
- package/dist/plugin/index.js.map +4 -4
- package/dist/types.d.ts +12 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +6 -2
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { Combinator, ParseError } from '../types.ts';
|
|
2
|
+
export type { ParseError };
|
|
3
|
+
/**
|
|
4
|
+
* Statically derive the "expected" token set from a combinator's structure,
|
|
5
|
+
* so a failure can name what it wanted without running anything:
|
|
6
|
+
*
|
|
7
|
+
* literal('}') -> ['"}"']
|
|
8
|
+
* keywords(['a','b']) -> ['"a"', '"b"']
|
|
9
|
+
* choice(x, y) -> expected(x) ++ expected(y) (all alternatives)
|
|
10
|
+
* sequence(a, b, …) -> expected(a) (only the first term can fail first)
|
|
11
|
+
* label('s', x) -> ['s'] (an explicit name wins)
|
|
12
|
+
*
|
|
13
|
+
* This is what lets expect() report a meaningful, IDENTICAL expectation in both
|
|
14
|
+
* the interpreter and the compiled output (the compiled path does not rebuild the
|
|
15
|
+
* runtime `expected` array, so it reads this precomputed set instead).
|
|
16
|
+
*/
|
|
17
|
+
export declare function staticExpected(c: Combinator<unknown>): string[];
|
|
18
|
+
/**
|
|
19
|
+
* Required-token combinator. Tries `combinator`; on success returns it verbatim.
|
|
20
|
+
* On failure it does NOT fail — it records a {@link ParseError} (the statically
|
|
21
|
+
* derived expected set, or `label` when given) into `ctx._errors` and RECOVERS IN
|
|
22
|
+
* PLACE, returning a zero-width success so the enclosing sequence continues as if
|
|
23
|
+
* the token were present.
|
|
24
|
+
*
|
|
25
|
+
* Use it to mark required delimiters/terminators (`}` `)` `;`, a selector before a
|
|
26
|
+
* block) so a missing one is reported with position + expectation rather than
|
|
27
|
+
* aborting the whole parse or being silently swallowed by a catch-all.
|
|
28
|
+
*
|
|
29
|
+
* sequence(literal('{'), declList, expect(literal('}'), '}'))
|
|
30
|
+
*
|
|
31
|
+
* Errors are only collected when the parse runs with `{ recover: true }`; without
|
|
32
|
+
* it, expect() still recovers in place but records nothing (zero overhead beyond
|
|
33
|
+
* the inner attempt).
|
|
34
|
+
*/
|
|
35
|
+
export declare function expect<T>(combinator: Combinator<T>, label?: string): Combinator<T | ParseError>;
|
|
36
|
+
//# sourceMappingURL=expect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expect.d.ts","sourceRoot":"","sources":["../../src/combinators/expect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAyC,UAAU,EAAE,MAAM,aAAa,CAAA;AAEhG,YAAY,EAAE,UAAU,EAAE,CAAA;AAE1B;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,MAAM,EAAE,CAoB/D;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,CAmB/F"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grammar.d.ts","sourceRoot":"","sources":["../../src/combinators/grammar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"grammar.d.ts","sourceRoot":"","sources":["../../src/combinators/grammar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAa,MAAM,aAAa,CAAA;AAGnF,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG;IACzC;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,IAAI,CAAA;IACnC,gFAAgF;IAChF,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB,CAAA;AAED,MAAM,WAAW,cAAc,CAAC,CAAC,CAAE,SAAQ,UAAU,CAAC,CAAC,CAAC;IACtD,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;IACpC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;CACrE;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAwCrF;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAElE;AAED,wBAAgB,KAAK,CAAC,CAAC,EACrB,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,EACzB,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,YAAiB,GACtB,WAAW,CAAC,CAAC,CAAC,CAuBhB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanTo.d.ts","sourceRoot":"","sources":["../../src/combinators/scanTo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAyC,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"scanTo.d.ts","sourceRoot":"","sources":["../../src/combinators/scanTo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAyC,MAAM,aAAa,CAAA;AAYpF,MAAM,MAAM,aAAa,GAAG;IAC1B,uGAAuG;IACvG,IAAI,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAA;IAC5B;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,MAAM,CACpB,QAAQ,EAAE,UAAU,CAAC,OAAO,CAAC,EAC7B,EAAE,IAAS,EAAE,KAAa,EAAE,GAAE,aAAkB,GAC/C,UAAU,CAAC,MAAM,CAAC,CAoEpB;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CACtB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,aAAkB,GAC1B,UAAU,CAAC,MAAM,CAAC,CA0CpB"}
|
|
@@ -40,4 +40,37 @@ export type CompiledParser<T> = {
|
|
|
40
40
|
* @see https://www.greadme.com/blog/security/what-is-content-security-policy-complete-guide
|
|
41
41
|
*/
|
|
42
42
|
export declare function compile<T>(combinator: Combinator<T>, mapFnSources?: string[]): CompiledParser<T>;
|
|
43
|
+
/**
|
|
44
|
+
* Compile every entry of a `rules(factory)` map's returned object using ONE
|
|
45
|
+
* shared codegen Ctx (regexes, named functions, map/build-fn arrays) instead
|
|
46
|
+
* of running `compile()` independently per entry.
|
|
47
|
+
*
|
|
48
|
+
* Why this exists: `compile()` per entry gives each entry its own namedParsers
|
|
49
|
+
* cache, so a sub-rule reachable from N different top-level entries (e.g.
|
|
50
|
+
* `valueList` reachable from `Declaration`, `CustomDeclaration`, `Guard`, …)
|
|
51
|
+
* gets fully re-compiled N times — on a richly cross-referential grammar
|
|
52
|
+
* (Less: ~125 rule-map entries, deep mutual reference) this multiplies total
|
|
53
|
+
* compiled size far past what the source grammar actually needs, independent
|
|
54
|
+
* of the per-ref single-use inlining `analyzeLazyUsage` already handles
|
|
55
|
+
* within one compile() call. Sharing one Ctx here means a sub-rule compiles
|
|
56
|
+
* exactly once for the WHOLE rule map, however many entries reach it.
|
|
57
|
+
*
|
|
58
|
+
* Returns a single `replacement` — ONE shared IIFE, evaluated once, whose
|
|
59
|
+
* result is the `{ key: fn, ... }` map — meant to replace the entire
|
|
60
|
+
* `rules(factory)` call-expression (not one expression per key; splicing a
|
|
61
|
+
* separate self-contained expression per key would either re-run the shared
|
|
62
|
+
* prelude once per entry or duplicate its text per entry, undoing the win).
|
|
63
|
+
* `keys` lists every entry compileRuleMap() saw, for the caller to validate
|
|
64
|
+
* against the source's own key list.
|
|
65
|
+
*
|
|
66
|
+
* Returns null (same all-or-nothing contract the per-entry `compile()` +
|
|
67
|
+
* `inlineExpression === null` check gave the plugin before) when the map
|
|
68
|
+
* contains anything that can't be inlined — a runtime-fallback parser, or an
|
|
69
|
+
* uncaptured transform/build closure source. The plugin's existing "warn and
|
|
70
|
+
* leave this rules() call interpreted" fallback covers this case unchanged.
|
|
71
|
+
*/
|
|
72
|
+
export declare function compileRuleMap(ruleMap: ReadonlyArray<readonly [string, Combinator<unknown>]>): {
|
|
73
|
+
keys: string[];
|
|
74
|
+
replacement: string;
|
|
75
|
+
} | null;
|
|
43
76
|
//# sourceMappingURL=codegen.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codegen.d.ts","sourceRoot":"","sources":["../../src/compiler/codegen.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,UAAU,EAAuB,WAAW,EAAE,YAAY,EAAE,UAAU,EAAkB,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"codegen.d.ts","sourceRoot":"","sources":["../../src/compiler/codegen.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,UAAU,EAAuB,WAAW,EAAE,YAAY,EAAE,UAAU,EAAkB,MAAM,aAAa,CAAA;AAoiDzH,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI;IAC9B,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;IAClD,kGAAkG;IAClG,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;IAChF;;;;OAIG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG;QAAE,MAAM,EAAE,UAAU,EAAE,CAAA;KAAE,CAAA;IACvF,iEAAiE;IACjE,MAAM,EAAE,MAAM,CAAA;IACd;;;;;;OAMG;IACH,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;CAChC,CAAA;AAoJD;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC,CAsGhG;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,GAC7D;IAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CA4EhD"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structural recognition of "scannable" parser arms — regex shapes that lower to
|
|
3
|
+
* a tight character-scan loop instead of `regex.exec` / combinator dispatch. Each
|
|
4
|
+
* shape is derived from the regex STRUCTURE, not from any hardcoded knowledge
|
|
5
|
+
* that a given regex "is whitespace" or "is a comment":
|
|
6
|
+
*
|
|
7
|
+
* [X]+ / [X]* → run while the char ∈ X (chars)
|
|
8
|
+
* <lit>[^X]* → consume <lit>, run until char ∈ X (until)
|
|
9
|
+
* <open>(?:…)*<close> → consume <open>, run to <close> literal (delimited)
|
|
10
|
+
*
|
|
11
|
+
* A `oneOrMore(choice(a, b, …))` where every arm is one of these compiles to a
|
|
12
|
+
* single char-dispatch loop with one branch per arm — any count/order, because
|
|
13
|
+
* the shapes dispatch on their first 1–2 chars and are checked in turn. Trivia
|
|
14
|
+
* (whitespace + comments) is just the value-discarded instance of this; nothing
|
|
15
|
+
* here is trivia-specific.
|
|
16
|
+
*/
|
|
17
|
+
export type ScanShape = {
|
|
18
|
+
kind: 'chars';
|
|
19
|
+
ranges: Array<[number, number]>;
|
|
20
|
+
} | {
|
|
21
|
+
kind: 'until';
|
|
22
|
+
open: number[];
|
|
23
|
+
stop: Array<[number, number]>;
|
|
24
|
+
} | {
|
|
25
|
+
kind: 'delimited';
|
|
26
|
+
open: number[];
|
|
27
|
+
close: number[];
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Recognize one scannable arm from its regex source, or null if it isn't one of
|
|
31
|
+
* the three structural shapes. Order matters: char-class run, then
|
|
32
|
+
* open-until-terminator, then delimited.
|
|
33
|
+
*/
|
|
34
|
+
export declare function parseScanShape(source: string): ScanShape | null;
|
|
35
|
+
/**
|
|
36
|
+
* One loop branch for a shape, dispatched on the current char `c` (= charCodeAt(_e)).
|
|
37
|
+
* Each branch advances `_e` past the matched token and `continue`s the scan loop.
|
|
38
|
+
*/
|
|
39
|
+
export declare function scanBranch(shape: ScanShape): string;
|
|
40
|
+
/**
|
|
41
|
+
* A labeled branch: consume the shape's full token and log one [start, end,
|
|
42
|
+
* kindIndex] trivia chunk. Unlike scanBranch this always consumes the whole run
|
|
43
|
+
* (a chunk must span the entire token) and captures inline per-chunk.
|
|
44
|
+
*/
|
|
45
|
+
export declare function scanBranchLabeled(shape: ScanShape, kindIndex: number): string;
|
|
46
|
+
//# sourceMappingURL=scannable-run.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scannable-run.d.ts","sourceRoot":"","sources":["../../src/compiler/scannable-run.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CAAE,GAChE;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAAA;AAwD1D;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CA4B/D;AAuDD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAQnD;AAYD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAM7E"}
|
|
@@ -1,23 +1,36 @@
|
|
|
1
1
|
import type { Combinator } from '../types.ts';
|
|
2
2
|
import type { LabeledTriviaSpec } from '../cst/trivia-kinds.ts';
|
|
3
|
-
|
|
3
|
+
import { type ScanShape } from './scannable-run.ts';
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* A trivia parser that lowers to a hand-rolled char-scan loop: `oneOrMore(choice(
|
|
6
|
+
* …))` (or `many`, min≥1) where EVERY arm is a scannable shape (a `[X]+` run, a
|
|
7
|
+
* `<lit>[^X]*` open-until-terminator, or a `<open>(?:…)*<close>` delimited token
|
|
8
|
+
* — see scannable-run.ts). Returns the per-arm shapes, or a single-element list
|
|
9
|
+
* for a bare scannable regex, or null (→ caller falls back to the regex/generic
|
|
10
|
+
* trivia path). A single alternation regex is NOT scannable (one exec matches one
|
|
11
|
+
* arm per call, defeating the loop).
|
|
8
12
|
*/
|
|
9
|
-
export declare function analyzeTriviaFastPath(trivia: Combinator<unknown>):
|
|
10
|
-
/** Emit a specialized `_tfN` that skips trivia
|
|
11
|
-
export declare function buildFastTriviaFnDecl(fnName: string,
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
export declare function analyzeTriviaFastPath(trivia: Combinator<unknown>): ScanShape[] | null;
|
|
14
|
+
/** Emit a specialized `_tfN` that skips (unlabeled) trivia via a char-scan loop. */
|
|
15
|
+
export declare function buildFastTriviaFnDecl(fnName: string, shapes: ScanShape[]): string;
|
|
16
|
+
/**
|
|
17
|
+
* A LABELED trivia parser whose every arm is scannable → per-arm shape + kind
|
|
18
|
+
* index, or null. Same recognition as analyzeTriviaFastPath, but keyed by the
|
|
19
|
+
* labeled arm kinds so the fast loop can log each chunk's kind. Generalizes what
|
|
20
|
+
* used to be a hardcoded ws-run + block-comment special case to any scannable
|
|
21
|
+
* shape set / arm count.
|
|
22
|
+
*/
|
|
23
|
+
export declare function analyzeLabeledScannableRun(trivia: Combinator<unknown>): Array<{
|
|
24
|
+
shape: ScanShape;
|
|
25
|
+
kindIndex: number;
|
|
26
|
+
}> | null;
|
|
27
|
+
/** Emit a labeled scannable trivia `_tfN`: char-scan loop with per-chunk kind capture. */
|
|
28
|
+
export declare function buildLabeledScannableTriviaFnDecl(fnName: string, arms: ReadonlyArray<{
|
|
29
|
+
shape: ScanShape;
|
|
30
|
+
kindIndex: number;
|
|
31
|
+
}>): string;
|
|
15
32
|
/** Labeled trivia with regex arms — per-chunk kind capture in compiled output. */
|
|
16
33
|
export declare function buildLabeledRegexTriviaFnDecl(fnName: string, spec: LabeledTriviaSpec, reNames: string[]): string;
|
|
17
|
-
export declare function labeledTriviaKindIndices(trivia: Combinator<unknown>): {
|
|
18
|
-
ws: number;
|
|
19
|
-
comment: number;
|
|
20
|
-
} | null;
|
|
21
34
|
export declare function labeledTriviaRegexArms(trivia: Combinator<unknown>): LabeledTriviaSpec | null;
|
|
22
35
|
/** Labeled trivia via per-arm runtime parsers (non-regex or mixed arms). */
|
|
23
36
|
export declare function buildLabeledRuntimeTriviaFnDecl(fnName: string, spec: LabeledTriviaSpec, rpStartIndex: number): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trivia-fast-path.d.ts","sourceRoot":"","sources":["../../src/compiler/trivia-fast-path.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"trivia-fast-path.d.ts","sourceRoot":"","sources":["../../src/compiler/trivia-fast-path.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAE/D,OAAO,EAAE,KAAK,SAAS,EAAiD,MAAM,oBAAoB,CAAA;AA0BlG;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,SAAS,EAAE,GAAG,IAAI,CAyBrF;AAoBD,oFAAoF;AACpF,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CASjF;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,GAC1B,KAAK,CAAC;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,IAAI,CAWvD;AAED,0FAA0F;AAC1F,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,aAAa,CAAC;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,GAC3D,MAAM,CAYR;AAED,kFAAkF;AAClF,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,iBAAiB,EACvB,OAAO,EAAE,MAAM,EAAE,GAChB,MAAM,CA+BR;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,iBAAiB,GAAG,IAAI,CAO5F;AAED,4EAA4E;AAC5E,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,iBAAiB,EACvB,YAAY,EAAE,MAAM,GACnB,MAAM,CA8BR"}
|