@nsshunt/stsvueutils 1.0.15 → 1.0.17

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.
@@ -1,380 +0,0 @@
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.STSWorkerManagerPlugin = exports.useSTSWorkerManager = exports.CompareSTSInstrumentControllerPluginKeyWMEx = exports.CompareSTSInstrumentControllerPluginKeyWM = exports.GetSTSInstrumentControllerPluginKeyWM = exports.STSWorkerManager = void 0;
7
- const debug_1 = __importDefault(require("debug"));
8
- const debug = (0, debug_1.default)(`proc:${process.pid}:workerManager`);
9
- //import MyWorker from './sts-worker?worker' // https://vitejs.dev/guide/features.html#web-workers
10
- const stspublisherserver_1 = require("@nsshunt/stspublisherserver");
11
- const stsinstrumentation_1 = require("@nsshunt/stsinstrumentation");
12
- const stsmodels_1 = require("@nsshunt/stsmodels");
13
- const TelemetryStore_1 = require("./../stores/TelemetryStore");
14
- const stsTestWorkerDefinitions_1 = require("./stsTestWorkerDefinitions");
15
- const stsutils_1 = require("@nsshunt/stsutils");
16
- const vue_1 = require("vue");
17
- const stspublisherserver_2 = require("@nsshunt/stspublisherserver");
18
- const stsPluginKeys_1 = require("./stsPluginKeys");
19
- class STSWorkerManager {
20
- //#agentSession: string = null;
21
- #workersEx = {};
22
- #runner = 0;
23
- #workerId = 0;
24
- #options;
25
- #STSInstrumentController;
26
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
27
- #app;
28
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
29
- constructor(app, options) {
30
- this.#app = app;
31
- this.#options = options;
32
- console.log(`CompareSTSInstrumentControllerPluginKeyWMEx(): [${(0, exports.CompareSTSInstrumentControllerPluginKeyWMEx)()}]`);
33
- debug(`Attempting to get STSInstrumentControllerPlugin using symbol: [${String(stspublisherserver_2.STSInstrumentControllerPluginKey)}]`);
34
- //this.#STSInstrumentController = app.config.globalProperties.$sts[STSInstrumentControllerPluginKey]
35
- //this.#STSInstrumentController = app.config.globalProperties.$sts[GetSTSInstrumentControllerPluginKey()]
36
- this.#STSInstrumentController = (0, stspublisherserver_2.GetSTSInstrumentController)(app);
37
- //this.#STSInstrumentController = app.config.globalProperties.$sts.aic;
38
- debug(this.#STSInstrumentController);
39
- debug('keys within app.config.globalProperties.$sts');
40
- for (const [key, value] of Object.entries(app.config.globalProperties.$sts)) {
41
- debug(`${key}`);
42
- }
43
- if (!this.#STSInstrumentController) {
44
- debug(`Failed to get STSInstrumentControllerPlugin using symbol: [${String(stspublisherserver_2.STSInstrumentControllerPluginKey)}]`);
45
- }
46
- }
47
- get WorkersEx() {
48
- return this.#workersEx;
49
- }
50
- AddWorker = async (useWorkerFactory) => {
51
- let workerFactory;
52
- if (useWorkerFactory) {
53
- // Use the supplied workFactory
54
- workerFactory = useWorkerFactory;
55
- }
56
- else {
57
- // Use the default workFactory
58
- workerFactory = this.#options.workerFactory;
59
- }
60
- const stsWorkerEx = {
61
- id: this.#workerId++,
62
- worker: workerFactory.createWorkerThreadWorker(),
63
- primaryWorker: workerFactory.createPrimaryThreadWorker(this.#app, workerFactory.primaryThreadWorkerOptions),
64
- state: stsTestWorkerDefinitions_1.IWorkerState.starting,
65
- workerThreadWorkerOptions: workerFactory.workerThreadWorkerOptions,
66
- primaryThreadWorkerOptions: workerFactory.primaryThreadWorkerOptions,
67
- runnersEx: {},
68
- AddRunner: (runnerOptions) => this.AddRunnerToWorker(stsWorkerEx, runnerOptions),
69
- StopRunner: (runner) => this.#StopRunner(stsWorkerEx, runner),
70
- Stop: async () => this.#StopWorker(stsWorkerEx)
71
- };
72
- console.log(`Adding worker: [${stsWorkerEx.id}]`);
73
- stsWorkerEx.worker.onmessage = function (data) {
74
- console.log(data.data);
75
- };
76
- stsWorkerEx.worker.onerror = function (error) {
77
- console.log(error);
78
- };
79
- const { port1, // process message port
80
- port2 // collector message port
81
- } = new MessageChannel();
82
- const workerPort = port1;
83
- console.log(`STSWorkerManager::AddWorker::workerThreadWorkerOptions: [${JSON.stringify(stsWorkerEx.workerThreadWorkerOptions)}]`);
84
- this.#PostMessageToWorker(stsWorkerEx, stspublisherserver_1.PublishMessageCommands.MessagePort, {
85
- port: port2,
86
- //applicationStoreState: stateCopy,
87
- options: { ...stsWorkerEx.workerThreadWorkerOptions }
88
- }, port2);
89
- // Process messages received back from the worker
90
- workerPort.onmessage = async (data) => {
91
- const publishMessagePayload = data.data;
92
- switch (publishMessagePayload.command) {
93
- case stspublisherserver_1.PublishMessageCommands.MessagePortResponse:
94
- stsWorkerEx.state = stsTestWorkerDefinitions_1.IWorkerState.started;
95
- break;
96
- case stspublisherserver_1.PublishMessageCommands.InstrumentTelemetry:
97
- this.#ProcessTelemetry(stsWorkerEx, publishMessagePayload.payload);
98
- break;
99
- default:
100
- stsWorkerEx.primaryWorker.ProcessMessageFromWorker(workerPort, publishMessagePayload);
101
- }
102
- };
103
- this.#workersEx[stsWorkerEx.id] = stsWorkerEx;
104
- console.log(`Added worker: [${stsWorkerEx.id}]`);
105
- return stsWorkerEx;
106
- };
107
- AddRunnerToWorker = (stsWorkerEx, runnerOptions) => {
108
- const runnerEx = this.#CreateAsyncRunner(stsWorkerEx, runnerOptions);
109
- stsWorkerEx.runnersEx[runnerEx.id] = runnerEx;
110
- this.#SetRunnerIntoWorker(stsWorkerEx, runnerEx);
111
- return runnerEx;
112
- };
113
- #CreateRunnerCopy(runnerEx) {
114
- return {
115
- id: runnerEx.id,
116
- asyncRunnerContext: { ...runnerEx.asyncRunnerContext },
117
- options: { ...runnerEx.options },
118
- state: runnerEx.state,
119
- instrumentData: { ...runnerEx.instrumentData }
120
- };
121
- }
122
- #SetRunnerIntoWorker = (workerEx, runnerEx) => {
123
- // Now that the worker is setup, send the options
124
- //@@ wait until worker in running state
125
- const payload = {
126
- runner: this.#CreateRunnerCopy(runnerEx)
127
- };
128
- this.#PostMessageToWorker(workerEx, stspublisherserver_1.PublishMessageCommands.Add, payload);
129
- };
130
- #ProcessTelemetry = (workerEx, payloadContents) => {
131
- const store = (0, TelemetryStore_1.TelemetryStore)();
132
- const { runner } = payloadContents;
133
- if (workerEx.runnersEx[runner.id]) {
134
- const runnerEx = workerEx.runnersEx[runner.id];
135
- let update = false;
136
- // Copy telemetry
137
- runnerEx.instrumentData.count = runner.instrumentData.count;
138
- runnerEx.instrumentData.velocity = runner.instrumentData.velocity;
139
- if (runner.instrumentData.message) {
140
- runnerEx.instrumentData.message = [...runner.instrumentData.message];
141
- }
142
- else {
143
- runnerEx.instrumentData.message = [];
144
- }
145
- if (runner.instrumentData.message) {
146
- runner.instrumentData.message.forEach((message) => {
147
- runnerEx.publishInstrumentController.LogEx(message);
148
- });
149
- update = true;
150
- }
151
- if (runner.instrumentData.count) {
152
- runnerEx.publishInstrumentController.UpdateInstrument(stsinstrumentation_1.Gauge.REQUEST_COUNT_GAUGE, {
153
- val: runnerEx.instrumentData.count
154
- });
155
- runnerEx.publishInstrumentController.UpdateInstrument(stsinstrumentation_1.Gauge.VELOCITY_GAUGE, {
156
- Inc: runnerEx.instrumentData.velocity
157
- });
158
- update = true;
159
- }
160
- if (update) {
161
- store.Update(workerEx, runnerEx);
162
- }
163
- }
164
- };
165
- #CreateAsyncRunner = (workerEx, runnerOptions) => {
166
- //const applicationStore = ApplicationStore();
167
- this.#runner++; // The runner number always increases
168
- const asyncRunnerContext = {
169
- nid: `\
170
- ${workerEx.workerThreadWorkerOptions.hostName}${stsmodels_1.ModelDelimeter.COMPONENT_SEPERATOR}${workerEx.workerThreadWorkerOptions.agentId}-${workerEx.workerThreadWorkerOptions.userAgent}\
171
- ${stsmodels_1.ModelDelimeter.NID_SEPERATOR}\
172
- worker${workerEx.id}\
173
- ${stsmodels_1.ModelDelimeter.SEPERATOR}\
174
- ${this.#runner}`,
175
- id: this.#runner.toString(),
176
- hostName: (workerEx.workerThreadWorkerOptions.hostName ? workerEx.workerThreadWorkerOptions.hostName : 'host'),
177
- agentName: `${workerEx.workerThreadWorkerOptions.agentId}-${workerEx.workerThreadWorkerOptions.userAgent}`,
178
- threadId: `worker${workerEx.id}`,
179
- asyncRunnerId: this.#runner
180
- };
181
- const runnerEx = {
182
- id: this.#runner,
183
- publishInstrumentController: this.#STSInstrumentController.AddPublishInstrumentController(asyncRunnerContext),
184
- asyncRunnerContext: asyncRunnerContext,
185
- state: stsTestWorkerDefinitions_1.IRunnerState.created,
186
- options: runnerOptions,
187
- instrumentData: {
188
- count: 0,
189
- velocity: 0,
190
- message: []
191
- },
192
- Stop: async () => this.#StopRunner(workerEx, runnerEx)
193
- };
194
- return runnerEx;
195
- };
196
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
197
- #PostMessageToWorker = (workerEx, command, payload, transferObject) => {
198
- if (transferObject) {
199
- console.log(`#PostMessageToWorker with transfer object`);
200
- workerEx.worker.postMessage({ command, payload }, [transferObject]);
201
- console.log(`#PostMessageToWorker with transfer object - done...`);
202
- }
203
- else {
204
- console.log(`#PostMessageToWorker`);
205
- workerEx.worker.postMessage({ command, payload });
206
- }
207
- };
208
- #TerminateWorker = (workerEx) => {
209
- if (workerEx.worker) {
210
- const store = (0, TelemetryStore_1.TelemetryStore)();
211
- workerEx.worker.terminate();
212
- //@@workerEx.worker = null;
213
- console.log(`Terminated worker: [${workerEx.id}]`);
214
- store.RemoveWorker(workerEx);
215
- delete this.#workersEx[workerEx.id];
216
- }
217
- else {
218
- // Some other runner has already removed the parent worker, do nothing
219
- // console.log(`WORKER ALREADY NULL`);
220
- }
221
- };
222
- #StopRunner = async (workerEx, runnerEx = null) => {
223
- // If runnerEx not provided, Remove the first runner in the collection
224
- if (runnerEx === null) {
225
- const ids = Object.keys(workerEx.runnersEx);
226
- if (ids.length > 0) {
227
- const id = ids[0];
228
- runnerEx = workerEx.runnersEx[id];
229
- }
230
- }
231
- if (runnerEx !== null) {
232
- this.#PostMessageToWorker(workerEx, stspublisherserver_1.PublishMessageCommands.Stop, {
233
- runner: this.#CreateRunnerCopy(runnerEx)
234
- });
235
- runnerEx.publishInstrumentController.LogEx(`Terminating runner: [${runnerEx.id}]`);
236
- const promArray = [];
237
- promArray.push((async () => {
238
- await (0, stsutils_1.Sleep)(100);
239
- return runnerEx.publishInstrumentController.InstrumentTerminate();
240
- })());
241
- const store = (0, TelemetryStore_1.TelemetryStore)();
242
- store.RemoveRunner(workerEx, runnerEx);
243
- delete workerEx.runnersEx[runnerEx.id];
244
- const retVal = await Promise.all(promArray);
245
- console.log(`Removed instrument workers: [${retVal}]`);
246
- /*
247
- // If the removed runner was the last runner, remove the worker
248
- if (Object.keys(workerEx.runnersEx).length === 0) {
249
- this.#TerminateWorker(workerEx);
250
- }
251
- */
252
- }
253
- return true;
254
- };
255
- #StopWorker = async (workerEx) => {
256
- try {
257
- if (workerEx.state !== stsTestWorkerDefinitions_1.IWorkerState.stopped) {
258
- this.#PostMessageToWorker(workerEx, stspublisherserver_1.PublishMessageCommands.Stop, null);
259
- //@@ Now wait until we get an ack back from the worker
260
- // This is because we may be trying to stop BEFORE the worker has had a chance to startup ...
261
- console.log(`Terminating worker: [${workerEx.id}]`);
262
- const promArray = [];
263
- // Terminate only those that are currently running...
264
- const ids = Object.keys(workerEx.runnersEx);
265
- ids.forEach((id) => {
266
- const runnerEx = workerEx.runnersEx[id];
267
- promArray.push(this.#StopRunner(workerEx, runnerEx));
268
- });
269
- await Promise.all(promArray);
270
- this.#TerminateWorker(workerEx);
271
- }
272
- return true;
273
- }
274
- catch (error) {
275
- console.log(`Error in STSTestWorker:StopWorker: [${error}]`);
276
- return false;
277
- }
278
- };
279
- GetNextAvailableWorker = () => {
280
- // Calculate the worker with the least runners
281
- let leastRunnerWorker = null;
282
- for (const [, stsWorker] of Object.entries(this.WorkersEx)) {
283
- if (leastRunnerWorker) {
284
- if (Object.keys(stsWorker.runnersEx).length < Object.keys(leastRunnerWorker.runnersEx).length) {
285
- leastRunnerWorker = stsWorker;
286
- }
287
- }
288
- else {
289
- leastRunnerWorker = stsWorker;
290
- }
291
- }
292
- return leastRunnerWorker;
293
- };
294
- GetBusyWorker = () => {
295
- // Calculate the worker with the least runners
296
- let busyWorker = null;
297
- for (const [, stsWorker] of Object.entries(this.WorkersEx)) {
298
- if (busyWorker) {
299
- if (Object.keys(stsWorker.runnersEx).length > Object.keys(busyWorker.runnersEx).length) {
300
- busyWorker = stsWorker;
301
- }
302
- }
303
- else {
304
- busyWorker = stsWorker;
305
- }
306
- }
307
- return busyWorker;
308
- };
309
- get Options() {
310
- return this.#options;
311
- }
312
- set Options(options) {
313
- this.#options = options;
314
- }
315
- /*
316
- StopRunner = async () => {
317
- // Calculate the worker with the most runners
318
- let largestRunnerWorker: IWorkerEx | null = null;
319
- for (const [, stsWorker] of Object.entries(this.WorkersEx)) {
320
- if (largestRunnerWorker) {
321
- if (Object.keys(stsWorker.runnersEx).length > Object.keys(largestRunnerWorker.runnersEx).length) {
322
- largestRunnerWorker = stsWorker;
323
- }
324
- } else {
325
- largestRunnerWorker = stsWorker;
326
- }
327
- }
328
- if (largestRunnerWorker) largestRunnerWorker.StopRunner();
329
- }
330
- */
331
- /*
332
- StopWorker = async () => {
333
- // Calculate the worker with the least runners
334
- let largestRunnerWorker: IWorkerEx | null = null;
335
- for (const [, stsWorker] of Object.entries(this.WorkersEx)) {
336
- if (largestRunnerWorker) {
337
- if (Object.keys(stsWorker.runnersEx).length < Object.keys(largestRunnerWorker.runnersEx).length) {
338
- largestRunnerWorker = stsWorker;
339
- }
340
- } else {
341
- largestRunnerWorker = stsWorker;
342
- }
343
- }
344
- if (largestRunnerWorker) largestRunnerWorker.Stop();
345
- }
346
- */
347
- StopAllWorkers = async () => {
348
- const promArray = [];
349
- for (const [, stsWorker] of Object.entries(this.WorkersEx)) {
350
- promArray.push(stsWorker.Stop());
351
- }
352
- await Promise.all(promArray);
353
- };
354
- }
355
- exports.STSWorkerManager = STSWorkerManager;
356
- const GetSTSInstrumentControllerPluginKeyWM = () => stspublisherserver_2.STSInstrumentControllerPluginKey;
357
- exports.GetSTSInstrumentControllerPluginKeyWM = GetSTSInstrumentControllerPluginKeyWM;
358
- const CompareSTSInstrumentControllerPluginKeyWM = (val) => val === stspublisherserver_2.STSInstrumentControllerPluginKey;
359
- exports.CompareSTSInstrumentControllerPluginKeyWM = CompareSTSInstrumentControllerPluginKeyWM;
360
- const CompareSTSInstrumentControllerPluginKeyWMEx = () => stspublisherserver_2.STSInstrumentControllerPluginKey === (0, stspublisherserver_2.GetSTSInstrumentControllerPluginKey)();
361
- exports.CompareSTSInstrumentControllerPluginKeyWMEx = CompareSTSInstrumentControllerPluginKeyWMEx;
362
- // Create our use composable. This pattern is also used by vue router library with the useRoute and useRouter composables.
363
- // https://skirtles-code.github.io/vue-examples/patterns/global-properties.html#application-level-provide-inject
364
- const useSTSWorkerManager = () => (0, vue_1.inject)(stsPluginKeys_1.STSWorkerManagerPluginKey);
365
- exports.useSTSWorkerManager = useSTSWorkerManager;
366
- exports.STSWorkerManagerPlugin = {
367
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
368
- install: (app, options) => {
369
- const wm = new STSWorkerManager(app, options);
370
- // Assign plugin instance to global $sts object (legacy method - see below)
371
- if (!app.config.globalProperties.$sts) {
372
- app.config.globalProperties.$sts = {};
373
- }
374
- app.config.globalProperties.$sts[stsPluginKeys_1.STSWorkerManagerPluginKey] = wm;
375
- // Assign App level provide for this STS plugin using symbol keys
376
- // https://vuejs.org/guide/components/provide-inject.html#working-with-symbol-keys
377
- app.provide(stsPluginKeys_1.STSWorkerManagerPluginKey, wm);
378
- }
379
- };
380
- //# sourceMappingURL=workerManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workerManager.js","sourceRoot":"","sources":["../../src/plugins/workerManager.ts"],"names":[],"mappings":"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"}
@@ -1,62 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TelemetryStore = void 0;
4
- const pinia_1 = require("pinia");
5
- // https://pinia.vuejs.org/
6
- // https://seb-l.github.io/pinia-plugin-persist/
7
- exports.TelemetryStore = (0, pinia_1.defineStore)('__sts__TelemetryStore', {
8
- // State
9
- // https://pinia.vuejs.org/core-concepts/state.html
10
- state: () => {
11
- return {
12
- workers: {}
13
- };
14
- },
15
- // Getters
16
- // https://pinia.vuejs.org/core-concepts/getters.html
17
- // Actions
18
- // https://pinia.vuejs.org/core-concepts/actions.html
19
- actions: {
20
- RemoveWorker(workerEx) {
21
- delete this.workers[workerEx.id];
22
- },
23
- RemoveRunner(workerEx, runnerEx) {
24
- const worker = this.workers[workerEx.id];
25
- if (worker && worker.runners) {
26
- delete worker.runners[runnerEx.id];
27
- }
28
- },
29
- Update(workerEx, runnerEx) {
30
- if (!this.workers[workerEx.id]) {
31
- // Create a new telemetry record
32
- this.workers[workerEx.id] = {
33
- id: workerEx.id,
34
- state: workerEx.state,
35
- primaryThreadWorkerOptions: { ...workerEx.primaryThreadWorkerOptions },
36
- workerThreadWorkerOptions: { ...workerEx.workerThreadWorkerOptions },
37
- runners: {}
38
- };
39
- }
40
- const worker = this.workers[workerEx.id];
41
- // Now check for the async runner
42
- if (worker.runners) {
43
- if (!worker.runners[runnerEx.id]) {
44
- // Create a new asyncRunnerInstance telemetry record
45
- const runner = {
46
- id: runnerEx.id,
47
- asyncRunnerContext: { ...runnerEx.asyncRunnerContext },
48
- options: { ...runnerEx.options },
49
- state: runnerEx.state,
50
- instrumentData: { ...runnerEx.instrumentData },
51
- };
52
- worker.runners[runner.id] = runner;
53
- }
54
- else {
55
- const runner = worker.runners[runnerEx.id];
56
- runner.instrumentData = { ...runnerEx.instrumentData };
57
- }
58
- }
59
- }
60
- }
61
- });
62
- //# sourceMappingURL=TelemetryStore.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TelemetryStore.js","sourceRoot":"","sources":["../../src/stores/TelemetryStore.ts"],"names":[],"mappings":";;;AAAA,iCAAmC;AAInC,2BAA2B;AAC3B,gDAAgD;AACnC,QAAA,cAAc,GAAG,IAAA,mBAAW,EAAC,uBAAuB,EAAE;IAC/D,QAAQ;IACR,mDAAmD;IACnD,KAAK,EAAE,GAAoB,EAAE;QACzB,OAAO;YACH,OAAO,EAAE,EAAG;SACf,CAAA;IACL,CAAC;IAED,UAAU;IACV,qDAAqD;IAErD,UAAU;IACV,qDAAqD;IACrD,OAAO,EAAE;QACL,YAAY,CAAC,QAAmB;YAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACrC,CAAC;QAED,YAAY,CAAC,QAAmB,EAAE,QAAmB;YACjD,MAAM,MAAM,GAAY,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAClD,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE;gBAC1B,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;aACtC;QACL,CAAC;QAED,MAAM,CAAC,QAAmB,EAAE,QAAmB;YAC3C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;gBAC5B,gCAAgC;gBAChC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG;oBACxB,EAAE,EAAE,QAAQ,CAAC,EAAE;oBACf,KAAK,EAAE,QAAQ,CAAC,KAAK;oBACrB,0BAA0B,EAAE,EAAE,GAAG,QAAQ,CAAC,0BAA0B,EAAG;oBACvE,yBAAyB,EAAE,EAAE,GAAG,QAAQ,CAAC,yBAAyB,EAAG;oBACrE,OAAO,EAAE,EAAG;iBACJ,CAAA;aACf;YACD,MAAM,MAAM,GAAY,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAClD,iCAAiC;YACjC,IAAI,MAAM,CAAC,OAAO,EAAE;gBAChB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;oBAC9B,oDAAoD;oBACpD,MAAM,MAAM,GAAY;wBACpB,EAAE,EAAE,QAAQ,CAAC,EAAE;wBACf,kBAAkB,EAAE,EAAE,GAAG,QAAQ,CAAC,kBAAkB,EAAE;wBACtD,OAAO,EAAE,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE;wBAChC,KAAK,EAAE,QAAQ,CAAC,KAAK;wBACrB,cAAc,EAAE,EAAE,GAAG,QAAQ,CAAC,cAAc,EAAE;qBACjD,CAAA;oBACD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;iBACtC;qBAAM;oBACH,MAAM,MAAM,GAAY,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;oBACpD,MAAM,CAAC,cAAc,GAAG,EAAE,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAA;iBACzD;aACJ;QACL,CAAC;KACJ;CACJ,CAAC,CAAC"}