maxsimcli 2.5.6 → 3.0.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.
Files changed (141) hide show
  1. package/README.md +4 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/adapters/base.d.ts +34 -0
  4. package/dist/adapters/base.d.ts.map +1 -0
  5. package/dist/adapters/base.js +116 -0
  6. package/dist/adapters/base.js.map +1 -0
  7. package/dist/adapters/claude.d.ts +21 -0
  8. package/dist/adapters/claude.d.ts.map +1 -0
  9. package/dist/adapters/claude.js +104 -0
  10. package/dist/adapters/claude.js.map +1 -0
  11. package/dist/adapters/codex.d.ts +19 -0
  12. package/dist/adapters/codex.d.ts.map +1 -0
  13. package/dist/adapters/codex.js +94 -0
  14. package/dist/adapters/codex.js.map +1 -0
  15. package/dist/adapters/gemini.d.ts +19 -0
  16. package/dist/adapters/gemini.d.ts.map +1 -0
  17. package/dist/adapters/gemini.js +96 -0
  18. package/dist/adapters/gemini.js.map +1 -0
  19. package/dist/adapters/index.d.ts +20 -0
  20. package/dist/adapters/index.d.ts.map +1 -0
  21. package/dist/adapters/index.js +56 -0
  22. package/dist/adapters/index.js.map +1 -0
  23. package/dist/adapters/opencode.d.ts +17 -0
  24. package/dist/adapters/opencode.d.ts.map +1 -0
  25. package/dist/adapters/opencode.js +111 -0
  26. package/dist/adapters/opencode.js.map +1 -0
  27. package/dist/adapters/transforms/content.d.ts +39 -0
  28. package/dist/adapters/transforms/content.d.ts.map +1 -0
  29. package/dist/adapters/transforms/content.js +125 -0
  30. package/dist/adapters/transforms/content.js.map +1 -0
  31. package/dist/adapters/transforms/frontmatter.d.ts +42 -0
  32. package/dist/adapters/transforms/frontmatter.d.ts.map +1 -0
  33. package/dist/adapters/transforms/frontmatter.js +204 -0
  34. package/dist/adapters/transforms/frontmatter.js.map +1 -0
  35. package/dist/adapters/transforms/tool-maps.d.ts +20 -0
  36. package/dist/adapters/transforms/tool-maps.d.ts.map +1 -0
  37. package/dist/adapters/transforms/tool-maps.js +64 -0
  38. package/dist/adapters/transforms/tool-maps.js.map +1 -0
  39. package/dist/adapters/types.d.ts +10 -0
  40. package/dist/adapters/types.d.ts.map +1 -0
  41. package/dist/adapters/types.js +6 -0
  42. package/dist/adapters/types.js.map +1 -0
  43. package/dist/assets/CHANGELOG.md +26 -0
  44. package/dist/assets/dashboard/client/assets/{index-DnL8rwuQ.js → index-1nmhAN7y.js} +2 -1
  45. package/dist/assets/dashboard/client/assets/index-DXau7xRM.css +32 -0
  46. package/dist/assets/dashboard/client/index.html +2 -2
  47. package/dist/assets/dashboard/server.js +27732 -12013
  48. package/dist/assets/hooks/maxsim-check-update.cjs +2 -2
  49. package/dist/assets/hooks/maxsim-check-update.cjs.map +1 -0
  50. package/dist/assets/hooks/maxsim-context-monitor.cjs +2 -2
  51. package/dist/assets/hooks/maxsim-context-monitor.cjs.map +1 -0
  52. package/dist/assets/hooks/maxsim-statusline.cjs +2 -2
  53. package/dist/assets/hooks/maxsim-statusline.cjs.map +1 -0
  54. package/dist/cli.cjs +15316 -5348
  55. package/dist/cli.cjs.map +1 -1
  56. package/dist/cli.d.ts +0 -6
  57. package/dist/cli.d.ts.map +1 -1
  58. package/dist/cli.js +282 -443
  59. package/dist/cli.js.map +1 -1
  60. package/dist/core/commands.d.ts +19 -0
  61. package/dist/core/commands.d.ts.map +1 -0
  62. package/dist/core/commands.js +560 -0
  63. package/dist/core/commands.js.map +1 -0
  64. package/dist/core/config.d.ts +9 -0
  65. package/dist/core/config.d.ts.map +1 -0
  66. package/dist/core/config.js +147 -0
  67. package/dist/core/config.js.map +1 -0
  68. package/dist/core/core.d.ts +39 -0
  69. package/dist/core/core.d.ts.map +1 -0
  70. package/dist/core/core.js +411 -0
  71. package/dist/core/core.js.map +1 -0
  72. package/dist/core/frontmatter.d.ts +33 -0
  73. package/dist/core/frontmatter.d.ts.map +1 -0
  74. package/dist/core/frontmatter.js +192 -0
  75. package/dist/core/frontmatter.js.map +1 -0
  76. package/dist/core/index.d.ts +20 -0
  77. package/dist/core/index.d.ts.map +1 -0
  78. package/dist/core/index.js +126 -0
  79. package/dist/core/index.js.map +1 -0
  80. package/dist/core/init.d.ts +252 -0
  81. package/dist/core/init.d.ts.map +1 -0
  82. package/dist/core/init.js +578 -0
  83. package/dist/core/init.js.map +1 -0
  84. package/dist/core/milestone.d.ts +9 -0
  85. package/dist/core/milestone.d.ts.map +1 -0
  86. package/dist/core/milestone.js +191 -0
  87. package/dist/core/milestone.js.map +1 -0
  88. package/dist/core/phase.d.ts +17 -0
  89. package/dist/core/phase.d.ts.map +1 -0
  90. package/dist/core/phase.js +610 -0
  91. package/dist/core/phase.js.map +1 -0
  92. package/dist/core/roadmap.d.ts +9 -0
  93. package/dist/core/roadmap.d.ts.map +1 -0
  94. package/dist/core/roadmap.js +228 -0
  95. package/dist/core/roadmap.js.map +1 -0
  96. package/dist/core/state.d.ts +21 -0
  97. package/dist/core/state.d.ts.map +1 -0
  98. package/dist/core/state.js +507 -0
  99. package/dist/core/state.js.map +1 -0
  100. package/dist/core/template.d.ts +30 -0
  101. package/dist/core/template.d.ts.map +1 -0
  102. package/dist/core/template.js +225 -0
  103. package/dist/core/template.js.map +1 -0
  104. package/dist/core/types.d.ts +374 -0
  105. package/dist/core/types.d.ts.map +1 -0
  106. package/dist/core/types.js +53 -0
  107. package/dist/core/types.js.map +1 -0
  108. package/dist/core/verify.d.ts +127 -0
  109. package/dist/core/verify.d.ts.map +1 -0
  110. package/dist/core/verify.js +783 -0
  111. package/dist/core/verify.js.map +1 -0
  112. package/dist/hooks/index.d.ts +11 -0
  113. package/dist/hooks/index.d.ts.map +1 -0
  114. package/dist/hooks/index.js +18 -0
  115. package/dist/hooks/index.js.map +1 -0
  116. package/dist/hooks/maxsim-check-update.d.ts +17 -0
  117. package/dist/hooks/maxsim-check-update.d.ts.map +1 -0
  118. package/dist/hooks/maxsim-check-update.js +101 -0
  119. package/dist/hooks/maxsim-check-update.js.map +1 -0
  120. package/dist/hooks/maxsim-context-monitor.d.ts +21 -0
  121. package/dist/hooks/maxsim-context-monitor.d.ts.map +1 -0
  122. package/dist/hooks/maxsim-context-monitor.js +131 -0
  123. package/dist/hooks/maxsim-context-monitor.js.map +1 -0
  124. package/dist/hooks/maxsim-statusline.d.ts +19 -0
  125. package/dist/hooks/maxsim-statusline.d.ts.map +1 -0
  126. package/dist/hooks/maxsim-statusline.js +146 -0
  127. package/dist/hooks/maxsim-statusline.js.map +1 -0
  128. package/dist/hooks/shared.d.ts +11 -0
  129. package/dist/hooks/shared.d.ts.map +1 -0
  130. package/dist/hooks/shared.js +29 -0
  131. package/dist/hooks/shared.js.map +1 -0
  132. package/dist/install.cjs +2807 -1211
  133. package/dist/install.cjs.map +1 -1
  134. package/dist/install.js +34 -85
  135. package/dist/install.js.map +1 -1
  136. package/package.json +10 -7
  137. package/dist/assets/dashboard/client/assets/index-SwFemGUT.css +0 -32
  138. package/dist/assets/hooks/index.cjs +0 -239
  139. package/dist/assets/templates/CLAUDE.md +0 -22
  140. package/dist/assets/templates/package.json +0 -5
  141. package/dist/assets/templates/project.json +0 -5
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+ /**
3
+ * Config — Planning config CRUD operations
4
+ *
5
+ * Ported from maxsim/bin/lib/config.cjs
6
+ */
7
+ var __importDefault = (this && this.__importDefault) || function (mod) {
8
+ return (mod && mod.__esModule) ? mod : { "default": mod };
9
+ };
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.cmdConfigEnsureSection = cmdConfigEnsureSection;
12
+ exports.cmdConfigSet = cmdConfigSet;
13
+ exports.cmdConfigGet = cmdConfigGet;
14
+ const node_fs_1 = __importDefault(require("node:fs"));
15
+ const node_path_1 = __importDefault(require("node:path"));
16
+ const node_os_1 = __importDefault(require("node:os"));
17
+ const core_js_1 = require("./core.js");
18
+ const types_js_1 = require("./types.js");
19
+ // ─── Config CRUD commands ───────────────────────────────────────────────────
20
+ function cmdConfigEnsureSection(cwd, raw) {
21
+ const configPath = node_path_1.default.join(cwd, '.planning', 'config.json');
22
+ const planningDir = node_path_1.default.join(cwd, '.planning');
23
+ try {
24
+ if (!node_fs_1.default.existsSync(planningDir)) {
25
+ node_fs_1.default.mkdirSync(planningDir, { recursive: true });
26
+ }
27
+ }
28
+ catch (err) {
29
+ (0, core_js_1.error)('Failed to create .planning directory: ' + err.message);
30
+ }
31
+ if (node_fs_1.default.existsSync(configPath)) {
32
+ const result = { created: false, reason: 'already_exists' };
33
+ (0, core_js_1.output)(result, raw, 'exists');
34
+ return;
35
+ }
36
+ // Detect Brave Search API key availability
37
+ const homedir = node_os_1.default.homedir();
38
+ const braveKeyFile = node_path_1.default.join(homedir, '.maxsim', 'brave_api_key');
39
+ const hasBraveSearch = !!(process.env.BRAVE_API_KEY || node_fs_1.default.existsSync(braveKeyFile));
40
+ // Load user-level defaults from ~/.maxsim/defaults.json if available
41
+ const globalDefaultsPath = node_path_1.default.join(homedir, '.maxsim', 'defaults.json');
42
+ let userDefaults = {};
43
+ try {
44
+ if (node_fs_1.default.existsSync(globalDefaultsPath)) {
45
+ userDefaults = JSON.parse(node_fs_1.default.readFileSync(globalDefaultsPath, 'utf-8'));
46
+ }
47
+ }
48
+ catch {
49
+ // Ignore malformed global defaults, fall back to hardcoded
50
+ }
51
+ const hardcoded = {
52
+ ...types_js_1.PLANNING_CONFIG_DEFAULTS,
53
+ brave_search: hasBraveSearch,
54
+ };
55
+ const defaults = {
56
+ ...hardcoded,
57
+ ...userDefaults,
58
+ workflow: {
59
+ ...hardcoded.workflow,
60
+ ...(userDefaults.workflow || {}),
61
+ },
62
+ };
63
+ try {
64
+ node_fs_1.default.writeFileSync(configPath, JSON.stringify(defaults, null, 2), 'utf-8');
65
+ const result = { created: true, path: '.planning/config.json' };
66
+ (0, core_js_1.output)(result, raw, 'created');
67
+ }
68
+ catch (err) {
69
+ (0, core_js_1.error)('Failed to create config.json: ' + err.message);
70
+ }
71
+ }
72
+ function cmdConfigSet(cwd, keyPath, value, raw) {
73
+ const configPath = node_path_1.default.join(cwd, '.planning', 'config.json');
74
+ if (!keyPath) {
75
+ (0, core_js_1.error)('Usage: config-set <key.path> <value>');
76
+ }
77
+ // Parse value (handle booleans and numbers)
78
+ let parsedValue = value;
79
+ if (value === 'true')
80
+ parsedValue = true;
81
+ else if (value === 'false')
82
+ parsedValue = false;
83
+ else if (value !== undefined && !isNaN(Number(value)) && value !== '')
84
+ parsedValue = Number(value);
85
+ // Load existing config or start with empty object
86
+ let config = {};
87
+ try {
88
+ if (node_fs_1.default.existsSync(configPath)) {
89
+ config = JSON.parse(node_fs_1.default.readFileSync(configPath, 'utf-8'));
90
+ }
91
+ }
92
+ catch (err) {
93
+ (0, core_js_1.error)('Failed to read config.json: ' + err.message);
94
+ }
95
+ // Set nested value using dot notation
96
+ const keys = keyPath.split('.');
97
+ let current = config;
98
+ for (let i = 0; i < keys.length - 1; i++) {
99
+ const key = keys[i];
100
+ if (current[key] === undefined || typeof current[key] !== 'object') {
101
+ current[key] = {};
102
+ }
103
+ current = current[key];
104
+ }
105
+ current[keys[keys.length - 1]] = parsedValue;
106
+ try {
107
+ node_fs_1.default.writeFileSync(configPath, JSON.stringify(config, null, 2), 'utf-8');
108
+ const result = { updated: true, key: keyPath, value: parsedValue };
109
+ (0, core_js_1.output)(result, raw, `${keyPath}=${parsedValue}`);
110
+ }
111
+ catch (err) {
112
+ (0, core_js_1.error)('Failed to write config.json: ' + err.message);
113
+ }
114
+ }
115
+ function cmdConfigGet(cwd, keyPath, raw) {
116
+ const configPath = node_path_1.default.join(cwd, '.planning', 'config.json');
117
+ if (!keyPath) {
118
+ (0, core_js_1.error)('Usage: config-get <key.path>');
119
+ }
120
+ let config = {};
121
+ try {
122
+ if (node_fs_1.default.existsSync(configPath)) {
123
+ config = JSON.parse(node_fs_1.default.readFileSync(configPath, 'utf-8'));
124
+ }
125
+ else {
126
+ (0, core_js_1.error)('No config.json found at ' + configPath);
127
+ }
128
+ }
129
+ catch (err) {
130
+ if (err.message.startsWith('No config.json'))
131
+ throw err;
132
+ (0, core_js_1.error)('Failed to read config.json: ' + err.message);
133
+ }
134
+ const keys = keyPath.split('.');
135
+ let current = config;
136
+ for (const key of keys) {
137
+ if (current === undefined || current === null || typeof current !== 'object') {
138
+ (0, core_js_1.error)(`Key not found: ${keyPath}`);
139
+ }
140
+ current = current[key];
141
+ }
142
+ if (current === undefined) {
143
+ (0, core_js_1.error)(`Key not found: ${keyPath}`);
144
+ }
145
+ (0, core_js_1.output)(current, raw, String(current));
146
+ }
147
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Core — Shared utilities, constants, and internal helpers
3
+ *
4
+ * Ported from maxsim/bin/lib/core.cjs
5
+ */
6
+ import type { ModelProfiles, ModelResolution, AgentType, PhaseSearchResult, RoadmapPhaseInfo, ArchivedPhaseDir, GitResult, MilestoneInfo, AppConfig } from './types.js';
7
+ export declare const MODEL_PROFILES: ModelProfiles;
8
+ export declare function output(result: unknown, raw?: boolean, rawValue?: unknown): never;
9
+ export declare function error(message: string): never;
10
+ export declare function safeReadFile(filePath: string): string | null;
11
+ export declare function loadConfig(cwd: string): AppConfig;
12
+ export declare function isGitIgnored(cwd: string, targetPath: string): Promise<boolean>;
13
+ export declare function execGit(cwd: string, args: string[]): Promise<GitResult>;
14
+ export declare function normalizePhaseName(phase: string): string;
15
+ export declare function comparePhaseNum(a: string | number, b: string | number): number;
16
+ /**
17
+ * Returns the canonical regex for matching Phase heading lines in ROADMAP.md.
18
+ *
19
+ * General form (no escapedPhaseNum):
20
+ * Matches: ## Phase 03: Name Here
21
+ * Group 1: phase number string (e.g. "03", "3A", "2.1")
22
+ * Group 2: phase name string (e.g. "Name Here")
23
+ *
24
+ * Specific form (with escapedPhaseNum):
25
+ * Matches: ## Phase 03: Name Here
26
+ * Group 1: phase name string only
27
+ *
28
+ * @param escapedPhaseNum - regex-escaped phase number string to match a specific phase
29
+ * @param flags - regex flags (default: 'gi')
30
+ */
31
+ export declare function getPhasePattern(escapedPhaseNum?: string, flags?: string): RegExp;
32
+ export declare function findPhaseInternal(cwd: string, phase: string): PhaseSearchResult | null;
33
+ export declare function getArchivedPhaseDirs(cwd: string): ArchivedPhaseDir[];
34
+ export declare function getRoadmapPhaseInternal(cwd: string, phaseNum: string | number): RoadmapPhaseInfo | null;
35
+ export declare function resolveModelInternal(cwd: string, agentType: AgentType): ModelResolution;
36
+ export declare function pathExistsInternal(cwd: string, targetPath: string): boolean;
37
+ export declare function generateSlugInternal(text: string | null | undefined): string | null;
38
+ export declare function getMilestoneInfo(cwd: string): MilestoneInfo;
39
+ //# sourceMappingURL=core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/core/core.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,KAAK,EACV,aAAa,EAEb,eAAe,EACf,SAAS,EACT,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,SAAS,EACV,MAAM,YAAY,CAAC;AAIpB,eAAO,MAAM,cAAc,EAAE,aAY5B,CAAC;AAOF,wBAAgB,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,KAAK,CAchF;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAG5C;AAID,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAM5D;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAyDjD;AAID,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQpF;AAED,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAe7E;AAID,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOxD;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAgB9E;AAID;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,KAAK,SAAO,GAAG,MAAM,CAW9E;AA+CD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAsCtF;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAqCpE;AAID,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAgCvG;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,eAAe,CAavF;AAID,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAQ3E;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAGnF;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAY3D"}
@@ -0,0 +1,411 @@
1
+ "use strict";
2
+ /**
3
+ * Core — Shared utilities, constants, and internal helpers
4
+ *
5
+ * Ported from maxsim/bin/lib/core.cjs
6
+ */
7
+ var __importDefault = (this && this.__importDefault) || function (mod) {
8
+ return (mod && mod.__esModule) ? mod : { "default": mod };
9
+ };
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.MODEL_PROFILES = void 0;
12
+ exports.output = output;
13
+ exports.error = error;
14
+ exports.safeReadFile = safeReadFile;
15
+ exports.loadConfig = loadConfig;
16
+ exports.isGitIgnored = isGitIgnored;
17
+ exports.execGit = execGit;
18
+ exports.normalizePhaseName = normalizePhaseName;
19
+ exports.comparePhaseNum = comparePhaseNum;
20
+ exports.getPhasePattern = getPhasePattern;
21
+ exports.findPhaseInternal = findPhaseInternal;
22
+ exports.getArchivedPhaseDirs = getArchivedPhaseDirs;
23
+ exports.getRoadmapPhaseInternal = getRoadmapPhaseInternal;
24
+ exports.resolveModelInternal = resolveModelInternal;
25
+ exports.pathExistsInternal = pathExistsInternal;
26
+ exports.generateSlugInternal = generateSlugInternal;
27
+ exports.getMilestoneInfo = getMilestoneInfo;
28
+ const node_fs_1 = __importDefault(require("node:fs"));
29
+ const node_path_1 = __importDefault(require("node:path"));
30
+ const node_os_1 = __importDefault(require("node:os"));
31
+ const simple_git_1 = require("simple-git");
32
+ // ─── Model Profile Table ─────────────────────────────────────────────────────
33
+ exports.MODEL_PROFILES = {
34
+ 'maxsim-planner': { quality: 'opus', balanced: 'opus', budget: 'sonnet', tokenburner: 'opus' },
35
+ 'maxsim-roadmapper': { quality: 'opus', balanced: 'sonnet', budget: 'sonnet', tokenburner: 'opus' },
36
+ 'maxsim-executor': { quality: 'opus', balanced: 'sonnet', budget: 'sonnet', tokenburner: 'opus' },
37
+ 'maxsim-phase-researcher': { quality: 'opus', balanced: 'sonnet', budget: 'haiku', tokenburner: 'opus' },
38
+ 'maxsim-project-researcher': { quality: 'opus', balanced: 'sonnet', budget: 'haiku', tokenburner: 'opus' },
39
+ 'maxsim-research-synthesizer': { quality: 'sonnet', balanced: 'sonnet', budget: 'haiku', tokenburner: 'opus' },
40
+ 'maxsim-debugger': { quality: 'opus', balanced: 'sonnet', budget: 'sonnet', tokenburner: 'opus' },
41
+ 'maxsim-codebase-mapper': { quality: 'sonnet', balanced: 'haiku', budget: 'haiku', tokenburner: 'opus' },
42
+ 'maxsim-verifier': { quality: 'sonnet', balanced: 'sonnet', budget: 'haiku', tokenburner: 'opus' },
43
+ 'maxsim-plan-checker': { quality: 'sonnet', balanced: 'sonnet', budget: 'haiku', tokenburner: 'opus' },
44
+ 'maxsim-integration-checker': { quality: 'sonnet', balanced: 'sonnet', budget: 'haiku', tokenburner: 'opus' },
45
+ };
46
+ // ─── Output helpers ──────────────────────────────────────────────────────────
47
+ // DEPRECATION: output() and error() call process.exit() and belong in the CLI
48
+ // layer. They are kept here for backward compatibility during the port. Future
49
+ // plans should move these to @maxsim/cli.
50
+ function output(result, raw, rawValue) {
51
+ if (raw && rawValue !== undefined) {
52
+ process.stdout.write(String(rawValue));
53
+ }
54
+ else {
55
+ const json = JSON.stringify(result, null, 2);
56
+ if (json.length > 50000) {
57
+ const tmpPath = node_path_1.default.join(node_os_1.default.tmpdir(), `maxsim-${Date.now()}.json`);
58
+ node_fs_1.default.writeFileSync(tmpPath, json, 'utf-8');
59
+ process.stdout.write('@file:' + tmpPath);
60
+ }
61
+ else {
62
+ process.stdout.write(json);
63
+ }
64
+ }
65
+ process.exit(0);
66
+ }
67
+ function error(message) {
68
+ process.stderr.write('Error: ' + message + '\n');
69
+ process.exit(1);
70
+ }
71
+ // ─── File & Config utilities ─────────────────────────────────────────────────
72
+ function safeReadFile(filePath) {
73
+ try {
74
+ return node_fs_1.default.readFileSync(filePath, 'utf-8');
75
+ }
76
+ catch {
77
+ return null;
78
+ }
79
+ }
80
+ function loadConfig(cwd) {
81
+ const configPath = node_path_1.default.join(cwd, '.planning', 'config.json');
82
+ const defaults = {
83
+ model_profile: 'balanced',
84
+ commit_docs: true,
85
+ search_gitignored: false,
86
+ branching_strategy: 'none',
87
+ phase_branch_template: 'maxsim/phase-{phase}-{slug}',
88
+ milestone_branch_template: 'maxsim/{milestone}-{slug}',
89
+ research: true,
90
+ plan_checker: true,
91
+ verifier: true,
92
+ parallelization: true,
93
+ brave_search: false,
94
+ };
95
+ try {
96
+ const raw = node_fs_1.default.readFileSync(configPath, 'utf-8');
97
+ const parsed = JSON.parse(raw);
98
+ const get = (key, nested) => {
99
+ if (parsed[key] !== undefined)
100
+ return parsed[key];
101
+ if (nested) {
102
+ const section = parsed[nested.section];
103
+ if (section && typeof section === 'object' && section !== null && nested.field in section) {
104
+ return section[nested.field];
105
+ }
106
+ }
107
+ return undefined;
108
+ };
109
+ const parallelization = (() => {
110
+ const val = get('parallelization');
111
+ if (typeof val === 'boolean')
112
+ return val;
113
+ if (typeof val === 'object' && val !== null && 'enabled' in val) {
114
+ return val.enabled;
115
+ }
116
+ return defaults.parallelization;
117
+ })();
118
+ return {
119
+ model_profile: get('model_profile') ?? defaults.model_profile,
120
+ commit_docs: get('commit_docs', { section: 'planning', field: 'commit_docs' }) ?? defaults.commit_docs,
121
+ search_gitignored: get('search_gitignored', { section: 'planning', field: 'search_gitignored' }) ?? defaults.search_gitignored,
122
+ branching_strategy: get('branching_strategy', { section: 'git', field: 'branching_strategy' }) ?? defaults.branching_strategy,
123
+ phase_branch_template: get('phase_branch_template', { section: 'git', field: 'phase_branch_template' }) ?? defaults.phase_branch_template,
124
+ milestone_branch_template: get('milestone_branch_template', { section: 'git', field: 'milestone_branch_template' }) ?? defaults.milestone_branch_template,
125
+ research: get('research', { section: 'workflow', field: 'research' }) ?? defaults.research,
126
+ plan_checker: get('plan_checker', { section: 'workflow', field: 'plan_check' }) ?? defaults.plan_checker,
127
+ verifier: get('verifier', { section: 'workflow', field: 'verifier' }) ?? defaults.verifier,
128
+ parallelization,
129
+ brave_search: get('brave_search') ?? defaults.brave_search,
130
+ model_overrides: parsed['model_overrides'],
131
+ };
132
+ }
133
+ catch {
134
+ return defaults;
135
+ }
136
+ }
137
+ // ─── Git utilities ───────────────────────────────────────────────────────────
138
+ async function isGitIgnored(cwd, targetPath) {
139
+ try {
140
+ const git = (0, simple_git_1.simpleGit)(cwd);
141
+ const result = await git.checkIgnore(targetPath);
142
+ return result.length > 0;
143
+ }
144
+ catch {
145
+ return false;
146
+ }
147
+ }
148
+ async function execGit(cwd, args) {
149
+ try {
150
+ const git = (0, simple_git_1.simpleGit)(cwd);
151
+ const stdout = await git.raw(args);
152
+ return { exitCode: 0, stdout: (stdout ?? '').trim(), stderr: '' };
153
+ }
154
+ catch (thrown) {
155
+ const err = thrown;
156
+ // simple-git throws on non-zero exit — extract what we can
157
+ const message = err.message ?? '';
158
+ return {
159
+ exitCode: 1,
160
+ stdout: '',
161
+ stderr: message,
162
+ };
163
+ }
164
+ }
165
+ // ─── Phase utilities ─────────────────────────────────────────────────────────
166
+ function normalizePhaseName(phase) {
167
+ const match = phase.match(/^(\d+)([A-Z])?(\.\d+)?/i);
168
+ if (!match)
169
+ return phase;
170
+ const padded = match[1].padStart(2, '0');
171
+ const letter = match[2] ? match[2].toUpperCase() : '';
172
+ const decimal = match[3] || '';
173
+ return padded + letter + decimal;
174
+ }
175
+ function comparePhaseNum(a, b) {
176
+ const pa = String(a).match(/^(\d+)([A-Z])?(\.\d+)?/i);
177
+ const pb = String(b).match(/^(\d+)([A-Z])?(\.\d+)?/i);
178
+ if (!pa || !pb)
179
+ return String(a).localeCompare(String(b));
180
+ const intDiff = parseInt(pa[1], 10) - parseInt(pb[1], 10);
181
+ if (intDiff !== 0)
182
+ return intDiff;
183
+ const la = (pa[2] || '').toUpperCase();
184
+ const lb = (pb[2] || '').toUpperCase();
185
+ if (la !== lb) {
186
+ if (!la)
187
+ return -1;
188
+ if (!lb)
189
+ return 1;
190
+ return la < lb ? -1 : 1;
191
+ }
192
+ const da = pa[3] ? parseFloat(pa[3]) : -1;
193
+ const db = pb[3] ? parseFloat(pb[3]) : -1;
194
+ return da - db;
195
+ }
196
+ // ─── Phase regex helper ──────────────────────────────────────────────────────
197
+ /**
198
+ * Returns the canonical regex for matching Phase heading lines in ROADMAP.md.
199
+ *
200
+ * General form (no escapedPhaseNum):
201
+ * Matches: ## Phase 03: Name Here
202
+ * Group 1: phase number string (e.g. "03", "3A", "2.1")
203
+ * Group 2: phase name string (e.g. "Name Here")
204
+ *
205
+ * Specific form (with escapedPhaseNum):
206
+ * Matches: ## Phase 03: Name Here
207
+ * Group 1: phase name string only
208
+ *
209
+ * @param escapedPhaseNum - regex-escaped phase number string to match a specific phase
210
+ * @param flags - regex flags (default: 'gi')
211
+ */
212
+ function getPhasePattern(escapedPhaseNum, flags = 'gi') {
213
+ if (escapedPhaseNum) {
214
+ return new RegExp(`#{2,4}\\s*Phase\\s+${escapedPhaseNum}:\\s*([^\\n]+)`, flags);
215
+ }
216
+ return new RegExp(`#{2,4}\\s*Phase\\s+(\\d+[A-Z]?(?:\\.\\d+)?)\\s*:\\s*([^\\n]+)`, flags);
217
+ }
218
+ function searchPhaseInDir(baseDir, relBase, normalized) {
219
+ try {
220
+ const entries = node_fs_1.default.readdirSync(baseDir, { withFileTypes: true });
221
+ const dirs = entries.filter(e => e.isDirectory()).map(e => e.name).sort((a, b) => comparePhaseNum(a, b));
222
+ const match = dirs.find(d => d.startsWith(normalized));
223
+ if (!match)
224
+ return null;
225
+ const dirMatch = match.match(/^(\d+[A-Z]?(?:\.\d+)?)-?(.*)/i);
226
+ const phaseNumber = dirMatch ? dirMatch[1] : normalized;
227
+ const phaseName = dirMatch && dirMatch[2] ? dirMatch[2] : null;
228
+ const phaseDir = node_path_1.default.join(baseDir, match);
229
+ const phaseFiles = node_fs_1.default.readdirSync(phaseDir);
230
+ const plans = phaseFiles.filter(f => f.endsWith('-PLAN.md') || f === 'PLAN.md').sort();
231
+ const summaries = phaseFiles.filter(f => f.endsWith('-SUMMARY.md') || f === 'SUMMARY.md').sort();
232
+ const hasResearch = phaseFiles.some(f => f.endsWith('-RESEARCH.md') || f === 'RESEARCH.md');
233
+ const hasContext = phaseFiles.some(f => f.endsWith('-CONTEXT.md') || f === 'CONTEXT.md');
234
+ const hasVerification = phaseFiles.some(f => f.endsWith('-VERIFICATION.md') || f === 'VERIFICATION.md');
235
+ const completedPlanIds = new Set(summaries.map(s => s.replace('-SUMMARY.md', '').replace('SUMMARY.md', '')));
236
+ const incompletePlans = plans.filter(p => {
237
+ const planId = p.replace('-PLAN.md', '').replace('PLAN.md', '');
238
+ return !completedPlanIds.has(planId);
239
+ });
240
+ return {
241
+ found: true,
242
+ directory: node_path_1.default.join(relBase, match),
243
+ phase_number: phaseNumber,
244
+ phase_name: phaseName,
245
+ phase_slug: phaseName ? phaseName.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '') : null,
246
+ plans,
247
+ summaries,
248
+ incomplete_plans: incompletePlans,
249
+ has_research: hasResearch,
250
+ has_context: hasContext,
251
+ has_verification: hasVerification,
252
+ };
253
+ }
254
+ catch {
255
+ return null;
256
+ }
257
+ }
258
+ function findPhaseInternal(cwd, phase) {
259
+ if (!phase)
260
+ return null;
261
+ const phasesDir = node_path_1.default.join(cwd, '.planning', 'phases');
262
+ const normalized = normalizePhaseName(phase);
263
+ const current = searchPhaseInDir(phasesDir, node_path_1.default.join('.planning', 'phases'), normalized);
264
+ if (current)
265
+ return current;
266
+ const milestonesDir = node_path_1.default.join(cwd, '.planning', 'milestones');
267
+ if (!node_fs_1.default.existsSync(milestonesDir))
268
+ return null;
269
+ try {
270
+ const milestoneEntries = node_fs_1.default.readdirSync(milestonesDir, { withFileTypes: true });
271
+ const archiveDirs = milestoneEntries
272
+ .filter(e => e.isDirectory() && /^v[\d.]+-phases$/.test(e.name))
273
+ .map(e => e.name)
274
+ .sort()
275
+ .reverse();
276
+ for (const archiveName of archiveDirs) {
277
+ const versionMatch = archiveName.match(/^(v[\d.]+)-phases$/);
278
+ if (!versionMatch)
279
+ continue;
280
+ const version = versionMatch[1];
281
+ const archivePath = node_path_1.default.join(milestonesDir, archiveName);
282
+ const relBase = node_path_1.default.join('.planning', 'milestones', archiveName);
283
+ const result = searchPhaseInDir(archivePath, relBase, normalized);
284
+ if (result) {
285
+ result.archived = version;
286
+ return result;
287
+ }
288
+ }
289
+ }
290
+ catch (e) {
291
+ /* optional op, ignore */
292
+ if (process.env.MAXSIM_DEBUG)
293
+ console.error(e);
294
+ }
295
+ return null;
296
+ }
297
+ function getArchivedPhaseDirs(cwd) {
298
+ const milestonesDir = node_path_1.default.join(cwd, '.planning', 'milestones');
299
+ const results = [];
300
+ if (!node_fs_1.default.existsSync(milestonesDir))
301
+ return results;
302
+ try {
303
+ const milestoneEntries = node_fs_1.default.readdirSync(milestonesDir, { withFileTypes: true });
304
+ const phaseDirs = milestoneEntries
305
+ .filter(e => e.isDirectory() && /^v[\d.]+-phases$/.test(e.name))
306
+ .map(e => e.name)
307
+ .sort()
308
+ .reverse();
309
+ for (const archiveName of phaseDirs) {
310
+ const versionMatch = archiveName.match(/^(v[\d.]+)-phases$/);
311
+ if (!versionMatch)
312
+ continue;
313
+ const version = versionMatch[1];
314
+ const archivePath = node_path_1.default.join(milestonesDir, archiveName);
315
+ const entries = node_fs_1.default.readdirSync(archivePath, { withFileTypes: true });
316
+ const dirs = entries.filter(e => e.isDirectory()).map(e => e.name).sort((a, b) => comparePhaseNum(a, b));
317
+ for (const dir of dirs) {
318
+ results.push({
319
+ name: dir,
320
+ milestone: version,
321
+ basePath: node_path_1.default.join('.planning', 'milestones', archiveName),
322
+ fullPath: node_path_1.default.join(archivePath, dir),
323
+ });
324
+ }
325
+ }
326
+ }
327
+ catch (e) {
328
+ /* optional op, ignore */
329
+ if (process.env.MAXSIM_DEBUG)
330
+ console.error(e);
331
+ }
332
+ return results;
333
+ }
334
+ // ─── Roadmap & model utilities ───────────────────────────────────────────────
335
+ function getRoadmapPhaseInternal(cwd, phaseNum) {
336
+ if (!phaseNum)
337
+ return null;
338
+ const roadmapPath = node_path_1.default.join(cwd, '.planning', 'ROADMAP.md');
339
+ if (!node_fs_1.default.existsSync(roadmapPath))
340
+ return null;
341
+ try {
342
+ const content = node_fs_1.default.readFileSync(roadmapPath, 'utf-8');
343
+ const escapedPhase = phaseNum.toString().replace(/\./g, '\\.');
344
+ const phasePattern = getPhasePattern(escapedPhase, 'i');
345
+ const headerMatch = content.match(phasePattern);
346
+ if (!headerMatch)
347
+ return null;
348
+ const phaseName = headerMatch[1].trim();
349
+ const headerIndex = headerMatch.index;
350
+ const restOfContent = content.slice(headerIndex);
351
+ const nextHeaderMatch = restOfContent.match(/\n#{2,4}\s+Phase\s+\d/i);
352
+ const sectionEnd = nextHeaderMatch ? headerIndex + nextHeaderMatch.index : content.length;
353
+ const section = content.slice(headerIndex, sectionEnd).trim();
354
+ const goalMatch = section.match(/\*\*Goal:\*\*\s*([^\n]+)/i);
355
+ const goal = goalMatch ? goalMatch[1].trim() : null;
356
+ return {
357
+ found: true,
358
+ phase_number: phaseNum.toString(),
359
+ phase_name: phaseName,
360
+ goal,
361
+ section,
362
+ };
363
+ }
364
+ catch {
365
+ return null;
366
+ }
367
+ }
368
+ function resolveModelInternal(cwd, agentType) {
369
+ const config = loadConfig(cwd);
370
+ const override = config.model_overrides?.[agentType];
371
+ if (override) {
372
+ return override === 'opus' ? 'inherit' : override;
373
+ }
374
+ const profile = config.model_profile || 'balanced';
375
+ const agentModels = exports.MODEL_PROFILES[agentType];
376
+ if (!agentModels)
377
+ return 'sonnet';
378
+ const resolved = agentModels[profile] || agentModels['balanced'] || 'sonnet';
379
+ return resolved === 'opus' ? 'inherit' : resolved;
380
+ }
381
+ // ─── Misc utilities ──────────────────────────────────────────────────────────
382
+ function pathExistsInternal(cwd, targetPath) {
383
+ const fullPath = node_path_1.default.isAbsolute(targetPath) ? targetPath : node_path_1.default.join(cwd, targetPath);
384
+ try {
385
+ node_fs_1.default.statSync(fullPath);
386
+ return true;
387
+ }
388
+ catch {
389
+ return false;
390
+ }
391
+ }
392
+ function generateSlugInternal(text) {
393
+ if (!text)
394
+ return null;
395
+ return text.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '');
396
+ }
397
+ function getMilestoneInfo(cwd) {
398
+ try {
399
+ const roadmap = node_fs_1.default.readFileSync(node_path_1.default.join(cwd, '.planning', 'ROADMAP.md'), 'utf-8');
400
+ const versionMatch = roadmap.match(/v(\d+\.\d+)/);
401
+ const nameMatch = roadmap.match(/## .*v\d+\.\d+[:\s]+([^\n(]+)/);
402
+ return {
403
+ version: versionMatch ? versionMatch[0] : 'v1.0',
404
+ name: nameMatch ? nameMatch[1].trim() : 'milestone',
405
+ };
406
+ }
407
+ catch {
408
+ return { version: 'v1.0', name: 'milestone' };
409
+ }
410
+ }
411
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/core/core.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;AAyCH,wBAcC;AAED,sBAGC;AAID,oCAMC;AAED,gCAyDC;AAID,oCAQC;AAED,0BAeC;AAID,gDAOC;AAED,0CAgBC;AAmBD,0CAWC;AA+CD,8CAsCC;AAED,oDAqCC;AAID,0DAgCC;AAED,oDAaC;AAID,gDAQC;AAED,oDAGC;AAED,4CAYC;AAraD,sDAAyB;AACzB,0DAA6B;AAC7B,sDAAyB;AACzB,2CAAuC;AAevC,gFAAgF;AAEnE,QAAA,cAAc,GAAkB;IAC3C,gBAAgB,EAAe,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAI,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE;IAC7G,mBAAmB,EAAY,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE;IAC7G,iBAAiB,EAAc,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE;IAC7G,yBAAyB,EAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAG,WAAW,EAAE,MAAM,EAAE;IAC7G,2BAA2B,EAAI,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAG,WAAW,EAAE,MAAM,EAAE;IAC7G,6BAA6B,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE;IAC9G,iBAAiB,EAAc,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE;IAC7G,wBAAwB,EAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE;IAC7G,iBAAiB,EAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE;IAC9G,qBAAqB,EAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE;IAC9G,4BAA4B,EAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE;CAC/G,CAAC;AAEF,gFAAgF;AAChF,8EAA8E;AAC9E,+EAA+E;AAC/E,0CAA0C;AAE1C,SAAgB,MAAM,CAAC,MAAe,EAAE,GAAa,EAAE,QAAkB;IACvE,IAAI,GAAG,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IACzC,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC7C,IAAI,IAAI,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,mBAAI,CAAC,IAAI,CAAC,iBAAE,CAAC,MAAM,EAAE,EAAE,UAAU,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACpE,iBAAE,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;YACzC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,SAAgB,KAAK,CAAC,OAAe;IACnC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;IACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,gFAAgF;AAEhF,SAAgB,YAAY,CAAC,QAAgB;IAC3C,IAAI,CAAC;QACH,OAAO,iBAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAgB,UAAU,CAAC,GAAW;IACpC,MAAM,UAAU,GAAG,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAc;QAC1B,aAAa,EAAE,UAAU;QACzB,WAAW,EAAE,IAAI;QACjB,iBAAiB,EAAE,KAAK;QACxB,kBAAkB,EAAE,MAAM;QAC1B,qBAAqB,EAAE,6BAA6B;QACpD,yBAAyB,EAAE,2BAA2B;QACtD,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,IAAI;QAClB,QAAQ,EAAE,IAAI;QACd,eAAe,EAAE,IAAI;QACrB,YAAY,EAAE,KAAK;KACpB,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,iBAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,MAAM,GAA4B,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;QAEnF,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,MAA2C,EAAW,EAAE;YAChF,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS;gBAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;YAClD,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBACvC,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,IAAI,OAAO,EAAE,CAAC;oBAC1F,OAAQ,OAAmC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC5D,CAAC;YACH,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC;QAEF,MAAM,eAAe,GAAG,CAAC,GAAY,EAAE;YACrC,MAAM,GAAG,GAAG,GAAG,CAAC,iBAAiB,CAAC,CAAC;YACnC,IAAI,OAAO,GAAG,KAAK,SAAS;gBAAE,OAAO,GAAG,CAAC;YACzC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,SAAS,IAAI,GAAG,EAAE,CAAC;gBAChE,OAAQ,GAA4B,CAAC,OAAO,CAAC;YAC/C,CAAC;YACD,OAAO,QAAQ,CAAC,eAAe,CAAC;QAClC,CAAC,CAAC,EAAE,CAAC;QAEL,OAAO;YACL,aAAa,EAAG,GAAG,CAAC,eAAe,CAAkC,IAAI,QAAQ,CAAC,aAAa;YAC/F,WAAW,EAAG,GAAG,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,EAAE,CAAyB,IAAI,QAAQ,CAAC,WAAW;YAC/H,iBAAiB,EAAG,GAAG,CAAC,mBAAmB,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAyB,IAAI,QAAQ,CAAC,iBAAiB;YACvJ,kBAAkB,EAAG,GAAG,CAAC,oBAAoB,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAwB,IAAI,QAAQ,CAAC,kBAAkB;YACrJ,qBAAqB,EAAG,GAAG,CAAC,uBAAuB,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAwB,IAAI,QAAQ,CAAC,qBAAqB;YACjK,yBAAyB,EAAG,GAAG,CAAC,2BAA2B,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAwB,IAAI,QAAQ,CAAC,yBAAyB;YACjL,QAAQ,EAAG,GAAG,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,CAAyB,IAAI,QAAQ,CAAC,QAAQ;YACnH,YAAY,EAAG,GAAG,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,CAAyB,IAAI,QAAQ,CAAC,YAAY;YACjI,QAAQ,EAAG,GAAG,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,CAAyB,IAAI,QAAQ,CAAC,QAAQ;YACnH,eAAe;YACf,YAAY,EAAG,GAAG,CAAC,cAAc,CAAyB,IAAI,QAAQ,CAAC,YAAY;YACnF,eAAe,EAAE,MAAM,CAAC,iBAAiB,CAAiC;SAC3E,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED,gFAAgF;AAEzE,KAAK,UAAU,YAAY,CAAC,GAAW,EAAE,UAAkB;IAChE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAA,sBAAS,EAAC,GAAG,CAAC,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACjD,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,OAAO,CAAC,GAAW,EAAE,IAAc;IACvD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAA,sBAAS,EAAC,GAAG,CAAC,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnC,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACpE,CAAC;IAAC,OAAO,MAAe,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,MAA8B,CAAC;QAC3C,2DAA2D;QAC3D,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;QAClC,OAAO;YACL,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,OAAO;SAChB,CAAC;IACJ,CAAC;AACH,CAAC;AAED,gFAAgF;AAEhF,SAAgB,kBAAkB,CAAC,KAAa;IAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IACrD,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACtD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/B,OAAO,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AACnC,CAAC;AAED,SAAgB,eAAe,CAAC,CAAkB,EAAE,CAAkB;IACpE,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IACtD,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IACtD,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE;QAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1D,IAAI,OAAO,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IAClC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACvC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACvC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACd,IAAI,CAAC,EAAE;YAAE,OAAO,CAAC,CAAC,CAAC;QACnB,IAAI,CAAC,EAAE;YAAE,OAAO,CAAC,CAAC;QAClB,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IACD,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,OAAO,EAAE,GAAG,EAAE,CAAC;AACjB,CAAC;AAED,gFAAgF;AAEhF;;;;;;;;;;;;;;GAcG;AACH,SAAgB,eAAe,CAAC,eAAwB,EAAE,KAAK,GAAG,IAAI;IACpE,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,IAAI,MAAM,CACf,sBAAsB,eAAe,gBAAgB,EACrD,KAAK,CACN,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,MAAM,CACf,+DAA+D,EAC/D,KAAK,CACN,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAe,EAAE,OAAe,EAAE,UAAkB;IAC5E,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,iBAAE,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACjE,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACzG,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAExB,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAC9D,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;QACxD,MAAM,SAAS,GAAG,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/D,MAAM,QAAQ,GAAG,mBAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC3C,MAAM,UAAU,GAAG,iBAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE5C,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;QACvF,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC;QACjG,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,aAAa,CAAC,CAAC;QAC5F,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,YAAY,CAAC,CAAC;QACzF,MAAM,eAAe,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,iBAAiB,CAAC,CAAC;QAExG,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAC9B,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAC3E,CAAC;QACF,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;YACvC,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YAChE,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,KAAK,EAAE,IAAI;YACX,SAAS,EAAE,mBAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;YACpC,YAAY,EAAE,WAAW;YACzB,UAAU,EAAE,SAAS;YACrB,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI;YAC1G,KAAK;YACL,SAAS;YACT,gBAAgB,EAAE,eAAe;YACjC,YAAY,EAAE,WAAW;YACzB,WAAW,EAAE,UAAU;YACvB,gBAAgB,EAAE,eAAe;SAClC,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAgB,iBAAiB,CAAC,GAAW,EAAE,KAAa;IAC1D,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,MAAM,SAAS,GAAG,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAE7C,MAAM,OAAO,GAAG,gBAAgB,CAAC,SAAS,EAAE,mBAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,UAAU,CAAC,CAAC;IAC1F,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAE5B,MAAM,aAAa,GAAG,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;IAChE,IAAI,CAAC,iBAAE,CAAC,UAAU,CAAC,aAAa,CAAC;QAAE,OAAO,IAAI,CAAC;IAE/C,IAAI,CAAC;QACH,MAAM,gBAAgB,GAAG,iBAAE,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAChF,MAAM,WAAW,GAAG,gBAAgB;aACjC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;aAC/D,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aAChB,IAAI,EAAE;aACN,OAAO,EAAE,CAAC;QAEb,KAAK,MAAM,WAAW,IAAI,WAAW,EAAE,CAAC;YACtC,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;YAC7D,IAAI,CAAC,YAAY;gBAAE,SAAS;YAC5B,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAChC,MAAM,WAAW,GAAG,mBAAI,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;YAC1D,MAAM,OAAO,GAAG,mBAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;YAClE,MAAM,MAAM,GAAG,gBAAgB,CAAC,WAAW,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;YAClE,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC;gBAC1B,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,yBAAyB;QACzB,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY;YAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,oBAAoB,CAAC,GAAW;IAC9C,MAAM,aAAa,GAAG,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;IAChE,MAAM,OAAO,GAAuB,EAAE,CAAC;IAEvC,IAAI,CAAC,iBAAE,CAAC,UAAU,CAAC,aAAa,CAAC;QAAE,OAAO,OAAO,CAAC;IAElD,IAAI,CAAC;QACH,MAAM,gBAAgB,GAAG,iBAAE,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAChF,MAAM,SAAS,GAAG,gBAAgB;aAC/B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;aAC/D,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aAChB,IAAI,EAAE;aACN,OAAO,EAAE,CAAC;QAEb,KAAK,MAAM,WAAW,IAAI,SAAS,EAAE,CAAC;YACpC,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;YAC7D,IAAI,CAAC,YAAY;gBAAE,SAAS;YAC5B,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAChC,MAAM,WAAW,GAAG,mBAAI,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;YAC1D,MAAM,OAAO,GAAG,iBAAE,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YACrE,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAEzG,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,GAAG;oBACT,SAAS,EAAE,OAAO;oBAClB,QAAQ,EAAE,mBAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,WAAW,CAAC;oBAC3D,QAAQ,EAAE,mBAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC;iBACtC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,yBAAyB;QACzB,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY;YAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,gFAAgF;AAEhF,SAAgB,uBAAuB,CAAC,GAAW,EAAE,QAAyB;IAC5E,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,MAAM,WAAW,GAAG,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;IAC9D,IAAI,CAAC,iBAAE,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IAE7C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,iBAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACtD,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC/D,MAAM,YAAY,GAAG,eAAe,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QACxD,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAChD,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC;QAE9B,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,WAAW,GAAG,WAAW,CAAC,KAAM,CAAC;QACvC,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACjD,MAAM,eAAe,GAAG,aAAa,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACtE,MAAM,UAAU,GAAG,eAAe,CAAC,CAAC,CAAC,WAAW,GAAG,eAAe,CAAC,KAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QAC3F,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;QAE9D,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC7D,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAEpD,OAAO;YACL,KAAK,EAAE,IAAI;YACX,YAAY,EAAE,QAAQ,CAAC,QAAQ,EAAE;YACjC,UAAU,EAAE,SAAS;YACrB,IAAI;YACJ,OAAO;SACR,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAgB,oBAAoB,CAAC,GAAW,EAAE,SAAoB;IACpE,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAE/B,MAAM,QAAQ,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,CAAC;IACrD,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;IACpD,CAAC;IAED,MAAM,OAAO,GAAqB,MAAM,CAAC,aAAa,IAAI,UAAU,CAAC;IACrE,MAAM,WAAW,GAAG,sBAAc,CAAC,SAAS,CAAC,CAAC;IAC9C,IAAI,CAAC,WAAW;QAAE,OAAO,QAAQ,CAAC;IAClC,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,IAAI,QAAQ,CAAC;IAC7E,OAAO,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;AACpD,CAAC;AAED,gFAAgF;AAEhF,SAAgB,kBAAkB,CAAC,GAAW,EAAE,UAAkB;IAChE,MAAM,QAAQ,GAAG,mBAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACvF,IAAI,CAAC;QACH,iBAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAgB,oBAAoB,CAAC,IAA+B;IAClE,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AAChF,CAAC;AAED,SAAgB,gBAAgB,CAAC,GAAW;IAC1C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,iBAAE,CAAC,YAAY,CAAC,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;QACpF,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAClD,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACjE,OAAO;YACL,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM;YAChD,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,WAAW;SACpD,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAChD,CAAC;AACH,CAAC"}