@tienne/gestalt 0.98.0 → 0.100.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.
Files changed (175) hide show
  1. package/CLAUDE.md +2 -1
  2. package/README.md +3 -2
  3. package/dist/package.json +2 -2
  4. package/dist/plugin/research-sources/amplitude/SOURCE.md +28 -0
  5. package/dist/plugin/research-sources/app-store-reviews/SOURCE.md +25 -0
  6. package/dist/plugin/research-sources/app-store-search/SOURCE.md +25 -0
  7. package/dist/plugin/research-sources/tech-blog-search/SOURCE.md +27 -0
  8. package/dist/plugin/research-sources/uibowl/SOURCE.md +26 -0
  9. package/dist/plugin/research-sources/web-search/SOURCE.md +24 -0
  10. package/dist/plugin/skills/_shared/proactive-routing.md +5 -0
  11. package/dist/plugin/skills/architecture/SKILL.md +1 -1
  12. package/dist/plugin/skills/market-scan/SKILL.md +61 -0
  13. package/dist/plugin/skills/research/SKILL.md +438 -0
  14. package/dist/plugin/skills/research/references/design.md +938 -0
  15. package/dist/plugin/skills/research/references/output-template.md +366 -0
  16. package/dist/plugin/skills/research/scripts/pii-vision.swift +327 -0
  17. package/dist/plugin/skills/research/scripts/slide-extract.mjs +223 -0
  18. package/dist/plugin/skills/reverse-plan/SKILL.md +52 -0
  19. package/dist/plugin/skills/screen-ref/SKILL.md +63 -0
  20. package/dist/plugin/skills/ux-research/SKILL.md +51 -0
  21. package/dist/src/architecture/validator.d.ts +17 -1
  22. package/dist/src/architecture/validator.d.ts.map +1 -1
  23. package/dist/src/architecture/validator.js +61 -45
  24. package/dist/src/architecture/validator.js.map +1 -1
  25. package/dist/src/core/config.d.ts +17 -0
  26. package/dist/src/core/config.d.ts.map +1 -1
  27. package/dist/src/core/config.js +4 -0
  28. package/dist/src/core/config.js.map +1 -1
  29. package/dist/src/core/source-location.d.ts +32 -0
  30. package/dist/src/core/source-location.d.ts.map +1 -0
  31. package/dist/src/core/source-location.js +87 -0
  32. package/dist/src/core/source-location.js.map +1 -0
  33. package/dist/src/execute/orchestrators/evolution.d.ts +3 -1
  34. package/dist/src/execute/orchestrators/evolution.d.ts.map +1 -1
  35. package/dist/src/execute/orchestrators/evolution.js +4 -2
  36. package/dist/src/execute/orchestrators/evolution.js.map +1 -1
  37. package/dist/src/execute/orchestrators/execution.d.ts +3 -1
  38. package/dist/src/execute/orchestrators/execution.d.ts.map +1 -1
  39. package/dist/src/execute/orchestrators/execution.js +4 -2
  40. package/dist/src/execute/orchestrators/execution.js.map +1 -1
  41. package/dist/src/execute/passthrough-engine.d.ts +2 -1
  42. package/dist/src/execute/passthrough-engine.d.ts.map +1 -1
  43. package/dist/src/execute/passthrough-engine.js +3 -3
  44. package/dist/src/execute/passthrough-engine.js.map +1 -1
  45. package/dist/src/execute/prompts.d.ts.map +1 -1
  46. package/dist/src/execute/prompts.js +20 -2
  47. package/dist/src/execute/prompts.js.map +1 -1
  48. package/dist/src/mcp/schemas.d.ts +93 -0
  49. package/dist/src/mcp/schemas.d.ts.map +1 -1
  50. package/dist/src/mcp/schemas.js +110 -0
  51. package/dist/src/mcp/schemas.js.map +1 -1
  52. package/dist/src/mcp/server.d.ts.map +1 -1
  53. package/dist/src/mcp/server.js +12 -2
  54. package/dist/src/mcp/server.js.map +1 -1
  55. package/dist/src/mcp/tools/execute/evaluate.js +1 -1
  56. package/dist/src/mcp/tools/execute/evaluate.js.map +1 -1
  57. package/dist/src/mcp/tools/research-passthrough.d.ts +21 -0
  58. package/dist/src/mcp/tools/research-passthrough.d.ts.map +1 -0
  59. package/dist/src/mcp/tools/research-passthrough.js +566 -0
  60. package/dist/src/mcp/tools/research-passthrough.js.map +1 -0
  61. package/dist/src/memory/project-memory-store.d.ts +7 -0
  62. package/dist/src/memory/project-memory-store.d.ts.map +1 -1
  63. package/dist/src/memory/project-memory-store.js +17 -0
  64. package/dist/src/memory/project-memory-store.js.map +1 -1
  65. package/dist/src/research/canvas-view.d.ts +5 -0
  66. package/dist/src/research/canvas-view.d.ts.map +1 -0
  67. package/dist/src/research/canvas-view.js +274 -0
  68. package/dist/src/research/canvas-view.js.map +1 -0
  69. package/dist/src/research/evidence.d.ts +145 -0
  70. package/dist/src/research/evidence.d.ts.map +1 -0
  71. package/dist/src/research/evidence.js +50 -0
  72. package/dist/src/research/evidence.js.map +1 -0
  73. package/dist/src/research/figma-plan.d.ts +80 -0
  74. package/dist/src/research/figma-plan.d.ts.map +1 -0
  75. package/dist/src/research/figma-plan.js +527 -0
  76. package/dist/src/research/figma-plan.js.map +1 -0
  77. package/dist/src/research/figma-script.d.ts +19 -0
  78. package/dist/src/research/figma-script.d.ts.map +1 -0
  79. package/dist/src/research/figma-script.js +363 -0
  80. package/dist/src/research/figma-script.js.map +1 -0
  81. package/dist/src/research/index.d.ts +8 -0
  82. package/dist/src/research/index.d.ts.map +1 -0
  83. package/dist/src/research/index.js +8 -0
  84. package/dist/src/research/index.js.map +1 -0
  85. package/dist/src/research/pii-core.d.ts +16 -0
  86. package/dist/src/research/pii-core.d.ts.map +1 -0
  87. package/dist/src/research/pii-core.js +345 -0
  88. package/dist/src/research/pii-core.js.map +1 -0
  89. package/dist/src/research/pii-dom.d.ts +13 -0
  90. package/dist/src/research/pii-dom.d.ts.map +1 -0
  91. package/dist/src/research/pii-dom.js +208 -0
  92. package/dist/src/research/pii-dom.js.map +1 -0
  93. package/dist/src/research/pii-image.d.ts +71 -0
  94. package/dist/src/research/pii-image.d.ts.map +1 -0
  95. package/dist/src/research/pii-image.js +163 -0
  96. package/dist/src/research/pii-image.js.map +1 -0
  97. package/dist/src/research/pii.d.ts +21 -0
  98. package/dist/src/research/pii.d.ts.map +1 -0
  99. package/dist/src/research/pii.js +47 -0
  100. package/dist/src/research/pii.js.map +1 -0
  101. package/dist/src/research/product-profile.d.ts +108 -0
  102. package/dist/src/research/product-profile.d.ts.map +1 -0
  103. package/dist/src/research/product-profile.js +104 -0
  104. package/dist/src/research/product-profile.js.map +1 -0
  105. package/dist/src/research/render-html.d.ts +203 -0
  106. package/dist/src/research/render-html.d.ts.map +1 -0
  107. package/dist/src/research/render-html.js +901 -0
  108. package/dist/src/research/render-html.js.map +1 -0
  109. package/dist/src/research/schema-base.d.ts +5 -0
  110. package/dist/src/research/schema-base.d.ts.map +1 -0
  111. package/dist/src/research/schema-base.js +10 -0
  112. package/dist/src/research/schema-base.js.map +1 -0
  113. package/dist/src/research/schema.d.ts +5142 -0
  114. package/dist/src/research/schema.d.ts.map +1 -0
  115. package/dist/src/research/schema.js +991 -0
  116. package/dist/src/research/schema.js.map +1 -0
  117. package/dist/src/research/source-create.d.ts +79 -0
  118. package/dist/src/research/source-create.d.ts.map +1 -0
  119. package/dist/src/research/source-create.js +226 -0
  120. package/dist/src/research/source-create.js.map +1 -0
  121. package/dist/src/research/source-registry.d.ts +29 -0
  122. package/dist/src/research/source-registry.d.ts.map +1 -0
  123. package/dist/src/research/source-registry.js +74 -0
  124. package/dist/src/research/source-registry.js.map +1 -0
  125. package/dist/src/research/source-schema.d.ts +158 -0
  126. package/dist/src/research/source-schema.d.ts.map +1 -0
  127. package/dist/src/research/source-schema.js +215 -0
  128. package/dist/src/research/source-schema.js.map +1 -0
  129. package/dist/src/research/source-status.d.ts +40 -0
  130. package/dist/src/research/source-status.d.ts.map +1 -0
  131. package/dist/src/research/source-status.js +109 -0
  132. package/dist/src/research/source-status.js.map +1 -0
  133. package/dist/src/research/store.d.ts +24 -0
  134. package/dist/src/research/store.d.ts.map +1 -0
  135. package/dist/src/research/store.js +60 -0
  136. package/dist/src/research/store.js.map +1 -0
  137. package/dist/src/research/target-view.d.ts +33 -0
  138. package/dist/src/research/target-view.d.ts.map +1 -0
  139. package/dist/src/research/target-view.js +133 -0
  140. package/dist/src/research/target-view.js.map +1 -0
  141. package/dist/src/research/target.d.ts +883 -0
  142. package/dist/src/research/target.d.ts.map +1 -0
  143. package/dist/src/research/target.js +323 -0
  144. package/dist/src/research/target.js.map +1 -0
  145. package/dist/src/research/video-transfer.d.ts +28 -0
  146. package/dist/src/research/video-transfer.d.ts.map +1 -0
  147. package/dist/src/research/video-transfer.js +100 -0
  148. package/dist/src/research/video-transfer.js.map +1 -0
  149. package/dist/src/spec/generator.d.ts.map +1 -1
  150. package/dist/src/spec/generator.js +3 -2
  151. package/dist/src/spec/generator.js.map +1 -1
  152. package/dist/src/spec/passthrough-generator.d.ts.map +1 -1
  153. package/dist/src/spec/passthrough-generator.js +6 -4
  154. package/dist/src/spec/passthrough-generator.js.map +1 -1
  155. package/package.json +2 -2
  156. package/plugin/.codex-plugin/plugin.json +1 -1
  157. package/plugin/.mcp.json +1 -1
  158. package/plugin/mcp.json +1 -1
  159. package/plugin/research-sources/amplitude/SOURCE.md +28 -0
  160. package/plugin/research-sources/app-store-reviews/SOURCE.md +25 -0
  161. package/plugin/research-sources/app-store-search/SOURCE.md +25 -0
  162. package/plugin/research-sources/tech-blog-search/SOURCE.md +27 -0
  163. package/plugin/research-sources/uibowl/SOURCE.md +26 -0
  164. package/plugin/research-sources/web-search/SOURCE.md +24 -0
  165. package/plugin/skills/_shared/proactive-routing.md +5 -0
  166. package/plugin/skills/architecture/SKILL.md +1 -1
  167. package/plugin/skills/market-scan/SKILL.md +61 -0
  168. package/plugin/skills/research/SKILL.md +438 -0
  169. package/plugin/skills/research/references/design.md +938 -0
  170. package/plugin/skills/research/references/output-template.md +366 -0
  171. package/plugin/skills/research/scripts/pii-vision.swift +327 -0
  172. package/plugin/skills/research/scripts/slide-extract.mjs +223 -0
  173. package/plugin/skills/reverse-plan/SKILL.md +52 -0
  174. package/plugin/skills/screen-ref/SKILL.md +63 -0
  175. package/plugin/skills/ux-research/SKILL.md +51 -0
