@yu_robotics/remote-cli 1.6.173 → 1.6.177

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 (79) hide show
  1. package/README.md +24 -3
  2. package/dist/client/MessageHandler.d.ts +2 -0
  3. package/dist/client/MessageHandler.d.ts.map +1 -1
  4. package/dist/client/MessageHandler.js +73 -18
  5. package/dist/client/MessageHandler.js.map +1 -1
  6. package/dist/client/WebSocketClient.d.ts.map +1 -1
  7. package/dist/client/WebSocketClient.js +1 -0
  8. package/dist/client/WebSocketClient.js.map +1 -1
  9. package/dist/delegation/DelegatedWorkerSessionStore.d.ts +11 -1
  10. package/dist/delegation/DelegatedWorkerSessionStore.d.ts.map +1 -1
  11. package/dist/delegation/DelegatedWorkerSessionStore.js +98 -51
  12. package/dist/delegation/DelegatedWorkerSessionStore.js.map +1 -1
  13. package/dist/delegation/DelegationManager.d.ts +2 -0
  14. package/dist/delegation/DelegationManager.d.ts.map +1 -1
  15. package/dist/delegation/DelegationManager.js +12 -1
  16. package/dist/delegation/DelegationManager.js.map +1 -1
  17. package/dist/executor/AcpExecutor.d.ts +6 -0
  18. package/dist/executor/AcpExecutor.d.ts.map +1 -1
  19. package/dist/executor/AcpExecutor.js +81 -10
  20. package/dist/executor/AcpExecutor.js.map +1 -1
  21. package/dist/executor/CodexAppServerClient.d.ts +2 -1
  22. package/dist/executor/CodexAppServerClient.d.ts.map +1 -1
  23. package/dist/executor/CodexAppServerClient.js +15 -11
  24. package/dist/executor/CodexAppServerClient.js.map +1 -1
  25. package/dist/executor/CodexAppServerExecutor.d.ts +12 -1
  26. package/dist/executor/CodexAppServerExecutor.d.ts.map +1 -1
  27. package/dist/executor/CodexAppServerExecutor.js +197 -4
  28. package/dist/executor/CodexAppServerExecutor.js.map +1 -1
  29. package/dist/executor/IExecutor.d.ts +19 -0
  30. package/dist/executor/IExecutor.d.ts.map +1 -1
  31. package/dist/executor/KimiExecutor.d.ts +9 -0
  32. package/dist/executor/KimiExecutor.d.ts.map +1 -1
  33. package/dist/executor/KimiExecutor.js +45 -0
  34. package/dist/executor/KimiExecutor.js.map +1 -1
  35. package/dist/executor/PiExecutor.d.ts.map +1 -1
  36. package/dist/executor/PiExecutor.js +2 -1
  37. package/dist/executor/PiExecutor.js.map +1 -1
  38. package/dist/executor/index.d.ts +2 -1
  39. package/dist/executor/index.d.ts.map +1 -1
  40. package/dist/executor/index.js +1 -0
  41. package/dist/executor/index.js.map +1 -1
  42. package/dist/executor/kimi/KimiAccountUsage.d.ts +2 -6
  43. package/dist/executor/kimi/KimiAccountUsage.d.ts.map +1 -1
  44. package/dist/executor/kimi/KimiAccountUsage.js +11 -71
  45. package/dist/executor/kimi/KimiAccountUsage.js.map +1 -1
  46. package/dist/executor/kimi/KimiLocalServer.d.ts +28 -0
  47. package/dist/executor/kimi/KimiLocalServer.d.ts.map +1 -0
  48. package/dist/executor/kimi/KimiLocalServer.js +192 -0
  49. package/dist/executor/kimi/KimiLocalServer.js.map +1 -0
  50. package/dist/executor/kimi/KimiModelCatalog.d.ts +6 -0
  51. package/dist/executor/kimi/KimiModelCatalog.d.ts.map +1 -0
  52. package/dist/executor/kimi/KimiModelCatalog.js +86 -0
  53. package/dist/executor/kimi/KimiModelCatalog.js.map +1 -0
  54. package/dist/maintenance/release-notes.json +1 -1
  55. package/dist/settings/SettingsCatalog.d.ts +1 -1
  56. package/dist/settings/SettingsCatalog.d.ts.map +1 -1
  57. package/dist/settings/SettingsCatalog.js +6 -2
  58. package/dist/settings/SettingsCatalog.js.map +1 -1
  59. package/dist/settings/SettingsService.d.ts +3 -1
  60. package/dist/settings/SettingsService.d.ts.map +1 -1
  61. package/dist/settings/SettingsService.js +17 -5
  62. package/dist/settings/SettingsService.js.map +1 -1
  63. package/dist/thread/ThreadContextReset.d.ts +12 -0
  64. package/dist/thread/ThreadContextReset.d.ts.map +1 -0
  65. package/dist/thread/ThreadContextReset.js +59 -0
  66. package/dist/thread/ThreadContextReset.js.map +1 -0
  67. package/dist/thread/ThreadExecutorPool.d.ts +11 -2
  68. package/dist/thread/ThreadExecutorPool.d.ts.map +1 -1
  69. package/dist/thread/ThreadExecutorPool.js +97 -2
  70. package/dist/thread/ThreadExecutorPool.js.map +1 -1
  71. package/dist/thread/ThreadManager.d.ts +3 -1
  72. package/dist/thread/ThreadManager.d.ts.map +1 -1
  73. package/dist/thread/ThreadManager.js +3 -0
  74. package/dist/thread/ThreadManager.js.map +1 -1
  75. package/dist/thread/types.d.ts +2 -0
  76. package/dist/thread/types.d.ts.map +1 -1
  77. package/dist/types/Settings.d.ts +8 -0
  78. package/dist/types/Settings.d.ts.map +1 -1
  79. package/package.json +1 -1
