@smarterplan/ngx-smarterplan-locations 0.1.6 → 0.1.7

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.
@@ -52,7 +52,9 @@ export class AddZoneComponent {
52
52
  async updateLayers() {
53
53
  const mission = this.userService.currentMission(this.spaceID);
54
54
  this.currentOrgId = mission.organisationID;
55
- this.layers = await this.layerService.getLayerForOrganisation(this.currentOrgId);
55
+ const layers = await this.layerService.getLayerForOrganisation(this.currentOrgId);
56
+ // filter out layers created by the system
57
+ this.layers = layers.filter((l) => l.name !== "BUILDING" && l.name !== "FLOOR");
56
58
  }
57
59
  async initZoneForm() {
58
60
  if (this.zoneEdit) {
@@ -530,4 +532,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
530
532
  }], defaultZone: [{
531
533
  type: Input
532
534
  }] } });
533
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXpvbmUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy9zcmMvbGliL2NvbXBvbmVudHMvem9uZXMvYWRkLXpvbmUvYWRkLXpvbmUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy9zcmMvbGliL2NvbXBvbmVudHMvem9uZXMvYWRkLXpvbmUvYWRkLXpvbmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQTBCLFVBQVUsRUFBbUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRixPQUFPLEVBQzJGLGVBQWUsRUFDaEcseUJBQXlCLEVBQUUsdUJBQXVCLEVBQ2xFLE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxPQUFvQixNQUFNLFNBQVMsQ0FBQztBQUMzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBYSxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7OztBQU9oSixNQUFNLE9BQU8sZ0JBQWdCO0lBa0V6QixZQUNZLEVBQWUsRUFDZixXQUF3QixFQUN4QixZQUEwQixFQUMxQixXQUE0QixFQUM1QixpQkFBb0MsRUFDcEMsV0FBd0I7UUFMeEIsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUM1QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLGdCQUFXLEdB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LFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDMUMsSUFBSSxXQUFXLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDdkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDM0M7U0FDSjthQUFNO1lBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDMUM7SUFDTCxDQUFDOzs2R0Fsb0JRLGdCQUFnQjtpR0FBaEIsZ0JBQWdCLGtXQ2Q3QiwybVZBc0xNOzJGRHhLTyxnQkFBZ0I7a0JBTDVCLFNBQVM7K0JBQ0ksY0FBYzsrT0FNZixRQUFRO3NCQUFoQixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUksV0FBVztzQkFBcEIsTUFBTTtnQkFFRSxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtQnVpbGRlciwgVmFsaWRhdG9ycywgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge1xyXG4gICAgWm9uZSwgUGxhbiwgTGF5ZXIsIE5hdmlnYXRpb24sIFpvbmVTZXJ2aWNlLCBMYXllclNlcnZpY2UsIEJhc2VVc2VyU2VydmljZSwgTmF2aWdhdGlvblNlcnZpY2UsIGdldE1ldGFGb3JJbWFnZSxcclxuICAgIFBsYW5TZXJ2aWNlLCBzaG93U2NhblBvaW50c09uUGxhbkluRGl2LCBnZXRDb2VmZmljaWVudHNGb3JJbWFnZVxyXG59IGZyb20gJ0BzbWFydGVycGxhbi9uZ3gtc21hcnRlcnBsYW4tY29yZSc7XHJcbmltcG9ydCBwYW56b29tLCB7IFBhblpvb20gfSBmcm9tICdwYW56b29tJztcclxuaW1wb3J0IHsgYnV0dG9uSXNDaG9zZW4sIGJ1dHRvbklzSW5TZWxlY3Rpb24sIGlzSW5Qb2x5Z29uLCBSZWN0YW5nbGUsIHJvdGF0ZSwgc2V0VmlzdWFsbHlTZWxlY3RlZCwgc3R5bGVCdXR0b24gfSBmcm9tICcuLi8uLi8uLi9oZWxwZXIuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbGliLWFkZC16b25lJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9hZGQtem9uZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9hZGQtem9uZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBZGRab25lQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgICBASW5wdXQoKSB6b25lRWRpdDogWm9uZTtcclxuXHJcbiAgICBASW5wdXQoKSBzcGFjZUlEOiBzdHJpbmc7XHJcblxyXG4gICAgQElucHV0KCkgaW1hZ2VzMzYwOiB7IHBhdGg6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZzsgfVtdO1xyXG5cclxuICAgIEBJbnB1dCgpIG5hdmlnYXRpb25JRHM6IHN0cmluZ1tdO1xyXG5cclxuICAgIEBJbnB1dCgpIHpvbmVzOiBab25lW107XHJcblxyXG4gICAgQElucHV0KCkgbmV3Wm9uZURhdGE6IGFueTtcclxuXHJcbiAgICBAT3V0cHV0KCkgdXBkYXRlZFpvbmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgICBASW5wdXQoKSBjaG9zZW5QbGFuOiBQbGFuO1xyXG5cclxuICAgIEBJbnB1dCgpIGlzTXVzZXVtVmlzaXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBASW5wdXQoKSBkZWZhdWx0Wm9uZTogWm9uZTtcclxuXHJcbiAgICBwYXJlbnRab25lczogWm9uZVtdID0gW107XHJcblxyXG4gICAgY2Fyb3VzZWxJc1Zpc2libGUgPSBmYWxzZTtcclxuXHJcbiAgICB6b25lRm9ybTogRm9ybUdyb3VwO1xyXG5cclxuICAgIGlzU3VibWl0dGVkID0gZmFsc2U7XHJcblxyXG4gICAgY3VycmVudFNjYW5TaG93aW5nOiBudW1iZXI7XHJcblxyXG4gICAgY2hvc2VuU2NhbnM6IG51bWJlcltdID0gW107XHJcblxyXG4gICAgbGF5ZXJzOiBMYXllcltdO1xyXG5cclxuICAgIHBsYW5zOiBQbGFuW107XHJcblxyXG4gICAgZnJvbVBsYW46IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwbGFuQ2FsaWJyYXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIGNob3NlblNjYW5zT25QbGFuOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIG5hdklEc1pvbmVFZGl0OiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIGN1cnJlbnRPcmdJZDogc3RyaW5nO1xyXG5cclxuICAgIHpvbmVJbml0aWFsTmF2Q291bnQgPSAwO1xyXG5cclxuICAgIC8qKiBwYW5ab29tIGVsZW1lbnQgZm9yIGFkZGluZyBzY2FucyAqL1xyXG4gICAgcGFuWm9vbTogUGFuWm9vbTtcclxuXHJcbiAgICAvKiogZGl2UGxhbiAodXNlIEJ5IHBhblpvb20pICovXHJcbiAgICBkaXZQbGFuOiBIVE1MRWxlbWVudDtcclxuXHJcbiAgICAvKiogYWxsIHNjYW4gYnV0dG9ucyBFbGVtZW50ICovXHJcbiAgICBidXR0b25FbGVtZW50czogSFRNTEJ1dHRvbkVsZW1lbnRbXSA9IFtdO1xyXG5cclxuICAgIC8qKiBTY2FuIGJ1dHRvbnMgdGhhdCBhcmUgaW4gdGhlIGN1cnJlbnQgc2VsZWN0aW9uICovXHJcbiAgICBidXR0b25zSW5TZWxlY3Rpb246IEhUTUxCdXR0b25FbGVtZW50W10gPSBbXTtcclxuXHJcbiAgICB6b25lSXNNYXR0ZXJwb3J0Rmxvb3IgPSBmYWxzZTtcclxuXHJcbiAgICBtdWx0aXBsZUZsb29ycyA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgICAgIHByaXZhdGUgem9uZVNlcnZpY2U6IFpvbmVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbGF5ZXJTZXJ2aWNlOiBMYXllclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogQmFzZVVzZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbmF2aWdhdGlvblNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcGxhblNlcnZpY2U6IFBsYW5TZXJ2aWNlLFxyXG4gICAgKSB7IH1cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnBhcmVudFpvbmVzID0gdGhpcy56b25lcy5maWx0ZXIoXHJcbiAgICAgICAgICAgICh6b25lKSA9PiB6b25lLmxheWVyICYmIHpvbmUubGF5ZXIubmFtZSA9PT0gXCJGTE9PUlwiLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5wYXJlbnRab25lcy51bnNoaWZ0KHRoaXMuZGVmYXVsdFpvbmUpO1xyXG4gICAgICAgIHRoaXMuaW5pdFpvbmVGb3JtKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMYXllcnMoKTtcclxuICAgICAgICB0aGlzLmdldFBsYW5zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkNoYW5nZXMoKSB7XHJcbiAgICAgICAgdGhpcy5pbml0Wm9uZUZvcm0oKTtcclxuICAgICAgICBpZiAodGhpcy5uZXdab25lRGF0YSkgdGhpcy5pbmlQbGFuRm9yRHJhdygpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHVwZGF0ZUxheWVycygpIHtcclxuICAgICAgICBjb25zdCBtaXNzaW9uID0gdGhpcy51c2VyU2VydmljZS5jdXJyZW50TWlzc2lvbih0aGlzLnNwYWNlSUQpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudE9yZ0lkID0gbWlzc2lvbi5vcmdhbmlzYXRpb25JRDtcclxuICAgICAgICB0aGlzLmxheWVycyA9IGF3YWl0IHRoaXMubGF5ZXJTZXJ2aWNlLmdldExheWVyRm9yT3JnYW5pc2F0aW9uKFxyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRPcmdJZCxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGluaXRab25lRm9ybSgpIHtcclxuICAgICAgICBpZiAodGhpcy56b25lRWRpdCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy56b25lRWRpdC5tZXRhZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWV0YWRhdGEgPSBKU09OLnBhcnNlKHRoaXMuem9uZUVkaXQubWV0YWRhdGEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy56b25lSXNNYXR0ZXJwb3J0Rmxvb3IgPSBtZXRhZGF0YS5oYXNPd25Qcm9wZXJ0eShcIm1hdHRlcnBvcnRGbG9vclNlcXVlbmNlXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGlzVmlydHVhbCA9IHRoaXMuem9uZVNlcnZpY2Uuem9uZUlzVmlydHVhbCh0aGlzLnpvbmVFZGl0KTtcclxuICAgICAgICAgICAgaWYgKCFpc1ZpcnR1YWwpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZE5hdmlnYXRpb25zKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5pc011c2V1bVZpc2l0ID0gdGhpcy56b25lRWRpdC5pc011c2V1bVZpc2l0Wm9uZVxyXG4gICAgICAgICAgICAgICAgPyB0aGlzLnpvbmVFZGl0LmlzTXVzZXVtVmlzaXRab25lXHJcbiAgICAgICAgICAgICAgICA6IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLm11bHRpcGxlRmxvb3JzID0gdGhpcy56b25lRWRpdC5pc011bHRpcGxlRmxvb3Jab25lID8gdGhpcy56b25lRWRpdC5pc011c2V1bVZpc2l0Wm9uZVxyXG4gICAgICAgICAgICAgICAgOiBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy56b25lRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMuem9uZUVkaXQuaWQsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBbdGhpcy56b25lRWRpdC5uYW1lLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICAgICAgICAgICAgbGF5ZXJJRDogdGhpcy56b25lRWRpdC5sYXllciA/IHRoaXMuem9uZUVkaXQubGF5ZXIuaWQgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgc3VyZmFjZTogdGhpcy56b25lRWRpdC5zdXJmYWNlID8gdGhpcy56b25lRWRpdC5zdXJmYWNlIDogMCxcclxuICAgICAgICAgICAgICAgIHBhcmVudElEOiB0aGlzLnpvbmVFZGl0LnBhcmVudElELFxyXG4gICAgICAgICAgICAgICAgcGFyZW50OiB0aGlzLnpvbmVFZGl0LnBhcmVudCxcclxuICAgICAgICAgICAgICAgIG5ld0xheWVyOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgaXNNdXNldW1WaXNpdFpvbmU6IHRoaXMuaXNNdXNldW1WaXNpdCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2VNdWx0aXBsZUZsb29ycygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1haW5ab25lID0gdGhpcy5nZXREZWZhdWx0Wm9uZSgpO1xyXG4gICAgICAgICAgICB0aGlzLnpvbmVGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdab25lRGF0YSA/IHRoaXMubmV3Wm9uZURhdGEubmFtZSA6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgW1ZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgIGxheWVySUQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBzdXJmYWNlOiAwLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50SUQ6IG1haW5ab25lLmlkLFxyXG4gICAgICAgICAgICAgICAgbmV3TGF5ZXI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBpc011c2V1bVZpc2l0Wm9uZTogdGhpcy5pc011c2V1bVZpc2l0LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0UGxhbnMoKSB7XHJcbiAgICAgICAgdGhpcy5wbGFucyA9IGF3YWl0IHRoaXMucGxhblNlcnZpY2UuZ2V0U2luZ2VkUGxhbnNGb3JTcGFjZShcclxuICAgICAgICAgICAgdGhpcy5zcGFjZUlELFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25TdWJtaXRab25lKCkge1xyXG4gICAgICAgIHRoaXMuaXNTdWJtaXR0ZWQgPSB0cnVlO1xyXG4gICAgICAgIGlmICghdGhpcy56b25lRm9ybS52YWxpZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMuem9uZUZvcm0uZ2V0UmF3VmFsdWUoKTsgLy9iZWNhdXNlIHdlIG5lZWQgdmFsdWVzIG9mIGRpc2FibGVzIGNvbnRyb2xzIGFzIHdlbGxcclxuICAgICAgICBpZiAoZm9ybVZhbHVlLm5ld0xheWVyKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY3JlYXRlTGF5ZXIoZm9ybVZhbHVlLm5ld0xheWVyKS50aGVuKChsYXllcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgZm9ybVZhbHVlLmxheWVySUQgPSBsYXllci5pZDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZm9ybVZhbHVlLmxheWVySUQgJiYgIXRoaXMuaXNNdXNldW1WaXNpdCkge1xyXG4gICAgICAgICAgICAvLyBieSBkZWZhdWwgYXNzaWduIHRvIGxheWVyOiBcIkxvY2FsXCIgd2l0aCB1dWlkOiBkNjEzOGM1ZC02OTM4LTQ5ZmEtYTVjMy05Y2ViZGU5NzU5NGJcclxuICAgICAgICAgICAgZm9ybVZhbHVlLmxheWVySUQgPSBcImQ2MTM4YzVkLTY5MzgtNDlmYS1hNWMzLTljZWJkZTk3NTk0YlwiO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgem9uZUlucHV0ID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBmb3JtVmFsdWUubmFtZSxcclxuICAgICAgICAgICAgc3VyZmFjZTogZm9ybVZhbHVlLnN1cmZhY2UsXHJcbiAgICAgICAgICAgIHNwYWNlSUQ6IHRoaXMuc3BhY2VJRCxcclxuICAgICAgICAgICAgbGF5ZXJJRDogZm9ybVZhbHVlLmxheWVySUQsXHJcbiAgICAgICAgICAgIHBhcmVudElEOiBmb3JtVmFsdWUucGFyZW50SUQsXHJcbiAgICAgICAgICAgIGlzTXVzZXVtVmlzaXRab25lOiB0aGlzLmlzTXVzZXVtVmlzaXQsXHJcbiAgICAgICAgICAgIGlzTXVsdGlwbGVGbG9vclpvbmU6IHRoaXMubXVsdGlwbGVGbG9vcnMsXHJcbiAgICAgICAgICAgIHN3ZWVwSURzOiBbXSxcclxuICAgICAgICB9IGFzIFpvbmU7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMuem9uZUZvcm0gPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmlzU3VibWl0dGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnpvbmVFZGl0KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB6b25lVXBkYXRlID0gem9uZUlucHV0O1xyXG4gICAgICAgICAgICAgICAgem9uZVVwZGF0ZS5zd2VlcElEcyA9IHRoaXMuem9uZUVkaXQuc3dlZXBJRHM7XHJcbiAgICAgICAgICAgICAgICB6b25lVXBkYXRlLmlkID0gZm9ybVZhbHVlLmlkO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXRTd2VlcHNBbmROb2RlRm9yWm9uZUlucHV0KHpvbmVVcGRhdGUpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy56b25lU2VydmljZS51cGRhdGVab25lKHpvbmVVcGRhdGUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy56b25lRWRpdCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZWRab25lLmVtaXQoem9uZVVwZGF0ZS5pZCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNldFN3ZWVwc0FuZE5vZGVGb3Jab25lSW5wdXQoem9uZUlucHV0KTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuem9uZVNlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgICAuY3JlYXRlKHpvbmVJbnB1dClcclxuICAgICAgICAgICAgICAgICAgICAudGhlbih6b25lQ3JlYXRlZCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlZFpvbmUuZW1pdCh6b25lQ3JlYXRlZC5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25DYW5jZWwoKSB7XHJcbiAgICAgICAgdGhpcy5pc1N1Ym1pdHRlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuem9uZUZvcm0gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY2hvc2VuU2NhbnNPblBsYW4gPSBbXTtcclxuICAgICAgICB0aGlzLmNob3NlblNjYW5zID0gW107XHJcbiAgICAgICAgdGhpcy51cGRhdGVkWm9uZS5lbWl0KGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbmFtZSgpOiBBYnN0cmFjdENvbnRyb2wge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnpvbmVGb3JtLmdldChcIm5hbWVcIik7XHJcbiAgICB9XHJcblxyXG4gICAgdG9nZ2xlQ2Fyb3VzZWwoKSB7XHJcbiAgICAgICAgdGhpcy5jYXJvdXNlbElzVmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jaG9zZW5TY2Fuc09uUGxhbiA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZVBsYW4oKSB7XHJcbiAgICAgICAgdGhpcy5mcm9tUGxhbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jaG9zZW5TY2FucyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQWRkU2NhbigpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2hvc2VuU2NhbnMuaW5jbHVkZXModGhpcy5jdXJyZW50U2NhblNob3dpbmcpKSB7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiYWRkaW5nIHNjYW5cIiwgdGhpcy5jdXJyZW50U2NhblNob3dpbmcpO1xyXG4gICAgICAgICAgICB0aGlzLmNob3NlblNjYW5zLnB1c2godGhpcy5jdXJyZW50U2NhblNob3dpbmcpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGFsZXJ0KFwiU2NhbiBhbHJlYWR5IGFkZGVkIVwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25SZW1vdmVTY2FuSW1hZ2Uoc2NhbjogYW55KSB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmNob3NlblNjYW5zLmluZGV4T2Yoc2Nhbik7XHJcbiAgICAgICAgdGhpcy5jaG9zZW5TY2Fucy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uUmVtb3ZlU2NhblBsYW4oc2NhbjogYW55KSB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmNob3NlblNjYW5zT25QbGFuLmluZGV4T2Yoc2Nhbik7XHJcbiAgICAgICAgdGhpcy5jaG9zZW5TY2Fuc09uUGxhbi5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNldFN3ZWVwc0FuZE5vZGVGb3Jab25lSW5wdXQoem9uZUlucHV0OiBab25lKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLmNob3NlblNjYW5zLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgdGhpcy5jaG9zZW5TY2Fucy5sZW5ndGggIT09IHRoaXMuem9uZUluaXRpYWxOYXZDb3VudCAmJlxyXG4gICAgICAgICAgICAhdGhpcy5mcm9tUGxhblxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICAvLyBpZiB3ZSBjaG9zZSBzY2FucyBmcm9tIHRoZSBjYXJvdXNlbFxyXG4gICAgICAgICAgICBjb25zdCBzd2VlcElEczogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5jaG9zZW5TY2Fucy5tYXAoYXN5bmMgKHNjYW4pID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlVXVpZCA9IHRoaXMuaW1hZ2VzMzYwW3NjYW5dLmZpbGVuYW1lLnNwbGl0KFwiX1wiKVswXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN3ZWVwSUQgPSB0aGlzLm5hdmlnYXRpb25JRHMuZmluZCgobmF2KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5hdi5pbmNsdWRlcyhpbWFnZVV1aWQpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3dlZXBJRCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN3ZWVwSURzLnB1c2goc3dlZXBJRCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB6b25lSW5wdXQuc3dlZXBJRHMgPSBzd2VlcElEcztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyB3ZSBhcmUgbm90IGNvbWluZyBmcm9tIGdhbGxlcnkgY2hvaWNlXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNob3NlblNjYW5zT25QbGFuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHpvbmVJbnB1dC5zd2VlcElEcyA9IHRoaXMuY2hvc2VuU2NhbnNPblBsYW47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh6b25lSW5wdXQuc3dlZXBJRHMgJiYgem9uZUlucHV0LnN3ZWVwSURzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgbmF2Rm9yU3dlZXAgPVxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXROYXZpZ2F0aW9uc0Zvck1hdHRlcnBvcnRJREZvclNwYWNlKFxyXG4gICAgICAgICAgICAgICAgICAgIHpvbmVJbnB1dC5zd2VlcElEc1swXSxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYWNlSUQsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB6b25lSW5wdXQubm9kZUlEcyA9IFtuYXZGb3JTd2VlcFswXS5ub2RlSURdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjcmVhdGVMYXllcihuYW1lOiBzdHJpbmcpOiBQcm9taXNlPExheWVyPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGF5ZXJTZXJ2aWNlLmNyZWF0ZUxheWVyRm9yT3JnYW5pc2F0aW9uKFxyXG4gICAgICAgICAgICBuYW1lLFxyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRPcmdJZCxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvYWROYXZpZ2F0aW9ucygpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnpvbmVFZGl0LnN3ZWVwSURzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy56b25lSW5pdGlhbE5hdkNvdW50ID0gdGhpcy56b25lRWRpdC5zd2VlcElEcy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGNvbnN0IG5hdkxpc3Q6IG51bWJlcltdID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IHNjYW5zWm9uZUVkaXQ6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgICAgICAgdGhpcy56b25lRWRpdC5zd2VlcElEcy5tYXAoYXN5bmMgKHN3ZWVwSUQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNjYW5zWm9uZUVkaXQucHVzaChzd2VlcElEKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuaW1hZ2VzMzYwLmZpbmRJbmRleCgoaW0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGltLmZpbGVuYW1lLmluY2x1ZGVzKHN3ZWVwSUQuc2xpY2UoMCwgOCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmF2TGlzdC5wdXNoKGluZGV4KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5jaG9zZW5TY2FucyA9IG5hdkxpc3Q7XHJcbiAgICAgICAgICAgIHRoaXMubmF2SURzWm9uZUVkaXQgPSBzY2Fuc1pvbmVFZGl0O1xyXG4gICAgICAgICAgICB0aGlzLmNob3NlblNjYW5zT25QbGFuID0gc2NhbnNab25lRWRpdDtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25QbGFuQ2xpY2socGxhbiA9IHRoaXMuY2hvc2VuUGxhbikge1xyXG4gICAgICAgIGlmICghdGhpcy5tdWx0aXBsZUZsb29ycykge1xyXG4gICAgICAgICAgICB0aGlzLmNob3NlblNjYW5zT25QbGFuID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2hvc2VuUGxhbiA9IHBsYW47XHJcbiAgICAgICAgdGhpcy5jbGVhckRpdlBsYW4oKTtcclxuICAgICAgICB0aGlzLmFkZFNjYW5Qb2ludHMoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhZGRTY2FuUG9pbnRzKCkge1xyXG4gICAgICAgIHRoaXMuZGl2UGxhbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjcGxhbkRpdlwiKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICBjb25zdCB6b25lT2ZQbGFuID0gYXdhaXQgdGhpcy56b25lU2VydmljZS5nZXRab25lKFxyXG4gICAgICAgICAgICB0aGlzLmNob3NlblBsYW4uem9uZUlELFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgbmF2aWdhdGlvbnMgPSBhd2FpdCB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldE5hdmlnYXRpb25zRm9yWm9uZShcclxuICAgICAgICAgICAgem9uZU9mUGxhbixcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICh0aGlzLm5ld1pvbmVEYXRhKSBhd2FpdCB0aGlzLnNldFNjYW5CeURyYXcobmF2aWdhdGlvbnMpO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uRWxlbWVudHMgPSBhd2FpdCBzaG93U2NhblBvaW50c09uUGxhbkluRGl2KFxyXG4gICAgICAgICAgICB0aGlzLmNob3NlblBsYW4sXHJcbiAgICAgICAgICAgIHRoaXMuZGl2UGxhbixcclxuICAgICAgICAgICAgbmF2aWdhdGlvbnMsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdGhpcy5idXR0b25FbGVtZW50cykge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hdklEc1pvbmVFZGl0Lmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgICAgIHRoaXMubmF2SURzWm9uZUVkaXQuaW5jbHVkZXMoZWxlbWVudC5pZCkgLy8gYnV0dG9uIGlkIGlzIHRoZSBuYXZpZ2F0aW9uKG5vdCBncmFwaCEpIGlkc1xyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHN0eWxlQnV0dG9uKGVsZW1lbnQsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNob3NlblNjYW5zT25QbGFuLmluY2x1ZGVzKGVsZW1lbnQuaWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaG9zZW5TY2Fuc09uUGxhbi5wdXNoKGVsZW1lbnQuaWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc3R5bGVCdXR0b24oZWxlbWVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGV2ZW50KSA9PlxyXG4gICAgICAgICAgICAgICAgdGhpcy5vbkJ1dHRvblNjYW5DbGlja2VkKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucGFuWm9vbSA9IHBhbnpvb20odGhpcy5kaXZQbGFuLCB7XHJcbiAgICAgICAgICAgIGJvdW5kczogdHJ1ZSxcclxuICAgICAgICAgICAgYm91bmRzUGFkZGluZzogMCxcclxuICAgICAgICAgICAgbWF4Wm9vbTogMy41LFxyXG4gICAgICAgICAgICBiZWZvcmVNb3VzZURvd24oZTogTW91c2VFdmVudCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICBlLmJ1dHRvbiA9PT0gMlxyXG4gICAgICAgICAgICAgICAgKTsgLyoqIElnbm9yZSBldmVudCBmb3IgcmlnaHQgY2xpY2sgKHVzZSBmb3Igc2VsZWN0aW5nKSAqL1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hlbiBhIGJ1dHRvbiByZXByZXNlbnRpbmcgYSBzY2FuIGlzIGNsaWNrZWRcclxuICAgICAqIEBwYXJhbSBidXR0b25cclxuICAgICAqL1xyXG4gICAgb25CdXR0b25TY2FuQ2xpY2tlZChidXR0b246IEhUTUxFbGVtZW50KSB7XHJcbiAgICAgICAgYnV0dG9uLnN0eWxlLmJhY2tncm91bmRJbWFnZSA9IGJ1dHRvbklzQ2hvc2VuKGJ1dHRvbilcclxuICAgICAgICAgICAgPyBgdXJsKFwiaHR0cHM6Ly9hcGkuaWNvbmlmeS5kZXNpZ24vbWRpOmNsb3NlLWNpcmNsZS1vdXRsaW5lLnN2Zz9jb2xvcj1yZWQmaGVpZ2h0PTE3JndpZHRoPTE3XCIpYFxyXG4gICAgICAgICAgICA6IGB1cmwoXCJodHRwczovL2FwaS5pY29uaWZ5LmRlc2lnbi9tZGk6YWRqdXN0LnN2Zz9jb2xvcj1ncmVlbiZoZWlnaHQ9MTcmd2lkdGg9MTdcIilgO1xyXG4gICAgICAgIGlmIChidXR0b25Jc0Nob3NlbihidXR0b24pKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jaG9zZW5TY2Fuc09uUGxhbi5pbmNsdWRlcyhidXR0b24uaWQpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNob3NlblNjYW5zT25QbGFuLnB1c2goYnV0dG9uLmlkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jaG9zZW5TY2Fuc09uUGxhbi5pbmNsdWRlcyhidXR0b24uaWQpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jaG9zZW5TY2Fuc09uUGxhbi5pbmRleE9mKGJ1dHRvbi5pZCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hvc2VuU2NhbnNPblBsYW4uc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICBjbGVhckRpdlBsYW4oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGl2UGxhbikgdGhpcy5kaXZQbGFuLmlubmVySFRNTCA9IFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pUGxhbkZvckRyYXcoKSB7XHJcbiAgICAgICAgdGhpcy50b2dnbGVQbGFuKCk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMub25QbGFuQ2xpY2soKTtcclxuICAgICAgICB9LCA1MDApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBGdW5jdGlvbiBpZiB3ZSBhcmUgY29taW5nIGZvciBzdmcgZWRpdG9yIHdvcmtmbG93ICovXHJcbiAgICBzZXRTY2FuQnlEcmF3KG5hdmlnYXRpb25zOiBhbnlbXSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCByZWN0ID0ge1xyXG4gICAgICAgICAgICAgICAgd2lkdGg6IHRoaXMubmV3Wm9uZURhdGEud2lkdGgsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IHRoaXMubmV3Wm9uZURhdGEuaGVpZ2h0LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCBpbWcgPSBhd2FpdCBnZXRNZXRhRm9ySW1hZ2UodGhpcy5jaG9zZW5QbGFuLmZpbGVwYXRoKTtcclxuICAgICAgICAgICAgY29uc3QgeyBjb2VmZlgsIGNvZWZmWSB9ID0gZ2V0Q29lZmZpY2llbnRzRm9ySW1hZ2UoaW1nLCByZWN0KTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGRyYXcgPSB0aGlzLm5ld1pvbmVEYXRhLmVsZW1lbnRzO1xyXG5cclxuICAgICAgICAgICAgZHJhdy5tYXAoYXN5bmMgKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChlbGVtZW50Lm5vZGVOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInJlY3RcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXRTY2FuSW5SZWN0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29lZmZYLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29lZmZZLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRpb25zLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVsbGlwc2VcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXRTY2FuSW5DaXJjbGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2VmZlgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2VmZlksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGlvbnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwicGF0aFwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNldFNjYW5JblBvbHlnb24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2VmZlgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2VmZlksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGlvbnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzZXRTY2FuSW5SZWN0KGNvZWZmWDogbnVtYmVyLCBjb2VmZlk6IG51bWJlcixcclxuICAgICAgICBlbGVtZW50OiB7IGFuZ2xlOiBhbnk7IGN4OiBhbnk7IGN5OiBhbnk7IHg6IG51bWJlcjsgd2lkdGg6IGFueTsgeTogbnVtYmVyOyBoZWlnaHQ6IGFueTsgfSwgbmF2aWdhdGlvbnM6IGFueVtdKSB7XHJcbiAgICAgICAgY29uc3QgY2FsaWJyYWdlID0gSlNPTi5wYXJzZSh0aGlzLmNob3NlblBsYW4uY2FsaWJyYXRpb24pO1xyXG4gICAgICAgIG5hdmlnYXRpb25zLm1hcCgobmF2aWdhdGlvbikgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IEpTT04ucGFyc2UobmF2aWdhdGlvbi5wb3NpdGlvbik7XHJcbiAgICAgICAgICAgIGxldCBuYXZYID0gKGNhbGlicmFnZS5vZmZzZXRYICsgcG9zaXRpb24ueCAqIGNhbGlicmFnZS54KSAvIGNvZWZmWDtcclxuICAgICAgICAgICAgbGV0IG5hdlkgPSAoY2FsaWJyYWdlLm9mZnNldFkgKyBwb3NpdGlvbi56ICogY2FsaWJyYWdlLnkpIC8gY29lZmZZO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5hbmdsZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgcm90YXRlUG9zID0gcm90YXRlKFxyXG4gICAgICAgICAgICAgICAgICAgIHsgeDogbmF2WCwgeTogbmF2WSB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgeDogZWxlbWVudC5jeCwgeTogZWxlbWVudC5jeSB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuYW5nbGUsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgbmF2WCA9IHJvdGF0ZVBvcy54O1xyXG4gICAgICAgICAgICAgICAgbmF2WSA9IHJvdGF0ZVBvcy55O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKiBUT0RPIGNhbGN1bGVyIGxhIHJvdGF0aW9uIGR1IHJlY3RhbmdsZVxyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgbmF2WCA+IGVsZW1lbnQueCAmJlxyXG4gICAgICAgICAgICAgICAgbmF2WCA8IGVsZW1lbnQueCArIGVsZW1lbnQud2lkdGggJiZcclxuICAgICAgICAgICAgICAgIG5hdlkgPiBlbGVtZW50LnkgJiZcclxuICAgICAgICAgICAgICAgIG5hdlkgPCBlbGVtZW50LnkgKyBlbGVtZW50LmhlaWdodCAmJlxyXG4gICAgICAgICAgICAgICAgIXRoaXMubmF2SURzWm9uZUVkaXQuaW5jbHVkZXMobmF2aWdhdGlvbi5pZClcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hdklEc1pvbmVFZGl0LnB1c2gobmF2aWdhdGlvbi5pZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0gLy8gRU9cclxuXHJcbiAgICBhc3luYyBzZXRTY2FuSW5DaXJjbGUoY29lZmZYOiBudW1iZXIsIGNvZWZmWTogbnVtYmVyLFxyXG4gICAgICAgIGVsZW1lbnQ6IHsgYW5nbGU6IGFueTsgY3g6IG51bWJlcjsgY3k6IG51bWJlcjsgcng6IG51bWJlcjsgcnk6IG51bWJlcjsgfSwgbmF2aWdhdGlvbnM6IE5hdmlnYXRpb25bXSkge1xyXG4gICAgICAgIGNvbnN0IGNhbGlicmFnZSA9IEpTT04ucGFyc2UodGhpcy5jaG9zZW5QbGFuLmNhbGlicmF0aW9uKTtcclxuICAgICAgICBuYXZpZ2F0aW9ucy5tYXAobmF2aWdhdGlvbiA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gSlNPTi5wYXJzZShuYXZpZ2F0aW9uLnBvc2l0aW9uKTtcclxuICAgICAgICAgICAgbGV0IG5hdlggPSAoY2FsaWJyYWdlLm9mZnNldFggKyBwb3NpdGlvbi54ICogY2FsaWJyYWdlLngpIC8gY29lZmZYO1xyXG4gICAgICAgICAgICBsZXQgbmF2WSA9IChjYWxpYnJhZ2Uub2Zmc2V0WSArIHBvc2l0aW9uLnogKiBjYWxpYnJhZ2UueSkgLyBjb2VmZlk7XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmFuZ2xlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByb3RhdGVQb3MgPSByb3RhdGUoXHJcbiAgICAgICAgICAgICAgICAgICAgeyB4OiBuYXZYLCB5OiBuYXZZIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgeyB4OiBlbGVtZW50LmN4LCB5OiBlbGVtZW50LmN5IH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5hbmdsZSxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBuYXZYID0gcm90YXRlUG9zLng7XHJcbiAgICAgICAgICAgICAgICBuYXZZID0gcm90YXRlUG9zLnk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlWCA9XHJcbiAgICAgICAgICAgICAgICBNYXRoLnBvdyhuYXZYIC0gZWxlbWVudC5jeCwgMikgLyBNYXRoLnBvdyhlbGVtZW50LnJ4LCAyKTtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVZID1cclxuICAgICAgICAgICAgICAgIE1hdGgucG93KG5hdlkgLSBlbGVtZW50LmN5LCAyKSAvIE1hdGgucG93KGVsZW1lbnQucnksIDIpO1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB2YWx1ZVggKyB2YWx1ZVk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPD0gMSAmJiAhdGhpcy5uYXZJRHNab25lRWRpdC5pbmNsdWRlcyhuYXZpZ2F0aW9uLmlkKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uYXZJRHNab25lRWRpdC5wdXNoKG5hdmlnYXRpb24uaWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9IC8vIEVPXHJcblxyXG4gICAgYXN5bmMgc2V0U2NhbkluUG9seWdvbihjb2VmZlg6IG51bWJlciwgY29lZmZZOiBudW1iZXIsIGVsZW1lbnQ6IHsgc2VnTGlzdDogYW55OyB9LCBuYXZpZ2F0aW9uczogYW55W10pIHtcclxuICAgICAgICBjb25zdCBjYWxpYnJhZ2UgPSBKU09OLnBhcnNlKHRoaXMuY2hvc2VuUGxhbi5jYWxpYnJhdGlvbik7XHJcbiAgICAgICAgbmF2aWdhdGlvbnMubWFwKGFzeW5jIChuYXZpZ2F0aW9uOiB7IHBvc2l0aW9uOiBzdHJpbmc7IGlkOiBzdHJpbmc7IH0pID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBKU09OLnBhcnNlKG5hdmlnYXRpb24ucG9zaXRpb24pO1xyXG4gICAgICAgICAgICBjb25zdCBwID0ge1xyXG4gICAgICAgICAgICAgICAgeDogKGNhbGlicmFnZS5vZmZzZXRYICsgcG9zaXRpb24ueCAqIGNhbGlicmFnZS54KSAvIGNvZWZmWCxcclxuICAgICAgICAgICAgICAgIHk6IChjYWxpYnJhZ2Uub2Zmc2V0WSArIHBvc2l0aW9uLnogKiBjYWxpYnJhZ2UueSkgLyBjb2VmZlksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIC8vIGlmIChlbGVtZW50LmFuZ2xlKSB7XHJcbiAgICAgICAgICAgIC8vICAgICBwID0gdGhpcy5yb3RhdGUoXHJcbiAgICAgICAgICAgIC8vICAgICAgICAgcCxcclxuICAgICAgICAgICAgLy8gICAgICAgICB7IHg6IGVsZW1lbnQuY3gsIHk6IGVsZW1lbnQuY3kgfSxcclxuICAgICAgICAgICAgLy8gICAgICAgICBlbGVtZW50LmFuZ2xlLFxyXG4gICAgICAgICAgICAvLyAgICAgKTtcclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICBpc0luUG9seWdvbihwLCBlbGVtZW50LnNlZ0xpc3QpICYmXHJcbiAgICAgICAgICAgICAgICAhdGhpcy5uYXZJRHNab25lRWRpdC5pbmNsdWRlcyhuYXZpZ2F0aW9uLmlkKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmF2SURzWm9uZUVkaXQucHVzaChuYXZpZ2F0aW9uLmlkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyaWdnZXIgZWFjaCBieSB0aGUgc2VsZWN0aW9uQ29tcG9uZW50IHdoZW4gc2VsZWN0aW9uIGNoYW5nZVxyXG4gICAgICogVXBkYXRlIHRoZSBjdXJyZW50IHNlbGVjdGVkIHNjYW4gYnV0dG9uc1xyXG4gICAgICogQHBhcmFtIHNlbGVjdGlvbiBuZXcgc2VsZWN0aW9uXHJcbiAgICAgKi9cclxuICAgIG9uU2VsZWN0aW9uQ2hhbmdlZChzZWxlY3Rpb246IFJlY3RhbmdsZSkge1xyXG4gICAgICAgIGNvbnN0IHVuc2VsZWN0ZWRCdXR0b25zOiBIVE1MQnV0dG9uRWxlbWVudFtdID0gW107XHJcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0ZWRCdXR0b25zID0gW107XHJcblxyXG4gICAgICAgIC8qKiBGb3IgZWFjaCBidXR0b24sIGRlY2lkZSB3aGV0aGVyIHdpbGwgYmUgYWRkIHRvIHNlbGVjdGVkIGxpc3Qgb3IgdW5zZWxlY3RlZCBsaXN0ICovXHJcbiAgICAgICAgZm9yIChjb25zdCBidXR0b24gb2YgdGhpcy5idXR0b25FbGVtZW50cykge1xyXG4gICAgICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gYnV0dG9uSXNJblNlbGVjdGlvbihidXR0b24sIHNlbGVjdGlvbik7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmJ1dHRvbnNJblNlbGVjdGlvbi5pbmNsdWRlcyhidXR0b24pKSB7XHJcbiAgICAgICAgICAgICAgICAvKiogSWYgdGhlIGJ1dHRvbiBpcyBhbHJlYWR5IGluIHRoZSBzZWxlY3RlZCBsaXN0LCB3ZSBjaGVjayBpZiBpdCBzaG91bGQgYmUgdW5zZWxlY3QgKi9cclxuICAgICAgICAgICAgICAgIGlmICghaXNTZWxlY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHVuc2VsZWN0ZWRCdXR0b25zLnB1c2goYnV0dG9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChpc1NlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdTZWxlY3RlZEJ1dHRvbnMucHVzaChidXR0b24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiogVmlzdWFsbHkgVXBkYXRlIHVuc2VsZWN0ZWQgbGlzdCAqL1xyXG4gICAgICAgIGZvciAoY29uc3QgYnV0dG9uIG9mIHVuc2VsZWN0ZWRCdXR0b25zKSB7XHJcbiAgICAgICAgICAgIHNldFZpc3VhbGx5U2VsZWN0ZWQoYnV0dG9uLCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiogVmlzdWFsbHkgVXBkYXRlIHNlbGVjdGVkIGxpc3QgKi9cclxuICAgICAgICBmb3IgKGNvbnN0IGJ1dHRvbiBvZiBuZXdTZWxlY3RlZEJ1dHRvbnMpIHtcclxuICAgICAgICAgICAgc2V0VmlzdWFsbHlTZWxlY3RlZChidXR0b24sIHRydWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqIFJlbW92ZSAgdW5zZWxlY3RlZCBsaXN0ICovXHJcbiAgICAgICAgdGhpcy5idXR0b25zSW5TZWxlY3Rpb24gPSB0aGlzLmJ1dHRvbnNJblNlbGVjdGlvbi5maWx0ZXIoKGJ1dHRvbikgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gIXVuc2VsZWN0ZWRCdXR0b25zLmluY2x1ZGVzKGJ1dHRvbik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLyoqIEFkZCBuZXcgc2VsZWN0ZWQgYnV0dG9ucyAqL1xyXG4gICAgICAgIHRoaXMuYnV0dG9uc0luU2VsZWN0aW9uID0gW1xyXG4gICAgICAgICAgICAuLi50aGlzLmJ1dHRvbnNJblNlbGVjdGlvbixcclxuICAgICAgICAgICAgLi4ubmV3U2VsZWN0ZWRCdXR0b25zLFxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyaWdnZXIgd2hlbiB0aGUgdXNlciBjbGljayB0byBhZGQgdGhlIHNlbGVjdGVkIHNjYW5zXHJcbiAgICAgKi9cclxuICAgIG9uU2VsZWN0aW9uQWRkKCkge1xyXG4gICAgICAgIGZvciAoY29uc3QgYnV0dG9uIG9mIHRoaXMuYnV0dG9uc0luU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jaG9zZW5TY2Fuc09uUGxhbi5pbmNsdWRlcyhidXR0b24uaWQpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uQnV0dG9uU2NhbkNsaWNrZWQoYnV0dG9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZWQoeyB0b3A6IDAsIGxlZnQ6IDAsIHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmlnZ2VyIHdoZW4gdGhlIHVzZXIgY2xpY2sgdG8gcmVtb3ZlIHRoZSBzZWxlY3RlZCBzY2Fuc1xyXG4gICAgICovXHJcbiAgICBvblNlbGVjdGlvblJlbW92ZSgpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGJ1dHRvbiBvZiB0aGlzLmJ1dHRvbnNJblNlbGVjdGlvbikge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jaG9zZW5TY2Fuc09uUGxhbi5pbmNsdWRlcyhidXR0b24uaWQpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uQnV0dG9uU2NhbkNsaWNrZWQoYnV0dG9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlZCh7IHRvcDogMCwgbGVmdDogMCwgd2lkdGg6IDAsIGhlaWdodDogMCB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyaWdnZXIgd2hlbiB0aGUgdXNlciBjbGljayB0byBzZWxlY3QgYWxsIHNjYW5zXHJcbiAgICAgKi9cclxuICAgIG9uU2VsZWN0QWxsKCkge1xyXG4gICAgICAgIHRoaXMuYnV0dG9uc0luU2VsZWN0aW9uID0gWy4uLnRoaXMuYnV0dG9uRWxlbWVudHNdO1xyXG4gICAgICAgIGZvciAoY29uc3QgYnV0dG9uIG9mIHRoaXMuYnV0dG9uc0luU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHNldFZpc3VhbGx5U2VsZWN0ZWQoYnV0dG9uLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmlnZ2VyIHdoZW4gdGhlIHVzZXIgY2hhbmdlIHRoZSBzaXplIG9mIHRoZSBzY2FuIHBvaW50c1xyXG4gICAgICogQHBhcmFtIGV2ZW50XHJcbiAgICAgKi9cclxuICAgIG9uQ2hhbmdlU2NhblNpemUoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IGZhY3RvciA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBidXR0b24gb2YgdGhpcy5idXR0b25FbGVtZW50cykge1xyXG4gICAgICAgICAgICBidXR0b24uc3R5bGUudHJhbnNmb3JtID0gYHNjYWxlKCR7ZmFjdG9yfSlgO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYWxsIHN3ZWVwcyBvZiB0aGUgc3BhY2VcclxuICAgICAqL1xyXG4gICAgb25BZGRBbGwoKSB7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdFpvbmUgPSB0aGlzLmdldERlZmF1bHRab25lKCk7XHJcbiAgICAgICAgaWYgKGRlZmF1bHRab25lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hvc2VuU2NhbnNPblBsYW4gPSBkZWZhdWx0Wm9uZS5zd2VlcElEcztcclxuICAgICAgICAgICAgdGhpcy56b25lRm9ybS5nZXQoXCJwYXJlbnRJRFwiKS5zZXRWYWx1ZShkZWZhdWx0Wm9uZS5pZCk7XHJcbiAgICAgICAgICAgIHRoaXMuem9uZUZvcm0uZ2V0KFwicGFyZW50SURcIikuZGlzYWJsZSgpO1xyXG4gICAgICAgICAgICB0aGlzLm11bHRpcGxlRmxvb3JzID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGVmYXVsdFpvbmUoKTogWm9uZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuem9uZXMuZmluZChcclxuICAgICAgICAgICAgKHpvbmUpID0+IHpvbmUubGF5ZXIgJiYgem9uZS5sYXllci5uYW1lID09PSBcIkJVSUxESU5HXCIgJiYgem9uZS5zd2VlcElEcyxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBNdWx0aXBsZSBmbG9vcnMgXHJcbiAgICAgKi9cclxuICAgIG9uQ2hhbmdlTXVsdGlwbGVGbG9vcnMoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGVGbG9vcnMpIHtcclxuICAgICAgICAgICAgY29uc3QgZGVmYXVsdFpvbmUgPSB0aGlzLmdldERlZmF1bHRab25lKCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZhdWx0Wm9uZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy56b25lRm9ybS5nZXQoXCJwYXJlbnRJRFwiKS5zZXRWYWx1ZShkZWZhdWx0Wm9uZS5pZCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnpvbmVGb3JtLmdldChcInBhcmVudElEXCIpLmRpc2FibGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuem9uZUZvcm0uZ2V0KFwicGFyZW50SURcIikuZW5hYmxlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4iLCI8ZGl2IGNsYXNzPVwibWFpbi1jb250YWluZXJcIiAqbmdJZj1cInpvbmVGb3JtXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLTdcIj5cclxuICAgICAgICA8Zm9ybSAobmdTdWJtaXQpPVwib25TdWJtaXRab25lKClcIiBbZm9ybUdyb3VwXT1cInpvbmVGb3JtXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTIgY29sLWZvcm0tbGFiZWxcIj57eydOYW1lJyB8IHRyYW5zbGF0ZX19ICo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3snQSBuYW1lIGlzIHJlcXVpcmVkJyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgcm93XCIgKm5nSWY9XCIhaXNNdXNldW1WaXNpdCAmJiAhem9uZUlzTWF0dGVycG9ydEZsb29yXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMiBjb2wtZm9ybS1sYWJlbFwiPnt7J1R5cGUgb2Ygem9uZScgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cImxheWVySURcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm51bGxcIiBzZWxlY3RlZCBkaXNhYmxlZCBoaWRkZW4+IHt7IHpvbmVFZGl0ICYmIHpvbmVFZGl0LmxheWVyID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpvbmVFZGl0LmxheWVyLm5hbWUgOiAnQ2hvb3NlIHR5cGUnfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgbGF5ZXIgb2YgbGF5ZXJzXCIgW3ZhbHVlXT1cImxheWVyLmlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBsYXllci5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibXQtMSBuZXctdHlwZS10ZXh0XCI+e3snb3IgYWRkIG5ldyB0eXBlIG9mIHpvbmUnIHwgdHJhbnNsYXRlIH19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIG5ldy10eXBlLWlucHV0XCIgZm9ybUNvbnRyb2xOYW1lPVwibmV3TGF5ZXJcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLUlmIEVkaXRpbmcgWm9uZSBwb3NzaWJpbGl0eSB0byBhc3NpZ24gaXQgdG8gbXVzZXVtIGl0aW5lcmFyeS0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIiAqbmdJZj1cInpvbmVFZGl0ICYmICF6b25lSXNNYXR0ZXJwb3J0Rmxvb3JcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0yIGNvbC1mb3JtLWxhYmVsXCI+e3sgJ011c2V1bSBJdGluZXJhcnknIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJjaGVja2JveC1hcHBseSBtdC0zXCIgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJpc011c2V1bVZpc2l0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgcm93XCIgKm5nSWY9XCIhem9uZUlzTWF0dGVycG9ydEZsb29yXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMiBjb2wtZm9ybS1sYWJlbFwiPnt7ICdNdWx0aXBsZSBGbG9vcnMnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJjaGVja2JveC1hcHBseSBtdC0zXCIgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJtdWx0aXBsZUZsb29yc1wiIFxyXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGFuZ2VNdWx0aXBsZUZsb29ycygpXCIgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMiBjb2wtZm9ybS1sYWJlbFwiPnt7J1N1cmZhY2UnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwic3VyZmFjZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgcm93XCIgKm5nSWY9XCIhem9uZUlzTWF0dGVycG9ydEZsb29yXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMiBjb2wtZm9ybS1sYWJlbFwiPnt7J1BhcmVudCB6b25lJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwicGFyZW50SURcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgem9uZSBvZiBwYXJlbnRab25lc1wiIFtuZ1ZhbHVlXT1cInpvbmUuaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHpvbmUubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIHJvd1wiIHN0eWxlPVwibWF4LWhlaWdodDogMjAwcHg7IG92ZXJmbG93OiBhdXRvO1wiICpuZ0lmPVwiIXpvbmVJc01hdHRlcnBvcnRGbG9vclwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTIgY29sLWZvcm0tbGFiZWxcIj57eydTY2FuIFBvaW50cycgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxwIGNsYXNzPVwiY29sLXNtLTJcIiAqbmdJZj1cInpvbmVFZGl0XCI+e3sgem9uZUVkaXQuc3dlZXBJRHMubGVuZ3RoIH19IHNjYW5zPC9wPiAtLT5cclxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiY29sXCIgKm5nSWY9XCJjaG9zZW5TY2Fuc09uUGxhbi5sZW5ndGggPT09IDAgJiYgY2hvc2VuU2NhbnMubGVuZ3RoID09PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3snTm8gc2NhbiBwb2ludHMgY2hvc2VuJyB8IHRyYW5zbGF0ZX19PC9wPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS01XCIgKm5nSWY9XCJjaG9zZW5TY2Fuc09uUGxhbiAmJiBjaG9zZW5TY2Fuc09uUGxhbi5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHA+e3sgY2hvc2VuU2NhbnNPblBsYW4ubGVuZ3RoIH19IHt7J3NjYW4gcG9pbnRzIGNob3NlbicgfCB0cmFuc2xhdGV9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzY2FuIG9mIGNob3NlblNjYW5zT25QbGFuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWUtMlwiPnt7IHNjYW4gfCBzbGljZTowOjggfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJvblJlbW92ZVNjYW5QbGFuKHNjYW4pXCIgW3N0eWxlLmN1cnNvcl09XCIncG9pbnRlcidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb25pZnlcIiBkYXRhLWljb249XCJtZGk6dHJhc2gtY2FuLW91dGxpbmVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNVwiICpuZ0lmPVwiY2Fyb3VzZWxJc1Zpc2libGUgJiYgY2hvc2VuU2NhbnMgJiYgY2hvc2VuU2NhbnMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwPnt7IGNob3NlblNjYW5zLmxlbmd0aCB9fSB7eydzY2FuIHBvaW50cyBjaG9zZW4nIHwgdHJhbnNsYXRlfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgc2NhbiBvZiBjaG9zZW5TY2Fuc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1lLTJcIj57eyBpbWFnZXMzNjBbc2Nhbl0uZmlsZW5hbWUgfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJvblJlbW92ZVNjYW5JbWFnZShzY2FuKVwiIFtzdHlsZS5jdXJzb3JdPVwiJ3BvaW50ZXInXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uaWZ5XCIgZGF0YS1pY29uPVwibWRpOnRyYXNoLWNhbi1vdXRsaW5lXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0zIG10LTNcIiAqbmdJZj1cIiF6b25lSXNNYXR0ZXJwb3J0Rmxvb3JcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtZS0yXCIgW2Rpc2FibGVkXT1cIiFwbGFuc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVQbGFuKClcIj57eydDaG9vc2Ugc2NhbiBwb2ludHMgb24gcGxhbicgfFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsIG1lLTJcIiAoY2xpY2spPVwidG9nZ2xlQ2Fyb3VzZWwoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmcm9tUGxhbiB8fCAhaW1hZ2VzMzYwIHx8aW1hZ2VzMzYwLmxlbmd0aCA9PT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eydDaG9vc2Ugc2NhbiBwb2ludHMgZnJvbSBnYWxsZXJ5JyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgbWUtMlwiIChjbGljayk9XCJvbkFkZEFsbCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZyb21QbGFuIHx8ICFpbWFnZXMzNjAgfHxpbWFnZXMzNjAubGVuZ3RoID09PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7J0FkZCBhbGwgc2NhbnMgb2YgdGhpcyBzcGFjZScgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snTm8gdmlzaWJsZSBzY2FuIHBvaW50cycgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJjaGVja2JveC1hcHBseSBtdC0zXCIgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJub1NjYW5Qb2ludHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNhcm91c2VsSXNWaXNpYmxlXCIgY2xhc3M9XCJtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICA8bGliLWNhcm91c2VsICpuZ0lmPVwiaW1hZ2VzMzYwICYmIGltYWdlczM2MC5sZW5ndGggPiAwXCIgW2ltYWdlc109XCJpbWFnZXMzNjBcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjdXJyZW50U2Nhbik9XCJjdXJyZW50U2NhblNob3dpbmc9JGV2ZW50XCI+PC9saWItY2Fyb3VzZWw+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtZS0yIG10LTNcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkFkZFNjYW4oKVwiPnt7J0FkZCB0byB6b25lJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IG5nYkRyb3Bkb3duIGNsYXNzPVwicm93IGQtaW5saW5lLWJsb2NrIG1lLTNcIiAqbmdJZj1cImZyb21QbGFuXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWxhYmVsLWZpbGUgcm91bmRlZC1waWxsXCIgaWQ9XCJkcm9wZG93bkJhc2ljMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5nYkRyb3Bkb3duVG9nZ2xlPnt7Y2hvc2VuUGxhbiA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNob3NlblBsYW4ubmFtZSA6ICgnQ2hvb3NlIFBsYW4nIHwgdHJhbnNsYXRlKSB9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd25NZW51IGFyaWEtbGFiZWxsZWRieT1cImRyb3Bkb3duQmFzaWMxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG5nYkRyb3Bkb3duSXRlbSAqbmdGb3I9XCJsZXQgcGxhbiBvZiBwbGFuc1wiIChjbGljayk9XCJvblBsYW5DbGljayhwbGFuKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXBsYW4uY2FsaWJyYXRpb25cIj57eyBwbGFuLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICBcclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtZS0yXCI+e3snU2F2ZScgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtZS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3snQ2FuY2VsJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZm9ybT5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImVkaXQtcGxhblwiICpuZ0lmPVwiZnJvbVBsYW5cIj5cclxuICAgICAgICA8bGliLXNlbGVjdGlvbiBjbGFzcz1cImNvbC1tZC04XCIgKG9uU2VsZWN0aW9uQ2hhbmdlZCk9XCJvblNlbGVjdGlvbkNoYW5nZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0Wm9uZVwiIG9uY29udGV4dG1lbnU9XCJyZXR1cm4gZmFsc2U7XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm92ZXJmbG93OiBoaWRkZW47d2lkdGg6MTAwJTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImhlaWdodDogNDAwcHg7IHdpZHRoOiAxMDAlO1wiIGlkPVwicGxhbkRpdlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2xpYi1zZWxlY3Rpb24+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNCBzY2FuVG9vbFwiICpuZ0lmPVwiYnV0dG9uRWxlbWVudHMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTQgZC1pbmxpbmUtYmxvY2tcIj5cclxuICAgICAgICAgICAgICAgIDxoMj57eydzZWxlY3RUb29sLnRpdGxlJyB8IHRyYW5zbGF0ZX19PC9oMj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm90aXBcIj57eydzZWxlY3RUb29sLnRpcCcgfCB0cmFuc2xhdGV9fS48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiIHN0eWxlPVwicGFkZGluZzowcHhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0b29sLWxhYmVsXCIgZm9yPVwic2NhblNpemVcIj57eydzZWxlY3RUb29sLnNpemUnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhbmdlXCIgY2xhc3M9XCJmb3JtLXJhbmdlXCIgbWluPVwiMC4wMDFcIiBtYXg9XCI1XCIgc3RlcD1cIjAuMDFcIiB2YWx1ZT1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cInNjYW5TaXplXCIgKGlucHV0KT1cIm9uQ2hhbmdlU2NhblNpemUoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi00XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSByb3VuZGVkLXBpbGxcIiAoY2xpY2spPVwib25TZWxlY3RBbGwoKVwiPnt7J3NlbGVjdFRvb2wuc2VsZWN0QWxsJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImJ1dHRvbnNJblNlbGVjdGlvbi5sZW5ndGggPiAwXCIgY2xhc3M9XCJlZGl0LXNlbGVjdGVkXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvb2wtbGFiZWxcIj57eydzZWxlY3RUb29sLmVkaXQnIHwgdHJhbnNsYXRlfX0gOiA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gcm91bmRlZC1waWxsIGJ0bi1wcmltYXJ5IG1zLTMgbWUtMlwiIChjbGljayk9XCJvblNlbGVjdGlvbkFkZCgpXCI+e3snQWRkJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgcm91bmRlZC1waWxsXCIgKGNsaWNrKT1cIm9uU2VsZWN0aW9uUmVtb3ZlKClcIj57eydSZW1vdmUnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=
535
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXpvbmUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy9zcmMvbGliL2NvbXBvbmVudHMvem9uZXMvYWRkLXpvbmUvYWRkLXpvbmUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy9zcmMvbGliL2NvbXBvbmVudHMvem9uZXMvYWRkLXpvbmUvYWRkLXpvbmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQTBCLFVBQVUsRUFBbUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRixPQUFPLEVBQzJGLGVBQWUsRUFDaEcseUJBQXlCLEVBQUUsdUJBQXVCLEVBQ2xFLE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxPQUFvQixNQUFNLFNBQVMsQ0FBQztBQUMzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBYSxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7OztBQU9oSixNQUFNLE9BQU8sZ0JBQWdCO0lBa0V6QixZQUNZLEVBQWUsRUFDZixXQUF3QixFQUN4QixZQUEwQixFQUMxQixXQUE0QixFQUM1QixpQkFBb0MsRUFDcEMsV0FBd0I7UUFMeEIsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUM1QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLGdCQUFXLEdB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QUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLFVBQVUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUMxRSxDQUFDO0lBQ04sQ0FBQztJQUNEOztPQUVHO0lBQ0gsc0JBQXNCO1FBQ2xCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNyQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDMUMsSUFBSSxXQUFXLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDdkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDM0M7U0FDSjthQUFNO1lBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDMUM7SUFDTCxDQUFDOzs2R0Fwb0JRLGdCQUFnQjtpR0FBaEIsZ0JBQWdCLGtXQ2Q3QiwybVZBc0xNOzJGRHhLTyxnQkFBZ0I7a0JBTDVCLFNBQVM7K0JBQ0ksY0FBYzsrT0FNZixRQUFRO3NCQUFoQixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUksV0FBVztzQkFBcEIsTUFBTTtnQkFFRSxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtQnVpbGRlciwgVmFsaWRhdG9ycywgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge1xyXG4gICAgWm9uZSwgUGxhbiwgTGF5ZXIsIE5hdmlnYXRpb24sIFpvbmVTZXJ2aWNlLCBMYXllclNlcnZpY2UsIEJhc2VVc2VyU2VydmljZSwgTmF2aWdhdGlvblNlcnZpY2UsIGdldE1ldGFGb3JJbWFnZSxcclxuICAgIFBsYW5TZXJ2aWNlLCBzaG93U2NhblBvaW50c09uUGxhbkluRGl2LCBnZXRDb2VmZmljaWVudHNGb3JJbWFnZVxyXG59IGZyb20gJ0BzbWFydGVycGxhbi9uZ3gtc21hcnRlcnBsYW4tY29yZSc7XHJcbmltcG9ydCBwYW56b29tLCB7IFBhblpvb20gfSBmcm9tICdwYW56b29tJztcclxuaW1wb3J0IHsgYnV0dG9uSXNDaG9zZW4sIGJ1dHRvbklzSW5TZWxlY3Rpb24sIGlzSW5Qb2x5Z29uLCBSZWN0YW5nbGUsIHJvdGF0ZSwgc2V0VmlzdWFsbHlTZWxlY3RlZCwgc3R5bGVCdXR0b24gfSBmcm9tICcuLi8uLi8uLi9oZWxwZXIuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbGliLWFkZC16b25lJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9hZGQtem9uZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9hZGQtem9uZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBZGRab25lQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgICBASW5wdXQoKSB6b25lRWRpdDogWm9uZTtcclxuXHJcbiAgICBASW5wdXQoKSBzcGFjZUlEOiBzdHJpbmc7XHJcblxyXG4gICAgQElucHV0KCkgaW1hZ2VzMzYwOiB7IHBhdGg6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZzsgfVtdO1xyXG5cclxuICAgIEBJbnB1dCgpIG5hdmlnYXRpb25JRHM6IHN0cmluZ1tdO1xyXG5cclxuICAgIEBJbnB1dCgpIHpvbmVzOiBab25lW107XHJcblxyXG4gICAgQElucHV0KCkgbmV3Wm9uZURhdGE6IGFueTtcclxuXHJcbiAgICBAT3V0cHV0KCkgdXBkYXRlZFpvbmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgICBASW5wdXQoKSBjaG9zZW5QbGFuOiBQbGFuO1xyXG5cclxuICAgIEBJbnB1dCgpIGlzTXVzZXVtVmlzaXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBASW5wdXQoKSBkZWZhdWx0Wm9uZTogWm9uZTtcclxuXHJcbiAgICBwYXJlbnRab25lczogWm9uZVtdID0gW107XHJcblxyXG4gICAgY2Fyb3VzZWxJc1Zpc2libGUgPSBmYWxzZTtcclxuXHJcbiAgICB6b25lRm9ybTogRm9ybUdyb3VwO1xyXG5cclxuICAgIGlzU3VibWl0dGVkID0gZmFsc2U7XHJcblxyXG4gICAgY3VycmVudFNjYW5TaG93aW5nOiBudW1iZXI7XHJcblxyXG4gICAgY2hvc2VuU2NhbnM6IG51bWJlcltdID0gW107XHJcblxyXG4gICAgbGF5ZXJzOiBMYXllcltdO1xyXG5cclxuICAgIHBsYW5zOiBQbGFuW107XHJcblxyXG4gICAgZnJvbVBsYW46IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwbGFuQ2FsaWJyYXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIGNob3NlblNjYW5zT25QbGFuOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIG5hdklEc1pvbmVFZGl0OiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIGN1cnJlbnRPcmdJZDogc3RyaW5nO1xyXG5cclxuICAgIHpvbmVJbml0aWFsTmF2Q291bnQgPSAwO1xyXG5cclxuICAgIC8qKiBwYW5ab29tIGVsZW1lbnQgZm9yIGFkZGluZyBzY2FucyAqL1xyXG4gICAgcGFuWm9vbTogUGFuWm9vbTtcclxuXHJcbiAgICAvKiogZGl2UGxhbiAodXNlIEJ5IHBhblpvb20pICovXHJcbiAgICBkaXZQbGFuOiBIVE1MRWxlbWVudDtcclxuXHJcbiAgICAvKiogYWxsIHNjYW4gYnV0dG9ucyBFbGVtZW50ICovXHJcbiAgICBidXR0b25FbGVtZW50czogSFRNTEJ1dHRvbkVsZW1lbnRbXSA9IFtdO1xyXG5cclxuICAgIC8qKiBTY2FuIGJ1dHRvbnMgdGhhdCBhcmUgaW4gdGhlIGN1cnJlbnQgc2VsZWN0aW9uICovXHJcbiAgICBidXR0b25zSW5TZWxlY3Rpb246IEhUTUxCdXR0b25FbGVtZW50W10gPSBbXTtcclxuXHJcbiAgICB6b25lSXNNYXR0ZXJwb3J0Rmxvb3IgPSBmYWxzZTtcclxuXHJcbiAgICBtdWx0aXBsZUZsb29ycyA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgICAgIHByaXZhdGUgem9uZVNlcnZpY2U6IFpvbmVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbGF5ZXJTZXJ2aWNlOiBMYXllclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogQmFzZVVzZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbmF2aWdhdGlvblNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcGxhblNlcnZpY2U6IFBsYW5TZXJ2aWNlLFxyXG4gICAgKSB7IH1cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnBhcmVudFpvbmVzID0gdGhpcy56b25lcy5maWx0ZXIoXHJcbiAgICAgICAgICAgICh6b25lKSA9PiB6b25lLmxheWVyICYmIHpvbmUubGF5ZXIubmFtZSA9PT0gXCJGTE9PUlwiLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5wYXJlbnRab25lcy51bnNoaWZ0KHRoaXMuZGVmYXVsdFpvbmUpO1xyXG4gICAgICAgIHRoaXMuaW5pdFpvbmVGb3JtKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMYXllcnMoKTtcclxuICAgICAgICB0aGlzLmdldFBsYW5zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkNoYW5nZXMoKSB7XHJcbiAgICAgICAgdGhpcy5pbml0Wm9uZUZvcm0oKTtcclxuICAgICAgICBpZiAodGhpcy5uZXdab25lRGF0YSkgdGhpcy5pbmlQbGFuRm9yRHJhdygpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHVwZGF0ZUxheWVycygpIHtcclxuICAgICAgICBjb25zdCBtaXNzaW9uID0gdGhpcy51c2VyU2VydmljZS5jdXJyZW50TWlzc2lvbih0aGlzLnNwYWNlSUQpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudE9yZ0lkID0gbWlzc2lvbi5vcmdhbmlzYXRpb25JRDtcclxuICAgICAgICBjb25zdCBsYXllcnMgPSBhd2FpdCB0aGlzLmxheWVyU2VydmljZS5nZXRMYXllckZvck9yZ2FuaXNhdGlvbihcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50T3JnSWQsXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBmaWx0ZXIgb3V0IGxheWVycyBjcmVhdGVkIGJ5IHRoZSBzeXN0ZW1cclxuICAgICAgICB0aGlzLmxheWVycyA9IGxheWVycy5maWx0ZXIoKGwpID0+IGwubmFtZSAhPT0gXCJCVUlMRElOR1wiICYmIGwubmFtZSAhPT0gXCJGTE9PUlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpbml0Wm9uZUZvcm0oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuem9uZUVkaXQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuem9uZUVkaXQubWV0YWRhdGEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1ldGFkYXRhID0gSlNPTi5wYXJzZSh0aGlzLnpvbmVFZGl0Lm1ldGFkYXRhKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuem9uZUlzTWF0dGVycG9ydEZsb29yID0gbWV0YWRhdGEuaGFzT3duUHJvcGVydHkoXCJtYXR0ZXJwb3J0Rmxvb3JTZXF1ZW5jZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBpc1ZpcnR1YWwgPSB0aGlzLnpvbmVTZXJ2aWNlLnpvbmVJc1ZpcnR1YWwodGhpcy56b25lRWRpdCk7XHJcbiAgICAgICAgICAgIGlmICghaXNWaXJ0dWFsKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWROYXZpZ2F0aW9ucygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuaXNNdXNldW1WaXNpdCA9IHRoaXMuem9uZUVkaXQuaXNNdXNldW1WaXNpdFpvbmVcclxuICAgICAgICAgICAgICAgID8gdGhpcy56b25lRWRpdC5pc011c2V1bVZpc2l0Wm9uZVxyXG4gICAgICAgICAgICAgICAgOiBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5tdWx0aXBsZUZsb29ycyA9IHRoaXMuem9uZUVkaXQuaXNNdWx0aXBsZUZsb29yWm9uZSA/IHRoaXMuem9uZUVkaXQuaXNNdXNldW1WaXNpdFpvbmVcclxuICAgICAgICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuem9uZUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgICAgICAgICAgIGlkOiB0aGlzLnpvbmVFZGl0LmlkLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogW3RoaXMuem9uZUVkaXQubmFtZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICAgICAgICAgIGxheWVySUQ6IHRoaXMuem9uZUVkaXQubGF5ZXIgPyB0aGlzLnpvbmVFZGl0LmxheWVyLmlkIDogbnVsbCxcclxuICAgICAgICAgICAgICAgIHN1cmZhY2U6IHRoaXMuem9uZUVkaXQuc3VyZmFjZSA/IHRoaXMuem9uZUVkaXQuc3VyZmFjZSA6IDAsXHJcbiAgICAgICAgICAgICAgICBwYXJlbnRJRDogdGhpcy56b25lRWRpdC5wYXJlbnRJRCxcclxuICAgICAgICAgICAgICAgIHBhcmVudDogdGhpcy56b25lRWRpdC5wYXJlbnQsXHJcbiAgICAgICAgICAgICAgICBuZXdMYXllcjogbnVsbCxcclxuICAgICAgICAgICAgICAgIGlzTXVzZXVtVmlzaXRab25lOiB0aGlzLmlzTXVzZXVtVmlzaXQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlTXVsdGlwbGVGbG9vcnMoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBtYWluWm9uZSA9IHRoaXMuZ2V0RGVmYXVsdFpvbmUoKTtcclxuICAgICAgICAgICAgdGhpcy56b25lRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogW1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV3Wm9uZURhdGEgPyB0aGlzLm5ld1pvbmVEYXRhLm5hbWUgOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICBsYXllcklEOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgc3VyZmFjZTogMCxcclxuICAgICAgICAgICAgICAgIHBhcmVudElEOiBtYWluWm9uZS5pZCxcclxuICAgICAgICAgICAgICAgIG5ld0xheWVyOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgaXNNdXNldW1WaXNpdFpvbmU6IHRoaXMuaXNNdXNldW1WaXNpdCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFBsYW5zKCkge1xyXG4gICAgICAgIHRoaXMucGxhbnMgPSBhd2FpdCB0aGlzLnBsYW5TZXJ2aWNlLmdldFNpbmdlZFBsYW5zRm9yU3BhY2UoXHJcbiAgICAgICAgICAgIHRoaXMuc3BhY2VJRCxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uU3VibWl0Wm9uZSgpIHtcclxuICAgICAgICB0aGlzLmlzU3VibWl0dGVkID0gdHJ1ZTtcclxuICAgICAgICBpZiAoIXRoaXMuem9uZUZvcm0udmFsaWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLnpvbmVGb3JtLmdldFJhd1ZhbHVlKCk7IC8vYmVjYXVzZSB3ZSBuZWVkIHZhbHVlcyBvZiBkaXNhYmxlcyBjb250cm9scyBhcyB3ZWxsXHJcbiAgICAgICAgaWYgKGZvcm1WYWx1ZS5uZXdMYXllcikge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNyZWF0ZUxheWVyKGZvcm1WYWx1ZS5uZXdMYXllcikudGhlbigobGF5ZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIGZvcm1WYWx1ZS5sYXllcklEID0gbGF5ZXIuaWQ7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWZvcm1WYWx1ZS5sYXllcklEICYmICF0aGlzLmlzTXVzZXVtVmlzaXQpIHtcclxuICAgICAgICAgICAgLy8gYnkgZGVmYXVsIGFzc2lnbiB0byBsYXllcjogXCJMb2NhbFwiIHdpdGggdXVpZDogZDYxMzhjNWQtNjkzOC00OWZhLWE1YzMtOWNlYmRlOTc1OTRiXHJcbiAgICAgICAgICAgIGZvcm1WYWx1ZS5sYXllcklEID0gXCJkNjEzOGM1ZC02OTM4LTQ5ZmEtYTVjMy05Y2ViZGU5NzU5NGJcIjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHpvbmVJbnB1dCA9IHtcclxuICAgICAgICAgICAgbmFtZTogZm9ybVZhbHVlLm5hbWUsXHJcbiAgICAgICAgICAgIHN1cmZhY2U6IGZvcm1WYWx1ZS5zdXJmYWNlLFxyXG4gICAgICAgICAgICBzcGFjZUlEOiB0aGlzLnNwYWNlSUQsXHJcbiAgICAgICAgICAgIGxheWVySUQ6IGZvcm1WYWx1ZS5sYXllcklELFxyXG4gICAgICAgICAgICBwYXJlbnRJRDogZm9ybVZhbHVlLnBhcmVudElELFxyXG4gICAgICAgICAgICBpc011c2V1bVZpc2l0Wm9uZTogdGhpcy5pc011c2V1bVZpc2l0LFxyXG4gICAgICAgICAgICBpc011bHRpcGxlRmxvb3Jab25lOiB0aGlzLm11bHRpcGxlRmxvb3JzLFxyXG4gICAgICAgICAgICBzd2VlcElEczogW10sXHJcbiAgICAgICAgfSBhcyBab25lO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLnpvbmVGb3JtID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5pc1N1Ym1pdHRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy56b25lRWRpdCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgem9uZVVwZGF0ZSA9IHpvbmVJbnB1dDtcclxuICAgICAgICAgICAgICAgIHpvbmVVcGRhdGUuc3dlZXBJRHMgPSB0aGlzLnpvbmVFZGl0LnN3ZWVwSURzO1xyXG4gICAgICAgICAgICAgICAgem9uZVVwZGF0ZS5pZCA9IGZvcm1WYWx1ZS5pZDtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2V0U3dlZXBzQW5kTm9kZUZvclpvbmVJbnB1dCh6b25lVXBkYXRlKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuem9uZVNlcnZpY2UudXBkYXRlWm9uZSh6b25lVXBkYXRlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuem9uZUVkaXQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVkWm9uZS5lbWl0KHpvbmVVcGRhdGUuaWQpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXRTd2VlcHNBbmROb2RlRm9yWm9uZUlucHV0KHpvbmVJbnB1dCk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnpvbmVTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAgICAgLmNyZWF0ZSh6b25lSW5wdXQpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oem9uZUNyZWF0ZWQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZWRab25lLmVtaXQoem9uZUNyZWF0ZWQuaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uQ2FuY2VsKCkge1xyXG4gICAgICAgIHRoaXMuaXNTdWJtaXR0ZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnpvbmVGb3JtID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNob3NlblNjYW5zT25QbGFuID0gW107XHJcbiAgICAgICAgdGhpcy5jaG9zZW5TY2FucyA9IFtdO1xyXG4gICAgICAgIHRoaXMudXBkYXRlZFpvbmUuZW1pdChmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG5hbWUoKTogQWJzdHJhY3RDb250cm9sIHtcclxuICAgICAgICByZXR1cm4gdGhpcy56b25lRm9ybS5nZXQoXCJuYW1lXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZUNhcm91c2VsKCkge1xyXG4gICAgICAgIHRoaXMuY2Fyb3VzZWxJc1Zpc2libGUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY2hvc2VuU2NhbnNPblBsYW4gPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGVQbGFuKCkge1xyXG4gICAgICAgIHRoaXMuZnJvbVBsYW4gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY2hvc2VuU2NhbnMgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBvbkFkZFNjYW4oKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNob3NlblNjYW5zLmluY2x1ZGVzKHRoaXMuY3VycmVudFNjYW5TaG93aW5nKSkge1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcImFkZGluZyBzY2FuXCIsIHRoaXMuY3VycmVudFNjYW5TaG93aW5nKTtcclxuICAgICAgICAgICAgdGhpcy5jaG9zZW5TY2Fucy5wdXNoKHRoaXMuY3VycmVudFNjYW5TaG93aW5nKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhbGVydChcIlNjYW4gYWxyZWFkeSBhZGRlZCFcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uUmVtb3ZlU2NhbkltYWdlKHNjYW46IGFueSkge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jaG9zZW5TY2Fucy5pbmRleE9mKHNjYW4pO1xyXG4gICAgICAgIHRoaXMuY2hvc2VuU2NhbnMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBvblJlbW92ZVNjYW5QbGFuKHNjYW46IGFueSkge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jaG9zZW5TY2Fuc09uUGxhbi5pbmRleE9mKHNjYW4pO1xyXG4gICAgICAgIHRoaXMuY2hvc2VuU2NhbnNPblBsYW4uc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzZXRTd2VlcHNBbmROb2RlRm9yWm9uZUlucHV0KHpvbmVJbnB1dDogWm9uZSkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5jaG9zZW5TY2Fucy5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgIHRoaXMuY2hvc2VuU2NhbnMubGVuZ3RoICE9PSB0aGlzLnpvbmVJbml0aWFsTmF2Q291bnQgJiZcclxuICAgICAgICAgICAgIXRoaXMuZnJvbVBsYW5cclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgLy8gaWYgd2UgY2hvc2Ugc2NhbnMgZnJvbSB0aGUgY2Fyb3VzZWxcclxuICAgICAgICAgICAgY29uc3Qgc3dlZXBJRHM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuY2hvc2VuU2NhbnMubWFwKGFzeW5jIChzY2FuKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbWFnZVV1aWQgPSB0aGlzLmltYWdlczM2MFtzY2FuXS5maWxlbmFtZS5zcGxpdChcIl9cIilbMF07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzd2VlcElEID0gdGhpcy5uYXZpZ2F0aW9uSURzLmZpbmQoKG5hdikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuYXYuaW5jbHVkZXMoaW1hZ2VVdWlkKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHN3ZWVwSUQpIHtcclxuICAgICAgICAgICAgICAgICAgICBzd2VlcElEcy5wdXNoKHN3ZWVwSUQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgem9uZUlucHV0LnN3ZWVwSURzID0gc3dlZXBJRHM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gd2UgYXJlIG5vdCBjb21pbmcgZnJvbSBnYWxsZXJ5IGNob2ljZVxyXG4gICAgICAgICAgICBpZiAodGhpcy5jaG9zZW5TY2Fuc09uUGxhbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB6b25lSW5wdXQuc3dlZXBJRHMgPSB0aGlzLmNob3NlblNjYW5zT25QbGFuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoem9uZUlucHV0LnN3ZWVwSURzICYmIHpvbmVJbnB1dC5zd2VlcElEcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5hdkZvclN3ZWVwID1cclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZ2V0TmF2aWdhdGlvbnNGb3JNYXR0ZXJwb3J0SURGb3JTcGFjZShcclxuICAgICAgICAgICAgICAgICAgICB6b25lSW5wdXQuc3dlZXBJRHNbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFjZUlELFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgem9uZUlucHV0Lm5vZGVJRHMgPSBbbmF2Rm9yU3dlZXBbMF0ubm9kZUlEXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY3JlYXRlTGF5ZXIobmFtZTogc3RyaW5nKTogUHJvbWlzZTxMYXllcj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxheWVyU2VydmljZS5jcmVhdGVMYXllckZvck9yZ2FuaXNhdGlvbihcclxuICAgICAgICAgICAgbmFtZSxcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50T3JnSWQsXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBsb2FkTmF2aWdhdGlvbnMoKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBpZiAodGhpcy56b25lRWRpdC5zd2VlcElEcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuem9uZUluaXRpYWxOYXZDb3VudCA9IHRoaXMuem9uZUVkaXQuc3dlZXBJRHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBuYXZMaXN0OiBudW1iZXJbXSA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBzY2Fuc1pvbmVFZGl0OiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgICAgICAgIHRoaXMuem9uZUVkaXQuc3dlZXBJRHMubWFwKGFzeW5jIChzd2VlcElEOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBzY2Fuc1pvbmVFZGl0LnB1c2goc3dlZXBJRCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmltYWdlczM2MC5maW5kSW5kZXgoKGltKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbS5maWxlbmFtZS5pbmNsdWRlcyhzd2VlcElELnNsaWNlKDAsIDgpKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hdkxpc3QucHVzaChpbmRleCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hvc2VuU2NhbnMgPSBuYXZMaXN0O1xyXG4gICAgICAgICAgICB0aGlzLm5hdklEc1pvbmVFZGl0ID0gc2NhbnNab25lRWRpdDtcclxuICAgICAgICAgICAgdGhpcy5jaG9zZW5TY2Fuc09uUGxhbiA9IHNjYW5zWm9uZUVkaXQ7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uUGxhbkNsaWNrKHBsYW4gPSB0aGlzLmNob3NlblBsYW4pIHtcclxuICAgICAgICBpZiAoIXRoaXMubXVsdGlwbGVGbG9vcnMpIHtcclxuICAgICAgICAgICAgdGhpcy5jaG9zZW5TY2Fuc09uUGxhbiA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNob3NlblBsYW4gPSBwbGFuO1xyXG4gICAgICAgIHRoaXMuY2xlYXJEaXZQbGFuKCk7XHJcbiAgICAgICAgdGhpcy5hZGRTY2FuUG9pbnRzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYWRkU2NhblBvaW50cygpIHtcclxuICAgICAgICB0aGlzLmRpdlBsYW4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI3BsYW5EaXZcIikgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3Qgem9uZU9mUGxhbiA9IGF3YWl0IHRoaXMuem9uZVNlcnZpY2UuZ2V0Wm9uZShcclxuICAgICAgICAgICAgdGhpcy5jaG9zZW5QbGFuLnpvbmVJRCxcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IG5hdmlnYXRpb25zID0gYXdhaXQgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXROYXZpZ2F0aW9uc0ZvclpvbmUoXHJcbiAgICAgICAgICAgIHpvbmVPZlBsYW4sXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAodGhpcy5uZXdab25lRGF0YSkgYXdhaXQgdGhpcy5zZXRTY2FuQnlEcmF3KG5hdmlnYXRpb25zKTtcclxuICAgICAgICB0aGlzLmJ1dHRvbkVsZW1lbnRzID0gYXdhaXQgc2hvd1NjYW5Qb2ludHNPblBsYW5JbkRpdihcclxuICAgICAgICAgICAgdGhpcy5jaG9zZW5QbGFuLFxyXG4gICAgICAgICAgICB0aGlzLmRpdlBsYW4sXHJcbiAgICAgICAgICAgIG5hdmlnYXRpb25zLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRoaXMuYnV0dG9uRWxlbWVudHMpIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5uYXZJRHNab25lRWRpdC5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hdklEc1pvbmVFZGl0LmluY2x1ZGVzKGVsZW1lbnQuaWQpIC8vIGJ1dHRvbiBpZCBpcyB0aGUgbmF2aWdhdGlvbihub3QgZ3JhcGghKSBpZHNcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBzdHlsZUJ1dHRvbihlbGVtZW50LCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5jaG9zZW5TY2Fuc09uUGxhbi5pbmNsdWRlcyhlbGVtZW50LmlkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hvc2VuU2NhbnNPblBsYW4ucHVzaChlbGVtZW50LmlkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHN0eWxlQnV0dG9uKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChldmVudCkgPT5cclxuICAgICAgICAgICAgICAgIHRoaXMub25CdXR0b25TY2FuQ2xpY2tlZChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnBhblpvb20gPSBwYW56b29tKHRoaXMuZGl2UGxhbiwge1xyXG4gICAgICAgICAgICBib3VuZHM6IHRydWUsXHJcbiAgICAgICAgICAgIGJvdW5kc1BhZGRpbmc6IDAsXHJcbiAgICAgICAgICAgIG1heFpvb206IDMuNSxcclxuICAgICAgICAgICAgYmVmb3JlTW91c2VEb3duKGU6IE1vdXNlRXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgZS5idXR0b24gPT09IDJcclxuICAgICAgICAgICAgICAgICk7IC8qKiBJZ25vcmUgZXZlbnQgZm9yIHJpZ2h0IGNsaWNrICh1c2UgZm9yIHNlbGVjdGluZykgKi9cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZW4gYSBidXR0b24gcmVwcmVzZW50aW5nIGEgc2NhbiBpcyBjbGlja2VkXHJcbiAgICAgKiBAcGFyYW0gYnV0dG9uXHJcbiAgICAgKi9cclxuICAgIG9uQnV0dG9uU2NhbkNsaWNrZWQoYnV0dG9uOiBIVE1MRWxlbWVudCkge1xyXG4gICAgICAgIGJ1dHRvbi5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSBidXR0b25Jc0Nob3NlbihidXR0b24pXHJcbiAgICAgICAgICAgID8gYHVybChcImh0dHBzOi8vYXBpLmljb25pZnkuZGVzaWduL21kaTpjbG9zZS1jaXJjbGUtb3V0bGluZS5zdmc/Y29sb3I9cmVkJmhlaWdodD0xNyZ3aWR0aD0xN1wiKWBcclxuICAgICAgICAgICAgOiBgdXJsKFwiaHR0cHM6Ly9hcGkuaWNvbmlmeS5kZXNpZ24vbWRpOmFkanVzdC5zdmc/Y29sb3I9Z3JlZW4maGVpZ2h0PTE3JndpZHRoPTE3XCIpYDtcclxuICAgICAgICBpZiAoYnV0dG9uSXNDaG9zZW4oYnV0dG9uKSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2hvc2VuU2NhbnNPblBsYW4uaW5jbHVkZXMoYnV0dG9uLmlkKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaG9zZW5TY2Fuc09uUGxhbi5wdXNoKGJ1dHRvbi5pZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2hvc2VuU2NhbnNPblBsYW4uaW5jbHVkZXMoYnV0dG9uLmlkKSkge1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuY2hvc2VuU2NhbnNPblBsYW4uaW5kZXhPZihidXR0b24uaWQpO1xyXG4gICAgICAgICAgICB0aGlzLmNob3NlblNjYW5zT25QbGFuLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgY2xlYXJEaXZQbGFuKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmRpdlBsYW4pIHRoaXMuZGl2UGxhbi5pbm5lckhUTUwgPSBcIlwiO1xyXG4gICAgfVxyXG5cclxuICAgIGluaVBsYW5Gb3JEcmF3KCkge1xyXG4gICAgICAgIHRoaXMudG9nZ2xlUGxhbigpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm9uUGxhbkNsaWNrKCk7XHJcbiAgICAgICAgfSwgNTAwKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogRnVuY3Rpb24gaWYgd2UgYXJlIGNvbWluZyBmb3Igc3ZnIGVkaXRvciB3b3JrZmxvdyAqL1xyXG4gICAgc2V0U2NhbkJ5RHJhdyhuYXZpZ2F0aW9uczogYW55W10pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcmVjdCA9IHtcclxuICAgICAgICAgICAgICAgIHdpZHRoOiB0aGlzLm5ld1pvbmVEYXRhLndpZHRoLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLm5ld1pvbmVEYXRhLmhlaWdodCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29uc3QgaW1nID0gYXdhaXQgZ2V0TWV0YUZvckltYWdlKHRoaXMuY2hvc2VuUGxhbi5maWxlcGF0aCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgY29lZmZYLCBjb2VmZlkgfSA9IGdldENvZWZmaWNpZW50c0ZvckltYWdlKGltZywgcmVjdCk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBkcmF3ID0gdGhpcy5uZXdab25lRGF0YS5lbGVtZW50cztcclxuXHJcbiAgICAgICAgICAgIGRyYXcubWFwKGFzeW5jIChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAoZWxlbWVudC5ub2RlTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJyZWN0XCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2V0U2NhbkluUmVjdChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZWZmWCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZWZmWSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0aW9ucyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlbGxpcHNlXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2V0U2NhbkluQ2lyY2xlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29lZmZYLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29lZmZZLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRpb25zLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInBhdGhcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXRTY2FuSW5Qb2x5Z29uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29lZmZYLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29lZmZZLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRpb25zLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2V0U2NhbkluUmVjdChjb2VmZlg6IG51bWJlciwgY29lZmZZOiBudW1iZXIsXHJcbiAgICAgICAgZWxlbWVudDogeyBhbmdsZTogYW55OyBjeDogYW55OyBjeTogYW55OyB4OiBudW1iZXI7IHdpZHRoOiBhbnk7IHk6IG51bWJlcjsgaGVpZ2h0OiBhbnk7IH0sIG5hdmlnYXRpb25zOiBhbnlbXSkge1xyXG4gICAgICAgIGNvbnN0IGNhbGlicmFnZSA9IEpTT04ucGFyc2UodGhpcy5jaG9zZW5QbGFuLmNhbGlicmF0aW9uKTtcclxuICAgICAgICBuYXZpZ2F0aW9ucy5tYXAoKG5hdmlnYXRpb24pID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBKU09OLnBhcnNlKG5hdmlnYXRpb24ucG9zaXRpb24pO1xyXG4gICAgICAgICAgICBsZXQgbmF2WCA9IChjYWxpYnJhZ2Uub2Zmc2V0WCArIHBvc2l0aW9uLnggKiBjYWxpYnJhZ2UueCkgLyBjb2VmZlg7XHJcbiAgICAgICAgICAgIGxldCBuYXZZID0gKGNhbGlicmFnZS5vZmZzZXRZICsgcG9zaXRpb24ueiAqIGNhbGlicmFnZS55KSAvIGNvZWZmWTtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQuYW5nbGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJvdGF0ZVBvcyA9IHJvdGF0ZShcclxuICAgICAgICAgICAgICAgICAgICB7IHg6IG5hdlgsIHk6IG5hdlkgfSxcclxuICAgICAgICAgICAgICAgICAgICB7IHg6IGVsZW1lbnQuY3gsIHk6IGVsZW1lbnQuY3kgfSxcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmFuZ2xlLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIG5hdlggPSByb3RhdGVQb3MueDtcclxuICAgICAgICAgICAgICAgIG5hdlkgPSByb3RhdGVQb3MueTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICogVE9ETyBjYWxjdWxlciBsYSByb3RhdGlvbiBkdSByZWN0YW5nbGVcclxuICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIG5hdlggPiBlbGVtZW50LnggJiZcclxuICAgICAgICAgICAgICAgIG5hdlggPCBlbGVtZW50LnggKyBlbGVtZW50LndpZHRoICYmXHJcbiAgICAgICAgICAgICAgICBuYXZZID4gZWxlbWVudC55ICYmXHJcbiAgICAgICAgICAgICAgICBuYXZZIDwgZWxlbWVudC55ICsgZWxlbWVudC5oZWlnaHQgJiZcclxuICAgICAgICAgICAgICAgICF0aGlzLm5hdklEc1pvbmVFZGl0LmluY2x1ZGVzKG5hdmlnYXRpb24uaWQpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uYXZJRHNab25lRWRpdC5wdXNoKG5hdmlnYXRpb24uaWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9IC8vIEVPXHJcblxyXG4gICAgYXN5bmMgc2V0U2NhbkluQ2lyY2xlKGNvZWZmWDogbnVtYmVyLCBjb2VmZlk6IG51bWJlcixcclxuICAgICAgICBlbGVtZW50OiB7IGFuZ2xlOiBhbnk7IGN4OiBudW1iZXI7IGN5OiBudW1iZXI7IHJ4OiBudW1iZXI7IHJ5OiBudW1iZXI7IH0sIG5hdmlnYXRpb25zOiBOYXZpZ2F0aW9uW10pIHtcclxuICAgICAgICBjb25zdCBjYWxpYnJhZ2UgPSBKU09OLnBhcnNlKHRoaXMuY2hvc2VuUGxhbi5jYWxpYnJhdGlvbik7XHJcbiAgICAgICAgbmF2aWdhdGlvbnMubWFwKG5hdmlnYXRpb24gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IEpTT04ucGFyc2UobmF2aWdhdGlvbi5wb3NpdGlvbik7XHJcbiAgICAgICAgICAgIGxldCBuYXZYID0gKGNhbGlicmFnZS5vZmZzZXRYICsgcG9zaXRpb24ueCAqIGNhbGlicmFnZS54KSAvIGNvZWZmWDtcclxuICAgICAgICAgICAgbGV0IG5hdlkgPSAoY2FsaWJyYWdlLm9mZnNldFkgKyBwb3NpdGlvbi56ICogY2FsaWJyYWdlLnkpIC8gY29lZmZZO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5hbmdsZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgcm90YXRlUG9zID0gcm90YXRlKFxyXG4gICAgICAgICAgICAgICAgICAgIHsgeDogbmF2WCwgeTogbmF2WSB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgeDogZWxlbWVudC5jeCwgeTogZWxlbWVudC5jeSB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuYW5nbGUsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgbmF2WCA9IHJvdGF0ZVBvcy54O1xyXG4gICAgICAgICAgICAgICAgbmF2WSA9IHJvdGF0ZVBvcy55O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZVggPVxyXG4gICAgICAgICAgICAgICAgTWF0aC5wb3cobmF2WCAtIGVsZW1lbnQuY3gsIDIpIC8gTWF0aC5wb3coZWxlbWVudC5yeCwgMik7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlWSA9XHJcbiAgICAgICAgICAgICAgICBNYXRoLnBvdyhuYXZZIC0gZWxlbWVudC5jeSwgMikgLyBNYXRoLnBvdyhlbGVtZW50LnJ5LCAyKTtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdmFsdWVYICsgdmFsdWVZO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0IDw9IDEgJiYgIXRoaXMubmF2SURzWm9uZUVkaXQuaW5jbHVkZXMobmF2aWdhdGlvbi5pZCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmF2SURzWm9uZUVkaXQucHVzaChuYXZpZ2F0aW9uLmlkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSAvLyBFT1xyXG5cclxuICAgIGFzeW5jIHNldFNjYW5JblBvbHlnb24oY29lZmZYOiBudW1iZXIsIGNvZWZmWTogbnVtYmVyLCBlbGVtZW50OiB7IHNlZ0xpc3Q6IGFueTsgfSwgbmF2aWdhdGlvbnM6IGFueVtdKSB7XHJcbiAgICAgICAgY29uc3QgY2FsaWJyYWdlID0gSlNPTi5wYXJzZSh0aGlzLmNob3NlblBsYW4uY2FsaWJyYXRpb24pO1xyXG4gICAgICAgIG5hdmlnYXRpb25zLm1hcChhc3luYyAobmF2aWdhdGlvbjogeyBwb3NpdGlvbjogc3RyaW5nOyBpZDogc3RyaW5nOyB9KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gSlNPTi5wYXJzZShuYXZpZ2F0aW9uLnBvc2l0aW9uKTtcclxuICAgICAgICAgICAgY29uc3QgcCA9IHtcclxuICAgICAgICAgICAgICAgIHg6IChjYWxpYnJhZ2Uub2Zmc2V0WCArIHBvc2l0aW9uLnggKiBjYWxpYnJhZ2UueCkgLyBjb2VmZlgsXHJcbiAgICAgICAgICAgICAgICB5OiAoY2FsaWJyYWdlLm9mZnNldFkgKyBwb3NpdGlvbi56ICogY2FsaWJyYWdlLnkpIC8gY29lZmZZLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAvLyBpZiAoZWxlbWVudC5hbmdsZSkge1xyXG4gICAgICAgICAgICAvLyAgICAgcCA9IHRoaXMucm90YXRlKFxyXG4gICAgICAgICAgICAvLyAgICAgICAgIHAsXHJcbiAgICAgICAgICAgIC8vICAgICAgICAgeyB4OiBlbGVtZW50LmN4LCB5OiBlbGVtZW50LmN5IH0sXHJcbiAgICAgICAgICAgIC8vICAgICAgICAgZWxlbWVudC5hbmdsZSxcclxuICAgICAgICAgICAgLy8gICAgICk7XHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgaXNJblBvbHlnb24ocCwgZWxlbWVudC5zZWdMaXN0KSAmJlxyXG4gICAgICAgICAgICAgICAgIXRoaXMubmF2SURzWm9uZUVkaXQuaW5jbHVkZXMobmF2aWdhdGlvbi5pZClcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hdklEc1pvbmVFZGl0LnB1c2gobmF2aWdhdGlvbi5pZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmlnZ2VyIGVhY2ggYnkgdGhlIHNlbGVjdGlvbkNvbXBvbmVudCB3aGVuIHNlbGVjdGlvbiBjaGFuZ2VcclxuICAgICAqIFVwZGF0ZSB0aGUgY3VycmVudCBzZWxlY3RlZCBzY2FuIGJ1dHRvbnNcclxuICAgICAqIEBwYXJhbSBzZWxlY3Rpb24gbmV3IHNlbGVjdGlvblxyXG4gICAgICovXHJcbiAgICBvblNlbGVjdGlvbkNoYW5nZWQoc2VsZWN0aW9uOiBSZWN0YW5nbGUpIHtcclxuICAgICAgICBjb25zdCB1bnNlbGVjdGVkQnV0dG9uczogSFRNTEJ1dHRvbkVsZW1lbnRbXSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGVkQnV0dG9ucyA9IFtdO1xyXG5cclxuICAgICAgICAvKiogRm9yIGVhY2ggYnV0dG9uLCBkZWNpZGUgd2hldGhlciB3aWxsIGJlIGFkZCB0byBzZWxlY3RlZCBsaXN0IG9yIHVuc2VsZWN0ZWQgbGlzdCAqL1xyXG4gICAgICAgIGZvciAoY29uc3QgYnV0dG9uIG9mIHRoaXMuYnV0dG9uRWxlbWVudHMpIHtcclxuICAgICAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IGJ1dHRvbklzSW5TZWxlY3Rpb24oYnV0dG9uLCBzZWxlY3Rpb24pO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5idXR0b25zSW5TZWxlY3Rpb24uaW5jbHVkZXMoYnV0dG9uKSkge1xyXG4gICAgICAgICAgICAgICAgLyoqIElmIHRoZSBidXR0b24gaXMgYWxyZWFkeSBpbiB0aGUgc2VsZWN0ZWQgbGlzdCwgd2UgY2hlY2sgaWYgaXQgc2hvdWxkIGJlIHVuc2VsZWN0ICovXHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzU2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB1bnNlbGVjdGVkQnV0dG9ucy5wdXNoKGJ1dHRvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNTZWxlY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgbmV3U2VsZWN0ZWRCdXR0b25zLnB1c2goYnV0dG9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqIFZpc3VhbGx5IFVwZGF0ZSB1bnNlbGVjdGVkIGxpc3QgKi9cclxuICAgICAgICBmb3IgKGNvbnN0IGJ1dHRvbiBvZiB1bnNlbGVjdGVkQnV0dG9ucykge1xyXG4gICAgICAgICAgICBzZXRWaXN1YWxseVNlbGVjdGVkKGJ1dHRvbiwgZmFsc2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqIFZpc3VhbGx5IFVwZGF0ZSBzZWxlY3RlZCBsaXN0ICovXHJcbiAgICAgICAgZm9yIChjb25zdCBidXR0b24gb2YgbmV3U2VsZWN0ZWRCdXR0b25zKSB7XHJcbiAgICAgICAgICAgIHNldFZpc3VhbGx5U2VsZWN0ZWQoYnV0dG9uLCB0cnVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qKiBSZW1vdmUgIHVuc2VsZWN0ZWQgbGlzdCAqL1xyXG4gICAgICAgIHRoaXMuYnV0dG9uc0luU2VsZWN0aW9uID0gdGhpcy5idXR0b25zSW5TZWxlY3Rpb24uZmlsdGVyKChidXR0b24pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuICF1bnNlbGVjdGVkQnV0dG9ucy5pbmNsdWRlcyhidXR0b24pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8qKiBBZGQgbmV3IHNlbGVjdGVkIGJ1dHRvbnMgKi9cclxuICAgICAgICB0aGlzLmJ1dHRvbnNJblNlbGVjdGlvbiA9IFtcclxuICAgICAgICAgICAgLi4udGhpcy5idXR0b25zSW5TZWxlY3Rpb24sXHJcbiAgICAgICAgICAgIC4uLm5ld1NlbGVjdGVkQnV0dG9ucyxcclxuICAgICAgICBdO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmlnZ2VyIHdoZW4gdGhlIHVzZXIgY2xpY2sgdG8gYWRkIHRoZSBzZWxlY3RlZCBzY2Fuc1xyXG4gICAgICovXHJcbiAgICBvblNlbGVjdGlvbkFkZCgpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGJ1dHRvbiBvZiB0aGlzLmJ1dHRvbnNJblNlbGVjdGlvbikge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2hvc2VuU2NhbnNPblBsYW4uaW5jbHVkZXMoYnV0dG9uLmlkKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbkJ1dHRvblNjYW5DbGlja2VkKGJ1dHRvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2VkKHsgdG9wOiAwLCBsZWZ0OiAwLCB3aWR0aDogMCwgaGVpZ2h0OiAwIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJpZ2dlciB3aGVuIHRoZSB1c2VyIGNsaWNrIHRvIHJlbW92ZSB0aGUgc2VsZWN0ZWQgc2NhbnNcclxuICAgICAqL1xyXG4gICAgb25TZWxlY3Rpb25SZW1vdmUoKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBidXR0b24gb2YgdGhpcy5idXR0b25zSW5TZWxlY3Rpb24pIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY2hvc2VuU2NhbnNPblBsYW4uaW5jbHVkZXMoYnV0dG9uLmlkKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbkJ1dHRvblNjYW5DbGlja2VkKGJ1dHRvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZWQoeyB0b3A6IDAsIGxlZnQ6IDAsIHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmlnZ2VyIHdoZW4gdGhlIHVzZXIgY2xpY2sgdG8gc2VsZWN0IGFsbCBzY2Fuc1xyXG4gICAgICovXHJcbiAgICBvblNlbGVjdEFsbCgpIHtcclxuICAgICAgICB0aGlzLmJ1dHRvbnNJblNlbGVjdGlvbiA9IFsuLi50aGlzLmJ1dHRvbkVsZW1lbnRzXTtcclxuICAgICAgICBmb3IgKGNvbnN0IGJ1dHRvbiBvZiB0aGlzLmJ1dHRvbnNJblNlbGVjdGlvbikge1xyXG4gICAgICAgICAgICBzZXRWaXN1YWxseVNlbGVjdGVkKGJ1dHRvbiwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJpZ2dlciB3aGVuIHRoZSB1c2VyIGNoYW5nZSB0aGUgc2l6ZSBvZiB0aGUgc2NhbiBwb2ludHNcclxuICAgICAqIEBwYXJhbSBldmVudFxyXG4gICAgICovXHJcbiAgICBvbkNoYW5nZVNjYW5TaXplKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICBjb25zdCBmYWN0b3IgPSBldmVudC50YXJnZXQudmFsdWU7XHJcblxyXG4gICAgICAgIGZvciAoY29uc3QgYnV0dG9uIG9mIHRoaXMuYnV0dG9uRWxlbWVudHMpIHtcclxuICAgICAgICAgICAgYnV0dG9uLnN0eWxlLnRyYW5zZm9ybSA9IGBzY2FsZSgke2ZhY3Rvcn0pYDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGFsbCBzd2VlcHMgb2YgdGhlIHNwYWNlXHJcbiAgICAgKi9cclxuICAgIG9uQWRkQWxsKCkge1xyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRab25lID0gdGhpcy5nZXREZWZhdWx0Wm9uZSgpO1xyXG4gICAgICAgIGlmIChkZWZhdWx0Wm9uZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNob3NlblNjYW5zT25QbGFuID0gZGVmYXVsdFpvbmUuc3dlZXBJRHM7XHJcbiAgICAgICAgICAgIHRoaXMuem9uZUZvcm0uZ2V0KFwicGFyZW50SURcIikuc2V0VmFsdWUoZGVmYXVsdFpvbmUuaWQpO1xyXG4gICAgICAgICAgICB0aGlzLnpvbmVGb3JtLmdldChcInBhcmVudElEXCIpLmRpc2FibGUoKTtcclxuICAgICAgICAgICAgdGhpcy5tdWx0aXBsZUZsb29ycyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldERlZmF1bHRab25lKCk6IFpvbmUge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnpvbmVzLmZpbmQoXHJcbiAgICAgICAgICAgICh6b25lKSA9PiB6b25lLmxheWVyICYmIHpvbmUubGF5ZXIubmFtZSA9PT0gXCJCVUlMRElOR1wiICYmIHpvbmUuc3dlZXBJRHMsXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogTXVsdGlwbGUgZmxvb3JzIFxyXG4gICAgICovXHJcbiAgICBvbkNoYW5nZU11bHRpcGxlRmxvb3JzKCkge1xyXG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlRmxvb3JzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRab25lID0gdGhpcy5nZXREZWZhdWx0Wm9uZSgpO1xyXG4gICAgICAgICAgICBpZiAoZGVmYXVsdFpvbmUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuem9uZUZvcm0uZ2V0KFwicGFyZW50SURcIikuc2V0VmFsdWUoZGVmYXVsdFpvbmUuaWQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy56b25lRm9ybS5nZXQoXCJwYXJlbnRJRFwiKS5kaXNhYmxlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnpvbmVGb3JtLmdldChcInBhcmVudElEXCIpLmVuYWJsZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuIiwiPGRpdiBjbGFzcz1cIm1haW4tY29udGFpbmVyXCIgKm5nSWY9XCJ6b25lRm9ybVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC03XCI+XHJcbiAgICAgICAgPGZvcm0gKG5nU3VibWl0KT1cIm9uU3VibWl0Wm9uZSgpXCIgW2Zvcm1Hcm91cF09XCJ6b25lRm9ybVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0yIGNvbC1mb3JtLWxhYmVsXCI+e3snTmFtZScgfCB0cmFuc2xhdGV9fSAqPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7J0EgbmFtZSBpcyByZXF1aXJlZCcgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIHJvd1wiICpuZ0lmPVwiIWlzTXVzZXVtVmlzaXQgJiYgIXpvbmVJc01hdHRlcnBvcnRGbG9vclwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTIgY29sLWZvcm0tbGFiZWxcIj57eydUeXBlIG9mIHpvbmUnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJsYXllcklEXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJudWxsXCIgc2VsZWN0ZWQgZGlzYWJsZWQgaGlkZGVuPiB7eyB6b25lRWRpdCAmJiB6b25lRWRpdC5sYXllciA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b25lRWRpdC5sYXllci5uYW1lIDogJ0Nob29zZSB0eXBlJ319PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGxheWVyIG9mIGxheWVyc1wiIFt2YWx1ZV09XCJsYXllci5pZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbGF5ZXIubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm10LTEgbmV3LXR5cGUtdGV4dFwiPnt7J29yIGFkZCBuZXcgdHlwZSBvZiB6b25lJyB8IHRyYW5zbGF0ZSB9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBuZXctdHlwZS1pbnB1dFwiIGZvcm1Db250cm9sTmFtZT1cIm5ld0xheWVyXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS1JZiBFZGl0aW5nIFpvbmUgcG9zc2liaWxpdHkgdG8gYXNzaWduIGl0IHRvIG11c2V1bSBpdGluZXJhcnktLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgcm93XCIgKm5nSWY9XCJ6b25lRWRpdCAmJiAhem9uZUlzTWF0dGVycG9ydEZsb29yXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMiBjb2wtZm9ybS1sYWJlbFwiPnt7ICdNdXNldW0gSXRpbmVyYXJ5JyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiY2hlY2tib3gtYXBwbHkgbXQtM1wiIHR5cGU9XCJjaGVja2JveFwiIFsobmdNb2RlbCldPVwiaXNNdXNldW1WaXNpdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIHJvd1wiICpuZ0lmPVwiIXpvbmVJc01hdHRlcnBvcnRGbG9vclwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTIgY29sLWZvcm0tbGFiZWxcIj57eyAnTXVsdGlwbGUgRmxvb3JzJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiY2hlY2tib3gtYXBwbHkgbXQtM1wiIHR5cGU9XCJjaGVja2JveFwiIFsobmdNb2RlbCldPVwibXVsdGlwbGVGbG9vcnNcIiBcclxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2hhbmdlTXVsdGlwbGVGbG9vcnMoKVwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTIgY29sLWZvcm0tbGFiZWxcIj57eydTdXJmYWNlJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInN1cmZhY2VcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIHJvd1wiICpuZ0lmPVwiIXpvbmVJc01hdHRlcnBvcnRGbG9vclwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTIgY29sLWZvcm0tbGFiZWxcIj57eydQYXJlbnQgem9uZScgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInBhcmVudElEXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHpvbmUgb2YgcGFyZW50Wm9uZXNcIiBbbmdWYWx1ZV09XCJ6b25lLmlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB6b25lLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIiBzdHlsZT1cIm1heC1oZWlnaHQ6IDIwMHB4OyBvdmVyZmxvdzogYXV0bztcIiAqbmdJZj1cIiF6b25lSXNNYXR0ZXJwb3J0Rmxvb3JcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0yIGNvbC1mb3JtLWxhYmVsXCI+e3snU2NhbiBQb2ludHMnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8cCBjbGFzcz1cImNvbC1zbS0yXCIgKm5nSWY9XCJ6b25lRWRpdFwiPnt7IHpvbmVFZGl0LnN3ZWVwSURzLmxlbmd0aCB9fSBzY2FuczwvcD4gLS0+XHJcbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImNvbFwiICpuZ0lmPVwiY2hvc2VuU2NhbnNPblBsYW4ubGVuZ3RoID09PSAwICYmIGNob3NlblNjYW5zLmxlbmd0aCA9PT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7J05vIHNjYW4gcG9pbnRzIGNob3NlbicgfCB0cmFuc2xhdGV9fTwvcD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNVwiICpuZ0lmPVwiY2hvc2VuU2NhbnNPblBsYW4gJiYgY2hvc2VuU2NhbnNPblBsYW4ubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwPnt7IGNob3NlblNjYW5zT25QbGFuLmxlbmd0aCB9fSB7eydzY2FuIHBvaW50cyBjaG9zZW4nIHwgdHJhbnNsYXRlfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgc2NhbiBvZiBjaG9zZW5TY2Fuc09uUGxhblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1lLTJcIj57eyBzY2FuIHwgc2xpY2U6MDo4IH19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwib25SZW1vdmVTY2FuUGxhbihzY2FuKVwiIFtzdHlsZS5jdXJzb3JdPVwiJ3BvaW50ZXInXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uaWZ5XCIgZGF0YS1pY29uPVwibWRpOnRyYXNoLWNhbi1vdXRsaW5lXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTVcIiAqbmdJZj1cImNhcm91c2VsSXNWaXNpYmxlICYmIGNob3NlblNjYW5zICYmIGNob3NlblNjYW5zLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cD57eyBjaG9zZW5TY2Fucy5sZW5ndGggfX0ge3snc2NhbiBwb2ludHMgY2hvc2VuJyB8IHRyYW5zbGF0ZX19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHNjYW4gb2YgY2hvc2VuU2NhbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtZS0yXCI+e3sgaW1hZ2VzMzYwW3NjYW5dLmZpbGVuYW1lIH19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwib25SZW1vdmVTY2FuSW1hZ2Uoc2NhbilcIiBbc3R5bGUuY3Vyc29yXT1cIidwb2ludGVyJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbmlmeVwiIGRhdGEtaWNvbj1cIm1kaTp0cmFzaC1jYW4tb3V0bGluZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMyBtdC0zXCIgKm5nSWY9XCIhem9uZUlzTWF0dGVycG9ydEZsb29yXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgbWUtMlwiIFtkaXNhYmxlZF09XCIhcGxhbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlUGxhbigpXCI+e3snQ2hvb3NlIHNjYW4gcG9pbnRzIG9uIHBsYW4nIHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtZS0yXCIgKGNsaWNrKT1cInRvZ2dsZUNhcm91c2VsKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZnJvbVBsYW4gfHwgIWltYWdlczM2MCB8fGltYWdlczM2MC5sZW5ndGggPT09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3snQ2hvb3NlIHNjYW4gcG9pbnRzIGZyb20gZ2FsbGVyeScgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsIG1lLTJcIiAoY2xpY2spPVwib25BZGRBbGwoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmcm9tUGxhbiB8fCAhaW1hZ2VzMzYwIHx8aW1hZ2VzMzYwLmxlbmd0aCA9PT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eydBZGQgYWxsIHNjYW5zIG9mIHRoaXMgc3BhY2UnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cIm1iLTMgcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPnt7J05vIHZpc2libGUgc2NhbiBwb2ludHMnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiY2hlY2tib3gtYXBwbHkgbXQtM1wiIHR5cGU9XCJjaGVja2JveFwiIFsobmdNb2RlbCldPVwibm9TY2FuUG9pbnRzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjYXJvdXNlbElzVmlzaWJsZVwiIGNsYXNzPVwibWItMlwiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1jYXJvdXNlbCAqbmdJZj1cImltYWdlczM2MCAmJiBpbWFnZXMzNjAubGVuZ3RoID4gMFwiIFtpbWFnZXNdPVwiaW1hZ2VzMzYwXCJcclxuICAgICAgICAgICAgICAgICAgICAoY3VycmVudFNjYW4pPVwiY3VycmVudFNjYW5TaG93aW5nPSRldmVudFwiPjwvbGliLWNhcm91c2VsPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgbWUtMiBtdC0zXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25BZGRTY2FuKClcIj57eydBZGQgdG8gem9uZScgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93biBjbGFzcz1cInJvdyBkLWlubGluZS1ibG9jayBtZS0zXCIgKm5nSWY9XCJmcm9tUGxhblwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1sYWJlbC1maWxlIHJvdW5kZWQtcGlsbFwiIGlkPVwiZHJvcGRvd25CYXNpYzFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZ2JEcm9wZG93blRvZ2dsZT57e2Nob3NlblBsYW4gP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5QbGFuLm5hbWUgOiAoJ0Nob29zZSBQbGFuJyB8IHRyYW5zbGF0ZSkgfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkRyb3Bkb3duTWVudSBhcmlhLWxhYmVsbGVkYnk9XCJkcm9wZG93bkJhc2ljMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBuZ2JEcm9wZG93bkl0ZW0gKm5nRm9yPVwibGV0IHBsYW4gb2YgcGxhbnNcIiAoY2xpY2spPVwib25QbGFuQ2xpY2socGxhbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFwbGFuLmNhbGlicmF0aW9uXCI+e3sgcGxhbi5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgbWUtMlwiPnt7J1NhdmUnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkNhbmNlbCgpXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgbWUtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7J0NhbmNlbCcgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Zvcm0+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJlZGl0LXBsYW5cIiAqbmdJZj1cImZyb21QbGFuXCI+XHJcbiAgICAgICAgPGxpYi1zZWxlY3Rpb24gY2xhc3M9XCJjb2wtbWQtOFwiIChvblNlbGVjdGlvbkNoYW5nZWQpPVwib25TZWxlY3Rpb25DaGFuZ2VkKCRldmVudClcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdFpvbmVcIiBvbmNvbnRleHRtZW51PVwicmV0dXJuIGZhbHNlO1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJvdmVyZmxvdzogaGlkZGVuO3dpZHRoOjEwMCU7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJoZWlnaHQ6IDQwMHB4OyB3aWR0aDogMTAwJTtcIiBpZD1cInBsYW5EaXZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9saWItc2VsZWN0aW9uPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTQgc2NhblRvb2xcIiAqbmdJZj1cImJ1dHRvbkVsZW1lbnRzLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi00IGQtaW5saW5lLWJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICA8aDI+e3snc2VsZWN0VG9vbC50aXRsZScgfCB0cmFuc2xhdGV9fTwvaDI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvdGlwXCI+e3snc2VsZWN0VG9vbC50aXAnIHwgdHJhbnNsYXRlfX0uPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi00XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTNcIiBzdHlsZT1cInBhZGRpbmc6MHB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidG9vbC1sYWJlbFwiIGZvcj1cInNjYW5TaXplXCI+e3snc2VsZWN0VG9vbC5zaXplJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYW5nZVwiIGNsYXNzPVwiZm9ybS1yYW5nZVwiIG1pbj1cIjAuMDAxXCIgbWF4PVwiNVwiIHN0ZXA9XCIwLjAxXCIgdmFsdWU9XCIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJzY2FuU2l6ZVwiIChpbnB1dCk9XCJvbkNoYW5nZVNjYW5TaXplKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItNFwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgcm91bmRlZC1waWxsXCIgKGNsaWNrKT1cIm9uU2VsZWN0QWxsKClcIj57eydzZWxlY3RUb29sLnNlbGVjdEFsbCcgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJidXR0b25zSW5TZWxlY3Rpb24ubGVuZ3RoID4gMFwiIGNsYXNzPVwiZWRpdC1zZWxlY3RlZFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b29sLWxhYmVsXCI+e3snc2VsZWN0VG9vbC5lZGl0JyB8IHRyYW5zbGF0ZX19IDogPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIHJvdW5kZWQtcGlsbCBidG4tcHJpbWFyeSBtcy0zIG1lLTJcIiAoY2xpY2spPVwib25TZWxlY3Rpb25BZGQoKVwiPnt7J0FkZCcgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHJvdW5kZWQtcGlsbFwiIChjbGljayk9XCJvblNlbGVjdGlvblJlbW92ZSgpXCI+e3snUmVtb3ZlJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+Il19
@@ -1916,7 +1916,9 @@ class AddZoneComponent {
1916
1916
  return __awaiter(this, void 0, void 0, function* () {
1917
1917
  const mission = this.userService.currentMission(this.spaceID);
1918
1918
  this.currentOrgId = mission.organisationID;
1919
- this.layers = yield this.layerService.getLayerForOrganisation(this.currentOrgId);
1919
+ const layers = yield this.layerService.getLayerForOrganisation(this.currentOrgId);
1920
+ // filter out layers created by the system
1921
+ this.layers = layers.filter((l) => l.name !== "BUILDING" && l.name !== "FLOOR");
1920
1922
  });
1921
1923
  }
1922
1924
  initZoneForm() {