@@ -0,0 +1,33 @@
1
+ import type { BasisKind, EvidenceRef } from './evidence.js';
2
+ import type { Research } from './schema.js';
3
+ import { type Target } from './target.js';
4
+ /** HTML과 Figma가 같은 칸을 그리도록 목표치 블록을 표 모양으로 펴 둔다 */
5
+ export interface TargetCell {
6
+ text: string;
7
+ basis?: BasisKind;
8
+ evidence?: EvidenceRef[];
9
+ note?: string;
10
+ /** 칸 아래 작은 글씨 */
11
+ sub?: string;
12
+ }
13
+ export interface TargetView {
14
+ rows: [string, TargetCell][];
15
+ steps: {
16
+ label: string;
17
+ value: TargetCell;
18
+ method: string;
19
+ }[];
20
+ coverage?: string;
21
+ /** 가설을 다 성공해도 못 닿을 때 사용자와 고른 대응 */
22
+ shortfall?: string;
23
+ /** 가설, 기대 효과, 군당 표본, 걸리는 일수 칸과 기대 효과의 근거 칸 */
24
+ power: {
25
+ cells: string[];
26
+ liftBasis: TargetCell;
27
+ }[];
28
+ tracking: string[][];
29
+ }
30
+ export declare const TARGET_STEP_METHOD_LABEL: Record<Target['steps'][number]['method'], string>;
31
+ export declare const TRACKING_STATUS_LABEL: Record<Target['trackingPlan'][number]['status'], string>;
32
+ export declare function targetView(research: Research, shared: boolean): TargetView | undefined;
33
+ //# sourceMappingURL=target-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"target-view.d.ts","sourceRoot":"","sources":["../../../src/research/target-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAKL,KAAK,MAAM,EACZ,MAAM,aAAa,CAAC;AAErB,kDAAkD;AAClD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iBAAiB;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC;IAC7B,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,UAAU,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8CAA8C;IAC9C,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,EAAE,UAAU,CAAA;KAAE,EAAE,CAAC;IACpD,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC;CACtB;AAED,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,EAAE,MAAM,CAOtF,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,EAAE,MAAM,CAI1F,CAAC;AAUF,wBAAgB,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,CA+GtF"}
@@ -0,0 +1,133 @@
1
+ import { hypothesisPower, LIFT_METHOD_LABEL, liftCoverage, SHORTFALL_DECISION_LABEL, } from './target.js';
2
+ export const TARGET_STEP_METHOD_LABEL = {
3
+ internal: '우리 데이터',
4
+ proxy: '비슷한 퍼널',
5
+ business: '사업 계획',
6
+ market: '시장 자료',
7
+ case: '타사 사례',
8
+ assumption: '가정',
9
+ };
10
+ export const TRACKING_STATUS_LABEL = {
11
+ exists: '있음',
12
+ missing: '없음',
13
+ planned: '심기로 함',
14
+ };
15
+ const DATA_SOURCE_LABEL = {
16
+ amplitude: 'Amplitude',
17
+ export: '내보낸 숫자',
18
+ };
19
+ const pp = (x) => `${x > 0 ? '+' : ''}${x}%p`;
20
+ const people = (n) => `${n.toLocaleString('ko-KR')}명`;
21
+ export function targetView(research, shared) {
22
+ const t = research.target;
23
+ if (!t)
24
+ return undefined;
25
+ const b = t.baseline;
26
+ const rows = [
27
+ ['목표 지표', { text: `${t.metric.name}: ${t.metric.denominator} 대비 ${t.metric.numerator}` }],
28
+ ['화면', { text: t.mode === 'new' ? '새로 만드는 화면' : '있는 화면 개선' }],
29
+ [
30
+ '기준값',
31
+ {
32
+ text: b.valuePct === undefined ? `못 구함 (${b.period})` : `${b.valuePct}% (${b.period})`,
33
+ basis: b.basis,
34
+ evidence: b.evidence,
35
+ ...(b.note ? { note: b.note } : {}),
36
+ ...(b.proxyOf ? { sub: `대신 쓴 퍼널: ${b.proxyOf}` } : {}),
37
+ },
38
+ ],
39
+ ];
40
+ const d = t.dailyEntrants;
41
+ if (d) {
42
+ rows.push([
43
+ '하루 진입 수',
44
+ {
45
+ text: people(d.value),
46
+ basis: d.basis,
47
+ evidence: d.evidence,
48
+ ...(d.note ? { note: d.note } : {}),
49
+ ...(d.derivation ? { sub: d.derivation } : {}),
50
+ },
51
+ ]);
52
+ }
53
+ if (t.weeklySpreadPp !== undefined) {
54
+ rows.push(['주별 변동', { text: `±${t.weeklySpreadPp}%p` }]);
55
+ }
56
+ if (t.trendPp !== undefined)
57
+ rows.push(['자연 추세', { text: pp(t.trendPp) }]);
58
+ if (t.range) {
59
+ const r = t.range;
60
+ rows.push([
61
+ '목표 범위',
62
+ { text: `보수 ${r.conservativePct}%, 기대 ${r.expectedPct}%, 도전 ${r.stretchPct}%` },
63
+ ]);
64
+ }
65
+ const ds = t.dataSource;
66
+ if (ds) {
67
+ const events = ds.events.map((x) => `${x.step}: ${x.event}`).join(', ');
68
+ const chart = ds.chartUrl && !shared ? ` ${ds.chartUrl}` : '';
69
+ rows.push([
70
+ '데이터 출처',
71
+ {
72
+ text: `${DATA_SOURCE_LABEL[ds.kind]} ${ds.project}, ${ds.from}부터 ${ds.to}까지${chart}`,
73
+ ...(events ? { sub: events } : {}),
74
+ },
75
+ ]);
76
+ }
77
+ const coverage = liftCoverage(research);
78
+ const power = hypothesisPower(research).map((p) => {
79
+ const lb = research.verification[p.index]?.liftBasis;
80
+ return {
81
+ cells: [
82
+ `가설 ${p.index + 1}`,
83
+ pp(p.liftPp),
84
+ Number.isFinite(p.nPerArm) ? people(p.nPerArm) : '계산 못함',
85
+ p.days === undefined ? '하루 진입 수 없음' : `${p.days}일`,
86
+ ],
87
+ liftBasis: lb
88
+ ? {
89
+ text: LIFT_METHOD_LABEL[lb.method],
90
+ basis: lb.basis,
91
+ evidence: lb.evidence,
92
+ ...(lb.note ? { note: lb.note } : {}),
93
+ }
94
+ : { text: '근거 없음', basis: 'absent' },
95
+ };
96
+ });
97
+ const sf = t.shortfall;
98
+ const shortfall = sf
99
+ ? [
100
+ `가설 합이 기대 목표에 모자라서 고른 대응은 '${SHORTFALL_DECISION_LABEL[sf.decision]}'이다.`,
101
+ sf.originalExpectedPct === undefined
102
+ ? ''
103
+ : `처음 기대 목표는 ${sf.originalExpectedPct}%였다.`,
104
+ sf.note,
105
+ ]
106
+ .filter(Boolean)
107
+ .join(' ')
108
+ : undefined;
109
+ return {
110
+ rows,
111
+ steps: t.steps.map((s) => ({
112
+ label: s.label,
113
+ value: {
114
+ text: s.value,
115
+ basis: s.basis,
116
+ evidence: s.evidence,
117
+ ...(s.note ? { note: s.note } : {}),
118
+ },
119
+ method: TARGET_STEP_METHOD_LABEL[s.method],
120
+ })),
121
+ ...(coverage
122
+ ? {
123
+ coverage: `가설을 다 성공하면 ${coverage.reachPct}%까지 간다. 기대 목표까지 시안으로 올려야 하는 몫은 ${coverage.neededPp}%p이고 가설 기대 효과의 합은 ${coverage.plannedPp}%p다. 효과가 겹칠 수 있어서 합은 많이 잡은 값이다.`,
124
+ }
125
+ : {}),
126
+ ...(shortfall ? { shortfall } : {}),
127
+ power,
128
+ tracking: t.trackingPlan
129
+ .filter((x) => x.status !== 'exists')
130
+ .map((x) => [x.event, x.step, TRACKING_STATUS_LABEL[x.status], x.note ?? '']),
131
+ };
132
+ }
133
+ //# sourceMappingURL=target-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"target-view.js","sourceRoot":"","sources":["../../../src/research/target-view.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,wBAAwB,GAEzB,MAAM,aAAa,CAAC;AAuBrB,MAAM,CAAC,MAAM,wBAAwB,GAAsD;IACzF,QAAQ,EAAE,QAAQ;IAClB,KAAK,EAAE,QAAQ;IACf,QAAQ,EAAE,OAAO;IACjB,MAAM,EAAE,OAAO;IACf,IAAI,EAAE,OAAO;IACb,UAAU,EAAE,IAAI;CACjB,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAA6D;IAC7F,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,IAAI;IACb,OAAO,EAAE,OAAO;CACjB,CAAC;AAEF,MAAM,iBAAiB,GAA8D;IACnF,SAAS,EAAE,WAAW;IACtB,MAAM,EAAE,QAAQ;CACjB,CAAC;AAEF,MAAM,EAAE,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC;AAC9D,MAAM,MAAM,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC;AAEtE,MAAM,UAAU,UAAU,CAAC,QAAkB,EAAE,MAAe;IAC5D,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC1B,IAAI,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACzB,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;IACrB,MAAM,IAAI,GAA2B;QACnC,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,CAAC,WAAW,OAAO,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC;QACzF,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;QAC7D;YACE,KAAK;YACL;gBACE,IAAI,EAAE,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,MAAM,CAAC,CAAC,MAAM,GAAG;gBACtF,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACvD;SACF;KACF,CAAC;IACF,MAAM,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC;IAC1B,IAAI,CAAC,EAAE,CAAC;QACN,IAAI,CAAC,IAAI,CAAC;YACR,SAAS;YACT;gBACE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;gBACrB,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC/C;SACF,CAAC,CAAC;IACL,CAAC;IACD,IAAI,CAAC,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3E,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QACZ,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;QAClB,IAAI,CAAC,IAAI,CAAC;YACR,OAAO;YACP,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,eAAe,SAAS,CAAC,CAAC,WAAW,SAAS,CAAC,CAAC,UAAU,GAAG,EAAE;SAChF,CAAC,CAAC;IACL,CAAC;IACD,MAAM,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC;IACxB,IAAI,EAAE,EAAE,CAAC;QACP,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxE,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,IAAI,CAAC,IAAI,CAAC;YACR,QAAQ;YACR;gBACE,IAAI,EAAE,GAAG,iBAAiB,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,EAAE,KAAK,KAAK,EAAE;gBACpF,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACnC;SACF,CAAC,CAAC;IACL,CAAC;IAED,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAChD,MAAM,EAAE,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;QACrD,OAAO;YACL,KAAK,EAAE;gBACL,MAAM,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE;gBACnB,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;gBACZ,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO;gBACxD,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG;aACnD;YACD,SAAS,EAAE,EAAE;gBACX,CAAC,CAAC;oBACE,IAAI,EAAE,iBAAiB,CAAC,EAAE,CAAC,MAAM,CAAC;oBAClC,KAAK,EAAE,EAAE,CAAC,KAAK;oBACf,QAAQ,EAAE,EAAE,CAAC,QAAQ;oBACrB,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACtC;gBACH,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAiB,EAAE;SAChD,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC;IACvB,MAAM,SAAS,GAAG,EAAE;QAClB,CAAC,CAAC;YACE,6BAA6B,wBAAwB,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM;YACxE,EAAE,CAAC,mBAAmB,KAAK,SAAS;gBAClC,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,aAAa,EAAE,CAAC,mBAAmB,MAAM;YAC7C,EAAE,CAAC,IAAI;SACR;aACE,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,GAAG,CAAC;QACd,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO;QACL,IAAI;QACJ,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACzB,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,KAAK,EAAE;gBACL,IAAI,EAAE,CAAC,CAAC,KAAK;gBACb,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACpC;YACD,MAAM,EAAE,wBAAwB,CAAC,CAAC,CAAC,MAAM,CAAC;SAC3C,CAAC,CAAC;QACH,GAAG,CAAC,QAAQ;YACV,CAAC,CAAC;gBACE,QAAQ,EAAE,cAAc,QAAQ,CAAC,QAAQ,kCAAkC,QAAQ,CAAC,QAAQ,qBAAqB,QAAQ,CAAC,SAAS,iCAAiC;aACrK;YACH,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnC,KAAK;QACL,QAAQ,EAAE,CAAC,CAAC,YAAY;aACrB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC;aACpC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;KAChF,CAAC;AACJ,CAAC"}