roku-debug 0.19.1 → 0.20.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.
package/CHANGELOG.md CHANGED
@@ -6,6 +6,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6
6
 
7
7
 
8
8
 
9
+ ## [0.20.1](https://github.com/rokucommunity/roku-debug/compare/v0.20.0...v0.20.1) - 2023-07-07
10
+ ### Changed
11
+ - Fix rendezvous crash ([#156](https://github.com/rokucommunity/roku-debug/pull/156))
12
+
13
+
14
+
15
+ ## [0.20.0](https://github.com/rokucommunity/roku-debug/compare/v0.19.1...v0.20.0) - 2023-07-05
16
+ ### Added
17
+ - Support sgrendezvous through ECP ([#150](https://github.com/rokucommunity/roku-debug/pull/150))
18
+ ### Changed
19
+ - upgrade to [brighterscript@0.65.1](https://github.com/rokucommunity/brighterscript/blob/master/CHANGELOG.md#0651---2023-06-09)
20
+
21
+
22
+
9
23
  ## [0.19.1](https://github.com/rokucommunity/roku-debug/compare/v0.19.0...v0.19.1) - 2023-06-08
10
24
  ### Changed
11
25
  - Move @types/request to deps to fix d.bs files ([691a7be](https://github.com/rokucommunity/roku-debug/commit/691a7be))
@@ -217,6 +217,12 @@ export interface LaunchConfiguration extends DebugProtocol.LaunchRequestArgument
217
217
  * Show variables that are prefixed with a special prefix designated to be hidden
218
218
  */
219
219
  showHiddenVariables: boolean;
220
+ /**
221
+ * If true: turn on ECP rendezvous tracking, or turn on 8080 rendezvous tracking if ECP unsupported
222
+ * If false, turn off both.
223
+ * @default true
224
+ */
225
+ rendezvousTracking: boolean;
220
226
  }
221
227
  export interface ComponentLibraryConfiguration {
222
228
  /**
@@ -1,11 +1,22 @@
1
1
  import type { SourceLocation } from './managers/LocationManager';
2
2
  export declare class RendezvousTracker {
3
- constructor();
3
+ private deviceInfo;
4
+ constructor(deviceInfo: any);
4
5
  private clientPathsMap;
5
6
  private emitter;
6
7
  private filterOutLogs;
7
8
  private rendezvousBlocks;
8
9
  private rendezvousHistory;
10
+ /**
11
+ * Where should the rendezvous data be tracked from? If ecp, then the ecp ping data will be reported. If telnet, then any
12
+ * rendezvous data from telnet will reported. If 'off', then no data will be reported
13
+ */
14
+ private trackingSource;
15
+ /**
16
+ * Determine if the current Roku device supports the ECP rendezvous tracking feature
17
+ */
18
+ get doesHostSupportEcpRendezvousTracking(): boolean;
19
+ logger: import("@rokucommunity/logger/dist/Logger").Logger;
9
20
  on(eventname: 'rendezvous', handler: (output: RendezvousHistory) => void): any;
10
21
  private emit;
11
22
  get getRendezvousHistory(): RendezvousHistory;
@@ -26,6 +37,32 @@ export declare class RendezvousTracker {
26
37
  * Clears the current rendezvous history
27
38
  */
28
39
  clearHistory(): void;
40
+ private ecpPingTimer;
41
+ startEcpPingTimer(): void;
42
+ stopEcpPingTimer(): void;
43
+ pingEcpRendezvous(): Promise<void>;
44
+ /**
45
+ * Determine if rendezvous tracking is enabled via the 8080 telnet command
46
+ */
47
+ getIsTelnetRendezvousTrackingEnabled(): Promise<boolean>;
48
+ /**
49
+ * Run a SceneGraph logendezvous 8080 command and get the text output
50
+ */
51
+ private runSGLogrendezvousCommand;
52
+ /**
53
+ * Determine if rendezvous tracking is enabled via the ECP command
54
+ */
55
+ getIsEcpRendezvousTrackingEnabled(): Promise<boolean>;
56
+ activate(): Promise<boolean>;
57
+ /**
58
+ * Get the response from an ECP sgrendezvous request from the Roku
59
+ */
60
+ getEcpRendezvous(): Promise<EcpRendezvousData>;
61
+ /**
62
+ * Enable/Disable ECP Rendezvous tracking on the Roku device
63
+ * @returns true if successful, false if there was an issue setting the value
64
+ */
65
+ toggleEcpRendezvousTracking(toggle: 'track' | 'untrack'): Promise<boolean>;
29
66
  /**
30
67
  * Takes the debug output from the device and parses it for any rendezvous information.
31
68
  * Also if consoleOutput was not set to 'full' then any rendezvous output will be filtered from the output.
@@ -33,6 +70,7 @@ export declare class RendezvousTracker {
33
70
  * @returns The debug output after parsing
34
71
  */
35
72
  processLog(log: string): Promise<string>;
73
+ private parseRendezvousLog;
36
74
  /**
37
75
  * Checks the client path map for existing path data and adds new data to the map if not found
38
76
  * @param fileName The filename or path parsed from the rendezvous output
@@ -56,6 +94,10 @@ export declare class RendezvousTracker {
56
94
  * @param duration how long the rendezvous took to complete, if not supplied it is assumed to be zero
57
95
  */
58
96
  private getTime;
97
+ /**
98
+ * Destroy/tear down this class
99
+ */
100
+ destroy(): Promise<void>;
59
101
  }
60
102
  export interface RendezvousHistory {
61
103
  hitCount: number;
@@ -78,5 +120,16 @@ interface RendezvousLineInfo {
78
120
  totalTime: number;
79
121
  type: ElementType;
80
122
  }
123
+ interface EcpRendezvousData {
124
+ trackingEnabled: boolean;
125
+ items: EcpRendezvousItem[];
126
+ }
127
+ interface EcpRendezvousItem {
128
+ id: string;
129
+ startTime: string;
130
+ endTime: string;
131
+ lineNumber: string;
132
+ file: string;
133
+ }
81
134
  declare type ElementType = 'fileInfo' | 'historyInfo' | 'lineInfo';
82
135
  export {};
@@ -4,14 +4,33 @@ exports.RendezvousTracker = void 0;
4
4
  const events_1 = require("events");
5
5
  const path = require("path");
6
6
  const replaceLast = require("replace-last");
7
+ const logging_1 = require("./logging");
8
+ const SceneGraphDebugCommandController_1 = require("./SceneGraphDebugCommandController");
9
+ const xml2js = require("xml2js");
10
+ const util_1 = require("./util");
11
+ const semver = require("semver");
12
+ const telnetRendezvousString = 'on\n';
7
13
  class RendezvousTracker {
8
- constructor() {
14
+ constructor(deviceInfo) {
15
+ this.deviceInfo = deviceInfo;
16
+ /**
17
+ * Where should the rendezvous data be tracked from? If ecp, then the ecp ping data will be reported. If telnet, then any
18
+ * rendezvous data from telnet will reported. If 'off', then no data will be reported
19
+ */
20
+ this.trackingSource = 'off';
21
+ this.logger = logging_1.logger.createLogger(`[${RendezvousTracker.name}]`);
9
22
  this.clientPathsMap = {};
10
23
  this.emitter = new events_1.EventEmitter();
11
24
  this.filterOutLogs = true;
12
25
  this.rendezvousBlocks = {};
13
26
  this.rendezvousHistory = this.createNewRendezvousHistory();
14
27
  }
28
+ /**
29
+ * Determine if the current Roku device supports the ECP rendezvous tracking feature
30
+ */
31
+ get doesHostSupportEcpRendezvousTracking() {
32
+ return semver.gte(this.deviceInfo['software-version'], '11.5.0');
33
+ }
15
34
  on(eventName, handler) {
16
35
  this.emitter.on(eventName, handler);
17
36
  return () => {
@@ -43,9 +62,165 @@ class RendezvousTracker {
43
62
  * Clears the current rendezvous history
44
63
  */
45
64
  clearHistory() {
65
+ this.logger.log('Clear rendezvous history');
46
66
  this.rendezvousHistory = this.createNewRendezvousHistory();
47
67
  this.emit('rendezvous', this.rendezvousHistory);
48
68
  }
69
+ startEcpPingTimer() {
70
+ this.logger.log('Start ecp ping timer');
71
+ if (!this.ecpPingTimer) {
72
+ this.ecpPingTimer = setInterval(() => {
73
+ void this.pingEcpRendezvous();
74
+ }, 1000);
75
+ }
76
+ }
77
+ stopEcpPingTimer() {
78
+ if (this.ecpPingTimer) {
79
+ clearInterval(this.ecpPingTimer);
80
+ this.ecpPingTimer = undefined;
81
+ }
82
+ }
83
+ async pingEcpRendezvous() {
84
+ var _a;
85
+ try {
86
+ // Get ECP rendezvous data, parse it, and send it to event emitter
87
+ let ecpData = await this.getEcpRendezvous();
88
+ const items = (_a = ecpData === null || ecpData === void 0 ? void 0 : ecpData.items) !== null && _a !== void 0 ? _a : [];
89
+ if (items.length > 0) {
90
+ for (let blockInfo of items) {
91
+ let duration = ((parseInt(blockInfo.endTime) - parseInt(blockInfo.startTime)) / 1000).toString();
92
+ this.rendezvousBlocks[blockInfo.id] = {
93
+ fileName: await this.updateClientPathMap(blockInfo.file, parseInt(blockInfo.lineNumber)),
94
+ lineNumber: blockInfo.lineNumber
95
+ };
96
+ this.parseRendezvousLog(this.rendezvousBlocks[blockInfo.id], duration);
97
+ }
98
+ this.emit('rendezvous', this.rendezvousHistory);
99
+ }
100
+ }
101
+ catch (e) {
102
+ //if there was an error pinging rendezvous, log the error but don't bring down the app
103
+ console.error('There was an error fetching rendezvous data', e === null || e === void 0 ? void 0 : e.stack);
104
+ }
105
+ }
106
+ /**
107
+ * Determine if rendezvous tracking is enabled via the 8080 telnet command
108
+ */
109
+ async getIsTelnetRendezvousTrackingEnabled() {
110
+ var _a, _b;
111
+ return ((_b = (_a = (await this.runSGLogrendezvousCommand('status'))) === null || _a === void 0 ? void 0 : _a.trim()) === null || _b === void 0 ? void 0 : _b.toLowerCase()) === 'on';
112
+ }
113
+ /**
114
+ * Run a SceneGraph logendezvous 8080 command and get the text output
115
+ */
116
+ async runSGLogrendezvousCommand(command) {
117
+ let sgDebugCommandController = new SceneGraphDebugCommandController_1.SceneGraphDebugCommandController(this.deviceInfo.host);
118
+ try {
119
+ this.logger.info(`port 8080 command: logrendezvous ${command}`);
120
+ return (await sgDebugCommandController.logrendezvous(command)).result.rawResponse;
121
+ }
122
+ catch (error) {
123
+ this.logger.warn(`An error occurred running SG command "${command}"`, error);
124
+ }
125
+ finally {
126
+ await sgDebugCommandController.end();
127
+ }
128
+ }
129
+ /**
130
+ * Determine if rendezvous tracking is enabled via the ECP command
131
+ */
132
+ async getIsEcpRendezvousTrackingEnabled() {
133
+ let ecpData = await this.getEcpRendezvous();
134
+ return ecpData.trackingEnabled;
135
+ }
136
+ async activate() {
137
+ //if ECP tracking is supported, turn that on
138
+ if (this.doesHostSupportEcpRendezvousTracking) {
139
+ this.logger.log('Activating rendezvous tracking');
140
+ // Toggle ECP tracking off and on to clear the log and then continue tracking
141
+ let untrack = await this.toggleEcpRendezvousTracking('untrack');
142
+ let track = await this.toggleEcpRendezvousTracking('track');
143
+ const isEcpTrackingEnabled = untrack && track && await this.getIsEcpRendezvousTrackingEnabled();
144
+ if (isEcpTrackingEnabled) {
145
+ this.logger.info('ECP tracking is enabled');
146
+ this.trackingSource = 'ecp';
147
+ this.startEcpPingTimer();
148
+ //disable telnet rendezvous tracking since ECP is working
149
+ try {
150
+ await this.runSGLogrendezvousCommand('off');
151
+ }
152
+ catch (_a) { }
153
+ return true;
154
+ }
155
+ }
156
+ this.logger.log('ECP tracking is not supported or had an issue. Trying to use telnet rendezvous tracking');
157
+ //ECP tracking is not supported (or had an issue). Try enabling telnet rendezvous tracking (that only works with run_as_process=0, but worth a try...)
158
+ await this.runSGLogrendezvousCommand('on');
159
+ if (await this.getIsTelnetRendezvousTrackingEnabled()) {
160
+ this.logger.log('telnet rendezvous tracking is enabled');
161
+ this.trackingSource = 'telnet';
162
+ return true;
163
+ }
164
+ else {
165
+ this.logger.log('telnet rendezvous tracking is disabled or encountered an issue. rendezvous tracking is now disabled');
166
+ }
167
+ return false;
168
+ }
169
+ /**
170
+ * Get the response from an ECP sgrendezvous request from the Roku
171
+ */
172
+ async getEcpRendezvous() {
173
+ const url = `http://${this.deviceInfo.host}:${this.deviceInfo.remotePort}/query/sgrendezvous`;
174
+ this.logger.info(`Sending ECP rendezvous request:`, url);
175
+ // Send rendezvous query to ECP
176
+ const rendezvousQuery = await util_1.util.httpGet(url);
177
+ let rendezvousQueryData = rendezvousQuery.body;
178
+ let ecpData = {
179
+ trackingEnabled: false,
180
+ items: []
181
+ };
182
+ this.logger.debug('Parsing rendezvous response', rendezvousQuery);
183
+ // Parse rendezvous query data
184
+ await new Promise((resolve, reject) => {
185
+ xml2js.parseString(rendezvousQueryData, (err, result) => {
186
+ if (err) {
187
+ reject(err);
188
+ }
189
+ else {
190
+ const itemArray = result.sgrendezvous.data[0].item;
191
+ ecpData.trackingEnabled = result.sgrendezvous.data[0]['tracking-enabled'][0];
192
+ if (Array.isArray(itemArray)) {
193
+ ecpData.items = itemArray.map((obj) => ({
194
+ id: obj.id[0],
195
+ startTime: obj['start-tm'][0],
196
+ endTime: obj['end-tm'][0],
197
+ lineNumber: obj['line-number'][0],
198
+ file: obj.file[0]
199
+ }));
200
+ }
201
+ resolve(ecpData);
202
+ }
203
+ });
204
+ });
205
+ this.logger.debug('Parsed ECP rendezvous data:', ecpData);
206
+ return ecpData;
207
+ }
208
+ /**
209
+ * Enable/Disable ECP Rendezvous tracking on the Roku device
210
+ * @returns true if successful, false if there was an issue setting the value
211
+ */
212
+ async toggleEcpRendezvousTracking(toggle) {
213
+ try {
214
+ this.logger.log(`Sending ecp sgrendezvous request: ${toggle}`);
215
+ const response = await util_1.util.httpPost(`http://${this.deviceInfo.host}:${this.deviceInfo.remotePort}/sgrendezvous/${toggle}`,
216
+ //not sure if we need this, but it works...so probably better to just leave it here
217
+ { body: '' });
218
+ return true;
219
+ }
220
+ catch (e) {
221
+ return false;
222
+ }
223
+ }
49
224
  /**
50
225
  * Takes the debug output from the device and parses it for any rendezvous information.
51
226
  * Also if consoleOutput was not set to 'full' then any rendezvous output will be filtered from the output.
@@ -53,7 +228,6 @@ class RendezvousTracker {
53
228
  * @returns The debug output after parsing
54
229
  */
55
230
  async processLog(log) {
56
- var _a, _b;
57
231
  let dataChanged = false;
58
232
  let lines = log.split('\n');
59
233
  for (let i = 0; i < lines.length; i++) {
@@ -61,58 +235,25 @@ class RendezvousTracker {
61
235
  let match = /\[sg\.node\.(BLOCK|UNBLOCK)\s{0,}\] Rendezvous\[(\d+)\](?:\s\w+\n|\s\w{2}\s(.*)\((\d+)\)|[\s\w]+(\d+\.\d+)+|\s\w+)/g.exec(line);
62
236
  // see the following for an explanation for this regex: https://regex101.com/r/In0t7d/6
63
237
  if (match) {
64
- let [, type, id, fileName, lineNumber, duration] = match;
65
- if (type === 'BLOCK') {
66
- // detected the start of a rendezvous event
67
- this.rendezvousBlocks[id] = {
68
- fileName: await this.updateClientPathMap(fileName, parseInt(lineNumber)),
69
- lineNumber: lineNumber
70
- };
71
- }
72
- else if (type === 'UNBLOCK' && this.rendezvousBlocks[id]) {
73
- // detected the completion of a rendezvous event
74
- dataChanged = true;
75
- let blockInfo = this.rendezvousBlocks[id];
76
- let clientLineNumber = (_b = (_a = this.clientPathsMap[blockInfo.fileName]) === null || _a === void 0 ? void 0 : _a.clientLines[blockInfo.lineNumber].toString()) !== null && _b !== void 0 ? _b : blockInfo.lineNumber;
77
- if (this.rendezvousHistory.occurrences[blockInfo.fileName]) {
78
- // file is in history
79
- if (this.rendezvousHistory.occurrences[blockInfo.fileName].occurrences[clientLineNumber]) {
80
- // line is in history, just update it
81
- this.rendezvousHistory.occurrences[blockInfo.fileName].occurrences[clientLineNumber].totalTime += this.getTime(duration);
82
- this.rendezvousHistory.occurrences[blockInfo.fileName].occurrences[clientLineNumber].hitCount++;
83
- }
84
- else {
85
- // new line to be added to a file in history
86
- this.rendezvousHistory.occurrences[blockInfo.fileName].occurrences[clientLineNumber] = this.createLineObject(blockInfo.fileName, parseInt(clientLineNumber), duration);
87
- }
88
- }
89
- else {
90
- // new file to be added to the history
91
- this.rendezvousHistory.occurrences[blockInfo.fileName] = {
92
- occurrences: {
93
- [clientLineNumber]: this.createLineObject(blockInfo.fileName, parseInt(clientLineNumber), duration)
94
- },
95
- hitCount: 0,
96
- totalTime: 0,
97
- type: 'fileInfo',
98
- zeroCostHitCount: 0
238
+ if (this.trackingSource === 'telnet') {
239
+ let [, type, id, fileName, lineNumber, duration] = match;
240
+ if (type === 'BLOCK') {
241
+ // detected the start of a rendezvous event
242
+ this.rendezvousBlocks[id] = {
243
+ fileName: await this.updateClientPathMap(fileName, parseInt(lineNumber)),
244
+ lineNumber: lineNumber
99
245
  };
100
246
  }
101
- // how much time to add to the files total time
102
- let timeToAdd = this.getTime(duration);
103
- // increment hit count and add to the total time for this file
104
- this.rendezvousHistory.occurrences[blockInfo.fileName].hitCount++;
105
- this.rendezvousHistory.hitCount++;
106
- // increment hit count and add to the total time for the history as a whole
107
- this.rendezvousHistory.occurrences[blockInfo.fileName].totalTime += timeToAdd;
108
- this.rendezvousHistory.totalTime += timeToAdd;
109
- if (timeToAdd === 0) {
110
- this.rendezvousHistory.occurrences[blockInfo.fileName].zeroCostHitCount++;
111
- this.rendezvousHistory.zeroCostHitCount++;
247
+ else if (type === 'UNBLOCK' && this.rendezvousBlocks[id]) {
248
+ // detected the completion of a rendezvous event
249
+ dataChanged = true;
250
+ let blockInfo = this.rendezvousBlocks[id];
251
+ this.parseRendezvousLog(blockInfo, duration);
252
+ // remove this event from pre history tracking
253
+ delete this.rendezvousBlocks[id];
112
254
  }
113
- // remove this event from pre history tracking
114
- delete this.rendezvousBlocks[id];
115
255
  }
256
+ // still need to empty logs even if rendezvous tracking through ECP is enabled
116
257
  if (this.filterOutLogs) {
117
258
  lines.splice(i--, 1);
118
259
  }
@@ -123,6 +264,46 @@ class RendezvousTracker {
123
264
  }
124
265
  return lines.join('\n');
125
266
  }
267
+ parseRendezvousLog(blockInfo, duration) {
268
+ var _a, _b;
269
+ let clientLineNumber = (_b = (_a = this.clientPathsMap[blockInfo.fileName]) === null || _a === void 0 ? void 0 : _a.clientLines[blockInfo.lineNumber].toString()) !== null && _b !== void 0 ? _b : blockInfo.lineNumber;
270
+ if (this.rendezvousHistory.occurrences[blockInfo.fileName]) {
271
+ // file is in history
272
+ if (this.rendezvousHistory.occurrences[blockInfo.fileName].occurrences[clientLineNumber]) {
273
+ // line is in history, just update it
274
+ this.rendezvousHistory.occurrences[blockInfo.fileName].occurrences[clientLineNumber].totalTime += this.getTime(duration);
275
+ this.rendezvousHistory.occurrences[blockInfo.fileName].occurrences[clientLineNumber].hitCount++;
276
+ }
277
+ else {
278
+ // new line to be added to a file in history
279
+ this.rendezvousHistory.occurrences[blockInfo.fileName].occurrences[clientLineNumber] = this.createLineObject(blockInfo.fileName, parseInt(clientLineNumber), duration);
280
+ }
281
+ }
282
+ else {
283
+ // new file to be added to the history
284
+ this.rendezvousHistory.occurrences[blockInfo.fileName] = {
285
+ occurrences: {
286
+ [clientLineNumber]: this.createLineObject(blockInfo.fileName, parseInt(clientLineNumber), duration)
287
+ },
288
+ hitCount: 0,
289
+ totalTime: 0,
290
+ type: 'fileInfo',
291
+ zeroCostHitCount: 0
292
+ };
293
+ }
294
+ // how much time to add to the files total time
295
+ let timeToAdd = this.getTime(duration);
296
+ // increment hit count and add to the total time for this file
297
+ this.rendezvousHistory.occurrences[blockInfo.fileName].hitCount++;
298
+ this.rendezvousHistory.hitCount++;
299
+ // increment hit count and add to the total time for the history as a whole
300
+ this.rendezvousHistory.occurrences[blockInfo.fileName].totalTime += timeToAdd;
301
+ this.rendezvousHistory.totalTime += timeToAdd;
302
+ if (timeToAdd === 0) {
303
+ this.rendezvousHistory.occurrences[blockInfo.fileName].zeroCostHitCount++;
304
+ this.rendezvousHistory.zeroCostHitCount++;
305
+ }
306
+ }
126
307
  /**
127
308
  * Checks the client path map for existing path data and adds new data to the map if not found
128
309
  * @param fileName The filename or path parsed from the rendezvous output
@@ -214,6 +395,25 @@ class RendezvousTracker {
214
395
  getTime(duration) {
215
396
  return duration ? parseFloat(duration) : 0.000;
216
397
  }
398
+ /**
399
+ * Destroy/tear down this class
400
+ */
401
+ async destroy() {
402
+ var _a;
403
+ (_a = this.emitter) === null || _a === void 0 ? void 0 : _a.removeAllListeners();
404
+ this.stopEcpPingTimer();
405
+ //turn off ECP rendezvous tracking
406
+ if (this.doesHostSupportEcpRendezvousTracking) {
407
+ await this.toggleEcpRendezvousTracking('untrack');
408
+ }
409
+ //turn off telnet rendezvous tracking
410
+ try {
411
+ await this.runSGLogrendezvousCommand('off');
412
+ }
413
+ catch (e) {
414
+ this.logger.error('Failed to disable logrendezvous over 8080', e);
415
+ }
416
+ }
217
417
  }
218
418
  exports.RendezvousTracker = RendezvousTracker;
219
419
  //# sourceMappingURL=RendezvousTracker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RendezvousTracker.js","sourceRoot":"","sources":["../src/RendezvousTracker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RendezvousTracker.js","sourceRoot":"","sources":["../src/RendezvousTracker.ts"],"names":[],"mappings":";;;AAAA,mCAAsC;AACtC,6BAA6B;AAC7B,4CAA4C;AAE5C,uCAAmC;AACnC,yFAAsF;AACtF,iCAAiC;AAEjC,iCAA8B;AAC9B,iCAAiC;AAEjC,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAEtC,MAAa,iBAAiB;IAC1B,YACY,UAAU;QAAV,eAAU,GAAV,UAAU,CAAA;QAetB;;;WAGG;QACK,mBAAc,GAA6B,KAAK,CAAC;QASlD,WAAM,GAAG,gBAAM,CAAC,YAAY,CAAC,IAAI,iBAAiB,CAAC,IAAI,GAAG,CAAC,CAAC;QA1B/D,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,qBAAY,EAAE,CAAC;QAClC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,0BAA0B,EAAE,CAAC;IAC/D,CAAC;IAcD;;OAEG;IACH,IAAW,oCAAoC;QAC3C,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAW,EAAE,QAAQ,CAAC,CAAC;IAC/E,CAAC;IAIM,EAAE,CAAC,SAAiB,EAAE,OAA+B;QACxD,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACpC,OAAO,GAAG,EAAE;YACR,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE;gBAC5B,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;aACnD;QACL,CAAC,CAAC;IACN,CAAC;IAEO,IAAI,CAAC,SAAuB,EAAE,IAAK;QACvC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,IAAW,oBAAoB;QAC3B,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAClC,CAAC;IAOD;;OAEG;IACI,qBAAqB,CAAC,aAAoF;QAC7G,IAAI,CAAC,iBAAiB,GAAG,aAAa,CAAC;IAC3C,CAAC;IAED;;;OAGG;IACI,gBAAgB,CAAC,WAAmB;QACvC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACI,YAAY;QACf,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QAC5C,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAC3D,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACpD,CAAC;IAIM,iBAAiB;QACpB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACpB,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;gBACjC,KAAK,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAClC,CAAC,EAAE,IAAI,CAAC,CAAC;SACZ;IACL,CAAC;IAEM,gBAAgB;QACnB,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACjC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;SACjC;IACL,CAAC;IAEM,KAAK,CAAC,iBAAiB;;QAC1B,IAAI;YACA,kEAAkE;YAClE,IAAI,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC5C,MAAM,KAAK,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,mCAAI,EAAE,CAAC;YACnC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBAClB,KAAK,IAAI,SAAS,IAAI,KAAK,EAAE;oBACzB,IAAI,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;oBACjG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG;wBAClC,QAAQ,EAAE,MAAM,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;wBACxF,UAAU,EAAE,SAAS,CAAC,UAAU;qBACnC,CAAC;oBACF,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;iBAC1E;gBACD,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;aACnD;SACJ;QAAC,OAAO,CAAC,EAAE;YACR,sFAAsF;YACtF,OAAO,CAAC,KAAK,CAAC,6CAA6C,EAAE,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,KAAK,CAAC,CAAC;SAC1E;IACL,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,oCAAoC;;QAC7C,OAAO,CAAA,MAAA,MAAA,CAAC,MAAM,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC,0CAAE,IAAI,EAAE,0CAAE,WAAW,EAAE,MAAK,IAAI,CAAC;IAC5F,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,yBAAyB,CAAC,OAAgC;QACpE,IAAI,wBAAwB,GAAG,IAAI,mEAAgC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAc,CAAC,CAAC;QACpG,IAAI;YACA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oCAAoC,OAAO,EAAE,CAAC,CAAC;YAChE,OAAO,CAAC,MAAM,wBAAwB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;SACrF;QAAC,OAAO,KAAK,EAAE;YACZ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yCAAyC,OAAO,GAAG,EAAE,KAAK,CAAC,CAAC;SAChF;gBAAS;YACN,MAAM,wBAAwB,CAAC,GAAG,EAAE,CAAC;SACxC;IACL,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,iCAAiC;QAC1C,IAAI,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC5C,OAAO,OAAO,CAAC,eAAe,CAAC;IACnC,CAAC;IAEM,KAAK,CAAC,QAAQ;QACjB,4CAA4C;QAC5C,IAAI,IAAI,CAAC,oCAAoC,EAAE;YAC3C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;YAClD,6EAA6E;YAC7E,IAAI,OAAO,GAAG,MAAM,IAAI,CAAC,2BAA2B,CAAC,SAAS,CAAC,CAAC;YAChE,IAAI,KAAK,GAAG,MAAM,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC,CAAC;YAC5D,MAAM,oBAAoB,GAAG,OAAO,IAAI,KAAK,IAAI,MAAM,IAAI,CAAC,iCAAiC,EAAE,CAAC;YAChG,IAAI,oBAAoB,EAAE;gBACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;gBAC5C,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;gBAC5B,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAEzB,yDAAyD;gBACzD,IAAI;oBACA,MAAM,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;iBAC/C;gBAAC,WAAM,GAAG;gBACX,OAAO,IAAI,CAAC;aACf;SACJ;QAED,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,yFAAyF,CAAC,CAAC;QAC3G,sJAAsJ;QACtJ,MAAM,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,MAAM,IAAI,CAAC,oCAAoC,EAAE,EAAE;YACnD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;YACzD,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC;YAC/B,OAAO,IAAI,CAAC;SACf;aAAM;YACH,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,qGAAqG,CAAC,CAAC;SAC1H;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,gBAAgB;QACzB,MAAM,GAAG,GAAG,UAAU,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,qBAAqB,CAAC;QAC9F,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE,GAAG,CAAC,CAAC;QACzD,+BAA+B;QAC/B,MAAM,eAAe,GAAG,MAAM,WAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChD,IAAI,mBAAmB,GAAG,eAAe,CAAC,IAAI,CAAC;QAC/C,IAAI,OAAO,GAAsB;YAC7B,eAAe,EAAE,KAAK;YACtB,KAAK,EAAE,EAAE;SACZ,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE,eAAe,CAAC,CAAC;QAClE,8BAA8B;QAC9B,MAAM,IAAI,OAAO,CAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrD,MAAM,CAAC,WAAW,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;gBACpD,IAAI,GAAG,EAAE;oBACL,MAAM,CAAC,GAAG,CAAC,CAAC;iBACf;qBAAM;oBACH,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;oBACnD,OAAO,CAAC,eAAe,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC7E,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;wBAC1B,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,CAAC;4BACzC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;4BACb,SAAS,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;4BAC7B,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;4BACzB,UAAU,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;4BACjC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;yBACpB,CAAC,CAAC,CAAC;qBACP;oBACD,OAAO,CAAC,OAAO,CAAC,CAAC;iBACpB;YACL,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC;QAC1D,OAAO,OAAO,CAAC;IACnB,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,2BAA2B,CAAC,MAA2B;QAChE,IAAI;YACA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,qCAAqC,MAAM,EAAE,CAAC,CAAC;YAC/D,MAAM,QAAQ,GAAG,MAAM,WAAI,CAAC,QAAQ,CAChC,UAAU,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,iBAAiB,MAAM,EAAE;YACrF,mFAAmF;YACnF,EAAE,IAAI,EAAE,EAAE,EAAE,CACf,CAAC;YACF,OAAO,IAAI,CAAC;SACf;QAAC,OAAO,CAAC,EAAE;YACR,OAAO,KAAK,CAAC;SAChB;IACL,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,UAAU,CAAC,GAAW;QAC/B,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACnC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,KAAK,GAAG,qHAAqH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7I,uFAAuF;YACvF,IAAI,KAAK,EAAE;gBACP,IAAI,IAAI,CAAC,cAAc,KAAK,QAAQ,EAAE;oBAClC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC;oBACzD,IAAI,IAAI,KAAK,OAAO,EAAE;wBAClB,2CAA2C;wBAC3C,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,GAAG;4BACxB,QAAQ,EAAE,MAAM,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;4BACxE,UAAU,EAAE,UAAU;yBACzB,CAAC;qBACL;yBAAM,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE;wBACxD,gDAAgD;wBAChD,WAAW,GAAG,IAAI,CAAC;wBACnB,IAAI,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;wBAC1C,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;wBAE7C,8CAA8C;wBAC9C,OAAO,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;qBACpC;iBACJ;gBACD,+EAA+E;gBAC/E,IAAI,IAAI,CAAC,aAAa,EAAE;oBACpB,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;iBACxB;aACJ;SACJ;QACD,IAAI,WAAW,EAAE;YACb,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;SACnD;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAEO,kBAAkB,CAAC,SAAmD,EAAE,QAAgB;;QAC5F,IAAI,gBAAgB,GAAW,MAAA,MAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,QAAQ,CAAC,0CAAE,WAAW,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,EAAE,mCAAI,SAAS,CAAC,UAAU,CAAC;QAC7I,IAAI,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;YACxD,qBAAqB;YACrB,IAAI,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,gBAAgB,CAAC,EAAE;gBACtF,qCAAqC;gBACrC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACzH,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE,CAAC;aACnG;iBAAM;gBACH,4CAA4C;gBAC5C,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,QAAQ,CAAC,CAAC;aAC1K;SACJ;aAAM;YACH,sCAAsC;YACtC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG;gBACrD,WAAW,EAAE;oBACT,CAAC,gBAAgB,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,QAAQ,CAAC;iBACtG;gBACD,QAAQ,EAAE,CAAC;gBACX,SAAS,EAAE,CAAC;gBACZ,IAAI,EAAE,UAAU;gBAChB,gBAAgB,EAAE,CAAC;aACtB,CAAC;SACL;QAED,+CAA+C;QAC/C,IAAI,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEvC,8DAA8D;QAC9D,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;QAClE,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC;QAElC,2EAA2E;QAC3E,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,SAAS,IAAI,SAAS,CAAC;QAC9E,IAAI,CAAC,iBAAiB,CAAC,SAAS,IAAI,SAAS,CAAC;QAE9C,IAAI,SAAS,KAAK,CAAC,EAAE;YACjB,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,gBAAgB,EAAE,CAAC;YAC1E,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,CAAC;SAC7C;IACL,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,mBAAmB,CAAC,QAAgB,EAAE,UAAkB;QAClE,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,aAAqB,CAAC;QAC1B,IAAI,aAAqB,CAAC;QAE1B,6DAA6D;QAC7D,IAAI,UAAU,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,MAAM,IAAI,UAAU,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE;YACpF,oEAAoE;YACpE,aAAa,GAAG,WAAW,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAC9D,aAAa,GAAG,WAAW,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAE9D,uDAAuD;YACvD,IAAI,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE;gBACpC,QAAQ,GAAG,aAAa,CAAC;aAC5B;iBAAM,IAAI,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE;gBAC3C,QAAQ,GAAG,aAAa,CAAC;aAC5B;SACJ;QAED,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE;YAChC,kCAAkC;YAClC,IAAI,aAAa,IAAI,aAAa,EAAE;gBAChC,2CAA2C;gBAC3C,2EAA2E;gBAC3E,aAAa,GAAG,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;gBACnF,IAAI,aAAa,EAAE;oBACf,QAAQ,GAAG,aAAa,CAAC;iBAC5B;qBAAM;oBACH,aAAa,GAAG,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;oBACnF,IAAI,aAAa,EAAE;wBACf,QAAQ,GAAG,aAAa,CAAC;qBAC5B;iBACJ;aACJ;YACD,IAAI,cAAc,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YACxE,IAAI,cAAc,EAAE;gBAChB,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG;oBAC5B,UAAU,EAAE,cAAc,CAAC,QAAQ;oBACnC,WAAW,EAAE;wBACT,yCAAyC;wBACzC,CAAC,UAAU,CAAC,EAAE,cAAc,CAAC,UAAU;qBAC1C;iBACJ,CAAC;aACL;SACJ;aAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE;YAC/D,wCAAwC;YACxC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC;SAC3H;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED;;OAEG;IACK,0BAA0B;QAC9B,OAAO;YACH,QAAQ,EAAE,CAAC;YACX,WAAW,EAAE,EAAE;YACf,SAAS,EAAE,IAAI;YACf,IAAI,EAAE,aAAa;YACnB,gBAAgB,EAAE,CAAC;SACtB,CAAC;IACN,CAAC;IAED;;;;;OAKG;IACK,gBAAgB,CAAC,QAAgB,EAAE,UAAkB,EAAE,QAAiB;;QAC5E,OAAO;YACH,gBAAgB,EAAE,UAAU;YAC5B,UAAU,EAAE,MAAA,MAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,0CAAE,UAAU,mCAAI,QAAQ;YACjE,QAAQ,EAAE,CAAC;YACX,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;YACjC,IAAI,EAAE,UAAU;SACnB,CAAC;IACN,CAAC;IAED;;;OAGG;IACK,OAAO,CAAC,QAAiB;QAC7B,OAAO,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACnD,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,OAAO;;QAChB,MAAA,IAAI,CAAC,OAAO,0CAAE,kBAAkB,EAAE,CAAC;QACnC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,kCAAkC;QAClC,IAAI,IAAI,CAAC,oCAAoC,EAAE;YAC3C,MAAM,IAAI,CAAC,2BAA2B,CAAC,SAAS,CAAC,CAAC;SACrD;QAED,qCAAqC;QACrC,IAAI;YACA,MAAM,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;SAC/C;QAAC,OAAO,CAAC,EAAE;YACR,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2CAA2C,EAAE,CAAC,CAAC,CAAC;SACrE;IACL,CAAC;CACJ;AAzbD,8CAybC"}
@@ -1,8 +1,7 @@
1
1
  import type { ConstructorOptions, ProtocolVersionDetails } from '../debugProtocol/Debugger';
2
2
  import type { BSDebugDiagnostic } from '../CompileErrorProcessor';
3
- import type { RendezvousHistory } from '../RendezvousTracker';
3
+ import type { RendezvousTracker } from '../RendezvousTracker';
4
4
  import type { ChanperfData } from '../ChanperfTracker';
5
- import type { SourceLocation } from '../managers/LocationManager';
6
5
  import type { AdapterOptions, HighLevelType, RokuAdapterEvaluateResponse } from '../interfaces';
7
6
  import type { BreakpointManager } from '../managers/BreakpointManager';
8
7
  import type { ProjectManager } from '../managers/ProjectManager';
@@ -14,7 +13,8 @@ export declare class DebugProtocolAdapter {
14
13
  private options;
15
14
  private projectManager;
16
15
  private breakpointManager;
17
- constructor(options: AdapterOptions & ConstructorOptions, projectManager: ProjectManager, breakpointManager: BreakpointManager);
16
+ private rendezvousTracker;
17
+ constructor(options: AdapterOptions & ConstructorOptions, projectManager: ProjectManager, breakpointManager: BreakpointManager, rendezvousTracker: RendezvousTracker);
18
18
  private logger;
19
19
  /**
20
20
  * Indicates whether the adapter has successfully established a connection with the device
@@ -30,7 +30,6 @@ export declare class DebugProtocolAdapter {
30
30
  private compileErrorProcessor;
31
31
  private emitter;
32
32
  private chanperfTracker;
33
- private rendezvousTracker;
34
33
  private socketDebugger;
35
34
  private nextFrameId;
36
35
  private stackFramesCache;
@@ -54,7 +53,6 @@ export declare class DebugProtocolAdapter {
54
53
  on(eventName: 'connected', handler: (params: boolean) => void): any;
55
54
  on(eventname: 'console-output', handler: (output: string) => void): any;
56
55
  on(eventname: 'protocol-version', handler: (output: ProtocolVersionDetails) => void): any;
57
- on(eventname: 'rendezvous', handler: (output: RendezvousHistory) => void): any;
58
56
  on(eventName: 'runtime-error', handler: (error: BrightScriptRuntimeError) => void): any;
59
57
  on(eventName: 'suspend', handler: () => void): any;
60
58
  on(eventName: 'start', handler: () => void): any;
@@ -134,10 +132,6 @@ export declare class DebugProtocolAdapter {
134
132
  * Disconnect from the telnet session and unset all objects
135
133
  */
136
134
  destroy(): Promise<void>;
137
- /**
138
- * Passes the debug functions used to locate the client files and lines to the RendezvousTracker
139
- */
140
- registerSourceLocator(sourceLocator: (debuggerPath: string, lineNumber: number) => Promise<SourceLocation>): void;
141
135
  /**
142
136
  * Passes the log level down to the RendezvousTracker and ChanperfTracker
143
137
  * @param outputLevel the consoleOutput from the launch config
@@ -5,7 +5,6 @@ const Debugger_1 = require("../debugProtocol/Debugger");
5
5
  const EventEmitter = require("events");
6
6
  const net_1 = require("net");
7
7
  const CompileErrorProcessor_1 = require("../CompileErrorProcessor");
8
- const RendezvousTracker_1 = require("../RendezvousTracker");
9
8
  const ChanperfTracker_1 = require("../ChanperfTracker");
10
9
  const Constants_1 = require("../debugProtocol/Constants");
11
10
  const util_1 = require("../util");
@@ -16,10 +15,11 @@ const ActionQueue_1 = require("../managers/ActionQueue");
16
15
  * A class that connects to a Roku device over telnet debugger port and provides a standardized way of interacting with it.
17
16
  */
18
17
  class DebugProtocolAdapter {
19
- constructor(options, projectManager, breakpointManager) {
18
+ constructor(options, projectManager, breakpointManager, rendezvousTracker) {
20
19
  this.options = options;
21
20
  this.projectManager = projectManager;
22
21
  this.breakpointManager = breakpointManager;
22
+ this.rendezvousTracker = rendezvousTracker;
23
23
  this.logger = logging_1.logger.createLogger(`[${DebugProtocolAdapter.name}]`);
24
24
  /**
25
25
  * Due to casing issues with the variables request on some versions of the debug protocol, we first need to try the request in the supplied case.
@@ -43,17 +43,12 @@ class DebugProtocolAdapter {
43
43
  util_1.util.normalizeAdapterOptions(this.options);
44
44
  this.emitter = new EventEmitter();
45
45
  this.chanperfTracker = new ChanperfTracker_1.ChanperfTracker();
46
- this.rendezvousTracker = new RendezvousTracker_1.RendezvousTracker();
47
46
  this.compileErrorProcessor = new CompileErrorProcessor_1.CompileErrorProcessor();
48
47
  this.connected = false;
49
48
  // watch for chanperf events
50
49
  this.chanperfTracker.on('chanperf', (output) => {
51
50
  this.emit('chanperf', output);
52
51
  });
53
- // watch for rendezvous events
54
- this.rendezvousTracker.on('rendezvous', (output) => {
55
- this.emit('rendezvous', output);
56
- });
57
52
  }
58
53
  /**
59
54
  * Get the version of the protocol for the Roku device we're currently connected to.
@@ -550,13 +545,6 @@ class DebugProtocolAdapter {
550
545
  }
551
546
  this.emitter = undefined;
552
547
  }
553
- // #region Rendezvous Tracker pass though functions
554
- /**
555
- * Passes the debug functions used to locate the client files and lines to the RendezvousTracker
556
- */
557
- registerSourceLocator(sourceLocator) {
558
- this.rendezvousTracker.registerSourceLocator(sourceLocator);
559
- }
560
548
  /**
561
549
  * Passes the log level down to the RendezvousTracker and ChanperfTracker
562
550
  * @param outputLevel the consoleOutput from the launch config
@@ -577,7 +565,6 @@ class DebugProtocolAdapter {
577
565
  clearChanperfHistory() {
578
566
  this.chanperfTracker.clearHistory();
579
567
  }
580
- // #endregion
581
568
  async syncBreakpoints() {
582
569
  //we can't send breakpoints unless we're stopped (or in a protocol version that supports sending them while running).
583
570
  //So...if we're not stopped, quit now. (we'll get called again when the stop event happens)