@@ -0,0 +1,192 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.KimiMetadataError = void 0;
7
+ exports.kimiHomeKey = kimiHomeKey;
8
+ exports.withKimiLocalServer = withKimiLocalServer;
9
+ const child_process_1 = require("child_process");
10
+ const os_1 = __importDefault(require("os"));
11
+ const path_1 = __importDefault(require("path"));
12
+ const stripAnsi_1 = require("../../utils/stripAnsi");
13
+ const OUTPUT_LIMIT = 64 * 1024;
14
+ const RESPONSE_LIMIT = 1024 * 1024;
15
+ const unconfirmedExits = new Map();
16
+ const endpoints = {
17
+ usage: { path: '/api/v1/oauth/usage?provider=managed%3Akimi-code', method: 'GET' },
18
+ refreshOAuth: { path: '/api/v1/providers:refresh_oauth', method: 'POST' },
19
+ models: { path: '/api/v1/models', method: 'GET' },
20
+ };
21
+ class KimiMetadataError extends Error {
22
+ }
23
+ exports.KimiMetadataError = KimiMetadataError;
24
+ function kimiHomeKey(command) {
25
+ const home = path_1.default.resolve(process.env.KIMI_CODE_HOME || path_1.default.join(os_1.default.homedir(), '.kimi-code'));
26
+ return JSON.stringify([command, home]);
27
+ }
28
+ function unavailable() {
29
+ return new KimiMetadataError('This Kimi installation does not provide the local metadata API. Upgrade Kimi Code and retry.');
30
+ }
31
+ async function readJson(response) {
32
+ const declared = response.headers.get('content-length');
33
+ if (declared !== null && (!/^\d+$/.test(declared) || Number(declared) > RESPONSE_LIMIT)) {
34
+ void response.body?.cancel().catch(() => { });
35
+ throw new KimiMetadataError('Kimi returned an oversized metadata response.');
36
+ }
37
+ if (!response.body)
38
+ throw new KimiMetadataError('Kimi returned an empty metadata response.');
39
+ const reader = response.body.getReader();
40
+ const chunks = [];
41
+ let size = 0;
42
+ try {
43
+ for (;;) {
44
+ const { done, value } = await reader.read();
45
+ if (done)
46
+ break;
47
+ size += value.byteLength;
48
+ if (size > RESPONSE_LIMIT)
49
+ throw new KimiMetadataError('Kimi returned an oversized metadata response.');
50
+ chunks.push(value);
51
+ }
52
+ try {
53
+ return JSON.parse(Buffer.concat(chunks).toString('utf8'));
54
+ }
55
+ catch {
56
+ throw new KimiMetadataError('Kimi returned invalid metadata JSON.');
57
+ }
58
+ }
59
+ finally {
60
+ void reader.cancel().catch(() => { });
61
+ reader.releaseLock();
62
+ }
63
+ }
64
+ /** Own one authenticated loopback server, including abort and confirmed exit. */
65
+ async function withKimiLocalServer(command, cwd, query, dependencies = {}) {
66
+ const key = kimiHomeKey(command);
67
+ if (unconfirmedExits.has(key)) {
68
+ throw new KimiMetadataError('A previous Kimi metadata server has not exited. Retry after its exit is confirmed.');
69
+ }
70
+ const controller = new AbortController();
71
+ let announce;
72
+ let rejectReady;
73
+ const ready = new Promise((resolve, reject) => { announce = resolve; rejectReady = reject; });
74
+ let markClosed;
75
+ const closed = new Promise(resolve => { markClosed = resolve; });
76
+ let exited = false;
77
+ let spawned = false;
78
+ let announced = false;
79
+ let outputBytes = 0;
80
+ let startup = '';
81
+ let rejectFailure;
82
+ const failure = new Promise((_, reject) => { rejectFailure = reject; });
83
+ let child;
84
+ try {
85
+ child = (dependencies.spawnProcess ?? child_process_1.spawn)(command, ['web', '--no-open', '--host', '127.0.0.1', '--port', '0', '--log-level', 'silent'], {
86
+ cwd, stdio: ['ignore', 'pipe', 'pipe'],
87
+ env: { ...process.env, KIMI_CODE_MODEL_CATALOG_REFRESH_ON_START: 'false', KIMI_CODE_MODEL_CATALOG_REFRESH_INTERVAL_MS: '0' },
88
+ });
89
+ }
90
+ catch {
91
+ throw unavailable();
92
+ }
93
+ const onOutput = (chunk, stdout) => {
94
+ outputBytes += chunk.byteLength;
95
+ if (outputBytes > OUTPUT_LIMIT) {
96
+ rejectFailure(new KimiMetadataError('Kimi metadata startup output exceeded its limit.'));
97
+ return;
98
+ }
99
+ if (announced || !stdout || controller.signal.aborted)
100
+ return;
101
+ startup += (0, stripAnsi_1.stripAnsi)(chunk.toString());
102
+ const match = /(?:^|\n)\s*Local:\s+(http:\/\/127\.0\.0\.1:(\d{1,5}))\/#token=([A-Za-z0-9._~-]{1,512})[ \t]*\r?\n/.exec(startup);
103
+ if (!match || Number(match[2]) < 1 || Number(match[2]) > 65535)
104
+ return;
105
+ announced = true;
106
+ startup = '';
107
+ announce({ origin: match[1], token: match[3] });
108
+ };
109
+ child.stdout?.on('data', chunk => onOutput(chunk, true));
110
+ child.stderr?.on('data', chunk => onOutput(chunk, false));
111
+ child.once('spawn', () => { spawned = true; });
112
+ child.once('error', () => {
113
+ if (!spawned && child.pid === undefined) {
114
+ exited = true;
115
+ markClosed();
116
+ }
117
+ rejectFailure(unavailable());
118
+ });
119
+ child.once('close', () => {
120
+ exited = true;
121
+ markClosed();
122
+ rejectFailure(unavailable());
123
+ });
124
+ let timer;
125
+ const timeout = new Promise((_, reject) => {
126
+ timer = setTimeout(() => reject(new KimiMetadataError('Kimi model metadata request timed out. Check connectivity and retry.')), dependencies.timeoutMs ?? 5_000);
127
+ timer.unref?.();
128
+ });
129
+ const operation = (async () => {
130
+ const { origin, token } = await ready;
131
+ const request = async (endpoint) => {
132
+ if (controller.signal.aborted)
133
+ throw new KimiMetadataError('Kimi metadata request was cancelled.');
134
+ const route = endpoints[endpoint];
135
+ if (!route)
136
+ throw new KimiMetadataError('Unsupported Kimi metadata endpoint.');
137
+ const response = await (dependencies.fetchImpl ?? fetch)(`${origin}${route.path}`, {
138
+ method: route.method, redirect: 'error', signal: controller.signal,
139
+ headers: { Authorization: `Bearer ${token}`, Accept: 'application/json' },
140
+ });
141
+ if (controller.signal.aborted)
142
+ throw new KimiMetadataError('Kimi metadata request was cancelled.');
143
+ if ([404, 405, 501].includes(response.status))
144
+ throw unavailable();
145
+ if (!response.ok || response.redirected)
146
+ throw new KimiMetadataError('Kimi metadata request failed. Check account access and connectivity, then retry.');
147
+ return readJson(response);
148
+ };
149
+ return query(request);
150
+ })();
151
+ try {
152
+ return await Promise.race([operation, failure, timeout]);
153
+ }
154
+ catch (error) {
155
+ throw error instanceof KimiMetadataError ? error
156
+ : new KimiMetadataError('Kimi metadata request failed. Check account access and connectivity, then retry.');
157
+ }
158
+ finally {
159
+ clearTimeout(timer);
160
+ controller.abort();
161
+ rejectReady(new KimiMetadataError('Kimi metadata request was cancelled.'));
162
+ startup = '';
163
+ const wait = async () => {
164
+ let grace;
165
+ try {
166
+ await Promise.race([closed, new Promise(resolve => { grace = setTimeout(resolve, dependencies.killGraceMs ?? 500); })]);
167
+ }
168
+ finally {
169
+ clearTimeout(grace);
170
+ }
171
+ };
172
+ const signal = (value) => { try {
173
+ child.kill(value);
174
+ }
175
+ catch { /* Exit must still be confirmed below. */ } };
176
+ if (!exited) {
177
+ signal('SIGTERM');
178
+ await wait();
179
+ }
180
+ if (!exited) {
181
+ signal('SIGKILL');
182
+ await wait();
183
+ }
184
+ if (!exited) {
185
+ unconfirmedExits.set(key, closed);
186
+ void closed.then(() => { if (unconfirmedExits.get(key) === closed)
187
+ unconfirmedExits.delete(key); });
188
+ throw new KimiMetadataError('Kimi metadata server exit could not be confirmed. Further attempts are blocked until it exits.');
189
+ }
190
+ }
191
+ }
192
+ //# sourceMappingURL=KimiLocalServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KimiLocalServer.js","sourceRoot":"","sources":["../../../src/executor/kimi/KimiLocalServer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { ExecutorModelInfo } from '../IExecutor';
2
+ import { type KimiLocalServerDependencies } from './KimiLocalServer';
3
+ export declare function latestKimiModelCatalog(command: string): ExecutorModelInfo[] | undefined;
4
+ /** Coalesce only concurrent queries; every later explicit refresh contacts Kimi anew. */
5
+ export declare function refreshKimiModelCatalog(command: string, cwd: string, dependencies?: KimiLocalServerDependencies): Promise<ExecutorModelInfo[]>;
6
+ //# sourceMappingURL=KimiModelCatalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KimiModelCatalog.d.ts","sourceRoot":"","sources":["../../../src/executor/kimi/KimiModelCatalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAuD,KAAK,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAS1H,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,EAAE,GAAG,SAAS,CAGvF;AA6CD,yFAAyF;AACzF,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAClE,YAAY,GAAE,2BAAgC,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAiB9E"}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.latestKimiModelCatalog = latestKimiModelCatalog;
4
+ exports.refreshKimiModelCatalog = refreshKimiModelCatalog;
5
+ const KimiLocalServer_1 = require("./KimiLocalServer");
6
+ const pending = new Map();
7
+ // Validation metadata only: temporary settings executors and live ACP threads
8
+ // share newly discovered aliases. Explicit listings never read this cache.
9
+ const validationCatalogs = new Map();
10
+ const copyModels = (models) => models.map(model => ({ ...model,
11
+ supportedReasoningEfforts: model.supportedReasoningEfforts ? [...model.supportedReasoningEfforts] : undefined }));
12
+ function latestKimiModelCatalog(command) {
13
+ const models = validationCatalogs.get((0, KimiLocalServer_1.kimiHomeKey)(command));
14
+ return models ? copyModels(models) : undefined;
15
+ }
16
+ const record = (value) => value !== null && typeof value === 'object' && !Array.isArray(value);
17
+ const label = (value) => typeof value === 'string' && value.length > 0
18
+ && value.length <= 512 && !/[\x00-\x1f\x7f]/.test(value);
19
+ const invalid = () => new KimiLocalServer_1.KimiMetadataError('Kimi returned an invalid model catalog response. Upgrade Kimi Code or retry.');
20
+ function envelope(value) {
21
+ if (!record(value) || value.code !== 0 || !record(value.data))
22
+ throw invalid();
23
+ return value.data;
24
+ }
25
+ function validateRefresh(value) {
26
+ const data = envelope(value);
27
+ for (const field of ['changed', 'unchanged', 'failed']) {
28
+ if (!Array.isArray(data[field]) || data[field].length > 512)
29
+ throw invalid();
30
+ }
31
+ if (data.failed.length) {
32
+ throw new KimiLocalServer_1.KimiMetadataError('Kimi could not refresh the managed model catalog. Check native account access and network connectivity, then retry.');
33
+ }
34
+ for (const entry of data.changed) {
35
+ if (!record(entry) || !label(entry.provider_id) || !label(entry.provider_name)
36
+ || !Number.isSafeInteger(entry.added) || Number(entry.added) < 0
37
+ || !Number.isSafeInteger(entry.removed) || Number(entry.removed) < 0)
38
+ throw invalid();
39
+ }
40
+ if (!data.unchanged.every(label))
41
+ throw invalid();
42
+ // An empty successful report means there are no OAuth-backed providers.
43
+ // Preserve native model listing for API-key and other configured providers.
44
+ }
45
+ function models(value) {
46
+ const data = envelope(value);
47
+ if (!Array.isArray(data.items) || !data.items.length || data.items.length > 512)
48
+ throw invalid();
49
+ const seen = new Set();
50
+ return data.items.map(item => {
51
+ if (!record(item) || !label(item.model) || (item.display_name !== undefined && !label(item.display_name))
52
+ || seen.has(item.model))
53
+ throw invalid();
54
+ seen.add(item.model);
55
+ const efforts = item.support_efforts;
56
+ if (efforts !== undefined && (!Array.isArray(efforts) || efforts.length > 32 || !efforts.every(label)))
57
+ throw invalid();
58
+ if (item.default_effort !== undefined && !label(item.default_effort))
59
+ throw invalid();
60
+ return { id: item.model, displayName: item.display_name ?? item.model,
61
+ supportedReasoningEfforts: efforts, defaultReasoningEffort: item.default_effort };
62
+ });
63
+ }
64
+ /** Coalesce only concurrent queries; every later explicit refresh contacts Kimi anew. */
65
+ function refreshKimiModelCatalog(command, cwd, dependencies = {}) {
66
+ const key = (0, KimiLocalServer_1.kimiHomeKey)(command);
67
+ const existing = pending.get(key);
68
+ if (existing)
69
+ return existing.then(copyModels);
70
+ const operation = (0, KimiLocalServer_1.withKimiLocalServer)(command, cwd, async (request) => {
71
+ validateRefresh(await request('refreshOAuth'));
72
+ return models(await request('models'));
73
+ }, dependencies).then(result => {
74
+ validationCatalogs.delete(key);
75
+ validationCatalogs.set(key, copyModels(result));
76
+ if (validationCatalogs.size > 64)
77
+ validationCatalogs.delete(validationCatalogs.keys().next().value);
78
+ return result;
79
+ });
80
+ pending.set(key, operation);
81
+ const clear = () => { if (pending.get(key) === operation)
82
+ pending.delete(key); };
83
+ void operation.then(clear, clear);
84
+ return operation;
85
+ }
86
+ //# sourceMappingURL=KimiModelCatalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KimiModelCatalog.js","sourceRoot":"","sources":["../../../src/executor/kimi/KimiModelCatalog.ts"],"names":[],"mappings":";;AAUA,wDAGC;AA8CD,0DAkBC;AA5ED,uDAA0H;AAE1H,MAAM,OAAO,GAAG,IAAI,GAAG,EAAwC,CAAC;AAChE,8EAA8E;AAC9E,2EAA2E;AAC3E,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAA+B,CAAC;AAClE,MAAM,UAAU,GAAG,CAAC,MAA2B,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK;IACjF,yBAAyB,EAAE,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AAEpH,SAAgB,sBAAsB,CAAC,OAAe;IACpD,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAA,6BAAW,EAAC,OAAO,CAAC,CAAC,CAAC;IAC5D,OAAO,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACjD,CAAC;AACD,MAAM,MAAM,GAAG,CAAC,KAAc,EAAoC,EAAE,CAAC,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC1I,MAAM,KAAK,GAAG,CAAC,KAAc,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;OAC3F,KAAK,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3D,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,IAAI,mCAAiB,CAAC,8EAA8E,CAAC,CAAC;AAE5H,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;QAAE,MAAM,OAAO,EAAE,CAAC;IAC/E,OAAO,KAAK,CAAC,IAAI,CAAC;AACpB,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC7B,KAAK,MAAM,KAAK,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,CAAC;QACvD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,GAAG;YAAE,MAAM,OAAO,EAAE,CAAC;IAC/E,CAAC;IACD,IAAK,IAAI,CAAC,MAAoB,CAAC,MAAM,EAAE,CAAC;QACtC,MAAM,IAAI,mCAAiB,CAAC,qHAAqH,CAAC,CAAC;IACrJ,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAoB,EAAE,CAAC;QAC9C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC;eACzE,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;eAC7D,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;YAAE,MAAM,OAAO,EAAE,CAAC;IAC1F,CAAC;IACD,IAAI,CAAE,IAAI,CAAC,SAAuB,CAAC,KAAK,CAAC,KAAK,CAAC;QAAE,MAAM,OAAO,EAAE,CAAC;IACjE,wEAAwE;IACxE,4EAA4E;AAC9E,CAAC;AAED,SAAS,MAAM,CAAC,KAAc;IAC5B,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG;QAAE,MAAM,OAAO,EAAE,CAAC;IACjG,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QAC3B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;eACpG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,MAAM,OAAO,EAAE,CAAC;QAC3C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC;QACrC,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAAE,MAAM,OAAO,EAAE,CAAC;QACxH,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;YAAE,MAAM,OAAO,EAAE,CAAC;QACtF,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,WAAW,EAAG,IAAI,CAAC,YAAmC,IAAI,IAAI,CAAC,KAAK;YAC3F,yBAAyB,EAAE,OAA+B,EAAE,sBAAsB,EAAE,IAAI,CAAC,cAAoC,EAAE,CAAC;IACpI,CAAC,CAAC,CAAC;AACL,CAAC;AAED,yFAAyF;AACzF,SAAgB,uBAAuB,CAAC,OAAe,EAAE,GAAW,EAClE,eAA4C,EAAE;IAC9C,MAAM,GAAG,GAAG,IAAA,6BAAW,EAAC,OAAO,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,IAAA,qCAAmB,EAAC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAC,OAAO,EAAC,EAAE;QAClE,eAAe,CAAC,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;QAC/C,OAAO,MAAM,CAAC,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACzC,CAAC,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;QAC7B,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC/B,kBAAkB,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAChD,IAAI,kBAAkB,CAAC,IAAI,GAAG,EAAE;YAAE,kBAAkB,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAM,CAAC,CAAC;QACrG,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,GAAG,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS;QAAE,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACjF,KAAK,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAClC,OAAO,SAAS,CAAC;AACnB,CAAC"}