active-connect-ng2 0.2.45 → 0.2.47

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.
@@ -35,7 +35,7 @@ export class WebsocketClient {
35
35
  url = protocol + '//' + document.location.hostname + port + '/wss';
36
36
  }
37
37
  this.url = url;
38
- this.disconnect(true);
38
+ this.disconnect(false);
39
39
  this.connect(this.url);
40
40
  }
41
41
  connect(url) {
@@ -88,7 +88,7 @@ export class WebsocketClient {
88
88
  setTimeout(() => {
89
89
  this.resetRequestedState();
90
90
  this.requestStack.forEach((e) => {
91
- this.sendToSocket(e.method, e.data);
91
+ this.sendToSocket(e.method, e.data, false, e.messageId);
92
92
  this.requestStack = this.requestStack.filter((e1) => e1 != e);
93
93
  });
94
94
  }, 2000);
@@ -102,7 +102,7 @@ export class WebsocketClient {
102
102
  if (this.connectionEstablishedOnce) {
103
103
  // reset requested state for outbounds
104
104
  WebsocketClient.resetRequestedStateCallbacks.forEach((reset) => {
105
- reset();
105
+ reset(this);
106
106
  });
107
107
  }
108
108
  else {
@@ -124,6 +124,7 @@ export class WebsocketClient {
124
124
  this.ws.onopen = () => {
125
125
  this.logEntry('TCP/HTTP:CONNECTED');
126
126
  this.Connected = true;
127
+ this.closed = false;
127
128
  };
128
129
  this.ws.onmessage = (e) => {
129
130
  this.messageReceived(JsonParser.parse(e.data.toString()));
@@ -141,8 +142,8 @@ export class WebsocketClient {
141
142
  }
142
143
  };
143
144
  }
144
- sendToSocket(method, data, dontEnsureTransmission) {
145
- const messageId = ++this.messageId;
145
+ sendToSocket(method, data, dontEnsureTransmission, forcedMessageId) {
146
+ const messageId = forcedMessageId ?? ++this.messageId;
146
147
  if (this.ws.readyState != this.ws.OPEN) {
147
148
  if (!dontEnsureTransmission)
148
149
  this.requestStack.push({ method, data, messageId });
@@ -186,7 +187,7 @@ export class WebsocketClient {
186
187
  }
187
188
  });
188
189
  }
189
- messageReceived({ method, value, messageId, specificHash, inserted, updated, deleted, length, }) {
190
+ messageReceived({ method, value, messageId, specificHash, inserted, updated, deleted, length }) {
190
191
  this.logEntry('RECEIVED:' + method);
191
192
  if (method == '___cache') {
192
193
  this.handleOutboundCacheRequest(value);
@@ -238,13 +239,13 @@ export class WebsocketClient {
238
239
  if (item) {
239
240
  this.send('___cache', {
240
241
  method,
241
- specificHash: item.specificHash || null,
242
+ specificHash: item.specificHash || null
242
243
  });
243
244
  }
244
245
  else {
245
246
  this.send('___cache', {
246
247
  method,
247
- specificHash: null,
248
+ specificHash: null
248
249
  });
249
250
  }
250
251
  });
@@ -252,7 +253,7 @@ export class WebsocketClient {
252
253
  catch (e) {
253
254
  this.send('___cache', {
254
255
  method,
255
- specificHash: null,
256
+ specificHash: null
256
257
  });
257
258
  console.error('ActiveConnect: ' + e);
258
259
  }
@@ -260,7 +261,7 @@ export class WebsocketClient {
260
261
  else {
261
262
  this.send('___cache', {
262
263
  method,
263
- specificHash: null,
264
+ specificHash: null
264
265
  });
265
266
  console.error('Active-Connect: Caching not possible as the indexedDB has not been initialized');
266
267
  }
@@ -281,7 +282,7 @@ export class WebsocketClient {
281
282
  const browser = this.getBrowser();
282
283
  const os = this.getOS();
283
284
  this.send('___browser', {
284
- browser: `${browser.name} ${browser.version} ${os}`,
285
+ browser: `${browser.name} ${browser.version} ${os}`
285
286
  });
286
287
  }
287
288
  getBrowser() {
@@ -303,7 +304,7 @@ export class WebsocketClient {
303
304
  }
304
305
  return {
305
306
  name: M[0],
306
- version: M[1],
307
+ version: M[1]
307
308
  };
308
309
  }
309
310
  getOS() {
@@ -357,4 +358,4 @@ WebsocketClient.outbounds = new Map();
357
358
  WebsocketClient.handles = new Map();
358
359
  WebsocketClient.onSuccessHandlers = [];
359
360
  WebsocketClient.onReconnectCallback = [];
360
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWN0aXZlLWNvbm5lY3QtbmcyL3NyYy9saWIvd2Vic29ja2V0L2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFaEQsTUFBTSxPQUFPLGVBQWU7SUFJMUIsWUFDVSxHQUFZLEVBQ1osYUFBdUIsRUFDeEIsU0FBK0I7UUFGOUIsUUFBRyxHQUFILEdBQUcsQ0FBUztRQUNaLGtCQUFhLEdBQWIsYUFBYSxDQUFVO1FBQ3hCLGNBQVMsR0FBVCxTQUFTLENBQXNCO1FBMkRoQyxpQkFBWSxHQUFVLEVBQUUsQ0FBQztRQUN6Qix1QkFBa0IsR0FBMEMsRUFBRSxDQUFDO1FBUS9ELFdBQU0sR0FBRyxFQUFFLENBQUM7UUFvQ1osOEJBQXlCLEdBQVksS0FBSyxDQUFDO1FBNEMzQyxjQUFTLEdBQVcsQ0FBQyxDQUFDO1FBeUN0QixvQkFBZSxHQUEwQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ25ELG9CQUFlLEdBQTBDLElBQUksR0FBRyxFQUFFLENBQUM7UUEwT3BFLFdBQU0sR0FBRyxLQUFLLENBQUM7UUF0YXBCLElBQUksYUFBYTtZQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRVMsTUFBTSxDQUFDLEdBQXVCO1FBQ3RDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDUixJQUFJLFFBQVEsQ0FBQztZQUNiLElBQUksSUFBSSxDQUFDO1lBQ1QsUUFBUSxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtnQkFDbEMsS0FBSyxRQUFRLENBQUMsQ0FBQztvQkFDYixRQUFRLEdBQUcsTUFBTSxDQUFDO29CQUNsQixJQUFJLEdBQUcsTUFBTSxDQUFDO29CQUNk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cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmd4SW5kZXhlZERCU2VydmljZSB9IGZyb20gJ25neC1pbmRleGVkLWRiJztcclxuaW1wb3J0IHsgRGVjb3JhYmxlRnVuY3Rpb24gfSBmcm9tICcuL2RlY29yYXRvcnMvZnVuY3Rpb24nO1xyXG5pbXBvcnQgeyBKc29uUGFyc2VyIH0gZnJvbSAnLi9qc29uL2pzb24tcGFyc2VyJztcclxuXHJcbmV4cG9ydCBjbGFzcyBXZWJzb2NrZXRDbGllbnQge1xyXG4gIHdzITogV2ViU29ja2V0O1xyXG4gIHBvb2whOiB7IFdzc0Nvbm5lY3RlZDogYm9vbGVhbiB9IHwgbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHVybD86IHN0cmluZyxcclxuICAgIHByaXZhdGUgc3VwcG9ydHNDYWNoZT86IGJvb2xlYW4sXHJcbiAgICBwdWJsaWMgZGJTZXJ2aWNlPzogTmd4SW5kZXhlZERCU2VydmljZSxcclxuICApIHtcclxuICAgIGlmIChzdXBwb3J0c0NhY2hlKSB0aGlzLmluaXRDYWNoZSgpO1xyXG4gICAgdGhpcy5zZXRVcmwodGhpcy51cmwpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHNldFVybCh1cmw6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKCF1cmwpIHtcclxuICAgICAgbGV0IHByb3RvY29sO1xyXG4gICAgICBsZXQgcG9ydDtcclxuICAgICAgc3dpdGNoIChkb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbCkge1xyXG4gICAgICAgIGNhc2UgJ2h0dHBzOic6IHtcclxuICAgICAgICAgIHByb3RvY29sID0gJ3dzczonO1xyXG4gICAgICAgICAgcG9ydCA9ICc6NDQzJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgICBwcm90b2NvbCA9ICd3czonO1xyXG4gICAgICAgICAgcG9ydCA9ICc6ODAnO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHVybCA9IHByb3RvY29sICsgJy8vJyArIGRvY3VtZW50LmxvY2F0aW9uLmhvc3RuYW1lICsgcG9ydCArICcvd3NzJztcclxuICAgIH1cclxuICAgIHRoaXMudXJsID0gdXJsO1xyXG4gICAgdGhpcy5kaXNjb25uZWN0KHRydWUpO1xyXG4gICAgdGhpcy5jb25uZWN0KHRoaXMudXJsIGFzIHN0cmluZyk7XHJcbiAgfVxyXG5cclxuICBzdWJqZWN0OiBhbnk7XHJcblxyXG4gIHByaXZhdGUgY29ubmVjdCh1cmw6IHN0cmluZykge1xyXG4gICAgaWYgKCF0aGlzLnRhcmdldC5fX19jb25uZWN0aW9uSWQpIHtcclxuICAgICAgdGhpcy50YXJnZXQuX19fY29ubmVjdGlvbklkID0gMDtcclxuICAgIH1cclxuICAgIHRoaXMudGFyZ2V0Ll9fX2Nvbm5lY3Rpb25JZCsrO1xyXG5cclxuICAgIGlmICghdGhpcy5zdWJqZWN0KSB7XHJcbiAgICAgIHRoaXMuY3JlYXRlKHVybCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5zdWJqZWN0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGluaXRUYWJTdXNwZW5kZWRMaXN0ZW5lcigpIHtcclxuICAgIGlmIChkb2N1bWVudCkge1xyXG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgKCkgPT4ge1xyXG4gICAgICAgIGlmIChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09ICdoaWRkZW4nKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICAgJ0FjdGl2ZUNvbm5lY3Q6IENsb3NpbmcgV2ViU29ja2V0IGR1ZSB0byB0YWIgc3VzcGVuc2lvbi4uLicsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5kaXNjb25uZWN0KHRydWUpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID09PSAndmlzaWJsZScpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdBY3RpdmVDb25uZWN0OiBSZWNvbm5lY3RpbmcgV2ViU29ja2V0Li4uJyk7XHJcbiAgICAgICAgICB0aGlzLmNvbm5lY3QodGhpcy51cmwgYXMgc3RyaW5nKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXF1ZXN0U3RhY2s6IGFueVtdID0gW107XHJcbiAgcHJpdmF0ZSByZXF1ZXN0SGlzdG9yeUxvZ3M6IHsgdGltZXN0YW1wOiBEYXRlOyBtZXRob2Q6IHN0cmluZyB9W10gPSBbXTtcclxuICBwcml2YXRlIGxvZ0VudHJ5KG1ldGhvZDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnJlcXVlc3RIaXN0b3J5TG9ncy5wdXNoKHsgdGltZXN0YW1wOiBuZXcgRGF0ZShEYXRlLm5vdygpKSwgbWV0aG9kIH0pO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGxvZ3MoKTogeyB0aW1lc3RhbXA6IERhdGU7IG1ldGhvZDogc3RyaW5nIH1bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0SGlzdG9yeUxvZ3M7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF90b2tlbiA9ICcnO1xyXG4gIHB1YmxpYyBnZXQgVG9rZW4oKTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy5fdG9rZW4pIHtcclxuICAgICAgaWYgKHdpbmRvdy5sb2NhbFN0b3JhZ2UpXHJcbiAgICAgICAgdGhpcy5fdG9rZW4gPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3Rva2VuJykgfHwgJyc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5fdG9rZW47XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgVG9rZW4odmFsOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3Rva2VuID0gdmFsO1xyXG4gICAgaWYgKHdpbmRvdy5sb2NhbFN0b3JhZ2UpIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndG9rZW4nLCB2YWwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXQgQ29ubmVjdGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgdGhpcy5zZW5kQnJvd3NlckluZm9Ub1NlcnZlcigpO1xyXG5cclxuICAgICAgdGhpcy5hdXRoKHRoaXMuVG9rZW4pLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgV2Vic29ja2V0Q2xpZW50Lm9uUmVjb25uZWN0Q2FsbGJhY2subWFwKChjKSA9PlxyXG4gICAgICAgICAgICBjLkZ1bmMgPyBjLkZ1bmMoKSA6IG51bGwsXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZXNldFJlcXVlc3RlZFN0YXRlKCk7XHJcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdFN0YWNrLmZvckVhY2goKGUpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbmRUb1NvY2tldChlLm1ldGhvZCwgZS5kYXRhKTtcclxuICAgICAgICAgICAgICB0aGlzLnJlcXVlc3RTdGFjayA9IHRoaXMucmVxdWVzdFN0YWNrLmZpbHRlcigoZTEpID0+IGUxICE9IGUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0sIDIwMDApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnBvb2wgJiYgdGhpcy5wb29sLldzc0Nvbm5lY3RlZCkgdGhpcy5wb29sLldzc0Nvbm5lY3RlZCA9IHZhbHVlO1xyXG4gIH1cclxuICBwcml2YXRlIHN0YXRpYyByZXNldFJlcXVlc3RlZFN0YXRlQ2FsbGJhY2tzOiBGdW5jdGlvbltdID0gW107XHJcbiAgcHJpdmF0ZSBjb25uZWN0aW9uRXN0YWJsaXNoZWRPbmNlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSByZXNldFJlcXVlc3RlZFN0YXRlKCkge1xyXG4gICAgaWYgKHRoaXMuY29ubmVjdGlvbkVzdGFibGlzaGVkT25jZSkge1xyXG4gICAgICAvLyByZXNldCByZXF1ZXN0ZWQgc3RhdGUgZm9yIG91dGJvdW5kc1xyXG4gICAgICBXZWJzb2NrZXRDbGllbnQucmVzZXRSZXF1ZXN0ZWRTdGF0ZUNhbGxiYWNrcy5mb3JFYWNoKChyZXNldCkgPT4ge1xyXG4gICAgICAgIHJlc2V0KCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb25uZWN0aW9uRXN0YWJsaXNoZWRPbmNlID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbiAgcHVibGljIHN0YXRpYyBhZGRSZXNldFJlcXVlc3RpbmdTdGF0ZUNhbGxiYWNrKGNhbGxiYWNrOiBGdW5jdGlvbikge1xyXG4gICAgV2Vic29ja2V0Q2xpZW50LnJlc2V0UmVxdWVzdGVkU3RhdGVDYWxsYmFja3MucHVzaChjYWxsYmFjayk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZSh1cmw6IHN0cmluZykge1xyXG4gICAgLy8gY3JlYXRlIG5ldyBjb25uZWN0aW9uXHJcbiAgICB0aGlzLmxvZ0VudHJ5KCdUQ1AvSFRUUDpDT05ORUNULVNFUlZFUicpO1xyXG4gICAgdGhpcy53cyA9IG5ldyBXZWJTb2NrZXQodXJsICsgKHRoaXMuc3VwcG9ydHNDYWNoZSA/ICc/Y2FjaGU9dHJ1ZScgOiAnJykpO1xyXG4gICAgdGhpcy53cy5vbmVycm9yID0gKGVycikgPT4ge1xyXG4gICAgICB0aGlzLndzLmNsb3NlKCk7XHJcbiAgICAgIHRoaXMubG9nRW50cnkoJ1RDUC9IVFRQOkVSUk9SOicgKyBlcnIpO1xyXG4gICAgICBjb25zb2xlLmxvZygnQWN0aXZlQ29ubmVjdDogJyArIGVycik7XHJcbiAgICB9O1xyXG4gICAgdGhpcy53cy5vbm9wZW4gPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMubG9nRW50cnkoJ1RDUC9IVFRQOkNPTk5FQ1RFRCcpO1xyXG4gICAgICB0aGlzLkNvbm5lY3RlZCA9IHRydWU7XHJcbiAgICB9O1xyXG4gICAgdGhpcy53cy5vbm1lc3NhZ2UgPSAoZSkgPT4ge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VSZWNlaXZlZChKc29uUGFyc2VyLnBhcnNlKGUuZGF0YS50b1N0cmluZygpKSk7XHJcbiAgICB9O1xyXG4gICAgdGhpcy53cy5vbmNsb3NlID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLmxvZ0VudHJ5KCdUQ1AvSFRUUDpDTE9TRUQnKTtcclxuICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xyXG4gICAgICAgIGlmICh0aGlzLnBvb2wgJiYgdGhpcy5wb29sLldzc0Nvbm5lY3RlZCkgdGhpcy5wb29sLldzc0Nvbm5lY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubG9nRW50cnkoJ1RDUC9IVFRQOlJFU0VULVJFUVVFU1RFRC1PVVRCT1VORC1TVEFURScpO1xyXG4gICAgICAgIHRoaXMucmVzZXRSZXF1ZXN0ZWRTdGF0ZSgpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jb25uZWN0KHVybCk7XHJcbiAgICAgICAgfSwgMTAwMCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1lc3NhZ2VJZDogbnVtYmVyID0gMDtcclxuICBwcm90ZWN0ZWQgc2VuZFRvU29ja2V0KFxyXG4gICAgbWV0aG9kOiBzdHJpbmcsXHJcbiAgICBkYXRhOiBhbnksXHJcbiAgICBkb250RW5zdXJlVHJhbnNtaXNzaW9uPzogYm9vbGVhbixcclxuICApIHtcclxuICAgIGNvbnN0IG1lc3NhZ2VJZCA9ICsrdGhpcy5tZXNzYWdlSWQ7XHJcbiAgICBpZiAodGhpcy53cy5yZWFkeVN0YXRlICE9IHRoaXMud3MuT1BFTikge1xyXG4gICAgICBpZiAoIWRvbnRFbnN1cmVUcmFuc21pc3Npb24pXHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0U3RhY2sucHVzaCh7IG1ldGhvZCwgZGF0YSwgbWVzc2FnZUlkIH0pO1xyXG4gICAgICBlbHNlIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMud3Muc2VuZChKc29uUGFyc2VyLnN0cmluZ2lmeSh7IG1ldGhvZCwgdmFsdWU6IGRhdGEsIG1lc3NhZ2VJZCB9KSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWVzc2FnZUlkO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYXV0aCh0b2tlbjogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLnNlbmRUb1NvY2tldCgnYXV0aC50b2tlbicsIHRva2VuKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZW5kKFxyXG4gICAgbWV0aG9kOiBzdHJpbmcsXHJcbiAgICBkYXRhOiBhbnksXHJcbiAgICBkb250RW5zdXJlVHJhbnNtaXNzaW9uPzogYm9vbGVhbixcclxuICApOiBQcm9taXNlPGFueT4ge1xyXG4gICAgdGhpcy5sb2dFbnRyeSgnU0VORDonICsgbWV0aG9kKTtcclxuICAgIGNvbnN0IG1lc3NhZ2VJZCA9IHRoaXMuc2VuZFRvU29ja2V0KFxyXG4gICAgICBtZXRob2QsXHJcbiAgICAgIGRhdGEsXHJcbiAgICAgIGRvbnRFbnN1cmVUcmFuc21pc3Npb24gfHwgZmFsc2UsXHJcbiAgICApO1xyXG4gICAgaWYgKG1lc3NhZ2VJZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5leHBlY3RNZXRob2QoYG0uJHttZXRob2R9YCwgbWVzc2FnZUlkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgIHJlc29sdmUoZmFsc2UpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVqZWN0Q2FsbGJhY2tzOiBNYXA8bnVtYmVyLCBGdW5jdGlvbj4gPSBuZXcgTWFwKCk7XHJcbiAgcHJpdmF0ZSBleHBlY3RlZE1ldGhvZHM6IE1hcDxzdHJpbmcgfCBudW1iZXIsIEFycmF5PEZ1bmN0aW9uPj4gPSBuZXcgTWFwKCk7XHJcbiAgcHJpdmF0ZSBleHBlY3RNZXRob2QobWV0aG9kOiBzdHJpbmcsIG1lc3NhZ2VJZD86IG51bWJlciB8IG51bGwpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGlmIChtZXNzYWdlSWQpIHtcclxuICAgICAgICB0aGlzLmV4cGVjdGVkTWV0aG9kcy5zZXQobWVzc2FnZUlkLCBbcmVzb2x2ZV0pO1xyXG4gICAgICAgIHRoaXMucmVqZWN0Q2FsbGJhY2tzLnNldChtZXNzYWdlSWQsIHJlamVjdCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZXhwZWN0ZWRNZXRob2RzLmhhcyhtZXRob2QpKSB7XHJcbiAgICAgICAgICBsZXQgYXJyID0gdGhpcy5leHBlY3RlZE1ldGhvZHMuZ2V0KG1ldGhvZCk7XHJcbiAgICAgICAgICAoYXJyIGFzIEFycmF5PEZ1bmN0aW9uPikucHVzaChyZXNvbHZlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5leHBlY3RlZE1ldGhvZHMuc2V0KG1ldGhvZCwgW3Jlc29sdmVdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtZXNzYWdlUmVjZWl2ZWQoe1xyXG4gICAgbWV0aG9kLFxyXG4gICAgdmFsdWUsXHJcbiAgICBtZXNzYWdlSWQsXHJcbiAgICBzcGVjaWZpY0hhc2gsXHJcbiAgICBpbnNlcnRlZCxcclxuICAgIHVwZGF0ZWQsXHJcbiAgICBkZWxldGVkLFxyXG4gICAgbGVuZ3RoLFxyXG4gIH06IHtcclxuICAgIG1ldGhvZDogc3RyaW5nO1xyXG4gICAgdmFsdWU6IGFueTtcclxuICAgIG1lc3NhZ2VJZDogbnVtYmVyIHwgbnVsbDtcclxuICAgIHNwZWNpZmljSGFzaDogbnVtYmVyIHwgbnVsbDtcclxuICAgIGluc2VydGVkOiBhbnlbXSB8IG51bGw7XHJcbiAgICB1cGRhdGVkOiBhbnlbXSB8IG51bGw7XHJcbiAgICBkZWxldGVkOiBhbnlbXSB8IG51bGw7XHJcbiAgICBsZW5ndGg6IG51bWJlciB8IG51bGw7XHJcbiAgfSkge1xyXG4gICAgdGhpcy5sb2dFbnRyeSgnUkVDRUlWRUQ6JyArIG1ldGhvZCk7XHJcbiAgICBpZiAobWV0aG9kID09ICdfX19jYWNoZScpIHtcclxuICAgICAgdGhpcy5oYW5kbGVPdXRib3VuZENhY2hlUmVxdWVzdCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBpZiAobWVzc2FnZUlkKSB7XHJcbiAgICAgIGlmIChtZXRob2QgPT0gJ20uZXJyb3InKSB7XHJcbiAgICAgICAgY29uc3QgcmVqZWN0ID0gdGhpcy5yZWplY3RDYWxsYmFja3MuZ2V0KG1lc3NhZ2VJZCk7XHJcbiAgICAgICAgaWYgKHJlamVjdCkge1xyXG4gICAgICAgICAgcmVqZWN0KHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbWVzc2FnZUlkID0gLTE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobWVzc2FnZUlkICE9IG51bGwpIHtcclxuICAgICAgY29uc3QgY2FsbGJhY2sgPSB0aGlzLmV4cGVjdGVkTWV0aG9kcy5nZXQobWVzc2FnZUlkKTtcclxuICAgICAgaWYgKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgY29uc3QgZnVuYyA9IGNhbGxiYWNrLnNoaWZ0KCk7XHJcbiAgICAgICAgaWYgKGZ1bmMpIGZ1bmModmFsdWUpO1xyXG4gICAgICAgIHRoaXMuaW52b2tlU3VjY2Vzc0hhbmRsZXJzKG1ldGhvZCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgY2FsbGJhY2sgPSB0aGlzLmV4cGVjdGVkTWV0aG9kcy5nZXQobWV0aG9kKTtcclxuICAgICAgICBpZiAoY2FsbGJhY2sgJiYgY2FsbGJhY2subGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgY29uc3QgZnVuYyA9IGNhbGxiYWNrLnNoaWZ0KCk7XHJcbiAgICAgICAgICBpZiAoZnVuYykgZnVuYyh2YWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IG91dCA9IFdlYnNvY2tldENsaWVudC5vdXRib3VuZHMuZ2V0KG1ldGhvZCk7XHJcbiAgICAgICAgICBpZiAob3V0KSB7XHJcbiAgICAgICAgICAgIG91dCh2YWx1ZSwgc3BlY2lmaWNIYXNoLCBpbnNlcnRlZCwgdXBkYXRlZCwgZGVsZXRlZCwgbGVuZ3RoLCB0aGlzKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IFdlYnNvY2tldENsaWVudC5oYW5kbGVzLmdldChtZXRob2QpO1xyXG4gICAgICAgICAgaWYgKGhhbmRsZSkge1xyXG4gICAgICAgICAgICAoaGFuZGxlLkZ1bmMgYXMgRnVuY3Rpb24pKHZhbHVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IEVycm9yKFxyXG4gICAgICAgICdObyBNZXNzYWdlSWQgd2FzIHByb3ZpZGVkLCB0aGUgY29ubmVjdGlvbiBpcyBub3Qgc3VwcG9ydGVkLicsXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZU91dGJvdW5kQ2FjaGVSZXF1ZXN0KG1ldGhvZDogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5kYlNlcnZpY2UpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLmRiU2VydmljZS5nZXRCeUtleSgnb3V0Ym91bmQnLCBtZXRob2QpLnN1YnNjcmliZSgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbmQoJ19fX2NhY2hlJywge1xyXG4gICAgICAgICAgICAgIG1ldGhvZCxcclxuICAgICAgICAgICAgICBzcGVjaWZpY0hhc2g6IGl0ZW0uc3BlY2lmaWNIYXNoIHx8IG51bGwsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZW5kKCdfX19jYWNoZScsIHtcclxuICAgICAgICAgICAgICBtZXRob2QsXHJcbiAgICAgICAgICAgICAgc3BlY2lmaWNIYXNoOiBudWxsLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIHRoaXMuc2VuZCgnX19fY2FjaGUnLCB7XHJcbiAgICAgICAgICBtZXRob2QsXHJcbiAgICAgICAgICBzcGVjaWZpY0hhc2g6IG51bGwsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignQWN0aXZlQ29ubmVjdDogJyArIGUpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbmQoJ19fX2NhY2hlJywge1xyXG4gICAgICAgIG1ldGhvZCxcclxuICAgICAgICBzcGVjaWZpY0hhc2g6IG51bGwsXHJcbiAgICAgIH0pO1xyXG4gICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICdBY3RpdmUtQ29ubmVjdDogQ2FjaGluZyBub3QgcG9zc2libGUgYXMgdGhlIGluZGV4ZWREQiBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQnLFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgb3V0Ym91bmRzOiBNYXA8XHJcbiAgICBzdHJpbmcsXHJcbiAgICAoXHJcbiAgICAgIGRhdGE6IGFueSxcclxuICAgICAgc3BlY2lmaWNIYXNoOiBudW1iZXIgfCBudWxsLFxyXG4gICAgICBpbnNlcnRlZDogYW55W10gfCBudWxsLFxyXG4gICAgICB1cGRhdGVkOiBhbnlbXSB8IG51bGwsXHJcbiAgICAgIGRlbGV0ZWQ6IGFueVtdIHwgbnVsbCxcclxuICAgICAgbGVuZ3RoOiBudW1iZXIgfCBudWxsLFxyXG4gICAgICBfdGhpczogV2Vic29ja2V0Q2xpZW50LFxyXG4gICAgKSA9PiB2b2lkXHJcbiAgPiA9IG5ldyBNYXAoKTtcclxuICBzdGF0aWMgZXhwZWN0T3V0Ym91bmQoXHJcbiAgICBtZXRob2Q6IHN0cmluZyxcclxuICAgIGNhbGxiYWNrOiAoXHJcbiAgICAgIGRhdGE6IGFueSxcclxuICAgICAgc3BlY2lmaWNIYXNoOiBudW1iZXIgfCBudWxsLFxyXG4gICAgICBpbnNlcnRlZDogYW55W10gfCBudWxsLFxyXG4gICAgICB1cGRhdGVkOiBhbnlbXSB8IG51bGwsXHJcbiAgICAgIGRlbGV0ZWQ6IGFueVtdIHwgbnVsbCxcclxuICAgICAgbGVuZ3RoOiBudW1iZXIgfCBudWxsLFxyXG4gICAgICBfdGhpczogV2Vic29ja2V0Q2xpZW50LFxyXG4gICAgKSA9PiB2b2lkLFxyXG4gICkge1xyXG4gICAgV2Vic29ja2V0Q2xpZW50Lm91dGJvdW5kcy5zZXQobWV0aG9kLCBjYWxsYmFjayk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBoYW5kbGVzOiBNYXA8c3RyaW5nLCBEZWNvcmFibGVGdW5jdGlvbj4gPSBuZXcgTWFwKCk7XHJcbiAgc3RhdGljIHJlZ2lzdGVySGFuZGxlKG1ldGhvZDogc3RyaW5nLCBjYWxsYmFjazogRGVjb3JhYmxlRnVuY3Rpb24pIHtcclxuICAgIFdlYnNvY2tldENsaWVudC5oYW5kbGVzLnNldChtZXRob2QsIGNhbGxiYWNrKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaXNDb25uZWN0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy53cykgcmV0dXJuIHRoaXMud3MucmVhZHlTdGF0ZSA9PSBXZWJTb2NrZXQuT1BFTjtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZW5kQnJvd3NlckluZm9Ub1NlcnZlcigpIHtcclxuICAgIC8vIHNlbmQgYnJvd3NlciAvIG9zIGluZm9ybWF0aW9uXHJcbiAgICBjb25zdCBicm93c2VyID0gdGhpcy5nZXRCcm93c2VyKCk7XHJcbiAgICBjb25zdCBvcyA9IHRoaXMuZ2V0T1MoKTtcclxuICAgIHRoaXMuc2VuZCgnX19fYnJvd3NlcicsIHtcclxuICAgICAgYnJvd3NlcjogYCR7YnJvd3Nlci5uYW1lfSAke2Jyb3dzZXIudmVyc2lvbn0gJHtvc31gLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0QnJvd3NlcigpOiB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH0ge1xyXG4gICAgLy8gaHR0cHM6Ly93d3cuZ3JlZ29yeXZhcmdoZXNlLmNvbS9ob3ctdG8tZ2V0LWJyb3dzZXItbmFtZS1hbmQtdmVyc2lvbi12aWEtamF2YXNjcmlwdC9cclxuICAgIHZhciB1YSA9IG5hdmlnYXRvci51c2VyQWdlbnQsXHJcbiAgICAgIHRlbSxcclxuICAgICAgTSA9XHJcbiAgICAgICAgdWEubWF0Y2goXHJcbiAgICAgICAgICAvKG9wZXJhfGNocm9tZXxzYWZhcml8ZmlyZWZveHxtc2llfHRyaWRlbnQoPz1cXC8pKVxcLz9cXHMqKFxcZCspL2ksXHJcbiAgICAgICAgKSB8fCBbXTtcclxuICAgIGlmICgvdHJpZGVudC9pLnRlc3QoTVsxXSkpIHtcclxuICAgICAgdGVtID0gL1xcYnJ2WyA6XSsoXFxkKykvZy5leGVjKHVhKSB8fCBbXTtcclxuICAgICAgcmV0dXJuIHsgbmFtZTogJ0lFICcsIHZlcnNpb246IHRlbVsxXSB8fCAnJyB9O1xyXG4gICAgfVxyXG4gICAgaWYgKE1bMV0gPT09ICdDaHJvbWUnKSB7XHJcbiAgICAgIHRlbSA9IHVhLm1hdGNoKC9cXGJPUFJcXC8oXFxkKykvKTtcclxuICAgICAgaWYgKHRlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgbmFtZTogJ09wZXJhJywgdmVyc2lvbjogdGVtWzFdIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIE0gPSBNWzJdID8gW01bMV0sIE1bMl1dIDogW25hdmlnYXRvci5hcHBOYW1lLCBuYXZpZ2F0b3IuYXBwVmVyc2lvbiwgJy0/J107XHJcbiAgICBpZiAoKHRlbSA9IHVhLm1hdGNoKC92ZXJzaW9uXFwvKFxcZCspL2kpKSAhPSBudWxsKSB7XHJcbiAgICAgIE0uc3BsaWNlKDEsIDEsIHRlbVsxXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBuYW1lOiBNWzBdLFxyXG4gICAgICB2ZXJzaW9uOiBNWzFdLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRPUygpOiBzdHJpbmcge1xyXG4gICAgdmFyIHVzZXJBZ2VudCA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LFxyXG4gICAgICBwbGF0Zm9ybSA9IHdpbmRvdy5uYXZpZ2F0b3IucGxhdGZvcm0sXHJcbiAgICAgIG1hY29zUGxhdGZvcm1zID0gWydNYWNpbnRvc2gnLCAnTWFjSW50ZWwnLCAnTWFjUFBDJywgJ01hYzY4SyddLFxyXG4gICAgICB3aW5kb3dzUGxhdGZvcm1zID0gWydXaW4zMicsICdXaW42NCcsICdXaW5kb3dzJywgJ1dpbkNFJ10sXHJcbiAgICAgIGlvc1BsYXRmb3JtcyA9IFsnaVBob25lJywgJ2lQYWQnLCAnaVBvZCddLFxyXG4gICAgICBvcyA9IG51bGw7XHJcblxyXG4gICAgaWYgKG1hY29zUGxhdGZvcm1zLmluZGV4T2YocGxhdGZvcm0pICE9PSAtMSkge1xyXG4gICAgICBvcyA9ICdNYWMgT1MnO1xyXG4gICAgfSBlbHNlIGlmIChpb3NQbGF0Zm9ybXMuaW5kZXhPZihwbGF0Zm9ybSkgIT09IC0xKSB7XHJcbiAgICAgIG9zID0gJ2lPUyc7XHJcbiAgICB9IGVsc2UgaWYgKHdpbmRvd3NQbGF0Zm9ybXMuaW5kZXhPZihwbGF0Zm9ybSkgIT09IC0xKSB7XHJcbiAgICAgIG9zID0gJ1dpbmRvd3MnO1xyXG4gICAgfSBlbHNlIGlmICgvQW5kcm9pZC8udGVzdCh1c2VyQWdlbnQpKSB7XHJcbiAgICAgIG9zID0gJ0FuZHJvaWQnO1xyXG4gICAgfSBlbHNlIGlmICghb3MgJiYgL0xpbnV4Ly50ZXN0KHBsYXRmb3JtKSkge1xyXG4gICAgICBvcyA9ICdMaW51eCc7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9zIHx8ICcnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgb25TdWNjZXNzSGFuZGxlcnM6IHtcclxuICAgIGNhbGxiYWNrOiBEZWNvcmFibGVGdW5jdGlvbjtcclxuICAgIHJlZ2V4cDogUmVnRXhwO1xyXG4gIH1bXSA9IFtdO1xyXG4gIHB1YmxpYyBzdGF0aWMgb25TdWNjZXNzKGNhbGxiYWNrOiBEZWNvcmFibGVGdW5jdGlvbiwgcmVnZXhwOiBSZWdFeHApIHtcclxuICAgIHRoaXMub25TdWNjZXNzSGFuZGxlcnMucHVzaCh7IGNhbGxiYWNrLCByZWdleHAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBvblJlY29ubmVjdENhbGxiYWNrOiBEZWNvcmFibGVGdW5jdGlvbltdID0gW107XHJcbiAgc3RhdGljIG9uUmVjb25uZWN0KGNhbGxiYWNrOiBEZWNvcmFibGVGdW5jdGlvbikge1xyXG4gICAgV2Vic29ja2V0Q2xpZW50Lm9uUmVjb25uZWN0Q2FsbGJhY2sucHVzaChjYWxsYmFjayk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGludm9rZVN1Y2Nlc3NIYW5kbGVycyhtZXRob2Q6IHN0cmluZykge1xyXG4gICAgV2Vic29ja2V0Q2xpZW50Lm9uU3VjY2Vzc0hhbmRsZXJzXHJcbiAgICAgIC5maWx0ZXIoKGUpID0+IGUucmVnZXhwLnRlc3QobWV0aG9kKSlcclxuICAgICAgLmZvckVhY2goKGUpID0+IHtcclxuICAgICAgICB2YXIgcmVzID0gKGUuY2FsbGJhY2suRnVuYyBhcyBGdW5jdGlvbikoKTtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy50aGVuKSB7XHJcbiAgICAgICAgICByZXMudGhlbigpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xvc2VkID0gZmFsc2U7XHJcbiAgcHVibGljIGRpc2Nvbm5lY3QocmVzdGFydD86IGJvb2xlYW4pIHtcclxuICAgIGlmICghcmVzdGFydCkgdGhpcy5jbG9zZWQgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMud3MpIHRoaXMud3MuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdENhY2hlKCkge31cclxuXHJcbiAgZ2V0IHRhcmdldCgpOiBhbnkge1xyXG4gICAgcmV0dXJuICh0aGlzIGFzIGFueSkuX19wcm90b19fO1xyXG4gIH1cclxufVxyXG4iXX0=
361
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWN0aXZlLWNvbm5lY3QtbmcyL3NyYy9saWIvd2Vic29ja2V0L2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFaEQsTUFBTSxPQUFPLGVBQWU7SUFJMUIsWUFDVSxHQUFZLEVBQ1osYUFBdUIsRUFDeEIsU0FBK0I7UUFGOUIsUUFBRyxHQUFILEdBQUcsQ0FBUztRQUNaLGtCQUFhLEdBQWIsYUFBYSxDQUFVO1FBQ3hCLGNBQVMsR0FBVCxTQUFTLENBQXNCO1FBMkRoQyxpQkFBWSxHQUFVLEVBQUUsQ0FBQztRQUN6Qix1QkFBa0IsR0FBMEMsRUFBRSxDQUFDO1FBUS9ELFdBQU0sR0FBRyxFQUFFLENBQUM7UUFvQ1osOEJBQXlCLEdBQVksS0FBSyxDQUFDO1FBNkMzQyxjQUFTLEdBQVcsQ0FBQyxDQUFDO1FBMEN0QixvQkFBZSxHQUEwQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ25ELG9CQUFlLEdBQTBDLElBQUksR0FBRyxFQUFFLENBQUM7UUEwT3BFLFdBQU0sR0FBRyxLQUFLLENBQUM7UUF4YXBCLElBQUksYUFBYTtZQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRVMsTUFBTSxDQUFDLEdBQXVCO1FBQ3RDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDUixJQUFJLFFBQVEsQ0FBQztZQUNiLElBQUksSUFBSSxDQUFDO1lBQ1QsUUFBUSxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtnQkFDbEMsS0FBSyxRQUFRLENBQUMsQ0FBQztvQkFDYixRQUFRLEdBQUcsTUFBTSxDQUFDO29CQUNsQixJQUFJLEdBQUcsTUFBTSxDQUFDO29CQUNk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QkMsdUJBQU8sR0FBbUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQXNFcEQsaUNBQWlCLEdBRzFCLEVBQUUsQ0FBQztBQUtNLG1DQUFtQixHQUF3QixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ3hJbmRleGVkREJTZXJ2aWNlIH0gZnJvbSAnbmd4LWluZGV4ZWQtZGInO1xyXG5pbXBvcnQgeyBEZWNvcmFibGVGdW5jdGlvbiB9IGZyb20gJy4vZGVjb3JhdG9ycy9mdW5jdGlvbic7XHJcbmltcG9ydCB7IEpzb25QYXJzZXIgfSBmcm9tICcuL2pzb24vanNvbi1wYXJzZXInO1xyXG5cclxuZXhwb3J0IGNsYXNzIFdlYnNvY2tldENsaWVudCB7XHJcbiAgd3MhOiBXZWJTb2NrZXQ7XHJcbiAgcG9vbCE6IHsgV3NzQ29ubmVjdGVkOiBib29sZWFuIH0gfCBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgdXJsPzogc3RyaW5nLFxyXG4gICAgcHJpdmF0ZSBzdXBwb3J0c0NhY2hlPzogYm9vbGVhbixcclxuICAgIHB1YmxpYyBkYlNlcnZpY2U/OiBOZ3hJbmRleGVkREJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBpZiAoc3VwcG9ydHNDYWNoZSkgdGhpcy5pbml0Q2FjaGUoKTtcclxuICAgIHRoaXMuc2V0VXJsKHRoaXMudXJsKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBzZXRVcmwodXJsOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIGlmICghdXJsKSB7XHJcbiAgICAgIGxldCBwcm90b2NvbDtcclxuICAgICAgbGV0IHBvcnQ7XHJcbiAgICAgIHN3aXRjaCAoZG9jdW1lbnQubG9jYXRpb24ucHJvdG9jb2wpIHtcclxuICAgICAgICBjYXNlICdodHRwczonOiB7XHJcbiAgICAgICAgICBwcm90b2NvbCA9ICd3c3M6JztcclxuICAgICAgICAgIHBvcnQgPSAnOjQ0Myc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgcHJvdG9jb2wgPSAnd3M6JztcclxuICAgICAgICAgIHBvcnQgPSAnOjgwJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB1cmwgPSBwcm90b2NvbCArICcvLycgKyBkb2N1bWVudC5sb2NhdGlvbi5ob3N0bmFtZSArIHBvcnQgKyAnL3dzcyc7XHJcbiAgICB9XHJcbiAgICB0aGlzLnVybCA9IHVybDtcclxuICAgIHRoaXMuZGlzY29ubmVjdChmYWxzZSk7XHJcbiAgICB0aGlzLmNvbm5lY3QodGhpcy51cmwgYXMgc3RyaW5nKTtcclxuICB9XHJcblxyXG4gIHN1YmplY3Q6IGFueTtcclxuXHJcbiAgcHJpdmF0ZSBjb25uZWN0KHVybDogc3RyaW5nKSB7XHJcbiAgICBpZiAoIXRoaXMudGFyZ2V0Ll9fX2Nvbm5lY3Rpb25JZCkge1xyXG4gICAgICB0aGlzLnRhcmdldC5fX19jb25uZWN0aW9uSWQgPSAwO1xyXG4gICAgfVxyXG4gICAgdGhpcy50YXJnZXQuX19fY29ubmVjdGlvbklkKys7XHJcblxyXG4gICAgaWYgKCF0aGlzLnN1YmplY3QpIHtcclxuICAgICAgdGhpcy5jcmVhdGUodXJsKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLnN1YmplY3Q7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaW5pdFRhYlN1c3BlbmRlZExpc3RlbmVyKCkge1xyXG4gICAgaWYgKGRvY3VtZW50KSB7XHJcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCAoKSA9PiB7XHJcbiAgICAgICAgaWYgKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSA9PT0gJ2hpZGRlbicpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAnQWN0aXZlQ29ubmVjdDogQ2xvc2luZyBXZWJTb2NrZXQgZHVlIHRvIHRhYiBzdXNwZW5zaW9uLi4uJ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuZGlzY29ubmVjdCh0cnVlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSA9PT0gJ3Zpc2libGUnKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnQWN0aXZlQ29ubmVjdDogUmVjb25uZWN0aW5nIFdlYlNvY2tldC4uLicpO1xyXG4gICAgICAgICAgdGhpcy5jb25uZWN0KHRoaXMudXJsIGFzIHN0cmluZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVxdWVzdFN0YWNrOiBhbnlbXSA9IFtdO1xyXG4gIHByaXZhdGUgcmVxdWVzdEhpc3RvcnlMb2dzOiB7IHRpbWVzdGFtcDogRGF0ZTsgbWV0aG9kOiBzdHJpbmcgfVtdID0gW107XHJcbiAgcHJpdmF0ZSBsb2dFbnRyeShtZXRob2Q6IHN0cmluZykge1xyXG4gICAgdGhpcy5yZXF1ZXN0SGlzdG9yeUxvZ3MucHVzaCh7IHRpbWVzdGFtcDogbmV3IERhdGUoRGF0ZS5ub3coKSksIG1ldGhvZCB9KTtcclxuICB9XHJcbiAgcHVibGljIGdldCBsb2dzKCk6IHsgdGltZXN0YW1wOiBEYXRlOyBtZXRob2Q6IHN0cmluZyB9W10ge1xyXG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdEhpc3RvcnlMb2dzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdG9rZW4gPSAnJztcclxuICBwdWJsaWMgZ2V0IFRva2VuKCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXRoaXMuX3Rva2VuKSB7XHJcbiAgICAgIGlmICh3aW5kb3cubG9jYWxTdG9yYWdlKVxyXG4gICAgICAgIHRoaXMuX3Rva2VuID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0b2tlbicpIHx8ICcnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IFRva2VuKHZhbDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl90b2tlbiA9IHZhbDtcclxuICAgIGlmICh3aW5kb3cubG9jYWxTdG9yYWdlKSB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3Rva2VuJywgdmFsKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0IENvbm5lY3RlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIHRoaXMuc2VuZEJyb3dzZXJJbmZvVG9TZXJ2ZXIoKTtcclxuXHJcbiAgICAgIHRoaXMuYXV0aCh0aGlzLlRva2VuKS50aGVuKCgpID0+IHtcclxuICAgICAgICBQcm9taXNlLmFsbChcclxuICAgICAgICAgIFdlYnNvY2tldENsaWVudC5vblJlY29ubmVjdENhbGxiYWNrLm1hcCgoYykgPT5cclxuICAgICAgICAgICAgYy5GdW5jID8gYy5GdW5jKCkgOiBudWxsXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJlc2V0UmVxdWVzdGVkU3RhdGUoKTtcclxuICAgICAgICAgICAgdGhpcy5yZXF1ZXN0U3RhY2suZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VuZFRvU29ja2V0KGUubWV0aG9kLCBlLmRhdGEsIGZhbHNlLCBlLm1lc3NhZ2VJZCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXF1ZXN0U3RhY2sgPSB0aGlzLnJlcXVlc3RTdGFjay5maWx0ZXIoKGUxKSA9PiBlMSAhPSBlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9LCAyMDAwKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5wb29sICYmIHRoaXMucG9vbC5Xc3NDb25uZWN0ZWQpIHRoaXMucG9vbC5Xc3NDb25uZWN0ZWQgPSB2YWx1ZTtcclxuICB9XHJcbiAgcHJpdmF0ZSBzdGF0aWMgcmVzZXRSZXF1ZXN0ZWRTdGF0ZUNhbGxiYWNrczogRnVuY3Rpb25bXSA9IFtdO1xyXG4gIHByaXZhdGUgY29ubmVjdGlvbkVzdGFibGlzaGVkT25jZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgcmVzZXRSZXF1ZXN0ZWRTdGF0ZSgpIHtcclxuICAgIGlmICh0aGlzLmNvbm5lY3Rpb25Fc3RhYmxpc2hlZE9uY2UpIHtcclxuICAgICAgLy8gcmVzZXQgcmVxdWVzdGVkIHN0YXRlIGZvciBvdXRib3VuZHNcclxuICAgICAgV2Vic29ja2V0Q2xpZW50LnJlc2V0UmVxdWVzdGVkU3RhdGVDYWxsYmFja3MuZm9yRWFjaCgocmVzZXQpID0+IHtcclxuICAgICAgICByZXNldCh0aGlzKTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbm5lY3Rpb25Fc3RhYmxpc2hlZE9uY2UgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuICBwdWJsaWMgc3RhdGljIGFkZFJlc2V0UmVxdWVzdGluZ1N0YXRlQ2FsbGJhY2soY2FsbGJhY2s6IEZ1bmN0aW9uKSB7XHJcbiAgICBXZWJzb2NrZXRDbGllbnQucmVzZXRSZXF1ZXN0ZWRTdGF0ZUNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlKHVybDogc3RyaW5nKSB7XHJcbiAgICAvLyBjcmVhdGUgbmV3IGNvbm5lY3Rpb25cclxuICAgIHRoaXMubG9nRW50cnkoJ1RDUC9IVFRQOkNPTk5FQ1QtU0VSVkVSJyk7XHJcbiAgICB0aGlzLndzID0gbmV3IFdlYlNvY2tldCh1cmwgKyAodGhpcy5zdXBwb3J0c0NhY2hlID8gJz9jYWNoZT10cnVlJyA6ICcnKSk7XHJcbiAgICB0aGlzLndzLm9uZXJyb3IgPSAoZXJyKSA9PiB7XHJcbiAgICAgIHRoaXMud3MuY2xvc2UoKTtcclxuICAgICAgdGhpcy5sb2dFbnRyeSgnVENQL0hUVFA6RVJST1I6JyArIGVycik7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdBY3RpdmVDb25uZWN0OiAnICsgZXJyKTtcclxuICAgIH07XHJcbiAgICB0aGlzLndzLm9ub3BlbiA9ICgpID0+IHtcclxuICAgICAgdGhpcy5sb2dFbnRyeSgnVENQL0hUVFA6Q09OTkVDVEVEJyk7XHJcbiAgICAgIHRoaXMuQ29ubmVjdGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jbG9zZWQgPSBmYWxzZTtcclxuICAgIH07XHJcbiAgICB0aGlzLndzLm9ubWVzc2FnZSA9IChlKSA9PiB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVJlY2VpdmVkKEpzb25QYXJzZXIucGFyc2UoZS5kYXRhLnRvU3RyaW5nKCkpKTtcclxuICAgIH07XHJcbiAgICB0aGlzLndzLm9uY2xvc2UgPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMubG9nRW50cnkoJ1RDUC9IVFRQOkNMT1NFRCcpO1xyXG4gICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucG9vbCAmJiB0aGlzLnBvb2wuV3NzQ29ubmVjdGVkKSB0aGlzLnBvb2wuV3NzQ29ubmVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5sb2dFbnRyeSgnVENQL0hUVFA6UkVTRVQtUkVRVUVTVEVELU9VVEJPVU5ELVNUQVRFJyk7XHJcbiAgICAgICAgdGhpcy5yZXNldFJlcXVlc3RlZFN0YXRlKCk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNvbm5lY3QodXJsKTtcclxuICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWVzc2FnZUlkOiBudW1iZXIgPSAwO1xyXG4gIHByb3RlY3RlZCBzZW5kVG9Tb2NrZXQoXHJcbiAgICBtZXRob2Q6IHN0cmluZyxcclxuICAgIGRhdGE6IGFueSxcclxuICAgIGRvbnRFbnN1cmVUcmFuc21pc3Npb24/OiBib29sZWFuLFxyXG4gICAgZm9yY2VkTWVzc2FnZUlkPzogbnVtYmVyXHJcbiAgKSB7XHJcbiAgICBjb25zdCBtZXNzYWdlSWQgPSBmb3JjZWRNZXNzYWdlSWQgPz8gKyt0aGlzLm1lc3NhZ2VJZDtcclxuICAgIGlmICh0aGlzLndzLnJlYWR5U3RhdGUgIT0gdGhpcy53cy5PUEVOKSB7XHJcbiAgICAgIGlmICghZG9udEVuc3VyZVRyYW5zbWlzc2lvbilcclxuICAgICAgICB0aGlzLnJlcXVlc3RTdGFjay5wdXNoKHsgbWV0aG9kLCBkYXRhLCBtZXNzYWdlSWQgfSk7XHJcbiAgICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy53cy5zZW5kKEpzb25QYXJzZXIuc3RyaW5naWZ5KHsgbWV0aG9kLCB2YWx1ZTogZGF0YSwgbWVzc2FnZUlkIH0pKTtcclxuICAgIH1cclxuICAgIHJldHVybiBtZXNzYWdlSWQ7XHJcbiAgfVxyXG5cclxuICBhc3luYyBhdXRoKHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VuZFRvU29ja2V0KCdhdXRoLnRva2VuJywgdG9rZW4pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbmQoXHJcbiAgICBtZXRob2Q6IHN0cmluZyxcclxuICAgIGRhdGE6IGFueSxcclxuICAgIGRvbnRFbnN1cmVUcmFuc21pc3Npb24/OiBib29sZWFuXHJcbiAgKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHRoaXMubG9nRW50cnkoJ1NFTkQ6JyArIG1ldGhvZCk7XHJcbiAgICBjb25zdCBtZXNzYWdlSWQgPSB0aGlzLnNlbmRUb1NvY2tldChcclxuICAgICAgbWV0aG9kLFxyXG4gICAgICBkYXRhLFxyXG4gICAgICBkb250RW5zdXJlVHJhbnNtaXNzaW9uIHx8IGZhbHNlXHJcbiAgICApO1xyXG4gICAgaWYgKG1lc3NhZ2VJZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5leHBlY3RNZXRob2QoYG0uJHttZXRob2R9YCwgbWVzc2FnZUlkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgIHJlc29sdmUoZmFsc2UpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVqZWN0Q2FsbGJhY2tzOiBNYXA8bnVtYmVyLCBGdW5jdGlvbj4gPSBuZXcgTWFwKCk7XHJcbiAgcHJpdmF0ZSBleHBlY3RlZE1ldGhvZHM6IE1hcDxzdHJpbmcgfCBudW1iZXIsIEFycmF5PEZ1bmN0aW9uPj4gPSBuZXcgTWFwKCk7XHJcbiAgcHJpdmF0ZSBleHBlY3RNZXRob2QobWV0aG9kOiBzdHJpbmcsIG1lc3NhZ2VJZD86IG51bWJlciB8IG51bGwpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGlmIChtZXNzYWdlSWQpIHtcclxuICAgICAgICB0aGlzLmV4cGVjdGVkTWV0aG9kcy5zZXQobWVzc2FnZUlkLCBbcmVzb2x2ZV0pO1xyXG4gICAgICAgIHRoaXMucmVqZWN0Q2FsbGJhY2tzLnNldChtZXNzYWdlSWQsIHJlamVjdCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZXhwZWN0ZWRNZXRob2RzLmhhcyhtZXRob2QpKSB7XHJcbiAgICAgICAgICBsZXQgYXJyID0gdGhpcy5leHBlY3RlZE1ldGhvZHMuZ2V0KG1ldGhvZCk7XHJcbiAgICAgICAgICAoYXJyIGFzIEFycmF5PEZ1bmN0aW9uPikucHVzaChyZXNvbHZlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5leHBlY3RlZE1ldGhvZHMuc2V0KG1ldGhvZCwgW3Jlc29sdmVdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtZXNzYWdlUmVjZWl2ZWQoe1xyXG4gICAgbWV0aG9kLFxyXG4gICAgdmFsdWUsXHJcbiAgICBtZXNzYWdlSWQsXHJcbiAgICBzcGVjaWZpY0hhc2gsXHJcbiAgICBpbnNlcnRlZCxcclxuICAgIHVwZGF0ZWQsXHJcbiAgICBkZWxldGVkLFxyXG4gICAgbGVuZ3RoXHJcbiAgfToge1xyXG4gICAgbWV0aG9kOiBzdHJpbmc7XHJcbiAgICB2YWx1ZTogYW55O1xyXG4gICAgbWVzc2FnZUlkOiBudW1iZXIgfCBudWxsO1xyXG4gICAgc3BlY2lmaWNIYXNoOiBudW1iZXIgfCBudWxsO1xyXG4gICAgaW5zZXJ0ZWQ6IGFueVtdIHwgbnVsbDtcclxuICAgIHVwZGF0ZWQ6IGFueVtdIHwgbnVsbDtcclxuICAgIGRlbGV0ZWQ6IGFueVtdIHwgbnVsbDtcclxuICAgIGxlbmd0aDogbnVtYmVyIHwgbnVsbDtcclxuICB9KSB7XHJcbiAgICB0aGlzLmxvZ0VudHJ5KCdSRUNFSVZFRDonICsgbWV0aG9kKTtcclxuICAgIGlmIChtZXRob2QgPT0gJ19fX2NhY2hlJykge1xyXG4gICAgICB0aGlzLmhhbmRsZU91dGJvdW5kQ2FjaGVSZXF1ZXN0KHZhbHVlKTtcclxuICAgIH1cclxuICAgIGlmIChtZXNzYWdlSWQpIHtcclxuICAgICAgaWYgKG1ldGhvZCA9PSAnbS5lcnJvcicpIHtcclxuICAgICAgICBjb25zdCByZWplY3QgPSB0aGlzLnJlamVjdENhbGxiYWNrcy5nZXQobWVzc2FnZUlkKTtcclxuICAgICAgICBpZiAocmVqZWN0KSB7XHJcbiAgICAgICAgICByZWplY3QodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBtZXNzYWdlSWQgPSAtMTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChtZXNzYWdlSWQgIT0gbnVsbCkge1xyXG4gICAgICBjb25zdCBjYWxsYmFjayA9IHRoaXMuZXhwZWN0ZWRNZXRob2RzLmdldChtZXNzYWdlSWQpO1xyXG4gICAgICBpZiAoY2FsbGJhY2spIHtcclxuICAgICAgICBjb25zdCBmdW5jID0gY2FsbGJhY2suc2hpZnQoKTtcclxuICAgICAgICBpZiAoZnVuYykgZnVuYyh2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5pbnZva2VTdWNjZXNzSGFuZGxlcnMobWV0aG9kKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBjYWxsYmFjayA9IHRoaXMuZXhwZWN0ZWRNZXRob2RzLmdldChtZXRob2QpO1xyXG4gICAgICAgIGlmIChjYWxsYmFjayAmJiBjYWxsYmFjay5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBjb25zdCBmdW5jID0gY2FsbGJhY2suc2hpZnQoKTtcclxuICAgICAgICAgIGlmIChmdW5jKSBmdW5jKHZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3Qgb3V0ID0gV2Vic29ja2V0Q2xpZW50Lm91dGJvdW5kcy5nZXQobWV0aG9kKTtcclxuICAgICAgICAgIGlmIChvdXQpIHtcclxuICAgICAgICAgICAgb3V0KHZhbHVlLCBzcGVjaWZpY0hhc2gsIGluc2VydGVkLCB1cGRhdGVkLCBkZWxldGVkLCBsZW5ndGgsIHRoaXMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgaGFuZGxlID0gV2Vic29ja2V0Q2xpZW50LmhhbmRsZXMuZ2V0KG1ldGhvZCk7XHJcbiAgICAgICAgICBpZiAoaGFuZGxlKSB7XHJcbiAgICAgICAgICAgIChoYW5kbGUuRnVuYyBhcyBGdW5jdGlvbikodmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgRXJyb3IoXHJcbiAgICAgICAgJ05vIE1lc3NhZ2VJZCB3YXMgcHJvdmlkZWQsIHRoZSBjb25uZWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVPdXRib3VuZENhY2hlUmVxdWVzdChtZXRob2Q6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuZGJTZXJ2aWNlKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhpcy5kYlNlcnZpY2UuZ2V0QnlLZXkoJ291dGJvdW5kJywgbWV0aG9kKS5zdWJzY3JpYmUoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICAgICAgdGhpcy5zZW5kKCdfX19jYWNoZScsIHtcclxuICAgICAgICAgICAgICBtZXRob2QsXHJcbiAgICAgICAgICAgICAgc3BlY2lmaWNIYXNoOiBpdGVtLnNwZWNpZmljSGFzaCB8fCBudWxsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZW5kKCdfX19jYWNoZScsIHtcclxuICAgICAgICAgICAgICBtZXRob2QsXHJcbiAgICAgICAgICAgICAgc3BlY2lmaWNIYXNoOiBudWxsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgdGhpcy5zZW5kKCdfX19jYWNoZScsIHtcclxuICAgICAgICAgIG1ldGhvZCxcclxuICAgICAgICAgIHNwZWNpZmljSGFzaDogbnVsbFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FjdGl2ZUNvbm5lY3Q6ICcgKyBlKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZW5kKCdfX19jYWNoZScsIHtcclxuICAgICAgICBtZXRob2QsXHJcbiAgICAgICAgc3BlY2lmaWNIYXNoOiBudWxsXHJcbiAgICAgIH0pO1xyXG4gICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICdBY3RpdmUtQ29ubmVjdDogQ2FjaGluZyBub3QgcG9zc2libGUgYXMgdGhlIGluZGV4ZWREQiBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQnXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBvdXRib3VuZHM6IE1hcDxcclxuICAgIHN0cmluZyxcclxuICAgIChcclxuICAgICAgZGF0YTogYW55LFxyXG4gICAgICBzcGVjaWZpY0hhc2g6IG51bWJlciB8IG51bGwsXHJcbiAgICAgIGluc2VydGVkOiBhbnlbXSB8IG51bGwsXHJcbiAgICAgIHVwZGF0ZWQ6IGFueVtdIHwgbnVsbCxcclxuICAgICAgZGVsZXRlZDogYW55W10gfCBudWxsLFxyXG4gICAgICBsZW5ndGg6IG51bWJlciB8IG51bGwsXHJcbiAgICAgIF90aGlzOiBXZWJzb2NrZXRDbGllbnRcclxuICAgICkgPT4gdm9pZFxyXG4gID4gPSBuZXcgTWFwKCk7XHJcbiAgc3RhdGljIGV4cGVjdE91dGJvdW5kKFxyXG4gICAgbWV0aG9kOiBzdHJpbmcsXHJcbiAgICBjYWxsYmFjazogKFxyXG4gICAgICBkYXRhOiBhbnksXHJcbiAgICAgIHNwZWNpZmljSGFzaDogbnVtYmVyIHwgbnVsbCxcclxuICAgICAgaW5zZXJ0ZWQ6IGFueVtdIHwgbnVsbCxcclxuICAgICAgdXBkYXRlZDogYW55W10gfCBudWxsLFxyXG4gICAgICBkZWxldGVkOiBhbnlbXSB8IG51bGwsXHJcbiAgICAgIGxlbmd0aDogbnVtYmVyIHwgbnVsbCxcclxuICAgICAgX3RoaXM6IFdlYnNvY2tldENsaWVudFxyXG4gICAgKSA9PiB2b2lkXHJcbiAgKSB7XHJcbiAgICBXZWJzb2NrZXRDbGllbnQub3V0Ym91bmRzLnNldChtZXRob2QsIGNhbGxiYWNrKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGhhbmRsZXM6IE1hcDxzdHJpbmcsIERlY29yYWJsZUZ1bmN0aW9uPiA9IG5ldyBNYXAoKTtcclxuICBzdGF0aWMgcmVnaXN0ZXJIYW5kbGUobWV0aG9kOiBzdHJpbmcsIGNhbGxiYWNrOiBEZWNvcmFibGVGdW5jdGlvbikge1xyXG4gICAgV2Vic29ja2V0Q2xpZW50LmhhbmRsZXMuc2V0KG1ldGhvZCwgY2FsbGJhY2spO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBpc0Nvbm5lY3RlZCgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLndzKSByZXR1cm4gdGhpcy53cy5yZWFkeVN0YXRlID09IFdlYlNvY2tldC5PUEVOO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlbmRCcm93c2VySW5mb1RvU2VydmVyKCkge1xyXG4gICAgLy8gc2VuZCBicm93c2VyIC8gb3MgaW5mb3JtYXRpb25cclxuICAgIGNvbnN0IGJyb3dzZXIgPSB0aGlzLmdldEJyb3dzZXIoKTtcclxuICAgIGNvbnN0IG9zID0gdGhpcy5nZXRPUygpO1xyXG4gICAgdGhpcy5zZW5kKCdfX19icm93c2VyJywge1xyXG4gICAgICBicm93c2VyOiBgJHticm93c2VyLm5hbWV9ICR7YnJvd3Nlci52ZXJzaW9ufSAke29zfWBcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEJyb3dzZXIoKTogeyBuYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZyB9IHtcclxuICAgIC8vIGh0dHBzOi8vd3d3LmdyZWdvcnl2YXJnaGVzZS5jb20vaG93LXRvLWdldC1icm93c2VyLW5hbWUtYW5kLXZlcnNpb24tdmlhLWphdmFzY3JpcHQvXHJcbiAgICB2YXIgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50LFxyXG4gICAgICB0ZW0sXHJcbiAgICAgIE0gPVxyXG4gICAgICAgIHVhLm1hdGNoKFxyXG4gICAgICAgICAgLyhvcGVyYXxjaHJvbWV8c2FmYXJpfGZpcmVmb3h8bXNpZXx0cmlkZW50KD89XFwvKSlcXC8/XFxzKihcXGQrKS9pXHJcbiAgICAgICAgKSB8fCBbXTtcclxuICAgIGlmICgvdHJpZGVudC9pLnRlc3QoTVsxXSkpIHtcclxuICAgICAgdGVtID0gL1xcYnJ2WyA6XSsoXFxkKykvZy5leGVjKHVhKSB8fCBbXTtcclxuICAgICAgcmV0dXJuIHsgbmFtZTogJ0lFICcsIHZlcnNpb246IHRlbVsxXSB8fCAnJyB9O1xyXG4gICAgfVxyXG4gICAgaWYgKE1bMV0gPT09ICdDaHJvbWUnKSB7XHJcbiAgICAgIHRlbSA9IHVhLm1hdGNoKC9cXGJPUFJcXC8oXFxkKykvKTtcclxuICAgICAgaWYgKHRlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgbmFtZTogJ09wZXJhJywgdmVyc2lvbjogdGVtWzFdIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIE0gPSBNWzJdID8gW01bMV0sIE1bMl1dIDogW25hdmlnYXRvci5hcHBOYW1lLCBuYXZpZ2F0b3IuYXBwVmVyc2lvbiwgJy0/J107XHJcbiAgICBpZiAoKHRlbSA9IHVhLm1hdGNoKC92ZXJzaW9uXFwvKFxcZCspL2kpKSAhPSBudWxsKSB7XHJcbiAgICAgIE0uc3BsaWNlKDEsIDEsIHRlbVsxXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBuYW1lOiBNWzBdLFxyXG4gICAgICB2ZXJzaW9uOiBNWzFdXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldE9TKCk6IHN0cmluZyB7XHJcbiAgICB2YXIgdXNlckFnZW50ID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQsXHJcbiAgICAgIHBsYXRmb3JtID0gd2luZG93Lm5hdmlnYXRvci5wbGF0Zm9ybSxcclxuICAgICAgbWFjb3NQbGF0Zm9ybXMgPSBbJ01hY2ludG9zaCcsICdNYWNJbnRlbCcsICdNYWNQUEMnLCAnTWFjNjhLJ10sXHJcbiAgICAgIHdpbmRvd3NQbGF0Zm9ybXMgPSBbJ1dpbjMyJywgJ1dpbjY0JywgJ1dpbmRvd3MnLCAnV2luQ0UnXSxcclxuICAgICAgaW9zUGxhdGZvcm1zID0gWydpUGhvbmUnLCAnaVBhZCcsICdpUG9kJ10sXHJcbiAgICAgIG9zID0gbnVsbDtcclxuXHJcbiAgICBpZiAobWFjb3NQbGF0Zm9ybXMuaW5kZXhPZihwbGF0Zm9ybSkgIT09IC0xKSB7XHJcbiAgICAgIG9zID0gJ01hYyBPUyc7XHJcbiAgICB9IGVsc2UgaWYgKGlvc1BsYXRmb3Jtcy5pbmRleE9mKHBsYXRmb3JtKSAhPT0gLTEpIHtcclxuICAgICAgb3MgPSAnaU9TJztcclxuICAgIH0gZWxzZSBpZiAod2luZG93c1BsYXRmb3Jtcy5pbmRleE9mKHBsYXRmb3JtKSAhPT0gLTEpIHtcclxuICAgICAgb3MgPSAnV2luZG93cyc7XHJcbiAgICB9IGVsc2UgaWYgKC9BbmRyb2lkLy50ZXN0KHVzZXJBZ2VudCkpIHtcclxuICAgICAgb3MgPSAnQW5kcm9pZCc7XHJcbiAgICB9IGVsc2UgaWYgKCFvcyAmJiAvTGludXgvLnRlc3QocGxhdGZvcm0pKSB7XHJcbiAgICAgIG9zID0gJ0xpbnV4JztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3MgfHwgJyc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBvblN1Y2Nlc3NIYW5kbGVyczoge1xyXG4gICAgY2FsbGJhY2s6IERlY29yYWJsZUZ1bmN0aW9uO1xyXG4gICAgcmVnZXhwOiBSZWdFeHA7XHJcbiAgfVtdID0gW107XHJcbiAgcHVibGljIHN0YXRpYyBvblN1Y2Nlc3MoY2FsbGJhY2s6IERlY29yYWJsZUZ1bmN0aW9uLCByZWdleHA6IFJlZ0V4cCkge1xyXG4gICAgdGhpcy5vblN1Y2Nlc3NIYW5kbGVycy5wdXNoKHsgY2FsbGJhY2ssIHJlZ2V4cCB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIG9uUmVjb25uZWN0Q2FsbGJhY2s6IERlY29yYWJsZUZ1bmN0aW9uW10gPSBbXTtcclxuICBzdGF0aWMgb25SZWNvbm5lY3QoY2FsbGJhY2s6IERlY29yYWJsZUZ1bmN0aW9uKSB7XHJcbiAgICBXZWJzb2NrZXRDbGllbnQub25SZWNvbm5lY3RDYWxsYmFjay5wdXNoKGNhbGxiYWNrKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW52b2tlU3VjY2Vzc0hhbmRsZXJzKG1ldGhvZDogc3RyaW5nKSB7XHJcbiAgICBXZWJzb2NrZXRDbGllbnQub25TdWNjZXNzSGFuZGxlcnNcclxuICAgICAgLmZpbHRlcigoZSkgPT4gZS5yZWdleHAudGVzdChtZXRob2QpKVxyXG4gICAgICAuZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICAgIHZhciByZXMgPSAoZS5jYWxsYmFjay5GdW5jIGFzIEZ1bmN0aW9uKSgpO1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLnRoZW4pIHtcclxuICAgICAgICAgIHJlcy50aGVuKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbG9zZWQgPSBmYWxzZTtcclxuICBwdWJsaWMgZGlzY29ubmVjdChyZXN0YXJ0PzogYm9vbGVhbikge1xyXG4gICAgaWYgKCFyZXN0YXJ0KSB0aGlzLmNsb3NlZCA9IHRydWU7XHJcbiAgICBpZiAodGhpcy53cykgdGhpcy53cy5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0Q2FjaGUoKSB7fVxyXG5cclxuICBnZXQgdGFyZ2V0KCk6IGFueSB7XHJcbiAgICByZXR1cm4gKHRoaXMgYXMgYW55KS5fX3Byb3RvX187XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -104,7 +104,7 @@ export function Outbound(method, requestingRequired, cached, sortBy) {
104
104
  .update('outbound', {
105
105
  method,
106
106
  data,
107
- specificHash,
107
+ specificHash
108
108
  })
109
109
  .subscribe(() => { });
110
110
  }
@@ -144,7 +144,7 @@ export function Outbound(method, requestingRequired, cached, sortBy) {
144
144
  .update('outbound', {
145
145
  method,
146
146
  data,
147
- specificHash,
147
+ specificHash
148
148
  })
149
149
  .subscribe(() => { });
150
150
  }
@@ -172,9 +172,9 @@ export function Outbound(method, requestingRequired, cached, sortBy) {
172
172
  }
173
173
  });
174
174
  if (requestingRequired) {
175
- WebsocketClient.addResetRequestingStateCallback(function callback() {
176
- if (target.___requested) {
177
- target.___requested[propertyKey] = false;
175
+ WebsocketClient.addResetRequestingStateCallback(function callback(client) {
176
+ if (target.___requested && target.___requested[propertyKey]) {
177
+ client.send('request.' + method, null).then();
178
178
  }
179
179
  });
180
180
  }
@@ -204,10 +204,10 @@ export function Outbound(method, requestingRequired, cached, sortBy) {
204
204
  if (sortBy && val)
205
205
  val = val.sort(sortBy);
206
206
  return (target.___data[propertyKey] = val);
207
- },
207
+ }
208
208
  };
209
209
  target[propertyKey] = obj;
210
210
  return obj;
211
211
  };
212
212
  }
213
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0Ym91bmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY3RpdmUtY29ubmVjdC1uZzIvc3JjL2xpYi93ZWJzb2NrZXQvZGVjb3JhdG9ycy93ZWJzb2NrZXQvb3V0Ym91bmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUUvQyxNQUFNLFVBQVUsUUFBUSxDQUN0QixNQUFjLEVBQ2Qsa0JBQTRCLEVBQzVCLE1BQWdCLEVBQ2hCLE1BQW1DO0lBRW5DLE9BQU8sU0FBUyxTQUFTLENBQUMsTUFBVyxFQUFFLFdBQW1CO1FBQ3hELE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQW1CLENBQUM7UUFDNUMsc0JBQXNCO1FBQ3RCLGVBQWUsQ0FBQyxjQUFjLENBQzVCLE1BQU0sRUFDTixTQUFTLFdBQVcsQ0FDbEIsSUFBUyxFQUNULFlBQTJCLEVBQzNCLFFBQXNCLEVBQ3RCLE9BQXFCLEVBQ3JCLE9BQXFCLEVBQ3JCLE1BQXFCLEVBQ3JCLEtBQXNCO1lBRXRCLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVztnQkFBRSxNQUFNLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUNqRCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU87Z0JBQUUsTUFBTSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXO2dCQUFFLE1BQU0sQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBQ2pELElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWTtnQkFBRSxNQUFNLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztZQUNuRCxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNYLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRTtvQkFDbkIsSUFBSTt3QkFDRixLQUFLLENBQUMsU0FBUzs2QkFDWixXQUFXLENBQUMs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QUFJLEdBQUc7b0JBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQzdDLENBQUM7U0FDRixDQUFDO1FBQ0YsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUMxQixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXZWJzb2NrZXRDbGllbnQgfSBmcm9tICcuLi8uLi9jbGllbnQnO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIE91dGJvdW5kKFxyXG4gIG1ldGhvZDogc3RyaW5nLFxyXG4gIHJlcXVlc3RpbmdSZXF1aXJlZD86IGJvb2xlYW4sXHJcbiAgY2FjaGVkPzogYm9vbGVhbixcclxuICBzb3J0Qnk/OiAoYTogYW55LCBiOiBhbnkpID0+IG51bWJlclxyXG4pIHtcclxuICByZXR1cm4gZnVuY3Rpb24gX091dGJvdW5kKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKTogYW55IHtcclxuICAgIHRhcmdldC5sb2FkaW5nID0gbmV3IE1hcDxzdHJpbmcsIGJvb2xlYW4+KCk7XHJcbiAgICAvLyBwcm9wZXJ0eSBhbm5vdGF0aW9uXHJcbiAgICBXZWJzb2NrZXRDbGllbnQuZXhwZWN0T3V0Ym91bmQoXHJcbiAgICAgIG1ldGhvZCxcclxuICAgICAgZnVuY3Rpb24gc2V0T3V0Ym91bmQoXHJcbiAgICAgICAgZGF0YTogYW55LFxyXG4gICAgICAgIHNwZWNpZmljSGFzaDogbnVtYmVyIHwgbnVsbCxcclxuICAgICAgICBpbnNlcnRlZDogYW55W10gfCBudWxsLFxyXG4gICAgICAgIHVwZGF0ZWQ6IGFueVtdIHwgbnVsbCxcclxuICAgICAgICBkZWxldGVkOiBhbnlbXSB8IG51bGwsXHJcbiAgICAgICAgbGVuZ3RoOiBudW1iZXIgfCBudWxsLFxyXG4gICAgICAgIF90aGlzOiBXZWJzb2NrZXRDbGllbnRcclxuICAgICAgKSB7XHJcbiAgICAgICAgaWYgKCF0YXJnZXQuX19fcmVjZWl2ZWQpIHRhcmdldC5fX19yZWNlaXZlZCA9IHt9O1xyXG4gICAgICAgIGlmICghdGFyZ2V0Ll9fX2RhdGEpIHRhcmdldC5fX19kYXRhID0ge307XHJcbiAgICAgICAgaWYgKCF0YXJnZXQuX19fcmVjZWl2ZWQpIHRhcmdldC5fX19yZWNlaXZlZCA9IHt9O1xyXG4gICAgICAgIGlmICghdGFyZ2V0Ll9fX3JlcXVlc3RlZCkgdGFyZ2V0Ll9fX3JlcXVlc3RlZCA9IHt9O1xyXG4gICAgICAgIGlmICghY2FjaGVkKSB7XHJcbiAgICAgICAgICBpZiAoX3RoaXMuZGJTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgX3RoaXMuZGJTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAuZGVsZXRlQnlLZXkoJ291dGJvdW5kJywgbWV0aG9kKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7fSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgICAgICAgJ0FjdGl2ZUNvbm5lY3Q6IGNvdWxkIG5vdCBkZWxldGUgaW5kZXhkYiBjYWNoZSBlbnRyeSdcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZGF0YSA9PSAnY2FjaGVfcmVzdG9yZScpIHtcclxuICAgICAgICAgIGlmIChfdGhpcy5kYlNlcnZpY2UpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICBfdGhpcy5kYlNlcnZpY2VcclxuICAgICAgICAgICAgICAgIC5nZXRCeUtleSgnb3V0Ym91bmQnLCBtZXRob2QpXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICB0YXJnZXQuX19fcmVjZWl2ZWRbcHJvcGVydHlLZXldID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgdGFyZ2V0Ll9fX2RhdGFbcHJvcGVydHlLZXldID0gcmVzdWx0LmRhdGE7XHJcbiAgICAgICAgICAgICAgICAgIHRhcmdldC5sb2FkaW5nLnNldChwcm9wZXJ0eUtleSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdBY3RpdmVDb25uZWN0OiBVbmFibGUgdG8gcmVzdG9yZSBjYWNoZWQgZGF0YS4nKTtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgICAgICdBY3RpdmVDb25uZWN0OiBDYWNoaW5nIC8gcmVzdG9yZSBub3QgcG9zc2libGUgYXMgdGhlIGluZGV4ZWREQiBpcyBub3QgYWNjZXNzaWJsZSdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgPT0gJ2NhY2hlX2RlbGV0ZScpIHtcclxuICAgICAgICAgIGlmIChfdGhpcy5kYlNlcnZpY2UpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICBfdGhpcy5kYlNlcnZpY2VcclxuICAgICAgICAgICAgICAgIC5kZWxldGVCeUtleSgnb3V0Ym91bmQnLCBtZXRob2QpXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHt9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FjdGl2ZUNvbm5lY3Q6IFVuYWJsZSB0byBkZWxldGUgY2FjaGVkIGRhdGEnKTtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgICAgICdBY3RpdmVDb25uZWN0OiBDYWNoaW5nIC8gcmVzdG9yZSBub3QgcG9zc2libGUgYXMgdGhlIGluZGV4ZWREQiBpcyBub3QgYWNjZXNzaWJsZSdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRhcmdldC5fX19yZWNlaXZlZFtwcm9wZXJ0eUtleV0gPSBmYWxzZTtcclxuICAgICAgICAgIHRhcmdldC5fX19kYXRhW3Byb3BlcnR5S2V5XSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIHRhcmdldC5sb2FkaW5nLnNldChwcm9wZXJ0eUtleSwgZmFsc2UpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YSA9PSAnZGF0YV9kZWxldGUnKSB7XHJcbiAgICAgICAgICB0YXJnZXQuX19fZGF0YVtwcm9wZXJ0eUtleV0gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICB0YXJnZXQubG9hZGluZy5zZXQocHJvcGVydHlLZXksIGZhbHNlKTtcclxuICAgICAgICAgIHRhcmdldC5fX19yZWNlaXZlZFtwcm9wZXJ0eUtleV0gPSBmYWxzZTtcclxuICAgICAgICAgIHRhcmdldC5fX19yZXF1ZXN0ZWRbcHJvcGVydHlLZXldID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhID09ICdkYXRhX2RpZmYnKSB7XHJcbiAgICAgICAgICB2YXIgZGF0YSA9IHRhcmdldC5fX19kYXRhW3Byb3BlcnR5S2V5XSB8fCBbXTtcclxuICAgICAgICAgIGluc2VydGVkPy5mb3JFYWNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nID0gZGF0YS5maWx0ZXIoKGQ6IGFueSkgPT4gZC5pZCA9PSBlLmlkKTtcclxuICAgICAgICAgICAgaWYgKG1hdGNoaW5nLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBkYXRhW2RhdGEuaW5kZXhPZihtYXRjaGluZ1swXSldID0gZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBkYXRhLnB1c2goZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdXBkYXRlZD8uZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtYXRjaGluZyA9IGRhdGEuZmlsdGVyKChkOiBhbnkpID0+IGQuaWQgPT0gZS5pZCk7XHJcbiAgICAgICAgICAgIGlmIChtYXRjaGluZy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgZGF0YVtkYXRhLmluZGV4T2YobWF0Y2hpbmdbMF0pXSA9IGU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgZGF0YS5wdXNoKGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGRlbGV0ZWQ/LmZvckVhY2goKGUpID0+IHtcclxuICAgICAgICAgICAgZGF0YSA9IGRhdGEuZmlsdGVyKChkOiBhbnkpID0+IGQuaWQgIT0gZS5pZCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGlmIChzb3J0QnkgJiYgZGF0YSkgZGF0YSA9IGRhdGEuc29ydChzb3J0QnkpO1xyXG4gICAgICAgICAgdGFyZ2V0Ll9fX2RhdGFbcHJvcGVydHlLZXldID0gZGF0YTtcclxuICAgICAgICAgIHRhcmdldC5sb2FkaW5nLnNldChwcm9wZXJ0eUtleSwgZmFsc2UpO1xyXG5cclxuICAgICAgICAgIGlmIChjYWNoZWQgJiYgc3BlY2lmaWNIYXNoKSB7XHJcbiAgICAgICAgICAgIGlmIChfdGhpcy5kYlNlcnZpY2UpIHtcclxuICAgICAgICAgICAgICBpZiAoZGF0YSAmJiBkYXRhPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICBfdGhpcy5kYlNlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgICAudXBkYXRlKCdvdXRib3VuZCcsIHtcclxuICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCxcclxuICAgICAgICAgICAgICAgICAgICAgIGRhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpY0hhc2gsXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHt9KTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignQWN0aXZlQ29ubmVjdDogVW5hYmxlIHRvIHVwZGF0ZSBjYWNoZWQgZGF0YScpO1xyXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICBfdGhpcy5kYlNlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgICAuZGVsZXRlQnlLZXkoJ291dGJvdW5kJywgbWV0aG9kKVxyXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge30pO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdBY3RpdmVDb25uZWN0OiBVbmFibGUgdG8gZGVsZXRlIGNhY2hlZCBkYXRhJyk7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgICAgICAgICAnQWN0aXZlQ29ubmVjdDogQ2FjaGluZyBub3QgcG9zc2libGUgYXMgdGhlIGluZGV4ZWREQiBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQnXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoc29ydEJ5ICYmIGRhdGEpIGRhdGEgPSBkYXRhLnNvcnQoc29ydEJ5KTtcclxuICAgICAgICAgIHRhcmdldC5fX19yZWNlaXZlZFtwcm9wZXJ0eUtleV0gPSB0cnVlO1xyXG4gICAgICAgICAgdGFyZ2V0Ll9fX2RhdGFbcHJvcGVydHlLZXldID0gZGF0YTtcclxuICAgICAgICAgIHRhcmdldC5sb2FkaW5nLnNldChwcm9wZXJ0eUtleSwgZmFsc2UpO1xyXG4gICAgICAgICAgaWYgKGNhY2hlZCAmJiBzcGVjaWZpY0hhc2gpIHtcclxuICAgICAgICAgICAgaWYgKF90aGlzLmRiU2VydmljZSkge1xyXG4gICAgICAgICAgICAgIGlmIChkYXRhICYmIGRhdGE/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgIF90aGlzLmRiU2VydmljZVxyXG4gICAgICAgICAgICAgICAgICAgIC51cGRhdGUoJ291dGJvdW5kJywge1xyXG4gICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLFxyXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YSxcclxuICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljSGFzaCxcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge30pO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdBY3RpdmVDb25uZWN0OiBVbmFibGUgdG8gdXBkYXRlIGNhY2hlZCBkYXRhJyk7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgIF90aGlzLmRiU2VydmljZVxyXG4gICAgICAgICAgICAgICAgICAgIC5kZWxldGVCeUtleSgnb3V0Ym91bmQnLCBtZXRob2QpXHJcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7fSk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FjdGl2ZUNvbm5lY3Q6IFVuYWJsZSB0byB1cGRhdGUgY2FjaGVkIGRhdGEnKTtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgICAgICAgICdBY3RpdmVDb25uZWN0OiBDYWNoaW5nIG5vdCBwb3NzaWJsZSBhcyB0aGUgaW5kZXhlZERCIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCdcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgaWYgKHJlcXVlc3RpbmdSZXF1aXJlZCkge1xyXG4gICAgICBXZWJzb2NrZXRDbGllbnQuYWRkUmVzZXRSZXF1ZXN0aW5nU3RhdGVDYWxsYmFjayhmdW5jdGlvbiBjYWxsYmFjaygpIHtcclxuICAgICAgICBpZiAodGFyZ2V0Ll9fX3JlcXVlc3RlZCkge1xyXG4gICAgICAgICAgdGFyZ2V0Ll9fX3JlcXVlc3RlZFtwcm9wZXJ0eUtleV0gPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG9iaiA9IHtcclxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxyXG4gICAgICBnZXQoKSB7XHJcbiAgICAgICAgaWYgKCF0YXJnZXQuX19fcmVxdWVzdGVkKSB0YXJnZXQuX19fcmVxdWVzdGVkID0ge307XHJcbiAgICAgICAgaWYgKHJlcXVlc3RpbmdSZXF1aXJlZCAmJiAhdGFyZ2V0Ll9fX3JlcXVlc3RlZFtwcm9wZXJ0eUtleV0pIHtcclxuICAgICAgICAgIHRhcmdldC5fX19yZXF1ZXN0ZWRbcHJvcGVydHlLZXldID0gdHJ1ZTtcclxuICAgICAgICAgICh0aGlzIGFzIGFueSkuc2VuZCgncmVxdWVzdC4nICsgbWV0aG9kLCBudWxsKS50aGVuKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGFyZ2V0Ll9fX2RhdGEpIHRhcmdldC5fX19kYXRhID0ge307XHJcbiAgICAgICAgaWYgKCF0YXJnZXQuX19fZGF0YVtwcm9wZXJ0eUtleV0pIHtcclxuICAgICAgICAgIHRhcmdldC5sb2FkaW5nLnNldChwcm9wZXJ0eUtleSwgdHJ1ZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQubG9hZGluZ1twcm9wZXJ0eUtleV0pIHtcclxuICAgICAgICAgIHRhcmdldC5sb2FkaW5nLnNldChwcm9wZXJ0eUtleSwgZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGFyZ2V0Ll9fX2RhdGFbcHJvcGVydHlLZXldO1xyXG4gICAgICB9LFxyXG4gICAgICBzZXQodmFsOiBhbnkpIHtcclxuICAgICAgICBpZiAoIXRhcmdldC5fX19kYXRhKSB0YXJnZXQuX19fZGF0YSA9IHt9O1xyXG4gICAgICAgIHRhcmdldC5sb2FkaW5nLnNldChwcm9wZXJ0eUtleSwgZmFsc2UpO1xyXG4gICAgICAgIGlmIChzb3J0QnkgJiYgdmFsKSB2YWwgPSB2YWwuc29ydChzb3J0QnkpO1xyXG4gICAgICAgIHJldHVybiAodGFyZ2V0Ll9fX2RhdGFbcHJvcGVydHlLZXldID0gdmFsKTtcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgICB0YXJnZXRbcHJvcGVydHlLZXldID0gb2JqO1xyXG4gICAgcmV0dXJuIG9iajtcclxuICB9O1xyXG59XHJcbiJdfQ==
213
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0Ym91bmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY3RpdmUtY29ubmVjdC1uZzIvc3JjL2xpYi93ZWJzb2NrZXQvZGVjb3JhdG9ycy93ZWJzb2NrZXQvb3V0Ym91bmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUUvQyxNQUFNLFVBQVUsUUFBUSxDQUN0QixNQUFjLEVBQ2Qsa0JBQTRCLEVBQzVCLE1BQWdCLEVBQ2hCLE1BQW1DO0lBRW5DLE9BQU8sU0FBUyxTQUFTLENBQUMsTUFBVyxFQUFFLFdBQW1CO1FBQ3hELE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQW1CLENBQUM7UUFDNUMsc0JBQXNCO1FBQ3RCLGVBQWUsQ0FBQyxjQUFjLENBQzVCLE1BQU0sRUFDTixTQUFTLFdBQVcsQ0FDbEIsSUFBUyxFQUNULFlBQTJCLEVBQzNCLFFBQXNCLEVBQ3RCLE9BQXFCLEVBQ3JCLE9BQXFCLEVBQ3JCLE1BQXFCLEVBQ3JCLEtBQXNCO1lBRXRCLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVztnQkFBRSxNQUFNLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUNqRCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU87Z0JBQUUsTUFBTSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXO2dCQUFFLE1BQU0sQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBQ2pELElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWTtnQkFBRSxNQUFNLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztZQUNuRCxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNYLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRTtvQkFDbkIsSUFBSTt3QkFDRixLQUFLLENBQUMsU0FBUzs2QkFDWixXQUFXLENBQUMs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QUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZDLElBQUksTUFBTSxJQUFJLEdBQUc7b0JBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQzdDLENBQUM7U0FDRixDQUFDO1FBQ0YsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUMxQixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXZWJzb2NrZXRDbGllbnQgfSBmcm9tICcuLi8uLi9jbGllbnQnO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIE91dGJvdW5kKFxyXG4gIG1ldGhvZDogc3RyaW5nLFxyXG4gIHJlcXVlc3RpbmdSZXF1aXJlZD86IGJvb2xlYW4sXHJcbiAgY2FjaGVkPzogYm9vbGVhbixcclxuICBzb3J0Qnk/OiAoYTogYW55LCBiOiBhbnkpID0+IG51bWJlclxyXG4pIHtcclxuICByZXR1cm4gZnVuY3Rpb24gX091dGJvdW5kKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKTogYW55IHtcclxuICAgIHRhcmdldC5sb2FkaW5nID0gbmV3IE1hcDxzdHJpbmcsIGJvb2xlYW4+KCk7XHJcbiAgICAvLyBwcm9wZXJ0eSBhbm5vdGF0aW9uXHJcbiAgICBXZWJzb2NrZXRDbGllbnQuZXhwZWN0T3V0Ym91bmQoXHJcbiAgICAgIG1ldGhvZCxcclxuICAgICAgZnVuY3Rpb24gc2V0T3V0Ym91bmQoXHJcbiAgICAgICAgZGF0YTogYW55LFxyXG4gICAgICAgIHNwZWNpZmljSGFzaDogbnVtYmVyIHwgbnVsbCxcclxuICAgICAgICBpbnNlcnRlZDogYW55W10gfCBudWxsLFxyXG4gICAgICAgIHVwZGF0ZWQ6IGFueVtdIHwgbnVsbCxcclxuICAgICAgICBkZWxldGVkOiBhbnlbXSB8IG51bGwsXHJcbiAgICAgICAgbGVuZ3RoOiBudW1iZXIgfCBudWxsLFxyXG4gICAgICAgIF90aGlzOiBXZWJzb2NrZXRDbGllbnRcclxuICAgICAgKSB7XHJcbiAgICAgICAgaWYgKCF0YXJnZXQuX19fcmVjZWl2ZWQpIHRhcmdldC5fX19yZWNlaXZlZCA9IHt9O1xyXG4gICAgICAgIGlmICghdGFyZ2V0Ll9fX2RhdGEpIHRhcmdldC5fX19kYXRhID0ge307XHJcbiAgICAgICAgaWYgKCF0YXJnZXQuX19fcmVjZWl2ZWQpIHRhcmdldC5fX19yZWNlaXZlZCA9IHt9O1xyXG4gICAgICAgIGlmICghdGFyZ2V0Ll9fX3JlcXVlc3RlZCkgdGFyZ2V0Ll9fX3JlcXVlc3RlZCA9IHt9O1xyXG4gICAgICAgIGlmICghY2FjaGVkKSB7XHJcbiAgICAgICAgICBpZiAoX3RoaXMuZGJTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgX3RoaXMuZGJTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAuZGVsZXRlQnlLZXkoJ291dGJvdW5kJywgbWV0aG9kKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7fSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgICAgICAgJ0FjdGl2ZUNvbm5lY3Q6IGNvdWxkIG5vdCBkZWxldGUgaW5kZXhkYiBjYWNoZSBlbnRyeSdcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZGF0YSA9PSAnY2FjaGVfcmVzdG9yZScpIHtcclxuICAgICAgICAgIGlmIChfdGhpcy5kYlNlcnZpY2UpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICBfdGhpcy5kYlNlcnZpY2VcclxuICAgICAgICAgICAgICAgIC5nZXRCeUtleSgnb3V0Ym91bmQnLCBtZXRob2QpXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICB0YXJnZXQuX19fcmVjZWl2ZWRbcHJvcGVydHlLZXldID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgdGFyZ2V0Ll9fX2RhdGFbcHJvcGVydHlLZXldID0gcmVzdWx0LmRhdGE7XHJcbiAgICAgICAgICAgICAgICAgIHRhcmdldC5sb2FkaW5nLnNldChwcm9wZXJ0eUtleSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdBY3RpdmVDb25uZWN0OiBVbmFibGUgdG8gcmVzdG9yZSBjYWNoZWQgZGF0YS4nKTtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgICAgICdBY3RpdmVDb25uZWN0OiBDYWNoaW5nIC8gcmVzdG9yZSBub3QgcG9zc2libGUgYXMgdGhlIGluZGV4ZWREQiBpcyBub3QgYWNjZXNzaWJsZSdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgPT0gJ2NhY2hlX2RlbGV0ZScpIHtcclxuICAgICAgICAgIGlmIChfdGhpcy5kYlNlcnZpY2UpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICBfdGhpcy5kYlNlcnZpY2VcclxuICAgICAgICAgICAgICAgIC5kZWxldGVCeUtleSgnb3V0Ym91bmQnLCBtZXRob2QpXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHt9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FjdGl2ZUNvbm5lY3Q6IFVuYWJsZSB0byBkZWxldGUgY2FjaGVkIGRhdGEnKTtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgICAgICdBY3RpdmVDb25uZWN0OiBDYWNoaW5nIC8gcmVzdG9yZSBub3QgcG9zc2libGUgYXMgdGhlIGluZGV4ZWREQiBpcyBub3QgYWNjZXNzaWJsZSdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRhcmdldC5fX19yZWNlaXZlZFtwcm9wZXJ0eUtleV0gPSBmYWxzZTtcclxuICAgICAgICAgIHRhcmdldC5fX19kYXRhW3Byb3BlcnR5S2V5XSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIHRhcmdldC5sb2FkaW5nLnNldChwcm9wZXJ0eUtleSwgZmFsc2UpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YSA9PSAnZGF0YV9kZWxldGUnKSB7XHJcbiAgICAgICAgICB0YXJnZXQuX19fZGF0YVtwcm9wZXJ0eUtleV0gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICB0YXJnZXQubG9hZGluZy5zZXQocHJvcGVydHlLZXksIGZhbHNlKTtcclxuICAgICAgICAgIHRhcmdldC5fX19yZWNlaXZlZFtwcm9wZXJ0eUtleV0gPSBmYWxzZTtcclxuICAgICAgICAgIHRhcmdldC5fX19yZXF1ZXN0ZWRbcHJvcGVydHlLZXldID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhID09ICdkYXRhX2RpZmYnKSB7XHJcbiAgICAgICAgICB2YXIgZGF0YSA9IHRhcmdldC5fX19kYXRhW3Byb3BlcnR5S2V5XSB8fCBbXTtcclxuICAgICAgICAgIGluc2VydGVkPy5mb3JFYWNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nID0gZGF0YS5maWx0ZXIoKGQ6IGFueSkgPT4gZC5pZCA9PSBlLmlkKTtcclxuICAgICAgICAgICAgaWYgKG1hdGNoaW5nLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBkYXRhW2RhdGEuaW5kZXhPZihtYXRjaGluZ1swXSldID0gZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBkYXRhLnB1c2goZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdXBkYXRlZD8uZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtYXRjaGluZyA9IGRhdGEuZmlsdGVyKChkOiBhbnkpID0+IGQuaWQgPT0gZS5pZCk7XHJcbiAgICAgICAgICAgIGlmIChtYXRjaGluZy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgZGF0YVtkYXRhLmluZGV4T2YobWF0Y2hpbmdbMF0pXSA9IGU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgZGF0YS5wdXNoKGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGRlbGV0ZWQ/LmZvckVhY2goKGUpID0+IHtcclxuICAgICAgICAgICAgZGF0YSA9IGRhdGEuZmlsdGVyKChkOiBhbnkpID0+IGQuaWQgIT0gZS5pZCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGlmIChzb3J0QnkgJiYgZGF0YSkgZGF0YSA9IGRhdGEuc29ydChzb3J0QnkpO1xyXG4gICAgICAgICAgdGFyZ2V0Ll9fX2RhdGFbcHJvcGVydHlLZXldID0gZGF0YTtcclxuICAgICAgICAgIHRhcmdldC5sb2FkaW5nLnNldChwcm9wZXJ0eUtleSwgZmFsc2UpO1xyXG5cclxuICAgICAgICAgIGlmIChjYWNoZWQgJiYgc3BlY2lmaWNIYXNoKSB7XHJcbiAgICAgICAgICAgIGlmIChfdGhpcy5kYlNlcnZpY2UpIHtcclxuICAgICAgICAgICAgICBpZiAoZGF0YSAmJiBkYXRhPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICBfdGhpcy5kYlNlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgICAudXBkYXRlKCdvdXRib3VuZCcsIHtcclxuICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCxcclxuICAgICAgICAgICAgICAgICAgICAgIGRhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpY0hhc2hcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge30pO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdBY3RpdmVDb25uZWN0OiBVbmFibGUgdG8gdXBkYXRlIGNhY2hlZCBkYXRhJyk7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgIF90aGlzLmRiU2VydmljZVxyXG4gICAgICAgICAgICAgICAgICAgIC5kZWxldGVCeUtleSgnb3V0Ym91bmQnLCBtZXRob2QpXHJcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7fSk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FjdGl2ZUNvbm5lY3Q6IFVuYWJsZSB0byBkZWxldGUgY2FjaGVkIGRhdGEnKTtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgICAgICAgICdBY3RpdmVDb25uZWN0OiBDYWNoaW5nIG5vdCBwb3NzaWJsZSBhcyB0aGUgaW5kZXhlZERCIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCdcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChzb3J0QnkgJiYgZGF0YSkgZGF0YSA9IGRhdGEuc29ydChzb3J0QnkpO1xyXG4gICAgICAgICAgdGFyZ2V0Ll9fX3JlY2VpdmVkW3Byb3BlcnR5S2V5XSA9IHRydWU7XHJcbiAgICAgICAgICB0YXJnZXQuX19fZGF0YVtwcm9wZXJ0eUtleV0gPSBkYXRhO1xyXG4gICAgICAgICAgdGFyZ2V0LmxvYWRpbmcuc2V0KHByb3BlcnR5S2V5LCBmYWxzZSk7XHJcbiAgICAgICAgICBpZiAoY2FjaGVkICYmIHNwZWNpZmljSGFzaCkge1xyXG4gICAgICAgICAgICBpZiAoX3RoaXMuZGJTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YT8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgX3RoaXMuZGJTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAgICAgLnVwZGF0ZSgnb3V0Ym91bmQnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBtZXRob2QsXHJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWNIYXNoXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHt9KTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignQWN0aXZlQ29ubmVjdDogVW5hYmxlIHRvIHVwZGF0ZSBjYWNoZWQgZGF0YScpO1xyXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICBfdGhpcy5kYlNlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgICAuZGVsZXRlQnlLZXkoJ291dGJvdW5kJywgbWV0aG9kKVxyXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge30pO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdBY3RpdmVDb25uZWN0OiBVbmFibGUgdG8gdXBkYXRlIGNhY2hlZCBkYXRhJyk7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgICAgICAgICAnQWN0aXZlQ29ubmVjdDogQ2FjaGluZyBub3QgcG9zc2libGUgYXMgdGhlIGluZGV4ZWREQiBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQnXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIGlmIChyZXF1ZXN0aW5nUmVxdWlyZWQpIHtcclxuICAgICAgV2Vic29ja2V0Q2xpZW50LmFkZFJlc2V0UmVxdWVzdGluZ1N0YXRlQ2FsbGJhY2soZnVuY3Rpb24gY2FsbGJhY2soXHJcbiAgICAgICAgY2xpZW50OiBXZWJzb2NrZXRDbGllbnRcclxuICAgICAgKSB7XHJcbiAgICAgICAgaWYgKHRhcmdldC5fX19yZXF1ZXN0ZWQgJiYgdGFyZ2V0Ll9fX3JlcXVlc3RlZFtwcm9wZXJ0eUtleV0pIHtcclxuICAgICAgICAgIGNsaWVudC5zZW5kKCdyZXF1ZXN0LicgKyBtZXRob2QsIG51bGwpLnRoZW4oKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG9iaiA9IHtcclxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxyXG4gICAgICBnZXQoKSB7XHJcbiAgICAgICAgaWYgKCF0YXJnZXQuX19fcmVxdWVzdGVkKSB0YXJnZXQuX19fcmVxdWVzdGVkID0ge307XHJcbiAgICAgICAgaWYgKHJlcXVlc3RpbmdSZXF1aXJlZCAmJiAhdGFyZ2V0Ll9fX3JlcXVlc3RlZFtwcm9wZXJ0eUtleV0pIHtcclxuICAgICAgICAgIHRhcmdldC5fX19yZXF1ZXN0ZWRbcHJvcGVydHlLZXldID0gdHJ1ZTtcclxuICAgICAgICAgICh0aGlzIGFzIGFueSkuc2VuZCgncmVxdWVzdC4nICsgbWV0aG9kLCBudWxsKS50aGVuKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGFyZ2V0Ll9fX2RhdGEpIHRhcmdldC5fX19kYXRhID0ge307XHJcbiAgICAgICAgaWYgKCF0YXJnZXQuX19fZGF0YVtwcm9wZXJ0eUtleV0pIHtcclxuICAgICAgICAgIHRhcmdldC5sb2FkaW5nLnNldChwcm9wZXJ0eUtleSwgdHJ1ZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQubG9hZGluZ1twcm9wZXJ0eUtleV0pIHtcclxuICAgICAgICAgIHRhcmdldC5sb2FkaW5nLnNldChwcm9wZXJ0eUtleSwgZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGFyZ2V0Ll9fX2RhdGFbcHJvcGVydHlLZXldO1xyXG4gICAgICB9LFxyXG4gICAgICBzZXQodmFsOiBhbnkpIHtcclxuICAgICAgICBpZiAoIXRhcmdldC5fX19kYXRhKSB0YXJnZXQuX19fZGF0YSA9IHt9O1xyXG4gICAgICAgIHRhcmdldC5sb2FkaW5nLnNldChwcm9wZXJ0eUtleSwgZmFsc2UpO1xyXG4gICAgICAgIGlmIChzb3J0QnkgJiYgdmFsKSB2YWwgPSB2YWwuc29ydChzb3J0QnkpO1xyXG4gICAgICAgIHJldHVybiAodGFyZ2V0Ll9fX2RhdGFbcHJvcGVydHlLZXldID0gdmFsKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRhcmdldFtwcm9wZXJ0eUtleV0gPSBvYmo7XHJcbiAgICByZXR1cm4gb2JqO1xyXG4gIH07XHJcbn1cclxuIl19
@@ -158,7 +158,7 @@ export class OutboundObject {
158
158
  method,
159
159
  data: _this.data,
160
160
  specificHash,
161
- length,
161
+ length
162
162
  })
163
163
  .subscribe(() => { });
164
164
  }
@@ -197,7 +197,7 @@ export class OutboundObject {
197
197
  method,
198
198
  data,
199
199
  specificHash,
200
- length,
200
+ length
201
201
  })
202
202
  .subscribe(() => { });
203
203
  }
@@ -335,7 +335,7 @@ export class OutboundObject {
335
335
  : undefined
336
336
  : undefined
337
337
  : this.previouslyCachedCount || this.initialLoadingCount,
338
- loaded: this.loadedLength,
338
+ loaded: this.loadedLength
339
339
  });
340
340
  }
