@sumaris-net/ngx-components 0.26.1 → 0.26.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.
@@ -200,7 +200,7 @@ export class AppEntityEditor extends AppTabEditor {
200
200
  const idChanged = isNotNil(data.id)
201
201
  && this.previousDataId !== undefined // Ignore if first loading (=undefined)
202
202
  && this.previousDataId !== data.id;
203
- opts = Object.assign({ updateRoute: this._autoUpdateRoute && idChanged && !this.loading, openTabIndex: this._autoOpenNextTab && idChanged && this.computeNextTabIndex() }, opts);
203
+ opts = Object.assign({ updateRoute: this._autoUpdateRoute && idChanged && !this.loading, openTabIndex: this._autoOpenNextTab && idChanged && isNil(this.previousDataId) && this.computeNextTabIndex() }, opts);
204
204
  this.data = data;
205
205
  this.previousDataId = data.id || null;
206
206
  const promiseOrVoid = this.setValue(data);
@@ -459,9 +459,13 @@ export class AppEntityEditor extends AppTabEditor {
459
459
  this.error = userMessage;
460
460
  }
461
461
  /* -- protected methods -- */
462
+ /**
463
+ * Return undefined to keep same tab
464
+ * @protected
465
+ */
462
466
  computeNextTabIndex() {
463
467
  const nextTabIndex = this.selectedTabIndex + 1;
464
- return nextTabIndex < this.tabCount ? nextTabIndex : this.selectedTabIndex;
468
+ return nextTabIndex < this.tabCount ? nextTabIndex : undefined;
465
469
  }
466
470
  unload() {
467
471
  return __awaiter(this, void 0, void 0, function* () {
@@ -602,4 +606,4 @@ AppEntityEditor.ctorParameters = () => [
602
606
  { type: undefined },
603
607
  { type: AppEditorOptions, decorators: [{ type: Optional }] }
604
608
  ];
605
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWVkaXRvci5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9mb3JtL2VudGl0eS1lZGl0b3IuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixRQUFRLEVBR1IsUUFBUSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxjQUFjLEVBQUUsTUFBTSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE9BQU8sRUFBMEIsb0JBQW9CLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUNqRyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFJdEMsT0FBTyxFQUFDLFlBQVksRUFBRSxtQkFBbUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2pFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDMUMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxVQUFVLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRSxPQUFPLEVBQUMsS0FBSyxFQUFFLGVBQWUsRUFBcUIsTUFBTSx3QkFBd0IsQ0FBQztBQUVsRixPQUFPLEVBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDaEYsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQ25FLE9BQU8sRUFB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QWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIERpcmVjdGl2ZSxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3RvcixcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtBbGVydENvbnRyb2xsZXIsIFRvYXN0Q29udHJvbGxlcn0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuXG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7TW9tZW50fSBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHtBZGRUb1BhZ2VIaXN0b3J5T3B0aW9ucywgTG9jYWxTZXR0aW5nc1NlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2VzL2xvY2FsLXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHtmaWx0ZXJ9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7RW50aXR5fSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHtVc2FnZU1vZGV9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL3NldHRpbmdzLm1vZGVsJztcbmltcG9ydCB7Rm9ybUdyb3VwfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0FwcFRhYkVkaXRvciwgQXBwVGFiRWRpdG9yT3B0aW9uc30gZnJvbSAnLi9lZGl0b3IuY2xhc3MnO1xuaW1wb3J0IHtBcHBGb3JtVXRpbHN9IGZyb20gJy4vZm9ybS51dGlscyc7XG5pbXBvcnQge0FsZXJ0c30gZnJvbSAnLi4vLi4vc2hhcmVkL2FsZXJ0cyc7XG5pbXBvcnQge0Vycm9yQ29kZXMsIFNlcnZlckVycm9yQ29kZXN9IGZyb20gJy4uL3NlcnZpY2VzL2Vycm9ycyc7XG5pbXBvcnQge2lzSW50LCBpc05vdEVtcHR5QXJyYXksIGlzTnVtYmVyLCB0b051bWJlcn0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQge0VudGl0eVNlcnZpY2VMb2FkT3B0aW9ucywgSUVudGl0eVNlcnZpY2V9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9lbnRpdHktc2VydmljZS5jbGFzcyc7XG5pbXBvcnQge2lzTmlsLCBpc05pbE9yQmxhbmssIGlzTm90TmlsLCB0b0Jvb2xlYW59IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHtEYXRlRm9ybWF0UGlwZX0gZnJvbSAnLi4vLi4vc2hhcmVkL3BpcGVzL2RhdGUtZm9ybWF0LnBpcGUnO1xuaW1wb3J0IHtFTlZJUk9OTUVOVH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7SGlzdG9yeVBhZ2VSZWZlcmVuY2V9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL2hpc3RvcnkubW9kZWwnO1xuaW1wb3J0IHtXYWl0Rm9yT3B0aW9uc30gZnJvbSAnLi4vLi4vc2hhcmVkL29ic2VydmFibGVzJztcbmltcG9ydCB7Rm9ybUVycm9yQWRhcHRlciwgRm9ybUVycm9yVHJhbnNsYXRvck9wdGlvbnN9IGZyb20gJy4uLy4uL3NoYXJlZC92YWxpZGF0b3IvZm9ybS1lcnJvci1hZGFwdGVyLmNsYXNzJztcblxuZXhwb3J0IGNsYXNzIEFwcEVkaXRvck9wdGlvbnMgZXh0ZW5kcyBBcHBUYWJFZGl0b3JPcHRpb25zIHtcbiAgYXV0b0xvYWQ/OiBib29sZWFuO1xuICBhdXRvTG9hZERlbGF5PzogbnVtYmVyO1xuICBwYXRoSWRBdHRyaWJ1dGU/OiBzdHJpbmc7XG4gIGVuYWJsZUxpc3RlbkNoYW5nZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDaGFuZ2UgcGFnZSByb3V0ZSAod2luZG93IFVSTCkgd2hlbiBzYXZpbmcgZm9yIHRoZSBmaXJzdCB0aW1lXG4gICAqL1xuICBhdXRvVXBkYXRlUm91dGU/OiBib29sZWFuOyAvLyBEZWZhdWx0IHRvIHRydWVcblxuICAvKipcbiAgICogT3BlbiB0aGUgbmV4dCB0YWIsIGFmdGVyIHNhdmluZyBmb3IgdGhlIGZpcnN0IHRpbWVcbiAgICovXG4gIGF1dG9PcGVuTmV4dFRhYj86IGJvb2xlYW47IC8vIERlZmF1bHQgdG8gdHJ1ZVxuXG4gIGkxOG5QcmVmaXg/OiBzdHJpbmc7XG59XG5cbi8vIEBkeW5hbWljXG5ARGlyZWN0aXZlKClcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeFxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFwcEVudGl0eUVkaXRvcjxcbiAgVCBleHRlbmRzIEVudGl0eTxULCBJRD4sXG4gIFMgZXh0ZW5kcyBJRW50aXR5U2VydmljZTxULCBJRD4gPSBJRW50aXR5U2VydmljZTxULCBhbnk+LFxuICBJRCA9IG51bWJlclxuICA+XG4gIGV4dGVuZHMgQXBwVGFiRWRpdG9yPFQsIElELCBFbnRpdHlTZXJ2aWNlTG9hZE9wdGlvbnM+XG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuXG4gIHByaXZhdGUgX3VzYWdlTW9kZTogVXNhZ2VNb2RlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lbmFibGVMaXN0ZW5DaGFuZ2VzOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYXRoSWRBdHRyaWJ1dGU6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfYXV0b0xvYWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2F1dG9Mb2FkRGVsYXk6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfYXV0b1VwZGF0ZVJvdXRlOiBib29sZWFuO1xuICBwcml2YXRlIF9hdXRvT3Blbk5leHRUYWI6IGJvb2xlYW47XG5cbiAgcHJvdGVjdGVkIGRhdGVGb3JtYXQ6IERhdGVGb3JtYXRQaXBlO1xuICBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmO1xuICBwcm90ZWN0ZWQgc2V0dGluZ3M6IExvY2FsU2V0dGluZ3NTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgZm9ybUVycm9yQWRhcHRlcjogRm9ybUVycm9yQWRhcHRlcjtcblxuICBkYXRhOiBUO1xuICBzYXZpbmcgPSBmYWxzZTtcbiAgaGFzUmVtb3RlTGlzdGVuZXIgPSBmYWxzZTtcbiAgZGVmYXVsdEJhY2tIcmVmOiBzdHJpbmc7XG4gIGhpc3RvcnlJY29uOiB7aWNvbj86IHN0cmluZzsgbWF0SWNvbj86IHN0cmluZyB9O1xuXG4gICR0aXRsZSA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgb25VcGRhdGVWaWV3ID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xuXG4gIGdldCB1c2FnZU1vZGUoKTogVXNhZ2VNb2RlIHtcbiAgICByZXR1cm4gdGhpcy5fdXNhZ2VNb2RlO1xuICB9XG5cbiAgc2V0IHVzYWdlTW9kZSh2YWx1ZTogVXNhZ2VNb2RlKSB7XG4gICAgaWYgKHRoaXMuX3VzYWdlTW9kZSAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuX3VzYWdlTW9kZSA9IHZhbHVlO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBnZXQgaXNPbkZpZWxkTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5pc09uRmllbGRNb2RlKHRoaXMuX3VzYWdlTW9kZSk7XG4gIH1cblxuICBnZXQgaXNOZXdEYXRhKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc05pbCh0aGlzLmRhdGE/LmlkKTtcbiAgfVxuXG4gIGdldCBsb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9sb2FkaW5nO1xuICB9XG5cbiAgZ2V0IHNlcnZpY2UoKTogUyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2U7XG4gIH1cblxuICBtYXJrQXNTYXZpbmcob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KXtcbiAgICBpZiAoIXRoaXMuc2F2aW5nKSB7XG4gICAgICB0aGlzLnNhdmluZyA9IHRydWU7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIG1hcmtBc1NhdmVkKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSl7XG4gICAgaWYgKHRoaXMuc2F2aW5nKSB7XG4gICAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByb3RlY3RlZCBkYXRhVHlwZTogbmV3KCkgPT4gVCxcbiAgICBwcm90ZWN0ZWQgZGF0YVNlcnZpY2U/OiBTLFxuICAgIEBPcHRpb25hbCgpIG9wdGlvbnM/OiBBcHBFZGl0b3JPcHRpb25zXG4gICkge1xuICAgIHN1cGVyKGluamVjdG9yLmdldChBY3RpdmF0ZWRSb3V0ZSksXG4gICAgICBpbmplY3Rvci5nZXQoUm91dGVyKSxcbiAgICAgIGluamVjdG9yLmdldChBbGVydENvbnRyb2xsZXIpLFxuICAgICAgaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLFxuICAgICAgb3B0aW9ucyk7XG4gICAgb3B0aW9ucyA9IDxBcHBFZGl0b3JPcHRpb25zPntcbiAgICAgIC8vIERlZmF1bHQgb3B0aW9uc1xuICAgICAgZW5hYmxlTGlzdGVuQ2hhbmdlczogKGluamVjdG9yLmdldChFTlZJUk9OTUVOVCkubGlzdGVuUmVtb3RlQ2hhbmdlcyA9PT0gdHJ1ZSksXG4gICAgICBwYXRoSWRBdHRyaWJ1dGU6ICdpZCcsXG4gICAgICBhdXRvTG9hZDogdHJ1ZSxcbiAgICAgIGF1dG9VcGRhdGVSb3V0ZTogdHJ1ZSxcbiAgICAgIGkxOG5QcmVmaXg6ICcnLFxuXG4gICAgICAvLyBGb2xsb3dpbmcgb3B0aW9ucyBhcmUgb3ZlcnJpZGUgaW5zaWRlIG5nT25Jbml0KClcbiAgICAgIC8vIGF1dG9PcGVuTmV4dFRhYjogLi4uLFxuXG4gICAgICAvLyBPdmVycmlkZSBkZWZhdWx0c1xuICAgICAgLi4ub3B0aW9uc1xuICAgIH07XG5cbiAgICB0aGlzLnNldHRpbmdzID0gaW5qZWN0b3IuZ2V0KExvY2FsU2V0dGluZ3NTZXJ2aWNlKTtcbiAgICB0aGlzLmZvcm1FcnJvckFkYXB0ZXIgPSBpbmplY3Rvci5nZXQoRm9ybUVycm9yQWRhcHRlcik7XG4gICAgdGhpcy5jZCA9IGluamVjdG9yLmdldChDaGFuZ2VEZXRlY3RvclJlZik7XG4gICAgdGhpcy5kYXRlRm9ybWF0ID0gaW5qZWN0b3IuZ2V0KERhdGVGb3JtYXRQaXBlKTtcbiAgICB0aGlzLnRvYXN0Q29udHJvbGxlciA9IGluamVjdG9yLmdldChUb2FzdENvbnRyb2xsZXIpO1xuICAgIHRoaXMuX2VuYWJsZUxpc3RlbkNoYW5nZXMgPSBvcHRpb25zLmVuYWJsZUxpc3RlbkNoYW5nZXM7XG4gICAgdGhpcy5fcGF0aElkQXR0cmlidXRlID0gb3B0aW9ucy5wYXRoSWRBdHRyaWJ1dGU7XG4gICAgdGhpcy5fYXV0b0xvYWQgPSBvcHRpb25zLmF1dG9Mb2FkO1xuICAgIHRoaXMuX2F1dG9Mb2FkRGVsYXkgPSBvcHRpb25zLmF1dG9Mb2FkRGVsYXk7XG4gICAgdGhpcy5fYXV0b1VwZGF0ZVJvdXRlID0gb3B0aW9ucy5hdXRvVXBkYXRlUm91dGU7XG4gICAgdGhpcy5fYXV0b09wZW5OZXh0VGFiID0gb3B0aW9ucy5hdXRvT3Blbk5leHRUYWI7XG4gICAgdGhpcy5pMThuQ29udGV4dCA9IHtcbiAgICAgIHByZWZpeDogb3B0aW9ucy5pMThuUHJlZml4LFxuICAgICAgc3VmZml4OiAnJ1xuICAgIH07XG5cbiAgICAvLyBGT1IgREVWIE9OTFkgLS0tLVxuICAgIC8vdGhpcy5kZWJ1ZyA9ICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgIC8vIERlZmF1bHRzXG4gICAgdGhpcy5fYXV0b09wZW5OZXh0VGFiID0gdG9Cb29sZWFuKHRoaXMuX2F1dG9PcGVuTmV4dFRhYiwgIXRoaXMuaXNPbkZpZWxkTW9kZSk7XG4gICAgdGhpcy5oaXN0b3J5SWNvbiA9IHRoaXMuaGlzdG9yeUljb24gfHwge2ljb246ICdsaXN0J307XG5cbiAgICAvLyBSZWdpc3RlciBmb3Jtc1xuICAgIHRoaXMucmVnaXN0ZXJGb3JtcygpO1xuXG4gICAgLy8gRGlzYWJsZSBwYWdlLCBkdXJpbmcgbG9hZFxuICAgIHRoaXMuZGlzYWJsZSgpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xuXG4gICAgLy8gTG9hZCBkYXRhXG4gICAgaWYgKHRoaXMuX2F1dG9Mb2FkKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubG9hZEZyb21Sb3V0ZSgpLCB0aGlzLl9hdXRvTG9hZERlbGF5KTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuXG4gICAgdGhpcy4kdGl0bGUuY29tcGxldGUoKTtcbiAgICB0aGlzLiR0aXRsZS51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25VcGRhdGVWaWV3LmNvbXBsZXRlKCk7XG4gICAgdGhpcy5vblVwZGF0ZVZpZXcudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGRhdGEgZnJvbSB0aGUgc25hcHNob3Qgcm91dGVcbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGxvYWRGcm9tUm91dGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgcm91dGUgPSB0aGlzLnJvdXRlLnNuYXBzaG90O1xuICAgIGlmICghcm91dGUgfHwgaXNOaWxPckJsYW5rKHRoaXMuX3BhdGhJZEF0dHJpYnV0ZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGxvYWQgZnJvbSByb3V0ZTogbWlzc2luZyBcXCdyb3V0ZVxcJyBvciBcXCdvcHRpb25zLnBhdGhJZEF0dHJpYnV0ZVxcJy4nKTtcbiAgICB9XG4gICAgbGV0IGlkID0gcm91dGUucGFyYW1zW3RoaXMuX3BhdGhJZEF0dHJpYnV0ZV07XG4gICAgaWYgKGlzTmlsKGlkKSB8fCBpZCA9PT0gJ25ldycpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWQodW5kZWZpbmVkLCByb3V0ZS5wYXJhbXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDb252ZXJ0IGFzIG51bWJlciwgaWYgbmVlZFxuICAgICAgaWYgKGlzSW50KGlkKSkge1xuICAgICAgICBpZCA9IHBhcnNlSW50KGlkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmxvYWQoaWQsIHJvdXRlLnBhcmFtcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgZGF0YSBmcm9tIGlkLCB1c2luZyB0aGUgZGF0YVNlcnZpY2VcbiAgICpcbiAgICogQHBhcmFtIGlkXG4gICAqIEBwYXJhbSBvcHRzXG4gICAqL1xuICBhc3luYyBsb2FkKGlkPzogSUQsIG9wdHM/OiBFbnRpdHlTZXJ2aWNlTG9hZE9wdGlvbnMgJiB7XG4gICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgICBvcGVuVGFiSW5kZXg/OiBudW1iZXI7XG4gICAgdXBkYXRlVGFiQW5kUm91dGU/OiBib29sZWFuO1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfSkge1xuICAgIGlmICghdGhpcy5kYXRhU2VydmljZSkgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbG9hZCBkYXRhOiBtaXNzaW5nIFxcJ2RhdGFTZXJ2aWNlXFwnIScpO1xuXG4gICAgdGhpcy5lcnJvciA9IG51bGw7XG5cbiAgICAvLyBOZXcgZGF0YVxuICAgIGlmIChpc05pbChpZCkpIHtcblxuICAgICAgLy8gQ3JlYXRlIHVzaW5nIGRlZmF1bHQgdmFsdWVzXG4gICAgICBjb25zdCBkYXRhID0gbmV3IHRoaXMuZGF0YVR5cGUoKTtcbiAgICAgIHRoaXMuX3VzYWdlTW9kZSA9IHRoaXMuY29tcHV0ZVVzYWdlTW9kZShkYXRhKTtcbiAgICAgIGF3YWl0IHRoaXMub25OZXdFbnRpdHkoZGF0YSwgb3B0cyk7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZVZpZXcoZGF0YSwge1xuICAgICAgICBvcGVuVGFiSW5kZXg6IDAsXG4gICAgICAgIC4uLm9wdHNcbiAgICAgIH0pO1xuICAgICAgdGhpcy5tYXJrQXNMb2FkZWQoKTtcbiAgICB9XG5cbiAgICAvLyBMb2FkIGV4aXN0aW5nIGRhdGFcbiAgICBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmRhdGFTZXJ2aWNlLmxvYWQoaWQsIG9wdHMpO1xuICAgICAgICBpZiAoIWRhdGEpIHRocm93IHtjb2RlOiBFcnJvckNvZGVzLkRBVEFfTk9UX0ZPVU5EX0VSUk9SLCBtZXNzYWdlOiAnRVJST1IuREFUQV9OT19GT1VORCd9O1xuICAgICAgICB0aGlzLl91c2FnZU1vZGUgPSB0aGlzLmNvbXB1dGVVc2FnZU1vZGUoZGF0YSk7XG4gICAgICAgIGF3YWl0IHRoaXMub25FbnRpdHlMb2FkZWQoZGF0YSwgb3B0cyk7XG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlVmlldyhkYXRhLCBvcHRzKTtcbiAgICAgICAgdGhpcy5zdGFydExpc3RlblJlbW90ZUNoYW5nZXMoKTtcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5zZXRFcnJvcihlcnIpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSAwO1xuICAgICAgfVxuICAgICAgZmluYWxseSB7XG4gICAgICAgIHRoaXMubWFya0FzTG9hZGVkKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhcnRMaXN0ZW5SZW1vdGVDaGFuZ2VzKCkge1xuICAgIC8vIFNraXAgaWYgZGlzYWJsZSwgb3IgYWxyZWFkeSBsaXN0ZW5pbmdcbiAgICBpZiAodGhpcy5oYXNSZW1vdGVMaXN0ZW5lciB8fCAhdGhpcy5fZW5hYmxlTGlzdGVuQ2hhbmdlcyB8fCB0aGlzLmlzTmV3RGF0YSkgcmV0dXJuO1xuXG4gICAgLy8gTGlzdGVuIGZvciBjaGFuZ2VzIG9uIHNlcnZlclxuICAgIHRoaXMuaGFzUmVtb3RlTGlzdGVuZXIgPSB0cnVlO1xuXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UubGlzdGVuQ2hhbmdlcyh0aGlzLmRhdGEuaWQpXG4gICAgICAgIC5waXBlKGZpbHRlcihpc05vdE5pbCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IFQpID0+IHtcbiAgICAgICAgICBpZiAoZGF0YS51cGRhdGVEYXRlICYmIChkYXRhLnVwZGF0ZURhdGUgYXMgTW9tZW50KS5pc0FmdGVyKHRoaXMuZGF0YS51cGRhdGVEYXRlKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRpcnR5KSB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGBbZGF0YS1lZGl0b3JdIENoYW5nZXMgZGV0ZWN0ZWQgb24gc2VydmVyLCBhdCB7JHtkYXRhLnVwZGF0ZURhdGV9fSA6IHJlbG9hZGluZyBwYWdlLi4uYCk7XG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlVmlldyhkYXRhKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGBbZGF0YS1lZGl0b3JdIENoYW5nZXMgZGV0ZWN0ZWQgb24gc2VydmVyLCBhdCB7JHtkYXRhLnVwZGF0ZURhdGV9fSwgYnV0IHBhZ2UgaXMgZGlydHk6IHNraXAgcmVsb2FkaW5nLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmFkZCgoKSA9PiB0aGlzLmhhc1JlbW90ZUxpc3RlbmVyID0gZmFsc2UpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZVZpZXcoZGF0YTogVCB8IG51bGwsIG9wdHM/OiB7XG4gICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgICBvcGVuVGFiSW5kZXg/OiBudW1iZXI7XG4gICAgdXBkYXRlUm91dGU/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaWRDaGFuZ2VkID0gaXNOb3ROaWwoZGF0YS5pZClcbiAgICAgICYmIHRoaXMucHJldmlvdXNEYXRhSWQgIT09IHVuZGVmaW5lZCAvLyBJZ25vcmUgaWYgZmlyc3QgbG9hZGluZyAoPXVuZGVmaW5lZClcbiAgICAgICYmIHRoaXMucHJldmlvdXNEYXRhSWQgIT09IGRhdGEuaWQ7XG5cbiAgICBvcHRzID0ge1xuICAgICAgdXBkYXRlUm91dGU6IHRoaXMuX2F1dG9VcGRhdGVSb3V0ZSAmJiBpZENoYW5nZWQgJiYgIXRoaXMubG9hZGluZyxcbiAgICAgIG9wZW5UYWJJbmRleDogdGhpcy5fYXV0b09wZW5OZXh0VGFiICYmIGlkQ2hhbmdlZCAmJiB0aGlzLmNvbXB1dGVOZXh0VGFiSW5kZXgoKSxcbiAgICAgIC4uLm9wdHNcbiAgICB9O1xuXG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB0aGlzLnByZXZpb3VzRGF0YUlkID0gZGF0YS5pZCB8fCBudWxsO1xuXG4gICAgY29uc3QgcHJvbWlzZU9yVm9pZCA9IHRoaXMuc2V0VmFsdWUoZGF0YSk7XG4gICAgaWYgKHByb21pc2VPclZvaWQpIGF3YWl0IHByb21pc2VPclZvaWQ7XG5cbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICB0aGlzLm1hcmtBc1VudG91Y2hlZCgpO1xuICAgICAgdGhpcy51cGRhdGVWaWV3U3RhdGUoZGF0YSk7XG5cbiAgICAgIC8vIE5lZWQgdG8gdXBkYXRlIHJvdXRlXG4gICAgICBpZiAob3B0cy51cGRhdGVSb3V0ZSA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZVRhYkFuZFJvdXRlKGRhdGEsIG9wdHMpXG4gICAgICAgICAgLy8gVXBkYXRlIHRoZSB0aXRsZSAtIHNob3VsZCBiZSBleGVjdXRlZCBBRlRFUiB1cGRhdGVSb3V0ZSBiZWNhdXNlIG9mIHBhdGggY2hhbmdlIC0gZml4ICMxODVcbiAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLnVwZGF0ZVRpdGxlKGRhdGEpKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyBVcGRhdGUgdGhlIG5leHQgdGFiXG4gICAgICAgIHRoaXMudXBkYXRlVGFiSW5kZXgob3B0cy5vcGVuVGFiSW5kZXgpO1xuXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgdGl0bGUuXG4gICAgICAgIHRoaXMudXBkYXRlVGl0bGUoZGF0YSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMub25VcGRhdGVWaWV3LmVtaXQoZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBvciBkaXNhYmxlIHN0YXRlXG4gICAqL1xuICB1cGRhdGVWaWV3U3RhdGUoZGF0YTogVCwgb3B0cz86IHtvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICh0aGlzLmlzTmV3RGF0YSB8fCB0aGlzLmNhblVzZXJXcml0ZShkYXRhKSkge1xuICAgICAgdGhpcy5lbmFibGUob3B0cyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5kaXNhYmxlKG9wdHMpO1xuXG4gICAgICAvLyBBbGxvdyB0byBzb3J0IHRhYmxlXG4gICAgICB0aGlzLnRhYmxlcy5mb3JFYWNoKHQgPT4gdC5lbmFibGVTb3J0KCkpO1xuICAgIH1cblxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgcm91dGUgbG9jYXRpb24sIGFuZCBvcGVuIHRoZSBuZXh0IHRhYlxuICAgKi9cbiAgYXN5bmMgdXBkYXRlVGFiQW5kUm91dGUoZGF0YTogVCwgb3B0cz86IHtcbiAgICBvcGVuVGFiSW5kZXg/OiBudW1iZXI7XG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcblxuICAgIHRoaXMucXVlcnlQYXJhbXMgPSB0aGlzLnF1ZXJ5UGFyYW1zIHx8IHt9O1xuXG4gICAgLy8gT3BlbiB0aGUgbmV4dCB0YWJcbiAgICB0aGlzLnVwZGF0ZVRhYkluZGV4KG9wdHMgJiYgb3B0cy5vcGVuVGFiSW5kZXgpO1xuXG4gICAgLy8gU2F2ZSB0aGUgb3BlbmVkIHRhYiBpbnRvIHRoZSBxdWVyeVBhcmFtc1xuICAgIHRoaXMucXVlcnlQYXJhbXMudGFiID0gdGhpcy5zZWxlY3RlZFRhYkluZGV4O1xuXG4gICAgLy8gVXBkYXRlIHJvdXRlIGxvY2F0aW9uXG4gICAgY29uc3QgZm9yY2VkUXVlcnlQYXJhbXMgPSB7fTtcbiAgICBmb3JjZWRRdWVyeVBhcmFtc1t0aGlzLl9wYXRoSWRBdHRyaWJ1dGVdID0gZGF0YSAmJiBpc05vdE5pbChkYXRhLmlkKSA/IGRhdGEuaWQgOiAnbmV3JztcbiAgICBpZiAoZGF0YSAmJiBpc05vdE5pbChkYXRhLmlkKSkge1xuICAgICAgYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuJ10sIHtcbiAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcbiAgICAgICAgcXVlcnlQYXJhbXM6IHsuLi50aGlzLnF1ZXJ5UGFyYW1zLCAuLi5mb3JjZWRRdWVyeVBhcmFtc31cbiAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi4nLCAnbmV3J10sIHtcbiAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcbiAgICAgICAgcXVlcnlQYXJhbXM6IHsuLi50aGlzLnF1ZXJ5UGFyYW1zLCAuLi5mb3JjZWRRdWVyeVBhcmFtc31cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMudXBkYXRlUm91dGUoZGF0YSwgdGhpcy5xdWVyeVBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSByb3V0ZSBsb2NhdGlvbiwgYW5kIG9wZW4gdGhlIG5leHQgdGFiXG4gICAqL1xuICB1cGRhdGVUYWJJbmRleCh0YWJJbmRleD86IG51bWJlcikge1xuICAgIGlmIChpc05vdE5pbCh0YWJJbmRleCkgJiYgdGFiSW5kZXggPiB0aGlzLnNlbGVjdGVkVGFiSW5kZXgpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IHRhYkluZGV4O1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzYXZlQW5kQ2xvc2UoZXZlbnQ6IEV2ZW50LCBvcHRpb25zPzogYW55KTogUHJvbWlzZTxib29sZWFuPiB7XG5cbiAgICBjb25zdCBzYXZlZCA9IGF3YWl0IHRoaXMuc2F2ZShldmVudCk7XG4gICAgaWYgKHNhdmVkKSB7XG4gICAgICBhd2FpdCB0aGlzLmNsb3NlKGV2ZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHNhdmVkO1xuICB9XG5cbiAgYXN5bmMgY2xvc2UoZXZlbnQ6IEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nb0JhY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIHRoZSBlZGl0b3IsIGJ5IGNhbGxpbmcgdGhlIGRhdGFTZXJ2aWNlLnNhdmUoKS5cbiAgICogRW5zdXJlIHRoYXQgZWRpdG9yIGlmIHZhbGlkLiBJZiBub3QsIGRpc3BsYXkgYW4gZXJyb3JcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIEBwYXJhbSBvcHRzXG4gICAqL1xuICBhc3luYyBzYXZlKGV2ZW50PzogRXZlbnQsIG9wdHM/OiBhbnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5sb2FkaW5nIHx8IHRoaXMuc2F2aW5nKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbZGF0YS1lZGl0b3JdIFNraXAgc2F2ZTogZWRpdG9yIGlzIGJ1c3kgKGxvYWRpbmcgb3Igc2F2aW5nKScpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZGlydHkpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tkYXRhLWVkaXRvcl0gU2tpcCBzYXZlOiBlZGl0b3Igbm90IGRpcnR5Jyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBXYWl0IGVuZCBvZiBhc3luYyB2YWxpZGF0aW9uXG4gICAgYXdhaXQgdGhpcy53YWl0V2hpbGVQZW5kaW5nKCk7XG5cbiAgICAvLyBJZiBpbnZhbGlkXG4gICAgaWYgKHRoaXMuaW52YWxpZCkge1xuICAgICAgdGhpcy5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgICB0aGlzLmxvZ0Zvcm1FcnJvcnMoKTtcbiAgICAgIHRoaXMub3BlbkZpcnN0SW52YWxpZFRhYigpO1xuXG4gICAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5tYXJrQXNTYXZpbmcoKTtcbiAgICB0aGlzLmVycm9yID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1tkYXRhLWVkaXRvcl0gU2F2aW5nIGRhdGEuLi4nKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBHZXQgZGF0YVxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZ2V0VmFsdWUoKTtcblxuICAgICAgdGhpcy5kaXNhYmxlKCk7XG5cbiAgICAgIC8vIFNhdmUgZm9ybVxuICAgICAgY29uc3QgdXBkYXRlZERhdGEgPSBhd2FpdCB0aGlzLmRhdGFTZXJ2aWNlLnNhdmUoZGF0YSwgb3B0cyk7XG5cbiAgICAgIGF3YWl0IHRoaXMub25FbnRpdHlTYXZlZCh1cGRhdGVkRGF0YSk7XG5cbiAgICAgIC8vIFVwZGF0ZSB0aGUgdmlldyAoZS5nIG1ldGFkYXRhKVxuICAgICAgYXdhaXQgdGhpcy51cGRhdGVWaWV3KHVwZGF0ZWREYXRhLCBvcHRzKTtcblxuICAgICAgLy8gU3Vic2NyaWJlIHRvIHJlbW90ZSBjaGFuZ2VzXG4gICAgICBpZiAoIXRoaXMuaGFzUmVtb3RlTGlzdGVuZXIpIHRoaXMuc3RhcnRMaXN0ZW5SZW1vdGVDaGFuZ2VzKCk7XG5cbiAgICAgIHRoaXMuc3VibWl0dGVkID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5zdWJtaXR0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5zZXRFcnJvcihlcnIpO1xuICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gMDtcbiAgICAgIHRoaXMuc2Nyb2xsVG9Ub3AoKTsgLy8gU2Nyb2xsIHRvIHRvcCAodG8gc2hvdyBlcnJvcilcbiAgICAgIHRoaXMubWFya0FzRGlydHkoKTtcbiAgICAgIHRoaXMuZW5hYmxlKCk7XG5cbiAgICAgIC8vIENvbmN1cnJlbnQgY2hhbmdlIG9uIHBvZFxuICAgICAgaWYgKGVyci5jb2RlID09PSBTZXJ2ZXJFcnJvckNvZGVzLkJBRF9VUERBVEVfREFURSAmJiBpc05vdE5pbCh0aGlzLmRhdGEuaWQpKSB7XG4gICAgICAgIC8vIENhbGwgYSBkYXRhIHJlbG9hZCAoaW4gYmFja2dyb3VuZCksIHRvIHVwZGF0ZSB0aGUgR3JhcGhRTCBjYWNoZSwgYW5kIGFsbG93IHRvIGNhbmNlbCBjaGFuZ2VzXG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2UubG9hZCh0aGlzLmRhdGEuaWQsIHtmZXRjaFBvbGljeTogJ25ldHdvcmstb25seSd9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKCdbZGF0YS1lZGl0b3JdIERhdGEgY2FjaGUgcmVsb2FkZWQuIFVzZXIgY2FuIHJlbG9hZCBwYWdlJyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMubWFya0FzU2F2ZWQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBkYXRhIChpZiBkaXJ0eSBhbmQgdmFsaWQpLCBhbmQgcmV0dXJuIGl0LiBPdGhlcndpc2UsIHJldHVybiBuaWwgdmFsdWUuXG4gICAqL1xuICBhc3luYyBzYXZlQW5kR2V0RGF0YUlmVmFsaWQoKTogUHJvbWlzZTxUIHwgdW5kZWZpbmVkPiB7XG4gICAgLy8gRm9ybSBpcyBub3QgdmFsaWRcbiAgICBpZiAoIXRoaXMudmFsaWQpIHtcblxuICAgICAgLy8gTWFrZSBzdXJlIHZhbGlkYXRpb24gaXMgZmluaXNoZWRcbiAgICAgIGF3YWl0IEFwcEZvcm1VdGlscy53YWl0V2hpbGVQZW5kaW5nKHRoaXMpO1xuXG4gICAgICAvLyBJZiBpbnZhbGlkOiBPcGVuIHRoZSBmaXJzdCB0YWIgaW4gZXJyb3JcbiAgICAgIGlmICh0aGlzLmludmFsaWQpIHtcbiAgICAgICAgdGhpcy5vcGVuRmlyc3RJbnZhbGlkVGFiKCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIENvbnRpbnVlICh2YWxpZClcbiAgICB9XG5cbiAgICAvLyBGb3JtIGlzIHZhbGlkLCBidXQgbm90IHNhdmVkXG4gICAgaWYgKHRoaXMuZGlydHkpIHtcbiAgICAgIGNvbnN0IHNhdmVkID0gYXdhaXQgdGhpcy5zYXZlKG5ldyBFdmVudCgnc2F2ZScpKTtcbiAgICAgIGlmICghc2F2ZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gVmFsaWQgYW5kIHNhdmVkIGRhdGFcbiAgICByZXR1cm4gdGhpcy5kYXRhO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlKGV2ZW50PzogVUlFdmVudCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLmxvYWRpbmcgfHwgdGhpcy5zYXZpbmcpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIEFzayB1c2VyIGNvbmZpcm1hdGlvblxuICAgIGNvbnN0IGNvbmZpcm1hdGlvbiA9IGF3YWl0IEFsZXJ0cy5hc2tEZWxldGVDb25maXJtYXRpb24odGhpcy5hbGVydEN0cmwsIHRoaXMudHJhbnNsYXRlKTtcbiAgICBpZiAoIWNvbmZpcm1hdGlvbikgcmV0dXJuO1xuXG4gICAgY29uc29sZS5kZWJ1ZygnW2RhdGEtZWRpdG9yXSBBc2tpbmcgdG8gZGVsZXRlLi4uJyk7XG5cbiAgICB0aGlzLm1hcmtBc1NhdmluZygpO1xuICAgIHRoaXMuZXJyb3IgPSB1bmRlZmluZWQ7XG5cbiAgICB0cnkge1xuICAgICAgLy8gR2V0IGRhdGFcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmdldFZhbHVlKCk7XG4gICAgICBjb25zdCBpc05ldyA9IHRoaXMuaXNOZXdEYXRhO1xuXG4gICAgICB0aGlzLmRpc2FibGUoKTtcblxuICAgICAgaWYgKCFpc05ldykge1xuICAgICAgICBhd2FpdCB0aGlzLmRhdGFTZXJ2aWNlLmRlbGV0ZShkYXRhKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5vbkVudGl0eURlbGV0ZWQoZGF0YSk7XG5cbiAgICAgIC8vIFJlbW92ZSBwYWdlIGhpc3RvcnlcbiAgICAgIHRoaXMucmVtb3ZlUGFnZUhpc3RvcnkoKTtcblxuXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XG4gICAgICB0aGlzLnNldEVycm9yKGVycik7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSAwO1xuICAgICAgdGhpcy5tYXJrQXNTYXZlZCgpO1xuICAgICAgdGhpcy5lbmFibGUoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBXYWl0LCB0aGVuIGdvIGJhY2sgKHdhaXQgaXMgbmVlZCBpbiBvcmRlciB0byB1cGRhdGUgYmFjayBocmVmIGlzIG5lZWQpXG4gICAgYXdhaXQgc2V0VGltZW91dCgoKSA9PiB0aGlzLmdvQmFjaygpLCA1MDApO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyByZWxvYWQoKSB7XG4gICAgdGhpcy5tYXJrQXNMb2FkaW5nKCk7XG4gICAgYXdhaXQgdGhpcy5sb2FkKHRoaXMuZGF0YSAmJiB0aGlzLmRhdGEuaWQpO1xuICB9XG5cbiAgYXN5bmMgZ29CYWNrKGV2ZW50PzogRXZlbnQpOiBQcm9taXNlPHZvaWQgfCBib29sZWFuPiB7XG4gICAgLy8gR28gYmFja1xuICAgIGlmICh0aGlzLnRvb2xiYXI/LmNhbkdvQmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMudG9vbGJhci5nb0JhY2soKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5kZWZhdWx0QmFja0hyZWYpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMuZGVmYXVsdEJhY2tIcmVmKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQmFjayB0byBob21lXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgnLycpO1xuICAgIH1cbiAgfVxuXG4gIHNldEVycm9yKGVycjogYW55KSB7XG4gICAgY29uc29sZS5lcnJvcignW2VudGl0eS1lZGl0b3JdIEVycm9yOiAnICsgZXJyICYmIGVyci5tZXNzYWdlIHx8ICcnLCBlcnIpO1xuICAgIGxldCB1c2VyTWVzc2FnZSA9IGVyciAmJiBlcnIubWVzc2FnZSAmJiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGVyci5tZXNzYWdlKSB8fCBlcnI7XG5cbiAgICAvLyBBZGQgZGV0YWlscyBlcnJvciAoaWYgYW55KSB1bmRlciB0aGUgbWFpbiBtZXNzYWdlXG4gICAgY29uc3QgZGV0YWlsTWVzc2FnZSA9IGVyciAmJiBlcnIuZGV0YWlscyAmJiAoZXJyLmRldGFpbHMubWVzc2FnZSB8fCBlcnIuZGV0YWlscykgfHwgdW5kZWZpbmVkO1xuICAgIGlmIChkZXRhaWxNZXNzYWdlKSB7XG4gICAgICB1c2VyTWVzc2FnZSArPSBgPGJyLz48c21hbGwgY2xhc3M9XCJoaWRkZW4teHMgaGlkZGVuLXNtXCIgdGl0bGU9XCIke2RldGFpbE1lc3NhZ2V9XCI+YDtcbiAgICAgIHVzZXJNZXNzYWdlICs9IGRldGFpbE1lc3NhZ2UubGVuZ3RoIDwgNzAgPyBkZXRhaWxNZXNzYWdlIDogZGV0YWlsTWVzc2FnZS5zdWJzdHJpbmcoMCwgNjcpICsgJy4uLic7XG4gICAgICB1c2VyTWVzc2FnZSArPSAnPC9zbWFsbD4nO1xuICAgIH1cbiAgICB0aGlzLmVycm9yID0gdXNlck1lc3NhZ2U7XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgYWJzdHJhY3QgbWV0aG9kcyAodG8gb3ZlcnJpZGUpIC0tICovXG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHJlZ2lzdGVyRm9ybXMoKTtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgY29tcHV0ZVRpdGxlKGRhdGE6IFQpOiBQcm9taXNlPHN0cmluZz47XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHNldFZhbHVlKGRhdGE6IFQpOiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0IGZvcm0oKTogRm9ybUdyb3VwO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRGaXJzdEludmFsaWRUYWJJbmRleCgpOiBudW1iZXI7XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGNhblVzZXJXcml0ZShkYXRhOiBUKTogYm9vbGVhbjtcblxuXG4gIC8qIC0tIHByb3RlY3RlZCBtZXRob2RzIC0tICovXG5cbiAgcHJvdGVjdGVkIGNvbXB1dGVOZXh0VGFiSW5kZXgoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBuZXh0VGFiSW5kZXggPSB0aGlzLnNlbGVjdGVkVGFiSW5kZXggKyAxO1xuICAgIHJldHVybiBuZXh0VGFiSW5kZXggPCB0aGlzLnRhYkNvdW50ID8gbmV4dFRhYkluZGV4IDogdGhpcy5zZWxlY3RlZFRhYkluZGV4O1xuICB9XG5cbiAgYXN5bmMgdW5sb2FkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuZm9ybS5yZXNldCgpO1xuICAgIHRoaXMucmVnaXN0ZXJGb3JtcygpO1xuICAgIHRoaXMuX2RpcnR5ID0gZmFsc2U7XG4gICAgdGhpcy5kYXRhID0gbnVsbDtcbiAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG9uQmVmb3JlRW50aXR5TG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBjYW4gYmUgb3ZlcndyaXRlIGJ5IHN1YmNsYXNzZXNcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBvbk5ld0VudGl0eShkYXRhOiBULCBvcHRpb25zPzogRW50aXR5U2VydmljZUxvYWRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gY2FuIGJlIG92ZXJ3cml0ZSBieSBzdWJjbGFzc2VzXG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgb25FbnRpdHlMb2FkZWQoZGF0YTogVCwgb3B0aW9ucz86IEVudGl0eVNlcnZpY2VMb2FkT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIGNhbiBiZSBvdmVyd3JpdGUgYnkgc3ViY2xhc3Nlc1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG9uRW50aXR5U2F2ZWQoZGF0YTogVCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIGNhbiBiZSBvdmVyd3JpdGUgYnkgc3ViY2xhc3Nlc1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG9uRW50aXR5RGVsZXRlZChkYXRhOiBUKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gY2FuIGJlIG92ZXJ3cml0ZSBieSBzdWJjbGFzc2VzXG4gIH1cblxuICBwcm90ZWN0ZWQgY29tcHV0ZVVzYWdlTW9kZShkYXRhOiBUKTogVXNhZ2VNb2RlIHtcbiAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5pc1VzYWdlTW9kZSgnRklFTEQnKSA/ICdGSUVMRCcgOiAnREVTSyc7XG4gIH1cblxuICBwcm90ZWN0ZWQgd2FpdFdoaWxlUGVuZGluZyhvcHRzPzogV2FpdEZvck9wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gQXBwRm9ybVV0aWxzLndhaXRXaGlsZVBlbmRpbmcodGhpcywgb3B0cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0VmFsdWUoKTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3QganNvbiA9IGF3YWl0IHRoaXMuZ2V0SnNvblZhbHVlVG9TYXZlKCk7XG5cbiAgICBjb25zdCByZXMgPSBuZXcgdGhpcy5kYXRhVHlwZSgpO1xuICAgIHJlcy5mcm9tT2JqZWN0KGpzb24pO1xuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRKc29uVmFsdWVUb1NhdmUoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuZm9ybS52YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgdGl0bGVcbiAgICpcbiAgICogQHBhcmFtIGRhdGFcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyB1cGRhdGVUaXRsZShkYXRhPzogVCkge1xuICAgIGRhdGEgPSBkYXRhIHx8IHRoaXMuZGF0YTtcbiAgICBjb25zdCB0aXRsZSA9IGF3YWl0IHRoaXMuY29tcHV0ZVRpdGxlKGRhdGEpO1xuICAgIHRoaXMuJHRpdGxlLm5leHQodGl0bGUpO1xuXG4gICAgLy8gSWYgTk9UIGRhdGEsIHRoZW4gYWRkIHRvIHBhZ2UgaGlzdG9yeVxuICAgIGlmICghdGhpcy5pc05ld0RhdGEpIHtcbiAgICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCB0aGlzLmNvbXB1dGVQYWdlSGlzdG9yeSh0aXRsZSk7XG4gICAgICByZXR1cm4gdGhpcy5hZGRUb1BhZ2VIaXN0b3J5KHBhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBhZGRUb1BhZ2VIaXN0b3J5KHBhZ2U6IEhpc3RvcnlQYWdlUmVmZXJlbmNlLCBvcHRzPzogQWRkVG9QYWdlSGlzdG9yeU9wdGlvbnMpIHtcbiAgICBpZiAoIXBhZ2UpIHJldHVybjsgLy8gU2tpcFxuXG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MuYWRkVG9QYWdlSGlzdG9yeShwYWdlLCB7XG4gICAgICByZW1vdmVQYXRoUXVlcnlQYXJhbXM6IHRydWUsXG4gICAgICByZW1vdmVUaXRsZVNtYWxsVGFnOiB0cnVlLFxuICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgIC4uLm9wdHNcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjb21wdXRlUGFnZUhpc3RvcnkodGl0bGU6IHN0cmluZyk6IFByb21pc2U8SGlzdG9yeVBhZ2VSZWZlcmVuY2U+IHtcbiAgICByZXR1cm4ge1xuICAgICAgdGl0bGUsXG4gICAgICBwYXRoOiB0aGlzLnJvdXRlci51cmxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHJlbW92ZVBhZ2VIaXN0b3J5KG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLnJlbW92ZVBhZ2VIaXN0b3J5KHRoaXMucm91dGVyLnVybCwgb3B0cyk7XG4gIH1cblxuXG4gIHByb3RlY3RlZCBjb21wdXRlUGFnZVVybChpZDogSUR8J25ldycpOiBzdHJpbmcgfCBhbnlbXSB7XG4gICAgY29uc3QgcGFyZW50VXJsID0gdGhpcy5nZXRQYXJlbnRQYWdlVXJsKCk7XG4gICAgcmV0dXJuIHBhcmVudFVybCAmJiBgJHtwYXJlbnRVcmx9LyR7aWR9YDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRQYXJlbnRQYWdlVXJsKHdpdGhRdWVyeVBhcmFtcz86IGJvb2xlYW4pIHtcbiAgICBsZXQgcGFyZW50VXJsID0gdGhpcy5kZWZhdWx0QmFja0hyZWY7XG5cbiAgICAvLyBSZW1vdmUgcXVlcnkgcGFyYW1zXG4gICAgaWYgKHdpdGhRdWVyeVBhcmFtcyAhPT0gdHJ1ZSAmJiBwYXJlbnRVcmwgJiYgcGFyZW50VXJsLmluZGV4T2YoJz8nKSAhPT0gLTEpIHtcbiAgICAgIHBhcmVudFVybCA9IHBhcmVudFVybC5zdWJzdHIoMCwgcGFyZW50VXJsLmluZGV4T2YoJz8nKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmVudFVybDtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXJrRm9yQ2hlY2soKSB7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qIC0tIHByaXZhdGUgZnVuY3Rpb25zIC0tICovXG5cbiAgLyoqXG4gICAqIE9wZW4gdGhlIGZpcnN0IHRhYiB0aGF0IGlzIGludmFsaWRcbiAgICovXG4gIHByaXZhdGUgb3BlbkZpcnN0SW52YWxpZFRhYigpIHtcbiAgICBjb25zdCBpbnZhbGlkVGFiSW5kZXggPSB0aGlzLmdldEZpcnN0SW52YWxpZFRhYkluZGV4KCk7XG4gICAgaWYgKGludmFsaWRUYWJJbmRleCAhPT0gLTEgJiYgdGhpcy5zZWxlY3RlZFRhYkluZGV4ICE9PSBpbnZhbGlkVGFiSW5kZXgpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IGludmFsaWRUYWJJbmRleDtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHVwZGF0ZVJvdXRlKGRhdGE6IFQsIHF1ZXJ5UGFyYW1zOiBhbnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5jb21wdXRlUGFnZVVybChpc05vdE5pbChkYXRhLmlkKSA/IGRhdGEuaWQgOiAnbmV3Jyk7XG4gICAgY29uc3QgY29tbWFuZHM6IGFueVtdID0gKHBhdGggJiYgdHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKSA/IHBhdGguc3BsaXQoJy8nKSA6IHBhdGggYXMgYW55W107XG4gICAgaWYgKGlzTm90RW1wdHlBcnJheShjb21tYW5kcykpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZShjb21tYW5kcywge1xuICAgICAgICByZXBsYWNlVXJsOiB0cnVlLFxuICAgICAgICBxdWVyeVBhcmFtczogdGhpcy5xdWVyeVBhcmFtc1xuICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKCdTa2lwIHBhZ2Ugcm91dGUgdXBkYXRlLiBJbnZhbGlkIHBhZ2UgcGF0aDogJywgcGF0aCk7XG4gICAgfVxuICB9XG59XG5cbiJdfQ==
609
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWVkaXRvci5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9mb3JtL2VudGl0eS1lZGl0b3IuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixRQUFRLEVBR1IsUUFBUSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxjQUFjLEVBQUUsTUFBTSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE9BQU8sRUFBMEIsb0JBQW9CLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUNqRyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFJdEMsT0FBTyxFQUFDLFlBQVksRUFBRSxtQkFBbUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2pFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDMUMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxVQUFVLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRSxPQUFPLEVBQUMsS0FBSyxFQUFFLGVBQWUsRUFBcUIsTUFBTSx3QkFBd0IsQ0FBQztBQUVsRixPQUFPLEVBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDaEYsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQ25FLE9BQU8sRUFB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QVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgRGlyZWN0aXZlLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdG9yLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge0FsZXJ0Q29udHJvbGxlciwgVG9hc3RDb250cm9sbGVyfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5cbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1N1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtNb21lbnR9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQge0FkZFRvUGFnZUhpc3RvcnlPcHRpb25zLCBMb2NhbFNldHRpbmdzU2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMvbG9jYWwtc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQge2ZpbHRlcn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtFbnRpdHl9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQge1VzYWdlTW9kZX0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvc2V0dGluZ3MubW9kZWwnO1xuaW1wb3J0IHtGb3JtR3JvdXB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7QXBwVGFiRWRpdG9yLCBBcHBUYWJFZGl0b3JPcHRpb25zfSBmcm9tICcuL2VkaXRvci5jbGFzcyc7XG5pbXBvcnQge0FwcEZvcm1VdGlsc30gZnJvbSAnLi9mb3JtLnV0aWxzJztcbmltcG9ydCB7QWxlcnRzfSBmcm9tICcuLi8uLi9zaGFyZWQvYWxlcnRzJztcbmltcG9ydCB7RXJyb3JDb2RlcywgU2VydmVyRXJyb3JDb2Rlc30gZnJvbSAnLi4vc2VydmljZXMvZXJyb3JzJztcbmltcG9ydCB7aXNJbnQsIGlzTm90RW1wdHlBcnJheSwgaXNOdW1iZXIsIHRvTnVtYmVyfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7RW50aXR5U2VydmljZUxvYWRPcHRpb25zLCBJRW50aXR5U2VydmljZX0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2VudGl0eS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7aXNOaWwsIGlzTmlsT3JCbGFuaywgaXNOb3ROaWwsIHRvQm9vbGVhbn0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQge0RhdGVGb3JtYXRQaXBlfSBmcm9tICcuLi8uLi9zaGFyZWQvcGlwZXMvZGF0ZS1mb3JtYXQucGlwZSc7XG5pbXBvcnQge0VOVklST05NRU5UfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuaW1wb3J0IHtIaXN0b3J5UGFnZVJlZmVyZW5jZX0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvaGlzdG9yeS5tb2RlbCc7XG5pbXBvcnQge1dhaXRGb3JPcHRpb25zfSBmcm9tICcuLi8uLi9zaGFyZWQvb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHtGb3JtRXJyb3JBZGFwdGVyLCBGb3JtRXJyb3JUcmFuc2xhdG9yT3B0aW9uc30gZnJvbSAnLi4vLi4vc2hhcmVkL3ZhbGlkYXRvci9mb3JtLWVycm9yLWFkYXB0ZXIuY2xhc3MnO1xuXG5leHBvcnQgY2xhc3MgQXBwRWRpdG9yT3B0aW9ucyBleHRlbmRzIEFwcFRhYkVkaXRvck9wdGlvbnMge1xuICBhdXRvTG9hZD86IGJvb2xlYW47XG4gIGF1dG9Mb2FkRGVsYXk/OiBudW1iZXI7XG4gIHBhdGhJZEF0dHJpYnV0ZT86IHN0cmluZztcbiAgZW5hYmxlTGlzdGVuQ2hhbmdlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENoYW5nZSBwYWdlIHJvdXRlICh3aW5kb3cgVVJMKSB3aGVuIHNhdmluZyBmb3IgdGhlIGZpcnN0IHRpbWVcbiAgICovXG4gIGF1dG9VcGRhdGVSb3V0ZT86IGJvb2xlYW47IC8vIERlZmF1bHQgdG8gdHJ1ZVxuXG4gIC8qKlxuICAgKiBPcGVuIHRoZSBuZXh0IHRhYiwgYWZ0ZXIgc2F2aW5nIGZvciB0aGUgZmlyc3QgdGltZVxuICAgKi9cbiAgYXV0b09wZW5OZXh0VGFiPzogYm9vbGVhbjsgLy8gRGVmYXVsdCB0byB0cnVlXG5cbiAgaTE4blByZWZpeD86IHN0cmluZztcbn1cblxuLy8gQGR5bmFtaWNcbkBEaXJlY3RpdmUoKVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtY2xhc3Mtc3VmZml4XG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXBwRW50aXR5RWRpdG9yPFxuICBUIGV4dGVuZHMgRW50aXR5PFQsIElEPixcbiAgUyBleHRlbmRzIElFbnRpdHlTZXJ2aWNlPFQsIElEPiA9IElFbnRpdHlTZXJ2aWNlPFQsIGFueT4sXG4gIElEID0gbnVtYmVyXG4gID5cbiAgZXh0ZW5kcyBBcHBUYWJFZGl0b3I8VCwgSUQsIEVudGl0eVNlcnZpY2VMb2FkT3B0aW9ucz5cbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgcHJpdmF0ZSBfdXNhZ2VNb2RlOiBVc2FnZU1vZGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VuYWJsZUxpc3RlbkNoYW5nZXM6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhdGhJZEF0dHJpYnV0ZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hdXRvTG9hZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfYXV0b0xvYWREZWxheTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hdXRvVXBkYXRlUm91dGU6IGJvb2xlYW47XG4gIHByaXZhdGUgX2F1dG9PcGVuTmV4dFRhYjogYm9vbGVhbjtcblxuICBwcm90ZWN0ZWQgZGF0ZUZvcm1hdDogRGF0ZUZvcm1hdFBpcGU7XG4gIHByb3RlY3RlZCBjZDogQ2hhbmdlRGV0ZWN0b3JSZWY7XG4gIHByb3RlY3RlZCBzZXR0aW5nczogTG9jYWxTZXR0aW5nc1NlcnZpY2U7XG4gIHByb3RlY3RlZCBmb3JtRXJyb3JBZGFwdGVyOiBGb3JtRXJyb3JBZGFwdGVyO1xuXG4gIGRhdGE6IFQ7XG4gIHNhdmluZyA9IGZhbHNlO1xuICBoYXNSZW1vdGVMaXN0ZW5lciA9IGZhbHNlO1xuICBkZWZhdWx0QmFja0hyZWY6IHN0cmluZztcbiAgaGlzdG9yeUljb246IHtpY29uPzogc3RyaW5nOyBtYXRJY29uPzogc3RyaW5nIH07XG5cbiAgJHRpdGxlID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuICBvblVwZGF0ZVZpZXcgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG5cbiAgZ2V0IHVzYWdlTW9kZSgpOiBVc2FnZU1vZGUge1xuICAgIHJldHVybiB0aGlzLl91c2FnZU1vZGU7XG4gIH1cblxuICBzZXQgdXNhZ2VNb2RlKHZhbHVlOiBVc2FnZU1vZGUpIHtcbiAgICBpZiAodGhpcy5fdXNhZ2VNb2RlICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5fdXNhZ2VNb2RlID0gdmFsdWU7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBpc09uRmllbGRNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLmlzT25GaWVsZE1vZGUodGhpcy5fdXNhZ2VNb2RlKTtcbiAgfVxuXG4gIGdldCBpc05ld0RhdGEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzTmlsKHRoaXMuZGF0YT8uaWQpO1xuICB9XG5cbiAgZ2V0IGxvYWRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2xvYWRpbmc7XG4gIH1cblxuICBnZXQgc2VydmljZSgpOiBTIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZTtcbiAgfVxuXG4gIG1hcmtBc1NhdmluZyhvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pe1xuICAgIGlmICghdGhpcy5zYXZpbmcpIHtcbiAgICAgIHRoaXMuc2F2aW5nID0gdHJ1ZTtcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgbWFya0FzU2F2ZWQob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KXtcbiAgICBpZiAodGhpcy5zYXZpbmcpIHtcbiAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJvdGVjdGVkIGRhdGFUeXBlOiBuZXcoKSA9PiBULFxuICAgIHByb3RlY3RlZCBkYXRhU2VydmljZT86IFMsXG4gICAgQE9wdGlvbmFsKCkgb3B0aW9ucz86IEFwcEVkaXRvck9wdGlvbnNcbiAgKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IuZ2V0KEFjdGl2YXRlZFJvdXRlKSxcbiAgICAgIGluamVjdG9yLmdldChSb3V0ZXIpLFxuICAgICAgaW5qZWN0b3IuZ2V0KEFsZXJ0Q29udHJvbGxlciksXG4gICAgICBpbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSksXG4gICAgICBvcHRpb25zKTtcbiAgICBvcHRpb25zID0gPEFwcEVkaXRvck9wdGlvbnM+e1xuICAgICAgLy8gRGVmYXVsdCBvcHRpb25zXG4gICAgICBlbmFibGVMaXN0ZW5DaGFuZ2VzOiAoaW5qZWN0b3IuZ2V0KEVOVklST05NRU5UKS5saXN0ZW5SZW1vdGVDaGFuZ2VzID09PSB0cnVlKSxcbiAgICAgIHBhdGhJZEF0dHJpYnV0ZTogJ2lkJyxcbiAgICAgIGF1dG9Mb2FkOiB0cnVlLFxuICAgICAgYXV0b1VwZGF0ZVJvdXRlOiB0cnVlLFxuICAgICAgaTE4blByZWZpeDogJycsXG5cbiAgICAgIC8vIEZvbGxvd2luZyBvcHRpb25zIGFyZSBvdmVycmlkZSBpbnNpZGUgbmdPbkluaXQoKVxuICAgICAgLy8gYXV0b09wZW5OZXh0VGFiOiAuLi4sXG5cbiAgICAgIC8vIE92ZXJyaWRlIGRlZmF1bHRzXG4gICAgICAuLi5vcHRpb25zXG4gICAgfTtcblxuICAgIHRoaXMuc2V0dGluZ3MgPSBpbmplY3Rvci5nZXQoTG9jYWxTZXR0aW5nc1NlcnZpY2UpO1xuICAgIHRoaXMuZm9ybUVycm9yQWRhcHRlciA9IGluamVjdG9yLmdldChGb3JtRXJyb3JBZGFwdGVyKTtcbiAgICB0aGlzLmNkID0gaW5qZWN0b3IuZ2V0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgICB0aGlzLmRhdGVGb3JtYXQgPSBpbmplY3Rvci5nZXQoRGF0ZUZvcm1hdFBpcGUpO1xuICAgIHRoaXMudG9hc3RDb250cm9sbGVyID0gaW5qZWN0b3IuZ2V0KFRvYXN0Q29udHJvbGxlcik7XG4gICAgdGhpcy5fZW5hYmxlTGlzdGVuQ2hhbmdlcyA9IG9wdGlvbnMuZW5hYmxlTGlzdGVuQ2hhbmdlcztcbiAgICB0aGlzLl9wYXRoSWRBdHRyaWJ1dGUgPSBvcHRpb25zLnBhdGhJZEF0dHJpYnV0ZTtcbiAgICB0aGlzLl9hdXRvTG9hZCA9IG9wdGlvbnMuYXV0b0xvYWQ7XG4gICAgdGhpcy5fYXV0b0xvYWREZWxheSA9IG9wdGlvbnMuYXV0b0xvYWREZWxheTtcbiAgICB0aGlzLl9hdXRvVXBkYXRlUm91dGUgPSBvcHRpb25zLmF1dG9VcGRhdGVSb3V0ZTtcbiAgICB0aGlzLl9hdXRvT3Blbk5leHRUYWIgPSBvcHRpb25zLmF1dG9PcGVuTmV4dFRhYjtcbiAgICB0aGlzLmkxOG5Db250ZXh0ID0ge1xuICAgICAgcHJlZml4OiBvcHRpb25zLmkxOG5QcmVmaXgsXG4gICAgICBzdWZmaXg6ICcnXG4gICAgfTtcblxuICAgIC8vIEZPUiBERVYgT05MWSAtLS0tXG4gICAgLy90aGlzLmRlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgLy8gRGVmYXVsdHNcbiAgICB0aGlzLl9hdXRvT3Blbk5leHRUYWIgPSB0b0Jvb2xlYW4odGhpcy5fYXV0b09wZW5OZXh0VGFiLCAhdGhpcy5pc09uRmllbGRNb2RlKTtcbiAgICB0aGlzLmhpc3RvcnlJY29uID0gdGhpcy5oaXN0b3J5SWNvbiB8fCB7aWNvbjogJ2xpc3QnfTtcblxuICAgIC8vIFJlZ2lzdGVyIGZvcm1zXG4gICAgdGhpcy5yZWdpc3RlckZvcm1zKCk7XG5cbiAgICAvLyBEaXNhYmxlIHBhZ2UsIGR1cmluZyBsb2FkXG4gICAgdGhpcy5kaXNhYmxlKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG5cbiAgICAvLyBMb2FkIGRhdGFcbiAgICBpZiAodGhpcy5fYXV0b0xvYWQpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5sb2FkRnJvbVJvdXRlKCksIHRoaXMuX2F1dG9Mb2FkRGVsYXkpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG5cbiAgICB0aGlzLiR0aXRsZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuJHRpdGxlLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vblVwZGF0ZVZpZXcuY29tcGxldGUoKTtcbiAgICB0aGlzLm9uVXBkYXRlVmlldy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzbmFwc2hvdCByb3V0ZVxuICAgKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgbG9hZEZyb21Sb3V0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByb3V0ZSA9IHRoaXMucm91dGUuc25hcHNob3Q7XG4gICAgaWYgKCFyb3V0ZSB8fCBpc05pbE9yQmxhbmsodGhpcy5fcGF0aElkQXR0cmlidXRlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gbG9hZCBmcm9tIHJvdXRlOiBtaXNzaW5nIFxcJ3JvdXRlXFwnIG9yIFxcJ29wdGlvbnMucGF0aElkQXR0cmlidXRlXFwnLicpO1xuICAgIH1cbiAgICBsZXQgaWQgPSByb3V0ZS5wYXJhbXNbdGhpcy5fcGF0aElkQXR0cmlidXRlXTtcbiAgICBpZiAoaXNOaWwoaWQpIHx8IGlkID09PSAnbmV3Jykge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZCh1bmRlZmluZWQsIHJvdXRlLnBhcmFtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENvbnZlcnQgYXMgbnVtYmVyLCBpZiBuZWVkXG4gICAgICBpZiAoaXNJbnQoaWQpKSB7XG4gICAgICAgIGlkID0gcGFyc2VJbnQoaWQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMubG9hZChpZCwgcm91dGUucGFyYW1zKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBkYXRhIGZyb20gaWQsIHVzaW5nIHRoZSBkYXRhU2VydmljZVxuICAgKlxuICAgKiBAcGFyYW0gaWRcbiAgICogQHBhcmFtIG9wdHNcbiAgICovXG4gIGFzeW5jIGxvYWQoaWQ/OiBJRCwgb3B0cz86IEVudGl0eVNlcnZpY2VMb2FkT3B0aW9ucyAmIHtcbiAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuICAgIG9wZW5UYWJJbmRleD86IG51bWJlcjtcbiAgICB1cGRhdGVUYWJBbmRSb3V0ZT86IGJvb2xlYW47XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9KSB7XG4gICAgaWYgKCF0aGlzLmRhdGFTZXJ2aWNlKSB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBsb2FkIGRhdGE6IG1pc3NpbmcgXFwnZGF0YVNlcnZpY2VcXCchJyk7XG5cbiAgICB0aGlzLmVycm9yID0gbnVsbDtcblxuICAgIC8vIE5ldyBkYXRhXG4gICAgaWYgKGlzTmlsKGlkKSkge1xuXG4gICAgICAvLyBDcmVhdGUgdXNpbmcgZGVmYXVsdCB2YWx1ZXNcbiAgICAgIGNvbnN0IGRhdGEgPSBuZXcgdGhpcy5kYXRhVHlwZSgpO1xuICAgICAgdGhpcy5fdXNhZ2VNb2RlID0gdGhpcy5jb21wdXRlVXNhZ2VNb2RlKGRhdGEpO1xuICAgICAgYXdhaXQgdGhpcy5vbk5ld0VudGl0eShkYXRhLCBvcHRzKTtcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlVmlldyhkYXRhLCB7XG4gICAgICAgIG9wZW5UYWJJbmRleDogMCxcbiAgICAgICAgLi4ub3B0c1xuICAgICAgfSk7XG4gICAgICB0aGlzLm1hcmtBc0xvYWRlZCgpO1xuICAgIH1cblxuICAgIC8vIExvYWQgZXhpc3RpbmcgZGF0YVxuICAgIGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZGF0YVNlcnZpY2UubG9hZChpZCwgb3B0cyk7XG4gICAgICAgIGlmICghZGF0YSkgdGhyb3cge2NvZGU6IEVycm9yQ29kZXMuREFUQV9OT1RfRk9VTkRfRVJST1IsIG1lc3NhZ2U6ICdFUlJPUi5EQVRBX05PX0ZPVU5EJ307XG4gICAgICAgIHRoaXMuX3VzYWdlTW9kZSA9IHRoaXMuY29tcHV0ZVVzYWdlTW9kZShkYXRhKTtcbiAgICAgICAgYXdhaXQgdGhpcy5vbkVudGl0eUxvYWRlZChkYXRhLCBvcHRzKTtcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVWaWV3KGRhdGEsIG9wdHMpO1xuICAgICAgICB0aGlzLnN0YXJ0TGlzdGVuUmVtb3RlQ2hhbmdlcygpO1xuICAgICAgfVxuICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLnNldEVycm9yKGVycik7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IDA7XG4gICAgICB9XG4gICAgICBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5tYXJrQXNMb2FkZWQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGFydExpc3RlblJlbW90ZUNoYW5nZXMoKSB7XG4gICAgLy8gU2tpcCBpZiBkaXNhYmxlLCBvciBhbHJlYWR5IGxpc3RlbmluZ1xuICAgIGlmICh0aGlzLmhhc1JlbW90ZUxpc3RlbmVyIHx8ICF0aGlzLl9lbmFibGVMaXN0ZW5DaGFuZ2VzIHx8IHRoaXMuaXNOZXdEYXRhKSByZXR1cm47XG5cbiAgICAvLyBMaXN0ZW4gZm9yIGNoYW5nZXMgb24gc2VydmVyXG4gICAgdGhpcy5oYXNSZW1vdGVMaXN0ZW5lciA9IHRydWU7XG5cbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5kYXRhU2VydmljZS5saXN0ZW5DaGFuZ2VzKHRoaXMuZGF0YS5pZClcbiAgICAgICAgLnBpcGUoZmlsdGVyKGlzTm90TmlsKSlcbiAgICAgICAgLnN1YnNjcmliZSgoZGF0YTogVCkgPT4ge1xuICAgICAgICAgIGlmIChkYXRhLnVwZGF0ZURhdGUgJiYgKGRhdGEudXBkYXRlRGF0ZSBhcyBNb21lbnQpLmlzQWZ0ZXIodGhpcy5kYXRhLnVwZGF0ZURhdGUpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGlydHkpIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoYFtkYXRhLWVkaXRvcl0gQ2hhbmdlcyBkZXRlY3RlZCBvbiBzZXJ2ZXIsIGF0IHske2RhdGEudXBkYXRlRGF0ZX19IDogcmVsb2FkaW5nIHBhZ2UuLi5gKTtcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVWaWV3KGRhdGEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoYFtkYXRhLWVkaXRvcl0gQ2hhbmdlcyBkZXRlY3RlZCBvbiBzZXJ2ZXIsIGF0IHske2RhdGEudXBkYXRlRGF0ZX19LCBidXQgcGFnZSBpcyBkaXJ0eTogc2tpcCByZWxvYWRpbmcuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuYWRkKCgpID0+IHRoaXMuaGFzUmVtb3RlTGlzdGVuZXIgPSBmYWxzZSlcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlVmlldyhkYXRhOiBUIHwgbnVsbCwgb3B0cz86IHtcbiAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuICAgIG9wZW5UYWJJbmRleD86IG51bWJlcjtcbiAgICB1cGRhdGVSb3V0ZT86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpZENoYW5nZWQgPSBpc05vdE5pbChkYXRhLmlkKVxuICAgICAgJiYgdGhpcy5wcmV2aW91c0RhdGFJZCAhPT0gdW5kZWZpbmVkIC8vIElnbm9yZSBpZiBmaXJzdCBsb2FkaW5nICg9dW5kZWZpbmVkKVxuICAgICAgJiYgdGhpcy5wcmV2aW91c0RhdGFJZCAhPT0gZGF0YS5pZDtcblxuICAgIG9wdHMgPSB7XG4gICAgICB1cGRhdGVSb3V0ZTogdGhpcy5fYXV0b1VwZGF0ZVJvdXRlICYmIGlkQ2hhbmdlZCAmJiAhdGhpcy5sb2FkaW5nLFxuICAgICAgb3BlblRhYkluZGV4OiB0aGlzLl9hdXRvT3Blbk5leHRUYWIgJiYgaWRDaGFuZ2VkICYmIGlzTmlsKHRoaXMucHJldmlvdXNEYXRhSWQpICYmIHRoaXMuY29tcHV0ZU5leHRUYWJJbmRleCgpLFxuICAgICAgLi4ub3B0c1xuICAgIH07XG5cbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIHRoaXMucHJldmlvdXNEYXRhSWQgPSBkYXRhLmlkIHx8IG51bGw7XG5cbiAgICBjb25zdCBwcm9taXNlT3JWb2lkID0gdGhpcy5zZXRWYWx1ZShkYXRhKTtcbiAgICBpZiAocHJvbWlzZU9yVm9pZCkgYXdhaXQgcHJvbWlzZU9yVm9pZDtcblxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgIHRoaXMubWFya0FzVW50b3VjaGVkKCk7XG4gICAgICB0aGlzLnVwZGF0ZVZpZXdTdGF0ZShkYXRhKTtcblxuICAgICAgLy8gTmVlZCB0byB1cGRhdGUgcm91dGVcbiAgICAgIGlmIChvcHRzLnVwZGF0ZVJvdXRlID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMudXBkYXRlVGFiQW5kUm91dGUoZGF0YSwgb3B0cylcbiAgICAgICAgICAvLyBVcGRhdGUgdGhlIHRpdGxlIC0gc2hvdWxkIGJlIGV4ZWN1dGVkIEFGVEVSIHVwZGF0ZVJvdXRlIGJlY2F1c2Ugb2YgcGF0aCBjaGFuZ2UgLSBmaXggIzE4NVxuICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMudXBkYXRlVGl0bGUoZGF0YSkpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgbmV4dCB0YWJcbiAgICAgICAgdGhpcy51cGRhdGVUYWJJbmRleChvcHRzLm9wZW5UYWJJbmRleCk7XG5cbiAgICAgICAgLy8gVXBkYXRlIHRoZSB0aXRsZS5cbiAgICAgICAgdGhpcy51cGRhdGVUaXRsZShkYXRhKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5vblVwZGF0ZVZpZXcuZW1pdChkYXRhKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlIG9yIGRpc2FibGUgc3RhdGVcbiAgICovXG4gIHVwZGF0ZVZpZXdTdGF0ZShkYXRhOiBULCBvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKHRoaXMuaXNOZXdEYXRhIHx8IHRoaXMuY2FuVXNlcldyaXRlKGRhdGEpKSB7XG4gICAgICB0aGlzLmVuYWJsZShvcHRzKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmRpc2FibGUob3B0cyk7XG5cbiAgICAgIC8vIEFsbG93IHRvIHNvcnQgdGFibGVcbiAgICAgIHRoaXMudGFibGVzLmZvckVhY2godCA9PiB0LmVuYWJsZVNvcnQoKSk7XG4gICAgfVxuXG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSByb3V0ZSBsb2NhdGlvbiwgYW5kIG9wZW4gdGhlIG5leHQgdGFiXG4gICAqL1xuICBhc3luYyB1cGRhdGVUYWJBbmRSb3V0ZShkYXRhOiBULCBvcHRzPzoge1xuICAgIG9wZW5UYWJJbmRleD86IG51bWJlcjtcbiAgfSk6IFByb21pc2U8dm9pZD4ge1xuXG4gICAgdGhpcy5xdWVyeVBhcmFtcyA9IHRoaXMucXVlcnlQYXJhbXMgfHwge307XG5cbiAgICAvLyBPcGVuIHRoZSBuZXh0IHRhYlxuICAgIHRoaXMudXBkYXRlVGFiSW5kZXgob3B0cyAmJiBvcHRzLm9wZW5UYWJJbmRleCk7XG5cbiAgICAvLyBTYXZlIHRoZSBvcGVuZWQgdGFiIGludG8gdGhlIHF1ZXJ5UGFyYW1zXG4gICAgdGhpcy5xdWVyeVBhcmFtcy50YWIgPSB0aGlzLnNlbGVjdGVkVGFiSW5kZXg7XG5cbiAgICAvLyBVcGRhdGUgcm91dGUgbG9jYXRpb25cbiAgICBjb25zdCBmb3JjZWRRdWVyeVBhcmFtcyA9IHt9O1xuICAgIGZvcmNlZFF1ZXJ5UGFyYW1zW3RoaXMuX3BhdGhJZEF0dHJpYnV0ZV0gPSBkYXRhICYmIGlzTm90TmlsKGRhdGEuaWQpID8gZGF0YS5pZCA6ICduZXcnO1xuICAgIGlmIChkYXRhICYmIGlzTm90TmlsKGRhdGEuaWQpKSB7XG4gICAgICBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4nXSwge1xuICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxuICAgICAgICBxdWVyeVBhcmFtczogey4uLnRoaXMucXVlcnlQYXJhbXMsIC4uLmZvcmNlZFF1ZXJ5UGFyYW1zfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLicsICduZXcnXSwge1xuICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxuICAgICAgICBxdWVyeVBhcmFtczogey4uLnRoaXMucXVlcnlQYXJhbXMsIC4uLmZvcmNlZFF1ZXJ5UGFyYW1zfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy51cGRhdGVSb3V0ZShkYXRhLCB0aGlzLnF1ZXJ5UGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHJvdXRlIGxvY2F0aW9uLCBhbmQgb3BlbiB0aGUgbmV4dCB0YWJcbiAgICovXG4gIHVwZGF0ZVRhYkluZGV4KHRhYkluZGV4PzogbnVtYmVyKSB7XG4gICAgaWYgKGlzTm90TmlsKHRhYkluZGV4KSAmJiB0YWJJbmRleCA+IHRoaXMuc2VsZWN0ZWRUYWJJbmRleCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gdGFiSW5kZXg7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNhdmVBbmRDbG9zZShldmVudDogRXZlbnQsIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcblxuICAgIGNvbnN0IHNhdmVkID0gYXdhaXQgdGhpcy5zYXZlKGV2ZW50KTtcbiAgICBpZiAoc2F2ZWQpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2xvc2UoZXZlbnQpO1xuICAgIH1cbiAgICByZXR1cm4gc2F2ZWQ7XG4gIH1cblxuICBhc3luYyBjbG9zZShldmVudDogRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdvQmFjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgdGhlIGVkaXRvciwgYnkgY2FsbGluZyB0aGUgZGF0YVNlcnZpY2Uuc2F2ZSgpLlxuICAgKiBFbnN1cmUgdGhhdCBlZGl0b3IgaWYgdmFsaWQuIElmIG5vdCwgZGlzcGxheSBhbiBlcnJvclxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICogQHBhcmFtIG9wdHNcbiAgICovXG4gIGFzeW5jIHNhdmUoZXZlbnQ/OiBFdmVudCwgb3B0cz86IGFueSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLmxvYWRpbmcgfHwgdGhpcy5zYXZpbmcpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tkYXRhLWVkaXRvcl0gU2tpcCBzYXZlOiBlZGl0b3IgaXMgYnVzeSAobG9hZGluZyBvciBzYXZpbmcpJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghdGhpcy5kaXJ0eSkge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW2RhdGEtZWRpdG9yXSBTa2lwIHNhdmU6IGVkaXRvciBub3QgZGlydHknKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIFdhaXQgZW5kIG9mIGFzeW5jIHZhbGlkYXRpb25cbiAgICBhd2FpdCB0aGlzLndhaXRXaGlsZVBlbmRpbmcoKTtcblxuICAgIC8vIElmIGludmFsaWRcbiAgICBpZiAodGhpcy5pbnZhbGlkKSB7XG4gICAgICB0aGlzLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgIHRoaXMubG9nRm9ybUVycm9ycygpO1xuICAgICAgdGhpcy5vcGVuRmlyc3RJbnZhbGlkVGFiKCk7XG5cbiAgICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLm1hcmtBc1NhdmluZygpO1xuICAgIHRoaXMuZXJyb3IgPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2RhdGEtZWRpdG9yXSBTYXZpbmcgZGF0YS4uLicpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEdldCBkYXRhXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5nZXRWYWx1ZSgpO1xuXG4gICAgICB0aGlzLmRpc2FibGUoKTtcblxuICAgICAgLy8gU2F2ZSBmb3JtXG4gICAgICBjb25zdCB1cGRhdGVkRGF0YSA9IGF3YWl0IHRoaXMuZGF0YVNlcnZpY2Uuc2F2ZShkYXRhLCBvcHRzKTtcblxuICAgICAgYXdhaXQgdGhpcy5vbkVudGl0eVNhdmVkKHVwZGF0ZWREYXRhKTtcblxuICAgICAgLy8gVXBkYXRlIHRoZSB2aWV3IChlLmcgbWV0YWRhdGEpXG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZVZpZXcodXBkYXRlZERhdGEsIG9wdHMpO1xuXG4gICAgICAvLyBTdWJzY3JpYmUgdG8gcmVtb3RlIGNoYW5nZXNcbiAgICAgIGlmICghdGhpcy5oYXNSZW1vdGVMaXN0ZW5lcikgdGhpcy5zdGFydExpc3RlblJlbW90ZUNoYW5nZXMoKTtcblxuICAgICAgdGhpcy5zdWJtaXR0ZWQgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XG4gICAgICB0aGlzLnNldEVycm9yKGVycik7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSAwO1xuICAgICAgdGhpcy5zY3JvbGxUb1RvcCgpOyAvLyBTY3JvbGwgdG8gdG9wICh0byBzaG93IGVycm9yKVxuICAgICAgdGhpcy5tYXJrQXNEaXJ0eSgpO1xuICAgICAgdGhpcy5lbmFibGUoKTtcblxuICAgICAgLy8gQ29uY3VycmVudCBjaGFuZ2Ugb24gcG9kXG4gICAgICBpZiAoZXJyLmNvZGUgPT09IFNlcnZlckVycm9yQ29kZXMuQkFEX1VQREFURV9EQVRFICYmIGlzTm90TmlsKHRoaXMuZGF0YS5pZCkpIHtcbiAgICAgICAgLy8gQ2FsbCBhIGRhdGEgcmVsb2FkIChpbiBiYWNrZ3JvdW5kKSwgdG8gdXBkYXRlIHRoZSBHcmFwaFFMIGNhY2hlLCBhbmQgYWxsb3cgdG8gY2FuY2VsIGNoYW5nZXNcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5sb2FkKHRoaXMuZGF0YS5pZCwge2ZldGNoUG9saWN5OiAnbmV0d29yay1vbmx5J30pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ1tkYXRhLWVkaXRvcl0gRGF0YSBjYWNoZSByZWxvYWRlZC4gVXNlciBjYW4gcmVsb2FkIHBhZ2UnKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5tYXJrQXNTYXZlZCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIGRhdGEgKGlmIGRpcnR5IGFuZCB2YWxpZCksIGFuZCByZXR1cm4gaXQuIE90aGVyd2lzZSwgcmV0dXJuIG5pbCB2YWx1ZS5cbiAgICovXG4gIGFzeW5jIHNhdmVBbmRHZXREYXRhSWZWYWxpZCgpOiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+IHtcbiAgICAvLyBGb3JtIGlzIG5vdCB2YWxpZFxuICAgIGlmICghdGhpcy52YWxpZCkge1xuXG4gICAgICAvLyBNYWtlIHN1cmUgdmFsaWRhdGlvbiBpcyBmaW5pc2hlZFxuICAgICAgYXdhaXQgQXBwRm9ybVV0aWxzLndhaXRXaGlsZVBlbmRpbmcodGhpcyk7XG5cbiAgICAgIC8vIElmIGludmFsaWQ6IE9wZW4gdGhlIGZpcnN0IHRhYiBpbiBlcnJvclxuICAgICAgaWYgKHRoaXMuaW52YWxpZCkge1xuICAgICAgICB0aGlzLm9wZW5GaXJzdEludmFsaWRUYWIoKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgLy8gQ29udGludWUgKHZhbGlkKVxuICAgIH1cblxuICAgIC8vIEZvcm0gaXMgdmFsaWQsIGJ1dCBub3Qgc2F2ZWRcbiAgICBpZiAodGhpcy5kaXJ0eSkge1xuICAgICAgY29uc3Qgc2F2ZWQgPSBhd2FpdCB0aGlzLnNhdmUobmV3IEV2ZW50KCdzYXZlJykpO1xuICAgICAgaWYgKCFzYXZlZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBWYWxpZCBhbmQgc2F2ZWQgZGF0YVxuICAgIHJldHVybiB0aGlzLmRhdGE7XG4gIH1cblxuICBhc3luYyBkZWxldGUoZXZlbnQ/OiBVSUV2ZW50KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMubG9hZGluZyB8fCB0aGlzLnNhdmluZykgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gQXNrIHVzZXIgY29uZmlybWF0aW9uXG4gICAgY29uc3QgY29uZmlybWF0aW9uID0gYXdhaXQgQWxlcnRzLmFza0RlbGV0ZUNvbmZpcm1hdGlvbih0aGlzLmFsZXJ0Q3RybCwgdGhpcy50cmFuc2xhdGUpO1xuICAgIGlmICghY29uZmlybWF0aW9uKSByZXR1cm47XG5cbiAgICBjb25zb2xlLmRlYnVnKCdbZGF0YS1lZGl0b3JdIEFza2luZyB0byBkZWxldGUuLi4nKTtcblxuICAgIHRoaXMubWFya0FzU2F2aW5nKCk7XG4gICAgdGhpcy5lcnJvciA9IHVuZGVmaW5lZDtcblxuICAgIHRyeSB7XG4gICAgICAvLyBHZXQgZGF0YVxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZ2V0VmFsdWUoKTtcbiAgICAgIGNvbnN0IGlzTmV3ID0gdGhpcy5pc05ld0RhdGE7XG5cbiAgICAgIHRoaXMuZGlzYWJsZSgpO1xuXG4gICAgICBpZiAoIWlzTmV3KSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZGF0YVNlcnZpY2UuZGVsZXRlKGRhdGEpO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLm9uRW50aXR5RGVsZXRlZChkYXRhKTtcblxuICAgICAgLy8gUmVtb3ZlIHBhZ2UgaGlzdG9yeVxuICAgICAgdGhpcy5yZW1vdmVQYWdlSGlzdG9yeSgpO1xuXG5cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0RXJyb3IoZXJyKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IDA7XG4gICAgICB0aGlzLm1hcmtBc1NhdmVkKCk7XG4gICAgICB0aGlzLmVuYWJsZSgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFdhaXQsIHRoZW4gZ28gYmFjayAod2FpdCBpcyBuZWVkIGluIG9yZGVyIHRvIHVwZGF0ZSBiYWNrIGhyZWYgaXMgbmVlZClcbiAgICBhd2FpdCBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZ29CYWNrKCksIDUwMCk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHJlbG9hZCgpIHtcbiAgICB0aGlzLm1hcmtBc0xvYWRpbmcoKTtcbiAgICBhd2FpdCB0aGlzLmxvYWQodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5pZCk7XG4gIH1cblxuICBhc3luYyBnb0JhY2soZXZlbnQ/OiBFdmVudCk6IFByb21pc2U8dm9pZCB8IGJvb2xlYW4+IHtcbiAgICAvLyBHbyBiYWNrXG4gICAgaWYgKHRoaXMudG9vbGJhcj8uY2FuR29CYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy50b29sYmFyLmdvQmFjaygpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLmRlZmF1bHRCYWNrSHJlZikge1xuICAgICAgcmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGhpcy5kZWZhdWx0QmFja0hyZWYpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBCYWNrIHRvIGhvbWVcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvJyk7XG4gICAgfVxuICB9XG5cbiAgc2V0RXJyb3IoZXJyOiBhbnkpIHtcbiAgICBjb25zb2xlLmVycm9yKCdbZW50aXR5LWVkaXRvcl0gRXJyb3I6ICcgKyBlcnIgJiYgZXJyLm1lc3NhZ2UgfHwgJycsIGVycik7XG4gICAgbGV0IHVzZXJNZXNzYWdlID0gZXJyICYmIGVyci5tZXNzYWdlICYmIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoZXJyLm1lc3NhZ2UpIHx8IGVycjtcblxuICAgIC8vIEFkZCBkZXRhaWxzIGVycm9yIChpZiBhbnkpIHVuZGVyIHRoZSBtYWluIG1lc3NhZ2VcbiAgICBjb25zdCBkZXRhaWxNZXNzYWdlID0gZXJyICYmIGVyci5kZXRhaWxzICYmIChlcnIuZGV0YWlscy5tZXNzYWdlIHx8IGVyci5kZXRhaWxzKSB8fCB1bmRlZmluZWQ7XG4gICAgaWYgKGRldGFpbE1lc3NhZ2UpIHtcbiAgICAgIHVzZXJNZXNzYWdlICs9IGA8YnIvPjxzbWFsbCBjbGFzcz1cImhpZGRlbi14cyBoaWRkZW4tc21cIiB0aXRsZT1cIiR7ZGV0YWlsTWVzc2FnZX1cIj5gO1xuICAgICAgdXNlck1lc3NhZ2UgKz0gZGV0YWlsTWVzc2FnZS5sZW5ndGggPCA3MCA/IGRldGFpbE1lc3NhZ2UgOiBkZXRhaWxNZXNzYWdlLnN1YnN0cmluZygwLCA2NykgKyAnLi4uJztcbiAgICAgIHVzZXJNZXNzYWdlICs9ICc8L3NtYWxsPic7XG4gICAgfVxuICAgIHRoaXMuZXJyb3IgPSB1c2VyTWVzc2FnZTtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBhYnN0cmFjdCBtZXRob2RzICh0byBvdmVycmlkZSkgLS0gKi9cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcmVnaXN0ZXJGb3JtcygpO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBjb21wdXRlVGl0bGUoZGF0YTogVCk6IFByb21pc2U8c3RyaW5nPjtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgc2V0VmFsdWUoZGF0YTogVCk6IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgZm9ybSgpOiBGb3JtR3JvdXA7XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldEZpcnN0SW52YWxpZFRhYkluZGV4KCk6IG51bWJlcjtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgY2FuVXNlcldyaXRlKGRhdGE6IFQpOiBib29sZWFuO1xuXG5cbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZHMgLS0gKi9cblxuICAvKipcbiAgICogUmV0dXJuIHVuZGVmaW5lZCB0byBrZWVwIHNhbWUgdGFiXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBjb21wdXRlTmV4dFRhYkluZGV4KCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbmV4dFRhYkluZGV4ID0gdGhpcy5zZWxlY3RlZFRhYkluZGV4ICsgMTtcbiAgICByZXR1cm4gbmV4dFRhYkluZGV4IDwgdGhpcy50YWJDb3VudCA/IG5leHRUYWJJbmRleCA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGFzeW5jIHVubG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmZvcm0ucmVzZXQoKTtcbiAgICB0aGlzLnJlZ2lzdGVyRm9ybXMoKTtcbiAgICB0aGlzLl9kaXJ0eSA9IGZhbHNlO1xuICAgIHRoaXMuZGF0YSA9IG51bGw7XG4gICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBvbkJlZm9yZUVudGl0eUxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gY2FuIGJlIG92ZXJ3cml0ZSBieSBzdWJjbGFzc2VzXG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgb25OZXdFbnRpdHkoZGF0YTogVCwgb3B0aW9ucz86IEVudGl0eVNlcnZpY2VMb2FkT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIGNhbiBiZSBvdmVyd3JpdGUgYnkgc3ViY2xhc3Nlc1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG9uRW50aXR5TG9hZGVkKGRhdGE6IFQsIG9wdGlvbnM/OiBFbnRpdHlTZXJ2aWNlTG9hZE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBjYW4gYmUgb3ZlcndyaXRlIGJ5IHN1YmNsYXNzZXNcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBvbkVudGl0eVNhdmVkKGRhdGE6IFQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBjYW4gYmUgb3ZlcndyaXRlIGJ5IHN1YmNsYXNzZXNcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBvbkVudGl0eURlbGV0ZWQoZGF0YTogVCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIGNhbiBiZSBvdmVyd3JpdGUgYnkgc3ViY2xhc3Nlc1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvbXB1dGVVc2FnZU1vZGUoZGF0YTogVCk6IFVzYWdlTW9kZSB7XG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MuaXNVc2FnZU1vZGUoJ0ZJRUxEJykgPyAnRklFTEQnIDogJ0RFU0snO1xuICB9XG5cbiAgcHJvdGVjdGVkIHdhaXRXaGlsZVBlbmRpbmcob3B0cz86IFdhaXRGb3JPcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIEFwcEZvcm1VdGlscy53YWl0V2hpbGVQZW5kaW5nKHRoaXMsIG9wdHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGdldFZhbHVlKCk6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IGpzb24gPSBhd2FpdCB0aGlzLmdldEpzb25WYWx1ZVRvU2F2ZSgpO1xuXG4gICAgY29uc3QgcmVzID0gbmV3IHRoaXMuZGF0YVR5cGUoKTtcbiAgICByZXMuZnJvbU9iamVjdChqc29uKTtcblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0SnNvblZhbHVlVG9TYXZlKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmZvcm0udmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIHRpdGxlXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgdXBkYXRlVGl0bGUoZGF0YT86IFQpIHtcbiAgICBkYXRhID0gZGF0YSB8fCB0aGlzLmRhdGE7XG4gICAgY29uc3QgdGl0bGUgPSBhd2FpdCB0aGlzLmNvbXB1dGVUaXRsZShkYXRhKTtcbiAgICB0aGlzLiR0aXRsZS5uZXh0KHRpdGxlKTtcblxuICAgIC8vIElmIE5PVCBkYXRhLCB0aGVuIGFkZCB0byBwYWdlIGhpc3RvcnlcbiAgICBpZiAoIXRoaXMuaXNOZXdEYXRhKSB7XG4gICAgICBjb25zdCBwYWdlID0gYXdhaXQgdGhpcy5jb21wdXRlUGFnZUhpc3RvcnkodGl0bGUpO1xuICAgICAgcmV0dXJuIHRoaXMuYWRkVG9QYWdlSGlzdG9yeShwYWdlKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgYWRkVG9QYWdlSGlzdG9yeShwYWdlOiBIaXN0b3J5UGFnZVJlZmVyZW5jZSwgb3B0cz86IEFkZFRvUGFnZUhpc3RvcnlPcHRpb25zKSB7XG4gICAgaWYgKCFwYWdlKSByZXR1cm47IC8vIFNraXBcblxuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLmFkZFRvUGFnZUhpc3RvcnkocGFnZSwge1xuICAgICAgcmVtb3ZlUGF0aFF1ZXJ5UGFyYW1zOiB0cnVlLFxuICAgICAgcmVtb3ZlVGl0bGVTbWFsbFRhZzogdHJ1ZSxcbiAgICAgIGVtaXRFdmVudDogZmFsc2UsXG4gICAgICAuLi5vcHRzXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgY29tcHV0ZVBhZ2VIaXN0b3J5KHRpdGxlOiBzdHJpbmcpOiBQcm9taXNlPEhpc3RvcnlQYWdlUmVmZXJlbmNlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRpdGxlLFxuICAgICAgcGF0aDogdGhpcy5yb3V0ZXIudXJsXG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyByZW1vdmVQYWdlSGlzdG9yeShvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5yZW1vdmVQYWdlSGlzdG9yeSh0aGlzLnJvdXRlci51cmwsIG9wdHMpO1xuICB9XG5cblxuICBwcm90ZWN0ZWQgY29tcHV0ZVBhZ2VVcmwoaWQ6IElEfCduZXcnKTogc3RyaW5nIHwgYW55W10ge1xuICAgIGNvbnN0IHBhcmVudFVybCA9IHRoaXMuZ2V0UGFyZW50UGFnZVVybCgpO1xuICAgIHJldHVybiBwYXJlbnRVcmwgJiYgYCR7cGFyZW50VXJsfS8ke2lkfWA7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0UGFyZW50UGFnZVVybCh3aXRoUXVlcnlQYXJhbXM/OiBib29sZWFuKSB7XG4gICAgbGV0IHBhcmVudFVybCA9IHRoaXMuZGVmYXVsdEJhY2tIcmVmO1xuXG4gICAgLy8gUmVtb3ZlIHF1ZXJ5IHBhcmFtc1xuICAgIGlmICh3aXRoUXVlcnlQYXJhbXMgIT09IHRydWUgJiYgcGFyZW50VXJsICYmIHBhcmVudFVybC5pbmRleE9mKCc/JykgIT09IC0xKSB7XG4gICAgICBwYXJlbnRVcmwgPSBwYXJlbnRVcmwuc3Vic3RyKDAsIHBhcmVudFVybC5pbmRleE9mKCc/JykpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJlbnRVcmw7XG4gIH1cblxuICBwcm90ZWN0ZWQgbWFya0ZvckNoZWNrKCkge1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKiAtLSBwcml2YXRlIGZ1bmN0aW9ucyAtLSAqL1xuXG4gIC8qKlxuICAgKiBPcGVuIHRoZSBmaXJzdCB0YWIgdGhhdCBpcyBpbnZhbGlkXG4gICAqL1xuICBwcml2YXRlIG9wZW5GaXJzdEludmFsaWRUYWIoKSB7XG4gICAgY29uc3QgaW52YWxpZFRhYkluZGV4ID0gdGhpcy5nZXRGaXJzdEludmFsaWRUYWJJbmRleCgpO1xuICAgIGlmIChpbnZhbGlkVGFiSW5kZXggIT09IC0xICYmIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCAhPT0gaW52YWxpZFRhYkluZGV4KSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSBpbnZhbGlkVGFiSW5kZXg7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyB1cGRhdGVSb3V0ZShkYXRhOiBULCBxdWVyeVBhcmFtczogYW55KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuY29tcHV0ZVBhZ2VVcmwoaXNOb3ROaWwoZGF0YS5pZCkgPyBkYXRhLmlkIDogJ25ldycpO1xuICAgIGNvbnN0IGNvbW1hbmRzOiBhbnlbXSA9IChwYXRoICYmIHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJykgPyBwYXRoLnNwbGl0KCcvJykgOiBwYXRoIGFzIGFueVtdO1xuICAgIGlmIChpc05vdEVtcHR5QXJyYXkoY29tbWFuZHMpKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoY29tbWFuZHMsIHtcbiAgICAgICAgcmVwbGFjZVVybDogdHJ1ZSxcbiAgICAgICAgcXVlcnlQYXJhbXM6IHRoaXMucXVlcnlQYXJhbXNcbiAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybignU2tpcCBwYWdlIHJvdXRlIHVwZGF0ZS4gSW52YWxpZCBwYWdlIHBhdGg6ICcsIHBhdGgpO1xuICAgIH1cbiAgfVxufVxuXG4iXX0=
@@ -22398,7 +22398,7 @@ class AppEntityEditor extends AppTabEditor {
22398
22398
  const idChanged = isNotNil(data.id)
22399
22399
  && this.previousDataId !== undefined // Ignore if first loading (=undefined)
22400
22400
  && this.previousDataId !== data.id;
22401
- opts = Object.assign({ updateRoute: this._autoUpdateRoute && idChanged && !this.loading, openTabIndex: this._autoOpenNextTab && idChanged && this.computeNextTabIndex() }, opts);
22401
+ opts = Object.assign({ updateRoute: this._autoUpdateRoute && idChanged && !this.loading, openTabIndex: this._autoOpenNextTab && idChanged && isNil(this.previousDataId) && this.computeNextTabIndex() }, opts);
22402
22402
  this.data = data;
22403
22403
  this.previousDataId = data.id || null;
22404
22404
  const promiseOrVoid = this.setValue(data);
@@ -22657,9 +22657,13 @@ class AppEntityEditor extends AppTabEditor {
22657
22657
  this.error = userMessage;
22658
22658
  }
22659
22659
  /* -- protected methods -- */
22660
+ /**
22661
+ * Return undefined to keep same tab
22662
+ * @protected
22663
+ */
22660
22664
  computeNextTabIndex() {
22661
22665
  const nextTabIndex = this.selectedTabIndex + 1;
22662
- return nextTabIndex < this.tabCount ? nextTabIndex : this.selectedTabIndex;
22666
+ return nextTabIndex < this.tabCount ? nextTabIndex : undefined;
22663
22667
  }
22664
22668
  unload() {
22665
22669
  return __awaiter(this, void 0, void 0, function* () {