codemeld 2.1.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 (243) hide show
  1. package/README.md +514 -0
  2. package/bin/cli.js +2 -0
  3. package/dist/ai/agent.d.ts +124 -0
  4. package/dist/ai/agent.d.ts.map +1 -0
  5. package/dist/ai/agent.js +289 -0
  6. package/dist/ai/agent.js.map +1 -0
  7. package/dist/ai/index.d.ts +10 -0
  8. package/dist/ai/index.d.ts.map +1 -0
  9. package/dist/ai/index.js +10 -0
  10. package/dist/ai/index.js.map +1 -0
  11. package/dist/ai/prompts.d.ts +35 -0
  12. package/dist/ai/prompts.d.ts.map +1 -0
  13. package/dist/ai/prompts.js +166 -0
  14. package/dist/ai/prompts.js.map +1 -0
  15. package/dist/ai/refinement-loop.d.ts +29 -0
  16. package/dist/ai/refinement-loop.d.ts.map +1 -0
  17. package/dist/ai/refinement-loop.js +180 -0
  18. package/dist/ai/refinement-loop.js.map +1 -0
  19. package/dist/ai/tools.d.ts +17 -0
  20. package/dist/ai/tools.d.ts.map +1 -0
  21. package/dist/ai/tools.js +353 -0
  22. package/dist/ai/tools.js.map +1 -0
  23. package/dist/ai/visual-compare.d.ts +43 -0
  24. package/dist/ai/visual-compare.d.ts.map +1 -0
  25. package/dist/ai/visual-compare.js +176 -0
  26. package/dist/ai/visual-compare.js.map +1 -0
  27. package/dist/cli.d.ts +3 -0
  28. package/dist/cli.d.ts.map +1 -0
  29. package/dist/cli.js +179 -0
  30. package/dist/cli.js.map +1 -0
  31. package/dist/converter.d.ts +10 -0
  32. package/dist/converter.d.ts.map +1 -0
  33. package/dist/converter.js +836 -0
  34. package/dist/converter.js.map +1 -0
  35. package/dist/deconverter.d.ts +19 -0
  36. package/dist/deconverter.d.ts.map +1 -0
  37. package/dist/deconverter.js +188 -0
  38. package/dist/deconverter.js.map +1 -0
  39. package/dist/frameworks/angular-adapter.d.ts +27 -0
  40. package/dist/frameworks/angular-adapter.d.ts.map +1 -0
  41. package/dist/frameworks/angular-adapter.js +617 -0
  42. package/dist/frameworks/angular-adapter.js.map +1 -0
  43. package/dist/frameworks/index.d.ts +10 -0
  44. package/dist/frameworks/index.d.ts.map +1 -0
  45. package/dist/frameworks/index.js +21 -0
  46. package/dist/frameworks/index.js.map +1 -0
  47. package/dist/frameworks/nextjs-adapter.d.ts +22 -0
  48. package/dist/frameworks/nextjs-adapter.d.ts.map +1 -0
  49. package/dist/frameworks/nextjs-adapter.js +392 -0
  50. package/dist/frameworks/nextjs-adapter.js.map +1 -0
  51. package/dist/frameworks/react-adapter.d.ts +21 -0
  52. package/dist/frameworks/react-adapter.d.ts.map +1 -0
  53. package/dist/frameworks/react-adapter.js +71 -0
  54. package/dist/frameworks/react-adapter.js.map +1 -0
  55. package/dist/frameworks/svelte-adapter.d.ts +27 -0
  56. package/dist/frameworks/svelte-adapter.d.ts.map +1 -0
  57. package/dist/frameworks/svelte-adapter.js +519 -0
  58. package/dist/frameworks/svelte-adapter.js.map +1 -0
  59. package/dist/frameworks/types.d.ts +78 -0
  60. package/dist/frameworks/types.d.ts.map +1 -0
  61. package/dist/frameworks/types.js +2 -0
  62. package/dist/frameworks/types.js.map +1 -0
  63. package/dist/frameworks/vue-adapter.d.ts +34 -0
  64. package/dist/frameworks/vue-adapter.d.ts.map +1 -0
  65. package/dist/frameworks/vue-adapter.js +632 -0
  66. package/dist/frameworks/vue-adapter.js.map +1 -0
  67. package/dist/generators/accessibility-generator.d.ts +43 -0
  68. package/dist/generators/accessibility-generator.d.ts.map +1 -0
  69. package/dist/generators/accessibility-generator.js +507 -0
  70. package/dist/generators/accessibility-generator.js.map +1 -0
  71. package/dist/generators/asset-handler.d.ts +14 -0
  72. package/dist/generators/asset-handler.d.ts.map +1 -0
  73. package/dist/generators/asset-handler.js +79 -0
  74. package/dist/generators/asset-handler.js.map +1 -0
  75. package/dist/generators/build-verifier.d.ts +8 -0
  76. package/dist/generators/build-verifier.d.ts.map +1 -0
  77. package/dist/generators/build-verifier.js +64 -0
  78. package/dist/generators/build-verifier.js.map +1 -0
  79. package/dist/generators/component-extractor.d.ts +25 -0
  80. package/dist/generators/component-extractor.d.ts.map +1 -0
  81. package/dist/generators/component-extractor.js +146 -0
  82. package/dist/generators/component-extractor.js.map +1 -0
  83. package/dist/generators/component-generator.d.ts +12 -0
  84. package/dist/generators/component-generator.d.ts.map +1 -0
  85. package/dist/generators/component-generator.js +724 -0
  86. package/dist/generators/component-generator.js.map +1 -0
  87. package/dist/generators/deploy-generator.d.ts +9 -0
  88. package/dist/generators/deploy-generator.d.ts.map +1 -0
  89. package/dist/generators/deploy-generator.js +409 -0
  90. package/dist/generators/deploy-generator.js.map +1 -0
  91. package/dist/generators/error-boundary.d.ts +5 -0
  92. package/dist/generators/error-boundary.d.ts.map +1 -0
  93. package/dist/generators/error-boundary.js +59 -0
  94. package/dist/generators/error-boundary.js.map +1 -0
  95. package/dist/generators/form-generator.d.ts +42 -0
  96. package/dist/generators/form-generator.d.ts.map +1 -0
  97. package/dist/generators/form-generator.js +662 -0
  98. package/dist/generators/form-generator.js.map +1 -0
  99. package/dist/generators/hooks-generator.d.ts +40 -0
  100. package/dist/generators/hooks-generator.d.ts.map +1 -0
  101. package/dist/generators/hooks-generator.js +297 -0
  102. package/dist/generators/hooks-generator.js.map +1 -0
  103. package/dist/generators/html-generator.d.ts +27 -0
  104. package/dist/generators/html-generator.d.ts.map +1 -0
  105. package/dist/generators/html-generator.js +772 -0
  106. package/dist/generators/html-generator.js.map +1 -0
  107. package/dist/generators/jquery-converter.d.ts +41 -0
  108. package/dist/generators/jquery-converter.d.ts.map +1 -0
  109. package/dist/generators/jquery-converter.js +594 -0
  110. package/dist/generators/jquery-converter.js.map +1 -0
  111. package/dist/generators/pattern-implementer.d.ts +26 -0
  112. package/dist/generators/pattern-implementer.d.ts.map +1 -0
  113. package/dist/generators/pattern-implementer.js +336 -0
  114. package/dist/generators/pattern-implementer.js.map +1 -0
  115. package/dist/generators/performance-generator.d.ts +51 -0
  116. package/dist/generators/performance-generator.d.ts.map +1 -0
  117. package/dist/generators/performance-generator.js +428 -0
  118. package/dist/generators/performance-generator.js.map +1 -0
  119. package/dist/generators/router-generator.d.ts +21 -0
  120. package/dist/generators/router-generator.d.ts.map +1 -0
  121. package/dist/generators/router-generator.js +178 -0
  122. package/dist/generators/router-generator.js.map +1 -0
  123. package/dist/generators/scaffolder.d.ts +28 -0
  124. package/dist/generators/scaffolder.d.ts.map +1 -0
  125. package/dist/generators/scaffolder.js +266 -0
  126. package/dist/generators/scaffolder.js.map +1 -0
  127. package/dist/generators/seo-generator.d.ts +29 -0
  128. package/dist/generators/seo-generator.d.ts.map +1 -0
  129. package/dist/generators/seo-generator.js +223 -0
  130. package/dist/generators/seo-generator.js.map +1 -0
  131. package/dist/generators/test-generator.d.ts +19 -0
  132. package/dist/generators/test-generator.d.ts.map +1 -0
  133. package/dist/generators/test-generator.js +398 -0
  134. package/dist/generators/test-generator.js.map +1 -0
  135. package/dist/generators/type-generator.d.ts +33 -0
  136. package/dist/generators/type-generator.d.ts.map +1 -0
  137. package/dist/generators/type-generator.js +663 -0
  138. package/dist/generators/type-generator.js.map +1 -0
  139. package/dist/index.d.ts +23 -0
  140. package/dist/index.d.ts.map +1 -0
  141. package/dist/index.js +12 -0
  142. package/dist/index.js.map +1 -0
  143. package/dist/parsers/css-processor.d.ts +23 -0
  144. package/dist/parsers/css-processor.d.ts.map +1 -0
  145. package/dist/parsers/css-processor.js +129 -0
  146. package/dist/parsers/css-processor.js.map +1 -0
  147. package/dist/parsers/framework-parser.d.ts +48 -0
  148. package/dist/parsers/framework-parser.d.ts.map +1 -0
  149. package/dist/parsers/framework-parser.js +770 -0
  150. package/dist/parsers/framework-parser.js.map +1 -0
  151. package/dist/parsers/html-parser.d.ts +12 -0
  152. package/dist/parsers/html-parser.d.ts.map +1 -0
  153. package/dist/parsers/html-parser.js +444 -0
  154. package/dist/parsers/html-parser.js.map +1 -0
  155. package/dist/parsers/js-analyzer.d.ts +199 -0
  156. package/dist/parsers/js-analyzer.d.ts.map +1 -0
  157. package/dist/parsers/js-analyzer.js +680 -0
  158. package/dist/parsers/js-analyzer.js.map +1 -0
  159. package/dist/parsers/js-resolver.d.ts +8 -0
  160. package/dist/parsers/js-resolver.d.ts.map +1 -0
  161. package/dist/parsers/js-resolver.js +45 -0
  162. package/dist/parsers/js-resolver.js.map +1 -0
  163. package/dist/parsers/tailwind-detector.d.ts +23 -0
  164. package/dist/parsers/tailwind-detector.d.ts.map +1 -0
  165. package/dist/parsers/tailwind-detector.js +104 -0
  166. package/dist/parsers/tailwind-detector.js.map +1 -0
  167. package/dist/tests/advanced-features.test.d.ts +2 -0
  168. package/dist/tests/advanced-features.test.d.ts.map +1 -0
  169. package/dist/tests/advanced-features.test.js +235 -0
  170. package/dist/tests/advanced-features.test.js.map +1 -0
  171. package/dist/tests/css-modules.test.d.ts +2 -0
  172. package/dist/tests/css-modules.test.d.ts.map +1 -0
  173. package/dist/tests/css-modules.test.js +61 -0
  174. package/dist/tests/css-modules.test.js.map +1 -0
  175. package/dist/tests/css-processor.test.d.ts +2 -0
  176. package/dist/tests/css-processor.test.d.ts.map +1 -0
  177. package/dist/tests/css-processor.test.js +48 -0
  178. package/dist/tests/css-processor.test.js.map +1 -0
  179. package/dist/tests/html-parser.test.d.ts +2 -0
  180. package/dist/tests/html-parser.test.d.ts.map +1 -0
  181. package/dist/tests/html-parser.test.js +78 -0
  182. package/dist/tests/html-parser.test.js.map +1 -0
  183. package/dist/tests/integration.test.d.ts +2 -0
  184. package/dist/tests/integration.test.d.ts.map +1 -0
  185. package/dist/tests/integration.test.js +65 -0
  186. package/dist/tests/integration.test.js.map +1 -0
  187. package/dist/tests/js-analyzer.test.d.ts +2 -0
  188. package/dist/tests/js-analyzer.test.d.ts.map +1 -0
  189. package/dist/tests/js-analyzer.test.js +58 -0
  190. package/dist/tests/js-analyzer.test.js.map +1 -0
  191. package/dist/tests/naming.test.d.ts +2 -0
  192. package/dist/tests/naming.test.d.ts.map +1 -0
  193. package/dist/tests/naming.test.js +43 -0
  194. package/dist/tests/naming.test.js.map +1 -0
  195. package/dist/tests/router-generator.test.d.ts +2 -0
  196. package/dist/tests/router-generator.test.d.ts.map +1 -0
  197. package/dist/tests/router-generator.test.js +60 -0
  198. package/dist/tests/router-generator.test.js.map +1 -0
  199. package/dist/tui/chat.d.ts +13 -0
  200. package/dist/tui/chat.d.ts.map +1 -0
  201. package/dist/tui/chat.js +499 -0
  202. package/dist/tui/chat.js.map +1 -0
  203. package/dist/tui/design-guide.d.ts +41 -0
  204. package/dist/tui/design-guide.d.ts.map +1 -0
  205. package/dist/tui/design-guide.js +184 -0
  206. package/dist/tui/design-guide.js.map +1 -0
  207. package/dist/tui/input.d.ts +30 -0
  208. package/dist/tui/input.d.ts.map +1 -0
  209. package/dist/tui/input.js +239 -0
  210. package/dist/tui/input.js.map +1 -0
  211. package/dist/tui/renderer.d.ts +48 -0
  212. package/dist/tui/renderer.d.ts.map +1 -0
  213. package/dist/tui/renderer.js +212 -0
  214. package/dist/tui/renderer.js.map +1 -0
  215. package/dist/tui/tools.d.ts +14 -0
  216. package/dist/tui/tools.d.ts.map +1 -0
  217. package/dist/tui/tools.js +1370 -0
  218. package/dist/tui/tools.js.map +1 -0
  219. package/dist/types.d.ts +93 -0
  220. package/dist/types.d.ts.map +1 -0
  221. package/dist/types.js +2 -0
  222. package/dist/types.js.map +1 -0
  223. package/dist/utils/config.d.ts +20 -0
  224. package/dist/utils/config.d.ts.map +1 -0
  225. package/dist/utils/config.js +33 -0
  226. package/dist/utils/config.js.map +1 -0
  227. package/dist/utils/formatter.d.ts +5 -0
  228. package/dist/utils/formatter.d.ts.map +1 -0
  229. package/dist/utils/formatter.js +68 -0
  230. package/dist/utils/formatter.js.map +1 -0
  231. package/dist/utils/logger.d.ts +8 -0
  232. package/dist/utils/logger.d.ts.map +1 -0
  233. package/dist/utils/logger.js +19 -0
  234. package/dist/utils/logger.js.map +1 -0
  235. package/dist/utils/naming.d.ts +17 -0
  236. package/dist/utils/naming.d.ts.map +1 -0
  237. package/dist/utils/naming.js +48 -0
  238. package/dist/utils/naming.js.map +1 -0
  239. package/dist/utils/report.d.ts +56 -0
  240. package/dist/utils/report.d.ts.map +1 -0
  241. package/dist/utils/report.js +339 -0
  242. package/dist/utils/report.js.map +1 -0
  243. package/package.json +61 -0