341
341
  else {
@@ -395,7 +395,7 @@ export class OutboundObject {
395
395
  afterServerReconnected() {
396
396
  if (this.requested && this.lazyLoaded) {
397
397
  this.requested = false;
398
- this.load(1).then();
398
+ this.load(this.loadedLength).then();
399
399
  }
400
400
  if (this.loadedId) {
401
401
  this.loadedIdData = null;
@@ -407,4 +407,4 @@ export class OutboundObject {
407
407
  }
408
408
  }
409
409
  }
410
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0Ym91bmQtb2JqZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWN0aXZlLWNvbm5lY3QtbmcyL3NyYy9saWIvd2Vic29ja2V0L29iamVjdHMvb3V0Ym91bmQtb2JqZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQVksTUFBTSxNQUFNLENBQUM7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQU01QyxNQUFNLE9BQU8sY0FBYztJQUV6QixZQUNVLE1BQXVCLEVBQ3ZCLE1BQWMsRUFDZCxVQUFvQixFQUNaLE1BQWdCLEVBQ3hCLG1CQUE0QixFQUM1QixNQUErQjtRQUwvQixXQUFNLEdBQU4sTUFBTSxDQUFpQjtRQUN2QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsZUFBVSxHQUFWLFVBQVUsQ0FBVTtRQUNaLFdBQU0sR0FBTixNQUFNLENBQVU7UUFDeEIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFTO1FBQzVCLFdBQU0sR0FBTixNQUFNLENBQXlCO1FBc05qQyxZQUFPLEdBQXNDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdkQsU0FBSSxHQUFvQixTQUFTLENBQUM7UUEyR2xDLGNBQVMsR0FBWSxLQUFLLENBQUM7UUEyQjNCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFXakIsWUFBTyxHQUF1QixTQUFTLENBQUM7UUFLeEMsZ0JBQVcsR0FBa0IsSUFBSSxDQUFDO1FBQ2xDLDRCQUF1QixHQUFrQixJQUFJLENBQUM7UUFDOUMscUJBQWdCLEdBQXlCLElBQUksQ0FBQztRQUM5QyxhQUFRLEdBQWtCLElBQUksQ0FBQztRQUMvQixpQkFBWSxHQUFhLElBQUksQ0FBQztRQUM5QixvQkFBZSxHQUF1QixJQUFJLENBQUM7UUFPM0MscUJBQWdCLEdBQWtCLElBQUksQ0FBQztRQUN2QyxpQ0FBNEIsR0FBa0IsSUFBSSxDQUFDO1FBQ25E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Q0FBQyxhQUFhLENBQUMsQ0FBQztTQUN0QztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIE9ic2VydmVyIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFdlYnNvY2tldENsaWVudCB9IGZyb20gJy4uL2NsaWVudCc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElkT2JqZWN0IHtcclxuICBpZDogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZDtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIE91dGJvdW5kT2JqZWN0PFQgZXh0ZW5kcyBJZE9iamVjdD4ge1xyXG4gIHByaXZhdGUgcHJldmlvdXNseUNhY2hlZENvdW50OiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNsaWVudDogV2Vic29ja2V0Q2xpZW50LFxyXG4gICAgcHJpdmF0ZSBtZXRob2Q6IHN0cmluZyxcclxuICAgIHByaXZhdGUgbGF6eUxvYWRlZD86IGJvb2xlYW4sXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgY2FjaGVkPzogYm9vbGVhbixcclxuICAgIHByaXZhdGUgaW5pdGlhbExvYWRpbmdDb3VudD86IG51bWJlcixcclxuICAgIHByaXZhdGUgc29ydEJ5PzogKGE6IFQsIGI6IFQpID0+IG51bWJlclxyXG4gICkge1xyXG4gICAgdGhpcy50YXJnZXQubG9hZGluZyA9IG5ldyBNYXA8c3RyaW5nLCBib29sZWFuPigpO1xyXG5cclxuICAgIGlmICh0aGlzLmNsaWVudC5kYlNlcnZpY2UpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLmNsaWVudC5kYlNlcnZpY2VcclxuICAgICAgICAgIC5nZXRCeUtleSgnb3V0Ym91bmQnLCBtZXRob2QpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5wcmV2aW91c2x5Q2FjaGVkQ291bnQgPSByZXN1bHQuZGF0YT8ubGVuZ3RoIHx8IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignQWN0aXZlQ29ubmVjdDogVW5hYmxlIHRvIHJlYWQgY2FjaGVkIGRhdGEnKTtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgX3RoaXMgPSB0aGlzO1xyXG4gICAgV2Vic29ja2V0Q2xpZW50LmV4cGVjdE91dGJvdW5kKFxyXG4gICAgICBtZXRob2QsXHJcbiAgICAgIGZ1bmN0aW9uIHNldE91dGJvdW5kKFxyXG4gICAgICAgIGRhdGE6IGFueSxcclxuICAgICAgICBzcGVjaWZpY0hhc2g6IG51bWJlciB8IG51bGwsXHJcbiAgICAgICAgaW5zZXJ0ZWRPckdyb3VwRGF0YTogYW55W10gfCBudWxsLFxyXG4gICAgICAgIHVwZGF0ZWRPckdyb3VwSWQ6IGFueVtdIHwgbnVsbCxcclxuICAgICAgICBkZWxldGVkOiBhbnlbXSB8IG51bGwsXHJcbiAgICAgICAgbGVuZ3RoOiBudW1iZXIgfCBudWxsLFxyXG4gICAgICAgIF9jbGllbnQ6IFdlYnNvY2tldENsaWVudFxyXG4gICAgICApIHtcclxuICAgICAgICBpZiAoIWNhY2hlZCkge1xyXG4gICAgICAgICAgaWYgKF9jbGllbnQuZGJTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgX2NsaWVudC5kYlNlcnZpY2VcclxuICAgICAgICAgICAgICAgIC5kZWxldGVCeUtleSgnb3V0Ym91bmQnLCBtZXRob2QpXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHt9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FjdGl2ZUNvbm5lY3Q6IFVuYWJsZSB0byBkZWxldGUgY2FjaGVkIGRhdGEnKTtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZGF0YSA9PSAnY2FjaGVfcmVzdG9yZScpIHtcclxuICAgICAgICAgIGlmIChfY2xpZW50LmRiU2VydmljZSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgIF9jbGllbnQuZGJTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAuZ2V0QnlLZXkoJ291dGJvdW5kJywgbWV0aG9kKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgX3RoaXMuc2V0RGF0YShyZXN1bHQuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoKSBfdGhpcy5fbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgX3RoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdBY3RpdmVDb25uZWN0OiBVbmFibGUgdG8gcmVzdG9yZSBjYWNoZWQgZGF0YScpO1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgICAgICAgJ0FjdGl2ZUNvbm5lY3Q6IENhY2hpbmcgLyByZXN0b3JlIG5vdCBwb3NzaWJsZSBhcyB0aGUgaW5kZXhlZERCIGlzIG5vdCBhY2Nlc3NpYmxlJ1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YSA9PSAnY2FjaGVfZGVsZXRlJykge1xyXG4gICAgICAgICAgaWYgKF9jbGllbnQuZGJTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgX2NsaWVudC5kYlNlcnZpY2VcclxuICAgICAgICAgICAgICAgIC5kZWxldGVCeUtleSgnb3V0Ym91bmQnLCBtZXRob2QpXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHt9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FjdGl2ZUNvbm5lY3Q6IFVuYWJsZSB0byBkZWxldGUgY2FjaGVkIGRhdGEnKTtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgICAgICdBY3RpdmVDb25uZWN0OiBDYWNoaW5nIC8gcmVzdG9yZSBub3QgcG9zc2libGUgYXMgdGhlIGluZGV4ZWREQiBpcyBub3QgYWNjZXNzaWJsZSdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIF90aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIF90aGlzLnJlcXVlc3RlZCA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YSA9PSAnZGF0YV9kZWxldGUnKSB7XHJcbiAgICAgICAgICBfdGhpcy5kYXRhID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgX3RoaXMuZGF0YU1hcCA9IG5ldyBNYXAoKTtcclxuICAgICAgICAgIF90aGlzLnJlcXVlc3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgX3RoaXMubG9hZGVkR3JvdXBEYXRhID0gbnVsbDtcclxuICAgICAgICAgIF90aGlzLmxvYWRlZEdyb3VwSWQgPSBudWxsO1xyXG4gICAgICAgICAgX3RoaXMuX2xlbmd0aCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIF90aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgPT0gJ2RhdGFfZ3JvdXAnKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIF90aGlzLnJlcXVlc3RlZEdyb3VwSWQgPT1cclxuICAgICAgICAgICAgKHVwZGF0ZWRPckdyb3VwSWQgPyB1cGRhdGVkT3JHcm91cElkWzBdIDogMClcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBfdGhpcy5sb2FkZWRHcm91cERhdGEgPSBpbnNlcnRlZE9yR3JvdXBEYXRhO1xyXG4gICAgICAgICAgICBfdGhpcy5sb2FkZWRHcm91cElkID0gdXBkYXRlZE9yR3JvdXBJZCA/IHVwZGF0ZWRPckdyb3VwSWRbMF0gOiAwO1xyXG4gICAgICAgICAgICBfdGhpcy5yZXF1ZXN0ZWRHcm91cElkQ29ubmVjdGlvbklkID0gX3RoaXMudGFyZ2V0Ll9fX2Nvbm5lY3Rpb25JZDtcclxuICAgICAgICAgICAgX3RoaXMubG9hZGVkR3JvdXBDaGFuZ2VkPy5uZXh0KGluc2VydGVkT3JHcm91cERhdGEgYXMgVFtdKTtcclxuICAgICAgICAgICAgX3RoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YSA9PSAnZGF0YV9pZCcpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgX3RoaXMucmVxdWVzdGVkSWQgPT0gKHVwZGF0ZWRPckdyb3VwSWQgPyB1cGRhdGVkT3JHcm91cElkWzBdIDogMClcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBfdGhpcy5sb2FkZWRJZERhdGEgPVxyXG4gICAgICAgICAgICAgIChpbnNlcnRlZE9yR3JvdXBEYXRhPy5sZW5ndGggfHwgMCkgPiAwXHJcbiAgICAgICAgICAgICAgICA/IChpbnNlcnRlZE9yR3JvdXBEYXRhIGFzIGFueVtdKVswXVxyXG4gICAgICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgICAgICAgICBfdGhpcy5sb2FkZWRJZCA9IHVwZGF0ZWRPckdyb3VwSWQgPyB1cGRhdGVkT3JHcm91cElkWzBdIDogMDtcclxuICAgICAgICAgICAgX3RoaXMucmVxdWVzdGVkSWRDb25uZWN0aW9uSWQgPSBfdGhpcy50YXJnZXQuX19fY29ubmVjdGlvbklkO1xyXG4gICAgICAgICAgICBfdGhpcy5sb2FkZWRJZENoYW5nZWQ/Lm5leHQoX3RoaXMubG9hZGVkSWREYXRhIGFzIFQpO1xyXG4gICAgICAgICAgICBfdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhID09ICdkYXRhX2RpZmYnKSB7XHJcbiAgICAgICAgICBpbnNlcnRlZE9yR3JvdXBEYXRhPy5mb3JFYWNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgIF90aGlzLmRhdGFNYXAuc2V0KGUuaWQsIGUpO1xyXG4gICAgICAgICAgICBpZiAoZS5pZCA9PSBfdGhpcy5sb2FkZWRJZCkge1xyXG4gICAgICAgICAgICAgIF90aGlzLmxvYWRlZElkQ2hhbmdlZD8ubmV4dChlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB1cGRhdGVkT3JHcm91cElkPy5mb3JFYWNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgIF90aGlzLmRhdGFNYXAuc2V0KGUuaWQsIGUpO1xyXG4gICAgICAgICAgICBpZiAoZS5pZCA9PSBfdGhpcy5sb2FkZWRJZCkge1xyXG4gICAgICAgICAgICAgIF90aGlzLmxvYWRlZElkQ2hhbmdlZD8ubmV4dChlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBkZWxldGVkPy5mb3JFYWNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgIF90aGlzLmRhdGFNYXAuZGVsZXRlKGUuaWQpO1xyXG4gICAgICAgICAgICBpZiAoZS5pZCA9PSBfdGhpcy5sb2FkZWRJZCkge1xyXG4gICAgICAgICAgICAgIF90aGlzLmxvYWRlZElkQ2hhbmdlZD8ubmV4dChudWxsIGFzIGFueSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgX3RoaXMuZGF0YSA9IEFycmF5LmZyb20oX3RoaXMuZGF0YU1hcC52YWx1ZXMoKSk7XHJcbiAgICAgICAgICBpZiAoX3RoaXMuZGF0YSAmJiBfdGhpcy5zb3J0QnkpXHJcbiAgICAgICAgICAgIF90aGlzLmRhdGEgPSBfdGhpcy5kYXRhLnNvcnQoX3RoaXMuc29ydEJ5KTtcclxuICAgICAgICAgIF90aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICBpZiAoY2FjaGVkICYmIHNwZWNpZmljSGFzaCkge1xyXG4gICAgICAgICAgICBpZiAoX2NsaWVudC5kYlNlcnZpY2UpIHtcclxuICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLmRhdGEgJiYgX3RoaXMuZGF0YT8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICBfY2xpZW50LmRiU2VydmljZVxyXG4gICAgICAgICAgICAgICAgICAgIC51cGRhdGUoJ291dGJvdW5kJywge1xyXG4gICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLFxyXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YTogX3RoaXMuZGF0YSxcclxuICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljSGFzaCxcclxuICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCxcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge30pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgX2NsaWVudC5kYlNlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgICAuZGVsZXRlQnlLZXkoJ291dGJvdW5kJywgbWV0aG9kKVxyXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge30pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FjdGl2ZUNvbm5lY3Q6IFVuYWJsZSB0byB1cGRhdGUgY2FjaGVkIGRhdGEuJyk7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgICAgICAgJ0FjdGl2ZUNvbm5lY3Q6IENhY2hpbmcgbm90IHBvc3NpYmxlIGFzIHRoZSBpbmRleGVkREIgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkJ1xyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgX3RoaXMuc2V0RGF0YShkYXRhKTtcclxuICAgICAgICAgIGlmIChfdGhpcy5sb2FkZWRJZCkge1xyXG4gICAgICAgICAgICBjb25zdCBsb2FkZWRWYWx1ZSA9IF90aGlzLmRhdGFNYXAuZ2V0KF90aGlzLmxvYWRlZElkKTtcclxuICAgICAgICAgICAgaWYgKGxvYWRlZFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgX3RoaXMubG9hZGVkSWREYXRhID0gbG9hZGVkVmFsdWU7XHJcbiAgICAgICAgICAgICAgX3RoaXMubG9hZGVkSWRDaGFuZ2VkPy5uZXh0KF90aGlzLmxvYWRlZElkRGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIF90aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIGlmIChjYWNoZWQgJiYgc3BlY2lmaWNIYXNoKSB7XHJcbiAgICAgICAgICAgIGlmIChfY2xpZW50LmRiU2VydmljZSkge1xyXG4gICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YSAmJiBkYXRhPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIF9jbGllbnQuZGJTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAgICAgLnVwZGF0ZSgnb3V0Ym91bmQnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBtZXRob2QsXHJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWNIYXNoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7fSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBfY2xpZW50LmRiU2VydmljZVxyXG4gICAgICAgICAgICAgICAgICAgIC5kZWxldGVCeUtleSgnb3V0Ym91bmQnLCBtZXRob2QpXHJcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7fSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignQWN0aXZlQ29ubmVjdDogVW5hYmxlIHRvIHVwZGF0ZSBjYWNoZWQgZGF0YS4nKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgICAgICAgICAnQWN0aXZlQ29ubmVjdDogQ2FjaGluZyBub3QgcG9zc2libGUgYXMgdGhlIGluZGV4ZWREQiBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQnXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGVuZ3RoKSBfdGhpcy5fbGVuZ3RoID0gbGVuZ3RoO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIFdlYnNvY2tldENsaWVudC5hZGRSZXNldFJlcXVlc3RpbmdTdGF0ZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgdGhpcy5hZnRlclNlcnZlclJlY29ubmVjdGVkKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldCB0YXJnZXQoKTogYW55IHtcclxuICAgIHJldHVybiAodGhpcy5jbGllbnQgYXMgYW55KS5fX3Byb3RvX187XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRhdGFNYXA6IE1hcDxudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBUPiA9IG5ldyBNYXAoKTtcclxuICBwcml2YXRlIGRhdGE6IFRbXSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuXHJcbiAgcHVibGljIGdldChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMucmVxdWVzdGVkSWQgPT0gaWQgJiZcclxuICAgICAgdGhpcy50YXJnZXQuX19fY29ubmVjdGlvbklkID09IHRoaXMucmVxdWVzdGVkSWRDb25uZWN0aW9uSWQgJiZcclxuICAgICAgdGhpcy5sb2FkZWRPYnNlcnZhYmxlICYmXHJcbiAgICAgIHRoaXMubG9hZGVkSWREYXRhXHJcbiAgICApIHtcclxuICAgICAgaWYgKHRoaXMubG9hZGVkSWREYXRhKVxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMubG9hZGVkSWREYXRhKSB0aGlzLmxvYWRlZElkQ2hhbmdlZD8ubmV4dCh0aGlzLmxvYWRlZElkRGF0YSk7XHJcbiAgICAgICAgfSwgNTApO1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2FkZWRPYnNlcnZhYmxlO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBvYnNlcnZhYmxlUHJvbWlzZTogUHJvbWlzZTxhbnk+IHwgdW5kZWZpbmVkO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnJlcXVlc3RlZElkICE9IGlkIHx8XHJcbiAgICAgIHRoaXMudGFyZ2V0Ll9fX2Nvbm5lY3Rpb25JZCAhPSB0aGlzLnJlcXVlc3RlZElkQ29ubmVjdGlvbklkIHx8XHJcbiAgICAgICF0aGlzLmxvYWRlZE9ic2VydmFibGVcclxuICAgICkge1xyXG4gICAgICBvYnNlcnZhYmxlUHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkZWRPYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGU8VD4oKG9ic2VydmVyOiBPYnNlcnZlcjxUPikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkZWRJZENoYW5nZWQgPSBvYnNlcnZlcjtcclxuICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgUHJvbWlzZS5hbGwoW29ic2VydmFibGVQcm9taXNlXSkudGhlbigoKSA9PiB7XHJcbiAgICAgIG5ldyBQcm9taXNlPHZvaWQ+KGFzeW5jIChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJlcXVlc3RlZCAmJiB0aGlzLmxhenlMb2FkZWQpIHtcclxuICAgICAgICAgIHRoaXMubG9hZCgpLnRoZW4oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YSkge1xyXG4gICAgICAgICAgY29uc3QgcmVzID0gdGhpcy5kYXRhTWFwLmdldChpZCk7XHJcbiAgICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGVkSWRDaGFuZ2VkPy5uZXh0KHJlcyk7XHJcbiAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5sb2FkZWRJZCA9PSBpZCkge1xyXG4gICAgICAgICAgdGhpcy5sb2FkZWRJZENoYW5nZWQ/Lm5leHQodGhpcy5sb2FkZWRJZERhdGEgYXMgVCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMucmVxdWVzdEJ5SWQoaWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgIH0pLnRoZW4oKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRoaXMubG9hZGVkT2JzZXJ2YWJsZSBhcyBPYnNlcnZhYmxlPFQ+O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEZvckdyb3VwKGdyb3VwSWQ6IG51bWJlcik6IE9ic2VydmFibGU8VFtdPiB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMucmVxdWVzdGVkR3JvdXBJZCA9PSBncm91cElkICYmXHJcbiAgICAgIHRoaXMudGFyZ2V0Ll9fX2Nvbm5lY3Rpb25JZCA9PSB0aGlzLnJlcXVlc3RlZEdyb3VwSWRDb25uZWN0aW9uSWQgJiZcclxuICAgICAgdGhpcy5sb2FkZWRHcm91cE9ic2VydmFibGUgJiZcclxuICAgICAgdGhpcy5sb2FkZWRHcm91cERhdGFcclxuICAgICkge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5sb2FkZWRHcm91cERhdGEpXHJcbiAgICAgICAgICB0aGlzLmxvYWRlZEdyb3VwQ2hhbmdlZD8ubmV4dCh0aGlzLmxvYWRlZEdyb3VwRGF0YSk7XHJcbiAgICAgIH0sIDUwKTtcclxuICAgICAgcmV0dXJuIHRoaXMubG9hZGVkR3JvdXBPYnNlcnZhYmxlO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBvYnNlcnZhYmxlUHJvbWlzZTogUHJvbWlzZTxhbnk+IHwgdW5kZWZpbmVkO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnJlcXVlc3RlZEdyb3VwSWQgIT0gZ3JvdXBJZCB8fFxyXG4gICAgICB0aGlzLnRhcmdldC5fX19jb25uZWN0aW9uSWQgIT0gdGhpcy5yZXF1ZXN0ZWRHcm91cElkQ29ubmVjdGlvbklkIHx8XHJcbiAgICAgICF0aGlzLmxvYWRlZEdyb3VwT2JzZXJ2YWJsZVxyXG4gICAgKSB7XHJcbiAgICAgIG9ic2VydmFibGVQcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcclxuICAgICAgICB0aGlzLmxvYWRlZEdyb3VwT2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlPFRbXT4oXHJcbiAgICAgICAgICAob2JzZXJ2ZXI6IE9ic2VydmVyPFRbXT4pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkZWRHcm91cENoYW5nZWQgPSBvYnNlcnZlcjtcclxuICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIFByb21pc2UuYWxsKFtvYnNlcnZhYmxlUHJvbWlzZV0pLnRoZW4oKCkgPT4ge1xyXG4gICAgICBuZXcgUHJvbWlzZTx2b2lkPihhc3luYyAocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5yZXF1ZXN0ZWQgJiYgdGhpcy5sYXp5TG9hZGVkKSB7XHJcbiAgICAgICAgICB0aGlzLmxvYWQoKS50aGVuKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmxvYWRlZEdyb3VwSWQgPT0gZ3JvdXBJZCAmJiB0aGlzLmxvYWRlZEdyb3VwRGF0YSkge1xyXG4gICAgICAgICAgdGhpcy5sb2FkZWRHcm91cENoYW5nZWQ/Lm5leHQodGhpcy5sb2FkZWRHcm91cERhdGEgYXMgVFtdKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0Rm9yR3JvdXAoZ3JvdXBJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgfSkudGhlbigpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcy5sb2FkZWRHcm91cE9ic2VydmFibGUgYXMgT2JzZXJ2YWJsZTxUW10+O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBhbGwoKTogVFtdIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmICghdGhpcy5yZXF1ZXN0ZWQgJiYgdGhpcy5sYXp5TG9hZGVkKSB7XHJcbiAgICAgIHRoaXMubG9hZCgpLnRoZW4oKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlcXVlc3RlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBhc3luYyBsb2FkKGNvdW50PzogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5sYXp5TG9hZGVkKSB7XHJcbiAgICAgIGNvbnN0IGhhc0JlZW5SZXF1ZXN0ZWRCZWZvcmUgPSB0aGlzLnJlcXVlc3RlZDtcclxuICAgICAgdGhpcy5fbG9hZGluZyA9IHRydWU7XHJcbiAgICAgIGlmICghdGhpcy5yZXF1ZXN0ZWQpIHtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVxdWVzdGVkID0gdHJ1ZTtcclxuICAgICAgYXdhaXQgdGhpcy5jbGllbnQuc2VuZCgncmVxdWVzdC4nICsgdGhpcy5tZXRob2QsIHtcclxuICAgICAgICBjb3VudDogaGFzQmVlblJlcXVlc3RlZEJlZm9yZVxyXG4gICAgICAgICAgPyB0aGlzLmRhdGFcclxuICAgICAgICAgICAgPyBjb3VudCB8fCB0aGlzLmluaXRpYWxMb2FkaW5nQ291bnRcclxuICAgICAgICAgICAgICA/IChjb3VudCB8fCAodGhpcy5pbml0aWFsTG9hZGluZ0NvdW50IGFzIG51bWJlcikpICtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZGVkTGVuZ3RoXHJcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWRcclxuICAgICAgICAgICAgOiB1bmRlZmluZWRcclxuICAgICAgICAgIDogdGhpcy5wcmV2aW91c2x5Q2FjaGVkQ291bnQgfHwgKHRoaXMuaW5pdGlhbExvYWRpbmdDb3VudCBhcyBudW1iZXIpLFxyXG4gICAgICAgIGxvYWRlZDogdGhpcy5sb2FkZWRMZW5ndGgsXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgRXJyb3IoXHJcbiAgICAgICAgJ0FjdGl2ZS1Db25uZWN0OiBDYW5ub3QgcnVuIGxvYWRpbmcgcmVxdWVzdCBhcyB0aGlzIG91dGJvdW5kIGlzIG5vdCBsYXp5LWxvYWRlZC4nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9sb2FkaW5nID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBzZXQgbG9hZGluZyh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fbG9hZGluZyA9IHZhbHVlO1xyXG4gICAgdGhpcy50YXJnZXQubG9hZGluZy5zZXQodGhpcy5tZXRob2QsIHZhbHVlKTtcclxuICB9XHJcbiAgcHVibGljIGdldCBsb2FkaW5nKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xvYWRpbmc7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgbG9hZGVkTGVuZ3RoKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhPy5sZW5ndGggfHwgMDtcclxuICB9XHJcbiAgcHJpdmF0ZSBfbGVuZ3RoOiBudW1iZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcbiAgcHVibGljIGdldCBsZW5ndGgoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlcXVlc3RlZElkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIHJlcXVlc3RlZElkQ29ubmVjdGlvbklkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGxvYWRlZE9ic2VydmFibGU6IE9ic2VydmFibGU8VD4gfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGxvYWRlZElkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGxvYWRlZElkRGF0YTogVCB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgbG9hZGVkSWRDaGFuZ2VkOiBPYnNlcnZlcjxUPiB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgcmVxdWVzdEJ5SWQoaWQ6IG51bWJlcik6IFByb21pc2U8YW55PiB7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5yZXF1ZXN0ZWRJZCA9IGlkO1xyXG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmQoJ3JlcXVlc3QuJyArIHRoaXMubWV0aG9kLCB7IGlkIH0pIGFzIFByb21pc2U8YW55PjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVxdWVzdGVkR3JvdXBJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSByZXF1ZXN0ZWRHcm91cElkQ29ubmVjdGlvbklkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGxvYWRlZEdyb3VwT2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxUW10+IHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBsb2FkZWRHcm91cElkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGxvYWRlZEdyb3VwRGF0YTogVFtdIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBsb2FkZWRHcm91cENoYW5nZWQ6IE9ic2VydmVyPFRbXT4gfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIHJlcXVlc3RGb3JHcm91cChncm91cElkOiBudW1iZXIpOiBQcm9taXNlPFRbXT4ge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMucmVxdWVzdGVkR3JvdXBJZCA9IGdyb3VwSWQ7XHJcbiAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZCgncmVxdWVzdC4nICsgdGhpcy5tZXRob2QsIHsgZ3JvdXBJZCB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RGF0YShkYXRhOiBUW10gfCB7IGFkZGVkOiBUW10gfCB1bmRlZmluZWQ7IGxlbmd0aDogbnVtYmVyIH0pIHtcclxuICAgIHRoaXMuZGF0YSA9IGRhdGEgYXMgVFtdO1xyXG4gICAgaWYgKHRoaXMuZGF0YSAmJiB0aGlzLnNvcnRCeSkgdGhpcy5kYXRhID0gdGhpcy5kYXRhLnNvcnQodGhpcy5zb3J0QnkpO1xyXG4gICAgdGhpcy5fbGVuZ3RoID0gZGF0YS5sZW5ndGg7XHJcbiAgICB0aGlzLmRhdGFNYXAgPSBuZXcgTWFwKCk7XHJcbiAgICB0aGlzLmRhdGEuZm9yRWFjaCgoZCkgPT4ge1xyXG4gICAgICB0aGlzLmRhdGFNYXAuc2V0KGQuaWQsIGQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNFbXB0eSgpIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGEgPT0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGNvbnRhaW5lZCBkYXRhIGNhbiBiZSBtb2RpZmllZCB3aXRoaW4gdGhlIGNhbGxiYWNrIG1ldGhvZFxyXG4gICAqL1xyXG4gIHB1YmxpYyB1cGRhdGUoY2FsbGJhY2s6IChkYXRhOiBUW10pID0+IHZvaWQpIHtcclxuICAgIGlmICh0aGlzLmRhdGEpIHtcclxuICAgICAgY29uc3QgdXBkYXRlTGVuZ3RoVmFyaWFibGUgPSB0aGlzLmRhdGEubGVuZ3RoID09IHRoaXMuX2xlbmd0aDtcclxuICAgICAgY29uc3QgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XHJcbiAgICAgIGNhbGxiYWNrKHRoaXMuZGF0YSk7XHJcbiAgICAgIHRoaXMuc2V0RGF0YSh0aGlzLmRhdGEpO1xyXG4gICAgICBpZiAoIXVwZGF0ZUxlbmd0aFZhcmlhYmxlKSB7XHJcbiAgICAgICAgdGhpcy5fbGVuZ3RoID0gbGVuZ3RoO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFmdGVyU2VydmVyUmVjb25uZWN0ZWQoKSB7XHJcbiAgICBpZiAodGhpcy5yZXF1ZXN0ZWQgJiYgdGhpcy5sYXp5TG9hZGVkKSB7XHJcbiAgICAgIHRoaXMucmVxdWVzdGVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMubG9hZCgxKS50aGVuKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5sb2FkZWRJZCkge1xyXG4gICAgICB0aGlzLmxvYWRlZElkRGF0YSA9IG51bGw7XHJcbiAgICAgIHRoaXMuZ2V0KHRoaXMubG9hZGVkSWQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubG9hZGVkR3JvdXBJZCkge1xyXG4gICAgICB0aGlzLmxvYWRlZEdyb3VwRGF0YSA9IG51bGw7XHJcbiAgICAgIHRoaXMuZ2V0Rm9yR3JvdXAodGhpcy5sb2FkZWRHcm91cElkKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
410
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0Ym91bmQtb2JqZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWN0aXZlLWNvbm5lY3QtbmcyL3NyYy9saWIvd2Vic29ja2V0L29iamVjdHMvb3V0Ym91bmQtb2JqZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQVksTUFBTSxNQUFNLENBQUM7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQU01QyxNQUFNLE9BQU8sY0FBYztJQUV6QixZQUNVLE1BQXVCLEVBQ3ZCLE1BQWMsRUFDZCxVQUFvQixFQUNaLE1BQWdCLEVBQ3hCLG1CQUE0QixFQUM1QixNQUErQjtRQUwvQixXQUFNLEdBQU4sTUFBTSxDQUFpQjtRQUN2QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsZUFBVSxHQUFWLFVBQVUsQ0FBVTtRQUNaLFdBQU0sR0FBTixNQUFNLENBQVU7UUFDeEIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFTO1FBQzVCLFdBQU0sR0FBTixNQUFNLENBQXlCO1FBc05qQyxZQUFPLEdBQXNDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdkQsU0FBSSxHQUFvQixTQUFTLENBQUM7UUEyR2xDLGNBQVMsR0FBWSxLQUFLLENBQUM7UUEyQjNCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFXakIsWUFBTyxHQUF1QixTQUFTLENBQUM7UUFLeEMsZ0JBQVcsR0FBa0IsSUFBSSxDQUFDO1FBQ2xDLDRCQUF1QixHQUFrQixJQUFJLENBQUM7UUFDOUMscUJBQWdCLEdBQXlCLElBQUksQ0FBQztRQUM5QyxhQUFRLEdBQWtCLElBQUksQ0FBQztRQUMvQixpQkFBWSxHQUFhLElBQUksQ0FBQztRQUM5QixvQkFBZSxHQUF1QixJQUFJLENBQUM7UUFPM0MscUJBQWdCLEdBQWtCLElBQUksQ0FBQztRQUN2QyxpQ0FBNEIsR0FBa0IsSUFBSSxDQUFDO1FBQ25E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Q0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDdEM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBPYnNlcnZlciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBXZWJzb2NrZXRDbGllbnQgfSBmcm9tICcuLi9jbGllbnQnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJZE9iamVjdCB7XHJcbiAgaWQ6IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBPdXRib3VuZE9iamVjdDxUIGV4dGVuZHMgSWRPYmplY3Q+IHtcclxuICBwcml2YXRlIHByZXZpb3VzbHlDYWNoZWRDb3VudDogbnVtYmVyIHwgdW5kZWZpbmVkO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjbGllbnQ6IFdlYnNvY2tldENsaWVudCxcclxuICAgIHByaXZhdGUgbWV0aG9kOiBzdHJpbmcsXHJcbiAgICBwcml2YXRlIGxhenlMb2FkZWQ/OiBib29sZWFuLFxyXG4gICAgcHVibGljIHJlYWRvbmx5IGNhY2hlZD86IGJvb2xlYW4sXHJcbiAgICBwcml2YXRlIGluaXRpYWxMb2FkaW5nQ291bnQ/OiBudW1iZXIsXHJcbiAgICBwcml2YXRlIHNvcnRCeT86IChhOiBULCBiOiBUKSA9PiBudW1iZXJcclxuICApIHtcclxuICAgIHRoaXMudGFyZ2V0LmxvYWRpbmcgPSBuZXcgTWFwPHN0cmluZywgYm9vbGVhbj4oKTtcclxuXHJcbiAgICBpZiAodGhpcy5jbGllbnQuZGJTZXJ2aWNlKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhpcy5jbGllbnQuZGJTZXJ2aWNlXHJcbiAgICAgICAgICAuZ2V0QnlLZXkoJ291dGJvdW5kJywgbWV0aG9kKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgIHRoaXMucHJldmlvdXNseUNhY2hlZENvdW50ID0gcmVzdWx0LmRhdGE/Lmxlbmd0aCB8fCBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FjdGl2ZUNvbm5lY3Q6IFVuYWJsZSB0byByZWFkIGNhY2hlZCBkYXRhJyk7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IF90aGlzID0gdGhpcztcclxuICAgIFdlYnNvY2tldENsaWVudC5leHBlY3RPdXRib3VuZChcclxuICAgICAgbWV0aG9kLFxyXG4gICAgICBmdW5jdGlvbiBzZXRPdXRib3VuZChcclxuICAgICAgICBkYXRhOiBhbnksXHJcbiAgICAgICAgc3BlY2lmaWNIYXNoOiBudW1iZXIgfCBudWxsLFxyXG4gICAgICAgIGluc2VydGVkT3JHcm91cERhdGE6IGFueVtdIHwgbnVsbCxcclxuICAgICAgICB1cGRhdGVkT3JHcm91cElkOiBhbnlbXSB8IG51bGwsXHJcbiAgICAgICAgZGVsZXRlZDogYW55W10gfCBudWxsLFxyXG4gICAgICAgIGxlbmd0aDogbnVtYmVyIHwgbnVsbCxcclxuICAgICAgICBfY2xpZW50OiBXZWJzb2NrZXRDbGllbnRcclxuICAgICAgKSB7XHJcbiAgICAgICAgaWYgKCFjYWNoZWQpIHtcclxuICAgICAgICAgIGlmIChfY2xpZW50LmRiU2VydmljZSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgIF9jbGllbnQuZGJTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAuZGVsZXRlQnlLZXkoJ291dGJvdW5kJywgbWV0aG9kKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7fSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdBY3RpdmVDb25uZWN0OiBVbmFibGUgdG8gZGVsZXRlIGNhY2hlZCBkYXRhJyk7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGRhdGEgPT0gJ2NhY2hlX3Jlc3RvcmUnKSB7XHJcbiAgICAgICAgICBpZiAoX2NsaWVudC5kYlNlcnZpY2UpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICBfY2xpZW50LmRiU2VydmljZVxyXG4gICAgICAgICAgICAgICAgLmdldEJ5S2V5KCdvdXRib3VuZCcsIG1ldGhvZClcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIF90aGlzLnNldERhdGEocmVzdWx0LmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCkgX3RoaXMuX2xlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgIF90aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignQWN0aXZlQ29ubmVjdDogVW5hYmxlIHRvIHJlc3RvcmUgY2FjaGVkIGRhdGEnKTtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgICAgICdBY3RpdmVDb25uZWN0OiBDYWNoaW5nIC8gcmVzdG9yZSBub3QgcG9zc2libGUgYXMgdGhlIGluZGV4ZWREQiBpcyBub3QgYWNjZXNzaWJsZSdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgPT0gJ2NhY2hlX2RlbGV0ZScpIHtcclxuICAgICAgICAgIGlmIChfY2xpZW50LmRiU2VydmljZSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgIF9jbGllbnQuZGJTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAuZGVsZXRlQnlLZXkoJ291dGJvdW5kJywgbWV0aG9kKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7fSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdBY3RpdmVDb25uZWN0OiBVbmFibGUgdG8gZGVsZXRlIGNhY2hlZCBkYXRhJyk7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgICAgICAnQWN0aXZlQ29ubmVjdDogQ2FjaGluZyAvIHJlc3RvcmUgbm90IHBvc3NpYmxlIGFzIHRoZSBpbmRleGVkREIgaXMgbm90IGFjY2Vzc2libGUnXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBfdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICBfdGhpcy5yZXF1ZXN0ZWQgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgPT0gJ2RhdGFfZGVsZXRlJykge1xyXG4gICAgICAgICAgX3RoaXMuZGF0YSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIF90aGlzLmRhdGFNYXAgPSBuZXcgTWFwKCk7XHJcbiAgICAgICAgICBfdGhpcy5yZXF1ZXN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgIF90aGlzLmxvYWRlZEdyb3VwRGF0YSA9IG51bGw7XHJcbiAgICAgICAgICBfdGhpcy5sb2FkZWRHcm91cElkID0gbnVsbDtcclxuICAgICAgICAgIF90aGlzLl9sZW5ndGggPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICBfdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhID09ICdkYXRhX2dyb3VwJykge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBfdGhpcy5yZXF1ZXN0ZWRHcm91cElkID09XHJcbiAgICAgICAgICAgICh1cGRhdGVkT3JHcm91cElkID8gdXBkYXRlZE9yR3JvdXBJZFswXSA6IDApXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgX3RoaXMubG9hZGVkR3JvdXBEYXRhID0gaW5zZXJ0ZWRPckdyb3VwRGF0YTtcclxuICAgICAgICAgICAgX3RoaXMubG9hZGVkR3JvdXBJZCA9IHVwZGF0ZWRPckdyb3VwSWQgPyB1cGRhdGVkT3JHcm91cElkWzBdIDogMDtcclxuICAgICAgICAgICAgX3RoaXMucmVxdWVzdGVkR3JvdXBJZENvbm5lY3Rpb25JZCA9IF90aGlzLnRhcmdldC5fX19jb25uZWN0aW9uSWQ7XHJcbiAgICAgICAgICAgIF90aGlzLmxvYWRlZEdyb3VwQ2hhbmdlZD8ubmV4dChpbnNlcnRlZE9yR3JvdXBEYXRhIGFzIFRbXSk7XHJcbiAgICAgICAgICAgIF90aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgPT0gJ2RhdGFfaWQnKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIF90aGlzLnJlcXVlc3RlZElkID09ICh1cGRhdGVkT3JHcm91cElkID8gdXBkYXRlZE9yR3JvdXBJZFswXSA6IDApXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgX3RoaXMubG9hZGVkSWREYXRhID1cclxuICAgICAgICAgICAgICAoaW5zZXJ0ZWRPckdyb3VwRGF0YT8ubGVuZ3RoIHx8IDApID4gMFxyXG4gICAgICAgICAgICAgICAgPyAoaW5zZXJ0ZWRPckdyb3VwRGF0YSBhcyBhbnlbXSlbMF1cclxuICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICAgICAgX3RoaXMubG9hZGVkSWQgPSB1cGRhdGVkT3JHcm91cElkID8gdXBkYXRlZE9yR3JvdXBJZFswXSA6IDA7XHJcbiAgICAgICAgICAgIF90aGlzLnJlcXVlc3RlZElkQ29ubmVjdGlvbklkID0gX3RoaXMudGFyZ2V0Ll9fX2Nvbm5lY3Rpb25JZDtcclxuICAgICAgICAgICAgX3RoaXMubG9hZGVkSWRDaGFuZ2VkPy5uZXh0KF90aGlzLmxvYWRlZElkRGF0YSBhcyBUKTtcclxuICAgICAgICAgICAgX3RoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YSA9PSAnZGF0YV9kaWZmJykge1xyXG4gICAgICAgICAgaW5zZXJ0ZWRPckdyb3VwRGF0YT8uZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICBfdGhpcy5kYXRhTWFwLnNldChlLmlkLCBlKTtcclxuICAgICAgICAgICAgaWYgKGUuaWQgPT0gX3RoaXMubG9hZGVkSWQpIHtcclxuICAgICAgICAgICAgICBfdGhpcy5sb2FkZWRJZENoYW5nZWQ/Lm5leHQoZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdXBkYXRlZE9yR3JvdXBJZD8uZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICBfdGhpcy5kYXRhTWFwLnNldChlLmlkLCBlKTtcclxuICAgICAgICAgICAgaWYgKGUuaWQgPT0gX3RoaXMubG9hZGVkSWQpIHtcclxuICAgICAgICAgICAgICBfdGhpcy5sb2FkZWRJZENoYW5nZWQ/Lm5leHQoZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgZGVsZXRlZD8uZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICBfdGhpcy5kYXRhTWFwLmRlbGV0ZShlLmlkKTtcclxuICAgICAgICAgICAgaWYgKGUuaWQgPT0gX3RoaXMubG9hZGVkSWQpIHtcclxuICAgICAgICAgICAgICBfdGhpcy5sb2FkZWRJZENoYW5nZWQ/Lm5leHQobnVsbCBhcyBhbnkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIF90aGlzLmRhdGEgPSBBcnJheS5mcm9tKF90aGlzLmRhdGFNYXAudmFsdWVzKCkpO1xyXG4gICAgICAgICAgaWYgKF90aGlzLmRhdGEgJiYgX3RoaXMuc29ydEJ5KVxyXG4gICAgICAgICAgICBfdGhpcy5kYXRhID0gX3RoaXMuZGF0YS5zb3J0KF90aGlzLnNvcnRCeSk7XHJcbiAgICAgICAgICBfdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgaWYgKGNhY2hlZCAmJiBzcGVjaWZpY0hhc2gpIHtcclxuICAgICAgICAgICAgaWYgKF9jbGllbnQuZGJTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChfdGhpcy5kYXRhICYmIF90aGlzLmRhdGE/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgX2NsaWVudC5kYlNlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgICAudXBkYXRlKCdvdXRib3VuZCcsIHtcclxuICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCxcclxuICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IF90aGlzLmRhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpY0hhc2gsXHJcbiAgICAgICAgICAgICAgICAgICAgICBsZW5ndGhcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge30pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgX2NsaWVudC5kYlNlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgICAuZGVsZXRlQnlLZXkoJ291dGJvdW5kJywgbWV0aG9kKVxyXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge30pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FjdGl2ZUNvbm5lY3Q6IFVuYWJsZSB0byB1cGRhdGUgY2FjaGVkIGRhdGEuJyk7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgICAgICAgJ0FjdGl2ZUNvbm5lY3Q6IENhY2hpbmcgbm90IHBvc3NpYmxlIGFzIHRoZSBpbmRleGVkREIgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkJ1xyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgX3RoaXMuc2V0RGF0YShkYXRhKTtcclxuICAgICAgICAgIGlmIChfdGhpcy5sb2FkZWRJZCkge1xyXG4gICAgICAgICAgICBjb25zdCBsb2FkZWRWYWx1ZSA9IF90aGlzLmRhdGFNYXAuZ2V0KF90aGlzLmxvYWRlZElkKTtcclxuICAgICAgICAgICAgaWYgKGxvYWRlZFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgX3RoaXMubG9hZGVkSWREYXRhID0gbG9hZGVkVmFsdWU7XHJcbiAgICAgICAgICAgICAgX3RoaXMubG9hZGVkSWRDaGFuZ2VkPy5uZXh0KF90aGlzLmxvYWRlZElkRGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIF90aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIGlmIChjYWNoZWQgJiYgc3BlY2lmaWNIYXNoKSB7XHJcbiAgICAgICAgICAgIGlmIChfY2xpZW50LmRiU2VydmljZSkge1xyXG4gICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YSAmJiBkYXRhPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIF9jbGllbnQuZGJTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAgICAgLnVwZGF0ZSgnb3V0Ym91bmQnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBtZXRob2QsXHJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWNIYXNoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHt9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIF9jbGllbnQuZGJTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAgICAgLmRlbGV0ZUJ5S2V5KCdvdXRib3VuZCcsIG1ldGhvZClcclxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHt9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdBY3RpdmVDb25uZWN0OiBVbmFibGUgdG8gdXBkYXRlIGNhY2hlZCBkYXRhLicpO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgICAgICAgICdBY3RpdmVDb25uZWN0OiBDYWNoaW5nIG5vdCBwb3NzaWJsZSBhcyB0aGUgaW5kZXhlZERCIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCdcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChsZW5ndGgpIF90aGlzLl9sZW5ndGggPSBsZW5ndGg7XHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgV2Vic29ja2V0Q2xpZW50LmFkZFJlc2V0UmVxdWVzdGluZ1N0YXRlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICB0aGlzLmFmdGVyU2VydmVyUmVjb25uZWN0ZWQoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRhcmdldCgpOiBhbnkge1xyXG4gICAgcmV0dXJuICh0aGlzLmNsaWVudCBhcyBhbnkpLl9fcHJvdG9fXztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZGF0YU1hcDogTWFwPG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsIFQ+ID0gbmV3IE1hcCgpO1xyXG4gIHByaXZhdGUgZGF0YTogVFtdIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cclxuICBwdWJsaWMgZ2V0KGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPFQ+IHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5yZXF1ZXN0ZWRJZCA9PSBpZCAmJlxyXG4gICAgICB0aGlzLnRhcmdldC5fX19jb25uZWN0aW9uSWQgPT0gdGhpcy5yZXF1ZXN0ZWRJZENvbm5lY3Rpb25JZCAmJlxyXG4gICAgICB0aGlzLmxvYWRlZE9ic2VydmFibGUgJiZcclxuICAgICAgdGhpcy5sb2FkZWRJZERhdGFcclxuICAgICkge1xyXG4gICAgICBpZiAodGhpcy5sb2FkZWRJZERhdGEpXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5sb2FkZWRJZERhdGEpIHRoaXMubG9hZGVkSWRDaGFuZ2VkPy5uZXh0KHRoaXMubG9hZGVkSWREYXRhKTtcclxuICAgICAgICB9LCA1MCk7XHJcbiAgICAgIHJldHVybiB0aGlzLmxvYWRlZE9ic2VydmFibGU7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG9ic2VydmFibGVQcm9taXNlOiBQcm9taXNlPGFueT4gfCB1bmRlZmluZWQ7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMucmVxdWVzdGVkSWQgIT0gaWQgfHxcclxuICAgICAgdGhpcy50YXJnZXQuX19fY29ubmVjdGlvbklkICE9IHRoaXMucmVxdWVzdGVkSWRDb25uZWN0aW9uSWQgfHxcclxuICAgICAgIXRoaXMubG9hZGVkT2JzZXJ2YWJsZVxyXG4gICAgKSB7XHJcbiAgICAgIG9ic2VydmFibGVQcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcclxuICAgICAgICB0aGlzLmxvYWRlZE9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZTxUPigob2JzZXJ2ZXI6IE9ic2VydmVyPFQ+KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRlZElkQ2hhbmdlZCA9IG9ic2VydmVyO1xyXG4gICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBQcm9taXNlLmFsbChbb2JzZXJ2YWJsZVByb21pc2VdKS50aGVuKCgpID0+IHtcclxuICAgICAgbmV3IFByb21pc2U8dm9pZD4oYXN5bmMgKHJlc29sdmUpID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMucmVxdWVzdGVkICYmIHRoaXMubGF6eUxvYWRlZCkge1xyXG4gICAgICAgICAgdGhpcy5sb2FkKCkudGhlbigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5kYXRhKSB7XHJcbiAgICAgICAgICBjb25zdCByZXMgPSB0aGlzLmRhdGFNYXAuZ2V0KGlkKTtcclxuICAgICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkZWRJZENoYW5nZWQ/Lm5leHQocmVzKTtcclxuICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmxvYWRlZElkID09IGlkKSB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRlZElkQ2hhbmdlZD8ubmV4dCh0aGlzLmxvYWRlZElkRGF0YSBhcyBUKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0QnlJZChpZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgfSkudGhlbigpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcy5sb2FkZWRPYnNlcnZhYmxlIGFzIE9ic2VydmFibGU8VD47XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Rm9yR3JvdXAoZ3JvdXBJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxUW10+IHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5yZXF1ZXN0ZWRHcm91cElkID09IGdyb3VwSWQgJiZcclxuICAgICAgdGhpcy50YXJnZXQuX19fY29ubmVjdGlvbklkID09IHRoaXMucmVxdWVzdGVkR3JvdXBJZENvbm5lY3Rpb25JZCAmJlxyXG4gICAgICB0aGlzLmxvYWRlZEdyb3VwT2JzZXJ2YWJsZSAmJlxyXG4gICAgICB0aGlzLmxvYWRlZEdyb3VwRGF0YVxyXG4gICAgKSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmxvYWRlZEdyb3VwRGF0YSlcclxuICAgICAgICAgIHRoaXMubG9hZGVkR3JvdXBDaGFuZ2VkPy5uZXh0KHRoaXMubG9hZGVkR3JvdXBEYXRhKTtcclxuICAgICAgfSwgNTApO1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2FkZWRHcm91cE9ic2VydmFibGU7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG9ic2VydmFibGVQcm9taXNlOiBQcm9taXNlPGFueT4gfCB1bmRlZmluZWQ7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMucmVxdWVzdGVkR3JvdXBJZCAhPSBncm91cElkIHx8XHJcbiAgICAgIHRoaXMudGFyZ2V0Ll9fX2Nvbm5lY3Rpb25JZCAhPSB0aGlzLnJlcXVlc3RlZEdyb3VwSWRDb25uZWN0aW9uSWQgfHxcclxuICAgICAgIXRoaXMubG9hZGVkR3JvdXBPYnNlcnZhYmxlXHJcbiAgICApIHtcclxuICAgICAgb2JzZXJ2YWJsZVByb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZGVkR3JvdXBPYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGU8VFtdPihcclxuICAgICAgICAgIChvYnNlcnZlcjogT2JzZXJ2ZXI8VFtdPikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRlZEdyb3VwQ2hhbmdlZCA9IG9ic2VydmVyO1xyXG4gICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgUHJvbWlzZS5hbGwoW29ic2VydmFibGVQcm9taXNlXSkudGhlbigoKSA9PiB7XHJcbiAgICAgIG5ldyBQcm9taXNlPHZvaWQ+KGFzeW5jIChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJlcXVlc3RlZCAmJiB0aGlzLmxhenlMb2FkZWQpIHtcclxuICAgICAgICAgIHRoaXMubG9hZCgpLnRoZW4oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubG9hZGVkR3JvdXBJZCA9PSBncm91cElkICYmIHRoaXMubG9hZGVkR3JvdXBEYXRhKSB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRlZEdyb3VwQ2hhbmdlZD8ubmV4dCh0aGlzLmxvYWRlZEdyb3VwRGF0YSBhcyBUW10pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnJlcXVlc3RGb3JHcm91cChncm91cElkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICB9KS50aGVuKCk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0aGlzLmxvYWRlZEdyb3VwT2JzZXJ2YWJsZSBhcyBPYnNlcnZhYmxlPFRbXT47XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGFsbCgpOiBUW10gfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKCF0aGlzLnJlcXVlc3RlZCAmJiB0aGlzLmxhenlMb2FkZWQpIHtcclxuICAgICAgdGhpcy5sb2FkKCkudGhlbigpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVxdWVzdGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGFzeW5jIGxvYWQoY291bnQ/OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLmxhenlMb2FkZWQpIHtcclxuICAgICAgY29uc3QgaGFzQmVlblJlcXVlc3RlZEJlZm9yZSA9IHRoaXMucmVxdWVzdGVkO1xyXG4gICAgICB0aGlzLl9sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgaWYgKCF0aGlzLnJlcXVlc3RlZCkge1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yZXF1ZXN0ZWQgPSB0cnVlO1xyXG4gICAgICBhd2FpdCB0aGlzLmNsaWVudC5zZW5kKCdyZXF1ZXN0LicgKyB0aGlzLm1ldGhvZCwge1xyXG4gICAgICAgIGNvdW50OiBoYXNCZWVuUmVxdWVzdGVkQmVmb3JlXHJcbiAgICAgICAgICA/IHRoaXMuZGF0YVxyXG4gICAgICAgICAgICA/IGNvdW50IHx8IHRoaXMuaW5pdGlhbExvYWRpbmdDb3VudFxyXG4gICAgICAgICAgICAgID8gKGNvdW50IHx8ICh0aGlzLmluaXRpYWxMb2FkaW5nQ291bnQgYXMgbnVtYmVyKSkgK1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkZWRMZW5ndGhcclxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxyXG4gICAgICAgICAgOiB0aGlzLnByZXZpb3VzbHlDYWNoZWRDb3VudCB8fCAodGhpcy5pbml0aWFsTG9hZGluZ0NvdW50IGFzIG51bWJlciksXHJcbiAgICAgICAgbG9hZGVkOiB0aGlzLmxvYWRlZExlbmd0aFxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IEVycm9yKFxyXG4gICAgICAgICdBY3RpdmUtQ29ubmVjdDogQ2Fubm90IHJ1biBsb2FkaW5nIHJlcXVlc3QgYXMgdGhpcyBvdXRib3VuZCBpcyBub3QgbGF6eS1sb2FkZWQuJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbG9hZGluZyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgc2V0IGxvYWRpbmcodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2xvYWRpbmcgPSB2YWx1ZTtcclxuICAgIHRoaXMudGFyZ2V0LmxvYWRpbmcuc2V0KHRoaXMubWV0aG9kLCB2YWx1ZSk7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgbG9hZGluZygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9sb2FkaW5nO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGxvYWRlZExlbmd0aCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YT8ubGVuZ3RoIHx8IDA7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2xlbmd0aDogbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG4gIHB1YmxpYyBnZXQgbGVuZ3RoKCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXF1ZXN0ZWRJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSByZXF1ZXN0ZWRJZENvbm5lY3Rpb25JZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBsb2FkZWRPYnNlcnZhYmxlOiBPYnNlcnZhYmxlPFQ+IHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBsb2FkZWRJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBsb2FkZWRJZERhdGE6IFQgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGxvYWRlZElkQ2hhbmdlZDogT2JzZXJ2ZXI8VD4gfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIHJlcXVlc3RCeUlkKGlkOiBudW1iZXIpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMucmVxdWVzdGVkSWQgPSBpZDtcclxuICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kKCdyZXF1ZXN0LicgKyB0aGlzLm1ldGhvZCwgeyBpZCB9KSBhcyBQcm9taXNlPGFueT47XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlcXVlc3RlZEdyb3VwSWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgcmVxdWVzdGVkR3JvdXBJZENvbm5lY3Rpb25JZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBsb2FkZWRHcm91cE9ic2VydmFibGU6IE9ic2VydmFibGU8VFtdPiB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgbG9hZGVkR3JvdXBJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBsb2FkZWRHcm91cERhdGE6IFRbXSB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgbG9hZGVkR3JvdXBDaGFuZ2VkOiBPYnNlcnZlcjxUW10+IHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSByZXF1ZXN0Rm9yR3JvdXAoZ3JvdXBJZDogbnVtYmVyKTogUHJvbWlzZTxUW10+IHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnJlcXVlc3RlZEdyb3VwSWQgPSBncm91cElkO1xyXG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LnNlbmQoJ3JlcXVlc3QuJyArIHRoaXMubWV0aG9kLCB7IGdyb3VwSWQgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldERhdGEoZGF0YTogVFtdIHwgeyBhZGRlZDogVFtdIHwgdW5kZWZpbmVkOyBsZW5ndGg6IG51bWJlciB9KSB7XHJcbiAgICB0aGlzLmRhdGEgPSBkYXRhIGFzIFRbXTtcclxuICAgIGlmICh0aGlzLmRhdGEgJiYgdGhpcy5zb3J0QnkpIHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5zb3J0KHRoaXMuc29ydEJ5KTtcclxuICAgIHRoaXMuX2xlbmd0aCA9IGRhdGEubGVuZ3RoO1xyXG4gICAgdGhpcy5kYXRhTWFwID0gbmV3IE1hcCgpO1xyXG4gICAgdGhpcy5kYXRhLmZvckVhY2goKGQpID0+IHtcclxuICAgICAgdGhpcy5kYXRhTWFwLnNldChkLmlkLCBkKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzRW1wdHkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhID09IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBjb250YWluZWQgZGF0YSBjYW4gYmUgbW9kaWZpZWQgd2l0aGluIHRoZSBjYWxsYmFjayBtZXRob2RcclxuICAgKi9cclxuICBwdWJsaWMgdXBkYXRlKGNhbGxiYWNrOiAoZGF0YTogVFtdKSA9PiB2b2lkKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhKSB7XHJcbiAgICAgIGNvbnN0IHVwZGF0ZUxlbmd0aFZhcmlhYmxlID0gdGhpcy5kYXRhLmxlbmd0aCA9PSB0aGlzLl9sZW5ndGg7XHJcbiAgICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xyXG4gICAgICBjYWxsYmFjayh0aGlzLmRhdGEpO1xyXG4gICAgICB0aGlzLnNldERhdGEodGhpcy5kYXRhKTtcclxuICAgICAgaWYgKCF1cGRhdGVMZW5ndGhWYXJpYWJsZSkge1xyXG4gICAgICAgIHRoaXMuX2xlbmd0aCA9IGxlbmd0aDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZnRlclNlcnZlclJlY29ubmVjdGVkKCkge1xyXG4gICAgaWYgKHRoaXMucmVxdWVzdGVkICYmIHRoaXMubGF6eUxvYWRlZCkge1xyXG4gICAgICB0aGlzLnJlcXVlc3RlZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmxvYWQodGhpcy5sb2FkZWRMZW5ndGgpLnRoZW4oKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmxvYWRlZElkKSB7XHJcbiAgICAgIHRoaXMubG9hZGVkSWREYXRhID0gbnVsbDtcclxuICAgICAgdGhpcy5nZXQodGhpcy5sb2FkZWRJZCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5sb2FkZWRHcm91cElkKSB7XHJcbiAgICAgIHRoaXMubG9hZGVkR3JvdXBEYXRhID0gbnVsbDtcclxuICAgICAgdGhpcy5nZXRGb3JHcm91cCh0aGlzLmxvYWRlZEdyb3VwSWQpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=