@esfaenza/es-diagrams 15.2.3 → 15.2.4

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.
@@ -163,8 +163,10 @@ export class EsDiagramComponent {
163
163
  * All'onDestroy ripulisco la memoria dal diagramma
164
164
  */
165
165
  ngOnDestroy() {
166
- this.resizeObserver.dispose();
167
- this.resizeObserver = null;
166
+ if (this.resizeObserver) {
167
+ this.resizeObserver.dispose();
168
+ this.resizeObserver = null;
169
+ }
168
170
  if (this.cy) {
169
171
  this.service.log("I", "Diagram" + " " + this.name + ": Unloading destroyed diagram", false);
170
172
  this.cy.destroy();
@@ -532,4 +534,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
532
534
  }], onLoaded: [{
533
535
  type: Output
534
536
  }] } });
535
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXMtZGlhZ3JhbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcy1kaWFncmFtcy9zcmMvbGliL2NvbXBvbmVudHMvZXMtZGlhZ3JhbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcy1kaWFncmFtcy9zcmMvbGliL2NvbXBvbmVudHMvZXMtZGlhZ3JhbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQWEsUUFBUSxFQUFFLE1BQU0sRUFBaUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBa0JqSSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFJMUQsT0FBTyxLQUFLLEdBQUcsTUFBTSxXQUFXLENBQUM7Ozs7O0FBQ2pDLGNBQWMsQ0FBQSxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFFcEM7O0dBRUc7QUFNSCxNQUFNLE9BQU8sa0JBQWtCO0lBK043Qjs7OztPQUlHO0lBQ0gsWUFBZ0MsT0FBeUIsRUFBc0IsVUFBK0IsRUFBVSxJQUF3QjtRQUFoSCxZQUFPLEdBQVAsT0FBTyxDQUFrQjtRQUFzQixlQUFVLEdBQVYsVUFBVSxDQUFxQjtRQUFVLFNBQUksR0FBSixJQUFJLENBQW9CO1FBN05oSjs7V0FFRztRQUNNLFNBQUksR0FBVyxFQUFFLENBQUM7UUFFM0I7O1dBRUc7UUFDTSxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQVN6Qzs7V0FFRztRQUNNLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQU81Qzs7OztXQUlHO1FBQ00sa0JBQWEsR0FBK0IsRUFBRSxDQUFDO1FBc0J4RDs7V0FFRztRQUNNLG1CQUFjLEdBQVksSUFBSSxDQUFDO1FBRXhDOzs7O1dBSUc7UUFDTSw2QkFBd0IsR0FBWSxJQUFJLENBQUM7UUFFbEQ7Ozs7V0FJRztRQUNN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LE1BQU07Z0JBS0csWUFBWTtzQkFBckIsTUFBTTtnQkFLRyxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9wdGlvbmFsLCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXHJcblxyXG5pbXBvcnQgeyBDb250ZXh0TWVudU9wdGlvbnMgfSBmcm9tICcuLi9tb2RlbHMvY29tcG9uZW50L2NvbnRleHRtZW51L0NvbnRleHRNZW51T3B0aW9ucyc7XHJcbmltcG9ydCB7IEV4cGFuZENvbGxhcHNlT3B0aW9ucyB9IGZyb20gJy4uL21vZGVscy9jb21wb25lbnQvZ3JvdXBpbmcvRXhwYW5kQ29sbGFwc2VPcHRpb25zJztcclxuaW1wb3J0IHsgTm9kZUhUTUxUZW1wbGF0ZSB9IGZyb20gJy4uL21vZGVscy9jb21wb25lbnQvbm9kZXMvTm9kZUhUTUxUZW1wbGF0ZSc7XHJcblxyXG5pbXBvcnQgeyBCcmVhZHRoRmlyc3RMYXlvdXRPcHRpb25zSW1wbCB9IGZyb20gJy4uL21vZGVscy9sYXlvdXRzL0JyZWFkdGhGaXJzdExheW91dE9wdGlvbnNJbXBsJztcclxuaW1wb3J0IHsgQ2lyY2xlTGF5b3V0T3B0aW9uc0ltcGwgfSBmcm9tICcuLi9tb2RlbHMvbGF5b3V0cy9DaXJjbGVMYXlvdXRPcHRpb25zSW1wbCc7XHJcbmltcG9ydCB7IENvbmNlbnRyaWNMYXlvdXRPcHRpb25zSW1wbCB9IGZyb20gJy4uL21vZGVscy9sYXlvdXRzL0NvbmNlbnRyaWNMYXlvdXRPcHRpb25zSW1wbCc7XHJcbmltcG9ydCB7IENvc2VMYXlvdXRPcHRpb25zSW1wbCB9IGZyb20gJy4uL21vZGVscy9sYXlvdXRzL0Nvc2VMYXlvdXRPcHRpb25zSW1wbCc7XHJcbmltcG9ydCB7IERhZ3JlTGF5b3V0T3B0aW9uc0ltcGwgfSBmcm9tICcuLi9tb2RlbHMvbGF5b3V0cy9EYWdyZUxheW91dE9wdGlvbnNJbXBsJztcclxuaW1wb3J0IHsgR3JpZExheW91dE9wdGlvbnNJbXBsIH0gZnJvbSAnLi4vbW9kZWxzL2xheW91dHMvR3JpZExheW91dE9wdGlvbnNJbXBsJztcclxuaW1wb3J0IHsgTnVsbExheW91dE9wdGlvbnNJbXBsIH0gZnJvbSAnLi4vbW9kZWxzL2xheW91dHMvTnVsbExheW91dE9wdGlvbnNJbXBsJztcclxuaW1wb3J0IHsgUHJlc2V0TGF5b3V0T3B0aW9uc0ltcGwgfSBmcm9tICcuLi9tb2RlbHMvbGF5b3V0cy9QcmVzZXRMYXlvdXRPcHRpb25zSW1wbCc7XHJcbmltcG9ydCB7IFJhbmRvbUxheW91dE9wdGlvbnNJbXBsIH0gZnJvbSAnLi4vbW9kZWxzL2xheW91dHMvUmFuZG9tTGF5b3V0T3B0aW9uc0ltcGwnO1xyXG5cclxuaW1wb3J0IHsgRXNEaWFncmFtU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2VzLWRpYWdyYW0uc2VydmljZSc7XHJcbmltcG9ydCB7IEVzRGlhZ3JhbURpc3BhdGNoZXIgfSBmcm9tICcuLi9zZXJ2aWNlcy9lcy1kaWFncmFtLmRpc3BhdGNoZXInO1xyXG5pbXBvcnQgeyBSZXNpemVTZW5zb3IgfSBmcm9tIFwiLi4vZXh0ZW5zaW9ucy9SZXNpemVTZW5zb3JcIjtcclxuXHJcbmltcG9ydCB7IFJlYWN0aXZlRXh0ZW5zaW9ucyB9IGZyb20gJy4uL2V4dGVuc2lvbnMvUmVhY3RpdmVFeHRlbnNpb25zJztcclxuXHJcbmltcG9ydCAqIGFzIGN5XyBmcm9tICdjeXRvc2NhcGUnO1xyXG4vKiogQGlnbm9yZSAqL2NvbnN0IGN5dG9zY2FwZSA9IGN5XztcclxuXHJcbi8qKlxyXG4gKiBDb21wb25lbnRlIGNoZSBzaSBvY2N1cGEgZGkgZ3JhZmljYXJlIHVuIGRpYWdyYW1tYSBlIGRpIGdlc3Rpcm5lIGlsIGNpY2xvIGRpIHZpdGFcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZXMtZGlhZ3JhbScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2VzLWRpYWdyYW0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2VzLWRpYWdyYW0uY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRXNEaWFncmFtQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcclxuXHJcbiAgLyoqXHJcbiAgICogUmlmZXJpbWVudG8gYWxsJ29nZ2V0dG8gSFRNTCBzdSBjdWkgY3JlYXJlIGlsIGRpYWdyYW1tYVxyXG4gICAqL1xyXG4gIEBWaWV3Q2hpbGQoJ2dyYXBoJykgY3lHcmFwaDogRWxlbWVudFJlZjtcclxuXHJcbiAgLyoqXHJcbiAgICogTm9tZSBkZWwgZGlhZ3JhbW1hLCBmb25kYW1lbnRhbGUgYXNzZWduYXJsbyBwZXIgcGVybWV0dGVyZSBhbGxhIGxpYnJlcmlhIGRpIHNjaGVkdWxhcm5lIGxhIGNyZWF6aW9uZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIG5hbWU6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIC8qKlxyXG4gICAqIEluZGljYSBzZSB1dGlsaXp6YXJlIGlsIG1lbsO5IGNvbnRlc3R1YWxlIGEgcnVvdGEgYXR0b3JubyBhZCBvZ25pIG5vZG9cclxuICAgKi9cclxuICBASW5wdXQoKSBVc2VDb250ZXh0TWVudTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBJbmRpY2EgbGUgb3B6aW9uaSBkZWwgbWVuw7kgY29udGVzdHVhbGUgcXVhbG9yYSAqKlVzZUNvbnRleHRNZW51KiogZm9zc2UgKip0cnVlKiouXHJcbiAgICogXHJcbiAgICogT2duaSBlbGVtZW50byBkaSBxdWVzdG8gYXJyYXkgw6ggdW4gc2VsZXR0b3JlIGNvbiBpbCBtZW51IGRhIG1vc3RyYXJlIHBlciBxdWVsbGEgY2FzaXN0aWNhXHJcbiAgICovXHJcbiAgQElucHV0KCkgQ29udGV4dE1lbnVPcHRpb25zOiBDb250ZXh0TWVudU9wdGlvbnNbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGljZSBhbCBjb21wb25lbnRlIHNlIGlsIGRpYWdyYW1tYSBkZXZlIHV0aWxpenphcmUgaWwgc2lzdGVtYSBkaSBlc3RlbnNpb25lIHBlciBsJ2V4cGFuZCBlIGNvbGxhcHNlIGRlaSBncnVwcGlcclxuICAgKi9cclxuICBASW5wdXQoKSBVc2VFeHBhbmRDb2xsYXBzZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBPcHppb25pIG5hdGl2ZSBkZWxsJ2VzdGVuc2lvbmUgZXhwYW5kLWNvbGxhcHNlLCB2ZW5nb25vIG92dmlhbWVudGUgdXRpbGl6emF0ZSBzb2xvIHNlICoqVXNlRXhwYW5kQ29sbGFwc2UqKiDDqCAqKnRydWUqKlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIEV4cGFuZENvbGxhcHNlT3B0aW9uczogRXhwYW5kQ29sbGFwc2VPcHRpb25zO1xyXG5cclxuICAvKipcclxuICAgKiBCbG9jY28gY29tcGxldG8gZGVsbGUgb3B6aW9uaSwgYWx0ZXJuYXRpdm8gYWxsJ2Fzc2VnbmF6aW9uZSBkaSAqKkVsZW1lbnRzKiosICoqTm9kZVN0eWxlcyoqLCAqKkVkZ2VTdHlsZXMqKiwgZSAqKkxheW91dCoqLlxyXG4gICAqIFxyXG4gICAqIFF1YWxvcmEgZW50cmFtYmUgdmVuaXNzZXJvIHNwZWNpZmljYXRlIHZlcnLDoCBlZmZldHR1YXRhIHVuJ3VuaW9uZSBmcmEgcXVlc3RlIG9wemlvbmkgZSBxdWVsbGUgc3BlY2lmaWNhdGUsIGRhbmRvIHByaW9yaXTDoCBhbGxlIHNwZWNpZmljYXRlXHJcbiAgICovXHJcbiAgQElucHV0KCkgTmF0aXZlT3B0aW9uczogY3l0b3NjYXBlLkN5dG9zY2FwZU9wdGlvbnMgPSB7fTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGVmaW5pemlvbmUgZGVnbGkgZWxlbWVudGkgZGEgbW9zdHJhcmUgbmVsIGRpYWdyYW1tYVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIEVsZW1lbnRzOiBjeXRvc2NhcGUuRWxlbWVudERlZmluaXRpb25bXTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGVmaW5pemlvbmUgZGVnbGkgc3RpbGkgZGVpIG5vZGlcclxuICAgKi9cclxuICBASW5wdXQoKSBOb2RlU3R5bGVzOiBjeXRvc2NhcGUuQ3NzLk5vZGU7XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmluaXppb25lIGRlZ2xpIHN0aWxpIGRlaSBjb2xsZWdhbWVudGkgZnJhIGkgbm9kaVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIEVkZ2VTdHlsZXM6IGN5dG9zY2FwZS5Dc3MuRWRnZTtcclxuXHJcbiAgLyoqXHJcbiAgICogSW4gdW4gZGlhZ3JhbW1hIGluIHNvbGEgbGV0dHVyYSB0dXR0ZSBsZSBpbnRlcmF6aW9uaSB1dGVudGUgc29ubyBhbm51bGxhdGVcclxuICAgKi9cclxuICBASW5wdXQoKSBSZWFkb25seTogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogQWdnaW9ybmEgYXV0b21hdGljYW1lbnRlIGxlIGRpbWVuc2lvbmkgZGVsIGRpYWdyYW1tYSBxdWFuZG8gY2FtYmlhbm8gbGUgZGltZW5zaW9uaSBkZWxsYSBmaW5lc3RyYVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIEF1dG91cGRhdGVTaXplOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5kaWNhIGRpIG1hbnRlbmVyZSBsYSBwb3NpemlvbmUgZGVpIG5vZGkgcXVhbG9yYSB2ZW5pc3Nlcm8gY2FtYmlhdGkgZGFsbCdJbnB1dCAqKkVsZW1lbnRzKiouXHJcbiAgICogXHJcbiAgICogU2UgbCdJRCBkaSB1biBub2RvIMOoIHVndWFsZSBhbGwnSUQgZGkgdW4gbm9kbyBwcmVzZW50ZSBpbiBwcmVjZWRlbnphLCBpbCBudW92byBub2RvIG5lIGVyZWRpdGVyw6AgbGEgcG9zaXppb25lXHJcbiAgICovXHJcbiAgQElucHV0KCkgUHJlc2VydmVFbGVtZW50c1Bvc2l0aW9uOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogUXVhbG9yYSB2ZW5pc3NlIG1vZGlmaWNhdG8gbCdJbnB1dCAqKkVsZW1lbnRzKiosIHBpdXR0b3N0byBjaGUgbWV0dGVyZSBzZW1wbGljZW1lbnRlIGlsIG51b3ZvIEVsZW1lbnRvIGluIGJhc2UgYWwgTGF5b3V0IHByZWNlZGVudGUsIGFwcGxpY2EgYW5jaGUgdW4nYW5pbWF6aW9uZSBcclxuICAgKiBcclxuICAgKiBGdW56aW9uYSBzb2xhbWVudGUgc2UgaWwgKipMYXlvdXQqKiBjb3JyZW50ZSBkZWwgZGlhZ3JhbW1hIHN1cHBvcnRhIGxlIGFuaW1hemlvbmlcclxuICAgKi9cclxuICBASW5wdXQoKSBBbmltYXRlTGF5b3V0Q2hhbmdlczogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIEF0dGl2YSB1bmEgbW9kYWxpdMOgIGRpIHNlbGV6aW9uZSBcInNtYXJ0XCIuLi4gbyBwZXJsb21lbm8gXCJzbWFydGVyXCIgZGVsIGRlZmF1bHQgZGkgQ3l0b3NjYXBlLlxyXG4gICAqIFxyXG4gICAqIC0gSWwgY2xpY2sgZGkgdW4gZWxlbWVudG8gbm9uIHNlbGV6aW9uYXRvIGxvIHNlbGV6aW9uYVxyXG4gICAqIC0gSWwgY2xpY2sgZGkgdW4gZWxlbWVudG8gc2VsZXppb25hdG8gbG8gZGVzZWxlemlvbmFcclxuICAgKiAtIExvIHN0YXRvIGRpIHNlbGV6aW9uZSB2aWVuZSBwZXJzaXN0aXRvIHN1bGwnb2dnZXR0byBvcmlnaW5hbGUgaW52ZWNlIGRpIHJpbWFuZXJlIGluIHVuIGludGVybmFsXHJcbiAgICogLSBBbGwnYXNzZWduYXppb25lIGRpIG9nZ2V0dGkgc2VsZXppb25hdGksIHF1ZXN0aSB2ZW5nb25vIG1hcmNhdGkgY29ycmV0dGFtZW50ZSBjb24gbCdvdmVybGF5IGRpIHNlbGV6aW9uZVxyXG4gICAqIFxyXG4gICAqIE4uQjogbGEgY2hpYW1hdGEgYWxsJ2V2ZW50byAqKm9uTm9kZUNsaWNrKiogYXZ2aWVuZSAqKkRPUE8qKiBsYSBnZXN0aW9uZSBkZWxsYSBzZWxlemlvbmVcclxuICAgKi9cclxuICBASW5wdXQoKSBTbWFydFNlbGVjdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBJbmRpY2EgZGkgc2VsZXppb25hcmUgdW4gZWxlbWVudG8gcGVyIHZvbHRhIHF1YWxvcmEgKipTbWFydFNlbGVjdGlvbioqIGZvc3NlIGF0dGl2b1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIFNpbmdsZVNlbGVjdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBDU1MgcGVyIGxhIGdyYWZpY2F6aW9uZSBkZWxsYSBzZWxlemlvbmUgZGVpIG5vZGkuIFF1YW5kbyB1biBub2RvIHZlcnLDoCBzZWxlemlvbmF0byBhdnLDoCBzb3ByYSBkaSBzZSB1biBvdmVybGF5IGNoZSAnc2JvcmRhJyBkaSAqKm92ZXJsYXktcGFkZGluZyoqIHBpeGVsLFxyXG4gICAqIGRpIGNvbG9yZSAqKm92ZXJsYXktY29sb3IqKiBlIGNvbiB1biBvcGFjaXTDoCAqKm92ZXJsYXktb3BhY2l0eSoqXHJcbiAgICogXHJcbiAgICogQXNzZWduYW5kbyBcInt9XCIgYSBxdWVzdG8gaW5wdXQsIGxhIFNtYXJ0IHNlbGVjdGlvbiB2aWVuZSBnZXN0aXRhIG1hIGxhIGdlc3Rpb25lIGdyYWZpY2Egw6ggYWZmaWRhdGEgYWxsJ3V0ZW50ZSxcclxuICAgKiBhZCBlc2VtcGlvIHVzYW5kbyBkZWkgKipOb2RlSFRNTFRlbXBsYXRlcyoqIGNoZSBkZWZpbmlzY2FubyBzZWxldHRvcmkgc3Ugbm9kaSBcIjpzZWxlY3RlZFwiXHJcbiAgICogXHJcbiAgICogQGRlZmF1bHQgeydvdmVybGF5LWNvbG9yJzonYmx1ZScsJ292ZXJsYXktb3BhY2l0eSc6MC41LCdvdmVybGF5LXBhZGRpbmcnOjd9XHJcbiAgICovXHJcbiAgQElucHV0KCkgU21hcnRTZWxlY3Rpb25TdHlsZXM6IHsgJ292ZXJsYXktY29sb3InOiBzdHJpbmcsICdvdmVybGF5LW9wYWNpdHknOiBudW1iZXIsICdvdmVybGF5LXBhZGRpbmcnOiBudW1iZXIgfSA9IG51bGxcclxuXHJcbiAgLyoqXHJcbiAgICogUGVyaW9kbyBkaSB0aHJvdHRsZSBkYSBxdWFuZG8gdmllbmUgZWZmZXR0dWF0byB1biByZXNpemUgYSBxdWFuZG8gcmljYWxjb2xhcmUgbGUgZGltZW5zaW9uaSBkZWwgZGlhZ3JhbW1hLlxyXG4gICAqIFxyXG4gICAqIFB1w7IgZXNzZXJlIHRlbnV0byBhIDAgKHJlZHJhdyBpc3RhbnRhbmVvKSBmaW5jaMOpIG5vbiBjaSBzb25vIHByb2JsZW1pIGRpIHByZXN0YXppb25pIGNvbiBldmVudHVhbG1lbnRlIHRhbnRpIHJlc2l6ZSBhIHBvY2EgZGlzdGFuemEgbCd1bm8gZGFsbCdhbHRyby5cclxuICAgKi9cclxuICBASW5wdXQoKSBSZXNpemVUaHJvdHRsZVRpbWU6IG51bWJlciA9IDA7XHJcblxyXG4gIC8qKlxyXG4gICAqIExheW91dCBkaSBvcmRpbmFtZW50byBkZWkgbm9kaVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIExheW91dDogQnJlYWR0aEZpcnN0TGF5b3V0T3B0aW9uc0ltcGwgfCBDaXJjbGVMYXlvdXRPcHRpb25zSW1wbCB8IENvbmNlbnRyaWNMYXlvdXRPcHRpb25zSW1wbCB8XHJcbiAgICBDb3NlTGF5b3V0T3B0aW9uc0ltcGwgfCBEYWdyZUxheW91dE9wdGlvbnNJbXBsIHwgR3JpZExheW91dE9wdGlvbnNJbXBsIHwgTnVsbExheW91dE9wdGlvbnNJbXBsIHwgUHJlc2V0TGF5b3V0T3B0aW9uc0ltcGwgfFxyXG4gICAgUmFuZG9tTGF5b3V0T3B0aW9uc0ltcGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRlbXBsYXRlIEhUTUwgZGEgYXBwbGljYXJlIGFpIG5vZGkgcGVyIGRhcmdsaSBzdGlsaSBwYXJ0aWNvbGFyaSwgZGl2ZXJzaSBkYWxsZSBzaGFwZSBkaSBkZWZhdWx0XHJcbiAgICovXHJcbiAgQElucHV0KCkgTm9kZUhUTUxUZW1wbGF0ZXM6IE5vZGVIVE1MVGVtcGxhdGVbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogRm9ybmlzY2UgaWwgZ2xvYmFsIGRlbGxhIGxpYnJlcmlhIChuYW1lc3BhY2UgKipjeXRvc2NhcGUqKikgZSBzaSBhc3BldHRhIGNoZSBkb3BvIG9wZXJhemlvbmkgZGkgaW1wb3J0YXppb25lIFxyXG4gICAqIGxhc2NpYXRlIGFsbCd1dGVudGUgdmVuZ2FubyBhZ2dpdW50aSB0dXR0aSBpIG1vZHVsaSBkZXNpZGVyYXRpLiBcclxuICAgKiBcclxuICAgKiDDiCAqKmZvbmRhbWVudGFsZSoqIGNoZSBpbCBwcmltbyBwYXJhbWV0cm8gKGlsIG5vbWUgZGVsIG1vZHVsbykgc2lhIHVndWFsZSBhIGNpw7IgZGkgY3VpIHZpZW5lIGZhdHRvIGlsIHJlcXVpcmUgaW4gbW9kbyBjaGUgbGEgbGlicmVyaWFcclxuICAgKiBwb3NzYSBjb250cm9sbGFyZSBjaGUgaWwgbW9kdWxvIGltcG9ydGF0byBub24gc2lhIGdpw6Agc3RhdG8gaW1wb3J0YXRvIGluIHByZWNlZGVuemFcclxuICAgKiBcclxuICAgKiAjIyBFc2VtcGlvOlxyXG4gICAqIFxyXG4gICAqIGBgYHR5cGVzY3JpcHRcclxuICAgKiAoZ2xvYmFsKSA9PiB7XHJcbiAgICogICAgcmV0dXJuIGltcG9ydChcImN5dG9zY2FwZS1leHRlbnNpb24tbGlicmFyeVwiKS50aGVuKG1vZHVsZSA9PiBnbG9iYWwudXNlKFwiY3l0b3NjYXBlLWV4dGVuc2lvbi1saWJyYXJ5XCIsIG1vZHVsZS5kZWZhdWx0KSk7XHJcbiAgICogXHJcbiAgICogICAgLi4uXHJcbiAgICogfVxyXG4gICAqIGBgYFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIEV4dGVuc2lvbk1vZHVsZXNJbXBvcnRlcjogKGdsb2JhbDogeyB1c2U6IChtb2R1bGVOYW1lOiBzdHJpbmcsIG1vZHVsZTogdm9pZCB8IGN5dG9zY2FwZS5FeHQpID0+IHZvaWQgfSkgPT4gUHJvbWlzZTxhbnk+ID0gbnVsbDtcclxuXHJcbiAgLyoqXHJcbiAgICogRm9ybmlzY2UgbCdpc3RhbnphIGF0dHVhbGUgZGkgQ3l0b3NjYXBlIGRhIGN1aSDDqCBwb3NzaWJpbGUgcHJlbmRlcmUgbGUgbGlicmVyaWUgZGkgZXN0ZW5zaW9uZSBjYXJpY2F0ZSBpbiAqKkV4dGVuc2lvbk1vZHVsZXNJbXBvcnRlcioqXHJcbiAgICogZSBjb25maWd1cmFybGUgaW4gYmFzZSBhaSBjb21wb3J0YW1lbnRpIHNwZWNpZmljaVxyXG4gICAqIFxyXG4gICAqICMjIEVzZW1waW86XHJcbiAgICogXHJcbiAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAqIChjeXRvc2NhcGVDb3JlKSA9PiB7XHJcbiAgICogICAgLy8gRmFyZSBxdWVzdG8gbGF2b3JvIHBlciBvZ25pIGVzdGVuc2lvbmUgY2FyaWNhdGFcclxuICAgKiAgICBsZXQgZXh0ZW5zaW9uQ29uZmlndXJhdGlvbiA9IHsgLi4uIH07XHJcbiAgICogICAgbGV0IGV4dGVuc2lvbkluc3RhbmNlID0gY3l0b3NjYXBlQ29yZS5leHRlbnNpb25MaWJyYXJ5KGV4dGVuc2lvbkNvbmZpZ3VyYXRpb24pO1xyXG4gICAqICAgIGV4dGVuc2lvbkluc3RhbmNlLmRvU29tZXRoaW5nU3BlY2lmaWNUb1RoaXNFeHRlbnNpb24oKTtcclxuICAgKiBcclxuICAgKiAgICAuLi5cclxuICAgKiB9XHJcbiAgICogYGBgXHJcbiAgICovXHJcbiAgQElucHV0KCkgRXh0ZW5zaW9uTW9kdWxlc0FwcGx5ZXI6IChjeXRvc2NhcGVDb3JlOiBjeXRvc2NhcGUuQ29yZSkgPT4gdm9pZCA9IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIEV2ZW50byBsYW5jaWF0byBhbCBjbGljayBkaSB1biBub2RvLCBjb250aWVuZSBsJ29nZ2V0dG8gKipkYXRhKiogZGVsIG5vZG8gaW4gcXVlc3Rpb25lXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIG9uTm9kZUNsaWNrOiBFdmVudEVtaXR0ZXI8eyBkYXRhOiBhbnkgfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgZGF0YTogYW55IH0+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEV2ZW50byBsYW5jaWF0byBhbGxhIHNlbGV6aW9uZSBvIGRlc2VsZXppb25lIGRpIHVuIG5vZG8sIGNvbnRpZW5lIGwnb2dnZXR0byAqKmRhdGEqKiBkZWwgbm9kbyBpbiBxdWVzdGlvbmUgZSBpbmZvcm1hemlvbmkgc3VsIHN1byBzdGF0byBkaSBzZWxlemlvbmVcclxuICAgKi9cclxuICBAT3V0cHV0KCkgb25Ob2RlU2VsZWN0aW9uOiBFdmVudEVtaXR0ZXI8eyBkYXRhOiBhbnksIHNlbGVjdGVkOiBib29sZWFuIH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7IGRhdGE6IGFueSwgc2VsZWN0ZWQ6IGJvb2xlYW4gfT4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnRvIGxhbmNpYXRvIGFsIHRlcm1pbmUgZGVsIExheW91dGluZy4gU2Ugc2kgdnVvbGUgZXNlZ3VpcmUgY29kaWNlIGRvcG8gY2hlIGlsIExheW91dCDDqCBmYXR0byBlIGNvbXBsZXRhbWVudGUgZ3JhZmljYXRvLCBxdWVzdG8gw6ggaWwgcHVudG9cclxuICAgKi9cclxuICBAT3V0cHV0KCkgb25MYXlvdXREb25lOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEV2ZW50byBsYW5jaWF0byBhbCB0ZXJtaW5lIGRlbCBjYXJpY2FtZW50byBkZWwgZGlhZ3JhbW1hXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIG9uTG9hZGVkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFZhcmlhYmlsZSBzdSBjdWkgc2FsdmFyc2kgc2UgaSBub2RpIGhhbm5vIHVuYSBnZXJhcmNoaWEgYSBncnVwcGkgbyBuby4gU2VydmUgcGVyIHBvaSBjYXJpY2FyZSBsJ2VzdGVuc2lvbmUgZXhwYW5kLWNvbGxhcHNlIHF1YWxvcmEgZm9zc2UgcmljaGllc3RhXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBOb2Rlc0hpZXJhcmNoeTogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5kaWNhIHNlIGlsIHJlbmRlcmluZyBkZWwgZGlhZ3JhbW1hIMOoIHRlcm1pbmF0b1xyXG4gICAqL1xyXG4gIHByaXZhdGUgUmVuZGVyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogSXN0YW56YSBkZWwgZGlhZ3JhbW1hIGF0dHVhbG1lbnRlIGluIHVzb1xyXG4gICAqL1xyXG4gIHB1YmxpYyBjeTogY3l0b3NjYXBlLkNvcmVcclxuXHJcbiAgLyoqXHJcbiAgICogQXBpIGRlbGwnZXN0ZW5zaW9uZSBleHBhbmQtY29sbGFwc2UgcGVyIHBlcm1ldHRlcmUgZGkgZWZmZXR0dWFyZSBvcGVyYXppb25pIGRhbGwnZXN0ZXJubyBkZWwgZGlhZ3JhbW1hLiBWZW5nb25vIHZhbG9yaXp6YXRlIHNlICoqVXNlRXhwYW5kQ29sbGFwc2UqKiDDqCAqKnRydWUqKlxyXG4gICAqL1xyXG4gIHB1YmxpYyBFeHBhbmRDb2xsYXBzZUFwaTogYW55ID0gbnVsbDtcclxuXHJcbiAgLyoqXHJcbiAgICogQXBpIGRlbGwnZXN0ZW5zaW9uZSBodG1sLW5vZGUgcGVyIHBlcm1ldHRlcmUgZGkgZWZmZXR0dWFyZSBvcGVyYXppb25pIGRhbGwnZXN0ZXJubyBkZWwgZGlhZ3JhbW1hLiBWZW5nb25vIHZhbG9yaXp6YXRlIHNlIHNvbm8gaW1wb3N0YXRpIGRlaSAqKk5vZGVIVE1MVGVtcGxhdGVzKipcclxuICAgKi9cclxuICBwcml2YXRlIEh0bWxOb2RlQXBpOiBhbnkgPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBPc3NlcnZhdG9yZSBkZWxsZSBtb2RpZmljaGUgYWwgY29udGVuaXRvcmUgZGVsIGRpYWdyYW1tYVxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVzaXplT2JzZXJ2ZXI6IFJlc2l6ZVNlbnNvcjtcclxuXHJcbiAgLyoqXHJcbiAgICogUmlmZXJpbWVudG8gYWxsJ3VsdGltbyBsYXlvdXQgdXRpbGl6emF0by4gVmllbmUgcmlhcHBsaWNhdG8gcXVhbG9yYSB2ZW5pc3NlIGNhbWJpYXRvIGwnSW5wdXQgKipFbGVtZW50cyoqLlxyXG4gICAqIFxyXG4gICAqIE5vbiB1dGlsaXp6byBpbCBtYWtlTGF5b3V0cyBwZXJjaMOpIGFsdHJpbWVudGkgcmlzY2hpZXJlaSBkaSBjcmVhcmUgdW4gbGF5b3V0IHJpZmVyaXRvIGEgWCBlbGVtZW50aSwgbmUgYWdnaXVuZ28gMSwgcmlhcHBsaWNvIGlsIExheW91dCBcclxuICAgKiBtYSBtaSB2aWVuZSByaWFwcGxpY2F0byBhIFggZWxlbWVudGkgaW52ZWNlIGNoZSBYICsgMVxyXG4gICAqL1xyXG4gIHByaXZhdGUgTGFzdExheW91dDogY3l0b3NjYXBlLkxheW91dE9wdGlvbnM7XHJcblxyXG4gIC8qKlxyXG4gICAqIENvc3RydXR0b3JlXHJcbiAgICogXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIHByaXZhdGUgc2VydmljZTogRXNEaWFncmFtU2VydmljZSwgQE9wdGlvbmFsKCkgcHJpdmF0ZSBkaXNwYXRjaGVyOiBFc0RpYWdyYW1EaXNwYXRjaGVyLCBwcml2YXRlIGV4dHM6IFJlYWN0aXZlRXh0ZW5zaW9ucykgeyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmUgXHJcbiAgICogXHJcbiAgICogQW5ndWxhciBQaXBlbGluZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICBpZiAoIXRoaXMuc2VydmljZSB8fCAhdGhpcy5kaXNwYXRjaGVyKVxyXG4gICAgICB0aHJvdyBcIklsIG1vZHVsbyBAZXNmYWVuemEvZGlhZ3JhbXMgbm9uIMOoIHN0YXRvIGltcG9ydGF0byBjb24gaWwgZm9yUm9vdCgpO1wiO1xyXG5cclxuICAgIHRoaXMuZGlzcGF0Y2hMb2FkQ2hhcnQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFsbCdvbkRlc3Ryb3kgcmlwdWxpc2NvIGxhIG1lbW9yaWEgZGFsIGRpYWdyYW1tYVxyXG4gICAqL1xyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIuZGlzcG9zZSgpO1xyXG4gICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG51bGw7XHJcblxyXG4gICAgaWYgKHRoaXMuY3kpIHtcclxuICAgICAgdGhpcy5zZXJ2aWNlLmxvZyhcIklcIiwgXCJEaWFncmFtXCIgKyBcIiBcIiArIHRoaXMubmFtZSArIFwiOiBVbmxvYWRpbmcgZGVzdHJveWVkIGRpYWdyYW1cIiwgZmFsc2UpO1xyXG4gICAgICB0aGlzLmN5LmRlc3Ryb3koKTtcclxuICAgICAgdGhpcy5kaXNwYXRjaGVyLmRlcmVnaXN0ZXIodGhpcy5uYW1lKTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5zZXJ2aWNlLmxvZyhcIklcIiwgXCJDaGFydCBcIiArIHRoaXMubmFtZSArIFwiOiBVbmxvYWRpbmcgdW5jcmVhdGVkIGNoYXJ0IGNvbXBvbmVudC4gSXQgcHJvYmFibHkgd2FzIGEgZHVwbGljYXRlZFwiLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWdpc3RyYSBpbCBkaWFncmFtbWEgYXR0dWFsZSBuZWwgRGlzcGF0Y2hlciBpbiBtb2RvIGNoZSB2ZW5nYSBjYXJpY2F0byBhcHBlbmEgcG9zc2liaWxlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBkaXNwYXRjaExvYWRDaGFydCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzcGF0Y2hlci5yZWdpc3Rlcih0aGlzLm5hbWUsICgpID0+IHsgcmV0dXJuIHRoaXMucmVuZGVyKCk7IH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZSBcclxuICAgKiBcclxuICAgKiBBbmd1bGFyIFBpcGVsaW5lOiBHZXN0aW9uZSByaS1ncmFmaWNhemlvbmUgZGVsIGRpYWdyYW1tYSwgc2UgcG9zc2liaWxlXHJcbiAgICovXHJcbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiBhbnkge1xyXG4gICAgbGV0IHRvQ2hlY2sgPSBbXCJUZW1wbGF0ZXNcIiwgXCJVc2VDb250ZXh0TWVudVwiLCBcIkNvbnRleHRNZW51T3B0aW9uc1wiLCBcIlVzZUV4cGFuZENvbGxhcHNlXCIsIFwiRXhwYW5kQ29sbGFwc2VPcHRpb25zXCIsIFwiTm9kZVN0eWxlc1wiLCBcIkVkZ2VTdHlsZXNcIiwgXCJOYXRpdmVPcHRpb25zXCJdO1xyXG5cclxuICAgIGlmICh0aGlzLlJlbmRlcmVkICYmIHRvQ2hlY2suc29tZSh0ID0+IGNoYW5nZXNbdF0pKVxyXG4gICAgICB0aGlzLnNlcnZpY2UubG9nKFwiV1wiLCBcIlJlZHJhdyBiYXNlZCBvbiBkeW5hbWljIElucHV0IGNoYW5nZSBpcyBzdXBwb3J0ZWQgb25seSBmb3IgJ0VsZW1lbnRzJyBhbmQgJ0xheW91dCcgaW5wdXRzLCBwbGVhc2UgZGVzdHJveSB0aGUgY29tcG9uZW50IGFuZCByZWNyZWF0ZSBpdCB3aXRoIHRoZSBuZXcgc2V0dGluZ3NcIik7XHJcblxyXG4gICAgbGV0IGVsZW1lbnRDaGFuZ2VzID0gY2hhbmdlc1tcIkVsZW1lbnRzXCJdO1xyXG4gICAgbGV0IGxheW91dENoYW5nZXMgPSBjaGFuZ2VzW1wiTGF5b3V0XCJdO1xyXG4gICAgaWYgKGVsZW1lbnRDaGFuZ2VzICYmICFlbGVtZW50Q2hhbmdlcy5maXJzdENoYW5nZSkge1xyXG4gICAgICB0aGlzLnNlcnZpY2UubG9nKFwiSVwiLCBcIkVsZW1lbnRzIGhhdmUgYmVlbiBjaGFuZ2VkIGFmdGVyIGRpYWdyYW0gaW5pdGlhbGl6YXRpb25cIik7XHJcblxyXG4gICAgICAvLyBDYW1iaWFtZW50byBhZ2xpIEVsZW1lbnRpOiByaXB1bGlzY28gZ2xpIGVsZW1lbnRpIHZlY2NoaSwgcHJlbmRvIGkgbnVvdmksIGxpIHNpc3RlbW8gZSBsaSByaWFzc2Vnbm8uIFxyXG4gICAgICAvLyBTZSBpbCBudW92byBJbnB1dCBFbGVtZW50cyDDqCByb2JhIHN0cmFuYSBtaSBsaW1pdG8gYSByaXB1bGlyZSBpbCBkaWFncmFtbWFcclxuICAgICAgLy8gU2UgY3l0b3NjYXBlIGF2ZXZhIGdpw6AgZGVnbGkgZWxlbWVudGkgcHJlY2VkZW50ZW1lbnRlIG5lIHByZW5kbyBsZSBwb3NpemlvbmkgaW4gbW9kbyBkYSByaWRpc2VnbmFybGkgcGFydGVuZG8gZGFsbG8gc3Rlc3NvIHB1bnRvIChjYXJpbm8gcGVyIGxlIGFuaW1hemlvbmkpXHJcbiAgICAgIGxldCBlbGVtZW50cyA9IGVsZW1lbnRDaGFuZ2VzPy5jdXJyZW50VmFsdWU7XHJcbiAgICAgIGxldCBwcmV2aW91c19lbGVtZW50cyA9IHRoaXMuUHJlc2VydmVFbGVtZW50c1Bvc2l0aW9uID8gPGFueT50aGlzLmN5Lm5vZGVzKCkgOiBudWxsO1xyXG5cclxuICAgICAgdGhpcy5jeS5lbGVtZW50cygpLnJlbW92ZSgpO1xyXG4gICAgICBpZiAoZWxlbWVudHMgJiYgZWxlbWVudHMubGVuZ3RoICYmIGVsZW1lbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLnJldmlld0N5dG9zY2FwZUVsZW1lbnRzKGVsZW1lbnRzLCBwcmV2aW91c19lbGVtZW50cyk7XHJcbiAgICAgICAgdGhpcy5jeS5hZGQoZWxlbWVudHMpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5TbWFydFNlbGVjdGlvbilcclxuICAgICAgICAgIHRoaXMuc2V0dXBFbGVtZW50c1NlbGVjdGlvbklmTmVlZGVkKCk7XHJcblxyXG4gICAgICAgIC8vIFNlIHNvbG8gZ2xpIGVsZW1lbnRpIGNhbWJpYW5vLCByaWFwcGxpY28gaWwgTGF5b3V0IHByZWNlZGVudGVcclxuICAgICAgICBpZiAoIWxheW91dENoYW5nZXMgJiYgdGhpcy5MYXN0TGF5b3V0KSB7XHJcblxyXG4gICAgICAgICAgLy8gU2UgZGV2byBhbmltYXJlIGxlIG1vZGlmY2hlIGFsIGxheW91dCBmb3J6byBpbCBwYXJhbWV0cm8gcmVsYXRpdm9cclxuICAgICAgICAgIGlmICh0aGlzLkFuaW1hdGVMYXlvdXRDaGFuZ2VzKVxyXG4gICAgICAgICAgICAoPGFueT50aGlzLkxhc3RMYXlvdXQpLmFuaW1hdGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgIHRoaXMuY3kubGF5b3V0KHRoaXMuTGFzdExheW91dCkucnVuKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2UgaWwgbGF5b3V0IGNhbWJpYSBsbyBhcHBsaWNvIGUgbWUgbG8gc2Fsdm8gY29tZSBsYXlvdXQgcHJlY2VkZW50ZSBwZXIgaWwgZnV0dXJvXHJcbiAgICBpZiAobGF5b3V0Q2hhbmdlcyAmJiAhbGF5b3V0Q2hhbmdlcy5maXJzdENoYW5nZSkge1xyXG4gICAgICB0aGlzLnNlcnZpY2UubG9nKFwiSVwiLCBcIkxheW91dCBoYXZlIGJlZW4gY2hhbmdlZCBhZnRlciBkaWFncmFtIGluaXRpYWxpemF0aW9uXCIpO1xyXG4gICAgICB0aGlzLkxhc3RMYXlvdXQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGxheW91dENoYW5nZXMuY3VycmVudFZhbHVlKSk7XHJcbiAgICAgIHRoaXMuY3kubGF5b3V0KHRoaXMuTGFzdExheW91dCkucnVuKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVmZmV0dHVhIGlsIHJlbmRlcmluZyBkZWwgZGlhZ3JhbW1hXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyByZW5kZXIoKSB7XHJcblxyXG4gICAgLy8gVGlybyBmdW9yaSBsZSBvcHppb25pIGNvbiBjdWkgZ2VuZXJhcmUgaWwgZGlhZ3JhbW1hXHJcbiAgICBsZXQgY3lPcHRpb25zID0gdGhpcy5nZXRDb21wbGV0ZWRPcHRpb25zKCk7XHJcbiAgICB0aGlzLk5vZGVzSGllcmFyY2h5ID0gY3lPcHRpb25zLmVsZW1lbnRzICYmICg8Y3lfLkVsZW1lbnREZWZpbml0aW9uW10+Y3lPcHRpb25zLmVsZW1lbnRzKS5zb21lKHQgPT4gdC5kYXRhLnBhcmVudCk7XHJcblxyXG4gICAgLy8gQ2FyaWNvIGV2ZW50dWFsaSBjbGFzc2kgZGkgZXN0ZW5zaW9uZSBjaGUgc2Vydm9ub1xyXG4gICAgYXdhaXQgdGhpcy5wZXJmb3JtTW9kdWxlc0xvYWRpbmcoKTtcclxuXHJcbiAgICAvLyBHZW5lcm8gaWwgZGlhZ3JhbW1hXHJcbiAgICB0aGlzLmN5ID0gY3l0b3NjYXBlKGN5T3B0aW9ucyk7XHJcblxyXG4gICAgLy8gQ29sbGVnbyBnbGkgZXZlbnRpIGFsIGNvbXBvbmVudGVcclxuICAgIHRoaXMuYmluZEN5dG9zY2FwZUV2ZW50cygpO1xyXG5cclxuICAgIC8vIFV0aWxpenpvIGxlIGNsYXNzaSBkaSBlc3RlbnNpb25lIGNhcmljYXRlIHByZWNlZGVudGVtZW50ZSBwZXIgZmFyZSBpbCByZXN0byBkZWxsZSBtaWUgb3BlcmF6aW9uaVxyXG4gICAgdGhpcy5wZXJmb3JtT3BlcmF0aW9uc1dpdGhMb2FkZWRNb2R1bGVzKCk7XHJcblxyXG4gICAgLy8gSW1wb3N0byBsYSB2YXJpYWJpbGUgUmVuZGVyZWQgYSB0cnVlIGluIG1vZG8gY2hlIHNlIGRhIGFkZXNzbyB2ZW5nb25vIGZhdHRlIG1vZGlmaWNoZSBjaGUgZG92cmViYmVybyBjYXVzYXJlIHVuIHJlZHJhdyBwb3NzbyBhY2Nvcmdlcm1lbmVcclxuICAgIC8vIGUgbWFuZGFyZSBhIGNhZ2FyZSBsbyBzdHJvbnpvIGRpIHR1cm5vXHJcbiAgICB0aGlzLlJlbmRlcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBTZSBkZXZvIGFnZ2lvcm5hcmUgaW4gYXV0b21hdGljbyBpbiBiYXNlIGFsbGEgZGltZW5zaW9uZSBkZWwgY29udGVuaXRvcmUgY29sbGVnbyBpbCBSZXNpemVPYnNlcnZlclxyXG4gICAgaWYgKHRoaXMuQXV0b3VwZGF0ZVNpemUpXHJcbiAgICAgIHRoaXMubGlzdGVuT25DaGFuZ2VzKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuU21hcnRTZWxlY3Rpb24pIHtcclxuICAgICAgdGhpcy5zZXR1cFNlbGVjdGlvblN0eWxlcygpO1xyXG4gICAgICB0aGlzLnNldHVwRWxlbWVudHNTZWxlY3Rpb25JZk5lZWRlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMub25Mb2FkZWQuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJlbmRlIHR1dHRpIGdsaSBlbGVtZW50aSBhcHBlbmEgYXNzZWduYXRpLCBlIHNlIHF1YWxjdW5vIGVyYSBzZWxlemlvbmF0byBsYSBzaXR1YXppb25lIHZpZW5lIHBlcnNpc3RpdGEgc3UgY3l0b3NjYXBlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXR1cEVsZW1lbnRzU2VsZWN0aW9uSWZOZWVkZWQoKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuRWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGVsZGF0YSA9IDxhbnk+dGhpcy5FbGVtZW50c1tpXS5kYXRhO1xyXG4gICAgICBpZiAoZWxkYXRhLl9fc2VsZWN0ZWQpIHtcclxuICAgICAgICBsZXQgZWwgPSB0aGlzLmN5LiRpZChlbGRhdGEuaWQpO1xyXG4gICAgICAgIGVsLnNlbGVjdCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYXJpY2EgZ2xpIHN0aWxpIHBlciBtb3N0cmFyZSBjYXJpbmEgbGEgc2VsZXppb25lIGRlaSBub2RpXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXR1cFNlbGVjdGlvblN0eWxlcygpe1xyXG4gICAgbGV0IGNzc0l0ZW0gPSB0aGlzLlNtYXJ0U2VsZWN0aW9uU3R5bGVzIHx8IHtcclxuICAgICAgJ292ZXJsYXktY29sb3InOiAnYmx1ZScsXHJcbiAgICAgICdvdmVybGF5LW9wYWNpdHknOiAwLjUsXHJcbiAgICAgICdvdmVybGF5LXBhZGRpbmcnOiA3XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIEJhY2tkb29yIHBlciBwb3RlciBhc3NlZ25hcmUgXCJ7fVwiIGEgU21hcnRTZWxlY3Rpb25TdHlsZXMgaW4gbW9kbyBkaSB1dGlsaXp6YXJlIGxhIHNtYXJ0IHNlbGVjdGlvbiBtYSBzZW56YSBjaGUgbmVzc3VubyBzdGlsZSB2ZW5nYSBhcHBsaWNhdG9cclxuICAgIC8vIGFkIGVzZW1waW8gcXVhbG9yYSBzaSB2b2xlc3NlIHV0aWxpenphcmUgbCdodG1sbm9kZSBwZXIgZ2VzdGlyZSBsYSBncmFmaWNhIGRlZ2xpIGVsZW1lbnRpIHNlbGV6aW9uYXRpXHJcbiAgICBpZihjc3NJdGVtWydvdmVybGF5LWNvbG9yJ10gJiYgY3NzSXRlbVsnb3ZlcmxheS1vcGFjaXR5J10gJiYgY3NzSXRlbVsnb3ZlcmxheS1wYWRkaW5nJ10pXHJcbiAgICAgICg8YW55PnRoaXMuY3kuc3R5bGUoKSkuc2VsZWN0b3IoJ25vZGU6c2VsZWN0ZWQnKS5jc3MoY3NzSXRlbSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWdpc3RyYSBsJ2FzY29sdG8gYWwgY29udGVuaXRvcmUgZGVsIGdyYWZpY28gZSBpbiBjYXNvIGRpIG1vZGlmaWNoZSBhbGxhIGRpbWVuc2lvbmUsIGFsIG1hc3NpbW8gdW5hIHZvbHRhIG9nbmkgNTAwIG1pbGxpc2Vjb25kaSwgbG8gcmlkaXNlZ25hXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBsaXN0ZW5PbkNoYW5nZXMoKSB7XHJcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZVNlbnNvcih0aGlzLmN5R3JhcGgubmF0aXZlRWxlbWVudCwgKCkgPT4ge1xyXG4gICAgICB0aGlzLmV4dHMudGhyb3R0bGUodGhpcy5uYW1lLCB0aGlzLm9uQ29udGFpbmVyU2l6ZUNoYW5nZWQuYmluZCh0aGlzKSwgdGhpcy5SZXNpemVUaHJvdHRsZVRpbWUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGdW56aW9uZSBjaGUgc2kgb2NjdXBhIGRpIGdlc3RpcmUgaWwgcmVwYWludCBkZWwgZGlhZ3JhbW1hXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBvbkNvbnRhaW5lclNpemVDaGFuZ2VkKCkge1xyXG4gICAgdGhpcy5zZXJ2aWNlLmxvZyhcIklcIiwgXCJEaWFncmFtIGNvbnRhaW5lciBzaXplIGhhcyBjaGFuZ2VkLCByZWRyYXdpbmdcIik7XHJcbiAgICB0aGlzLmN5LnJlc2l6ZSgpO1xyXG4gICAgdGhpcy5jeS5maXQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbGxlZ2EgdHV0dGkgZ2xpIGV2ZW50aSBjaGUgbWkgcG9zc29ubyBzZXJ2aXJlIGUgbGkgZXNwb25lIGluIG91dHB1dFxyXG4gICAqL1xyXG4gIHByaXZhdGUgYmluZEN5dG9zY2FwZUV2ZW50cygpIHtcclxuICAgIHRoaXMuY3kuYmluZCgnY2xpY2snLCAnbm9kZScsIChldmVudCkgPT4ge1xyXG4gICAgICBsZXQgdGFyZ2V0RGF0YSA9IGV2ZW50LnRhcmdldC5kYXRhKClcclxuICAgICAgaWYgKHRoaXMuU21hcnRTZWxlY3Rpb24pIHtcclxuXHJcbiAgICAgICAgLy8gSW4gY2FzbyBkaSBzZWxlemlvbmUgc2luZ29sYSByaXB1bGlzY28gdHV0dGkgZ2xpIGVsZW1lbnRpIHByZWNlZGVudGVtZW50ZSBzZWxlemlvbmF0aVxyXG4gICAgICAgIGlmICh0aGlzLlNpbmdsZVNlbGVjdGlvbikge1xyXG4gICAgICAgICAgbGV0IHNlbGVjdGVkID0gdGhpcy5jeS5lbGVtZW50cygnbm9kZTpzZWxlY3RlZCcpO1xyXG4gICAgICAgICAgc2VsZWN0ZWQuZm9yRWFjaChlbCA9PiB7XHJcbiAgICAgICAgICAgIGVsLnNlbGVjdGlmeSgpO1xyXG4gICAgICAgICAgICBlbC51bnNlbGVjdCgpO1xyXG4gICAgICAgICAgICBlbC51bnNlbGVjdGlmeSgpO1xyXG4gICAgICAgICAgICBlbC5kYXRhKFwiX19zZWxlY3RlZFwiLCBmYWxzZSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IGlkID0gdGFyZ2V0RGF0YS5pZFxyXG4gICAgICAgIGxldCBlbCA9IHRoaXMuY3kuJGlkKGlkKTtcclxuICAgICAgICBsZXQgc2VsZWN0ZWQgPSBlbC5zZWxlY3RlZCgpO1xyXG5cclxuICAgICAgICBlbC5zZWxlY3RpZnkoKTtcclxuICAgICAgICBpZiAoc2VsZWN0ZWQpXHJcbiAgICAgICAgICBlbC51bnNlbGVjdCgpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGVsLnNlbGVjdCgpO1xyXG4gICAgICAgIGVsLnVuc2VsZWN0aWZ5KCk7XHJcblxyXG4gICAgICAgIC8vIFF1ZXN0byB2YSBhbmNoZSBuZWxsYSBsaXN0YSBkZWdsaSBlbGVtZW50aSBvcmlnaW5hbGkgKHRoaXMuRWxlbWVudHMpIGRhdG8gY2hlIGN5dG9zY2FwZSBsaSBwcmVuZGUgcGVyIHJpZmVyaW1lbnRvIChiYmJiYnJhdm8gY3l0by1jaGFuKVxyXG4gICAgICAgIGVsLmRhdGEoXCJfX3NlbGVjdGVkXCIsICFzZWxlY3RlZCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMub25Ob2RlQ2xpY2suZW1pdCh7IGRhdGE6IHRhcmdldERhdGEgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmN5LmJpbmQoJ3NlbGVjdCcsICdub2RlJywgKGV2ZW50KSA9PiB7XHJcbiAgICAgIGxldCB0YXJnZXREYXRhID0gZXZlbnQudGFyZ2V0LmRhdGEoKVxyXG5cclxuICAgICAgdGhpcy5vbk5vZGVTZWxlY3Rpb24uZW1pdCh7IGRhdGE6IHRhcmdldERhdGEsIHNlbGVjdGVkOiB0cnVlIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jeS5iaW5kKCdsYXlvdXRzdG9wJywgKGV2ZW50KSA9PiB7XHJcbiAgICAgIHRoaXMub25MYXlvdXREb25lLmVtaXQoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY3kuYmluZCgndW5zZWxlY3QnLCAnbm9kZScsIChldmVudCkgPT4ge1xyXG4gICAgICBsZXQgdGFyZ2V0RGF0YSA9IGV2ZW50LnRhcmdldC5kYXRhKClcclxuXHJcbiAgICAgIHRoaXMub25Ob2RlU2VsZWN0aW9uLmVtaXQoeyBkYXRhOiB0YXJnZXREYXRhLCBzZWxlY3RlZDogZmFsc2UgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBBbHRyaSBldmVudGkuLi5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGUgc2VydmUgcGVyIGNhcmljYXJlIHR1dHRlIGxlIGVzdGVuc2lvbmkgZGVsbGEgbGlicmVyaWEgaW4gYmFzZSBhIGNpw7IgY2hlIHZpZW5lIHV0aWxpenphdG9cclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIHBlcmZvcm1Nb2R1bGVzTG9hZGluZygpIHtcclxuICAgIGlmICh0aGlzLkxheW91dC5uYW1lID09ICdkYWdyZScpXHJcbiAgICAgIGF3YWl0IHRoaXMubG9hZEludGVybmFsKFwiY3l0b3NjYXBlLWRhZ3JlXCIpO1xyXG5cclxuICAgIGlmICh0aGlzLk5vZGVIVE1MVGVtcGxhdGVzICYmIHRoaXMuTm9kZUhUTUxUZW1wbGF0ZXMubGVuZ3RoID4gMClcclxuICAgICAgYXdhaXQgdGhpcy5sb2FkSW50ZXJuYWwoXCJjeXRvc2NhcGUtaHRtbC1ub2RlXCIpO1xyXG5cclxuICAgIGlmICh0aGlzLlVzZUNvbnRleHRNZW51KVxyXG4gICAgICBhd2FpdCB0aGlzLmxvYWRJbnRlcm5hbChcImN5dG9zY2FwZS1jeHRtZW51XCIpO1xyXG5cclxuICAgIGlmICh0aGlzLk5vZGVzSGllcmFyY2h5ICYmIHRoaXMuVXNlRXhwYW5kQ29sbGFwc2UpXHJcbiAgICAgIGF3YWl0IHRoaXMubG9hZEludGVybmFsKFwiY3l0b3NjYXBlLWV4cGFuZC1jb2xsYXBzZVwiKTtcclxuXHJcbiAgICBpZiAodGhpcy5FeHRlbnNpb25Nb2R1bGVzSW1wb3J0ZXIpIHtcclxuICAgICAgLy8gV3JhcHBvIGlsIG5hbWVzcGFjZSBpbiBtb2RvIGNoZSBwb3NzYSBkaXJlIGxhIG1pYSBzdWwgZmF0dG8gY2hlIGwndXRlbnRlIGFnZ2l1bmdhIHVuIG1vZHVsbyBvIG1lbm8gOkRcclxuICAgICAgdmFyIHdyYXBwZWRDeXRvc2NhcGUgPSB7XHJcbiAgICAgICAgdXNlOiAobW9kdWxlTmFtZTogc3RyaW5nLCBtb2R1bGU6IGN5dG9zY2FwZS5FeHQpID0+IHtcclxuICAgICAgICAgIGlmICghbW9kdWxlKVxyXG4gICAgICAgICAgICB0aGlzLnNlcnZpY2UubG9nKFwiRVwiLCB0aGlzLnNlcnZpY2UubG9jKFwiUmVjZWl2ZWQgYW4gdW5kZWZpbmVkIG1vZHVsZS4gTWFrZSBzdXJlIHlvdSBhcmUgY29ycmVjdGx5IGxvYWRpbmcgaXRcIikgKyBcIjogXCIgKyBtb2R1bGVOYW1lLCBmYWxzZSk7XHJcblxyXG4gICAgICAgICAgaWYgKFtcImN5dG9zY2FwZS1kYWdyZVwiLCBcImN5dG9zY2FwZS1odG1sLW5vZGVcIiwgXCJjeXRvc2NhcGUtY3h0bWVudVwiLCBcImN5dG9zY2FwZS1leHBhbmQtY29sbGFwc2VcIl0uaW5jbHVkZXMobW9kdWxlTmFtZSkpXHJcbiAgICAgICAgICAgIHRoaXMuc2VydmljZS5sb2coXCJXXCIsIHRoaXMuc2VydmljZS5sb2MoXCJNb2R1bGVcIikgKyBcIiBcIiArIG1vZHVsZU5hbWUgKyBcIiBcIiArIHRoaXMuc2VydmljZS5sb2MoXCJpcyBsb2FkZWQgYW5kIG1hbmFnZWQgZGlyZWN0bHkgYnkgdGhpcyBsaWJyYXJ5LiBZb3UgZG9uJ3QgbmVlZCB0byBpbXBvcnQgaXQgb3IgdXNlIGl0IGRpcmVjdGx5LCBqdXN0IGJlIHN1cmUgdG8gc2V0IHRoZSByZWxhdGl2ZSBvcHRpb25zXCIpLCBmYWxzZSk7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIGN5dG9zY2FwZS51c2UobW9kdWxlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGF3YWl0IHRoaXMuRXh0ZW5zaW9uTW9kdWxlc0ltcG9ydGVyKHdyYXBwZWRDeXRvc2NhcGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGNoZSBzZXJ2ZSBwZXIgY2FyaWNhcmUgdHV0dGUgbGUgZXN0ZW5zaW9uaSBkZWxsYSBsaWJyZXJpYSBpbiBiYXNlIGEgY2nDsiBjaGUgdmllbmUgdXRpbGl6emF0byBjb24gbGUgb3B6aW9uaSBkZWZpbml0ZSBkYWdsaSBJbnB1dFxyXG4gICAqL1xyXG4gIHByaXZhdGUgcGVyZm9ybU9wZXJhdGlvbnNXaXRoTG9hZGVkTW9kdWxlcygpIHtcclxuXHJcbiAgICBsZXQgYW55Q3kgPSAoPGFueT50aGlzLmN5KTtcclxuXHJcbiAgICAvLyBVdGlsaXp6byBkZWwgbGF5b3V0LCBsbyBzYWx2byBwZXIgcG90ZXJsbyByaXV0aWxpenphcmUgaW4gZnV0dXJvXHJcbiAgICBpZiAodGhpcy5MYXlvdXQpIHtcclxuICAgICAgdGhpcy5MYXN0TGF5b3V0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLkxheW91dCkpO1xyXG4gICAgICB0aGlzLmN5LmxheW91dCh0aGlzLkxhc3RMYXlvdXQpLnJ1bigpXHJcbiAgICB9XHJcblxyXG4gICAgLy8gVXRpbGl6em8gZGVsbCdIVE1MIG5vZGVcclxuICAgIGlmICh0aGlzLk5vZGVIVE1MVGVtcGxhdGVzICYmIHRoaXMuTm9kZUhUTUxUZW1wbGF0ZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLkh0bWxOb2RlQXBpID0gYW55Q3kuaHRtbG5vZGUoKTtcclxuICAgICAgdGhpcy5IdG1sTm9kZUFwaS5jcmVhdGVIdG1sTm9kZShjeXRvc2NhcGUsIHRoaXMuY3ksIHRoaXMuTm9kZUhUTUxUZW1wbGF0ZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFV0aWxpenpvIGRlbCBDb250ZXh0IE1lbnVcclxuICAgIGlmICh0aGlzLlVzZUNvbnRleHRNZW51KVxyXG4gICAgICB0aGlzLkNvbnRleHRNZW51T3B0aW9ucy5mb3JFYWNoKG8gPT4geyBhbnlDeS5jeHRtZW51KG8pOyB9KTtcclxuXHJcbiAgICAvLyBVdGlsaXp6byBkZWxsJ2V4cGFuZCBjb2xsYXBzZSBzb2xvIHF1YW5kbyBjJ8OoIHVuYSBnZXJhcmNoaWEgZGkgbm9kaVxyXG4gICAgaWYgKHRoaXMuTm9kZXNIaWVyYXJjaHkgJiYgdGhpcy5Vc2VFeHBhbmRDb2xsYXBzZSlcclxuICAgICAgdGhpcy5FeHBhbmRDb2xsYXBzZUFwaSA9IGFueUN5LmV4cGFuZENvbGxhcHNlKHRoaXMuRXhwYW5kQ29sbGFwc2VPcHRpb25zKTtcclxuXHJcbiAgICAvLyBVdGlsaXp6byBkaSBlc3RlbnNpb25pIGV4dHJhLCBpbXBsZW1lbnRhemlvbmUgYWZmaWRhdGEgYWwgcHJvZ3JhbW1hdG9yZVxyXG4gICAgaWYgKHRoaXMuRXh0ZW5zaW9uTW9kdWxlc0FwcGx5ZXIpXHJcbiAgICAgIHRoaXMuRXh0ZW5zaW9uTW9kdWxlc0FwcGx5ZXIodGhpcy5jeSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlQ2FyZERhdGEoKSB7XHJcbiAgICBpZiAoIXRoaXMuSHRtbE5vZGVBcGkpIHtcclxuICAgICAgdGhpcy5zZXJ2aWNlLmxvZyhcIkVcIiwgXCJDYW5ub3QgdXBkYXRlIE5vZGVIVE1MVGVtcGxhdGVzIGFzIHRoZXkgZG9uJ3Qgc2VlbSB0byBiZSB1c2VkXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLkh0bWxOb2RlQXBpLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludGVybm8gcGVyIGlsIGNhcmljYW1lbnRvIGRlaSBtb2R1bGkgZGkgZXN0ZW5zaW9uZVxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7J2N5dG9zY2FwZS1leHBhbmQtY29sbGFwc2UnIHwgJ2N5dG9zY2FwZS1jeHRtZW51JyB8ICdjeXRvc2NhcGUtaHRtbC1ub2RlJyB8ICdjeXRvc2NhcGUtZGFncmUnfSBtb2R1bGVJZCBNb2R1bG8gZGEgY2FyaWNhcmVcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIGxvYWRJbnRlcm5hbChtb2R1bGVJZDogJ2N5dG9zY2FwZS1leHBhbmQtY29sbGFwc2UnIHwgJ2N5dG9zY2FwZS1jeHRtZW51JyB8ICdjeXRvc2NhcGUtaHRtbC1ub2RlJyB8ICdjeXRvc2NhcGUtZGFncmUnKSB7XHJcbiAgICBsZXQgdG9Mb2FkID0gYXdhaXQgdGhpcy5zZXJ2aWNlLmltcG9ydElmTmVlZGVkKG1vZHVsZUlkKTtcclxuICAgIGlmICh0b0xvYWQpIGN5dG9zY2FwZS51c2UodG9Mb2FkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGUgYmFzYW5kb3NpIHN1bGxlIG9wemlvbmkgbmF0aXZlIGV2ZW50dWFsbWVudGUgYXNzZWduYXRlIGxlIGNvbXBsZXRhIGNvbiBnbGkgSW5wdXQgYWRkaXppb25hbGlcclxuICAgKiBcclxuICAgKiBAcmV0dXJucyB7Y3lfLkN5dG9zY2FwZU9wdGlvbnN9IE9wemlvbmkgZmluYWxpIHVuaXRlIGRhIElucHV0IGVkIG9wemlvbmkgbmF0aXZlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRDb21wbGV0ZWRPcHRpb25zKCk6IGN5Xy5DeXRvc2NhcGVPcHRpb25zIHtcclxuICAgIHZhciBvcHRzOiBjeV8uQ3l0b3NjYXBlT3B0aW9ucyA9IHRoaXMuTmF0aXZlT3B0aW9ucyB8fCB7fTtcclxuICAgIG9wdHMuY29udGFpbmVyID0gdGhpcy5jeUdyYXBoLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBvcHRzLnN0eWxlID0gb3B0cy5zdHlsZSB8fCBbXTtcclxuXHJcbiAgICAvLyBQZXIgdHV0dGUgbGUgY29zZSBwZXIgY3VpIGdsaSBJbnB1dCBoYW5ubyBwcmlvcml0w6Agc292cmFzY3Jpdm8gZ2xpIG9yaWdpbmFsaSBkZWxsZSBvcHppb25pXHJcblxyXG4gICAgaWYgKHRoaXMuTm9kZVN0eWxlcyB8fCB0aGlzLkVkZ2VTdHlsZXMpIHtcclxuICAgICAgb3B0cy5zdHlsZSA9IFtdO1xyXG4gICAgICBpZiAodGhpcy5Ob2RlU3R5bGVzKSBvcHRzLnN0eWxlLnB1c2goeyBzZWxlY3RvcjogJ25vZGUnLCBjc3M6IHRoaXMuTm9kZVN0eWxlcyB9KTtcclxuICAgICAgaWYgKHRoaXMuRWRnZVN0eWxlcykgb3B0cy5zdHlsZS5wdXNoKHsgc2VsZWN0b3I6ICdlZGdlJywgY3NzOiB0aGlzLkVkZ2VTdHlsZXMgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuRWxlbWVudHMpXHJcbiAgICAgIG9wdHMuZWxlbWVudHMgPSB0aGlzLkVsZW1lbnRzO1xyXG5cclxuICAgIHRoaXMucmV2aWV3Q3l0b3NjYXBlRWxlbWVudHMoPGN5dG9zY2FwZS5FbGVtZW50RGVmaW5pdGlvbltdPm9wdHMuZWxlbWVudHMpO1xyXG5cclxuICAgIGlmICh0aGlzLkxheW91dClcclxuICAgICAgb3B0cy5sYXlvdXQgPSB0aGlzLkxheW91dDtcclxuXHJcbiAgICBpZiAodGhpcy5SZWFkb25seSkge1xyXG4gICAgICAvLyBRdWVzdG8gY29zbyBmYSBlZmZldHRpIHN0cmFuaS4uLi5cclxuICAgICAgLy9vcHRzLmF1dG9sb2NrID0gdHJ1ZTtcclxuXHJcbiAgICAgIG9wdHMuYXV0b3VuZ3JhYmlmeSA9IHRydWU7XHJcbiAgICAgIG9wdHMuYXV0b3Vuc2VsZWN0aWZ5ID0gZmFsc2U7XHJcbiAgICAgIG9wdHMuYm94U2VsZWN0aW9uRW5hYmxlZCA9IHRydWU7XHJcbiAgICAgIG9wdHMudXNlclpvb21pbmdFbmFibGVkID0gZmFsc2U7XHJcbiAgICAgIG9wdHMudXNlclBhbm5pbmdFbmFibGVkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9wdHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZ2dpdXN0YW1lbnRpIGRlZ2xpIGVsZW1lbnRpIGRpIEN5dG9zY2FwZS4gXHJcbiAgICogXHJcbiAgICogSSBub2RpIG5vbiB2ZW5nb25vIHRvY2NhdGkuXHJcbiAgICogXHJcbiAgICogUGVyIG9nbmkgZWRnZSB2aWVuZSBjb250cm9sbGF0byBzZSDDqCBzcGVjaWZpY2F0YSB1bmEgc29yZ2VudGUgZWQgdW5hIGRlc3RpbmF6aW9uZSwgaW4gY2FzbyBjb250cmFyaW8gc2kgY2VyY2EgZGkgZGVkdXJsaSBkYWxsJ0lEXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtjeXRvc2NhcGUuRWxlbWVudERlZmluaXRpb25bXX0gZWxlbWVudHMgRWxlbWVudGkgZGEgc2lzdGVtYXJlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZXZpZXdDeXRvc2NhcGVFbGVtZW50cyhlbGVtZW50czogY3l0b3NjYXBlLkVsZW1lbnREZWZpbml0aW9uW10sIHByZXZQb3NpdGlvbnM/OiBhbnkpIHtcclxuICAgIGxldCBoYXNQcmV2aW91c1Bvc2l0aW9ucyA9IHByZXZQb3NpdGlvbnMgJiYgcHJldlBvc2l0aW9ucy5sZW5ndGggPiAwO1xyXG4gICAgbGV0IHBvc2l0aW9uQ2FjaGU6IHsgW2luZGV4OiBzdHJpbmddOiBjeXRvc2NhcGUuUG9zaXRpb24gfSA9IHt9O1xyXG5cclxuICAgIGlmIChoYXNQcmV2aW91c1Bvc2l0aW9ucykge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByZXZQb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgaXRlbSA9IHByZXZQb3NpdGlvbnNbaV07XHJcbiAgICAgICAgaWYgKCFwb3NpdGlvbkNhY2hlW2l0ZW0uZGF0YSgpLmlkXSlcclxuICAgICAgICAgIHBvc2l0aW9uQ2FjaGVbaXRlbS5kYXRhKCkuaWRdID0gaXRlbS5wb3NpdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgZWwgPSBlbGVtZW50c1tpXTtcclxuICAgICAgaWYgKGVsLmdyb3VwID09IFwiZWRnZXNcIiAmJiAoIWVsLmRhdGEuc291cmNlICYmICFlbC5kYXRhLnRhcmdldCkpIHtcclxuICAgICAgICBpZiAoIWVsLmRhdGEuaWQuaW5jbHVkZXMoXCItXCIpKVxyXG4gICAgICAgICAgdGhpcy5zZXJ2aWNlLmxvZyhcIkVcIiwgXCJJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIHNvdXJjZSBhbmQgYSB0YXJnZXQgZm9yIGFuIGVkZ2UgeW91IGhhdmUgdG8gd3JpdGUgaXRzIGlkIGluIHRoZSBmb3JtYXQge3NvdXJjZX0te3RhcmdldH1cIik7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB2YXIgc291cmNlVGFyZ2V0ID0gZWwuZGF0YS5pZC5zcGxpdCgnLScpO1xyXG4gICAgICAgICAgZWwuZGF0YS5zb3VyY2UgPSBzb3VyY2VUYXJnZXRbMF0udHJpbSgpO1xyXG4gICAgICAgICAgZWwuZGF0YS50YXJnZXQgPSBzb3VyY2VUYXJnZXRbMV0udHJpbSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGhhc1ByZXZpb3VzUG9zaXRpb25zICYmIGVsLmdyb3VwID09IFwibm9kZXNcIilcclxuICAgICAgICBlbC5wb3NpdGlvbiA9IHBvc2l0aW9uQ2FjaGVbZWwuZGF0YS5pZF1cclxuICAgIH1cclxuICB9XHJcbn0iLCI8ZGl2ICNncmFwaCBjbGFzcz1cImdyYXBoLXdyYXBwZXIge3tuYW1lfX1cIj48L2Rpdj4iXX0=
537
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXMtZGlhZ3JhbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcy1kaWFncmFtcy9zcmMvbGliL2NvbXBvbmVudHMvZXMtZGlhZ3JhbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcy1kaWFncmFtcy9zcmMvbGliL2NvbXBvbmVudHMvZXMtZGlhZ3JhbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQWEsUUFBUSxFQUFFLE1BQU0sRUFBaUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBa0JqSSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFJMUQsT0FBTyxLQUFLLEdBQUcsTUFBTSxXQUFXLENBQUM7Ozs7O0FBQ2pDLGNBQWMsQ0FBQSxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFFcEM7O0dBRUc7QUFNSCxNQUFNLE9BQU8sa0JBQWtCO0lBK043Qjs7OztPQUlHO0lBQ0gsWUFBZ0MsT0FBeUIsRUFBc0IsVUFBK0IsRUFBVSxJQUF3QjtRQUFoSCxZQUFPLEdBQVAsT0FBTyxDQUFrQjtRQUFzQixlQUFVLEdBQVYsVUFBVSxDQUFxQjtRQUFVLFNBQUksR0FBSixJQUFJLENBQW9CO1FBN05oSjs7V0FFRztRQUNNLFNBQUksR0FBVyxFQUFFLENBQUM7UUFFM0I7O1dBRUc7UUFDTSxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQVN6Qzs7V0FFRztRQUNNLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQU81Qzs7OztXQUlHO1FBQ00sa0JBQWEsR0FBK0IsRUFBRSxDQUFDO1FBc0J4RDs7V0FFRztRQUNNLG1CQUFjLEdBQVksSUFBSSxDQUFDO1FBRXhDOzs7O1dBSUc7UUFDTSw2QkFBd0IsR0FBWSxJQUFJLENBQUM7UUFFbEQ7Ozs7V0FJRztRQUNN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SSxXQUFXO3NCQUFwQixNQUFNO2dCQUtHLGVBQWU7c0JBQXhCLE1BQU07Z0JBS0csWUFBWTtzQkFBckIsTUFBTTtnQkFLRyxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9wdGlvbmFsLCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXHJcblxyXG5pbXBvcnQgeyBDb250ZXh0TWVudU9wdGlvbnMgfSBmcm9tICcuLi9tb2RlbHMvY29tcG9uZW50L2NvbnRleHRtZW51L0NvbnRleHRNZW51T3B0aW9ucyc7XHJcbmltcG9ydCB7IEV4cGFuZENvbGxhcHNlT3B0aW9ucyB9IGZyb20gJy4uL21vZGVscy9jb21wb25lbnQvZ3JvdXBpbmcvRXhwYW5kQ29sbGFwc2VPcHRpb25zJztcclxuaW1wb3J0IHsgTm9kZUhUTUxUZW1wbGF0ZSB9IGZyb20gJy4uL21vZGVscy9jb21wb25lbnQvbm9kZXMvTm9kZUhUTUxUZW1wbGF0ZSc7XHJcblxyXG5pbXBvcnQgeyBCcmVhZHRoRmlyc3RMYXlvdXRPcHRpb25zSW1wbCB9IGZyb20gJy4uL21vZGVscy9sYXlvdXRzL0JyZWFkdGhGaXJzdExheW91dE9wdGlvbnNJbXBsJztcclxuaW1wb3J0IHsgQ2lyY2xlTGF5b3V0T3B0aW9uc0ltcGwgfSBmcm9tICcuLi9tb2RlbHMvbGF5b3V0cy9DaXJjbGVMYXlvdXRPcHRpb25zSW1wbCc7XHJcbmltcG9ydCB7IENvbmNlbnRyaWNMYXlvdXRPcHRpb25zSW1wbCB9IGZyb20gJy4uL21vZGVscy9sYXlvdXRzL0NvbmNlbnRyaWNMYXlvdXRPcHRpb25zSW1wbCc7XHJcbmltcG9ydCB7IENvc2VMYXlvdXRPcHRpb25zSW1wbCB9IGZyb20gJy4uL21vZGVscy9sYXlvdXRzL0Nvc2VMYXlvdXRPcHRpb25zSW1wbCc7XHJcbmltcG9ydCB7IERhZ3JlTGF5b3V0T3B0aW9uc0ltcGwgfSBmcm9tICcuLi9tb2RlbHMvbGF5b3V0cy9EYWdyZUxheW91dE9wdGlvbnNJbXBsJztcclxuaW1wb3J0IHsgR3JpZExheW91dE9wdGlvbnNJbXBsIH0gZnJvbSAnLi4vbW9kZWxzL2xheW91dHMvR3JpZExheW91dE9wdGlvbnNJbXBsJztcclxuaW1wb3J0IHsgTnVsbExheW91dE9wdGlvbnNJbXBsIH0gZnJvbSAnLi4vbW9kZWxzL2xheW91dHMvTnVsbExheW91dE9wdGlvbnNJbXBsJztcclxuaW1wb3J0IHsgUHJlc2V0TGF5b3V0T3B0aW9uc0ltcGwgfSBmcm9tICcuLi9tb2RlbHMvbGF5b3V0cy9QcmVzZXRMYXlvdXRPcHRpb25zSW1wbCc7XHJcbmltcG9ydCB7IFJhbmRvbUxheW91dE9wdGlvbnNJbXBsIH0gZnJvbSAnLi4vbW9kZWxzL2xheW91dHMvUmFuZG9tTGF5b3V0T3B0aW9uc0ltcGwnO1xyXG5cclxuaW1wb3J0IHsgRXNEaWFncmFtU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2VzLWRpYWdyYW0uc2VydmljZSc7XHJcbmltcG9ydCB7IEVzRGlhZ3JhbURpc3BhdGNoZXIgfSBmcm9tICcuLi9zZXJ2aWNlcy9lcy1kaWFncmFtLmRpc3BhdGNoZXInO1xyXG5pbXBvcnQgeyBSZXNpemVTZW5zb3IgfSBmcm9tIFwiLi4vZXh0ZW5zaW9ucy9SZXNpemVTZW5zb3JcIjtcclxuXHJcbmltcG9ydCB7IFJlYWN0aXZlRXh0ZW5zaW9ucyB9IGZyb20gJy4uL2V4dGVuc2lvbnMvUmVhY3RpdmVFeHRlbnNpb25zJztcclxuXHJcbmltcG9ydCAqIGFzIGN5XyBmcm9tICdjeXRvc2NhcGUnO1xyXG4vKiogQGlnbm9yZSAqL2NvbnN0IGN5dG9zY2FwZSA9IGN5XztcclxuXHJcbi8qKlxyXG4gKiBDb21wb25lbnRlIGNoZSBzaSBvY2N1cGEgZGkgZ3JhZmljYXJlIHVuIGRpYWdyYW1tYSBlIGRpIGdlc3Rpcm5lIGlsIGNpY2xvIGRpIHZpdGFcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZXMtZGlhZ3JhbScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2VzLWRpYWdyYW0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2VzLWRpYWdyYW0uY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRXNEaWFncmFtQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcclxuXHJcbiAgLyoqXHJcbiAgICogUmlmZXJpbWVudG8gYWxsJ29nZ2V0dG8gSFRNTCBzdSBjdWkgY3JlYXJlIGlsIGRpYWdyYW1tYVxyXG4gICAqL1xyXG4gIEBWaWV3Q2hpbGQoJ2dyYXBoJykgY3lHcmFwaDogRWxlbWVudFJlZjtcclxuXHJcbiAgLyoqXHJcbiAgICogTm9tZSBkZWwgZGlhZ3JhbW1hLCBmb25kYW1lbnRhbGUgYXNzZWduYXJsbyBwZXIgcGVybWV0dGVyZSBhbGxhIGxpYnJlcmlhIGRpIHNjaGVkdWxhcm5lIGxhIGNyZWF6aW9uZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIG5hbWU6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIC8qKlxyXG4gICAqIEluZGljYSBzZSB1dGlsaXp6YXJlIGlsIG1lbsO5IGNvbnRlc3R1YWxlIGEgcnVvdGEgYXR0b3JubyBhZCBvZ25pIG5vZG9cclxuICAgKi9cclxuICBASW5wdXQoKSBVc2VDb250ZXh0TWVudTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBJbmRpY2EgbGUgb3B6aW9uaSBkZWwgbWVuw7kgY29udGVzdHVhbGUgcXVhbG9yYSAqKlVzZUNvbnRleHRNZW51KiogZm9zc2UgKip0cnVlKiouXHJcbiAgICogXHJcbiAgICogT2duaSBlbGVtZW50byBkaSBxdWVzdG8gYXJyYXkgw6ggdW4gc2VsZXR0b3JlIGNvbiBpbCBtZW51IGRhIG1vc3RyYXJlIHBlciBxdWVsbGEgY2FzaXN0aWNhXHJcbiAgICovXHJcbiAgQElucHV0KCkgQ29udGV4dE1lbnVPcHRpb25zOiBDb250ZXh0TWVudU9wdGlvbnNbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGljZSBhbCBjb21wb25lbnRlIHNlIGlsIGRpYWdyYW1tYSBkZXZlIHV0aWxpenphcmUgaWwgc2lzdGVtYSBkaSBlc3RlbnNpb25lIHBlciBsJ2V4cGFuZCBlIGNvbGxhcHNlIGRlaSBncnVwcGlcclxuICAgKi9cclxuICBASW5wdXQoKSBVc2VFeHBhbmRDb2xsYXBzZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBPcHppb25pIG5hdGl2ZSBkZWxsJ2VzdGVuc2lvbmUgZXhwYW5kLWNvbGxhcHNlLCB2ZW5nb25vIG92dmlhbWVudGUgdXRpbGl6emF0ZSBzb2xvIHNlICoqVXNlRXhwYW5kQ29sbGFwc2UqKiDDqCAqKnRydWUqKlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIEV4cGFuZENvbGxhcHNlT3B0aW9uczogRXhwYW5kQ29sbGFwc2VPcHRpb25zO1xyXG5cclxuICAvKipcclxuICAgKiBCbG9jY28gY29tcGxldG8gZGVsbGUgb3B6aW9uaSwgYWx0ZXJuYXRpdm8gYWxsJ2Fzc2VnbmF6aW9uZSBkaSAqKkVsZW1lbnRzKiosICoqTm9kZVN0eWxlcyoqLCAqKkVkZ2VTdHlsZXMqKiwgZSAqKkxheW91dCoqLlxyXG4gICAqIFxyXG4gICAqIFF1YWxvcmEgZW50cmFtYmUgdmVuaXNzZXJvIHNwZWNpZmljYXRlIHZlcnLDoCBlZmZldHR1YXRhIHVuJ3VuaW9uZSBmcmEgcXVlc3RlIG9wemlvbmkgZSBxdWVsbGUgc3BlY2lmaWNhdGUsIGRhbmRvIHByaW9yaXTDoCBhbGxlIHNwZWNpZmljYXRlXHJcbiAgICovXHJcbiAgQElucHV0KCkgTmF0aXZlT3B0aW9uczogY3l0b3NjYXBlLkN5dG9zY2FwZU9wdGlvbnMgPSB7fTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGVmaW5pemlvbmUgZGVnbGkgZWxlbWVudGkgZGEgbW9zdHJhcmUgbmVsIGRpYWdyYW1tYVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIEVsZW1lbnRzOiBjeXRvc2NhcGUuRWxlbWVudERlZmluaXRpb25bXTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGVmaW5pemlvbmUgZGVnbGkgc3RpbGkgZGVpIG5vZGlcclxuICAgKi9cclxuICBASW5wdXQoKSBOb2RlU3R5bGVzOiBjeXRvc2NhcGUuQ3NzLk5vZGU7XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmluaXppb25lIGRlZ2xpIHN0aWxpIGRlaSBjb2xsZWdhbWVudGkgZnJhIGkgbm9kaVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIEVkZ2VTdHlsZXM6IGN5dG9zY2FwZS5Dc3MuRWRnZTtcclxuXHJcbiAgLyoqXHJcbiAgICogSW4gdW4gZGlhZ3JhbW1hIGluIHNvbGEgbGV0dHVyYSB0dXR0ZSBsZSBpbnRlcmF6aW9uaSB1dGVudGUgc29ubyBhbm51bGxhdGVcclxuICAgKi9cclxuICBASW5wdXQoKSBSZWFkb25seTogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogQWdnaW9ybmEgYXV0b21hdGljYW1lbnRlIGxlIGRpbWVuc2lvbmkgZGVsIGRpYWdyYW1tYSBxdWFuZG8gY2FtYmlhbm8gbGUgZGltZW5zaW9uaSBkZWxsYSBmaW5lc3RyYVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIEF1dG91cGRhdGVTaXplOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5kaWNhIGRpIG1hbnRlbmVyZSBsYSBwb3NpemlvbmUgZGVpIG5vZGkgcXVhbG9yYSB2ZW5pc3Nlcm8gY2FtYmlhdGkgZGFsbCdJbnB1dCAqKkVsZW1lbnRzKiouXHJcbiAgICogXHJcbiAgICogU2UgbCdJRCBkaSB1biBub2RvIMOoIHVndWFsZSBhbGwnSUQgZGkgdW4gbm9kbyBwcmVzZW50ZSBpbiBwcmVjZWRlbnphLCBpbCBudW92byBub2RvIG5lIGVyZWRpdGVyw6AgbGEgcG9zaXppb25lXHJcbiAgICovXHJcbiAgQElucHV0KCkgUHJlc2VydmVFbGVtZW50c1Bvc2l0aW9uOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogUXVhbG9yYSB2ZW5pc3NlIG1vZGlmaWNhdG8gbCdJbnB1dCAqKkVsZW1lbnRzKiosIHBpdXR0b3N0byBjaGUgbWV0dGVyZSBzZW1wbGljZW1lbnRlIGlsIG51b3ZvIEVsZW1lbnRvIGluIGJhc2UgYWwgTGF5b3V0IHByZWNlZGVudGUsIGFwcGxpY2EgYW5jaGUgdW4nYW5pbWF6aW9uZSBcclxuICAgKiBcclxuICAgKiBGdW56aW9uYSBzb2xhbWVudGUgc2UgaWwgKipMYXlvdXQqKiBjb3JyZW50ZSBkZWwgZGlhZ3JhbW1hIHN1cHBvcnRhIGxlIGFuaW1hemlvbmlcclxuICAgKi9cclxuICBASW5wdXQoKSBBbmltYXRlTGF5b3V0Q2hhbmdlczogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIEF0dGl2YSB1bmEgbW9kYWxpdMOgIGRpIHNlbGV6aW9uZSBcInNtYXJ0XCIuLi4gbyBwZXJsb21lbm8gXCJzbWFydGVyXCIgZGVsIGRlZmF1bHQgZGkgQ3l0b3NjYXBlLlxyXG4gICAqIFxyXG4gICAqIC0gSWwgY2xpY2sgZGkgdW4gZWxlbWVudG8gbm9uIHNlbGV6aW9uYXRvIGxvIHNlbGV6aW9uYVxyXG4gICAqIC0gSWwgY2xpY2sgZGkgdW4gZWxlbWVudG8gc2VsZXppb25hdG8gbG8gZGVzZWxlemlvbmFcclxuICAgKiAtIExvIHN0YXRvIGRpIHNlbGV6aW9uZSB2aWVuZSBwZXJzaXN0aXRvIHN1bGwnb2dnZXR0byBvcmlnaW5hbGUgaW52ZWNlIGRpIHJpbWFuZXJlIGluIHVuIGludGVybmFsXHJcbiAgICogLSBBbGwnYXNzZWduYXppb25lIGRpIG9nZ2V0dGkgc2VsZXppb25hdGksIHF1ZXN0aSB2ZW5nb25vIG1hcmNhdGkgY29ycmV0dGFtZW50ZSBjb24gbCdvdmVybGF5IGRpIHNlbGV6aW9uZVxyXG4gICAqIFxyXG4gICAqIE4uQjogbGEgY2hpYW1hdGEgYWxsJ2V2ZW50byAqKm9uTm9kZUNsaWNrKiogYXZ2aWVuZSAqKkRPUE8qKiBsYSBnZXN0aW9uZSBkZWxsYSBzZWxlemlvbmVcclxuICAgKi9cclxuICBASW5wdXQoKSBTbWFydFNlbGVjdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBJbmRpY2EgZGkgc2VsZXppb25hcmUgdW4gZWxlbWVudG8gcGVyIHZvbHRhIHF1YWxvcmEgKipTbWFydFNlbGVjdGlvbioqIGZvc3NlIGF0dGl2b1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIFNpbmdsZVNlbGVjdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBDU1MgcGVyIGxhIGdyYWZpY2F6aW9uZSBkZWxsYSBzZWxlemlvbmUgZGVpIG5vZGkuIFF1YW5kbyB1biBub2RvIHZlcnLDoCBzZWxlemlvbmF0byBhdnLDoCBzb3ByYSBkaSBzZSB1biBvdmVybGF5IGNoZSAnc2JvcmRhJyBkaSAqKm92ZXJsYXktcGFkZGluZyoqIHBpeGVsLFxyXG4gICAqIGRpIGNvbG9yZSAqKm92ZXJsYXktY29sb3IqKiBlIGNvbiB1biBvcGFjaXTDoCAqKm92ZXJsYXktb3BhY2l0eSoqXHJcbiAgICogXHJcbiAgICogQXNzZWduYW5kbyBcInt9XCIgYSBxdWVzdG8gaW5wdXQsIGxhIFNtYXJ0IHNlbGVjdGlvbiB2aWVuZSBnZXN0aXRhIG1hIGxhIGdlc3Rpb25lIGdyYWZpY2Egw6ggYWZmaWRhdGEgYWxsJ3V0ZW50ZSxcclxuICAgKiBhZCBlc2VtcGlvIHVzYW5kbyBkZWkgKipOb2RlSFRNTFRlbXBsYXRlcyoqIGNoZSBkZWZpbmlzY2FubyBzZWxldHRvcmkgc3Ugbm9kaSBcIjpzZWxlY3RlZFwiXHJcbiAgICogXHJcbiAgICogQGRlZmF1bHQgeydvdmVybGF5LWNvbG9yJzonYmx1ZScsJ292ZXJsYXktb3BhY2l0eSc6MC41LCdvdmVybGF5LXBhZGRpbmcnOjd9XHJcbiAgICovXHJcbiAgQElucHV0KCkgU21hcnRTZWxlY3Rpb25TdHlsZXM6IHsgJ292ZXJsYXktY29sb3InOiBzdHJpbmcsICdvdmVybGF5LW9wYWNpdHknOiBudW1iZXIsICdvdmVybGF5LXBhZGRpbmcnOiBudW1iZXIgfSA9IG51bGxcclxuXHJcbiAgLyoqXHJcbiAgICogUGVyaW9kbyBkaSB0aHJvdHRsZSBkYSBxdWFuZG8gdmllbmUgZWZmZXR0dWF0byB1biByZXNpemUgYSBxdWFuZG8gcmljYWxjb2xhcmUgbGUgZGltZW5zaW9uaSBkZWwgZGlhZ3JhbW1hLlxyXG4gICAqIFxyXG4gICAqIFB1w7IgZXNzZXJlIHRlbnV0byBhIDAgKHJlZHJhdyBpc3RhbnRhbmVvKSBmaW5jaMOpIG5vbiBjaSBzb25vIHByb2JsZW1pIGRpIHByZXN0YXppb25pIGNvbiBldmVudHVhbG1lbnRlIHRhbnRpIHJlc2l6ZSBhIHBvY2EgZGlzdGFuemEgbCd1bm8gZGFsbCdhbHRyby5cclxuICAgKi9cclxuICBASW5wdXQoKSBSZXNpemVUaHJvdHRsZVRpbWU6IG51bWJlciA9IDA7XHJcblxyXG4gIC8qKlxyXG4gICAqIExheW91dCBkaSBvcmRpbmFtZW50byBkZWkgbm9kaVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIExheW91dDogQnJlYWR0aEZpcnN0TGF5b3V0T3B0aW9uc0ltcGwgfCBDaXJjbGVMYXlvdXRPcHRpb25zSW1wbCB8IENvbmNlbnRyaWNMYXlvdXRPcHRpb25zSW1wbCB8XHJcbiAgICBDb3NlTGF5b3V0T3B0aW9uc0ltcGwgfCBEYWdyZUxheW91dE9wdGlvbnNJbXBsIHwgR3JpZExheW91dE9wdGlvbnNJbXBsIHwgTnVsbExheW91dE9wdGlvbnNJbXBsIHwgUHJlc2V0TGF5b3V0T3B0aW9uc0ltcGwgfFxyXG4gICAgUmFuZG9tTGF5b3V0T3B0aW9uc0ltcGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRlbXBsYXRlIEhUTUwgZGEgYXBwbGljYXJlIGFpIG5vZGkgcGVyIGRhcmdsaSBzdGlsaSBwYXJ0aWNvbGFyaSwgZGl2ZXJzaSBkYWxsZSBzaGFwZSBkaSBkZWZhdWx0XHJcbiAgICovXHJcbiAgQElucHV0KCkgTm9kZUhUTUxUZW1wbGF0ZXM6IE5vZGVIVE1MVGVtcGxhdGVbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogRm9ybmlzY2UgaWwgZ2xvYmFsIGRlbGxhIGxpYnJlcmlhIChuYW1lc3BhY2UgKipjeXRvc2NhcGUqKikgZSBzaSBhc3BldHRhIGNoZSBkb3BvIG9wZXJhemlvbmkgZGkgaW1wb3J0YXppb25lIFxyXG4gICAqIGxhc2NpYXRlIGFsbCd1dGVudGUgdmVuZ2FubyBhZ2dpdW50aSB0dXR0aSBpIG1vZHVsaSBkZXNpZGVyYXRpLiBcclxuICAgKiBcclxuICAgKiDDiCAqKmZvbmRhbWVudGFsZSoqIGNoZSBpbCBwcmltbyBwYXJhbWV0cm8gKGlsIG5vbWUgZGVsIG1vZHVsbykgc2lhIHVndWFsZSBhIGNpw7IgZGkgY3VpIHZpZW5lIGZhdHRvIGlsIHJlcXVpcmUgaW4gbW9kbyBjaGUgbGEgbGlicmVyaWFcclxuICAgKiBwb3NzYSBjb250cm9sbGFyZSBjaGUgaWwgbW9kdWxvIGltcG9ydGF0byBub24gc2lhIGdpw6Agc3RhdG8gaW1wb3J0YXRvIGluIHByZWNlZGVuemFcclxuICAgKiBcclxuICAgKiAjIyBFc2VtcGlvOlxyXG4gICAqIFxyXG4gICAqIGBgYHR5cGVzY3JpcHRcclxuICAgKiAoZ2xvYmFsKSA9PiB7XHJcbiAgICogICAgcmV0dXJuIGltcG9ydChcImN5dG9zY2FwZS1leHRlbnNpb24tbGlicmFyeVwiKS50aGVuKG1vZHVsZSA9PiBnbG9iYWwudXNlKFwiY3l0b3NjYXBlLWV4dGVuc2lvbi1saWJyYXJ5XCIsIG1vZHVsZS5kZWZhdWx0KSk7XHJcbiAgICogXHJcbiAgICogICAgLi4uXHJcbiAgICogfVxyXG4gICAqIGBgYFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIEV4dGVuc2lvbk1vZHVsZXNJbXBvcnRlcjogKGdsb2JhbDogeyB1c2U6IChtb2R1bGVOYW1lOiBzdHJpbmcsIG1vZHVsZTogdm9pZCB8IGN5dG9zY2FwZS5FeHQpID0+IHZvaWQgfSkgPT4gUHJvbWlzZTxhbnk+ID0gbnVsbDtcclxuXHJcbiAgLyoqXHJcbiAgICogRm9ybmlzY2UgbCdpc3RhbnphIGF0dHVhbGUgZGkgQ3l0b3NjYXBlIGRhIGN1aSDDqCBwb3NzaWJpbGUgcHJlbmRlcmUgbGUgbGlicmVyaWUgZGkgZXN0ZW5zaW9uZSBjYXJpY2F0ZSBpbiAqKkV4dGVuc2lvbk1vZHVsZXNJbXBvcnRlcioqXHJcbiAgICogZSBjb25maWd1cmFybGUgaW4gYmFzZSBhaSBjb21wb3J0YW1lbnRpIHNwZWNpZmljaVxyXG4gICAqIFxyXG4gICAqICMjIEVzZW1waW86XHJcbiAgICogXHJcbiAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAqIChjeXRvc2NhcGVDb3JlKSA9PiB7XHJcbiAgICogICAgLy8gRmFyZSBxdWVzdG8gbGF2b3JvIHBlciBvZ25pIGVzdGVuc2lvbmUgY2FyaWNhdGFcclxuICAgKiAgICBsZXQgZXh0ZW5zaW9uQ29uZmlndXJhdGlvbiA9IHsgLi4uIH07XHJcbiAgICogICAgbGV0IGV4dGVuc2lvbkluc3RhbmNlID0gY3l0b3NjYXBlQ29yZS5leHRlbnNpb25MaWJyYXJ5KGV4dGVuc2lvbkNvbmZpZ3VyYXRpb24pO1xyXG4gICAqICAgIGV4dGVuc2lvbkluc3RhbmNlLmRvU29tZXRoaW5nU3BlY2lmaWNUb1RoaXNFeHRlbnNpb24oKTtcclxuICAgKiBcclxuICAgKiAgICAuLi5cclxuICAgKiB9XHJcbiAgICogYGBgXHJcbiAgICovXHJcbiAgQElucHV0KCkgRXh0ZW5zaW9uTW9kdWxlc0FwcGx5ZXI6IChjeXRvc2NhcGVDb3JlOiBjeXRvc2NhcGUuQ29yZSkgPT4gdm9pZCA9IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIEV2ZW50byBsYW5jaWF0byBhbCBjbGljayBkaSB1biBub2RvLCBjb250aWVuZSBsJ29nZ2V0dG8gKipkYXRhKiogZGVsIG5vZG8gaW4gcXVlc3Rpb25lXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIG9uTm9kZUNsaWNrOiBFdmVudEVtaXR0ZXI8eyBkYXRhOiBhbnkgfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgZGF0YTogYW55IH0+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEV2ZW50byBsYW5jaWF0byBhbGxhIHNlbGV6aW9uZSBvIGRlc2VsZXppb25lIGRpIHVuIG5vZG8sIGNvbnRpZW5lIGwnb2dnZXR0byAqKmRhdGEqKiBkZWwgbm9kbyBpbiBxdWVzdGlvbmUgZSBpbmZvcm1hemlvbmkgc3VsIHN1byBzdGF0byBkaSBzZWxlemlvbmVcclxuICAgKi9cclxuICBAT3V0cHV0KCkgb25Ob2RlU2VsZWN0aW9uOiBFdmVudEVtaXR0ZXI8eyBkYXRhOiBhbnksIHNlbGVjdGVkOiBib29sZWFuIH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7IGRhdGE6IGFueSwgc2VsZWN0ZWQ6IGJvb2xlYW4gfT4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnRvIGxhbmNpYXRvIGFsIHRlcm1pbmUgZGVsIExheW91dGluZy4gU2Ugc2kgdnVvbGUgZXNlZ3VpcmUgY29kaWNlIGRvcG8gY2hlIGlsIExheW91dCDDqCBmYXR0byBlIGNvbXBsZXRhbWVudGUgZ3JhZmljYXRvLCBxdWVzdG8gw6ggaWwgcHVudG9cclxuICAgKi9cclxuICBAT3V0cHV0KCkgb25MYXlvdXREb25lOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEV2ZW50byBsYW5jaWF0byBhbCB0ZXJtaW5lIGRlbCBjYXJpY2FtZW50byBkZWwgZGlhZ3JhbW1hXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIG9uTG9hZGVkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFZhcmlhYmlsZSBzdSBjdWkgc2FsdmFyc2kgc2UgaSBub2RpIGhhbm5vIHVuYSBnZXJhcmNoaWEgYSBncnVwcGkgbyBuby4gU2VydmUgcGVyIHBvaSBjYXJpY2FyZSBsJ2VzdGVuc2lvbmUgZXhwYW5kLWNvbGxhcHNlIHF1YWxvcmEgZm9zc2UgcmljaGllc3RhXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBOb2Rlc0hpZXJhcmNoeTogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5kaWNhIHNlIGlsIHJlbmRlcmluZyBkZWwgZGlhZ3JhbW1hIMOoIHRlcm1pbmF0b1xyXG4gICAqL1xyXG4gIHByaXZhdGUgUmVuZGVyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogSXN0YW56YSBkZWwgZGlhZ3JhbW1hIGF0dHVhbG1lbnRlIGluIHVzb1xyXG4gICAqL1xyXG4gIHB1YmxpYyBjeTogY3l0b3NjYXBlLkNvcmVcclxuXHJcbiAgLyoqXHJcbiAgICogQXBpIGRlbGwnZXN0ZW5zaW9uZSBleHBhbmQtY29sbGFwc2UgcGVyIHBlcm1ldHRlcmUgZGkgZWZmZXR0dWFyZSBvcGVyYXppb25pIGRhbGwnZXN0ZXJubyBkZWwgZGlhZ3JhbW1hLiBWZW5nb25vIHZhbG9yaXp6YXRlIHNlICoqVXNlRXhwYW5kQ29sbGFwc2UqKiDDqCAqKnRydWUqKlxyXG4gICAqL1xyXG4gIHB1YmxpYyBFeHBhbmRDb2xsYXBzZUFwaTogYW55ID0gbnVsbDtcclxuXHJcbiAgLyoqXHJcbiAgICogQXBpIGRlbGwnZXN0ZW5zaW9uZSBodG1sLW5vZGUgcGVyIHBlcm1ldHRlcmUgZGkgZWZmZXR0dWFyZSBvcGVyYXppb25pIGRhbGwnZXN0ZXJubyBkZWwgZGlhZ3JhbW1hLiBWZW5nb25vIHZhbG9yaXp6YXRlIHNlIHNvbm8gaW1wb3N0YXRpIGRlaSAqKk5vZGVIVE1MVGVtcGxhdGVzKipcclxuICAgKi9cclxuICBwcml2YXRlIEh0bWxOb2RlQXBpOiBhbnkgPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBPc3NlcnZhdG9yZSBkZWxsZSBtb2RpZmljaGUgYWwgY29udGVuaXRvcmUgZGVsIGRpYWdyYW1tYVxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVzaXplT2JzZXJ2ZXI6IFJlc2l6ZVNlbnNvcjtcclxuXHJcbiAgLyoqXHJcbiAgICogUmlmZXJpbWVudG8gYWxsJ3VsdGltbyBsYXlvdXQgdXRpbGl6emF0by4gVmllbmUgcmlhcHBsaWNhdG8gcXVhbG9yYSB2ZW5pc3NlIGNhbWJpYXRvIGwnSW5wdXQgKipFbGVtZW50cyoqLlxyXG4gICAqIFxyXG4gICAqIE5vbiB1dGlsaXp6byBpbCBtYWtlTGF5b3V0cyBwZXJjaMOpIGFsdHJpbWVudGkgcmlzY2hpZXJlaSBkaSBjcmVhcmUgdW4gbGF5b3V0IHJpZmVyaXRvIGEgWCBlbGVtZW50aSwgbmUgYWdnaXVuZ28gMSwgcmlhcHBsaWNvIGlsIExheW91dCBcclxuICAgKiBtYSBtaSB2aWVuZSByaWFwcGxpY2F0byBhIFggZWxlbWVudGkgaW52ZWNlIGNoZSBYICsgMVxyXG4gICAqL1xyXG4gIHByaXZhdGUgTGFzdExheW91dDogY3l0b3NjYXBlLkxheW91dE9wdGlvbnM7XHJcblxyXG4gIC8qKlxyXG4gICAqIENvc3RydXR0b3JlXHJcbiAgICogXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIHByaXZhdGUgc2VydmljZTogRXNEaWFncmFtU2VydmljZSwgQE9wdGlvbmFsKCkgcHJpdmF0ZSBkaXNwYXRjaGVyOiBFc0RpYWdyYW1EaXNwYXRjaGVyLCBwcml2YXRlIGV4dHM6IFJlYWN0aXZlRXh0ZW5zaW9ucykgeyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmUgXHJcbiAgICogXHJcbiAgICogQW5ndWxhciBQaXBlbGluZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICBpZiAoIXRoaXMuc2VydmljZSB8fCAhdGhpcy5kaXNwYXRjaGVyKVxyXG4gICAgICB0aHJvdyBcIklsIG1vZHVsbyBAZXNmYWVuemEvZGlhZ3JhbXMgbm9uIMOoIHN0YXRvIGltcG9ydGF0byBjb24gaWwgZm9yUm9vdCgpO1wiO1xyXG5cclxuICAgIHRoaXMuZGlzcGF0Y2hMb2FkQ2hhcnQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFsbCdvbkRlc3Ryb3kgcmlwdWxpc2NvIGxhIG1lbW9yaWEgZGFsIGRpYWdyYW1tYVxyXG4gICAqL1xyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLnJlc2l6ZU9ic2VydmVyKSB7XHJcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIuZGlzcG9zZSgpO1xyXG4gICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jeSkge1xyXG4gICAgICB0aGlzLnNlcnZpY2UubG9nKFwiSVwiLCBcIkRpYWdyYW1cIiArIFwiIFwiICsgdGhpcy5uYW1lICsgXCI6IFVubG9hZGluZyBkZXN0cm95ZWQgZGlhZ3JhbVwiLCBmYWxzZSk7XHJcbiAgICAgIHRoaXMuY3kuZGVzdHJveSgpO1xyXG4gICAgICB0aGlzLmRpc3BhdGNoZXIuZGVyZWdpc3Rlcih0aGlzLm5hbWUpO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLnNlcnZpY2UubG9nKFwiSVwiLCBcIkNoYXJ0IFwiICsgdGhpcy5uYW1lICsgXCI6IFVubG9hZGluZyB1bmNyZWF0ZWQgY2hhcnQgY29tcG9uZW50LiBJdCBwcm9iYWJseSB3YXMgYSBkdXBsaWNhdGVkXCIsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlZ2lzdHJhIGlsIGRpYWdyYW1tYSBhdHR1YWxlIG5lbCBEaXNwYXRjaGVyIGluIG1vZG8gY2hlIHZlbmdhIGNhcmljYXRvIGFwcGVuYSBwb3NzaWJpbGVcclxuICAgKi9cclxuICBwcml2YXRlIGRpc3BhdGNoTG9hZENoYXJ0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kaXNwYXRjaGVyLnJlZ2lzdGVyKHRoaXMubmFtZSwgKCkgPT4geyByZXR1cm4gdGhpcy5yZW5kZXIoKTsgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlIFxyXG4gICAqIFxyXG4gICAqIEFuZ3VsYXIgUGlwZWxpbmU6IEdlc3Rpb25lIHJpLWdyYWZpY2F6aW9uZSBkZWwgZGlhZ3JhbW1hLCBzZSBwb3NzaWJpbGVcclxuICAgKi9cclxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IGFueSB7XHJcbiAgICBsZXQgdG9DaGVjayA9IFtcIlRlbXBsYXRlc1wiLCBcIlVzZUNvbnRleHRNZW51XCIsIFwiQ29udGV4dE1lbnVPcHRpb25zXCIsIFwiVXNlRXhwYW5kQ29sbGFwc2VcIiwgXCJFeHBhbmRDb2xsYXBzZU9wdGlvbnNcIiwgXCJOb2RlU3R5bGVzXCIsIFwiRWRnZVN0eWxlc1wiLCBcIk5hdGl2ZU9wdGlvbnNcIl07XHJcblxyXG4gICAgaWYgKHRoaXMuUmVuZGVyZWQgJiYgdG9DaGVjay5zb21lKHQgPT4gY2hhbmdlc1t0XSkpXHJcbiAgICAgIHRoaXMuc2VydmljZS5sb2coXCJXXCIsIFwiUmVkcmF3IGJhc2VkIG9uIGR5bmFtaWMgSW5wdXQgY2hhbmdlIGlzIHN1cHBvcnRlZCBvbmx5IGZvciAnRWxlbWVudHMnIGFuZCAnTGF5b3V0JyBpbnB1dHMsIHBsZWFzZSBkZXN0cm95IHRoZSBjb21wb25lbnQgYW5kIHJlY3JlYXRlIGl0IHdpdGggdGhlIG5ldyBzZXR0aW5nc1wiKTtcclxuXHJcbiAgICBsZXQgZWxlbWVudENoYW5nZXMgPSBjaGFuZ2VzW1wiRWxlbWVudHNcIl07XHJcbiAgICBsZXQgbGF5b3V0Q2hhbmdlcyA9IGNoYW5nZXNbXCJMYXlvdXRcIl07XHJcbiAgICBpZiAoZWxlbWVudENoYW5nZXMgJiYgIWVsZW1lbnRDaGFuZ2VzLmZpcnN0Q2hhbmdlKSB7XHJcbiAgICAgIHRoaXMuc2VydmljZS5sb2coXCJJXCIsIFwiRWxlbWVudHMgaGF2ZSBiZWVuIGNoYW5nZWQgYWZ0ZXIgZGlhZ3JhbSBpbml0aWFsaXphdGlvblwiKTtcclxuXHJcbiAgICAgIC8vIENhbWJpYW1lbnRvIGFnbGkgRWxlbWVudGk6IHJpcHVsaXNjbyBnbGkgZWxlbWVudGkgdmVjY2hpLCBwcmVuZG8gaSBudW92aSwgbGkgc2lzdGVtbyBlIGxpIHJpYXNzZWduby4gXHJcbiAgICAgIC8vIFNlIGlsIG51b3ZvIElucHV0IEVsZW1lbnRzIMOoIHJvYmEgc3RyYW5hIG1pIGxpbWl0byBhIHJpcHVsaXJlIGlsIGRpYWdyYW1tYVxyXG4gICAgICAvLyBTZSBjeXRvc2NhcGUgYXZldmEgZ2nDoCBkZWdsaSBlbGVtZW50aSBwcmVjZWRlbnRlbWVudGUgbmUgcHJlbmRvIGxlIHBvc2l6aW9uaSBpbiBtb2RvIGRhIHJpZGlzZWduYXJsaSBwYXJ0ZW5kbyBkYWxsbyBzdGVzc28gcHVudG8gKGNhcmlubyBwZXIgbGUgYW5pbWF6aW9uaSlcclxuICAgICAgbGV0IGVsZW1lbnRzID0gZWxlbWVudENoYW5nZXM/LmN1cnJlbnRWYWx1ZTtcclxuICAgICAgbGV0IHByZXZpb3VzX2VsZW1lbnRzID0gdGhpcy5QcmVzZXJ2ZUVsZW1lbnRzUG9zaXRpb24gPyA8YW55PnRoaXMuY3kubm9kZXMoKSA6IG51bGw7XHJcblxyXG4gICAgICB0aGlzLmN5LmVsZW1lbnRzKCkucmVtb3ZlKCk7XHJcbiAgICAgIGlmIChlbGVtZW50cyAmJiBlbGVtZW50cy5sZW5ndGggJiYgZWxlbWVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMucmV2aWV3Q3l0b3NjYXBlRWxlbWVudHMoZWxlbWVudHMsIHByZXZpb3VzX2VsZW1lbnRzKTtcclxuICAgICAgICB0aGlzLmN5LmFkZChlbGVtZW50cyk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLlNtYXJ0U2VsZWN0aW9uKVxyXG4gICAgICAgICAgdGhpcy5zZXR1cEVsZW1lbnRzU2VsZWN0aW9uSWZOZWVkZWQoKTtcclxuXHJcbiAgICAgICAgLy8gU2Ugc29sbyBnbGkgZWxlbWVudGkgY2FtYmlhbm8sIHJpYXBwbGljbyBpbCBMYXlvdXQgcHJlY2VkZW50ZVxyXG4gICAgICAgIGlmICghbGF5b3V0Q2hhbmdlcyAmJiB0aGlzLkxhc3RMYXlvdXQpIHtcclxuXHJcbiAgICAgICAgICAvLyBTZSBkZXZvIGFuaW1hcmUgbGUgbW9kaWZjaGUgYWwgbGF5b3V0IGZvcnpvIGlsIHBhcmFtZXRybyByZWxhdGl2b1xyXG4gICAgICAgICAgaWYgKHRoaXMuQW5pbWF0ZUxheW91dENoYW5nZXMpXHJcbiAgICAgICAgICAgICg8YW55PnRoaXMuTGFzdExheW91dCkuYW5pbWF0ZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgdGhpcy5jeS5sYXlvdXQodGhpcy5MYXN0TGF5b3V0KS5ydW4oKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBTZSBpbCBsYXlvdXQgY2FtYmlhIGxvIGFwcGxpY28gZSBtZSBsbyBzYWx2byBjb21lIGxheW91dCBwcmVjZWRlbnRlIHBlciBpbCBmdXR1cm9cclxuICAgIGlmIChsYXlvdXRDaGFuZ2VzICYmICFsYXlvdXRDaGFuZ2VzLmZpcnN0Q2hhbmdlKSB7XHJcbiAgICAgIHRoaXMuc2VydmljZS5sb2coXCJJXCIsIFwiTGF5b3V0IGhhdmUgYmVlbiBjaGFuZ2VkIGFmdGVyIGRpYWdyYW0gaW5pdGlhbGl6YXRpb25cIik7XHJcbiAgICAgIHRoaXMuTGFzdExheW91dCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobGF5b3V0Q2hhbmdlcy5jdXJyZW50VmFsdWUpKTtcclxuICAgICAgdGhpcy5jeS5sYXlvdXQodGhpcy5MYXN0TGF5b3V0KS5ydW4oKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRWZmZXR0dWEgaWwgcmVuZGVyaW5nIGRlbCBkaWFncmFtbWFcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIHJlbmRlcigpIHtcclxuXHJcbiAgICAvLyBUaXJvIGZ1b3JpIGxlIG9wemlvbmkgY29uIGN1aSBnZW5lcmFyZSBpbCBkaWFncmFtbWFcclxuICAgIGxldCBjeU9wdGlvbnMgPSB0aGlzLmdldENvbXBsZXRlZE9wdGlvbnMoKTtcclxuICAgIHRoaXMuTm9kZXNIaWVyYXJjaHkgPSBjeU9wdGlvbnMuZWxlbWVudHMgJiYgKDxjeV8uRWxlbWVudERlZmluaXRpb25bXT5jeU9wdGlvbnMuZWxlbWVudHMpLnNvbWUodCA9PiB0LmRhdGEucGFyZW50KTtcclxuXHJcbiAgICAvLyBDYXJpY28gZXZlbnR1YWxpIGNsYXNzaSBkaSBlc3RlbnNpb25lIGNoZSBzZXJ2b25vXHJcbiAgICBhd2FpdCB0aGlzLnBlcmZvcm1Nb2R1bGVzTG9hZGluZygpO1xyXG5cclxuICAgIC8vIEdlbmVybyBpbCBkaWFncmFtbWFcclxuICAgIHRoaXMuY3kgPSBjeXRvc2NhcGUoY3lPcHRpb25zKTtcclxuXHJcbiAgICAvLyBDb2xsZWdvIGdsaSBldmVudGkgYWwgY29tcG9uZW50ZVxyXG4gICAgdGhpcy5iaW5kQ3l0b3NjYXBlRXZlbnRzKCk7XHJcblxyXG4gICAgLy8gVXRpbGl6em8gbGUgY2xhc3NpIGRpIGVzdGVuc2lvbmUgY2FyaWNhdGUgcHJlY2VkZW50ZW1lbnRlIHBlciBmYXJlIGlsIHJlc3RvIGRlbGxlIG1pZSBvcGVyYXppb25pXHJcbiAgICB0aGlzLnBlcmZvcm1PcGVyYXRpb25zV2l0aExvYWRlZE1vZHVsZXMoKTtcclxuXHJcbiAgICAvLyBJbXBvc3RvIGxhIHZhcmlhYmlsZSBSZW5kZXJlZCBhIHRydWUgaW4gbW9kbyBjaGUgc2UgZGEgYWRlc3NvIHZlbmdvbm8gZmF0dGUgbW9kaWZpY2hlIGNoZSBkb3ZyZWJiZXJvIGNhdXNhcmUgdW4gcmVkcmF3IHBvc3NvIGFjY29yZ2VybWVuZVxyXG4gICAgLy8gZSBtYW5kYXJlIGEgY2FnYXJlIGxvIHN0cm9uem8gZGkgdHVybm9cclxuICAgIHRoaXMuUmVuZGVyZWQgPSB0cnVlO1xyXG5cclxuICAgIC8vIFNlIGRldm8gYWdnaW9ybmFyZSBpbiBhdXRvbWF0aWNvIGluIGJhc2UgYWxsYSBkaW1lbnNpb25lIGRlbCBjb250ZW5pdG9yZSBjb2xsZWdvIGlsIFJlc2l6ZU9ic2VydmVyXHJcbiAgICBpZiAodGhpcy5BdXRvdXBkYXRlU2l6ZSlcclxuICAgICAgdGhpcy5saXN0ZW5PbkNoYW5nZXMoKTtcclxuXHJcbiAgICBpZiAodGhpcy5TbWFydFNlbGVjdGlvbikge1xyXG4gICAgICB0aGlzLnNldHVwU2VsZWN0aW9uU3R5bGVzKCk7XHJcbiAgICAgIHRoaXMuc2V0dXBFbGVtZW50c1NlbGVjdGlvbklmTmVlZGVkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5vbkxvYWRlZC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcmVuZGUgdHV0dGkgZ2xpIGVsZW1lbnRpIGFwcGVuYSBhc3NlZ25hdGksIGUgc2UgcXVhbGN1bm8gZXJhIHNlbGV6aW9uYXRvIGxhIHNpdHVhemlvbmUgdmllbmUgcGVyc2lzdGl0YSBzdSBjeXRvc2NhcGVcclxuICAgKi9cclxuICBwcml2YXRlIHNldHVwRWxlbWVudHNTZWxlY3Rpb25JZk5lZWRlZCgpIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5FbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgZWxkYXRhID0gPGFueT50aGlzLkVsZW1lbnRzW2ldLmRhdGE7XHJcbiAgICAgIGlmIChlbGRhdGEuX19zZWxlY3RlZCkge1xyXG4gICAgICAgIGxldCBlbCA9IHRoaXMuY3kuJGlkKGVsZGF0YS5pZCk7XHJcbiAgICAgICAgZWwuc2VsZWN0KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhcmljYSBnbGkgc3RpbGkgcGVyIG1vc3RyYXJlIGNhcmluYSBsYSBzZWxlemlvbmUgZGVpIG5vZGlcclxuICAgKi9cclxuICBwcml2YXRlIHNldHVwU2VsZWN0aW9uU3R5bGVzKCl7XHJcbiAgICBsZXQgY3NzSXRlbSA9IHRoaXMuU21hcnRTZWxlY3Rpb25TdHlsZXMgfHwge1xyXG4gICAgICAnb3ZlcmxheS1jb2xvcic6ICdibHVlJyxcclxuICAgICAgJ292ZXJsYXktb3BhY2l0eSc6IDAuNSxcclxuICAgICAgJ292ZXJsYXktcGFkZGluZyc6IDdcclxuICAgIH07XHJcblxyXG4gICAgLy8gQmFja2Rvb3IgcGVyIHBvdGVyIGFzc2VnbmFyZSBcInt9XCIgYSBTbWFydFNlbGVjdGlvblN0eWxlcyBpbiBtb2RvIGRpIHV0aWxpenphcmUgbGEgc21hcnQgc2VsZWN0aW9uIG1hIHNlbnphIGNoZSBuZXNzdW5vIHN0aWxlIHZlbmdhIGFwcGxpY2F0b1xyXG4gICAgLy8gYWQgZXNlbXBpbyBxdWFsb3JhIHNpIHZvbGVzc2UgdXRpbGl6emFyZSBsJ2h0bWxub2RlIHBlciBnZXN0aXJlIGxhIGdyYWZpY2EgZGVnbGkgZWxlbWVudGkgc2VsZXppb25hdGlcclxuICAgIGlmKGNzc0l0ZW1bJ292ZXJsYXktY29sb3InXSAmJiBjc3NJdGVtWydvdmVybGF5LW9wYWNpdHknXSAmJiBjc3NJdGVtWydvdmVybGF5LXBhZGRpbmcnXSlcclxuICAgICAgKDxhbnk+dGhpcy5jeS5zdHlsZSgpKS5zZWxlY3Rvcignbm9kZTpzZWxlY3RlZCcpLmNzcyhjc3NJdGVtKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlZ2lzdHJhIGwnYXNjb2x0byBhbCBjb250ZW5pdG9yZSBkZWwgZ3JhZmljbyBlIGluIGNhc28gZGkgbW9kaWZpY2hlIGFsbGEgZGltZW5zaW9uZSwgYWwgbWFzc2ltbyB1bmEgdm9sdGEgb2duaSA1MDAgbWlsbGlzZWNvbmRpLCBsbyByaWRpc2VnbmFcclxuICAgKi9cclxuICBwcml2YXRlIGxpc3Rlbk9uQ2hhbmdlcygpIHtcclxuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplU2Vuc29yKHRoaXMuY3lHcmFwaC5uYXRpdmVFbGVtZW50LCAoKSA9PiB7XHJcbiAgICAgIHRoaXMuZXh0cy50aHJvdHRsZSh0aGlzLm5hbWUsIHRoaXMub25Db250YWluZXJTaXplQ2hhbmdlZC5iaW5kKHRoaXMpLCB0aGlzLlJlc2l6ZVRocm90dGxlVGltZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZ1bnppb25lIGNoZSBzaSBvY2N1cGEgZGkgZ2VzdGlyZSBpbCByZXBhaW50IGRlbCBkaWFncmFtbWFcclxuICAgKi9cclxuICBwcml2YXRlIG9uQ29udGFpbmVyU2l6ZUNoYW5nZWQoKSB7XHJcbiAgICB0aGlzLnNlcnZpY2UubG9nKFwiSVwiLCBcIkRpYWdyYW0gY29udGFpbmVyIHNpemUgaGFzIGNoYW5nZWQsIHJlZHJhd2luZ1wiKTtcclxuICAgIHRoaXMuY3kucmVzaXplKCk7XHJcbiAgICB0aGlzLmN5LmZpdCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29sbGVnYSB0dXR0aSBnbGkgZXZlbnRpIGNoZSBtaSBwb3Nzb25vIHNlcnZpcmUgZSBsaSBlc3BvbmUgaW4gb3V0cHV0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBiaW5kQ3l0b3NjYXBlRXZlbnRzKCkge1xyXG4gICAgdGhpcy5jeS5iaW5kKCdjbGljaycsICdub2RlJywgKGV2ZW50KSA9PiB7XHJcbiAgICAgIGxldCB0YXJnZXREYXRhID0gZXZlbnQudGFyZ2V0LmRhdGEoKVxyXG4gICAgICBpZiAodGhpcy5TbWFydFNlbGVjdGlvbikge1xyXG5cclxuICAgICAgICAvLyBJbiBjYXNvIGRpIHNlbGV6aW9uZSBzaW5nb2xhIHJpcHVsaXNjbyB0dXR0aSBnbGkgZWxlbWVudGkgcHJlY2VkZW50ZW1lbnRlIHNlbGV6aW9uYXRpXHJcbiAgICAgICAgaWYgKHRoaXMuU2luZ2xlU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICBsZXQgc2VsZWN0ZWQgPSB0aGlzLmN5LmVsZW1lbnRzKCdub2RlOnNlbGVjdGVkJyk7XHJcbiAgICAgICAgICBzZWxlY3RlZC5mb3JFYWNoKGVsID0+IHtcclxuICAgICAgICAgICAgZWwuc2VsZWN0aWZ5KCk7XHJcbiAgICAgICAgICAgIGVsLnVuc2VsZWN0KCk7XHJcbiAgICAgICAgICAgIGVsLnVuc2VsZWN0aWZ5KCk7XHJcbiAgICAgICAgICAgIGVsLmRhdGEoXCJfX3NlbGVjdGVkXCIsIGZhbHNlKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBsZXQgaWQgPSB0YXJnZXREYXRhLmlkXHJcbiAgICAgICAgbGV0IGVsID0gdGhpcy5jeS4kaWQoaWQpO1xyXG4gICAgICAgIGxldCBzZWxlY3RlZCA9IGVsLnNlbGVjdGVkKCk7XHJcblxyXG4gICAgICAgIGVsLnNlbGVjdGlmeSgpO1xyXG4gICAgICAgIGlmIChzZWxlY3RlZClcclxuICAgICAgICAgIGVsLnVuc2VsZWN0KCk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgZWwuc2VsZWN0KCk7XHJcbiAgICAgICAgZWwudW5zZWxlY3RpZnkoKTtcclxuXHJcbiAgICAgICAgLy8gUXVlc3RvIHZhIGFuY2hlIG5lbGxhIGxpc3RhIGRlZ2xpIGVsZW1lbnRpIG9yaWdpbmFsaSAodGhpcy5FbGVtZW50cykgZGF0byBjaGUgY3l0b3NjYXBlIGxpIHByZW5kZSBwZXIgcmlmZXJpbWVudG8gKGJiYmJicmF2byBjeXRvLWNoYW4pXHJcbiAgICAgICAgZWwuZGF0YShcIl9fc2VsZWN0ZWRcIiwgIXNlbGVjdGVkKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5vbk5vZGVDbGljay5lbWl0KHsgZGF0YTogdGFyZ2V0RGF0YSB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY3kuYmluZCgnc2VsZWN0JywgJ25vZGUnLCAoZXZlbnQpID0+IHtcclxuICAgICAgbGV0IHRhcmdldERhdGEgPSBldmVudC50YXJnZXQuZGF0YSgpXHJcblxyXG4gICAgICB0aGlzLm9uTm9kZVNlbGVjdGlvbi5lbWl0KHsgZGF0YTogdGFyZ2V0RGF0YSwgc2VsZWN0ZWQ6IHRydWUgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmN5LmJpbmQoJ2xheW91dHN0b3AnLCAoZXZlbnQpID0+IHtcclxuICAgICAgdGhpcy5vbkxheW91dERvbmUuZW1pdCgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jeS5iaW5kKCd1bnNlbGVjdCcsICdub2RlJywgKGV2ZW50KSA9PiB7XHJcbiAgICAgIGxldCB0YXJnZXREYXRhID0gZXZlbnQudGFyZ2V0LmRhdGEoKVxyXG5cclxuICAgICAgdGhpcy5vbk5vZGVTZWxlY3Rpb24uZW1pdCh7IGRhdGE6IHRhcmdldERhdGEsIHNlbGVjdGVkOiBmYWxzZSB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIEFsdHJpIGV2ZW50aS4uLlxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGNoZSBzZXJ2ZSBwZXIgY2FyaWNhcmUgdHV0dGUgbGUgZXN0ZW5zaW9uaSBkZWxsYSBsaWJyZXJpYSBpbiBiYXNlIGEgY2nDsiBjaGUgdmllbmUgdXRpbGl6emF0b1xyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgcGVyZm9ybU1vZHVsZXNMb2FkaW5nKCkge1xyXG4gICAgaWYgKHRoaXMuTGF5b3V0Lm5hbWUgPT0gJ2RhZ3JlJylcclxuICAgICAgYXdhaXQgdGhpcy5sb2FkSW50ZXJuYWwoXCJjeXRvc2NhcGUtZGFncmVcIik7XHJcblxyXG4gICAgaWYgKHRoaXMuTm9kZUhUTUxUZW1wbGF0ZXMgJiYgdGhpcy5Ob2RlSFRNTFRlbXBsYXRlcy5sZW5ndGggPiAwKVxyXG4gICAgICBhd2FpdCB0aGlzLmxvYWRJbnRlcm5hbChcImN5dG9zY2FwZS1odG1sLW5vZGVcIik7XHJcblxyXG4gICAgaWYgKHRoaXMuVXNlQ29udGV4dE1lbnUpXHJcbiAgICAgIGF3YWl0IHRoaXMubG9hZEludGVybmFsKFwiY3l0b3NjYXBlLWN4dG1lbnVcIik7XHJcblxyXG4gICAgaWYgKHRoaXMuTm9kZXNIaWVyYXJjaHkgJiYgdGhpcy5Vc2VFeHBhbmRDb2xsYXBzZSlcclxuICAgICAgYXdhaXQgdGhpcy5sb2FkSW50ZXJuYWwoXCJjeXRvc2NhcGUtZXhwYW5kLWNvbGxhcHNlXCIpO1xyXG5cclxuICAgIGlmICh0aGlzLkV4dGVuc2lvbk1vZHVsZXNJbXBvcnRlcikge1xyXG4gICAgICAvLyBXcmFwcG8gaWwgbmFtZXNwYWNlIGluIG1vZG8gY2hlIHBvc3NhIGRpcmUgbGEgbWlhIHN1bCBmYXR0byBjaGUgbCd1dGVudGUgYWdnaXVuZ2EgdW4gbW9kdWxvIG8gbWVubyA6RFxyXG4gICAgICB2YXIgd3JhcHBlZEN5dG9zY2FwZSA9IHtcclxuICAgICAgICB1c2U6IChtb2R1bGVOYW1lOiBzdHJpbmcsIG1vZHVsZTogY3l0b3NjYXBlLkV4dCkgPT4ge1xyXG4gICAgICAgICAgaWYgKCFtb2R1bGUpXHJcbiAgICAgICAgICAgIHRoaXMuc2VydmljZS5sb2coXCJFXCIsIHRoaXMuc2VydmljZS5sb2MoXCJSZWNlaXZlZCBhbiB1bmRlZmluZWQgbW9kdWxlLiBNYWtlIHN1cmUgeW91IGFyZSBjb3JyZWN0bHkgbG9hZGluZyBpdFwiKSArIFwiOiBcIiArIG1vZHVsZU5hbWUsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgICBpZiAoW1wiY3l0b3NjYXBlLWRhZ3JlXCIsIFwiY3l0b3NjYXBlLWh0bWwtbm9kZVwiLCBcImN5dG9zY2FwZS1jeHRtZW51XCIsIFwiY3l0b3NjYXBlLWV4cGFuZC1jb2xsYXBzZVwiXS5pbmNsdWRlcyhtb2R1bGVOYW1lKSlcclxuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlLmxvZyhcIldcIiwgdGhpcy5zZXJ2aWNlLmxvYyhcIk1vZHVsZVwiKSArIFwiIFwiICsgbW9kdWxlTmFtZSArIFwiIFwiICsgdGhpcy5zZXJ2aWNlLmxvYyhcImlzIGxvYWRlZCBhbmQgbWFuYWdlZCBkaXJlY3RseSBieSB0aGlzIGxpYnJhcnkuIFlvdSBkb24ndCBuZWVkIHRvIGltcG9ydCBpdCBvciB1c2UgaXQgZGlyZWN0bHksIGp1c3QgYmUgc3VyZSB0byBzZXQgdGhlIHJlbGF0aXZlIG9wdGlvbnNcIiksIGZhbHNlKTtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgY3l0b3NjYXBlLnVzZShtb2R1bGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgYXdhaXQgdGhpcy5FeHRlbnNpb25Nb2R1bGVzSW1wb3J0ZXIod3JhcHBlZEN5dG9zY2FwZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gY2hlIHNlcnZlIHBlciBjYXJpY2FyZSB0dXR0ZSBsZSBlc3RlbnNpb25pIGRlbGxhIGxpYnJlcmlhIGluIGJhc2UgYSBjacOyIGNoZSB2aWVuZSB1dGlsaXp6YXRvIGNvbiBsZSBvcHppb25pIGRlZmluaXRlIGRhZ2xpIElucHV0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwZXJmb3JtT3BlcmF0aW9uc1dpdGhMb2FkZWRNb2R1bGVzKCkge1xyXG5cclxuICAgIGxldCBhbnlDeSA9ICg8YW55PnRoaXMuY3kpO1xyXG5cclxuICAgIC8vIFV0aWxpenpvIGRlbCBsYXlvdXQsIGxvIHNhbHZvIHBlciBwb3RlcmxvIHJpdXRpbGl6emFyZSBpbiBmdXR1cm9cclxuICAgIGlmICh0aGlzLkxheW91dCkge1xyXG4gICAgICB0aGlzLkxhc3RMYXlvdXQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuTGF5b3V0KSk7XHJcbiAgICAgIHRoaXMuY3kubGF5b3V0KHRoaXMuTGFzdExheW91dCkucnVuKClcclxuICAgIH1cclxuXHJcbiAgICAvLyBVdGlsaXp6byBkZWxsJ0hUTUwgbm9kZVxyXG4gICAgaWYgKHRoaXMuTm9kZUhUTUxUZW1wbGF0ZXMgJiYgdGhpcy5Ob2RlSFRNTFRlbXBsYXRlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuSHRtbE5vZGVBcGkgPSBhbnlDeS5odG1sbm9kZSgpO1xyXG4gICAgICB0aGlzLkh0bWxOb2RlQXBpLmNyZWF0ZUh0bWxOb2RlKGN5dG9zY2FwZSwgdGhpcy5jeSwgdGhpcy5Ob2RlSFRNTFRlbXBsYXRlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVXRpbGl6em8gZGVsIENvbnRleHQgTWVudVxyXG4gICAgaWYgKHRoaXMuVXNlQ29udGV4dE1lbnUpXHJcbiAgICAgIHRoaXMuQ29udGV4dE1lbnVPcHRpb25zLmZvckVhY2gobyA9PiB7IGFueUN5LmN4dG1lbnUobyk7IH0pO1xyXG5cclxuICAgIC8vIFV0aWxpenpvIGRlbGwnZXhwYW5kIGNvbGxhcHNlIHNvbG8gcXVhbmRvIGMnw6ggdW5hIGdlcmFyY2hpYSBkaSBub2RpXHJcbiAgICBpZiAodGhpcy5Ob2Rlc0hpZXJhcmNoeSAmJiB0aGlzLlVzZUV4cGFuZENvbGxhcHNlKVxyXG4gICAgICB0aGlzLkV4cGFuZENvbGxhcHNlQXBpID0gYW55Q3kuZXhwYW5kQ29sbGFwc2UodGhpcy5FeHBhbmRDb2xsYXBzZU9wdGlvbnMpO1xyXG5cclxuICAgIC8vIFV0aWxpenpvIGRpIGVzdGVuc2lvbmkgZXh0cmEsIGltcGxlbWVudGF6aW9uZSBhZmZpZGF0YSBhbCBwcm9ncmFtbWF0b3JlXHJcbiAgICBpZiAodGhpcy5FeHRlbnNpb25Nb2R1bGVzQXBwbHllcilcclxuICAgICAgdGhpcy5FeHRlbnNpb25Nb2R1bGVzQXBwbHllcih0aGlzLmN5KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVDYXJkRGF0YSgpIHtcclxuICAgIGlmICghdGhpcy5IdG1sTm9kZUFwaSkge1xyXG4gICAgICB0aGlzLnNlcnZpY2UubG9nKFwiRVwiLCBcIkNhbm5vdCB1cGRhdGUgTm9kZUhUTUxUZW1wbGF0ZXMgYXMgdGhleSBkb24ndCBzZWVtIHRvIGJlIHVzZWRcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuSHRtbE5vZGVBcGkudXBkYXRlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gaW50ZXJubyBwZXIgaWwgY2FyaWNhbWVudG8gZGVpIG1vZHVsaSBkaSBlc3RlbnNpb25lXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHsnY3l0b3NjYXBlLWV4cGFuZC1jb2xsYXBzZScgfCAnY3l0b3NjYXBlLWN4dG1lbnUnIHwgJ2N5dG9zY2FwZS1odG1sLW5vZGUnIHwgJ2N5dG9zY2FwZS1kYWdyZSd9IG1vZHVsZUlkIE1vZHVsbyBkYSBjYXJpY2FyZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgbG9hZEludGVybmFsKG1vZHVsZUlkOiAnY3l0b3NjYXBlLWV4cGFuZC1jb2xsYXBzZScgfCAnY3l0b3NjYXBlLWN4dG1lbnUnIHwgJ2N5dG9zY2FwZS1odG1sLW5vZGUnIHwgJ2N5dG9zY2FwZS1kYWdyZScpIHtcclxuICAgIGxldCB0b0xvYWQgPSBhd2FpdCB0aGlzLnNlcnZpY2UuaW1wb3J0SWZOZWVkZWQobW9kdWxlSWQpO1xyXG4gICAgaWYgKHRvTG9hZCkgY3l0b3NjYXBlLnVzZSh0b0xvYWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGNoZSBiYXNhbmRvc2kgc3VsbGUgb3B6aW9uaSBuYXRpdmUgZXZlbnR1YWxtZW50ZSBhc3NlZ25hdGUgbGUgY29tcGxldGEgY29uIGdsaSBJbnB1dCBhZGRpemlvbmFsaVxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtjeV8uQ3l0b3NjYXBlT3B0aW9uc30gT3B6aW9uaSBmaW5hbGkgdW5pdGUgZGEgSW5wdXQgZWQgb3B6aW9uaSBuYXRpdmVcclxuICAgKi9cclxuICBwcml2YXRlIGdldENvbXBsZXRlZE9wdGlvbnMoKTogY3lfLkN5dG9zY2FwZU9wdGlvbnMge1xyXG4gICAgdmFyIG9wdHM6IGN5Xy5DeXRvc2NhcGVPcHRpb25zID0gdGhpcy5OYXRpdmVPcHRpb25zIHx8IHt9O1xyXG4gICAgb3B0cy5jb250YWluZXIgPSB0aGlzLmN5R3JhcGgubmF0aXZlRWxlbWVudDtcclxuICAgIG9wdHMuc3R5bGUgPSBvcHRzLnN0eWxlIHx8IFtdO1xyXG5cclxuICAgIC8vIFBlciB0dXR0ZSBsZSBjb3NlIHBlciBjdWkgZ2xpIElucHV0IGhhbm5vIHByaW9yaXTDoCBzb3ZyYXNjcml2byBnbGkgb3JpZ2luYWxpIGRlbGxlIG9wemlvbmlcclxuXHJcbiAgICBpZiAodGhpcy5Ob2RlU3R5bGVzIHx8IHRoaXMuRWRnZVN0eWxlcykge1xyXG4gICAgICBvcHRzLnN0eWxlID0gW107XHJcbiAgICAgIGlmICh0aGlzLk5vZGVTdHlsZXMpIG9wdHMuc3R5bGUucHVzaCh7IHNlbGVjdG9yOiAnbm9kZScsIGNzczogdGhpcy5Ob2RlU3R5bGVzIH0pO1xyXG4gICAgICBpZiAodGhpcy5FZGdlU3R5bGVzKSBvcHRzLnN0eWxlLnB1c2goeyBzZWxlY3RvcjogJ2VkZ2UnLCBjc3M6IHRoaXMuRWRnZVN0eWxlcyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5FbGVtZW50cylcclxuICAgICAgb3B0cy5lbGVtZW50cyA9IHRoaXMuRWxlbWVudHM7XHJcblxyXG4gICAgdGhpcy5yZXZpZXdDeXRvc2NhcGVFbGVtZW50cyg8Y3l0b3NjYXBlLkVsZW1lbnREZWZpbml0aW9uW10+b3B0cy5lbGVtZW50cyk7XHJcblxyXG4gICAgaWYgKHRoaXMuTGF5b3V0KVxyXG4gICAgICBvcHRzLmxheW91dCA9IHRoaXMuTGF5b3V0O1xyXG5cclxuICAgIGlmICh0aGlzLlJlYWRvbmx5KSB7XHJcbiAgICAgIC8vIFF1ZXN0byBjb3NvIGZhIGVmZmV0dGkgc3RyYW5pLi4uLlxyXG4gICAgICAvL29wdHMuYXV0b2xvY2sgPSB0cnVlO1xyXG5cclxuICAgICAgb3B0cy5hdXRvdW5ncmFiaWZ5ID0gdHJ1ZTtcclxuICAgICAgb3B0cy5hdXRvdW5zZWxlY3RpZnkgPSBmYWxzZTtcclxuICAgICAgb3B0cy5ib3hTZWxlY3Rpb25FbmFibGVkID0gdHJ1ZTtcclxuICAgICAgb3B0cy51c2VyWm9vbWluZ0VuYWJsZWQgPSBmYWxzZTtcclxuICAgICAgb3B0cy51c2VyUGFubmluZ0VuYWJsZWQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3B0cztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFnZ2l1c3RhbWVudGkgZGVnbGkgZWxlbWVudGkgZGkgQ3l0b3NjYXBlLiBcclxuICAgKiBcclxuICAgKiBJIG5vZGkgbm9uIHZlbmdvbm8gdG9jY2F0aS5cclxuICAgKiBcclxuICAgKiBQZXIgb2duaSBlZGdlIHZpZW5lIGNvbnRyb2xsYXRvIHNlIMOoIHNwZWNpZmljYXRhIHVuYSBzb3JnZW50ZSBlZCB1bmEgZGVzdGluYXppb25lLCBpbiBjYXNvIGNvbnRyYXJpbyBzaSBjZXJjYSBkaSBkZWR1cmxpIGRhbGwnSURcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge2N5dG9zY2FwZS5FbGVtZW50RGVmaW5pdGlvbltdfSBlbGVtZW50cyBFbGVtZW50aSBkYSBzaXN0ZW1hcmVcclxuICAgKi9cclxuICBwcml2YXRlIHJldmlld0N5dG9zY2FwZUVsZW1lbnRzKGVsZW1lbnRzOiBjeXRvc2NhcGUuRWxlbWVudERlZmluaXRpb25bXSwgcHJldlBvc2l0aW9ucz86IGFueSkge1xyXG4gICAgbGV0IGhhc1ByZXZpb3VzUG9zaXRpb25zID0gcHJldlBvc2l0aW9ucyAmJiBwcmV2UG9zaXRpb25zLmxlbmd0aCA+IDA7XHJcbiAgICBsZXQgcG9zaXRpb25DYWNoZTogeyBbaW5kZXg6IHN0cmluZ106IGN5dG9zY2FwZS5Qb3NpdGlvbiB9ID0ge307XHJcblxyXG4gICAgaWYgKGhhc1ByZXZpb3VzUG9zaXRpb25zKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJldlBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCBpdGVtID0gcHJldlBvc2l0aW9uc1tpXTtcclxuICAgICAgICBpZiAoIXBvc2l0aW9uQ2FjaGVbaXRlbS5kYXRhKCkuaWRdKVxyXG4gICAgICAgICAgcG9zaXRpb25DYWNoZVtpdGVtLmRhdGEoKS5pZF0gPSBpdGVtLnBvc2l0aW9uKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBlbCA9IGVsZW1lbnRzW2ldO1xyXG4gICAgICBpZiAoZWwuZ3JvdXAgPT0gXCJlZGdlc1wiICYmICghZWwuZGF0YS5zb3VyY2UgJiYgIWVsLmRhdGEudGFyZ2V0KSkge1xyXG4gICAgICAgIGlmICghZWwuZGF0YS5pZC5pbmNsdWRlcyhcIi1cIikpXHJcbiAgICAgICAgICB0aGlzLnNlcnZpY2UubG9nKFwiRVwiLCBcIklmIHlvdSBkb24ndCBzcGVjaWZ5IGEgc291cmNlIGFuZCBhIHRhcmdldCBmb3IgYW4gZWRnZSB5b3UgaGF2ZSB0byB3cml0ZSBpdHMgaWQgaW4gdGhlIGZvcm1hdCB7c291cmNlfS17dGFyZ2V0fVwiKTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHZhciBzb3VyY2VUYXJnZXQgPSBlbC5kYXRhLmlkLnNwbGl0KCctJyk7XHJcbiAgICAgICAgICBlbC5kYXRhLnNvdXJjZSA9IHNvdXJjZVRhcmdldFswXS50cmltKCk7XHJcbiAgICAgICAgICBlbC5kYXRhLnRhcmdldCA9IHNvdXJjZVRhcmdldFsxXS50cmltKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaGFzUHJldmlvdXNQb3NpdGlvbnMgJiYgZWwuZ3JvdXAgPT0gXCJub2Rlc1wiKVxyXG4gICAgICAgIGVsLnBvc2l0aW9uID0gcG9zaXRpb25DYWNoZVtlbC5kYXRhLmlkXVxyXG4gICAgfVxyXG4gIH1cclxufSIsIjxkaXYgI2dyYXBoIGNsYXNzPVwiZ3JhcGgtd3JhcHBlciB7e25hbWV9fVwiPjwvZGl2PiJdfQ==
@@ -980,8 +980,10 @@ class EsDiagramComponent {
980
980
  * All'onDestroy ripulisco la memoria dal diagramma
981
981
  */
982
982
  ngOnDestroy() {
983
- this.resizeObserver.dispose();
984
- this.resizeObserver = null;
983
+ if (this.resizeObserver) {
984
+ this.resizeObserver.dispose();
985
+ this.resizeObserver = null;
986
+ }
985
987
  if (this.cy) {
986
988
  this.service.log("I", "Diagram" + " " + this.name + ": Unloading destroyed diagram", false);
987
989
  this.cy.destroy();