angular-three 1.6.1 → 1.6.2

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.
@@ -299,16 +299,28 @@ export class NgtRenderer {
299
299
  listen(target, eventName, callback) {
300
300
  const targetCdr = target.__ngt_renderer__?.[13 /* NgtRendererClassId.injectorFactory */]?.().get(ChangeDetectorRef, null);
301
301
  // if target is DOM node, then we pass that to delegate Renderer
302
+ const callbackWithCdr = (event) => {
303
+ const value = callback(event);
304
+ if (targetCdr)
305
+ targetCdr.detectChanges();
306
+ this.store.rootCdr.detectChanges();
307
+ return value;
308
+ };
302
309
  if (this.store.isDOM(target)) {
303
- const callbackWithCdr = (event) => {
304
- const value = callback(event);
305
- if (targetCdr)
306
- targetCdr.detectChanges();
307
- this.store.rootCdr.detectChanges();
308
- return value;
309
- };
310
310
  return this.delegate.listen(target, eventName, callbackWithCdr);
311
311
  }
312
+ // @ts-expect-error - we know that target is not DOM node
313
+ if (target === this.store.rootScene) {
314
+ let [domTarget, event] = eventName.split(':');
315
+ if (event == null) {
316
+ event = domTarget;
317
+ domTarget = '';
318
+ }
319
+ const eventTarget = domTarget === 'window'
320
+ ? target['ownerDocument']['defaultView']
321
+ : target['ownerDocument'];
322
+ return this.delegate.listen(eventTarget, event, callbackWithCdr);
323
+ }
312
324
  if (target.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'three' ||
313
325
  (target.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'compound' &&
314
326
  target.__ngt_renderer__[6 /* NgtRendererClassId.compounded */])) {
@@ -329,4 +341,4 @@ export class NgtRenderer {
329
341
  return this.delegate.data;
330
342
  }
331
343
  }
332
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUvc3JjL2xpYi9yZW5kZXJlci9yZW5kZXJlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUNILGlCQUFpQixFQUNqQixZQUFZLEVBQ1osTUFBTSxFQUNOLFVBQVUsRUFFVixnQkFBZ0IsR0FFbkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTdDLE9BQU8sRUFBbUIsZ0JBQWdCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxTQUFTLENBQUM7O0FBR2hILE1BQU0sT0FBTyxrQkFBa0I7SUFEL0I7UUFFcUIsNEJBQXVCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdkUsUUFBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2hDLFVBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekIsY0FBUyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNsQyxxQkFBZ0IsR0FBRyxNQUFNLENBQUMscUJBQXFC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Q25FO1FBRUQsSUFDSSxNQUFNLENBQUMsZ0JBQWdCLGlDQUF5QixLQUFLLE9BQU87WUFDNUQsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLGlDQUF5QixLQUFLLFVBQVU7Z0JBQzVELE1BQU0sQ0FBQyxnQkFBZ0IsdUNBQStCLENBQUMsRUFDN0Q7WUFDRSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLHVDQUErQixJQUFJLE1BQU0sQ0FBQztZQUNsRixNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQ2hELE9BQU8saUJBQWlCLENBQUMsUUFBUSxFQUFFLFFBQVEsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxTQUFVLENBQUMsQ0FBQztTQUMxRztRQUVELElBQ0ksTUFBTSxDQUFDLGdCQUFnQixpQ0FBeUIsS0FBSyxVQUFVO1lBQy9ELENBQUMsTUFBTSxDQUFDLGdCQUFnQix1Q0FBK0IsRUFDekQ7WUFDRSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUU7Z0JBQzlCLElBQUk7Z0JBQ0osR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO2FBQ2pHLENBQUMsQ0FBQztTQUNOO1FBQ0QsT0FBTyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVELElBQUksSUFBSTtRQUNKLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFDOUIsQ0FBQztDQVlKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBnZXREZWJ1Z05vZGUsXG4gICAgaW5qZWN0LFxuICAgIEluamVjdGFibGUsXG4gICAgUmVuZGVyZXIyLFxuICAgIFJlbmRlcmVyRmFjdG9yeTIsXG4gICAgUmVuZGVyZXJUeXBlMixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR1RfQ0FUQUxPR1VFIH0gZnJvbSAnLi4vZGkvY2F0YWxvZ3VlJztcbmltcG9ydCB7IE5ndFN0b3JlIH0gZnJvbSAnLi4vc3RvcmVzL3N0b3JlJztcbmltcG9ydCB7IGdldExvY2FsU3RhdGUsIHByZXBhcmUgfSBmcm9tICcuLi91dGlscy9pbnN0YW5jZSc7XG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uL3V0aWxzL2lzJztcbmltcG9ydCB7IE5HVF9DT01QT1VORF9QUkVGSVhFUyB9IGZyb20gJy4vZGknO1xuaW1wb3J0IHsgTmd0UmVuZGVyZXJDbGFzc0lkIH0gZnJvbSAnLi9lbnVtcyc7XG5pbXBvcnQgeyBOZ3RSZW5kZXJlck5vZGUsIE5ndFJlbmRlcmVyU3RvcmUgfSBmcm9tICcuL3N0YXRlJztcbmltcG9ydCB7IGF0dGFjaFRocmVlQ2hpbGQsIGtlYmFiVG9QYXNjYWwsIHByb2Nlc3NUaHJlZUV2ZW50LCByZW1vdmVUaHJlZUNoaWxkLCBTUEVDSUFMX0RPTV9UQUcgfSBmcm9tICcuL3V0aWxzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5ndFJlbmRlcmVyRmFjdG9yeSBpbXBsZW1lbnRzIFJlbmRlcmVyRmFjdG9yeTIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVsZWdhdGVSZW5kZXJlckZhY3RvcnkgPSBpbmplY3QoUmVuZGVyZXJGYWN0b3J5MiwgeyBza2lwU2VsZjogdHJ1ZSB9KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBzdG9yZSA9IGluamVjdChOZ3RTdG9yZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXRhbG9ndWUgPSBpbmplY3QoTkdUX0NBVEFMT0dVRSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjb21wb3VuZFByZWZpeGVzID0gaW5qZWN0KE5HVF9DT01QT1VORF9QUkVGSVhFUyk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG5cbiAgICBwcml2YXRlIHJlbmRlcmVyTWFwID0gbmV3IE1hcDxzdHJpbmcsIFJlbmRlcmVyMj4oKTtcbiAgICBwcml2YXRlIHBvcnRhbHM6IE5ndFJlbmRlcmVyTm9kZVtdID0gW107XG5cbiAgICBjcmVhdGVSZW5kZXJlcihob3N0RWxlbWVudDogYW55LCB0eXBlOiBSZW5kZXJlclR5cGUyIHwgbnVsbCk6IFJlbmRlcmVyMiB7XG4gICAgICAgIGNvbnN0IGRlbGVnYXRlUmVuZGVyZXIgPSB0aGlzLmRlbGVnYXRlUmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKGhvc3RFbGVtZW50LCB0eXBlKTtcbiAgICAgICAgaWYgKCF0eXBlKSByZXR1cm4gZGVsZWdhdGVSZW5kZXJlcjtcblxuICAgICAgICBsZXQgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyTWFwLmdldCh0eXBlLmlkKTtcbiAgICAgICAgaWYgKHJlbmRlcmVyKSByZXR1cm4gcmVuZGVyZXI7XG5cbiAgICAgICAgaWYgKCFob3N0RWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3Qgc3RvcmUgPSBuZXcgTmd0UmVuZGVyZXJTdG9yZSh7XG4gICAgICAgICAgICAgICAgc3RvcmU6IHRoaXMuc3RvcmUsXG4gICAgICAgICAgICAgICAgY2RyOiB0aGlzLmNkcixcbiAgICAgICAgICAgICAgICBwb3J0YWxzOiB0aGlzLnBvcnRhbHMsXG4gICAgICAgICAgICAgICAgY29tcG91bmRQcmVmaXhlczogdGhpcy5jb21wb3VuZFByZWZpeGVzLFxuICAgICAgICAgICAgICAgIGRvY3VtZW50OiB0aGlzLmRvY3VtZW50LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZW5kZXJlciA9IG5ldyBOZ3RSZW5kZXJlcihkZWxlZ2F0ZVJlbmRlcmVyLCBzdG9yZSwgdGhpcy5jYXRhbG9ndWUsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlck1hcC5zZXQodHlwZS5pZCwgcmVuZGVyZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFyZW5kZXJlcikge1xuICAgICAgICAgICAgY29uc3Qgc3RvcmUgPSBuZXcgTmd0UmVuZGVyZXJTdG9yZSh7XG4gICAgICAgICAgICAgICAgc3RvcmU6IHRoaXMuc3RvcmUsXG4gICAgICAgICAgICAgICAgY2RyOiB0aGlzLmNkcixcbiAgICAgICAgICAgICAgICBwb3J0YWxzOiB0aGlzLnBvcnRhbHMsXG4gICAgICAgICAgICAgICAgY29tcG91bmRQcmVmaXhlczogdGhpcy5jb21wb3VuZFByZWZpeGVzLFxuICAgICAgICAgICAgICAgIGRvY3VtZW50OiB0aGlzLmRvY3VtZW50LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZW5kZXJlciA9IG5ldyBOZ3RSZW5kZXJlcihkZWxlZ2F0ZVJlbmRlcmVyLCBzdG9yZSwgdGhpcy5jYXRhbG9ndWUpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlck1hcC5zZXQodHlwZS5pZCwgcmVuZGVyZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlbmRlcmVyO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5ndFJlbmRlcmVyIGltcGxlbWVudHMgUmVuZGVyZXIyIHtcbiAgICBwcml2YXRlIGZpcnN0ID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkZWxlZ2F0ZTogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHN0b3JlOiBOZ3RSZW5kZXJlclN0b3JlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNhdGFsb2d1ZTogUmVjb3JkPHN0cmluZywgbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55PixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSByb290ID0gZmFsc2VcbiAgICApIHt9XG5cbiAgICBjcmVhdGVFbGVtZW50KG5hbWU6IHN0cmluZywgbmFtZXNwYWNlPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVFbGVtZW50KG5hbWUsIG5hbWVzcGFjZSk7XG5cbiAgICAgICAgLy8gb24gZmlyc3QgcGFzcywgd2UgcmV0dXJuIHRoZSBSb290IFNjZW5lIGFzIHRoZSByb290IG5vZGVcbiAgICAgICAgaWYgKHRoaXMucm9vdCAmJiAhdGhpcy5maXJzdCkge1xuICAgICAgICAgICAgdGhpcy5maXJzdCA9IHRydWU7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5zdG9yZS5jcmVhdGVOb2RlKCd0aHJlZScsIHRoaXMuc3RvcmUucm9vdFNjZW5lKTtcbiAgICAgICAgICAgIG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0b3JGYWN0b3J5XSA9ICgpID0+IGdldERlYnVnTm9kZShlbGVtZW50KSEuaW5qZWN0b3I7XG4gICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGhhbmRsZSBjb21wb3VuZFxuICAgICAgICBpZiAodGhpcy5zdG9yZS5pc0NvbXBvdW5kKG5hbWUpKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wb3VuZCA9IHRoaXMuc3RvcmUuY3JlYXRlTm9kZSgnY29tcG91bmQnLCBlbGVtZW50KTtcbiAgICAgICAgICAgIGNvbXBvdW5kLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdG9yRmFjdG9yeV0gPSAoKSA9PiBnZXREZWJ1Z05vZGUoZWxlbWVudCkhLmluamVjdG9yO1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBvdW5kO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaGFuZGxlIHBvcnRhbFxuICAgICAgICBpZiAobmFtZSA9PT0gU1BFQ0lBTF9ET01fVEFHLk5HVF9QT1JUQUwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0b3JlLmNyZWF0ZU5vZGUoJ3BvcnRhbCcsIGVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaGFuZGxlIHJhdyB2YWx1ZVxuICAgICAgICBpZiAobmFtZSA9PT0gU1BFQ0lBTF9ET01fVEFHLk5HVF9WQUxVRSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuY3JlYXRlTm9kZShcbiAgICAgICAgICAgICAgICAndGhyZWUnLFxuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oeyBfX25ndF9yZW5kZXJlcl9fOiB7IHJhd1ZhbHVlOiB1bmRlZmluZWQgfSB9LCB7IF9fbmd0X186IHsgaXNSYXc6IHRydWUgfSB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgaW5qZWN0ZWRBcmdzLCBzdG9yZSB9ID0gdGhpcy5zdG9yZS5nZXRDcmVhdGlvblN0YXRlKCk7XG5cbiAgICAgICAgLy8gaGFuZGxlIHByaW1pdGl2ZVxuICAgICAgICBpZiAobmFtZSA9PT0gU1BFQ0lBTF9ET01fVEFHLk5HVF9QUklNSVRJVkUpIHtcbiAgICAgICAgICAgIGlmICghaW5qZWN0ZWRBcmdzWzBdKSB0aHJvdyBuZXcgRXJyb3IoYFtOR1RdIG5ndC1wcmltaXRpdmUgd2l0aG91dCBhcmdzIGlzIGludmFsaWRgKTtcbiAgICAgICAgICAgIGNvbnN0IG9iamVjdCA9IGluamVjdGVkQXJnc1swXTtcbiAgICAgICAgICAgIGxldCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShvYmplY3QpO1xuICAgICAgICAgICAgaWYgKCFPYmplY3Qua2V5cyhsb2NhbFN0YXRlKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBwcmVwYXJlKG9iamVjdCwgeyBzdG9yZSwgYXJnczogaW5qZWN0ZWRBcmdzLCBwcmltaXRpdmU6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUob2JqZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghbG9jYWxTdGF0ZS5zdG9yZSkgbG9jYWxTdGF0ZS5zdG9yZSA9IHN0b3JlO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuY3JlYXRlTm9kZSgndGhyZWUnLCBvYmplY3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGhyZWVUYWcgPSBuYW1lLnN0YXJ0c1dpdGgoJ25ndCcpID8gbmFtZS5zbGljZSg0KSA6IG5hbWU7XG4gICAgICAgIGNvbnN0IHRocmVlTmFtZSA9IGtlYmFiVG9QYXNjYWwodGhyZWVUYWcpO1xuICAgICAgICBjb25zdCB0aHJlZVRhcmdldCA9IHRoaXMuY2F0YWxvZ3VlW3RocmVlTmFtZV07XG4gICAgICAgIC8vIHdlIGhhdmUgdGhlIFRIUkVFIGNvbnN0cnVjdG9yIGhlcmUsIGhhbmRsZSBpdFxuICAgICAgICBpZiAodGhyZWVUYXJnZXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gcHJlcGFyZShuZXcgdGhyZWVUYXJnZXQoLi4uaW5qZWN0ZWRBcmdzKSwgeyBzdG9yZSwgYXJnczogaW5qZWN0ZWRBcmdzIH0pO1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RvcmUuY3JlYXRlTm9kZSgndGhyZWUnLCBpbnN0YW5jZSk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShpbnN0YW5jZSk7XG4gICAgICAgICAgICBpZiAoaXMuZ2VvbWV0cnkoaW5zdGFuY2UpKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxTdGF0ZS5hdHRhY2ggPSBbJ2dlb21ldHJ5J107XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzLm1hdGVyaWFsKGluc3RhbmNlKSkge1xuICAgICAgICAgICAgICAgIGxvY2FsU3RhdGUuYXR0YWNoID0gWydtYXRlcmlhbCddO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkb21Ob2RlID0gdGhpcy5zdG9yZS5jcmVhdGVOb2RlKCdkb20nLCBlbGVtZW50KTtcbiAgICAgICAgZG9tTm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RvckZhY3RvcnldID0gKCkgPT4gZ2V0RGVidWdOb2RlKGVsZW1lbnQpIS5pbmplY3RvcjtcbiAgICAgICAgcmV0dXJuIGRvbU5vZGU7XG4gICAgfVxuXG4gICAgY3JlYXRlQ29tbWVudCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGNvbW1lbnQgPSB0aGlzLmRlbGVnYXRlLmNyZWF0ZUNvbW1lbnQodmFsdWUpO1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5jcmVhdGVOb2RlKCdjb21tZW50JywgY29tbWVudCk7XG4gICAgfVxuXG4gICAgYXBwZW5kQ2hpbGQocGFyZW50OiBOZ3RSZW5kZXJlck5vZGUsIG5ld0NoaWxkOiBOZ3RSZW5kZXJlck5vZGUpOiB2b2lkIHtcbiAgICAgICAgLy8gVE9ETzoganVzdCBpZ25vcmUgdGV4dCBub2RlIGZvciBub3dcbiAgICAgICAgaWYgKG5ld0NoaWxkIGluc3RhbmNlb2YgVGV4dCkgcmV0dXJuO1xuXG4gICAgICAgIGlmIChuZXdDaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbW1lbnQnKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLnNldFBhcmVudChuZXdDaGlsZCwgcGFyZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RvcmUuc2V0UGFyZW50KG5ld0NoaWxkLCBwYXJlbnQpO1xuICAgICAgICB0aGlzLnN0b3JlLmFkZENoaWxkKHBhcmVudCwgbmV3Q2hpbGQpO1xuXG4gICAgICAgIC8vIGlmIG5ldyBjaGlsZCBpcyBhIHBvcnRhbFxuICAgICAgICBpZiAobmV3Q2hpbGQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdwb3J0YWwnKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLnByb2Nlc3NQb3J0YWxDb250YWluZXIobmV3Q2hpbGQpO1xuICAgICAgICAgICAgaWYgKG5ld0NoaWxkLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKHBhcmVudCwgbmV3Q2hpbGQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiBwYXJlbnQgaXMgYSBwb3J0YWxcbiAgICAgICAgaWYgKHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3BvcnRhbCcpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUucHJvY2Vzc1BvcnRhbENvbnRhaW5lcihwYXJlbnQpO1xuICAgICAgICAgICAgaWYgKHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wb3J0YWxDb250YWluZXJdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXSwgbmV3Q2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgYm90aCBhcmUgdGhyZWUgaW5zdGFuY2VzLCBzdHJhaWdodGZvcndhcmQgY2FzZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScgJiZcbiAgICAgICAgICAgIG5ld0NoaWxkLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnXG4gICAgICAgICkge1xuICAgICAgICAgICAgYXR0YWNoVGhyZWVDaGlsZChwYXJlbnQsIG5ld0NoaWxkKTtcbiAgICAgICAgICAgIC8vIGhlcmUsIHdlIGhhbmRsZSB0aGUgc3BlY2lhbCBjYXNlIG9mIGlmIHRoZSBwYXJlbnQgaGFzIGEgY29tcG91bmRQYXJlbnQsIHdoaWNoIG1lYW5zIHRoaXMgY2hpbGQgaXMgcGFydCBvZiBhIGNvbXBvdW5kIHBhcmVudCB0ZW1wbGF0ZVxuICAgICAgICAgICAgaWYgKCFuZXdDaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZF0pIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGNsb3Nlc3RHcmFuZHBhcmVudFdpdGhDb21wb3VuZCA9IHRoaXMuc3RvcmUuZ2V0Q2xvc2VzdFBhcmVudFdpdGhDb21wb3VuZChwYXJlbnQpO1xuICAgICAgICAgICAgaWYgKCFjbG9zZXN0R3JhbmRwYXJlbnRXaXRoQ29tcG91bmQpIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQoY2xvc2VzdEdyYW5kcGFyZW50V2l0aENvbXBvdW5kLCBuZXdDaGlsZCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiBvbmx5IHRoZSBwYXJlbnQgaXMgdGhlIFRIUkVFIGluc3RhbmNlXG4gICAgICAgIGlmIChwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcbiAgICAgICAgICAgIGlmIChuZXdDaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jaGlsZHJlbl0ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCByZW5kZXJDaGlsZCBvZiBuZXdDaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jaGlsZHJlbl0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChwYXJlbnQsIHJlbmRlckNoaWxkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiBwYXJlbnQgaXMgYSBjb21wb3VuZFxuICAgICAgICBpZiAocGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnY29tcG91bmQnKSB7XG4gICAgICAgICAgICAvLyBpZiBjb21wb3VuZCBkb2Vzbid0IGhhdmUgYSBUSFJFRSBpbnN0YW5jZSBzZXQgeWV0XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIXBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSAmJlxuICAgICAgICAgICAgICAgIG5ld0NoaWxkLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBpZiBjaGlsZCBpcyBpbmRlZWQgYW4gbmd0Q29tcG91bmRcbiAgICAgICAgICAgICAgICBpZiAobmV3Q2hpbGQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUuc2V0Q29tcG91bmQocGFyZW50LCBuZXdDaGlsZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgbm90LCB3ZSB0cmFjayB0aGUgcGFyZW50ICh0aGF0IGlzIHN1cHBvc2VkbHkgdGhlIGNvbXBvdW5kIGNvbXBvbmVudCkgb24gdGhpcyB0aHJlZSBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICBpZiAoIW5ld0NoaWxkLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kUGFyZW50XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2hpbGQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRQYXJlbnRdID0gcGFyZW50O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyByZXNldCB0aGUgY29tcG91bmQgaWYgaXQncyBjaGFuZ2VkXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgcGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdICYmXG4gICAgICAgICAgICAgICAgbmV3Q2hpbGQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScgJiZcbiAgICAgICAgICAgICAgICBuZXdDaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZF0gJiZcbiAgICAgICAgICAgICAgICBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0gIT09IG5ld0NoaWxkXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLnNldENvbXBvdW5kKHBhcmVudCwgbmV3Q2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2hvdWxkRmluZEdyYW5kcGFyZW50SW5zdGFuY2UgPVxuICAgICAgICAgICAgLy8gaWYgY2hpbGQgaXMgdGhyZWUgYnV0IGhhdmVuJ3QgYmVlbiBhdHRhY2hlZCB0byBhIHBhcmVudCB5ZXRcbiAgICAgICAgICAgIChuZXdDaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJyAmJiAhZ2V0TG9jYWxTdGF0ZShuZXdDaGlsZCkucGFyZW50KSB8fFxuICAgICAgICAgICAgLy8gb3IgYm90aCBwYXJlbnQgYW5kIGNoaWxkIGFyZSBET00gZWxlbWVudHNcbiAgICAgICAgICAgIChwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdkb20nICYmXG4gICAgICAgICAgICAgICAgbmV3Q2hpbGQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdkb20nKTtcblxuICAgICAgICBpZiAoc2hvdWxkRmluZEdyYW5kcGFyZW50SW5zdGFuY2UpIHtcbiAgICAgICAgICAgIC8vIHdlJ2xsIHRyeSB0byBnZXQgdGhlIGdyYW5kcGFyZW50IGluc3RhbmNlIGhlcmUgc28gdGhhdCB3ZSBjYW4gcnVuIGFwcGVuZENoaWxkIHdpdGggYm90aCBpbnN0YW5jZXNcbiAgICAgICAgICAgIGNvbnN0IGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlID0gdGhpcy5zdG9yZS5nZXRDbG9zZXN0UGFyZW50V2l0aEluc3RhbmNlKHBhcmVudCk7XG4gICAgICAgICAgICBpZiAoY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlLCBuZXdDaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbnNlcnRCZWZvcmUoXG4gICAgICAgIHBhcmVudDogTmd0UmVuZGVyZXJOb2RlLFxuICAgICAgICBuZXdDaGlsZDogTmd0UmVuZGVyZXJOb2RlXG4gICAgICAgIC8vIFRPRE8gIHdlIG1pZ2h0IG5lZWQgdGhlc2U/XG4gICAgICAgIC8vIHJlZkNoaWxkOiBOZ3RSZW5kZXJlck5vZGVcbiAgICAgICAgLy8gaXNNb3ZlPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAgICk6IHZvaWQge1xuICAgICAgICBpZiAoIXBhcmVudC5fX25ndF9yZW5kZXJlcl9fIHx8IHBhcmVudCA9PT0gbmV3Q2hpbGQpIHJldHVybjtcbiAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChwYXJlbnQsIG5ld0NoaWxkKTtcbiAgICB9XG5cbiAgICByZW1vdmVDaGlsZChwYXJlbnQ6IE5ndFJlbmRlcmVyTm9kZSwgb2xkQ2hpbGQ6IE5ndFJlbmRlcmVyTm9kZSwgaXNIb3N0RWxlbWVudD86IGJvb2xlYW4gfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgcGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnICYmXG4gICAgICAgICAgICBvbGRDaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJ1xuICAgICAgICApIHtcbiAgICAgICAgICAgIHJlbW92ZVRocmVlQ2hpbGQocGFyZW50LCBvbGRDaGlsZCwgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRlc3Ryb3kob2xkQ2hpbGQsIHBhcmVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21wb3VuZCcgJiZcbiAgICAgICAgICAgIHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZChwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XSwgb2xkQ2hpbGQsIGlzSG9zdEVsZW1lbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJykge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5kZXN0cm95KG9sZENoaWxkLCBwYXJlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UgPSB0aGlzLnN0b3JlLmdldENsb3Nlc3RQYXJlbnRXaXRoSW5zdGFuY2UocGFyZW50KTtcbiAgICAgICAgaWYgKGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlLCBvbGRDaGlsZCwgaXNIb3N0RWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdG9yZS5kZXN0cm95KG9sZENoaWxkLCBjbG9zZXN0R3JhbmRwYXJlbnRJbnN0YW5jZSBhcyBOZ3RSZW5kZXJlck5vZGUpO1xuICAgIH1cblxuICAgIHBhcmVudE5vZGUobm9kZTogTmd0UmVuZGVyZXJOb2RlKSB7XG4gICAgICAgIGlmIChub2RlLl9fbmd0X3JlbmRlcmVyX18/LltOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XSkgcmV0dXJuIG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUucGFyZW50Tm9kZShub2RlKTtcbiAgICB9XG5cbiAgICBzZXRBdHRyaWJ1dGUoZWw6IE5ndFJlbmRlcmVyTm9kZSwgbmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBuYW1lc3BhY2U/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgICAgIGlmIChlbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbXBvdW5kJykge1xuICAgICAgICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSB0aGUgY29tcG91bmQgaW5zdGFuY2UgeWV0XG4gICAgICAgICAgICBlbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5hdHRyaWJ1dGVzXVtuYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgaWYgKCFlbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUucXVldWVPcGVyYXRpb24oZWwsIFsnb3AnLCAoKSA9PiB0aGlzLnNldEF0dHJpYnV0ZShlbCwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZSldKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKGVsLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdLCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJykge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5hcHBseUF0dHJpYnV0ZShlbCwgbmFtZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0UHJvcGVydHkoZWw6IE5ndFJlbmRlcmVyTm9kZSwgbmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChlbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbXBvdW5kJykge1xuICAgICAgICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSB0aGUgY29tcG91bmQgaW5zdGFuY2UgeWV0XG4gICAgICAgICAgICBlbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wcm9wZXJ0aWVzXVtuYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgaWYgKCFlbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUucXVldWVPcGVyYXRpb24oZWwsIFsnb3AnLCAoKSA9PiB0aGlzLnNldFByb3BlcnR5KGVsLCBuYW1lLCB2YWx1ZSldKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChlbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZF0pIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAgICAgICAgICBlbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZF0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZWwuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0uX19uZ3RfcmVuZGVyZXJfX1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV06IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5KGVsLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdLCBuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZWwuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuYXBwbHlQcm9wZXJ0eShlbCwgbmFtZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbGlzdGVuKHRhcmdldDogTmd0UmVuZGVyZXJOb2RlLCBldmVudE5hbWU6IHN0cmluZywgY2FsbGJhY2s6IChldmVudDogYW55KSA9PiBib29sZWFuIHwgdm9pZCk6ICgpID0+IHZvaWQge1xuICAgICAgICBjb25zdCB0YXJnZXRDZHIgPSB0YXJnZXQuX19uZ3RfcmVuZGVyZXJfXz8uW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RvckZhY3RvcnldPy4oKS5nZXQoXG4gICAgICAgICAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgICAgIG51bGxcbiAgICAgICAgKTtcbiAgICAgICAgLy8gaWYgdGFyZ2V0IGlzIERPTSBub2RlLCB0aGVuIHdlIHBhc3MgdGhhdCB0byBkZWxlZ2F0ZSBSZW5kZXJlclxuICAgICAgICBpZiAodGhpcy5zdG9yZS5pc0RPTSh0YXJnZXQpKSB7XG4gICAgICAgICAgICBjb25zdCBjYWxsYmFja1dpdGhDZHIgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY2FsbGJhY2soZXZlbnQpO1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXRDZHIpIHRhcmdldENkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5yb290Q2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHRhcmdldCwgZXZlbnROYW1lLCBjYWxsYmFja1dpdGhDZHIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGFyZ2V0Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnIHx8XG4gICAgICAgICAgICAodGFyZ2V0Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnY29tcG91bmQnICYmXG4gICAgICAgICAgICAgICAgdGFyZ2V0Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gdGFyZ2V0Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdIHx8IHRhcmdldDtcbiAgICAgICAgICAgIGNvbnN0IHByaW9yaXR5ID0gZ2V0TG9jYWxTdGF0ZSh0YXJnZXQpLnByaW9yaXR5O1xuICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3NUaHJlZUV2ZW50KGluc3RhbmNlLCBwcmlvcml0eSB8fCAwLCBldmVudE5hbWUsIGNhbGxiYWNrLCB0aGlzLnN0b3JlLnJvb3RDZHIsIHRhcmdldENkciEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGFyZ2V0Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnY29tcG91bmQnICYmXG4gICAgICAgICAgICAhdGFyZ2V0Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5xdWV1ZU9wZXJhdGlvbih0YXJnZXQsIFtcbiAgICAgICAgICAgICAgICAnb3AnLFxuICAgICAgICAgICAgICAgICgpID0+IHRoaXMuc3RvcmUucXVldWVPcGVyYXRpb24odGFyZ2V0LCBbJ2NsZWFuVXAnLCB0aGlzLmxpc3Rlbih0YXJnZXQsIGV2ZW50TmFtZSwgY2FsbGJhY2spXSksXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKCkgPT4ge307XG4gICAgfVxuXG4gICAgZ2V0IGRhdGEoKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLmRhdGE7XG4gICAgfVxuICAgIGNyZWF0ZVRleHQgPSB0aGlzLmRlbGVnYXRlLmNyZWF0ZVRleHQuYmluZCh0aGlzLmRlbGVnYXRlKTtcbiAgICBkZXN0cm95ID0gdGhpcy5kZWxlZ2F0ZS5kZXN0cm95LmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG4gICAgZGVzdHJveU5vZGU6ICgobm9kZTogYW55KSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICAgIHNlbGVjdFJvb3RFbGVtZW50ID0gdGhpcy5kZWxlZ2F0ZS5zZWxlY3RSb290RWxlbWVudC5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuICAgIG5leHRTaWJsaW5nID0gdGhpcy5kZWxlZ2F0ZS5uZXh0U2libGluZy5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuICAgIHJlbW92ZUF0dHJpYnV0ZSA9IHRoaXMuZGVsZWdhdGUucmVtb3ZlQXR0cmlidXRlLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG4gICAgYWRkQ2xhc3MgPSB0aGlzLmRlbGVnYXRlLmFkZENsYXNzLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG4gICAgcmVtb3ZlQ2xhc3MgPSB0aGlzLmRlbGVnYXRlLnJlbW92ZUNsYXNzLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG4gICAgc2V0U3R5bGUgPSB0aGlzLmRlbGVnYXRlLnNldFN0eWxlLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG4gICAgcmVtb3ZlU3R5bGUgPSB0aGlzLmRlbGVnYXRlLnJlbW92ZVN0eWxlLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG4gICAgc2V0VmFsdWUgPSB0aGlzLmRlbGVnYXRlLnNldFZhbHVlLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG59XG4iXX0=
344
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUvc3JjL2xpYi9yZW5kZXJlci9yZW5kZXJlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUNILGlCQUFpQixFQUNqQixZQUFZLEVBQ1osTUFBTSxFQUNOLFVBQVUsRUFFVixnQkFBZ0IsR0FFbkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTdDLE9BQU8sRUFBbUIsZ0JBQWdCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxTQUFTLENBQUM7O0FBR2hILE1BQU0sT0FBTyxrQkFBa0I7SUFEL0I7UUFFcUIsNEJBQXVCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdkUsUUFBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2hDLFVBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekIsY0FBUyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNsQyxxQkFBZ0IsR0FBRyxNQUFNLENBQUMscUJBQXFC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RSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUU7Z0JBQzlCLElBQUk7Z0JBQ0osR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO2FBQ2pHLENBQUMsQ0FBQztTQUNOO1FBQ0QsT0FBTyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVELElBQUksSUFBSTtRQUNKLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFDOUIsQ0FBQztDQVlKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBnZXREZWJ1Z05vZGUsXG4gICAgaW5qZWN0LFxuICAgIEluamVjdGFibGUsXG4gICAgUmVuZGVyZXIyLFxuICAgIFJlbmRlcmVyRmFjdG9yeTIsXG4gICAgUmVuZGVyZXJUeXBlMixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR1RfQ0FUQUxPR1VFIH0gZnJvbSAnLi4vZGkvY2F0YWxvZ3VlJztcbmltcG9ydCB7IE5ndFN0b3JlIH0gZnJvbSAnLi4vc3RvcmVzL3N0b3JlJztcbmltcG9ydCB7IE5ndEFueVJlY29yZCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGdldExvY2FsU3RhdGUsIHByZXBhcmUgfSBmcm9tICcuLi91dGlscy9pbnN0YW5jZSc7XG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uL3V0aWxzL2lzJztcbmltcG9ydCB7IE5HVF9DT01QT1VORF9QUkVGSVhFUyB9IGZyb20gJy4vZGknO1xuaW1wb3J0IHsgTmd0UmVuZGVyZXJDbGFzc0lkIH0gZnJvbSAnLi9lbnVtcyc7XG5pbXBvcnQgeyBOZ3RSZW5kZXJlck5vZGUsIE5ndFJlbmRlcmVyU3RvcmUgfSBmcm9tICcuL3N0YXRlJztcbmltcG9ydCB7IGF0dGFjaFRocmVlQ2hpbGQsIGtlYmFiVG9QYXNjYWwsIHByb2Nlc3NUaHJlZUV2ZW50LCByZW1vdmVUaHJlZUNoaWxkLCBTUEVDSUFMX0RPTV9UQUcgfSBmcm9tICcuL3V0aWxzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5ndFJlbmRlcmVyRmFjdG9yeSBpbXBsZW1lbnRzIFJlbmRlcmVyRmFjdG9yeTIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVsZWdhdGVSZW5kZXJlckZhY3RvcnkgPSBpbmplY3QoUmVuZGVyZXJGYWN0b3J5MiwgeyBza2lwU2VsZjogdHJ1ZSB9KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBzdG9yZSA9IGluamVjdChOZ3RTdG9yZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXRhbG9ndWUgPSBpbmplY3QoTkdUX0NBVEFMT0dVRSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjb21wb3VuZFByZWZpeGVzID0gaW5qZWN0KE5HVF9DT01QT1VORF9QUkVGSVhFUyk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG5cbiAgICBwcml2YXRlIHJlbmRlcmVyTWFwID0gbmV3IE1hcDxzdHJpbmcsIFJlbmRlcmVyMj4oKTtcbiAgICBwcml2YXRlIHBvcnRhbHM6IE5ndFJlbmRlcmVyTm9kZVtdID0gW107XG5cbiAgICBjcmVhdGVSZW5kZXJlcihob3N0RWxlbWVudDogYW55LCB0eXBlOiBSZW5kZXJlclR5cGUyIHwgbnVsbCk6IFJlbmRlcmVyMiB7XG4gICAgICAgIGNvbnN0IGRlbGVnYXRlUmVuZGVyZXIgPSB0aGlzLmRlbGVnYXRlUmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKGhvc3RFbGVtZW50LCB0eXBlKTtcbiAgICAgICAgaWYgKCF0eXBlKSByZXR1cm4gZGVsZWdhdGVSZW5kZXJlcjtcblxuICAgICAgICBsZXQgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyTWFwLmdldCh0eXBlLmlkKTtcbiAgICAgICAgaWYgKHJlbmRlcmVyKSByZXR1cm4gcmVuZGVyZXI7XG5cbiAgICAgICAgaWYgKCFob3N0RWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3Qgc3RvcmUgPSBuZXcgTmd0UmVuZGVyZXJTdG9yZSh7XG4gICAgICAgICAgICAgICAgc3RvcmU6IHRoaXMuc3RvcmUsXG4gICAgICAgICAgICAgICAgY2RyOiB0aGlzLmNkcixcbiAgICAgICAgICAgICAgICBwb3J0YWxzOiB0aGlzLnBvcnRhbHMsXG4gICAgICAgICAgICAgICAgY29tcG91bmRQcmVmaXhlczogdGhpcy5jb21wb3VuZFByZWZpeGVzLFxuICAgICAgICAgICAgICAgIGRvY3VtZW50OiB0aGlzLmRvY3VtZW50LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZW5kZXJlciA9IG5ldyBOZ3RSZW5kZXJlcihkZWxlZ2F0ZVJlbmRlcmVyLCBzdG9yZSwgdGhpcy5jYXRhbG9ndWUsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlck1hcC5zZXQodHlwZS5pZCwgcmVuZGVyZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFyZW5kZXJlcikge1xuICAgICAgICAgICAgY29uc3Qgc3RvcmUgPSBuZXcgTmd0UmVuZGVyZXJTdG9yZSh7XG4gICAgICAgICAgICAgICAgc3RvcmU6IHRoaXMuc3RvcmUsXG4gICAgICAgICAgICAgICAgY2RyOiB0aGlzLmNkcixcbiAgICAgICAgICAgICAgICBwb3J0YWxzOiB0aGlzLnBvcnRhbHMsXG4gICAgICAgICAgICAgICAgY29tcG91bmRQcmVmaXhlczogdGhpcy5jb21wb3VuZFByZWZpeGVzLFxuICAgICAgICAgICAgICAgIGRvY3VtZW50OiB0aGlzLmRvY3VtZW50LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZW5kZXJlciA9IG5ldyBOZ3RSZW5kZXJlcihkZWxlZ2F0ZVJlbmRlcmVyLCBzdG9yZSwgdGhpcy5jYXRhbG9ndWUpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlck1hcC5zZXQodHlwZS5pZCwgcmVuZGVyZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlbmRlcmVyO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5ndFJlbmRlcmVyIGltcGxlbWVudHMgUmVuZGVyZXIyIHtcbiAgICBwcml2YXRlIGZpcnN0ID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkZWxlZ2F0ZTogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHN0b3JlOiBOZ3RSZW5kZXJlclN0b3JlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNhdGFsb2d1ZTogUmVjb3JkPHN0cmluZywgbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55PixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSByb290ID0gZmFsc2VcbiAgICApIHt9XG5cbiAgICBjcmVhdGVFbGVtZW50KG5hbWU6IHN0cmluZywgbmFtZXNwYWNlPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVFbGVtZW50KG5hbWUsIG5hbWVzcGFjZSk7XG5cbiAgICAgICAgLy8gb24gZmlyc3QgcGFzcywgd2UgcmV0dXJuIHRoZSBSb290IFNjZW5lIGFzIHRoZSByb290IG5vZGVcbiAgICAgICAgaWYgKHRoaXMucm9vdCAmJiAhdGhpcy5maXJzdCkge1xuICAgICAgICAgICAgdGhpcy5maXJzdCA9IHRydWU7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5zdG9yZS5jcmVhdGVOb2RlKCd0aHJlZScsIHRoaXMuc3RvcmUucm9vdFNjZW5lKTtcbiAgICAgICAgICAgIG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0b3JGYWN0b3J5XSA9ICgpID0+IGdldERlYnVnTm9kZShlbGVtZW50KSEuaW5qZWN0b3I7XG4gICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGhhbmRsZSBjb21wb3VuZFxuICAgICAgICBpZiAodGhpcy5zdG9yZS5pc0NvbXBvdW5kKG5hbWUpKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wb3VuZCA9IHRoaXMuc3RvcmUuY3JlYXRlTm9kZSgnY29tcG91bmQnLCBlbGVtZW50KTtcbiAgICAgICAgICAgIGNvbXBvdW5kLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdG9yRmFjdG9yeV0gPSAoKSA9PiBnZXREZWJ1Z05vZGUoZWxlbWVudCkhLmluamVjdG9yO1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBvdW5kO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaGFuZGxlIHBvcnRhbFxuICAgICAgICBpZiAobmFtZSA9PT0gU1BFQ0lBTF9ET01fVEFHLk5HVF9QT1JUQUwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0b3JlLmNyZWF0ZU5vZGUoJ3BvcnRhbCcsIGVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaGFuZGxlIHJhdyB2YWx1ZVxuICAgICAgICBpZiAobmFtZSA9PT0gU1BFQ0lBTF9ET01fVEFHLk5HVF9WQUxVRSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuY3JlYXRlTm9kZShcbiAgICAgICAgICAgICAgICAndGhyZWUnLFxuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oeyBfX25ndF9yZW5kZXJlcl9fOiB7IHJhd1ZhbHVlOiB1bmRlZmluZWQgfSB9LCB7IF9fbmd0X186IHsgaXNSYXc6IHRydWUgfSB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgaW5qZWN0ZWRBcmdzLCBzdG9yZSB9ID0gdGhpcy5zdG9yZS5nZXRDcmVhdGlvblN0YXRlKCk7XG5cbiAgICAgICAgLy8gaGFuZGxlIHByaW1pdGl2ZVxuICAgICAgICBpZiAobmFtZSA9PT0gU1BFQ0lBTF9ET01fVEFHLk5HVF9QUklNSVRJVkUpIHtcbiAgICAgICAgICAgIGlmICghaW5qZWN0ZWRBcmdzWzBdKSB0aHJvdyBuZXcgRXJyb3IoYFtOR1RdIG5ndC1wcmltaXRpdmUgd2l0aG91dCBhcmdzIGlzIGludmFsaWRgKTtcbiAgICAgICAgICAgIGNvbnN0IG9iamVjdCA9IGluamVjdGVkQXJnc1swXTtcbiAgICAgICAgICAgIGxldCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShvYmplY3QpO1xuICAgICAgICAgICAgaWYgKCFPYmplY3Qua2V5cyhsb2NhbFN0YXRlKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBwcmVwYXJlKG9iamVjdCwgeyBzdG9yZSwgYXJnczogaW5qZWN0ZWRBcmdzLCBwcmltaXRpdmU6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUob2JqZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghbG9jYWxTdGF0ZS5zdG9yZSkgbG9jYWxTdGF0ZS5zdG9yZSA9IHN0b3JlO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuY3JlYXRlTm9kZSgndGhyZWUnLCBvYmplY3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGhyZWVUYWcgPSBuYW1lLnN0YXJ0c1dpdGgoJ25ndCcpID8gbmFtZS5zbGljZSg0KSA6IG5hbWU7XG4gICAgICAgIGNvbnN0IHRocmVlTmFtZSA9IGtlYmFiVG9QYXNjYWwodGhyZWVUYWcpO1xuICAgICAgICBjb25zdCB0aHJlZVRhcmdldCA9IHRoaXMuY2F0YWxvZ3VlW3RocmVlTmFtZV07XG4gICAgICAgIC8vIHdlIGhhdmUgdGhlIFRIUkVFIGNvbnN0cnVjdG9yIGhlcmUsIGhhbmRsZSBpdFxuICAgICAgICBpZiAodGhyZWVUYXJnZXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gcHJlcGFyZShuZXcgdGhyZWVUYXJnZXQoLi4uaW5qZWN0ZWRBcmdzKSwgeyBzdG9yZSwgYXJnczogaW5qZWN0ZWRBcmdzIH0pO1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RvcmUuY3JlYXRlTm9kZSgndGhyZWUnLCBpbnN0YW5jZSk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShpbnN0YW5jZSk7XG4gICAgICAgICAgICBpZiAoaXMuZ2VvbWV0cnkoaW5zdGFuY2UpKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxTdGF0ZS5hdHRhY2ggPSBbJ2dlb21ldHJ5J107XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzLm1hdGVyaWFsKGluc3RhbmNlKSkge1xuICAgICAgICAgICAgICAgIGxvY2FsU3RhdGUuYXR0YWNoID0gWydtYXRlcmlhbCddO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkb21Ob2RlID0gdGhpcy5zdG9yZS5jcmVhdGVOb2RlKCdkb20nLCBlbGVtZW50KTtcbiAgICAgICAgZG9tTm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RvckZhY3RvcnldID0gKCkgPT4gZ2V0RGVidWdOb2RlKGVsZW1lbnQpIS5pbmplY3RvcjtcbiAgICAgICAgcmV0dXJuIGRvbU5vZGU7XG4gICAgfVxuXG4gICAgY3JlYXRlQ29tbWVudCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGNvbW1lbnQgPSB0aGlzLmRlbGVnYXRlLmNyZWF0ZUNvbW1lbnQodmFsdWUpO1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5jcmVhdGVOb2RlKCdjb21tZW50JywgY29tbWVudCk7XG4gICAgfVxuXG4gICAgYXBwZW5kQ2hpbGQocGFyZW50OiBOZ3RSZW5kZXJlck5vZGUsIG5ld0NoaWxkOiBOZ3RSZW5kZXJlck5vZGUpOiB2b2lkIHtcbiAgICAgICAgLy8gVE9ETzoganVzdCBpZ25vcmUgdGV4dCBub2RlIGZvciBub3dcbiAgICAgICAgaWYgKG5ld0NoaWxkIGluc3RhbmNlb2YgVGV4dCkgcmV0dXJuO1xuXG4gICAgICAgIGlmIChuZXdDaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbW1lbnQnKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLnNldFBhcmVudChuZXdDaGlsZCwgcGFyZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RvcmUuc2V0UGFyZW50KG5ld0NoaWxkLCBwYXJlbnQpO1xuICAgICAgICB0aGlzLnN0b3JlLmFkZENoaWxkKHBhcmVudCwgbmV3Q2hpbGQpO1xuXG4gICAgICAgIC8vIGlmIG5ldyBjaGlsZCBpcyBhIHBvcnRhbFxuICAgICAgICBpZiAobmV3Q2hpbGQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdwb3J0YWwnKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLnByb2Nlc3NQb3J0YWxDb250YWluZXIobmV3Q2hpbGQpO1xuICAgICAgICAgICAgaWYgKG5ld0NoaWxkLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKHBhcmVudCwgbmV3Q2hpbGQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiBwYXJlbnQgaXMgYSBwb3J0YWxcbiAgICAgICAgaWYgKHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3BvcnRhbCcpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUucHJvY2Vzc1BvcnRhbENvbnRhaW5lcihwYXJlbnQpO1xuICAgICAgICAgICAgaWYgKHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wb3J0YWxDb250YWluZXJdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXSwgbmV3Q2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgYm90aCBhcmUgdGhyZWUgaW5zdGFuY2VzLCBzdHJhaWdodGZvcndhcmQgY2FzZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScgJiZcbiAgICAgICAgICAgIG5ld0NoaWxkLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnXG4gICAgICAgICkge1xuICAgICAgICAgICAgYXR0YWNoVGhyZWVDaGlsZChwYXJlbnQsIG5ld0NoaWxkKTtcbiAgICAgICAgICAgIC8vIGhlcmUsIHdlIGhhbmRsZSB0aGUgc3BlY2lhbCBjYXNlIG9mIGlmIHRoZSBwYXJlbnQgaGFzIGEgY29tcG91bmRQYXJlbnQsIHdoaWNoIG1lYW5zIHRoaXMgY2hpbGQgaXMgcGFydCBvZiBhIGNvbXBvdW5kIHBhcmVudCB0ZW1wbGF0ZVxuICAgICAgICAgICAgaWYgKCFuZXdDaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZF0pIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGNsb3Nlc3RHcmFuZHBhcmVudFdpdGhDb21wb3VuZCA9IHRoaXMuc3RvcmUuZ2V0Q2xvc2VzdFBhcmVudFdpdGhDb21wb3VuZChwYXJlbnQpO1xuICAgICAgICAgICAgaWYgKCFjbG9zZXN0R3JhbmRwYXJlbnRXaXRoQ29tcG91bmQpIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQoY2xvc2VzdEdyYW5kcGFyZW50V2l0aENvbXBvdW5kLCBuZXdDaGlsZCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiBvbmx5IHRoZSBwYXJlbnQgaXMgdGhlIFRIUkVFIGluc3RhbmNlXG4gICAgICAgIGlmIChwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcbiAgICAgICAgICAgIGlmIChuZXdDaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jaGlsZHJlbl0ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCByZW5kZXJDaGlsZCBvZiBuZXdDaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jaGlsZHJlbl0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChwYXJlbnQsIHJlbmRlckNoaWxkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiBwYXJlbnQgaXMgYSBjb21wb3VuZFxuICAgICAgICBpZiAocGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnY29tcG91bmQnKSB7XG4gICAgICAgICAgICAvLyBpZiBjb21wb3VuZCBkb2Vzbid0IGhhdmUgYSBUSFJFRSBpbnN0YW5jZSBzZXQgeWV0XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIXBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSAmJlxuICAgICAgICAgICAgICAgIG5ld0NoaWxkLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBpZiBjaGlsZCBpcyBpbmRlZWQgYW4gbmd0Q29tcG91bmRcbiAgICAgICAgICAgICAgICBpZiAobmV3Q2hpbGQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUuc2V0Q29tcG91bmQocGFyZW50LCBuZXdDaGlsZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgbm90LCB3ZSB0cmFjayB0aGUgcGFyZW50ICh0aGF0IGlzIHN1cHBvc2VkbHkgdGhlIGNvbXBvdW5kIGNvbXBvbmVudCkgb24gdGhpcyB0aHJlZSBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICBpZiAoIW5ld0NoaWxkLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kUGFyZW50XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2hpbGQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRQYXJlbnRdID0gcGFyZW50O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyByZXNldCB0aGUgY29tcG91bmQgaWYgaXQncyBjaGFuZ2VkXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgcGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdICYmXG4gICAgICAgICAgICAgICAgbmV3Q2hpbGQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScgJiZcbiAgICAgICAgICAgICAgICBuZXdDaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZF0gJiZcbiAgICAgICAgICAgICAgICBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0gIT09IG5ld0NoaWxkXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLnNldENvbXBvdW5kKHBhcmVudCwgbmV3Q2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2hvdWxkRmluZEdyYW5kcGFyZW50SW5zdGFuY2UgPVxuICAgICAgICAgICAgLy8gaWYgY2hpbGQgaXMgdGhyZWUgYnV0IGhhdmVuJ3QgYmVlbiBhdHRhY2hlZCB0byBhIHBhcmVudCB5ZXRcbiAgICAgICAgICAgIChuZXdDaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJyAmJiAhZ2V0TG9jYWxTdGF0ZShuZXdDaGlsZCkucGFyZW50KSB8fFxuICAgICAgICAgICAgLy8gb3IgYm90aCBwYXJlbnQgYW5kIGNoaWxkIGFyZSBET00gZWxlbWVudHNcbiAgICAgICAgICAgIChwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdkb20nICYmXG4gICAgICAgICAgICAgICAgbmV3Q2hpbGQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdkb20nKTtcblxuICAgICAgICBpZiAoc2hvdWxkRmluZEdyYW5kcGFyZW50SW5zdGFuY2UpIHtcbiAgICAgICAgICAgIC8vIHdlJ2xsIHRyeSB0byBnZXQgdGhlIGdyYW5kcGFyZW50IGluc3RhbmNlIGhlcmUgc28gdGhhdCB3ZSBjYW4gcnVuIGFwcGVuZENoaWxkIHdpdGggYm90aCBpbnN0YW5jZXNcbiAgICAgICAgICAgIGNvbnN0IGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlID0gdGhpcy5zdG9yZS5nZXRDbG9zZXN0UGFyZW50V2l0aEluc3RhbmNlKHBhcmVudCk7XG4gICAgICAgICAgICBpZiAoY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlLCBuZXdDaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbnNlcnRCZWZvcmUoXG4gICAgICAgIHBhcmVudDogTmd0UmVuZGVyZXJOb2RlLFxuICAgICAgICBuZXdDaGlsZDogTmd0UmVuZGVyZXJOb2RlXG4gICAgICAgIC8vIFRPRE8gIHdlIG1pZ2h0IG5lZWQgdGhlc2U/XG4gICAgICAgIC8vIHJlZkNoaWxkOiBOZ3RSZW5kZXJlck5vZGVcbiAgICAgICAgLy8gaXNNb3ZlPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAgICk6IHZvaWQge1xuICAgICAgICBpZiAoIXBhcmVudC5fX25ndF9yZW5kZXJlcl9fIHx8IHBhcmVudCA9PT0gbmV3Q2hpbGQpIHJldHVybjtcbiAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChwYXJlbnQsIG5ld0NoaWxkKTtcbiAgICB9XG5cbiAgICByZW1vdmVDaGlsZChwYXJlbnQ6IE5ndFJlbmRlcmVyTm9kZSwgb2xkQ2hpbGQ6IE5ndFJlbmRlcmVyTm9kZSwgaXNIb3N0RWxlbWVudD86IGJvb2xlYW4gfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgcGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnICYmXG4gICAgICAgICAgICBvbGRDaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJ1xuICAgICAgICApIHtcbiAgICAgICAgICAgIHJlbW92ZVRocmVlQ2hpbGQocGFyZW50LCBvbGRDaGlsZCwgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRlc3Ryb3kob2xkQ2hpbGQsIHBhcmVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21wb3VuZCcgJiZcbiAgICAgICAgICAgIHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZChwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XSwgb2xkQ2hpbGQsIGlzSG9zdEVsZW1lbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJykge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5kZXN0cm95KG9sZENoaWxkLCBwYXJlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UgPSB0aGlzLnN0b3JlLmdldENsb3Nlc3RQYXJlbnRXaXRoSW5zdGFuY2UocGFyZW50KTtcbiAgICAgICAgaWYgKGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlLCBvbGRDaGlsZCwgaXNIb3N0RWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdG9yZS5kZXN0cm95KG9sZENoaWxkLCBjbG9zZXN0R3JhbmRwYXJlbnRJbnN0YW5jZSBhcyBOZ3RSZW5kZXJlck5vZGUpO1xuICAgIH1cblxuICAgIHBhcmVudE5vZGUobm9kZTogTmd0UmVuZGVyZXJOb2RlKSB7XG4gICAgICAgIGlmIChub2RlLl9fbmd0X3JlbmRlcmVyX18/LltOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XSkgcmV0dXJuIG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUucGFyZW50Tm9kZShub2RlKTtcbiAgICB9XG5cbiAgICBzZXRBdHRyaWJ1dGUoZWw6IE5ndFJlbmRlcmVyTm9kZSwgbmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBuYW1lc3BhY2U/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgICAgIGlmIChlbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbXBvdW5kJykge1xuICAgICAgICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSB0aGUgY29tcG91bmQgaW5zdGFuY2UgeWV0XG4gICAgICAgICAgICBlbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5hdHRyaWJ1dGVzXVtuYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgaWYgKCFlbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUucXVldWVPcGVyYXRpb24oZWwsIFsnb3AnLCAoKSA9PiB0aGlzLnNldEF0dHJpYnV0ZShlbCwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZSldKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKGVsLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdLCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJykge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5hcHBseUF0dHJpYnV0ZShlbCwgbmFtZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0UHJvcGVydHkoZWw6IE5ndFJlbmRlcmVyTm9kZSwgbmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChlbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbXBvdW5kJykge1xuICAgICAgICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSB0aGUgY29tcG91bmQgaW5zdGFuY2UgeWV0XG4gICAgICAgICAgICBlbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wcm9wZXJ0aWVzXVtuYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgaWYgKCFlbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUucXVldWVPcGVyYXRpb24oZWwsIFsnb3AnLCAoKSA9PiB0aGlzLnNldFByb3BlcnR5KGVsLCBuYW1lLCB2YWx1ZSldKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChlbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZF0pIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAgICAgICAgICBlbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZF0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZWwuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0uX19uZ3RfcmVuZGVyZXJfX1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV06IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5KGVsLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdLCBuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZWwuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuYXBwbHlQcm9wZXJ0eShlbCwgbmFtZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbGlzdGVuKHRhcmdldDogTmd0UmVuZGVyZXJOb2RlLCBldmVudE5hbWU6IHN0cmluZywgY2FsbGJhY2s6IChldmVudDogYW55KSA9PiBib29sZWFuIHwgdm9pZCk6ICgpID0+IHZvaWQge1xuICAgICAgICBjb25zdCB0YXJnZXRDZHIgPSB0YXJnZXQuX19uZ3RfcmVuZGVyZXJfXz8uW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RvckZhY3RvcnldPy4oKS5nZXQoXG4gICAgICAgICAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgICAgIG51bGxcbiAgICAgICAgKTtcbiAgICAgICAgLy8gaWYgdGFyZ2V0IGlzIERPTSBub2RlLCB0aGVuIHdlIHBhc3MgdGhhdCB0byBkZWxlZ2F0ZSBSZW5kZXJlclxuICAgICAgICBjb25zdCBjYWxsYmFja1dpdGhDZHIgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjYWxsYmFjayhldmVudCk7XG4gICAgICAgICAgICBpZiAodGFyZ2V0Q2RyKSB0YXJnZXRDZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5yb290Q2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMuc3RvcmUuaXNET00odGFyZ2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHRhcmdldCwgZXZlbnROYW1lLCBjYWxsYmFja1dpdGhDZHIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIHdlIGtub3cgdGhhdCB0YXJnZXQgaXMgbm90IERPTSBub2RlXG4gICAgICAgIGlmICh0YXJnZXQgPT09IHRoaXMuc3RvcmUucm9vdFNjZW5lKSB7XG4gICAgICAgICAgICBsZXQgW2RvbVRhcmdldCwgZXZlbnRdID0gZXZlbnROYW1lLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICBpZiAoZXZlbnQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGV2ZW50ID0gZG9tVGFyZ2V0O1xuICAgICAgICAgICAgICAgIGRvbVRhcmdldCA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZXZlbnRUYXJnZXQgPVxuICAgICAgICAgICAgICAgIGRvbVRhcmdldCA9PT0gJ3dpbmRvdydcbiAgICAgICAgICAgICAgICAgICAgPyAodGFyZ2V0IGFzIE5ndEFueVJlY29yZClbJ293bmVyRG9jdW1lbnQnXVsnZGVmYXVsdFZpZXcnXVxuICAgICAgICAgICAgICAgICAgICA6ICh0YXJnZXQgYXMgTmd0QW55UmVjb3JkKVsnb3duZXJEb2N1bWVudCddO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKGV2ZW50VGFyZ2V0LCBldmVudCwgY2FsbGJhY2tXaXRoQ2RyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRhcmdldC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJyB8fFxuICAgICAgICAgICAgKHRhcmdldC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbXBvdW5kJyAmJlxuICAgICAgICAgICAgICAgIHRhcmdldC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IHRhcmdldC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSB8fCB0YXJnZXQ7XG4gICAgICAgICAgICBjb25zdCBwcmlvcml0eSA9IGdldExvY2FsU3RhdGUodGFyZ2V0KS5wcmlvcml0eTtcbiAgICAgICAgICAgIHJldHVybiBwcm9jZXNzVGhyZWVFdmVudChpbnN0YW5jZSwgcHJpb3JpdHkgfHwgMCwgZXZlbnROYW1lLCBjYWxsYmFjaywgdGhpcy5zdG9yZS5yb290Q2RyLCB0YXJnZXRDZHIhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRhcmdldC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbXBvdW5kJyAmJlxuICAgICAgICAgICAgIXRhcmdldC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUucXVldWVPcGVyYXRpb24odGFyZ2V0LCBbXG4gICAgICAgICAgICAgICAgJ29wJyxcbiAgICAgICAgICAgICAgICAoKSA9PiB0aGlzLnN0b3JlLnF1ZXVlT3BlcmF0aW9uKHRhcmdldCwgWydjbGVhblVwJywgdGhpcy5saXN0ZW4odGFyZ2V0LCBldmVudE5hbWUsIGNhbGxiYWNrKV0pLFxuICAgICAgICAgICAgXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgpID0+IHt9O1xuICAgIH1cblxuICAgIGdldCBkYXRhKCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5kYXRhO1xuICAgIH1cbiAgICBjcmVhdGVUZXh0ID0gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVUZXh0LmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG4gICAgZGVzdHJveSA9IHRoaXMuZGVsZWdhdGUuZGVzdHJveS5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuICAgIGRlc3Ryb3lOb2RlOiAoKG5vZGU6IGFueSkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgICBzZWxlY3RSb290RWxlbWVudCA9IHRoaXMuZGVsZWdhdGUuc2VsZWN0Um9vdEVsZW1lbnQuYmluZCh0aGlzLmRlbGVnYXRlKTtcbiAgICBuZXh0U2libGluZyA9IHRoaXMuZGVsZWdhdGUubmV4dFNpYmxpbmcuYmluZCh0aGlzLmRlbGVnYXRlKTtcbiAgICByZW1vdmVBdHRyaWJ1dGUgPSB0aGlzLmRlbGVnYXRlLnJlbW92ZUF0dHJpYnV0ZS5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuICAgIGFkZENsYXNzID0gdGhpcy5kZWxlZ2F0ZS5hZGRDbGFzcy5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuICAgIHJlbW92ZUNsYXNzID0gdGhpcy5kZWxlZ2F0ZS5yZW1vdmVDbGFzcy5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuICAgIHNldFN0eWxlID0gdGhpcy5kZWxlZ2F0ZS5zZXRTdHlsZS5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuICAgIHJlbW92ZVN0eWxlID0gdGhpcy5kZWxlZ2F0ZS5yZW1vdmVTdHlsZS5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuICAgIHNldFZhbHVlID0gdGhpcy5kZWxlZ2F0ZS5zZXRWYWx1ZS5iaW5kKHRoaXMuZGVsZWdhdGUpO1xufVxuIl19
@@ -191,8 +191,10 @@ export class NgtRendererStore {
191
191
  return this.root.compoundPrefixes.some((prefix) => name.startsWith(prefix));
192
192
  }
193
193
  isDOM(node) {
194
- return (node['__ngt_renderer__']?.[0 /* NgtRendererClassId.type */] !== 'compound' &&
195
- (node instanceof Element || node instanceof Document));
194
+ const rendererNode = node['__ngt_renderer__'];
195
+ if (rendererNode && rendererNode[0 /* NgtRendererClassId.type */] !== 'compound')
196
+ return true;
197
+ return node instanceof Element || node instanceof Document || node instanceof Window;
196
198
  }
197
199
  get rootScene() {
198
200
  return this.root.store.get('scene');
@@ -368,4 +370,4 @@ export class NgtRendererStore {
368
370
  return store || this.root.store;
369
371
  }
370
372
  }
371
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUvc3JjL2xpYi9yZW5kZXJlci9zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFlBQVksRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFakMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBaUNqRixNQUFNLE9BQU8sZ0JBQWdCO0lBR3pCLFlBQTZCLElBQTBCO1FBQTFCLFNBQUksR0FBSixJQUFJLENBQXNCO1FBRnRDLGFBQVEsR0FBRyxFQUE0QixDQUFDO0lBRUMsQ0FBQztJQUUzRCxVQUFVLENBQUMsSUFBK0MsRUFBRSxJQUFrQjtRQUMxRSxNQUFNLEtBQUssR0FBRztZQUNWLElBQUk7WUFDSixJQUFJO1lBQ0osRUFBRTtZQUNGLEtBQUs7WUFDTCxTQUFVO1lBQ1YsU0FBVTtZQUNWLFNBQVU7WUFDVixTQUFVO1lBQ1YsU0FBVTtZQUNWLFNBQVU7WUFDVixTQUFVO1lBQ1YsU0FBVTtZQUNWLFNBQVU7WUFDVixTQUFVO1NBQ08sQ0FBQztRQUV0QixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFdEUsdUVBQXVFO1FBQ3ZFLElBQUksQ0FBQyxZQUFZ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QyxLQUFLLENBQUM7SUFDckMsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIGdldERlYnVnTm9kZSwgSW5qZWN0b3IsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5ndEFyZ3MgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2FyZ3MnO1xuaW1wb3J0IHsgTmd0Q29tbW9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9jb21tb24nO1xuaW1wb3J0IHsgTmd0U3RvcmUgfSBmcm9tICcuLi9zdG9yZXMvc3RvcmUnO1xuaW1wb3J0IHR5cGUgeyBOZ3RBbnlSZWNvcmQgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBhcHBseVByb3BzIH0gZnJvbSAnLi4vdXRpbHMvYXBwbHktcHJvcHMnO1xuaW1wb3J0IHsgZ2V0TG9jYWxTdGF0ZSB9IGZyb20gJy4uL3V0aWxzL2luc3RhbmNlJztcbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vdXRpbHMvaXMnO1xuaW1wb3J0IHsgTmd0Q29tcG91bmRDbGFzc0lkLCBOZ3RRdWV1ZU9wQ2xhc3NJZCwgTmd0UmVuZGVyZXJDbGFzc0lkIH0gZnJvbSAnLi9lbnVtcyc7XG5pbXBvcnQgeyBhdHRhY2hUaHJlZUNoaWxkLCByZW1vdmVUaHJlZUNoaWxkLCBTUEVDSUFMX1BST1BFUlRJRVMgfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IHR5cGUgTmd0UmVuZGVyZXJSb290U3RhdGUgPSB7XG4gICAgc3RvcmU6IE5ndFN0b3JlO1xuICAgIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWY7XG4gICAgY29tcG91bmRQcmVmaXhlczogc3RyaW5nW107XG4gICAgZG9jdW1lbnQ6IERvY3VtZW50O1xuICAgIHBvcnRhbHM6IEFycmF5PE5ndFJlbmRlcmVyTm9kZT47XG59O1xuXG5leHBvcnQgdHlwZSBOZ3RRdWV1ZU9wID0gW3R5cGU6ICdvcCcgfCAnY2xlYW5VcCcsIG9wOiAoKSA9PiB2b2lkLCBkb25lPzogdHJ1ZV07XG5cbmV4cG9ydCB0eXBlIE5ndFJlbmRlcmVyU3RhdGUgPSBbXG4gICAgdHlwZTogJ3RocmVlJyB8ICdjb21wb3VuZCcgfCAncG9ydGFsJyB8ICdjb21tZW50JyB8ICdkb20nLFxuICAgIHBhcmVudDogTmd0UmVuZGVyZXJOb2RlIHwgbnVsbCxcbiAgICBjaGlsZHJlbjogTmd0UmVuZGVyZXJOb2RlW10sXG4gICAgZGVzdHJveWVkOiBib29sZWFuLFxuICAgIGNvbXBvdW5kOiBbYXBwbHlGaXJzdDogYm9vbGVhbiwgcHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT5dLFxuICAgIGNvbXBvdW5kUGFyZW50OiBOZ3RSZW5kZXJlck5vZGUsXG4gICAgY29tcG91bmRlZDogTmd0UmVuZGVyZXJOb2RlLFxuICAgIHF1ZXVlT3BzOiBTZXQ8Tmd0UXVldWVPcD4sXG4gICAgYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICBwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIHJhd1ZhbHVlOiBhbnksXG4gICAgcmVmOiBhbnksXG4gICAgcG9ydGFsQ29udGFpbmVyOiBOZ3RSZW5kZXJlck5vZGUsXG4gICAgaW5qZWN0b3JGYWN0b3J5OiAoKSA9PiBJbmplY3RvclxuXTtcblxuZXhwb3J0IHR5cGUgTmd0UmVuZGVyZXJOb2RlID0ge1xuICAgIF9fbmd0X3JlbmRlcmVyX186IE5ndFJlbmRlcmVyU3RhdGU7XG59O1xuXG5leHBvcnQgY2xhc3MgTmd0UmVuZGVyZXJTdG9yZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjb21tZW50cyA9IFtdIGFzIEFycmF5PE5ndFJlbmRlcmVyTm9kZT47XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHJvb3Q6IE5ndFJlbmRlcmVyUm9vdFN0YXRlKSB7fVxuXG4gICAgY3JlYXRlTm9kZSh0eXBlOiBOZ3RSZW5kZXJlclN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSwgbm9kZTogTmd0QW55UmVjb3JkKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gW1xuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBbXSxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgdW5kZWZpbmVkISxcbiAgICAgICAgICAgIHVuZGVmaW5lZCEsXG4gICAgICAgICAgICB1bmRlZmluZWQhLFxuICAgICAgICAgICAgdW5kZWZpbmVkISxcbiAgICAgICAgICAgIHVuZGVmaW5lZCEsXG4gICAgICAgICAgICB1bmRlZmluZWQhLFxuICAgICAgICAgICAgdW5kZWZpbmVkISxcbiAgICAgICAgICAgIHVuZGVmaW5lZCEsXG4gICAgICAgICAgICB1bmRlZmluZWQhLFxuICAgICAgICAgICAgdW5kZWZpbmVkISxcbiAgICAgICAgXSBhcyBOZ3RSZW5kZXJlclN0YXRlO1xuXG4gICAgICAgIGNvbnN0IHJlbmRlcmVyTm9kZSA9IE9iamVjdC5hc3NpZ24obm9kZSwgeyBfX25ndF9yZW5kZXJlcl9fOiBzdGF0ZSB9KTtcblxuICAgICAgICAvLyBhc3NpZ24gb3duZXJEb2N1bWVudCB0byBub2RlIHNvIHdlIGNhbiB1c2UgSG9zdExpc3RlbmVyIGluIENvbXBvbmVudFxuICAgICAgICBpZiAoIXJlbmRlcmVyTm9kZVsnb3duZXJEb2N1bWVudCddKSB7XG4gICAgICAgICAgICByZW5kZXJlck5vZGVbJ293bmVyRG9jdW1lbnQnXSA9IHRoaXMucm9vdC5kb2N1bWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGF0ZVtOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21tZW50Jykge1xuICAgICAgICAgICAgc3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdG9yRmFjdG9yeV0gPSAoKSA9PiBnZXREZWJ1Z05vZGUocmVuZGVyZXJOb2RlKSEuaW5qZWN0b3I7XG4gICAgICAgICAgICAvLyB3ZSBhdHRhY2ggYW4gYXJyb3cgZnVuY3Rpb24gdG8gdGhlIENvbW1lbnQgbm9kZVxuICAgICAgICAgICAgLy8gSW4gb3VyIGRpcmVjdGl2ZXMsIHdlIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gdGhlbiBzdGFydCB0cmFja2luZyB0aGUgUmVuZGVyZXJOb2RlXG4gICAgICAgICAgICByZW5kZXJlck5vZGVbJ19fbmd0X3JlbmRlcmVyX2FkZF9jb21tZW50X18nXSA9IChwb3J0YWxOb2RlPzogTmd0UmVuZGVyZXJOb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHBvcnRhbE5vZGUgJiYgcG9ydGFsTm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3BvcnRhbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3J0YWxzLnB1c2gocG9ydGFsTm9kZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21tZW50cy5wdXNoKHJlbmRlcmVyTm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiByZW5kZXJlck5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAncG9ydGFsJykge1xuICAgICAgICAgICAgc3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdG9yRmFjdG9yeV0gPSAoKSA9PiBnZXREZWJ1Z05vZGUocmVuZGVyZXJOb2RlKSEuaW5qZWN0b3I7XG4gICAgICAgICAgICByZXR1cm4gcmVuZGVyZXJOb2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbXBvdW5kJykge1xuICAgICAgICAgICAgc3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLnF1ZXVlT3BzXSA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC5hdHRyaWJ1dGVzXSA9IHt9O1xuICAgICAgICAgICAgc3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLnByb3BlcnRpZXNdID0ge307XG4gICAgICAgICAgICByZXR1cm4gcmVuZGVyZXJOb2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlbmRlcmVyTm9kZTtcbiAgICB9XG5cbiAgICBzZXRQYXJlbnQobm9kZTogTmd0UmVuZGVyZXJOb2RlLCBwYXJlbnQ6IE5ndFJlbmRlcmVyTm9kZSkge1xuICAgICAgICBpZiAoIW5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XSkge1xuICAgICAgICAgICAgbm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdID0gcGFyZW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkQ2hpbGQobm9kZTogTmd0UmVuZGVyZXJOb2RlLCBjaGlsZDogTmd0UmVuZGVyZXJOb2RlKSB7XG4gICAgICAgIGlmICghbm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jaGlsZHJlbl0uaW5jbHVkZXMoY2hpbGQpKSB7XG4gICAgICAgICAgICBub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNoaWxkcmVuXS5wdXNoKGNoaWxkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZUNoaWxkKG5vZGU6IE5ndFJlbmRlcmVyTm9kZSwgY2hpbGQ6IE5ndFJlbmRlcmVyTm9kZSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY2hpbGRyZW5dLmZpbmRJbmRleCgoYykgPT4gY2hpbGQgPT09IGMpO1xuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgbm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jaGlsZHJlbl0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldENvbXBvdW5kKGNvbXBvdW5kOiBOZ3RSZW5kZXJlck5vZGUsIGluc3RhbmNlOiBOZ3RSZW5kZXJlck5vZGUpIHtcbiAgICAgICAgY29tcG91bmQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0gPSBpbnN0YW5jZTtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IE9iamVjdC5rZXlzKGNvbXBvdW5kLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmF0dHJpYnV0ZXNdKTtcbiAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IE9iamVjdC5rZXlzKGNvbXBvdW5kLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnByb3BlcnRpZXNdKTtcblxuICAgICAgICBpZiAoYXR0cmlidXRlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGx5QXR0cmlidXRlKGluc3RhbmNlLCBrZXksIGNvbXBvdW5kLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmF0dHJpYnV0ZXNdW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wZXJ0aWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgcHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlQcm9wZXJ0eShpbnN0YW5jZSwga2V5LCBjb21wb3VuZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wcm9wZXJ0aWVzXVtrZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZXhlY3V0ZU9wZXJhdGlvbihjb21wb3VuZCk7XG4gICAgfVxuXG4gICAgcXVldWVPcGVyYXRpb24obm9kZTogTmd0UmVuZGVyZXJOb2RlLCBvcDogTmd0UXVldWVPcCkge1xuICAgICAgICBub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnF1ZXVlT3BzXS5hZGQob3ApO1xuICAgIH1cblxuICAgIGV4ZWN1dGVPcGVyYXRpb24obm9kZTogTmd0UmVuZGVyZXJOb2RlLCB0eXBlOiBOZ3RRdWV1ZU9wW05ndFF1ZXVlT3BDbGFzc0lkLnR5cGVdID0gJ29wJykge1xuICAgICAgICBpZiAobm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5xdWV1ZU9wc10/LnNpemUpIHtcbiAgICAgICAgICAgIG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucXVldWVPcHNdLmZvckVhY2goKG9wKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG9wW05ndFF1ZXVlT3BDbGFzc0lkLnR5cGVdID09PSB0eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wW05ndFF1ZXVlT3BDbGFzc0lkLm9wXSgpO1xuICAgICAgICAgICAgICAgICAgICBub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnF1ZXVlT3BzXS5kZWxldGUob3ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvY2Vzc1BvcnRhbENvbnRhaW5lcihwb3J0YWw6IE5ndFJlbmRlcmVyTm9kZSkge1xuICAgICAgICBjb25zdCBpbmplY3RvckZhY3RvcnkgPSBwb3J0YWwuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0b3JGYWN0b3J5XTtcbiAgICAgICAgY29uc3QgaW5qZWN0b3IgPSBpbmplY3RvckZhY3Rvcnk/LigpO1xuICAgICAgICBpZiAoIWluamVjdG9yKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgcG9ydGFsU3RvcmUgPSBpbmplY3Rvci5nZXQoTmd0U3RvcmUsIG51bGwpO1xuICAgICAgICBpZiAoIXBvcnRhbFN0b3JlKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgcG9ydGFsQ29udGFpbmVyID0gcG9ydGFsU3RvcmUuZ2V0KCdzY2VuZScpO1xuICAgICAgICBpZiAoIXBvcnRhbENvbnRhaW5lcikgcmV0dXJuO1xuXG4gICAgICAgIHBvcnRhbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wb3J0YWxDb250YWluZXJdID0gdGhpcy5jcmVhdGVOb2RlKCd0aHJlZScsIHBvcnRhbENvbnRhaW5lcik7XG4gICAgfVxuXG4gICAgYXBwbHlBdHRyaWJ1dGUobm9kZTogTmd0UmVuZGVyZXJOb2RlLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuZGVzdHJveWVkXSkgcmV0dXJuO1xuICAgICAgICBpZiAobmFtZSA9PT0gU1BFQ0lBTF9QUk9QRVJUSUVTLlJFTkRFUl9QUklPUklUWSkge1xuICAgICAgICAgICAgLy8gcHJpb3JpdHkgbmVlZHMgdG8gYmUgc2V0IGFzIGFuIGF0dHJpYnV0ZSBzdHJpbmcgc28gdGhhdCB0aGV5IGNhbiBiZSBzZXQgYXMgZWFybHkgYXMgcG9zc2libGVcbiAgICAgICAgICAgIC8vIHdlIGNvbnZlcnQgdGhhdCBzdHJpbmcgdG8gYSBudW1iZXIuIGlmIGl0J3MgaW52YWxpZCwgMFxuICAgICAgICAgICAgbGV0IHByaW9yaXR5ID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChpc05hTihwcmlvcml0eSkpIHtcbiAgICAgICAgICAgICAgICBwcmlvcml0eSA9IDA7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBbTkdUXSBcInByaW9yaXR5XCIgaXMgYW4gaW52YWxpZCBudW1iZXIsIGRlZmF1bHQgdG8gMGApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ2V0TG9jYWxTdGF0ZShub2RlKS5wcmlvcml0eSA9IHByaW9yaXR5O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5hbWUgPT09IFNQRUNJQUxfUFJPUEVSVElFUy5DT01QT1VORCkge1xuICAgICAgICAgICAgLy8gd2Ugc2V0IHRoZSBjb21wb3VuZCBwcm9wZXJ0eSBvbiBpbnN0YW5jZSBub2RlIG5vdyBzbyB3ZSBrbm93IHRoYXQgdGhpcyBpbnN0YW5jZSBpcyBiZWluZyBjb21wb3VuZGVkXG4gICAgICAgICAgICBub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kXSA9IFt2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09ICdmaXJzdCcsIHt9XTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuYW1lID09PSBTUEVDSUFMX1BST1BFUlRJRVMuQVRUQUNIKSB7XG4gICAgICAgICAgICAvLyBoYW5kbGUgYXR0YWNoIGFzIHRyaW5nXG4gICAgICAgICAgICBjb25zdCBwYXRocyA9IHZhbHVlLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICBpZiAocGF0aHMubGVuZ3RoKSBnZXRMb2NhbFN0YXRlKG5vZGUpLmF0dGFjaCA9IHBhdGhzO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5hbWUgPT09IFNQRUNJQUxfUFJPUEVSVElFUy5WQUxVRSkge1xuICAgICAgICAgICAgLy8gY29lcmNpb25cbiAgICAgICAgICAgIGxldCBtYXliZUNvZXJjZWQ6IGFueSA9IHZhbHVlO1xuICAgICAgICAgICAgaWYgKG1heWJlQ29lcmNlZCA9PT0gJycgfHwgbWF5YmVDb2VyY2VkID09PSAndHJ1ZScgfHwgbWF5YmVDb2VyY2VkID09PSAnZmFsc2UnKSB7XG4gICAgICAgICAgICAgICAgbWF5YmVDb2VyY2VkID0gbWF5YmVDb2VyY2VkID09PSAndHJ1ZScgfHwgbWF5YmVDb2VyY2VkID09PSAnJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzTmFOKE51bWJlcihtYXliZUNvZXJjZWQpKSkge1xuICAgICAgICAgICAgICAgIG1heWJlQ29lcmNlZCA9IE51bWJlcihtYXliZUNvZXJjZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5yYXdWYWx1ZV0gPSBtYXliZUNvZXJjZWQ7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBhcHBseVByb3BzKG5vZGUsIHsgW25hbWVdOiB2YWx1ZSB9KTtcbiAgICB9XG5cbiAgICBhcHBseVByb3BlcnR5KG5vZGU6IE5ndFJlbmRlcmVyTm9kZSwgbmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgICAgIGlmIChub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmRlc3Ryb3llZF0pIHJldHVybjtcblxuICAgICAgICAvLyBbcmVmXVxuICAgICAgICBpZiAobmFtZSA9PT0gU1BFQ0lBTF9QUk9QRVJUSUVTLlJFRiAmJiBpcy5yZWYodmFsdWUpKSB7XG4gICAgICAgICAgICBub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnJlZl0gPSB2YWx1ZTtcbiAgICAgICAgICAgIHZhbHVlLm5hdGl2ZUVsZW1lbnQgPSBub2RlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyZW50ID0gZ2V0TG9jYWxTdGF0ZShub2RlKS5wYXJlbnQgfHwgbm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdO1xuXG4gICAgICAgIC8vIFtyYXdWYWx1ZV1cbiAgICAgICAgaWYgKGdldExvY2FsU3RhdGUobm9kZSkuaXNSYXcgJiYgbmFtZSA9PT0gU1BFQ0lBTF9QUk9QRVJUSUVTLlZBTFVFKSB7XG4gICAgICAgICAgICBub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnJhd1ZhbHVlXSA9IHZhbHVlO1xuICAgICAgICAgICAgaWYgKHBhcmVudCkgYXR0YWNoVGhyZWVDaGlsZChwYXJlbnQsIG5vZGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gW2F0dGFjaF1cbiAgICAgICAgaWYgKG5hbWUgPT09IFNQRUNJQUxfUFJPUEVSVElFUy5BVFRBQ0gpIHtcbiAgICAgICAgICAgIGdldExvY2FsU3RhdGUobm9kZSkuYXR0YWNoID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5tYXAoKHYpID0+IHYudG9TdHJpbmcoKSkgOiB2YWx1ZTtcbiAgICAgICAgICAgIGlmIChwYXJlbnQpIGF0dGFjaFRocmVlQ2hpbGQocGFyZW50LCBub2RlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbXBvdW5kID0gbm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZF07XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbXBvdW5kPy5bTmd0Q29tcG91bmRDbGFzc0lkLnByb3BzXSAmJlxuICAgICAgICAgICAgbmFtZSBpbiBjb21wb3VuZFtOZ3RDb21wb3VuZENsYXNzSWQucHJvcHNdICYmXG4gICAgICAgICAgICAhY29tcG91bmRbTmd0Q29tcG91bmRDbGFzc0lkLmFwcGx5Rmlyc3RdXG4gICAgICAgICkge1xuICAgICAgICAgICAgdmFsdWUgPSBjb21wb3VuZFtOZ3RDb21wb3VuZENsYXNzSWQucHJvcHNdW25hbWVdO1xuICAgICAgICB9XG4gICAgICAgIGFwcGx5UHJvcHMobm9kZSwgeyBbbmFtZV06IHZhbHVlIH0pO1xuICAgIH1cblxuICAgIGlzQ29tcG91bmQobmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvb3QuY29tcG91bmRQcmVmaXhlcy5zb21lKChwcmVmaXgpID0+IG5hbWUuc3RhcnRzV2l0aChwcmVmaXgpKTtcbiAgICB9XG5cbiAgICBpc0RPTShub2RlOiBOZ3RBbnlSZWNvcmQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIG5vZGVbJ19fbmd0X3JlbmRlcmVyX18nXT8uW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSAhPT0gJ2NvbXBvdW5kJyAmJlxuICAgICAgICAgICAgKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXQgcm9vdFNjZW5lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yb290LnN0b3JlLmdldCgnc2NlbmUnKTtcbiAgICB9XG5cbiAgICBnZXQgcm9vdENkcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm9vdC5jZHI7XG4gICAgfVxuXG4gICAgZ2V0IHBvcnRhbHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvb3QucG9ydGFscztcbiAgICB9XG5cbiAgICBnZXRDbG9zZXN0UGFyZW50V2l0aEluc3RhbmNlKG5vZGU6IE5ndFJlbmRlcmVyTm9kZSk6IE5ndFJlbmRlcmVyTm9kZSB8IG51bGwge1xuICAgICAgICBsZXQgcGFyZW50ID0gbm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdO1xuICAgICAgICB3aGlsZSAocGFyZW50ICYmIHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSAhPT0gJ3RocmVlJykge1xuICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl1cbiAgICAgICAgICAgICAgICA/IHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wb3J0YWxDb250YWluZXJdXG4gICAgICAgICAgICAgICAgOiBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfVxuXG4gICAgZ2V0Q2xvc2VzdFBhcmVudFdpdGhDb21wb3VuZChub2RlOiBOZ3RSZW5kZXJlck5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRQYXJlbnRdKSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZFBhcmVudF07XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcGFyZW50ID0gbm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBwYXJlbnQgJiZcbiAgICAgICAgICAgIHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbXBvdW5kJyAmJlxuICAgICAgICAgICAgIXBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZSAoXG4gICAgICAgICAgICBwYXJlbnQgJiZcbiAgICAgICAgICAgIChwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScgfHxcbiAgICAgICAgICAgICAgICAhcGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kUGFyZW50XSB8fFxuICAgICAgICAgICAgICAgIHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSAhPT0gJ2NvbXBvdW5kJylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcGFyZW50KSByZXR1cm47XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgcGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnICYmXG4gICAgICAgICAgICBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRQYXJlbnRdXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZFBhcmVudF07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGdldENyZWF0aW9uU3RhdGUoKSB7XG4gICAgICAgIGNvbnN0IGluamVjdGVkQXJncyA9IHRoaXMuZmlyc3ROb25JbmplY3RlZERpcmVjdGl2ZShOZ3RBcmdzKT8uYXJncyB8fCBbXTtcbiAgICAgICAgY29uc3Qgc3RvcmUgPSB0aGlzLnRyeUdldFBvcnRhbFN0b3JlKCk7XG4gICAgICAgIHJldHVybiB7IGluamVjdGVkQXJncywgc3RvcmUgfTtcbiAgICB9XG5cbiAgICBkZXN0cm95KG5vZGU6IE5ndFJlbmRlcmVyTm9kZSwgcGFyZW50PzogTmd0UmVuZGVyZXJOb2RlKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gbm9kZS5fX25ndF9yZW5kZXJlcl9fO1xuICAgICAgICBpZiAoc3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLmRlc3Ryb3llZF0pIHJldHVybjtcbiAgICAgICAgaWYgKHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJykge1xuICAgICAgICAgICAgc3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kXSA9IHVuZGVmaW5lZCE7XG4gICAgICAgICAgICBzdGF0ZVtOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRQYXJlbnRdID0gdW5kZWZpbmVkITtcblxuICAgICAgICAgICAgY29uc3QgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUobm9kZSk7XG4gICAgICAgICAgICBpZiAobG9jYWxTdGF0ZS5vYmplY3RzKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxTdGF0ZS5vYmplY3RzLnZhbHVlLmZvckVhY2goKG9iaikgPT4gdGhpcy5kZXN0cm95KG9iaiwgcGFyZW50KSk7XG4gICAgICAgICAgICAgICAgbG9jYWxTdGF0ZS5vYmplY3RzLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChsb2NhbFN0YXRlLm5vbk9iamVjdHMpIHtcbiAgICAgICAgICAgICAgICBsb2NhbFN0YXRlLm5vbk9iamVjdHMudmFsdWUuZm9yRWFjaCgob2JqKSA9PiB0aGlzLmRlc3Ryb3kob2JqLCBwYXJlbnQpKTtcbiAgICAgICAgICAgICAgICBsb2NhbFN0YXRlLm5vbk9iamVjdHMuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGxvY2FsU3RhdGUuYWZ0ZXJVcGRhdGUpIGxvY2FsU3RhdGUuYWZ0ZXJVcGRhdGUuY29tcGxldGUoKTtcbiAgICAgICAgICAgIGlmIChsb2NhbFN0YXRlLmFmdGVyQXR0YWNoKSBsb2NhbFN0YXRlLmFmdGVyQXR0YWNoLmNvbXBsZXRlKCk7XG5cbiAgICAgICAgICAgIGRlbGV0ZSAobG9jYWxTdGF0ZSBhcyBOZ3RBbnlSZWNvcmQpWydvYmplY3RzJ107XG4gICAgICAgICAgICBkZWxldGUgKGxvY2FsU3RhdGUgYXMgTmd0QW55UmVjb3JkKVsnbm9uT2JqZWN0cyddO1xuICAgICAgICAgICAgZGVsZXRlIChsb2NhbFN0YXRlIGFzIE5ndEFueVJlY29yZClbJ2FkZCddO1xuICAgICAgICAgICAgZGVsZXRlIChsb2NhbFN0YXRlIGFzIE5ndEFueVJlY29yZClbJ3JlbW92ZSddO1xuICAgICAgICAgICAgZGVsZXRlIChsb2NhbFN0YXRlIGFzIE5ndEFueVJlY29yZClbJ2FmdGVyVXBkYXRlJ107XG4gICAgICAgICAgICBkZWxldGUgKGxvY2FsU3RhdGUgYXMgTmd0QW55UmVjb3JkKVsnYWZ0ZXJBdHRhY2gnXTtcbiAgICAgICAgICAgIGRlbGV0ZSAobG9jYWxTdGF0ZSBhcyBOZ3RBbnlSZWNvcmQpWydzdG9yZSddO1xuICAgICAgICAgICAgZGVsZXRlIChsb2NhbFN0YXRlIGFzIE5ndEFueVJlY29yZClbJ2hhbmRsZXJzJ107XG5cbiAgICAgICAgICAgIGlmICghbG9jYWxTdGF0ZS5wcmltaXRpdmUpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgKG5vZGUgYXMgTmd0QW55UmVjb3JkKVsnX19uZ3RfXyddO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbW1lbnQnKSB7XG4gICAgICAgICAgICBzdGF0ZVtOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0b3JGYWN0b3J5XSA9IG51bGwhO1xuICAgICAgICAgICAgZGVsZXRlIChub2RlIGFzIE5ndEFueVJlY29yZClbJ19fbmd0X3JlbmRlcmVyX2FkZF9jb21tZW50X18nXTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jb21tZW50cy5maW5kSW5kZXgoKGNvbW1lbnQpID0+IGNvbW1lbnQgPT09IG5vZGUpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1lbnRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAncG9ydGFsJykge1xuICAgICAgICAgICAgc3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdG9yRmFjdG9yeV0gPSBudWxsITtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wb3J0YWxzLmZpbmRJbmRleCgocG9ydGFsKSA9PiBwb3J0YWwgPT09IG5vZGUpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcnRhbHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGF0ZVtOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21wb3VuZCcpIHtcbiAgICAgICAgICAgIHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSA9IHVuZGVmaW5lZCE7XG4gICAgICAgICAgICBzdGF0ZVtOZ3RSZW5kZXJlckNsYXNzSWQuYXR0cmlidXRlc10gPSBudWxsITtcbiAgICAgICAgICAgIHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC5wcm9wZXJ0aWVzXSA9IG51bGwhO1xuICAgICAgICAgICAgdGhpcy5leGVjdXRlT3BlcmF0aW9uKG5vZGUsICdjbGVhblVwJyk7XG4gICAgICAgICAgICBzdGF0ZVtOZ3RSZW5kZXJlckNsYXNzSWQucXVldWVPcHNdLmNsZWFyKCk7XG4gICAgICAgICAgICBzdGF0ZVtOZ3RSZW5kZXJlckNsYXNzSWQucXVldWVPcHNdID0gbnVsbCE7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLnJlZl0pIHtcbiAgICAgICAgICAgIC8vIG51bGxpZnkgcmVmXG4gICAgICAgICAgICBzdGF0ZVtOZ3RSZW5kZXJlckNsYXNzSWQucmVmXS5uYXRpdmVFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgICAgIHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC5yZWZdID0gdW5kZWZpbmVkITtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG51bGxpZnkgcGFyZW50XG4gICAgICAgIHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCByZW5kZXJDaGlsZCBvZiBzdGF0ZVtOZ3RSZW5kZXJlckNsYXNzSWQuY2hpbGRyZW5dIHx8IFtdKSB7XG4gICAgICAgICAgICBpZiAocmVuZGVyQ2hpbGQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScgJiYgcGFyZW50KSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlVGhyZWVDaGlsZChwYXJlbnQsIHJlbmRlckNoaWxkLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGVzdHJveShyZW5kZXJDaGlsZCwgcGFyZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC5jaGlsZHJlbl0gPSBbXTtcbiAgICAgICAgc3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLmRlc3Ryb3llZF0gPSB0cnVlO1xuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKHBhcmVudCwgbm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGZpcnN0Tm9uSW5qZWN0ZWREaXJlY3RpdmU8VCBleHRlbmRzIE5ndENvbW1vbkRpcmVjdGl2ZT4oZGlyOiBUeXBlPFQ+KSB7XG4gICAgICAgIGxldCBkaXJlY3RpdmU6IFQgfCB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IGkgPSB0aGlzLmNvbW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgICAgIHdoaWxlIChpID49IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbW1lbnQgPSB0aGlzLmNvbW1lbnRzW2ldO1xuICAgICAgICAgICAgaWYgKGNvbW1lbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuZGVzdHJveWVkXSkge1xuICAgICAgICAgICAgICAgIGktLTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGluamVjdG9yID0gY29tbWVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RvckZhY3RvcnldKCk7XG4gICAgICAgICAgICBpZiAoIWluamVjdG9yKSB7XG4gICAgICAgICAgICAgICAgaS0tO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBpbmplY3Rvci5nZXQoZGlyLCBudWxsKTtcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS52YWxpZGF0ZSgpKSB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aXZlID0gaW5zdGFuY2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGktLTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkaXJlY3RpdmU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0cnlHZXRQb3J0YWxTdG9yZSgpIHtcbiAgICAgICAgbGV0IHN0b3JlOiBOZ3RTdG9yZSB8IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gd2Ugb25seSBjYXJlIGFib3V0IHRoZSBwb3J0YWwgc3RhdGVzIGJlY2F1c2UgTmd0U3RvcmUgb25seSBkaWZmZXJzIHBlciBQb3J0YWxcbiAgICAgICAgbGV0IGkgPSB0aGlzLnBvcnRhbHMubGVuZ3RoIC0gMTtcbiAgICAgICAgd2hpbGUgKGkgPj0gMCkge1xuICAgICAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBwb3J0YWwgc3RhdGUgYmFja3dhcmRzIHRvIGZpbmQgdGhlIGNsb3Nlc3QgTmd0U3RvcmVcbiAgICAgICAgICAgIGNvbnN0IHBvcnRhbCA9IHRoaXMucG9ydGFsc1tpXTtcbiAgICAgICAgICAgIGlmIChwb3J0YWwuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuZGVzdHJveWVkXSkge1xuICAgICAgICAgICAgICAgIGktLTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgaW5qZWN0b3IgPSBwb3J0YWwuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0b3JGYWN0b3J5XSgpO1xuICAgICAgICAgICAgaWYgKCFpbmplY3Rvcikge1xuICAgICAgICAgICAgICAgIGktLTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5qZWN0b3IuZ2V0KE5ndFN0b3JlLCBudWxsKTtcbiAgICAgICAgICAgIC8vIG9ubHkgdGhlIGluc3RhbmNlIHdpdGggcHJldmlvdXNTdG9yZSBzaG91bGQgcGFzc1xuICAgICAgICAgICAgaWYgKGluc3RhbmNlICYmIGluc3RhbmNlLmdldCgncHJldmlvdXNTdG9yZScpKSB7XG4gICAgICAgICAgICAgICAgc3RvcmUgPSBpbnN0YW5jZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGktLTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RvcmUgfHwgdGhpcy5yb290IS5zdG9yZTtcbiAgICB9XG59XG4iXX0=
373
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUvc3JjL2xpYi9yZW5kZXJlci9zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFlBQVksRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFakMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBaUNqRixNQUFNLE9BQU8sZ0JBQWdCO0lBR3pCLFlBQTZCLElBQTBCO1FBQTFCLFNBQUksR0FBSixJQUFJLENBQXNCO1FBRnRDLGFBQVEsR0FBRyxFQUE0QixDQUFDO0lBRUMsQ0FBQztJQUUzRCxVQUFVLENBQUMsSUFBK0MsRUFBRSxJQUFrQjtRQUMxRSxNQUFNLEtBQUssR0FBRztZQUNWLElBQUk7WUFDSixJQUFJO1lBQ0osRUFBRTtZQUNGLEtBQUs7WUFDTCxTQUFVO1lBQ1YsU0FBVTtZQUNWLFNBQVU7WUFDVixTQUFVO1lBQ1YsU0FBVTtZQUNWLFNBQVU7WUFDVixTQUFVO1lBQ1YsU0FBVTtZQUNWLFNBQVU7WUFDVixTQUFVO1NBQ08sQ0FBQztRQUV0QixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFdEUsdUVBQXVFO1FBQ3ZFLElBQUksQ0FBQyxZQUFZ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Q0QsQ0FBQyxFQUFFLENBQUM7U0FDUDtRQUNELE9BQU8sS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFLLENBQUMsS0FBSyxDQUFDO0lBQ3JDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBnZXREZWJ1Z05vZGUsIEluamVjdG9yLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ3RBcmdzIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9hcmdzJztcbmltcG9ydCB7IE5ndENvbW1vbkRpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvY29tbW9uJztcbmltcG9ydCB7IE5ndFN0b3JlIH0gZnJvbSAnLi4vc3RvcmVzL3N0b3JlJztcbmltcG9ydCB0eXBlIHsgTmd0QW55UmVjb3JkIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgYXBwbHlQcm9wcyB9IGZyb20gJy4uL3V0aWxzL2FwcGx5LXByb3BzJztcbmltcG9ydCB7IGdldExvY2FsU3RhdGUgfSBmcm9tICcuLi91dGlscy9pbnN0YW5jZSc7XG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uL3V0aWxzL2lzJztcbmltcG9ydCB7IE5ndENvbXBvdW5kQ2xhc3NJZCwgTmd0UXVldWVPcENsYXNzSWQsIE5ndFJlbmRlcmVyQ2xhc3NJZCB9IGZyb20gJy4vZW51bXMnO1xuaW1wb3J0IHsgYXR0YWNoVGhyZWVDaGlsZCwgcmVtb3ZlVGhyZWVDaGlsZCwgU1BFQ0lBTF9QUk9QRVJUSUVTIH0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCB0eXBlIE5ndFJlbmRlcmVyUm9vdFN0YXRlID0ge1xuICAgIHN0b3JlOiBOZ3RTdG9yZTtcbiAgICBjZHI6IENoYW5nZURldGVjdG9yUmVmO1xuICAgIGNvbXBvdW5kUHJlZml4ZXM6IHN0cmluZ1tdO1xuICAgIGRvY3VtZW50OiBEb2N1bWVudDtcbiAgICBwb3J0YWxzOiBBcnJheTxOZ3RSZW5kZXJlck5vZGU+O1xufTtcblxuZXhwb3J0IHR5cGUgTmd0UXVldWVPcCA9IFt0eXBlOiAnb3AnIHwgJ2NsZWFuVXAnLCBvcDogKCkgPT4gdm9pZCwgZG9uZT86IHRydWVdO1xuXG5leHBvcnQgdHlwZSBOZ3RSZW5kZXJlclN0YXRlID0gW1xuICAgIHR5cGU6ICd0aHJlZScgfCAnY29tcG91bmQnIHwgJ3BvcnRhbCcgfCAnY29tbWVudCcgfCAnZG9tJyxcbiAgICBwYXJlbnQ6IE5ndFJlbmRlcmVyTm9kZSB8IG51bGwsXG4gICAgY2hpbGRyZW46IE5ndFJlbmRlcmVyTm9kZVtdLFxuICAgIGRlc3Ryb3llZDogYm9vbGVhbixcbiAgICBjb21wb3VuZDogW2FwcGx5Rmlyc3Q6IGJvb2xlYW4sIHByb3BzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+XSxcbiAgICBjb21wb3VuZFBhcmVudDogTmd0UmVuZGVyZXJOb2RlLFxuICAgIGNvbXBvdW5kZWQ6IE5ndFJlbmRlcmVyTm9kZSxcbiAgICBxdWV1ZU9wczogU2V0PE5ndFF1ZXVlT3A+LFxuICAgIGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgcHJvcGVydGllczogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICByYXdWYWx1ZTogYW55LFxuICAgIHJlZjogYW55LFxuICAgIHBvcnRhbENvbnRhaW5lcjogTmd0UmVuZGVyZXJOb2RlLFxuICAgIGluamVjdG9yRmFjdG9yeTogKCkgPT4gSW5qZWN0b3Jcbl07XG5cbmV4cG9ydCB0eXBlIE5ndFJlbmRlcmVyTm9kZSA9IHtcbiAgICBfX25ndF9yZW5kZXJlcl9fOiBOZ3RSZW5kZXJlclN0YXRlO1xufTtcblxuZXhwb3J0IGNsYXNzIE5ndFJlbmRlcmVyU3RvcmUge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY29tbWVudHMgPSBbXSBhcyBBcnJheTxOZ3RSZW5kZXJlck5vZGU+O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSByb290OiBOZ3RSZW5kZXJlclJvb3RTdGF0ZSkge31cblxuICAgIGNyZWF0ZU5vZGUodHlwZTogTmd0UmVuZGVyZXJTdGF0ZVtOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0sIG5vZGU6IE5ndEFueVJlY29yZCkge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IFtcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgW10sXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgIHVuZGVmaW5lZCEsXG4gICAgICAgICAgICB1bmRlZmluZWQhLFxuICAgICAgICAgICAgdW5kZWZpbmVkISxcbiAgICAgICAgICAgIHVuZGVmaW5lZCEsXG4gICAgICAgICAgICB1bmRlZmluZWQhLFxuICAgICAgICAgICAgdW5kZWZpbmVkISxcbiAgICAgICAgICAgIHVuZGVmaW5lZCEsXG4gICAgICAgICAgICB1bmRlZmluZWQhLFxuICAgICAgICAgICAgdW5kZWZpbmVkISxcbiAgICAgICAgICAgIHVuZGVmaW5lZCEsXG4gICAgICAgIF0gYXMgTmd0UmVuZGVyZXJTdGF0ZTtcblxuICAgICAgICBjb25zdCByZW5kZXJlck5vZGUgPSBPYmplY3QuYXNzaWduKG5vZGUsIHsgX19uZ3RfcmVuZGVyZXJfXzogc3RhdGUgfSk7XG5cbiAgICAgICAgLy8gYXNzaWduIG93bmVyRG9jdW1lbnQgdG8gbm9kZSBzbyB3ZSBjYW4gdXNlIEhvc3RMaXN0ZW5lciBpbiBDb21wb25lbnRcbiAgICAgICAgaWYgKCFyZW5kZXJlck5vZGVbJ293bmVyRG9jdW1lbnQnXSkge1xuICAgICAgICAgICAgcmVuZGVyZXJOb2RlWydvd25lckRvY3VtZW50J10gPSB0aGlzLnJvb3QuZG9jdW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnY29tbWVudCcpIHtcbiAgICAgICAgICAgIHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RvckZhY3RvcnldID0gKCkgPT4gZ2V0RGVidWdOb2RlKHJlbmRlcmVyTm9kZSkhLmluamVjdG9yO1xuICAgICAgICAgICAgLy8gd2UgYXR0YWNoIGFuIGFycm93IGZ1bmN0aW9uIHRvIHRoZSBDb21tZW50IG5vZGVcbiAgICAgICAgICAgIC8vIEluIG91ciBkaXJlY3RpdmVzLCB3ZSBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIHRoZW4gc3RhcnQgdHJhY2tpbmcgdGhlIFJlbmRlcmVyTm9kZVxuICAgICAgICAgICAgcmVuZGVyZXJOb2RlWydfX25ndF9yZW5kZXJlcl9hZGRfY29tbWVudF9fJ10gPSAocG9ydGFsTm9kZT86IE5ndFJlbmRlcmVyTm9kZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwb3J0YWxOb2RlICYmIHBvcnRhbE5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdwb3J0YWwnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9ydGFscy5wdXNoKHBvcnRhbE5vZGUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tbWVudHMucHVzaChyZW5kZXJlck5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gcmVuZGVyZXJOb2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3BvcnRhbCcpIHtcbiAgICAgICAgICAgIHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RvckZhY3RvcnldID0gKCkgPT4gZ2V0RGVidWdOb2RlKHJlbmRlcmVyTm9kZSkhLmluamVjdG9yO1xuICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmVyTm9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGF0ZVtOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21wb3VuZCcpIHtcbiAgICAgICAgICAgIHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC5xdWV1ZU9wc10gPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICBzdGF0ZVtOZ3RSZW5kZXJlckNsYXNzSWQuYXR0cmlidXRlc10gPSB7fTtcbiAgICAgICAgICAgIHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC5wcm9wZXJ0aWVzXSA9IHt9O1xuICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmVyTm9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZW5kZXJlck5vZGU7XG4gICAgfVxuXG4gICAgc2V0UGFyZW50KG5vZGU6IE5ndFJlbmRlcmVyTm9kZSwgcGFyZW50OiBOZ3RSZW5kZXJlck5vZGUpIHtcbiAgICAgICAgaWYgKCFub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnBhcmVudF0pIHtcbiAgICAgICAgICAgIG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XSA9IHBhcmVudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFkZENoaWxkKG5vZGU6IE5ndFJlbmRlcmVyTm9kZSwgY2hpbGQ6IE5ndFJlbmRlcmVyTm9kZSkge1xuICAgICAgICBpZiAoIW5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY2hpbGRyZW5dLmluY2x1ZGVzKGNoaWxkKSkge1xuICAgICAgICAgICAgbm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jaGlsZHJlbl0ucHVzaChjaGlsZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW1vdmVDaGlsZChub2RlOiBOZ3RSZW5kZXJlck5vZGUsIGNoaWxkOiBOZ3RSZW5kZXJlck5vZGUpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNoaWxkcmVuXS5maW5kSW5kZXgoKGMpID0+IGNoaWxkID09PSBjKTtcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgIG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY2hpbGRyZW5dLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRDb21wb3VuZChjb21wb3VuZDogTmd0UmVuZGVyZXJOb2RlLCBpbnN0YW5jZTogTmd0UmVuZGVyZXJOb2RlKSB7XG4gICAgICAgIGNvbXBvdW5kLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdID0gaW5zdGFuY2U7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBPYmplY3Qua2V5cyhjb21wb3VuZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5hdHRyaWJ1dGVzXSk7XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhjb21wb3VuZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wcm9wZXJ0aWVzXSk7XG5cbiAgICAgICAgaWYgKGF0dHJpYnV0ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBhdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBseUF0dHJpYnV0ZShpbnN0YW5jZSwga2V5LCBjb21wb3VuZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5hdHRyaWJ1dGVzXVtrZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcGVydGllcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGx5UHJvcGVydHkoaW5zdGFuY2UsIGtleSwgY29tcG91bmQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucHJvcGVydGllc11ba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmV4ZWN1dGVPcGVyYXRpb24oY29tcG91bmQpO1xuICAgIH1cblxuICAgIHF1ZXVlT3BlcmF0aW9uKG5vZGU6IE5ndFJlbmRlcmVyTm9kZSwgb3A6IE5ndFF1ZXVlT3ApIHtcbiAgICAgICAgbm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5xdWV1ZU9wc10uYWRkKG9wKTtcbiAgICB9XG5cbiAgICBleGVjdXRlT3BlcmF0aW9uKG5vZGU6IE5ndFJlbmRlcmVyTm9kZSwgdHlwZTogTmd0UXVldWVPcFtOZ3RRdWV1ZU9wQ2xhc3NJZC50eXBlXSA9ICdvcCcpIHtcbiAgICAgICAgaWYgKG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucXVldWVPcHNdPy5zaXplKSB7XG4gICAgICAgICAgICBub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnF1ZXVlT3BzXS5mb3JFYWNoKChvcCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChvcFtOZ3RRdWV1ZU9wQ2xhc3NJZC50eXBlXSA9PT0gdHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBvcFtOZ3RRdWV1ZU9wQ2xhc3NJZC5vcF0oKTtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5xdWV1ZU9wc10uZGVsZXRlKG9wKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb2Nlc3NQb3J0YWxDb250YWluZXIocG9ydGFsOiBOZ3RSZW5kZXJlck5vZGUpIHtcbiAgICAgICAgY29uc3QgaW5qZWN0b3JGYWN0b3J5ID0gcG9ydGFsLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdG9yRmFjdG9yeV07XG4gICAgICAgIGNvbnN0IGluamVjdG9yID0gaW5qZWN0b3JGYWN0b3J5Py4oKTtcbiAgICAgICAgaWYgKCFpbmplY3RvcikgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHBvcnRhbFN0b3JlID0gaW5qZWN0b3IuZ2V0KE5ndFN0b3JlLCBudWxsKTtcbiAgICAgICAgaWYgKCFwb3J0YWxTdG9yZSkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHBvcnRhbENvbnRhaW5lciA9IHBvcnRhbFN0b3JlLmdldCgnc2NlbmUnKTtcbiAgICAgICAgaWYgKCFwb3J0YWxDb250YWluZXIpIHJldHVybjtcblxuICAgICAgICBwb3J0YWwuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXSA9IHRoaXMuY3JlYXRlTm9kZSgndGhyZWUnLCBwb3J0YWxDb250YWluZXIpO1xuICAgIH1cblxuICAgIGFwcGx5QXR0cmlidXRlKG5vZGU6IE5ndFJlbmRlcmVyTm9kZSwgbmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGlmIChub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmRlc3Ryb3llZF0pIHJldHVybjtcbiAgICAgICAgaWYgKG5hbWUgPT09IFNQRUNJQUxfUFJPUEVSVElFUy5SRU5ERVJfUFJJT1JJVFkpIHtcbiAgICAgICAgICAgIC8vIHByaW9yaXR5IG5lZWRzIHRvIGJlIHNldCBhcyBhbiBhdHRyaWJ1dGUgc3RyaW5nIHNvIHRoYXQgdGhleSBjYW4gYmUgc2V0IGFzIGVhcmx5IGFzIHBvc3NpYmxlXG4gICAgICAgICAgICAvLyB3ZSBjb252ZXJ0IHRoYXQgc3RyaW5nIHRvIGEgbnVtYmVyLiBpZiBpdCdzIGludmFsaWQsIDBcbiAgICAgICAgICAgIGxldCBwcmlvcml0eSA9IE51bWJlcih2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoaXNOYU4ocHJpb3JpdHkpKSB7XG4gICAgICAgICAgICAgICAgcHJpb3JpdHkgPSAwO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgW05HVF0gXCJwcmlvcml0eVwiIGlzIGFuIGludmFsaWQgbnVtYmVyLCBkZWZhdWx0IHRvIDBgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGdldExvY2FsU3RhdGUobm9kZSkucHJpb3JpdHkgPSBwcmlvcml0eTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuYW1lID09PSBTUEVDSUFMX1BST1BFUlRJRVMuQ09NUE9VTkQpIHtcbiAgICAgICAgICAgIC8vIHdlIHNldCB0aGUgY29tcG91bmQgcHJvcGVydHkgb24gaW5zdGFuY2Ugbm9kZSBub3cgc28gd2Uga25vdyB0aGF0IHRoaXMgaW5zdGFuY2UgaXMgYmVpbmcgY29tcG91bmRlZFxuICAgICAgICAgICAgbm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZF0gPSBbdmFsdWUgPT09ICcnIHx8IHZhbHVlID09PSAnZmlyc3QnLCB7fV07XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmFtZSA9PT0gU1BFQ0lBTF9QUk9QRVJUSUVTLkFUVEFDSCkge1xuICAgICAgICAgICAgLy8gaGFuZGxlIGF0dGFjaCBhcyB0cmluZ1xuICAgICAgICAgICAgY29uc3QgcGF0aHMgPSB2YWx1ZS5zcGxpdCgnLicpO1xuICAgICAgICAgICAgaWYgKHBhdGhzLmxlbmd0aCkgZ2V0TG9jYWxTdGF0ZShub2RlKS5hdHRhY2ggPSBwYXRocztcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuYW1lID09PSBTUEVDSUFMX1BST1BFUlRJRVMuVkFMVUUpIHtcbiAgICAgICAgICAgIC8vIGNvZXJjaW9uXG4gICAgICAgICAgICBsZXQgbWF5YmVDb2VyY2VkOiBhbnkgPSB2YWx1ZTtcbiAgICAgICAgICAgIGlmIChtYXliZUNvZXJjZWQgPT09ICcnIHx8IG1heWJlQ29lcmNlZCA9PT0gJ3RydWUnIHx8IG1heWJlQ29lcmNlZCA9PT0gJ2ZhbHNlJykge1xuICAgICAgICAgICAgICAgIG1heWJlQ29lcmNlZCA9IG1heWJlQ29lcmNlZCA9PT0gJ3RydWUnIHx8IG1heWJlQ29lcmNlZCA9PT0gJyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFpc05hTihOdW1iZXIobWF5YmVDb2VyY2VkKSkpIHtcbiAgICAgICAgICAgICAgICBtYXliZUNvZXJjZWQgPSBOdW1iZXIobWF5YmVDb2VyY2VkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucmF3VmFsdWVdID0gbWF5YmVDb2VyY2VkO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgYXBwbHlQcm9wcyhub2RlLCB7IFtuYW1lXTogdmFsdWUgfSk7XG4gICAgfVxuXG4gICAgYXBwbHlQcm9wZXJ0eShub2RlOiBOZ3RSZW5kZXJlck5vZGUsIG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgICAgICBpZiAobm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5kZXN0cm95ZWRdKSByZXR1cm47XG5cbiAgICAgICAgLy8gW3JlZl1cbiAgICAgICAgaWYgKG5hbWUgPT09IFNQRUNJQUxfUFJPUEVSVElFUy5SRUYgJiYgaXMucmVmKHZhbHVlKSkge1xuICAgICAgICAgICAgbm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5yZWZdID0gdmFsdWU7XG4gICAgICAgICAgICB2YWx1ZS5uYXRpdmVFbGVtZW50ID0gbm9kZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGdldExvY2FsU3RhdGUobm9kZSkucGFyZW50IHx8IG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XTtcblxuICAgICAgICAvLyBbcmF3VmFsdWVdXG4gICAgICAgIGlmIChnZXRMb2NhbFN0YXRlKG5vZGUpLmlzUmF3ICYmIG5hbWUgPT09IFNQRUNJQUxfUFJPUEVSVElFUy5WQUxVRSkge1xuICAgICAgICAgICAgbm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5yYXdWYWx1ZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIGlmIChwYXJlbnQpIGF0dGFjaFRocmVlQ2hpbGQocGFyZW50LCBub2RlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFthdHRhY2hdXG4gICAgICAgIGlmIChuYW1lID09PSBTUEVDSUFMX1BST1BFUlRJRVMuQVRUQUNIKSB7XG4gICAgICAgICAgICBnZXRMb2NhbFN0YXRlKG5vZGUpLmF0dGFjaCA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUubWFwKCh2KSA9PiB2LnRvU3RyaW5nKCkpIDogdmFsdWU7XG4gICAgICAgICAgICBpZiAocGFyZW50KSBhdHRhY2hUaHJlZUNoaWxkKHBhcmVudCwgbm9kZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb21wb3VuZCA9IG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRdO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb21wb3VuZD8uW05ndENvbXBvdW5kQ2xhc3NJZC5wcm9wc10gJiZcbiAgICAgICAgICAgIG5hbWUgaW4gY29tcG91bmRbTmd0Q29tcG91bmRDbGFzc0lkLnByb3BzXSAmJlxuICAgICAgICAgICAgIWNvbXBvdW5kW05ndENvbXBvdW5kQ2xhc3NJZC5hcHBseUZpcnN0XVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHZhbHVlID0gY29tcG91bmRbTmd0Q29tcG91bmRDbGFzc0lkLnByb3BzXVtuYW1lXTtcbiAgICAgICAgfVxuICAgICAgICBhcHBseVByb3BzKG5vZGUsIHsgW25hbWVdOiB2YWx1ZSB9KTtcbiAgICB9XG5cbiAgICBpc0NvbXBvdW5kKG5hbWU6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5yb290LmNvbXBvdW5kUHJlZml4ZXMuc29tZSgocHJlZml4KSA9PiBuYW1lLnN0YXJ0c1dpdGgocHJlZml4KSk7XG4gICAgfVxuXG4gICAgaXNET00obm9kZTogTmd0QW55UmVjb3JkKSB7XG4gICAgICAgIGNvbnN0IHJlbmRlcmVyTm9kZSA9IG5vZGVbJ19fbmd0X3JlbmRlcmVyX18nXTtcbiAgICAgICAgaWYgKHJlbmRlcmVyTm9kZSAmJiByZW5kZXJlck5vZGVbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdICE9PSAnY29tcG91bmQnKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCBub2RlIGluc3RhbmNlb2YgV2luZG93O1xuICAgIH1cblxuICAgIGdldCByb290U2NlbmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvb3Quc3RvcmUuZ2V0KCdzY2VuZScpO1xuICAgIH1cblxuICAgIGdldCByb290Q2RyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yb290LmNkcjtcbiAgICB9XG5cbiAgICBnZXQgcG9ydGFscygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm9vdC5wb3J0YWxzO1xuICAgIH1cblxuICAgIGdldENsb3Nlc3RQYXJlbnRXaXRoSW5zdGFuY2Uobm9kZTogTmd0UmVuZGVyZXJOb2RlKTogTmd0UmVuZGVyZXJOb2RlIHwgbnVsbCB7XG4gICAgICAgIGxldCBwYXJlbnQgPSBub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnBhcmVudF07XG4gICAgICAgIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdICE9PSAndGhyZWUnKSB7XG4gICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXVxuICAgICAgICAgICAgICAgID8gcGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl1cbiAgICAgICAgICAgICAgICA6IHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICB9XG5cbiAgICBnZXRDbG9zZXN0UGFyZW50V2l0aENvbXBvdW5kKG5vZGU6IE5ndFJlbmRlcmVyTm9kZSkge1xuICAgICAgICBpZiAobm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZFBhcmVudF0pIHtcbiAgICAgICAgICAgIHJldHVybiBub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kUGFyZW50XTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwYXJlbnQgPSBub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnBhcmVudF07XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHBhcmVudCAmJlxuICAgICAgICAgICAgcGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnY29tcG91bmQnICYmXG4gICAgICAgICAgICAhcGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlIChcbiAgICAgICAgICAgIHBhcmVudCAmJlxuICAgICAgICAgICAgKHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJyB8fFxuICAgICAgICAgICAgICAgICFwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRQYXJlbnRdIHx8XG4gICAgICAgICAgICAgICAgcGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdICE9PSAnY29tcG91bmQnKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFwYXJlbnQpIHJldHVybjtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScgJiZcbiAgICAgICAgICAgIHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZFBhcmVudF1cbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kUGFyZW50XTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZ2V0Q3JlYXRpb25TdGF0ZSgpIHtcbiAgICAgICAgY29uc3QgaW5qZWN0ZWRBcmdzID0gdGhpcy5maXJzdE5vbkluamVjdGVkRGlyZWN0aXZlKE5ndEFyZ3MpPy5hcmdzIHx8IFtdO1xuICAgICAgICBjb25zdCBzdG9yZSA9IHRoaXMudHJ5R2V0UG9ydGFsU3RvcmUoKTtcbiAgICAgICAgcmV0dXJuIHsgaW5qZWN0ZWRBcmdzLCBzdG9yZSB9O1xuICAgIH1cblxuICAgIGRlc3Ryb3kobm9kZTogTmd0UmVuZGVyZXJOb2RlLCBwYXJlbnQ/OiBOZ3RSZW5kZXJlck5vZGUpIHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBub2RlLl9fbmd0X3JlbmRlcmVyX187XG4gICAgICAgIGlmIChzdGF0ZVtOZ3RSZW5kZXJlckNsYXNzSWQuZGVzdHJveWVkXSkgcmV0dXJuO1xuICAgICAgICBpZiAoc3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB7XG4gICAgICAgICAgICBzdGF0ZVtOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRdID0gdW5kZWZpbmVkITtcbiAgICAgICAgICAgIHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZFBhcmVudF0gPSB1bmRlZmluZWQhO1xuXG4gICAgICAgICAgICBjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShub2RlKTtcbiAgICAgICAgICAgIGlmIChsb2NhbFN0YXRlLm9iamVjdHMpIHtcbiAgICAgICAgICAgICAgICBsb2NhbFN0YXRlLm9iamVjdHMudmFsdWUuZm9yRWFjaCgob2JqKSA9PiB0aGlzLmRlc3Ryb3kob2JqLCBwYXJlbnQpKTtcbiAgICAgICAgICAgICAgICBsb2NhbFN0YXRlLm9iamVjdHMuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGxvY2FsU3RhdGUubm9uT2JqZWN0cykge1xuICAgICAgICAgICAgICAgIGxvY2FsU3RhdGUubm9uT2JqZWN0cy52YWx1ZS5mb3JFYWNoKChvYmopID0+IHRoaXMuZGVzdHJveShvYmosIHBhcmVudCkpO1xuICAgICAgICAgICAgICAgIGxvY2FsU3RhdGUubm9uT2JqZWN0cy5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobG9jYWxTdGF0ZS5hZnRlclVwZGF0ZSkgbG9jYWxTdGF0ZS5hZnRlclVwZGF0ZS5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgaWYgKGxvY2FsU3RhdGUuYWZ0ZXJBdHRhY2gpIGxvY2FsU3RhdGUuYWZ0ZXJBdHRhY2guY29tcGxldGUoKTtcblxuICAgICAgICAgICAgZGVsZXRlIChsb2NhbFN0YXRlIGFzIE5ndEFueVJlY29yZClbJ29iamVjdHMnXTtcbiAgICAgICAgICAgIGRlbGV0ZSAobG9jYWxTdGF0ZSBhcyBOZ3RBbnlSZWNvcmQpWydub25PYmplY3RzJ107XG4gICAgICAgICAgICBkZWxldGUgKGxvY2FsU3RhdGUgYXMgTmd0QW55UmVjb3JkKVsnYWRkJ107XG4gICAgICAgICAgICBkZWxldGUgKGxvY2FsU3RhdGUgYXMgTmd0QW55UmVjb3JkKVsncmVtb3ZlJ107XG4gICAgICAgICAgICBkZWxldGUgKGxvY2FsU3RhdGUgYXMgTmd0QW55UmVjb3JkKVsnYWZ0ZXJVcGRhdGUnXTtcbiAgICAgICAgICAgIGRlbGV0ZSAobG9jYWxTdGF0ZSBhcyBOZ3RBbnlSZWNvcmQpWydhZnRlckF0dGFjaCddO1xuICAgICAgICAgICAgZGVsZXRlIChsb2NhbFN0YXRlIGFzIE5ndEFueVJlY29yZClbJ3N0b3JlJ107XG4gICAgICAgICAgICBkZWxldGUgKGxvY2FsU3RhdGUgYXMgTmd0QW55UmVjb3JkKVsnaGFuZGxlcnMnXTtcblxuICAgICAgICAgICAgaWYgKCFsb2NhbFN0YXRlLnByaW1pdGl2ZSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSAobm9kZSBhcyBOZ3RBbnlSZWNvcmQpWydfX25ndF9fJ107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnY29tbWVudCcpIHtcbiAgICAgICAgICAgIHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RvckZhY3RvcnldID0gbnVsbCE7XG4gICAgICAgICAgICBkZWxldGUgKG5vZGUgYXMgTmd0QW55UmVjb3JkKVsnX19uZ3RfcmVuZGVyZXJfYWRkX2NvbW1lbnRfXyddO1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmNvbW1lbnRzLmZpbmRJbmRleCgoY29tbWVudCkgPT4gY29tbWVudCA9PT0gbm9kZSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29tbWVudHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGF0ZVtOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdwb3J0YWwnKSB7XG4gICAgICAgICAgICBzdGF0ZVtOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0b3JGYWN0b3J5XSA9IG51bGwhO1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnBvcnRhbHMuZmluZEluZGV4KChwb3J0YWwpID0+IHBvcnRhbCA9PT0gbm9kZSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgIHRoaXMucG9ydGFscy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbXBvdW5kJykge1xuICAgICAgICAgICAgc3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdID0gdW5kZWZpbmVkITtcbiAgICAgICAgICAgIHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC5hdHRyaWJ1dGVzXSA9IG51bGwhO1xuICAgICAgICAgICAgc3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLnByb3BlcnRpZXNdID0gbnVsbCE7XG4gICAgICAgICAgICB0aGlzLmV4ZWN1dGVPcGVyYXRpb24obm9kZSwgJ2NsZWFuVXAnKTtcbiAgICAgICAgICAgIHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC5xdWV1ZU9wc10uY2xlYXIoKTtcbiAgICAgICAgICAgIHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC5xdWV1ZU9wc10gPSBudWxsITtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGF0ZVtOZ3RSZW5kZXJlckNsYXNzSWQucmVmXSkge1xuICAgICAgICAgICAgLy8gbnVsbGlmeSByZWZcbiAgICAgICAgICAgIHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC5yZWZdLm5hdGl2ZUVsZW1lbnQgPSBudWxsO1xuICAgICAgICAgICAgc3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLnJlZl0gPSB1bmRlZmluZWQhO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbnVsbGlmeSBwYXJlbnRcbiAgICAgICAgc3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLnBhcmVudF0gPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IHJlbmRlckNoaWxkIG9mIHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC5jaGlsZHJlbl0gfHwgW10pIHtcbiAgICAgICAgICAgIGlmIChyZW5kZXJDaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJyAmJiBwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVUaHJlZUNoaWxkKHBhcmVudCwgcmVuZGVyQ2hpbGQsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kZXN0cm95KHJlbmRlckNoaWxkLCBwYXJlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLmNoaWxkcmVuXSA9IFtdO1xuICAgICAgICBzdGF0ZVtOZ3RSZW5kZXJlckNsYXNzSWQuZGVzdHJveWVkXSA9IHRydWU7XG4gICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQocGFyZW50LCBub2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZmlyc3ROb25JbmplY3RlZERpcmVjdGl2ZTxUIGV4dGVuZHMgTmd0Q29tbW9uRGlyZWN0aXZlPihkaXI6IFR5cGU8VD4pIHtcbiAgICAgICAgbGV0IGRpcmVjdGl2ZTogVCB8IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgaSA9IHRoaXMuY29tbWVudHMubGVuZ3RoIC0gMTtcbiAgICAgICAgd2hpbGUgKGkgPj0gMCkge1xuICAgICAgICAgICAgY29uc3QgY29tbWVudCA9IHRoaXMuY29tbWVudHNbaV07XG4gICAgICAgICAgICBpZiAoY29tbWVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5kZXN0cm95ZWRdKSB7XG4gICAgICAgICAgICAgICAgaS0tO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaW5qZWN0b3IgPSBjb21tZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdG9yRmFjdG9yeV0oKTtcbiAgICAgICAgICAgIGlmICghaW5qZWN0b3IpIHtcbiAgICAgICAgICAgICAgICBpLS07XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IGluamVjdG9yLmdldChkaXIsIG51bGwpO1xuICAgICAgICAgICAgaWYgKGluc3RhbmNlICYmIGluc3RhbmNlLnZhbGlkYXRlKCkpIHtcbiAgICAgICAgICAgICAgICBkaXJlY3RpdmUgPSBpbnN0YW5jZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaS0tO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRpcmVjdGl2ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRyeUdldFBvcnRhbFN0b3JlKCkge1xuICAgICAgICBsZXQgc3RvcmU6IE5ndFN0b3JlIHwgdW5kZWZpbmVkO1xuICAgICAgICAvLyB3ZSBvbmx5IGNhcmUgYWJvdXQgdGhlIHBvcnRhbCBzdGF0ZXMgYmVjYXVzZSBOZ3RTdG9yZSBvbmx5IGRpZmZlcnMgcGVyIFBvcnRhbFxuICAgICAgICBsZXQgaSA9IHRoaXMucG9ydGFscy5sZW5ndGggLSAxO1xuICAgICAgICB3aGlsZSAoaSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIHBvcnRhbCBzdGF0ZSBiYWNrd2FyZHMgdG8gZmluZCB0aGUgY2xvc2VzdCBOZ3RTdG9yZVxuICAgICAgICAgICAgY29uc3QgcG9ydGFsID0gdGhpcy5wb3J0YWxzW2ldO1xuICAgICAgICAgICAgaWYgKHBvcnRhbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5kZXN0cm95ZWRdKSB7XG4gICAgICAgICAgICAgICAgaS0tO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpbmplY3RvciA9IHBvcnRhbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RvckZhY3RvcnldKCk7XG4gICAgICAgICAgICBpZiAoIWluamVjdG9yKSB7XG4gICAgICAgICAgICAgICAgaS0tO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBpbmplY3Rvci5nZXQoTmd0U3RvcmUsIG51bGwpO1xuICAgICAgICAgICAgLy8gb25seSB0aGUgaW5zdGFuY2Ugd2l0aCBwcmV2aW91c1N0b3JlIHNob3VsZCBwYXNzXG4gICAgICAgICAgICBpZiAoaW5zdGFuY2UgJiYgaW5zdGFuY2UuZ2V0KCdwcmV2aW91c1N0b3JlJykpIHtcbiAgICAgICAgICAgICAgICBzdG9yZSA9IGluc3RhbmNlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaS0tO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdG9yZSB8fCB0aGlzLnJvb3QhLnN0b3JlO1xuICAgIH1cbn1cbiJdfQ==
@@ -1700,9 +1700,10 @@ class NgtRendererStore {
1700
1700
  return this.root.compoundPrefixes.some((prefix) => name.startsWith(prefix));
1701
1701
  }
1702
1702
  isDOM(node) {
1703
- var _a;
1704
- return (((_a = node['__ngt_renderer__']) === null || _a === void 0 ? void 0 : _a[0 /* NgtRendererClassId.type */]) !== 'compound' &&
1705
- (node instanceof Element || node instanceof Document));
1703
+ const rendererNode = node['__ngt_renderer__'];
1704
+ if (rendererNode && rendererNode[0 /* NgtRendererClassId.type */] !== 'compound')
1705
+ return true;
1706
+ return node instanceof Element || node instanceof Document || node instanceof Window;
1706
1707
  }
1707
1708
  get rootScene() {
1708
1709
  return this.root.store.get('scene');
@@ -2170,16 +2171,28 @@ class NgtRenderer {
2170
2171
  var _a, _b;
2171
2172
  const targetCdr = (_b = (_a = target.__ngt_renderer__) === null || _a === void 0 ? void 0 : _a[13 /* NgtRendererClassId.injectorFactory */]) === null || _b === void 0 ? void 0 : _b.call(_a).get(ChangeDetectorRef, null);
2172
2173
  // if target is DOM node, then we pass that to delegate Renderer
2174
+ const callbackWithCdr = (event) => {
2175
+ const value = callback(event);
2176
+ if (targetCdr)
2177
+ targetCdr.detectChanges();
2178
+ this.store.rootCdr.detectChanges();
2179
+ return value;
2180
+ };
2173
2181
  if (this.store.isDOM(target)) {
2174
- const callbackWithCdr = (event) => {
2175
- const value = callback(event);
2176
- if (targetCdr)
2177
- targetCdr.detectChanges();
2178
- this.store.rootCdr.detectChanges();
2179
- return value;
2180
- };
2181
2182
  return this.delegate.listen(target, eventName, callbackWithCdr);
2182
2183
  }
2184
+ // @ts-expect-error - we know that target is not DOM node
2185
+ if (target === this.store.rootScene) {
2186
+ let [domTarget, event] = eventName.split(':');
2187
+ if (event == null) {
2188
+ event = domTarget;
2189
+ domTarget = '';
2190
+ }
2191
+ const eventTarget = domTarget === 'window'
2192
+ ? target['ownerDocument']['defaultView']
2193
+ : target['ownerDocument'];
2194
+ return this.delegate.listen(eventTarget, event, callbackWithCdr);
2195
+ }
2183
2196
  if (target.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'three' ||
2184
2197
  (target.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'compound' &&
2185
2198
  target.__ngt_renderer__[6 /* NgtRendererClassId.compounded */])) {