@mmnto/totem 1.80.0 → 1.81.1
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/compiler-schema.d.ts +24 -2
- package/dist/compiler-schema.d.ts.map +1 -1
- package/dist/compiler-schema.js +12 -1
- package/dist/compiler-schema.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/spine/authored-rule.d.ts +1 -0
- package/dist/spine/authored-rule.d.ts.map +1 -1
- package/dist/spine/authored-rule.js +9 -1
- package/dist/spine/authored-rule.js.map +1 -1
- package/dist/spine/candidate-rule.d.ts +11 -0
- package/dist/spine/candidate-rule.d.ts.map +1 -1
- package/dist/spine/candidate-rule.js.map +1 -1
- package/dist/spine/compile.d.ts.map +1 -1
- package/dist/spine/compile.js +30 -2
- package/dist/spine/compile.js.map +1 -1
- package/dist/spine/compile.test.js +86 -0
- package/dist/spine/compile.test.js.map +1 -1
- package/dist/spine/preimage-differential.d.ts +112 -0
- package/dist/spine/preimage-differential.d.ts.map +1 -0
- package/dist/spine/preimage-differential.js +122 -0
- package/dist/spine/preimage-differential.js.map +1 -0
- package/dist/spine/preimage-differential.test.d.ts +2 -0
- package/dist/spine/preimage-differential.test.d.ts.map +1 -0
- package/dist/spine/preimage-differential.test.js +223 -0
- package/dist/spine/preimage-differential.test.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { evaluatePreimageDifferential } from './preimage-differential.js';
|
|
3
|
+
// ─── Rule helpers (mirror compile-smoke-gate.test.ts) ─
|
|
4
|
+
function regexRule(overrides = {}) {
|
|
5
|
+
return {
|
|
6
|
+
lessonHash: 'deadbeef1234',
|
|
7
|
+
lessonHeading: 'No console.log',
|
|
8
|
+
pattern: 'console\\.log',
|
|
9
|
+
message: 'Do not use console.log',
|
|
10
|
+
engine: 'regex',
|
|
11
|
+
compiledAt: '2026-04-13T12:00:00Z',
|
|
12
|
+
...overrides,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
function astGrepRule(overrides = {}) {
|
|
16
|
+
return {
|
|
17
|
+
lessonHash: 'cafeface5678',
|
|
18
|
+
lessonHeading: 'No debugger',
|
|
19
|
+
pattern: '',
|
|
20
|
+
message: 'Do not commit debugger statements',
|
|
21
|
+
engine: 'ast-grep',
|
|
22
|
+
astGrepPattern: 'debugger',
|
|
23
|
+
compiledAt: '2026-04-13T12:00:00Z',
|
|
24
|
+
...overrides,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
function emptyCatchRule(overrides = {}) {
|
|
28
|
+
return {
|
|
29
|
+
lessonHash: 'beefcafe9abc',
|
|
30
|
+
lessonHeading: 'Empty catch',
|
|
31
|
+
pattern: '',
|
|
32
|
+
message: 'Empty catch swallows errors',
|
|
33
|
+
engine: 'ast-grep',
|
|
34
|
+
astGrepYamlRule: {
|
|
35
|
+
rule: {
|
|
36
|
+
kind: 'catch_clause',
|
|
37
|
+
not: {
|
|
38
|
+
has: {
|
|
39
|
+
kind: 'statement_block',
|
|
40
|
+
has: {
|
|
41
|
+
any: [
|
|
42
|
+
{ kind: 'expression_statement' },
|
|
43
|
+
{ kind: 'variable_declaration' },
|
|
44
|
+
{ kind: 'if_statement' },
|
|
45
|
+
{ kind: 'return_statement' },
|
|
46
|
+
{ kind: 'throw_statement' },
|
|
47
|
+
],
|
|
48
|
+
stopBy: 'end',
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
compiledAt: '2026-04-13T12:00:00Z',
|
|
55
|
+
...overrides,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
// ─── Fixture helpers ────────────────────────────────
|
|
59
|
+
function lessonFixture(badExample, goodExample) {
|
|
60
|
+
return {
|
|
61
|
+
pr: 130,
|
|
62
|
+
preimageSource: { kind: 'lesson', lessonRef: 'deadbeefdeadbeef', badExample, goodExample },
|
|
63
|
+
filePath: 'src/sim/level.rs',
|
|
64
|
+
matchedSpan: 'L10-L12',
|
|
65
|
+
contentHash: 'abc123def456',
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function commitFixture() {
|
|
69
|
+
return {
|
|
70
|
+
pr: 130,
|
|
71
|
+
preimageSource: {
|
|
72
|
+
kind: 'commit',
|
|
73
|
+
preimageCommitSha: 'a'.repeat(40),
|
|
74
|
+
mergeCommitSha: 'b'.repeat(40),
|
|
75
|
+
},
|
|
76
|
+
filePath: 'src/sim/level.rs',
|
|
77
|
+
matchedSpan: 'L10-L12',
|
|
78
|
+
contentHash: 'abc123def456',
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
// ─── differential-holds (the legitimate control) ─────
|
|
82
|
+
describe('evaluatePreimageDifferential — differential-holds', () => {
|
|
83
|
+
it('regex: fires on the preimage and is silent on the postimage', async () => {
|
|
84
|
+
const result = await evaluatePreimageDifferential(regexRule(), lessonFixture('console.log("debug")', 'logger.info("ok")'));
|
|
85
|
+
expect(result.outcome).toBe('differential-holds');
|
|
86
|
+
// Non-vacuity: BOTH legs must hold. If the classifier checked only
|
|
87
|
+
// firesOnPreimage, the over-match case below would also read as "holds".
|
|
88
|
+
expect(result.firesOnPreimage).toBe(true);
|
|
89
|
+
expect(result.silentOnPostimage).toBe(true);
|
|
90
|
+
expect(result.preimageMatchCount).toBeGreaterThanOrEqual(1);
|
|
91
|
+
expect(result.postimageMatchCount).toBe(0);
|
|
92
|
+
expect(result.sourceKind).toBe('lesson');
|
|
93
|
+
});
|
|
94
|
+
it('ast-grep: fires on the preimage and is silent on the postimage (TS exemplar)', async () => {
|
|
95
|
+
const result = await evaluatePreimageDifferential(astGrepRule(), lessonFixture('debugger;\n', 'const x = 1;\n'));
|
|
96
|
+
expect(result.outcome).toBe('differential-holds');
|
|
97
|
+
expect(result.firesOnPreimage).toBe(true);
|
|
98
|
+
expect(result.silentOnPostimage).toBe(true);
|
|
99
|
+
expect(result.preimageMatchCount).toBeGreaterThanOrEqual(1);
|
|
100
|
+
});
|
|
101
|
+
it('ast-grep compound (multi-line exemplar): fires on empty catch, silent on a catch with a body', async () => {
|
|
102
|
+
// Locks multi-line exemplar faithfulness — the differential must survive a
|
|
103
|
+
// real multi-line snippet, not just a single token.
|
|
104
|
+
const result = await evaluatePreimageDifferential(emptyCatchRule(), lessonFixture('try {\n work();\n} catch (err) {\n}\n', 'try {\n work();\n} catch (err) {\n log(err);\n}\n'));
|
|
105
|
+
expect(result.outcome).toBe('differential-holds');
|
|
106
|
+
expect(result.firesOnPreimage).toBe(true);
|
|
107
|
+
expect(result.silentOnPostimage).toBe(true);
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
// ─── fix-shaped (the literal Falsifying Metric §1(i)) ─
|
|
111
|
+
describe('evaluatePreimageDifferential — fix-shaped is never a charitable pass (FM §1(i))', () => {
|
|
112
|
+
it('regex: a matcher that fires on the FIXED form and is silent on the defect is fix-shaped', async () => {
|
|
113
|
+
// pattern matches the GOOD form (logger.info), not the defect (console.log).
|
|
114
|
+
const result = await evaluatePreimageDifferential(regexRule({ pattern: 'logger\\.info' }), lessonFixture('console.log("bad")', 'logger.info("fixed")'));
|
|
115
|
+
expect(result.outcome).toBe('fix-shaped');
|
|
116
|
+
expect(result.outcome).not.toBe('differential-holds');
|
|
117
|
+
// Non-vacuity: the classification must rest on BOTH legs being wrong, not
|
|
118
|
+
// just one. fix-shaped (here) and vacuous-silent (below) share
|
|
119
|
+
// firesOnPreimage=false but differ on silentOnPostimage — so the silent leg
|
|
120
|
+
// is load-bearing.
|
|
121
|
+
expect(result.firesOnPreimage).toBe(false);
|
|
122
|
+
expect(result.silentOnPostimage).toBe(false);
|
|
123
|
+
});
|
|
124
|
+
it('ast-grep: silent on the defect, fires on the fixed form → fix-shaped', async () => {
|
|
125
|
+
const result = await evaluatePreimageDifferential(astGrepRule(), lessonFixture('const x = 1;\n', 'debugger;\n'));
|
|
126
|
+
expect(result.outcome).toBe('fix-shaped');
|
|
127
|
+
expect(result.firesOnPreimage).toBe(false);
|
|
128
|
+
expect(result.silentOnPostimage).toBe(false);
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
// ─── over-match (the scorer-invisible escape, contract §4/§5.3) ─
|
|
132
|
+
describe('evaluatePreimageDifferential — over-match is surfaced (the silent-on-postimage leg)', () => {
|
|
133
|
+
it('regex: a matcher that fires on BOTH the defect and the fixed form is over-match, not holds', async () => {
|
|
134
|
+
const result = await evaluatePreimageDifferential(regexRule(), lessonFixture('console.log("bad")', 'console.log("still here in the fix")'));
|
|
135
|
+
expect(result.outcome).toBe('over-match');
|
|
136
|
+
// The cert-critical assertion: this MUST NOT read as differential-holds.
|
|
137
|
+
expect(result.outcome).not.toBe('differential-holds');
|
|
138
|
+
expect(result.firesOnPreimage).toBe(true);
|
|
139
|
+
// Non-vacuity: if the code ignored the postimage, silentOnPostimage would be
|
|
140
|
+
// true and this would be misclassified as holds — the escape the scorer
|
|
141
|
+
// cannot catch on a synthetic exemplar.
|
|
142
|
+
expect(result.silentOnPostimage).toBe(false);
|
|
143
|
+
expect(result.postimageMatchCount).toBeGreaterThanOrEqual(1);
|
|
144
|
+
});
|
|
145
|
+
it('ast-grep: fires on both sides → over-match', async () => {
|
|
146
|
+
const result = await evaluatePreimageDifferential(astGrepRule(), lessonFixture('debugger;\n', 'debugger;\nconst x = 1;\n'));
|
|
147
|
+
expect(result.outcome).toBe('over-match');
|
|
148
|
+
expect(result.silentOnPostimage).toBe(false);
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
// ─── vacuous-silent (fires on neither) ──────────────
|
|
152
|
+
describe('evaluatePreimageDifferential — vacuous-silent (fires on neither)', () => {
|
|
153
|
+
it('regex: a matcher silent on both sides catches nothing', async () => {
|
|
154
|
+
const result = await evaluatePreimageDifferential(regexRule(), lessonFixture('const x = 1;', 'const y = 2;'));
|
|
155
|
+
expect(result.outcome).toBe('vacuous-silent');
|
|
156
|
+
expect(result.firesOnPreimage).toBe(false);
|
|
157
|
+
expect(result.silentOnPostimage).toBe(true);
|
|
158
|
+
// Contrast with fix-shaped (same firesOnPreimage=false): proves the silent
|
|
159
|
+
// leg distinguishes the two and is not ignored.
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
// ─── needs-adjudication (engine refusal, fail-loud) ──
|
|
163
|
+
describe('evaluatePreimageDifferential — needs-adjudication on engine refusal', () => {
|
|
164
|
+
it('invalid regex pattern → needs-adjudication with a reason, not a silent clean result', async () => {
|
|
165
|
+
const result = await evaluatePreimageDifferential(regexRule({ pattern: '(unclosed' }), lessonFixture('console.log("x")', 'logger.info("ok")'));
|
|
166
|
+
expect(result.outcome).toBe('needs-adjudication');
|
|
167
|
+
expect(result.reason).toBeDefined();
|
|
168
|
+
expect(result.reason).toContain('invalid');
|
|
169
|
+
// The preimage leg could not be evaluated → null, not a false "silent".
|
|
170
|
+
expect(result.firesOnPreimage).toBeNull();
|
|
171
|
+
});
|
|
172
|
+
it('ast-grep rule that throws at runtime (invalid kind) → needs-adjudication', async () => {
|
|
173
|
+
const result = await evaluatePreimageDifferential(emptyCatchRule({ astGrepYamlRule: { rule: { kind: '!!!INVALID_KIND!!!' } } }), lessonFixture('try {\n} catch (e) {\n}\n', 'const x = 1;\n'));
|
|
174
|
+
expect(result.outcome).toBe('needs-adjudication');
|
|
175
|
+
expect(result.reason).toBeDefined();
|
|
176
|
+
});
|
|
177
|
+
it('an engine the smoke gate does not cover (tree-sitter ast) → needs-adjudication', async () => {
|
|
178
|
+
const result = await evaluatePreimageDifferential(regexRule({ engine: 'ast', pattern: '' }), lessonFixture('whatever', 'something else'));
|
|
179
|
+
expect(result.outcome).toBe('needs-adjudication');
|
|
180
|
+
expect(result.reason).toBeDefined();
|
|
181
|
+
});
|
|
182
|
+
it('a whitespace-only badExample → needs-adjudication, not a silent vacuous result', async () => {
|
|
183
|
+
// Direct (unparsed) construction can bypass the schema's non-empty refine; a
|
|
184
|
+
// whitespace preimage carries no evaluable code, so the preimage leg is null.
|
|
185
|
+
const result = await evaluatePreimageDifferential(regexRule(), lessonFixture(' \n ', 'logger.info("ok")'));
|
|
186
|
+
expect(result.outcome).toBe('needs-adjudication');
|
|
187
|
+
expect(result.firesOnPreimage).toBeNull();
|
|
188
|
+
expect(result.reason).toContain('badExample');
|
|
189
|
+
});
|
|
190
|
+
it('a whitespace-only goodExample → needs-adjudication, NOT a false differential-holds (Greptile #2264)', async () => {
|
|
191
|
+
// The cert-critical case: the rule fires on the defect, and the postimage is
|
|
192
|
+
// whitespace. Pre-fix this read as differential-holds (silentOnPostimage true
|
|
193
|
+
// because there was nothing to match) — masking an unevaluable fixed side.
|
|
194
|
+
const result = await evaluatePreimageDifferential(regexRule(), lessonFixture('console.log("bad")', ' \n '));
|
|
195
|
+
expect(result.outcome).toBe('needs-adjudication');
|
|
196
|
+
expect(result.outcome).not.toBe('differential-holds');
|
|
197
|
+
expect(result.silentOnPostimage).toBeNull();
|
|
198
|
+
expect(result.reason).toContain('goodExample');
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
// ─── commit-source deferral (typed non-pass, slice C2) ─
|
|
202
|
+
describe('evaluatePreimageDifferential — commit source is a typed deferral (slice C2)', () => {
|
|
203
|
+
it('commit-pair fixture → unsupported-source, never a passing control', async () => {
|
|
204
|
+
const result = await evaluatePreimageDifferential(astGrepRule(), commitFixture());
|
|
205
|
+
expect(result.outcome).toBe('unsupported-source');
|
|
206
|
+
expect(result.outcome).not.toBe('differential-holds');
|
|
207
|
+
expect(result.sourceKind).toBe('commit');
|
|
208
|
+
expect(result.firesOnPreimage).toBeNull();
|
|
209
|
+
expect(result.silentOnPostimage).toBeNull();
|
|
210
|
+
expect(result.reason).toContain('slice C2');
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
// ─── determinism (Tenet-15) ─────────────────────────
|
|
214
|
+
describe('evaluatePreimageDifferential — determinism', () => {
|
|
215
|
+
it('is a pure function of (rule, fixture): identical inputs yield identical results', async () => {
|
|
216
|
+
const rule = astGrepRule();
|
|
217
|
+
const fixture = lessonFixture('debugger;\n', 'const x = 1;\n');
|
|
218
|
+
const a = await evaluatePreimageDifferential(rule, fixture);
|
|
219
|
+
const b = await evaluatePreimageDifferential(rule, fixture);
|
|
220
|
+
expect(a).toEqual(b);
|
|
221
|
+
});
|
|
222
|
+
});
|
|
223
|
+
//# sourceMappingURL=preimage-differential.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preimage-differential.test.js","sourceRoot":"","sources":["../../src/spine/preimage-differential.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAG9C,OAAO,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAE1E,yDAAyD;AAEzD,SAAS,SAAS,CAAC,YAAmC,EAAE;IACtD,OAAO;QACL,UAAU,EAAE,cAAc;QAC1B,aAAa,EAAE,gBAAgB;QAC/B,OAAO,EAAE,eAAe;QACxB,OAAO,EAAE,wBAAwB;QACjC,MAAM,EAAE,OAAO;QACf,UAAU,EAAE,sBAAsB;QAClC,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,YAAmC,EAAE;IACxD,OAAO;QACL,UAAU,EAAE,cAAc;QAC1B,aAAa,EAAE,aAAa;QAC5B,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,mCAAmC;QAC5C,MAAM,EAAE,UAAU;QAClB,cAAc,EAAE,UAAU;QAC1B,UAAU,EAAE,sBAAsB;QAClC,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,YAAmC,EAAE;IAC3D,OAAO;QACL,UAAU,EAAE,cAAc;QAC1B,aAAa,EAAE,aAAa;QAC5B,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,6BAA6B;QACtC,MAAM,EAAE,UAAU;QAClB,eAAe,EAAE;YACf,IAAI,EAAE;gBACJ,IAAI,EAAE,cAAc;gBACpB,GAAG,EAAE;oBACH,GAAG,EAAE;wBACH,IAAI,EAAE,iBAAiB;wBACvB,GAAG,EAAE;4BACH,GAAG,EAAE;gCACH,EAAE,IAAI,EAAE,sBAAsB,EAAE;gCAChC,EAAE,IAAI,EAAE,sBAAsB,EAAE;gCAChC,EAAE,IAAI,EAAE,cAAc,EAAE;gCACxB,EAAE,IAAI,EAAE,kBAAkB,EAAE;gCAC5B,EAAE,IAAI,EAAE,iBAAiB,EAAE;6BAC5B;4BACD,MAAM,EAAE,KAAK;yBACd;qBACF;iBACF;aACF;SACF;QACD,UAAU,EAAE,sBAAsB;QAClC,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,uDAAuD;AAEvD,SAAS,aAAa,CAAC,UAAkB,EAAE,WAAmB;IAC5D,OAAO;QACL,EAAE,EAAE,GAAG;QACP,cAAc,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,kBAAkB,EAAE,UAAU,EAAE,WAAW,EAAE;QAC1F,QAAQ,EAAE,kBAAkB;QAC5B,WAAW,EAAE,SAAS;QACtB,WAAW,EAAE,cAAc;KAC5B,CAAC;AACJ,CAAC;AAED,SAAS,aAAa;IACpB,OAAO;QACL,EAAE,EAAE,GAAG;QACP,cAAc,EAAE;YACd,IAAI,EAAE,QAAQ;YACd,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;SAC/B;QACD,QAAQ,EAAE,kBAAkB;QAC5B,WAAW,EAAE,SAAS;QACtB,WAAW,EAAE,cAAc;KAC5B,CAAC;AACJ,CAAC;AAED,wDAAwD;AAExD,QAAQ,CAAC,mDAAmD,EAAE,GAAG,EAAE;IACjE,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,MAAM,MAAM,GAAG,MAAM,4BAA4B,CAC/C,SAAS,EAAE,EACX,aAAa,CAAC,sBAAsB,EAAE,mBAAmB,CAAC,CAC3D,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAClD,mEAAmE;QACnE,yEAAyE;QACzE,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;QAC5F,MAAM,MAAM,GAAG,MAAM,4BAA4B,CAC/C,WAAW,EAAE,EACb,aAAa,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAC/C,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8FAA8F,EAAE,KAAK,IAAI,EAAE;QAC5G,2EAA2E;QAC3E,oDAAoD;QACpD,MAAM,MAAM,GAAG,MAAM,4BAA4B,CAC/C,cAAc,EAAE,EAChB,aAAa,CACX,wCAAwC,EACxC,qDAAqD,CACtD,CACF,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,yDAAyD;AAEzD,QAAQ,CAAC,iFAAiF,EAAE,GAAG,EAAE;IAC/F,EAAE,CAAC,yFAAyF,EAAE,KAAK,IAAI,EAAE;QACvG,6EAA6E;QAC7E,MAAM,MAAM,GAAG,MAAM,4BAA4B,CAC/C,SAAS,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,EACvC,aAAa,CAAC,oBAAoB,EAAE,sBAAsB,CAAC,CAC5D,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACtD,0EAA0E;QAC1E,+DAA+D;QAC/D,4EAA4E;QAC5E,mBAAmB;QACnB,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QACpF,MAAM,MAAM,GAAG,MAAM,4BAA4B,CAC/C,WAAW,EAAE,EACb,aAAa,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAC/C,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,mEAAmE;AAEnE,QAAQ,CAAC,qFAAqF,EAAE,GAAG,EAAE;IACnG,EAAE,CAAC,4FAA4F,EAAE,KAAK,IAAI,EAAE;QAC1G,MAAM,MAAM,GAAG,MAAM,4BAA4B,CAC/C,SAAS,EAAE,EACX,aAAa,CAAC,oBAAoB,EAAE,sCAAsC,CAAC,CAC5E,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1C,yEAAyE;QACzE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACtD,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,6EAA6E;QAC7E,wEAAwE;QACxE,wCAAwC;QACxC,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,MAAM,GAAG,MAAM,4BAA4B,CAC/C,WAAW,EAAE,EACb,aAAa,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAC1D,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,uDAAuD;AAEvD,QAAQ,CAAC,kEAAkE,EAAE,GAAG,EAAE;IAChF,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACrE,MAAM,MAAM,GAAG,MAAM,4BAA4B,CAC/C,SAAS,EAAE,EACX,aAAa,CAAC,cAAc,EAAE,cAAc,CAAC,CAC9C,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,2EAA2E;QAC3E,gDAAgD;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,wDAAwD;AAExD,QAAQ,CAAC,qEAAqE,EAAE,GAAG,EAAE;IACnF,EAAE,CAAC,qFAAqF,EAAE,KAAK,IAAI,EAAE;QACnG,MAAM,MAAM,GAAG,MAAM,4BAA4B,CAC/C,SAAS,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,EACnC,aAAa,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,CACvD,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC3C,wEAAwE;QACxE,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;QACxF,MAAM,MAAM,GAAG,MAAM,4BAA4B,CAC/C,cAAc,CAAC,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAAE,EAAE,CAAC,EAC7E,aAAa,CAAC,2BAA2B,EAAE,gBAAgB,CAAC,CAC7D,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;QAC9F,MAAM,MAAM,GAAG,MAAM,4BAA4B,CAC/C,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,EACzC,aAAa,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAC5C,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;QAC9F,6EAA6E;QAC7E,8EAA8E;QAC9E,MAAM,MAAM,GAAG,MAAM,4BAA4B,CAC/C,SAAS,EAAE,EACX,aAAa,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAC9C,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qGAAqG,EAAE,KAAK,IAAI,EAAE;QACnH,6EAA6E;QAC7E,8EAA8E;QAC9E,2EAA2E;QAC3E,MAAM,MAAM,GAAG,MAAM,4BAA4B,CAC/C,SAAS,EAAE,EACX,aAAa,CAAC,oBAAoB,EAAE,SAAS,CAAC,CAC/C,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACtD,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,0DAA0D;AAE1D,QAAQ,CAAC,6EAA6E,EAAE,GAAG,EAAE;IAC3F,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACjF,MAAM,MAAM,GAAG,MAAM,4BAA4B,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;QAClF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACtD,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,uDAAuD;AAEvD,QAAQ,CAAC,4CAA4C,EAAE,GAAG,EAAE;IAC1D,EAAE,CAAC,iFAAiF,EAAE,KAAK,IAAI,EAAE;QAC/F,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,aAAa,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;QAC/D,MAAM,CAAC,GAAG,MAAM,4BAA4B,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC5D,MAAM,CAAC,GAAG,MAAM,4BAA4B,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC5D,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|