@@ -0,0 +1,594 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Helpers
3
+ // ---------------------------------------------------------------------------
4
+ function selectorToVarName(selector) {
5
+ // Strip jQuery selector characters and convert to camelCase identifier
6
+ const cleaned = selector
7
+ .replace(/^[#.]/, '')
8
+ .replace(/[^a-zA-Z0-9_-]/g, '_')
9
+ .replace(/-([a-z])/g, (_, c) => c.toUpperCase())
10
+ .replace(/^([A-Z])/, (_, c) => c.toLowerCase());
11
+ return cleaned || 'element';
12
+ }
13
+ function selectorToRefName(selector) {
14
+ return `${selectorToVarName(selector)}Ref`;
15
+ }
16
+ function capitalise(s) {
17
+ return s.charAt(0).toUpperCase() + s.slice(1);
18
+ }
19
+ function stripQuotes(s) {
20
+ const trimmed = s.trim();
21
+ if ((trimmed.startsWith("'") && trimmed.endsWith("'")) ||
22
+ (trimmed.startsWith('"') && trimmed.endsWith('"'))) {
23
+ return trimmed.slice(1, -1);
24
+ }
25
+ return trimmed;
26
+ }
27
+ /**
28
+ * Split a jQuery args string into individual arguments, respecting quotes
29
+ * and nested brackets.
30
+ */
31
+ function splitArgs(args) {
32
+ const result = [];
33
+ let current = '';
34
+ let depth = 0;
35
+ let inSingle = false;
36
+ let inDouble = false;
37
+ for (let i = 0; i < args.length; i++) {
38
+ const ch = args[i];
39
+ if (ch === "'" && !inDouble) {
40
+ inSingle = !inSingle;
41
+ }
42
+ else if (ch === '"' && !inSingle) {
43
+ inDouble = !inDouble;
44
+ }
45
+ else if (!inSingle && !inDouble) {
46
+ if (ch === '(' || ch === '[' || ch === '{')
47
+ depth++;
48
+ else if (ch === ')' || ch === ']' || ch === '}')
49
+ depth--;
50
+ }
51
+ if (ch === ',' && depth === 0 && !inSingle && !inDouble) {
52
+ result.push(current.trim());
53
+ current = '';
54
+ }
55
+ else {
56
+ current += ch;
57
+ }
58
+ }
59
+ if (current.trim())
60
+ result.push(current.trim());
61
+ return result;
62
+ }
63
+ function jqueryEventToReact(event) {
64
+ const map = {
65
+ click: 'onClick',
66
+ dblclick: 'onDoubleClick',
67
+ submit: 'onSubmit',
68
+ change: 'onChange',
69
+ input: 'onInput',
70
+ keydown: 'onKeyDown',
71
+ keyup: 'onKeyUp',
72
+ keypress: 'onKeyPress',
73
+ focus: 'onFocus',
74
+ blur: 'onBlur',
75
+ mouseenter: 'onMouseEnter',
76
+ mouseleave: 'onMouseLeave',
77
+ mouseover: 'onMouseOver',
78
+ mouseout: 'onMouseOut',
79
+ mousedown: 'onMouseDown',
80
+ mouseup: 'onMouseUp',
81
+ scroll: 'onScroll',
82
+ resize: 'onResize',
83
+ contextmenu: 'onContextMenu',
84
+ drag: 'onDrag',
85
+ dragstart: 'onDragStart',
86
+ dragend: 'onDragEnd',
87
+ drop: 'onDrop',
88
+ touchstart: 'onTouchStart',
89
+ touchend: 'onTouchEnd',
90
+ touchmove: 'onTouchMove',
91
+ };
92
+ return map[event] || `on${capitalise(event)}`;
93
+ }
94
+ function cssPropToJs(prop) {
95
+ return stripQuotes(prop).replace(/-([a-z])/g, (_, c) => c.toUpperCase());
96
+ }
97
+ // ---------------------------------------------------------------------------
98
+ // Unique-name tracking (avoids duplicate state vars / refs within one call)
99
+ // ---------------------------------------------------------------------------
100
+ function dedupState(result, name, type, initialValue) {
101
+ if (!result.stateVars.some((s) => s.name === name)) {
102
+ result.stateVars.push({ name, type, initialValue });
103
+ }
104
+ }
105
+ function dedupRef(result, refName) {
106
+ if (!result.refs.includes(refName)) {
107
+ result.refs.push(refName);
108
+ }
109
+ }
110
+ function dedupImport(result, imp) {
111
+ if (!result.imports.includes(imp)) {
112
+ result.imports.push(imp);
113
+ }
114
+ }
115
+ // ---------------------------------------------------------------------------
116
+ // Per-method converters
117
+ // ---------------------------------------------------------------------------
118
+ function convertHide(result, varName, _args) {
119
+ const stateName = `${varName}Visible`;
120
+ dedupState(result, stateName, 'boolean', 'true');
121
+ dedupImport(result, 'useState');
122
+ result.handlers.push(`// Hide ${varName}\nconst hide${capitalise(varName)} = () => set${capitalise(stateName)}(false);`);
123
+ }
124
+ function convertShow(result, varName, _args) {
125
+ const stateName = `${varName}Visible`;
126
+ dedupState(result, stateName, 'boolean', 'true');
127
+ dedupImport(result, 'useState');
128
+ result.handlers.push(`// Show ${varName}\nconst show${capitalise(varName)} = () => set${capitalise(stateName)}(true);`);
129
+ }
130
+ function convertToggle(result, varName, _args) {
131
+ const stateName = `${varName}Visible`;
132
+ dedupState(result, stateName, 'boolean', 'true');
133
+ dedupImport(result, 'useState');
134
+ result.handlers.push(`// Toggle ${varName} visibility\nconst toggle${capitalise(varName)} = () => set${capitalise(stateName)}((prev) => !prev);`);
135
+ }
136
+ function convertAddClass(result, varName, args) {
137
+ const className = stripQuotes(args);
138
+ const stateName = `${varName}Has${capitalise(className)}`;
139
+ dedupState(result, stateName, 'boolean', 'false');
140
+ dedupImport(result, 'useState');
141
+ result.handlers.push(`// Add class '${className}' to ${varName}\nconst add${capitalise(className)}To${capitalise(varName)} = () => set${capitalise(stateName)}(true);`);
142
+ }
143
+ function convertRemoveClass(result, varName, args) {
144
+ const className = stripQuotes(args);
145
+ const stateName = `${varName}Has${capitalise(className)}`;
146
+ dedupState(result, stateName, 'boolean', 'true');
147
+ dedupImport(result, 'useState');
148
+ result.handlers.push(`// Remove class '${className}' from ${varName}\nconst remove${capitalise(className)}From${capitalise(varName)} = () => set${capitalise(stateName)}(false);`);
149
+ }
150
+ function convertToggleClass(result, varName, args) {
151
+ const className = stripQuotes(args);
152
+ const stateName = `${varName}Has${capitalise(className)}`;
153
+ dedupState(result, stateName, 'boolean', 'false');
154
+ dedupImport(result, 'useState');
155
+ result.handlers.push(`// Toggle class '${className}' on ${varName}\nconst toggle${capitalise(className)}On${capitalise(varName)} = () => set${capitalise(stateName)}((prev) => !prev);`);
156
+ }
157
+ function convertText(result, varName, args) {
158
+ const stateName = `${varName}Text`;
159
+ const initial = args ? stripQuotes(args) : '';
160
+ dedupState(result, stateName, 'string', `'${initial}'`);
161
+ dedupImport(result, 'useState');
162
+ if (args) {
163
+ result.handlers.push(`// Set text content for ${varName}\nconst update${capitalise(varName)}Text = (text: string) => set${capitalise(stateName)}(text);`);
164
+ }
165
+ }
166
+ function convertHtml(result, varName, args) {
167
+ const stateName = `${varName}Html`;
168
+ const initial = args ? stripQuotes(args) : '';
169
+ dedupState(result, stateName, 'string', `'${initial}'`);
170
+ dedupImport(result, 'useState');
171
+ result.handlers.push(`// Set inner HTML for ${varName} — use dangerouslySetInnerHTML={{ __html: ${stateName} }}\n// WARNING: Make sure the HTML content is sanitised to prevent XSS attacks\nconst update${capitalise(varName)}Html = (html: string) => set${capitalise(stateName)}(html);`);
172
+ }
173
+ function convertVal(result, varName, args) {
174
+ const stateName = `${varName}Value`;
175
+ if (args) {
176
+ dedupState(result, stateName, 'string', `'${stripQuotes(args)}'`);
177
+ dedupImport(result, 'useState');
178
+ result.handlers.push(`// Controlled input value for ${varName}\nconst handleChange${capitalise(varName)} = (e: React.ChangeEvent<HTMLInputElement>) => set${capitalise(stateName)}(e.target.value);`);
179
+ }
180
+ else {
181
+ // Read-only: prefer useRef
182
+ const refName = selectorToRefName(varName);
183
+ dedupRef(result, refName);
184
+ dedupImport(result, 'useRef');
185
+ result.handlers.push(`// Read input value from ref\nconst get${capitalise(varName)}Value = () => ${refName}.current?.value ?? '';`);
186
+ }
187
+ }
188
+ function convertAttr(result, varName, args) {
189
+ const parts = splitArgs(args);
190
+ const attrName = stripQuotes(parts[0] || '');
191
+ const attrValue = parts[1] ? stripQuotes(parts[1]) : '';
192
+ const stateName = `${varName}${capitalise(attrName)}`;
193
+ dedupState(result, stateName, 'string', `'${attrValue}'`);
194
+ dedupImport(result, 'useState');
195
+ result.handlers.push(`// Dynamic attribute '${attrName}' for ${varName}\n// Usage in JSX: <element ${attrName}={${stateName}} />\nconst update${capitalise(varName)}${capitalise(attrName)} = (value: string) => set${capitalise(stateName)}(value);`);
196
+ }
197
+ function convertCss(result, varName, args) {
198
+ const parts = splitArgs(args);
199
+ const prop = cssPropToJs(parts[0] || '');
200
+ const value = parts[1] ? stripQuotes(parts[1]) : '';
201
+ const stateName = `${varName}Style`;
202
+ dedupState(result, stateName, 'React.CSSProperties', `{ ${prop}: '${value}' }`);
203
+ dedupImport(result, 'useState');
204
+ result.handlers.push(`// Update inline style for ${varName}\n// Usage in JSX: <element style={${stateName}} />\nconst update${capitalise(varName)}Style = (styles: React.CSSProperties) => set${capitalise(stateName)}((prev) => ({ ...prev, ...styles }));`);
205
+ }
206
+ function convertOn(result, varName, args) {
207
+ const parts = splitArgs(args);
208
+ const event = stripQuotes(parts[0] || 'click');
209
+ const fnBody = parts.slice(1).join(', ');
210
+ const reactEvent = jqueryEventToReact(event);
211
+ dedupImport(result, 'useCallback');
212
+ result.handlers.push(`// ${reactEvent} handler for ${varName}\nconst handle${capitalise(varName)}${capitalise(event)} = useCallback((e: React.SyntheticEvent) => {\n ${fnBody || '// TODO: migrate handler logic'}\n}, []);`);
213
+ }
214
+ function convertAjax(result, _varName, args) {
215
+ dedupImport(result, 'useState');
216
+ dedupImport(result, 'useEffect');
217
+ const stateName = 'fetchData';
218
+ dedupState(result, stateName, 'unknown', 'null');
219
+ dedupState(result, 'fetchLoading', 'boolean', 'false');
220
+ dedupState(result, 'fetchError', 'string | null', 'null');
221
+ result.effects.push(`// Replaces $.ajax(${args})\nuseEffect(() => {\n const fetchData = async () => {\n setFetchLoading(true);\n setFetchError(null);\n try {\n const response = await fetch(/* URL from: ${args || 'original $.ajax call'} */);\n if (!response.ok) throw new Error(\`HTTP \${response.status}\`);\n const data = await response.json();\n setFetchData(data);\n } catch (err) {\n setFetchError(err instanceof Error ? err.message : 'Unknown error');\n } finally {\n setFetchLoading(false);\n }\n };\n fetchData();\n}, []);`);
222
+ }
223
+ function convertGet(result, _varName, args) {
224
+ const parts = splitArgs(args);
225
+ const url = parts[0] ? stripQuotes(parts[0]) : '/* URL */';
226
+ dedupImport(result, 'useState');
227
+ dedupImport(result, 'useEffect');
228
+ const stateName = 'getData';
229
+ dedupState(result, stateName, 'unknown', 'null');
230
+ result.effects.push(`// Replaces $.get(${args})\nuseEffect(() => {\n fetch('${url}')\n .then((res) => res.json())\n .then((data) => setGetData(data))\n .catch(console.error);\n}, []);`);
231
+ }
232
+ function convertPost(result, _varName, args) {
233
+ const parts = splitArgs(args);
234
+ const url = parts[0] ? stripQuotes(parts[0]) : '/* URL */';
235
+ dedupImport(result, 'useCallback');
236
+ result.handlers.push(`// Replaces $.post(${args})\nconst postData = useCallback(async (body: unknown) => {\n try {\n const response = await fetch('${url}', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n });\n if (!response.ok) throw new Error(\`HTTP \${response.status}\`);\n return await response.json();\n } catch (err) {\n console.error('POST request failed:', err);\n throw err;\n }\n}, []);`);
237
+ }
238
+ function convertAnimate(result, varName, args) {
239
+ const stateName = `${varName}Animated`;
240
+ dedupState(result, stateName, 'boolean', 'false');
241
+ dedupImport(result, 'useState');
242
+ result.handlers.push(`// Replaces $(selector).animate(${args})\n// Recommendation: use CSS transitions or framer-motion instead of JS animation\n// Add CSS: .${varName}-animated { transition: all 0.3s ease; /* target properties */ }\nconst animate${capitalise(varName)} = () => set${capitalise(stateName)}(true);`);
243
+ }
244
+ function convertFadeIn(result, varName, _args) {
245
+ const stateName = `${varName}Opacity`;
246
+ dedupState(result, stateName, 'number', '0');
247
+ dedupImport(result, 'useState');
248
+ result.handlers.push(`// Replaces $(selector).fadeIn()\n// Add CSS: transition: opacity 0.3s ease;\nconst fadeIn${capitalise(varName)} = () => set${capitalise(stateName)}(1);`);
249
+ }
250
+ function convertFadeOut(result, varName, _args) {
251
+ const stateName = `${varName}Opacity`;
252
+ dedupState(result, stateName, 'number', '1');
253
+ dedupImport(result, 'useState');
254
+ result.handlers.push(`// Replaces $(selector).fadeOut()\n// Add CSS: transition: opacity 0.3s ease;\nconst fadeOut${capitalise(varName)} = () => set${capitalise(stateName)}(0);`);
255
+ }
256
+ function convertSlideDown(result, varName, _args) {
257
+ const stateName = `${varName}Expanded`;
258
+ dedupState(result, stateName, 'boolean', 'false');
259
+ dedupImport(result, 'useState');
260
+ result.handlers.push(`// Replaces $(selector).slideDown()\n// Add CSS: overflow: hidden; transition: max-height 0.3s ease; max-height: \${${stateName} ? '500px' : '0'}\nconst slideDown${capitalise(varName)} = () => set${capitalise(stateName)}(true);`);
261
+ }
262
+ function convertSlideUp(result, varName, _args) {
263
+ const stateName = `${varName}Expanded`;
264
+ dedupState(result, stateName, 'boolean', 'true');
265
+ dedupImport(result, 'useState');
266
+ result.handlers.push(`// Replaces $(selector).slideUp()\n// Add CSS: overflow: hidden; transition: max-height 0.3s ease; max-height: \${${stateName} ? '500px' : '0'}\nconst slideUp${capitalise(varName)} = () => set${capitalise(stateName)}(false);`);
267
+ }
268
+ function convertReady(result, _varName, args) {
269
+ dedupImport(result, 'useEffect');
270
+ result.effects.push(`// Replaces $(document).ready()\nuseEffect(() => {\n ${args || '// TODO: migrate document.ready logic'}\n}, []);`);
271
+ }
272
+ function convertAppend(result, varName, args) {
273
+ const stateName = `${varName}Items`;
274
+ dedupState(result, stateName, 'string[]', '[]');
275
+ dedupImport(result, 'useState');
276
+ result.handlers.push(`// Replaces $(selector).append(${args})\n// Render with: {${stateName}.map((item, i) => <div key={i} dangerouslySetInnerHTML={{ __html: item }} />)}\nconst appendTo${capitalise(varName)} = (content: string) => set${capitalise(stateName)}((prev) => [...prev, content]);`);
277
+ }
278
+ function convertPrepend(result, varName, args) {
279
+ const stateName = `${varName}Items`;
280
+ dedupState(result, stateName, 'string[]', '[]');
281
+ dedupImport(result, 'useState');
282
+ result.handlers.push(`// Replaces $(selector).prepend(${args})\n// Render with: {${stateName}.map((item, i) => <div key={i} dangerouslySetInnerHTML={{ __html: item }} />)}\nconst prependTo${capitalise(varName)} = (content: string) => set${capitalise(stateName)}((prev) => [content, ...prev]);`);
283
+ }
284
+ function convertRemove(result, varName, _args) {
285
+ const stateName = `${varName}Items`;
286
+ dedupState(result, stateName, 'string[]', '[]');
287
+ dedupImport(result, 'useState');
288
+ result.handlers.push(`// Replaces $(selector).remove()\n// Filter the element out of state\nconst removeFrom${capitalise(varName)} = (index: number) => set${capitalise(stateName)}((prev) => prev.filter((_, i) => i !== index));`);
289
+ }
290
+ function convertClosest(result, varName, args) {
291
+ const refName = selectorToRefName(varName);
292
+ dedupRef(result, refName);
293
+ dedupImport(result, 'useRef');
294
+ result.handlers.push(`// Replaces $(selector).closest(${args})\n// In React, use refs for DOM traversal or restructure with Context\nconst getClosest${capitalise(varName)} = () => ${refName}.current?.closest(${args || "'*'"});`);
295
+ }
296
+ function convertFind(result, varName, args) {
297
+ const refName = selectorToRefName(varName);
298
+ dedupRef(result, refName);
299
+ dedupImport(result, 'useRef');
300
+ result.handlers.push(`// Replaces $(selector).find(${args})\n// In React, prefer child component props or use ref.querySelector\nconst find${capitalise(varName)}Child = () => ${refName}.current?.querySelector(${args || "'*'"});`);
301
+ }
302
+ const methodConverters = {
303
+ hide: convertHide,
304
+ show: convertShow,
305
+ toggle: convertToggle,
306
+ addClass: convertAddClass,
307
+ removeClass: convertRemoveClass,
308
+ toggleClass: convertToggleClass,
309
+ text: convertText,
310
+ html: convertHtml,
311
+ val: convertVal,
312
+ attr: convertAttr,
313
+ css: convertCss,
314
+ on: convertOn,
315
+ ajax: convertAjax,
316
+ get: convertGet,
317
+ post: convertPost,
318
+ animate: convertAnimate,
319
+ fadeIn: convertFadeIn,
320
+ fadeOut: convertFadeOut,
321
+ slideDown: convertSlideDown,
322
+ slideUp: convertSlideUp,
323
+ ready: convertReady,
324
+ append: convertAppend,
325
+ prepend: convertPrepend,
326
+ remove: convertRemove,
327
+ closest: convertClosest,
328
+ find: convertFind,
329
+ };
330
+ // ---------------------------------------------------------------------------
331
+ // Public API
332
+ // ---------------------------------------------------------------------------
333
+ /**
334
+ * Convert raw jQuery code and detected patterns into React equivalents.
335
+ *
336
+ * Returns state variables, refs, effects, handlers, and required imports
337
+ * that together replace the jQuery functionality.
338
+ */
339
+ export function convertJQueryToReact(jqueryCode, patterns) {
340
+ const result = {
341
+ stateVars: [],
342
+ refs: [],
343
+ effects: [],
344
+ handlers: [],
345
+ imports: [],
346
+ };
347
+ for (const pattern of patterns) {
348
+ const varName = selectorToVarName(pattern.selector);
349
+ const method = pattern.method;
350
+ // Handle $.ajax / $.get / $.post (global jQuery methods)
351
+ if (method === 'ajax' || (pattern.selector === '' && (method === 'get' || method === 'post'))) {
352
+ const converter = methodConverters[method];
353
+ if (converter) {
354
+ converter(result, varName, pattern.args);
355
+ }
356
+ continue;
357
+ }
358
+ // Handle $(document).ready()
359
+ if (method === 'ready') {
360
+ convertReady(result, varName, pattern.args);
361
+ continue;
362
+ }
363
+ const converter = methodConverters[method];
364
+ if (converter) {
365
+ converter(result, varName, pattern.args);
366
+ }
367
+ else {
368
+ // Unknown method — emit a TODO with the original code
369
+ result.handlers.push(`// TODO: Convert jQuery method .${method}() to React equivalent\n// Original: ${pattern.original}`);
370
+ }
371
+ }
372
+ // Deduplicate imports
373
+ result.imports = [...new Set(result.imports)];
374
+ return result;
375
+ }
376
+ /**
377
+ * Convert a jQuery selector string into a useRef variable name or
378
+ * a querySelector equivalent for direct DOM access.
379
+ */
380
+ export function convertJQuerySelector(selector) {
381
+ if (!selector || selector === 'document' || selector === 'window') {
382
+ return selector;
383
+ }
384
+ // ID selector → useRef
385
+ if (selector.startsWith('#')) {
386
+ const refName = selectorToRefName(selectorToVarName(selector));
387
+ return `${refName} (useRef)`;
388
+ }
389
+ // Class selector → querySelectorAll or component prop
390
+ if (selector.startsWith('.')) {
391
+ const name = selectorToVarName(selector);
392
+ return `document.querySelectorAll('.${name}') or use a shared className state`;
393
+ }
394
+ // Tag selector
395
+ return `document.querySelectorAll('${selector}') or refactor into child components`;
396
+ }
397
+ /**
398
+ * Convert a single jQuery method call into its React equivalent code string.
399
+ */
400
+ export function convertJQueryMethod(method, args) {
401
+ switch (method) {
402
+ case 'hide':
403
+ return `setVisible(false); // In JSX: {visible && <Element />}`;
404
+ case 'show':
405
+ return `setVisible(true); // In JSX: {visible && <Element />}`;
406
+ case 'toggle':
407
+ return `setVisible((prev) => !prev); // In JSX: {visible && <Element />}`;
408
+ case 'addClass': {
409
+ const cls = stripQuotes(args);
410
+ return `setHas${capitalise(cls)}(true); // In JSX: className={has${capitalise(cls)} ? '${cls}' : ''}`;
411
+ }
412
+ case 'removeClass': {
413
+ const cls = stripQuotes(args);
414
+ return `setHas${capitalise(cls)}(false); // In JSX: className={has${capitalise(cls)} ? '${cls}' : ''}`;
415
+ }
416
+ case 'toggleClass': {
417
+ const cls = stripQuotes(args);
418
+ return `setHas${capitalise(cls)}((prev) => !prev); // In JSX: className={has${capitalise(cls)} ? '${cls}' : ''}`;
419
+ }
420
+ case 'text':
421
+ return args
422
+ ? `setText(${args}); // In JSX: {text}`
423
+ : `text // read from state`;
424
+ case 'html':
425
+ return args
426
+ ? `setHtmlContent(${args}); // In JSX: <div dangerouslySetInnerHTML={{ __html: htmlContent }} />`
427
+ : `htmlContent // read from state`;
428
+ case 'val':
429
+ return args
430
+ ? `setValue(${args}); // Controlled input: value={value} onChange={handleChange}`
431
+ : `ref.current?.value // or use controlled state`;
432
+ case 'attr': {
433
+ const parts = splitArgs(args);
434
+ const attr = stripQuotes(parts[0] || '');
435
+ return parts[1]
436
+ ? `set${capitalise(attr)}(${parts[1]}); // In JSX: ${attr}={${selectorToVarName(attr)}}`
437
+ : `${attr} // read from state or props`;
438
+ }
439
+ case 'css': {
440
+ const parts = splitArgs(args);
441
+ const prop = cssPropToJs(parts[0] || '');
442
+ return `setStyle((prev) => ({ ...prev, ${prop}: ${parts[1] || "''"} })); // In JSX: style={style}`;
443
+ }
444
+ case 'on': {
445
+ const parts = splitArgs(args);
446
+ const event = stripQuotes(parts[0] || 'click');
447
+ const reactEvent = jqueryEventToReact(event);
448
+ return `// In JSX: ${reactEvent}={handler}`;
449
+ }
450
+ case 'ajax':
451
+ return `// Replace with fetch() inside useEffect or event handler\nuseEffect(() => { fetch(url).then(res => res.json()).then(setData); }, []);`;
452
+ case 'get': {
453
+ const url = args ? stripQuotes(splitArgs(args)[0]) : 'url';
454
+ return `// Replace with fetch()\nuseEffect(() => { fetch('${url}').then(res => res.json()).then(setData); }, []);`;
455
+ }
456
+ case 'post': {
457
+ const url = args ? stripQuotes(splitArgs(args)[0]) : 'url';
458
+ return `// Replace with fetch()\nconst postData = async (body) => {\n const res = await fetch('${url}', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body) });\n return res.json();\n};`;
459
+ }
460
+ case 'animate':
461
+ return `// Use CSS transitions + state, or consider framer-motion\n// Add CSS: transition: all 0.3s ease;\nsetAnimated(true);`;
462
+ case 'fadeIn':
463
+ return `setOpacity(1); // Add CSS: transition: opacity 0.3s ease;`;
464
+ case 'fadeOut':
465
+ return `setOpacity(0); // Add CSS: transition: opacity 0.3s ease;`;
466
+ case 'slideDown':
467
+ return `setExpanded(true); // Add CSS: overflow: hidden; transition: max-height 0.3s ease;`;
468
+ case 'slideUp':
469
+ return `setExpanded(false); // Add CSS: overflow: hidden; transition: max-height 0.3s ease;`;
470
+ case 'ready':
471
+ return `useEffect(() => { /* document.ready logic */ }, []);`;
472
+ case 'append':
473
+ return `setItems((prev) => [...prev, newItem]); // Render: {items.map(item => ...)}`;
474
+ case 'prepend':
475
+ return `setItems((prev) => [newItem, ...prev]); // Render: {items.map(item => ...)}`;
476
+ case 'remove':
477
+ return `setItems((prev) => prev.filter((_, i) => i !== index));`;
478
+ case 'closest':
479
+ return `ref.current?.closest(${args || "'selector'"}) // or use React Context`;
480
+ case 'find':
481
+ return `ref.current?.querySelector(${args || "'selector'"}) // or use child component props`;
482
+ default:
483
+ return `// TODO: Convert .${method}(${args}) to React equivalent`;
484
+ }
485
+ }
486
+ /**
487
+ * Generate a markdown migration guide documenting all jQuery patterns found
488
+ * and their recommended React equivalents.
489
+ */
490
+ export function generateJQueryMigrationGuide(patterns) {
491
+ if (patterns.length === 0) {
492
+ return '# jQuery Migration Guide\n\nNo jQuery patterns were detected in this project.\n';
493
+ }
494
+ const lines = [
495
+ '# jQuery to React Migration Guide',
496
+ '',
497
+ `Found **${patterns.length}** jQuery pattern${patterns.length === 1 ? '' : 's'} to migrate.`,
498
+ '',
499
+ '## Required React Imports',
500
+ '',
501
+ ];
502
+ // Collect required imports
503
+ const importsNeeded = new Set();
504
+ for (const p of patterns) {
505
+ const method = p.method;
506
+ if (['hide', 'show', 'toggle', 'addClass', 'removeClass', 'toggleClass', 'text', 'html', 'css', 'attr', 'animate', 'fadeIn', 'fadeOut', 'slideDown', 'slideUp', 'append', 'prepend', 'remove'].includes(method)) {
507
+ importsNeeded.add('useState');
508
+ }
509
+ if (['val', 'closest', 'find'].includes(method)) {
510
+ importsNeeded.add('useRef');
511
+ }
512
+ if (['ajax', 'get', 'ready'].includes(method)) {
513
+ importsNeeded.add('useEffect');
514
+ }
515
+ if (['on', 'post'].includes(method)) {
516
+ importsNeeded.add('useCallback');
517
+ }
518
+ // val with args also needs useState
519
+ if (method === 'val' && p.args) {
520
+ importsNeeded.add('useState');
521
+ }
522
+ }
523
+ lines.push('```tsx');
524
+ lines.push(`import { ${[...importsNeeded].sort().join(', ')} } from 'react';`);
525
+ lines.push('```');
526
+ lines.push('');
527
+ // Group patterns by method
528
+ const byMethod = new Map();
529
+ for (const p of patterns) {
530
+ const existing = byMethod.get(p.method) || [];
531
+ existing.push(p);
532
+ byMethod.set(p.method, existing);
533
+ }
534
+ lines.push('## Patterns by Category');
535
+ lines.push('');
536
+ // Category grouping
537
+ const categories = {
538
+ 'Visibility & Display': ['hide', 'show', 'toggle', 'fadeIn', 'fadeOut', 'slideDown', 'slideUp'],
539
+ 'CSS Classes': ['addClass', 'removeClass', 'toggleClass'],
540
+ 'Content Manipulation': ['text', 'html', 'val', 'attr'],
541
+ 'Styling': ['css', 'animate'],
542
+ 'Event Handling': ['on'],
543
+ 'AJAX / Network': ['ajax', 'get', 'post'],
544
+ 'DOM Manipulation': ['append', 'prepend', 'remove'],
545
+ 'DOM Traversal': ['closest', 'find'],
546
+ 'Lifecycle': ['ready'],
547
+ };
548
+ for (const [category, methods] of Object.entries(categories)) {
549
+ const relevant = methods.filter((m) => byMethod.has(m));
550
+ if (relevant.length === 0)
551
+ continue;
552
+ lines.push(`### ${category}`);
553
+ lines.push('');
554
+ for (const method of relevant) {
555
+ const pats = byMethod.get(method);
556
+ for (const pat of pats) {
557
+ lines.push(`#### \`${pat.original}\``);
558
+ lines.push('');
559
+ lines.push('**jQuery:**');
560
+ lines.push('```javascript');
561
+ lines.push(pat.original);
562
+ lines.push('```');
563
+ lines.push('');
564
+ lines.push('**React equivalent:**');
565
+ lines.push('```tsx');
566
+ lines.push(convertJQueryMethod(method, pat.args));
567
+ lines.push('```');
568
+ lines.push('');
569
+ }
570
+ }
571
+ }
572
+ // Handle unknown methods
573
+ const knownMethods = new Set(Object.values(categories).flat());
574
+ const unknownPatterns = patterns.filter((p) => !knownMethods.has(p.method));
575
+ if (unknownPatterns.length > 0) {
576
+ lines.push('### Other Patterns (Manual Migration Required)');
577
+ lines.push('');
578
+ for (const pat of unknownPatterns) {
579
+ lines.push(`- \`${pat.original}\` — needs manual conversion of \`.${pat.method}()\``);
580
+ }
581
+ lines.push('');
582
+ }
583
+ lines.push('## General Migration Tips');
584
+ lines.push('');
585
+ lines.push('1. **Replace direct DOM manipulation with state.** Instead of `$(el).hide()`, use a boolean state variable and conditional rendering.');
586
+ lines.push('2. **Replace jQuery event binding with JSX props.** Instead of `$(el).on(\'click\', fn)`, use `onClick={fn}` in JSX.');
587
+ lines.push('3. **Replace `$.ajax` / `$.get` / `$.post` with `fetch()`.** Wrap in `useEffect` for data fetching on mount, or in event handlers for user-triggered requests.');
588
+ lines.push('4. **Replace jQuery animations with CSS transitions.** Use state to toggle classes that have CSS `transition` properties, or consider a library like framer-motion.');
589
+ lines.push('5. **Replace DOM traversal with refs or component structure.** Instead of `.closest()` or `.find()`, restructure your components or use `useRef`.');
590
+ lines.push('6. **Replace `$(document).ready()` with `useEffect(() => {}, [])`.** This runs once after the component mounts.');
591
+ lines.push('');
592
+ return lines.join('\n');
593
+ }
594
+ //# sourceMappingURL=jquery-converter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jquery-converter.js","sourceRoot":"","sources":["../../src/generators/jquery-converter.ts"],"names":[],"mappings":"AAiBA,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,SAAS,iBAAiB,CAAC,QAAgB;IACzC,uEAAuE;IACvE,MAAM,OAAO,GAAG,QAAQ;SACrB,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;SACpB,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC;SAC/B,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;SAC/C,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAClD,OAAO,OAAO,IAAI,SAAS,CAAC;AAC9B,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAgB;IACzC,OAAO,GAAG,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC7C,CAAC;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,WAAW,CAAC,CAAS;IAC5B,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACzB,IACE,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAClD,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAClD,CAAC;QACD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,QAAQ,GAAG,CAAC,QAAQ,CAAC;QACvB,CAAC;aAAM,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnC,QAAQ,GAAG,CAAC,QAAQ,CAAC;QACvB,CAAC;aAAM,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG;gBAAE,KAAK,EAAE,CAAC;iBAC/C,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG;gBAAE,KAAK,EAAE,CAAC;QAC3D,CAAC;QAED,IAAI,EAAE,KAAK,GAAG,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;YACxD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5B,OAAO,GAAG,EAAE,CAAC;QACf,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,EAAE;QAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAChD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa;IACvC,MAAM,GAAG,GAA2B;QAClC,KAAK,EAAE,SAAS;QAChB,QAAQ,EAAE,eAAe;QACzB,MAAM,EAAE,UAAU;QAClB,MAAM,EAAE,UAAU;QAClB,KAAK,EAAE,SAAS;QAChB,OAAO,EAAE,WAAW;QACpB,KAAK,EAAE,SAAS;QAChB,QAAQ,EAAE,YAAY;QACtB,KAAK,EAAE,SAAS;QAChB,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,cAAc;QAC1B,UAAU,EAAE,cAAc;QAC1B,SAAS,EAAE,aAAa;QACxB,QAAQ,EAAE,YAAY;QACtB,SAAS,EAAE,aAAa;QACxB,OAAO,EAAE,WAAW;QACpB,MAAM,EAAE,UAAU;QAClB,MAAM,EAAE,UAAU;QAClB,WAAW,EAAE,eAAe;QAC5B,IAAI,EAAE,QAAQ;QACd,SAAS,EAAE,aAAa;QACxB,OAAO,EAAE,WAAW;QACpB,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,cAAc;QAC1B,QAAQ,EAAE,YAAY;QACtB,SAAS,EAAE,aAAa;KACzB,CAAC;IACF,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;AAChD,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AAC3E,CAAC;AAED,8EAA8E;AAC9E,4EAA4E;AAC5E,8EAA8E;AAE9E,SAAS,UAAU,CACjB,MAAuB,EACvB,IAAY,EACZ,IAAY,EACZ,YAAoB;IAEpB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACnD,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;IACtD,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,MAAuB,EAAE,OAAe;IACxD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,MAAuB,EAAE,GAAW;IACvD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,wBAAwB;AACxB,8EAA8E;AAE9E,SAAS,WAAW,CAAC,MAAuB,EAAE,OAAe,EAAE,KAAa;IAC1E,MAAM,SAAS,GAAG,GAAG,OAAO,SAAS,CAAC;IACtC,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACjD,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAClB,WAAW,OAAO,eAAe,UAAU,CAAC,OAAO,CAAC,eAAe,UAAU,CAAC,SAAS,CAAC,UAAU,CACnG,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,MAAuB,EAAE,OAAe,EAAE,KAAa;IAC1E,MAAM,SAAS,GAAG,GAAG,OAAO,SAAS,CAAC;IACtC,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACjD,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAClB,WAAW,OAAO,eAAe,UAAU,CAAC,OAAO,CAAC,eAAe,UAAU,CAAC,SAAS,CAAC,SAAS,CAClG,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,MAAuB,EAAE,OAAe,EAAE,KAAa;IAC5E,MAAM,SAAS,GAAG,GAAG,OAAO,SAAS,CAAC;IACtC,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACjD,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAClB,aAAa,OAAO,4BAA4B,UAAU,CAAC,OAAO,CAAC,eAAe,UAAU,CAAC,SAAS,CAAC,oBAAoB,CAC5H,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,MAAuB,EAAE,OAAe,EAAE,IAAY;IAC7E,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,GAAG,OAAO,MAAM,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;IAC1D,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAClD,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAClB,iBAAiB,SAAS,QAAQ,OAAO,cAAc,UAAU,CAAC,SAAS,CAAC,KAAK,UAAU,CAAC,OAAO,CAAC,eAAe,UAAU,CAAC,SAAS,CAAC,SAAS,CAClJ,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAuB,EAAE,OAAe,EAAE,IAAY;IAChF,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,GAAG,OAAO,MAAM,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;IAC1D,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACjD,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAClB,oBAAoB,SAAS,UAAU,OAAO,iBAAiB,UAAU,CAAC,SAAS,CAAC,OAAO,UAAU,CAAC,OAAO,CAAC,eAAe,UAAU,CAAC,SAAS,CAAC,UAAU,CAC7J,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAuB,EAAE,OAAe,EAAE,IAAY;IAChF,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,GAAG,OAAO,MAAM,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;IAC1D,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAClD,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAClB,oBAAoB,SAAS,QAAQ,OAAO,iBAAiB,UAAU,CAAC,SAAS,CAAC,KAAK,UAAU,CAAC,OAAO,CAAC,eAAe,UAAU,CAAC,SAAS,CAAC,oBAAoB,CACnK,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,MAAuB,EAAE,OAAe,EAAE,IAAY;IACzE,MAAM,SAAS,GAAG,GAAG,OAAO,MAAM,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9C,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,OAAO,GAAG,CAAC,CAAC;IACxD,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAChC,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,CAAC,QAAQ,CAAC,IAAI,CAClB,2BAA2B,OAAO,iBAAiB,UAAU,CAAC,OAAO,CAAC,+BAA+B,UAAU,CAAC,SAAS,CAAC,SAAS,CACpI,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,MAAuB,EAAE,OAAe,EAAE,IAAY;IACzE,MAAM,SAAS,GAAG,GAAG,OAAO,MAAM,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9C,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,OAAO,GAAG,CAAC,CAAC;IACxD,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAClB,yBAAyB,OAAO,6CAA6C,SAAS,gGAAgG,UAAU,CAAC,OAAO,CAAC,+BAA+B,UAAU,CAAC,SAAS,CAAC,SAAS,CACvQ,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,MAAuB,EAAE,OAAe,EAAE,IAAY;IACxE,MAAM,SAAS,GAAG,GAAG,OAAO,OAAO,CAAC;IACpC,IAAI,IAAI,EAAE,CAAC;QACT,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClE,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAClB,iCAAiC,OAAO,uBAAuB,UAAU,CAAC,OAAO,CAAC,qDAAqD,UAAU,CAAC,SAAS,CAAC,mBAAmB,CAChL,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,2BAA2B;QAC3B,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC3C,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC1B,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC9B,MAAM,CAAC,QAAQ,CAAC,IAAI,CAClB,0CAA0C,UAAU,CAAC,OAAO,CAAC,iBAAiB,OAAO,wBAAwB,CAC9G,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,MAAuB,EAAE,OAAe,EAAE,IAAY;IACzE,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACxD,MAAM,SAAS,GAAG,GAAG,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;IACtD,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,SAAS,GAAG,CAAC,CAAC;IAC1D,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAClB,yBAAyB,QAAQ,SAAS,OAAO,+BAA+B,QAAQ,KAAK,SAAS,qBAAqB,UAAU,CAAC,OAAO,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,4BAA4B,UAAU,CAAC,SAAS,CAAC,UAAU,CACjO,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,MAAuB,EAAE,OAAe,EAAE,IAAY;IACxE,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACpD,MAAM,SAAS,GAAG,GAAG,OAAO,OAAO,CAAC;IACpC,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,qBAAqB,EAAE,KAAK,IAAI,MAAM,KAAK,KAAK,CAAC,CAAC;IAChF,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAClB,8BAA8B,OAAO,sCAAsC,SAAS,qBAAqB,UAAU,CAAC,OAAO,CAAC,+CAA+C,UAAU,CAAC,SAAS,CAAC,uCAAuC,CACxO,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,MAAuB,EAAE,OAAe,EAAE,IAAY;IACvE,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,UAAU,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAE7C,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACnC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAClB,MAAM,UAAU,gBAAgB,OAAO,iBAAiB,UAAU,CAAC,OAAO,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,oDAAoD,MAAM,IAAI,gCAAgC,WAAW,CACzM,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,MAAuB,EAAE,QAAgB,EAAE,IAAY;IAC1E,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAChC,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAEjC,MAAM,SAAS,GAAG,WAAW,CAAC;IAC9B,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACjD,UAAU,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACvD,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;IAE1D,MAAM,CAAC,OAAO,CAAC,IAAI,CACjB,sBAAsB,IAAI,6KAA6K,IAAI,IAAI,sBAAsB,4UAA4U,CACljB,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,MAAuB,EAAE,QAAgB,EAAE,IAAY;IACzE,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;IAC3D,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAChC,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAEjC,MAAM,SAAS,GAAG,SAAS,CAAC;IAC5B,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAEjD,MAAM,CAAC,OAAO,CAAC,IAAI,CACjB,qBAAqB,IAAI,kCAAkC,GAAG,gHAAgH,CAC/K,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,MAAuB,EAAE,QAAgB,EAAE,IAAY;IAC1E,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;IAC3D,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAEnC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAClB,sBAAsB,IAAI,0GAA0G,GAAG,4UAA4U,CACpd,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,MAAuB,EAAE,OAAe,EAAE,IAAY;IAC5E,MAAM,SAAS,GAAG,GAAG,OAAO,UAAU,CAAC;IACvC,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAClD,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAClB,mCAAmC,IAAI,oGAAoG,OAAO,kFAAkF,UAAU,CAAC,OAAO,CAAC,eAAe,UAAU,CAAC,SAAS,CAAC,SAAS,CACrS,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,MAAuB,EAAE,OAAe,EAAE,KAAa;IAC5E,MAAM,SAAS,GAAG,GAAG,OAAO,SAAS,CAAC;IACtC,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC7C,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAClB,6FAA6F,UAAU,CAAC,OAAO,CAAC,eAAe,UAAU,CAAC,SAAS,CAAC,MAAM,CAC3J,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,MAAuB,EAAE,OAAe,EAAE,KAAa;IAC7E,MAAM,SAAS,GAAG,GAAG,OAAO,SAAS,CAAC;IACtC,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC7C,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAClB,+FAA+F,UAAU,CAAC,OAAO,CAAC,eAAe,UAAU,CAAC,SAAS,CAAC,MAAM,CAC7J,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAuB,EAAE,OAAe,EAAE,KAAa;IAC/E,MAAM,SAAS,GAAG,GAAG,OAAO,UAAU,CAAC;IACvC,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAClD,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAClB,uHAAuH,SAAS,qCAAqC,UAAU,CAAC,OAAO,CAAC,eAAe,UAAU,CAAC,SAAS,CAAC,SAAS,CACtO,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,MAAuB,EAAE,OAAe,EAAE,KAAa;IAC7E,MAAM,SAAS,GAAG,GAAG,OAAO,UAAU,CAAC;IACvC,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACjD,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAClB,qHAAqH,SAAS,mCAAmC,UAAU,CAAC,OAAO,CAAC,eAAe,UAAU,CAAC,SAAS,CAAC,UAAU,CACnO,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,MAAuB,EAAE,QAAgB,EAAE,IAAY;IAC3E,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACjC,MAAM,CAAC,OAAO,CAAC,IAAI,CACjB,yDAAyD,IAAI,IAAI,uCAAuC,WAAW,CACpH,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,MAAuB,EAAE,OAAe,EAAE,IAAY;IAC3E,MAAM,SAAS,GAAG,GAAG,OAAO,OAAO,CAAC;IACpC,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;IAChD,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAClB,kCAAkC,IAAI,uBAAuB,SAAS,iGAAiG,UAAU,CAAC,OAAO,CAAC,8BAA8B,UAAU,CAAC,SAAS,CAAC,iCAAiC,CAC/Q,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,MAAuB,EAAE,OAAe,EAAE,IAAY;IAC5E,MAAM,SAAS,GAAG,GAAG,OAAO,OAAO,CAAC;IACpC,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;IAChD,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAClB,mCAAmC,IAAI,uBAAuB,SAAS,kGAAkG,UAAU,CAAC,OAAO,CAAC,8BAA8B,UAAU,CAAC,SAAS,CAAC,iCAAiC,CACjR,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,MAAuB,EAAE,OAAe,EAAE,KAAa;IAC5E,MAAM,SAAS,GAAG,GAAG,OAAO,OAAO,CAAC;IACpC,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;IAChD,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAClB,yFAAyF,UAAU,CAAC,OAAO,CAAC,4BAA4B,UAAU,CAAC,SAAS,CAAC,iDAAiD,CAC/M,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,MAAuB,EAAE,OAAe,EAAE,IAAY;IAC5E,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC3C,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1B,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC9B,MAAM,CAAC,QAAQ,CAAC,IAAI,CAClB,mCAAmC,IAAI,2FAA2F,UAAU,CAAC,OAAO,CAAC,YAAY,OAAO,qBAAqB,IAAI,IAAI,KAAK,IAAI,CAC/M,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,MAAuB,EAAE,OAAe,EAAE,IAAY;IACzE,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC3C,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1B,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC9B,MAAM,CAAC,QAAQ,CAAC,IAAI,CAClB,gCAAgC,IAAI,oFAAoF,UAAU,CAAC,OAAO,CAAC,iBAAiB,OAAO,2BAA2B,IAAI,IAAI,KAAK,IAAI,CAChN,CAAC;AACJ,CAAC;AAQD,MAAM,gBAAgB,GAAoC;IACxD,IAAI,EAAE,WAAW;IACjB,IAAI,EAAE,WAAW;IACjB,MAAM,EAAE,aAAa;IACrB,QAAQ,EAAE,eAAe;IACzB,WAAW,EAAE,kBAAkB;IAC/B,WAAW,EAAE,kBAAkB;IAC/B,IAAI,EAAE,WAAW;IACjB,IAAI,EAAE,WAAW;IACjB,GAAG,EAAE,UAAU;IACf,IAAI,EAAE,WAAW;IACjB,GAAG,EAAE,UAAU;IACf,EAAE,EAAE,SAAS;IACb,IAAI,EAAE,WAAW;IACjB,GAAG,EAAE,UAAU;IACf,IAAI,EAAE,WAAW;IACjB,OAAO,EAAE,cAAc;IACvB,MAAM,EAAE,aAAa;IACrB,OAAO,EAAE,cAAc;IACvB,SAAS,EAAE,gBAAgB;IAC3B,OAAO,EAAE,cAAc;IACvB,KAAK,EAAE,YAAY;IACnB,MAAM,EAAE,aAAa;IACrB,OAAO,EAAE,cAAc;IACvB,MAAM,EAAE,aAAa;IACrB,OAAO,EAAE,cAAc;IACvB,IAAI,EAAE,WAAW;CAClB,CAAC;AAEF,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,UAAkB,EAClB,QAAyB;IAEzB,MAAM,MAAM,GAAoB;QAC9B,SAAS,EAAE,EAAE;QACb,IAAI,EAAE,EAAE;QACR,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,EAAE;QACZ,OAAO,EAAE,EAAE;KACZ,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAE9B,yDAAyD;QACzD,IAAI,MAAM,KAAK,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,EAAE,IAAI,CAAC,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC;YAC9F,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAC3C,IAAI,SAAS,EAAE,CAAC;gBACd,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YAC3C,CAAC;YACD,SAAS;QACX,CAAC;QAED,6BAA6B;QAC7B,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACvB,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YAC5C,SAAS;QACX,CAAC;QAED,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,SAAS,EAAE,CAAC;YACd,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,sDAAsD;YACtD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAClB,mCAAmC,MAAM,wCAAwC,OAAO,CAAC,QAAQ,EAAE,CACpG,CAAC;QACJ,CAAC;IACH,CAAC;IAED,sBAAsB;IACtB,MAAM,CAAC,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAE9C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAgB;IACpD,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,UAAU,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClE,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,uBAAuB;IACvB,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC/D,OAAO,GAAG,OAAO,WAAW,CAAC;IAC/B,CAAC;IAED,sDAAsD;IACtD,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QACzC,OAAO,+BAA+B,IAAI,oCAAoC,CAAC;IACjF,CAAC;IAED,eAAe;IACf,OAAO,8BAA8B,QAAQ,sCAAsC,CAAC;AACtF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc,EAAE,IAAY;IAC9D,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM;YACT,OAAO,wDAAwD,CAAC;QAClE,KAAK,MAAM;YACT,OAAO,uDAAuD,CAAC;QACjE,KAAK,QAAQ;YACX,OAAO,kEAAkE,CAAC;QAC5E,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;YAC9B,OAAO,SAAS,UAAU,CAAC,GAAG,CAAC,oCAAoC,UAAU,CAAC,GAAG,CAAC,OAAO,GAAG,SAAS,CAAC;QACxG,CAAC;QACD,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;YAC9B,OAAO,SAAS,UAAU,CAAC,GAAG,CAAC,qCAAqC,UAAU,CAAC,GAAG,CAAC,OAAO,GAAG,SAAS,CAAC;QACzG,CAAC;QACD,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;YAC9B,OAAO,SAAS,UAAU,CAAC,GAAG,CAAC,+CAA+C,UAAU,CAAC,GAAG,CAAC,OAAO,GAAG,SAAS,CAAC;QACnH,CAAC;QACD,KAAK,MAAM;YACT,OAAO,IAAI;gBACT,CAAC,CAAC,WAAW,IAAI,sBAAsB;gBACvC,CAAC,CAAC,yBAAyB,CAAC;QAChC,KAAK,MAAM;YACT,OAAO,IAAI;gBACT,CAAC,CAAC,kBAAkB,IAAI,yEAAyE;gBACjG,CAAC,CAAC,gCAAgC,CAAC;QACvC,KAAK,KAAK;YACR,OAAO,IAAI;gBACT,CAAC,CAAC,YAAY,IAAI,+DAA+D;gBACjF,CAAC,CAAC,+CAA+C,CAAC;QACtD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YAC9B,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACzC,OAAO,KAAK,CAAC,CAAC,CAAC;gBACb,CAAC,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,iBAAiB,IAAI,KAAK,iBAAiB,CAAC,IAAI,CAAC,GAAG;gBACxF,CAAC,CAAC,GAAG,IAAI,8BAA8B,CAAC;QAC5C,CAAC;QACD,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YAC9B,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACzC,OAAO,kCAAkC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,gCAAgC,CAAC;QACrG,CAAC;QACD,KAAK,IAAI,CAAC,CAAC,CAAC;YACV,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YAC9B,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC;YAC/C,MAAM,UAAU,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC7C,OAAO,cAAc,UAAU,YAAY,CAAC;QAC9C,CAAC;QACD,KAAK,MAAM;YACT,OAAO,wIAAwI,CAAC;QAClJ,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAC3D,OAAO,qDAAqD,GAAG,mDAAmD,CAAC;QACrH,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAC3D,OAAO,2FAA2F,GAAG,gIAAgI,CAAC;QACxO,CAAC;QACD,KAAK,SAAS;YACZ,OAAO,uHAAuH,CAAC;QACjI,KAAK,QAAQ;YACX,OAAO,2DAA2D,CAAC;QACrE,KAAK,SAAS;YACZ,OAAO,2DAA2D,CAAC;QACrE,KAAK,WAAW;YACd,OAAO,oFAAoF,CAAC;QAC9F,KAAK,SAAS;YACZ,OAAO,qFAAqF,CAAC;QAC/F,KAAK,OAAO;YACV,OAAO,sDAAsD,CAAC;QAChE,KAAK,QAAQ;YACX,OAAO,6EAA6E,CAAC;QACvF,KAAK,SAAS;YACZ,OAAO,6EAA6E,CAAC;QACvF,KAAK,QAAQ;YACX,OAAO,yDAAyD,CAAC;QACnE,KAAK,SAAS;YACZ,OAAO,wBAAwB,IAAI,IAAI,YAAY,2BAA2B,CAAC;QACjF,KAAK,MAAM;YACT,OAAO,8BAA8B,IAAI,IAAI,YAAY,mCAAmC,CAAC;QAC/F;YACE,OAAO,qBAAqB,MAAM,IAAI,IAAI,uBAAuB,CAAC;IACtE,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAAC,QAAyB;IACpE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,iFAAiF,CAAC;IAC3F,CAAC;IAED,MAAM,KAAK,GAAa;QACtB,mCAAmC;QACnC,EAAE;QACF,WAAW,QAAQ,CAAC,MAAM,oBAAoB,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,cAAc;QAC5F,EAAE;QACF,2BAA2B;QAC3B,EAAE;KACH,CAAC;IAEF,2BAA2B;IAC3B,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IACxC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;QACxB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAChN,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAChD,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9C,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACjC,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACpC,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACnC,CAAC;QACD,oCAAoC;QACpC,IAAI,MAAM,KAAK,KAAK,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/B,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrB,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,aAAa,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC/E,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,2BAA2B;IAC3B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA2B,CAAC;IACpD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC9C,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACtC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,oBAAoB;IACpB,MAAM,UAAU,GAA6B;QAC3C,sBAAsB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,CAAC;QAC/F,aAAa,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,aAAa,CAAC;QACzD,sBAAsB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;QACvD,SAAS,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC;QAC7B,gBAAgB,EAAE,CAAC,IAAI,CAAC;QACxB,gBAAgB,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;QACzC,kBAAkB,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC;QACnD,eAAe,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC;QACpC,WAAW,EAAE,CAAC,OAAO,CAAC;KACvB,CAAC;IAEF,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7D,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAEpC,KAAK,CAAC,IAAI,CAAC,OAAO,QAAQ,EAAE,CAAC,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;YACnC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC;gBACvC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACf,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC1B,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBAC5B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACzB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACf,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;gBACpC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACrB,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;gBAClD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;IACH,CAAC;IAED,yBAAyB;IACzB,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/D,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5E,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;QAC7D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,QAAQ,sCAAsC,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;QACxF,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IACxC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,uIAAuI,CAAC,CAAC;IACpJ,KAAK,CAAC,IAAI,CAAC,sHAAsH,CAAC,CAAC;IACnI,KAAK,CAAC,IAAI,CAAC,gKAAgK,CAAC,CAAC;IAC7K,KAAK,CAAC,IAAI,CAAC,qKAAqK,CAAC,CAAC;IAClL,KAAK,CAAC,IAAI,CAAC,mJAAmJ,CAAC,CAAC;IAChK,KAAK,CAAC,IAAI,CAAC,iHAAiH,CAAC,CAAC;IAC9H,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}