@eqproject/eqp-dynamic-module 2.4.40 → 2.4.41

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.
@@ -41,6 +41,7 @@ export class DynamicModuleFieldFixComponent {
41
41
  }
42
42
  }
43
43
  ngOnInit() {
44
+ console.log("dynamic-module-field", this.field);
44
45
  this.configList.values = this.record[this.field.Name];
45
46
  this.configList.showTitle = true;
46
47
  this.configList.defaultListActions = new DynamicModuleListFormRecordActionsDefault();
@@ -181,4 +182,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
181
182
  type: ViewChildren,
182
183
  args: ['listInnerFormRecords']
183
184
  }] } });
184
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1tb2R1bGUtZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXFwLWR5bmFtaWMtbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9wcml2YXRlL2R5bmFtaWMtbW9kdWxlLWZpZWxkLWZpeC9keW5hbWljLW1vZHVsZS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZHluYW1pYy1tb2R1bGUtZmllbGQtZml4L2R5bmFtaWMtbW9kdWxlLWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQTBCLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHaEksT0FBTyxFQUFhLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9GLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRXhGLE9BQU8sRUFBRSx5Q0FBeUMsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQ3RILE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBV3RELE1BQU0sT0FBTyw4QkFBOEI7SUFpQ3pDLFlBQ1UsTUFBaUI7UUFBakIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQTVCbEIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUd6QixpQkFBWSxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ2hFLFFBQUcsR0FBMkIsSUFBSSxZQUFZLEVBQVksQ0FBQztRQUdyRSxlQUFVLEdBQTRCLElBQUksdUJBQXVCLEVBQUUsQ0FBQztRQUNwRSxrQkFBYSxH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QixVQUFVLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEQsQ0FBQzs7NEhBNUpRLDhCQUE4QjtnSEFBOUIsOEJBQThCLDJtQkNsQjNDLHEzSkEyRWM7NEZEekRELDhCQUE4QjtrQkFMMUMsU0FBUzsrQkFDRSwwQkFBMEI7Z0dBTTNCLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFFSSxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLEdBQUc7c0JBQVosTUFBTTtnQkFpQitDLHFCQUFxQjtzQkFBMUUsU0FBUzt1QkFBQyx1QkFBdUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBR3JCLGFBQWE7c0JBQTNDLFlBQVk7dUJBQUMsZUFBZTtnQkFDUyxvQkFBb0I7c0JBQXpELFlBQVk7dUJBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgUXVlcnlMaXN0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBJQmFzZUZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9pQmFzZUZpZWxkQ29tcG9uZW50LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEJhc2VGaWVsZCwgRmllbGRUeXBlRW51bSwgRGF0YUdldHRlclR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2Jhc2VGaWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVMaXN0Q29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVMaXN0Q29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgRm9ybSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9mb3JtLm1vZGVsJztcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQnO1xyXG5pbXBvcnQgeyBSZWNvcmQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvcmVjb3JkLm1vZGVsJztcclxuaW1wb3J0IHsgTGlzdEZvcm1SZWNvcmRDb21wb25lbnQgfSBmcm9tICcuLi9mb3JtLXJlY29yZHMvbGlzdC1mb3JtLXJlY29yZC9saXN0LWZvcm0tcmVjb3JkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEVuZFBvaW50Q29uZmlndXJhdGlvbiB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9lbmRQb2ludENvbmZpZ3VyYXRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBEeW5BdHRhY2htZW50IH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2R5bkF0dGFjaG1lbnQnO1xyXG5pbXBvcnQgeyBEeW5hbWljTG9hZGVyRGlyZWN0aXZlRGF0YSwgZXZlbnRPdXQgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmVzL2R5bmFtaWMtbG9hZGVyL2R5bmFtaWMtbG9hZGVyLmRpcmVjdGl2ZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2R5bmFtaWMtbW9kdWxlLWZpZWxkLWZpeCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2R5bmFtaWMtbW9kdWxlLWZpZWxkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9keW5hbWljLW1vZHVsZS1maWVsZC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEeW5hbWljTW9kdWxlRmllbGRGaXhDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIElCYXNlRmllbGRDb21wb25lbnQge1xyXG5cclxuICBASW5wdXQoKSBlbmRQb2ludENvbmZpZ3VyYXRpb246IEVuZFBvaW50Q29uZmlndXJhdGlvbjtcclxuICBASW5wdXQoKSBmaWVsZDogQmFzZUZpZWxkO1xyXG4gIEBJbnB1dCgpIGZvcm06IEZvcm07XHJcbiAgQElucHV0KCkgcmVjb3JkOiBSZWNvcmQ7XHJcbiAgQElucHV0KCkgaW5Db25maWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBRdWVyeUVkaXRvckNvbXBvbmVudDogRHluYW1pY0xvYWRlckRpcmVjdGl2ZURhdGE7IC8vIEwnaW50ZXJvIGNvbXBvbmVudGUgcXVlcnkgRWRpdG9yXHJcblxyXG4gIEBPdXRwdXQoKSByZWNvcmRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcbiAgQE91dHB1dCgpIG91dDogRXZlbnRFbWl0dGVyPGV2ZW50T3V0PiA9IG5ldyBFdmVudEVtaXR0ZXI8ZXZlbnRPdXQ+KCk7XHJcblxyXG5cclxuICBjb25maWdMaXN0OiBEeW5hbWljTW9kdWxlTGlzdENvbmZpZyA9IG5ldyBEeW5hbWljTW9kdWxlTGlzdENvbmZpZygpO1xyXG4gIEZpZWxkVHlwZUVudW0gPSBGaWVsZFR5cGVFbnVtO1xyXG4gIERhdGFHZXR0ZXJUeXBlRW51bSA9IERhdGFHZXR0ZXJUeXBlRW51bTtcclxuICBEQkdldHRlclZhbHVlOiBhbnkgPSBudWxsO1xyXG4gIERCR2V0dGVyTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgREJHZXR0ZXJFeGFjdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIERCR2V0dGVySGF2ZVF1ZXN0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyNyZWdpb24gUHJvcHJpZXTDoCBwZXIgYWdnaXVuZ2VyZS9tb2RpZmljYXJlIGkgcmVjb3JkIGRpIHVuYSBmb3JtIGRpIGRldHRhZ2xpb1xyXG4gIHNlbGVjdGVkSW5uZXJGb3JtOiBGb3JtO1xyXG4gIHNlbGVjdGVkSW5uZXJGb3JtUmVjb3JkOiBSZWNvcmQ7XHJcbiAgaW5kZXhJbm5lckZvcm1SZWNvcmQ6IG51bWJlcjtcclxuICBvbmx5Vmlld0lubmVyRm9ybVJlY29yZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGRpYWxvZ0lubmVyRm9ybVJlY29yZFJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIEBWaWV3Q2hpbGQoJ2RpYWxvZ0lubmVyRm9ybVJlY29yZCcsIHsgc3RhdGljOiB0cnVlIH0pIGRpYWxvZ0lubmVyRm9ybVJlY29yZDogVGVtcGxhdGVSZWY8YW55PjtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgQFZpZXdDaGlsZHJlbihcImZpZWxkVGVtcGxhdGVcIikgZmllbGRUZW1wbGF0ZTogUXVlcnlMaXN0PER5bmFtaWNNb2R1bGVGaWVsZEZpeENvbXBvbmVudD47XHJcbiAgQFZpZXdDaGlsZHJlbignbGlzdElubmVyRm9ybVJlY29yZHMnKSBsaXN0SW5uZXJGb3JtUmVjb3JkczogUXVlcnlMaXN0PExpc3RGb3JtUmVjb3JkQ29tcG9uZW50PjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nXHJcbiAgKSB7IH1cclxuXHJcblxyXG4gIHVwZGF0ZUZpZWxkKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZmllbGRUZW1wbGF0ZSAmJiB0aGlzLmZpZWxkVGVtcGxhdGUubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmZpZWxkVGVtcGxhdGUuZm9yRWFjaChmID0+IGYudXBkYXRlRmllbGQoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY29uZmlnTGlzdC52YWx1ZXMgPSB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdXHJcbiAgICB0aGlzLmNvbmZpZ0xpc3Quc2hvd1RpdGxlID0gdHJ1ZTtcclxuICAgIHRoaXMuY29uZmlnTGlzdC5kZWZhdWx0TGlzdEFjdGlvbnMgPSBuZXcgRHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQoKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludm9jYXRvIGFsIGNhbWJpbyBkZWwgdmFsb3JlIGRpIG9nbmkgcHJvcHJpZXTDoCBkZWxsJ29nZ2V0dG8gcmVjb3JkLlxyXG4gICAqIFNlcnZlIGFkIGFnZ2lvcm5hcmUgaWwgdmFsb3JlIGRpIHR1dHRpIGkgY2FtcGkgY2hlIGhhbm5vIHVuYSBmb3JtdWxhLlxyXG4gICAqL1xyXG4gIG9uUmVjb3JkQ2hhbmdlKCkge1xyXG4gICAgdGhpcy5yZWNvcmRDaGFuZ2UuZW1pdCh0aGlzLnJlY29yZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJlY3VwZXJhcmUgdW5hIElubmVyRm9ybSBhIHBhcnRpcmUgZGFsIEZpZWxkIGNoZSBsYSByYXBwcmVzZW50YS5cclxuICAgKiBAcGFyYW0gZmllbGQgQ2FtcG8gYSBwYXJ0aXJlIGRhbCBxdWFsZSBzaSB2dW9sZSByZWN1cGVyYXJlIGxhIElubmVyRm9ybS5cclxuICAgKiBAcmV0dXJucyBSZXN0aXR1aXNjZSB1biBvZ2dldHRvIGRpIHRpcG8gRm9ybS5cclxuICAgKi9cclxuICBnZXRJbm5lckZvcm1Gcm9tRmllbGQoZmllbGQ6IEJhc2VGaWVsZCk6IEZvcm0ge1xyXG4gICAgaWYgKHRoaXMuZm9ybS5Jbm5lckZvcm1zICYmIHRoaXMuZm9ybS5Jbm5lckZvcm1zLmZpbmQoZiA9PiBmLk5hbWUgPT0gZmllbGQuTGFiZWwpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmZvcm0uSW5uZXJGb3Jtcy5maW5kKGYgPT4gZi5OYW1lID09IGZpZWxkLkxhYmVsKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIE1ldG9kbyBwZXIgYXByaXJlIHVuIGRpYWxvZyBpbiBjdWkgYWdnaXVuZ2VyZS9tb2RpZmljYXJlL3Zpc3VhbGl6emFyZSB1biByZWNvcmQgYXBwYXJ0ZW5lbnRlXHJcbiAqIGEgdW5hIGZvcm0gZGkgZGV0dGFnbGlvLlxyXG4gKiBAcGFyYW0gcmVjb3JkIEV2ZW50byBkaSBvdXRwdXQgZGVsIGNvbXBvbmVudGUgbGlzdC1mb3JtLXJlY29yZCwgY29udGllbmUgaWwgcmVjb3JkIHNlbGV6aW9uYXRvIGUgdW4gYm9vbGVubyBjaGUgaW5kaWNhIFxyXG4gKiBzZSBsJ3V0ZW50ZSB2dW9sZSBtb2RpZmljYXJlIG8gdmlzdWFsaXp6YXJlIGwnZWxlbWVudG8gc2VsZXppb25hdG8uXHJcbiAqIEBwYXJhbSBpbm5lckZvcm0gQ29udGllbmUgbGEgRm9ybSBkaSBkZXR0YWdsaW8gZGFsbGEgcXVhbGUgw6ggc3RhdG8gcmljaGllc3RvIGlsIHJlY29yZC5cclxuICovXHJcbiAgb25BZGRWaWV3RWRpdElubmVyRm9ybVJlY29yZChyZWNvcmQ6IHsgcmVjb3JkOiBSZWNvcmQsIG9ubHlWaWV3OiBib29sZWFuIH0sIGZpZWxkOiBCYXNlRmllbGQpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJbm5lckZvcm0gPSB0aGlzLmdldElubmVyRm9ybUZyb21GaWVsZChmaWVsZCk7XHJcbiAgICBpZiAocmVjb3JkID09IG51bGwpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZElubmVyRm9ybVJlY29yZCA9IG5ldyBSZWNvcmQoKTtcclxuICAgICAgdGhpcy5pbmRleElubmVyRm9ybVJlY29yZCA9IG51bGw7XHJcbiAgICAgIHRoaXMub25seVZpZXdJbm5lckZvcm1SZWNvcmQgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbm5lckZvcm1SZWNvcmQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHJlY29yZC5yZWNvcmQpKTtcclxuICAgICAgdGhpcy5pbmRleElubmVyRm9ybVJlY29yZCA9IHRoaXMucmVjb3JkW2ZpZWxkLk5hbWVdLmluZGV4T2YocmVjb3JkKTtcclxuICAgICAgdGhpcy5vbmx5Vmlld0lubmVyRm9ybVJlY29yZCA9IHJlY29yZC5vbmx5VmlldztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRpYWxvZ0lubmVyRm9ybVJlY29yZFJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dJbm5lckZvcm1SZWNvcmQsIHtcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgd2lkdGg6ICc3NSUnXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBpbnZvY2F0byBhbCBzYWx2YXRhZ2dpbyBvIGFsbGEgY2hpdXN1cmEgZGVsIGRpYWxvZyBkaSBhZ2dpdW50YS9tb2RpZmljYS92aXN1YWxpenphemlvbmVcclxuICAgKiBkaSB1biByZWNvcmQgZGkgdW5hIGZvcm0gZGkgZGV0dGFnbGlvLlxyXG4gICAqIEBwYXJhbSByZWNvcmQgT2dnZXR0byByZXN0aXR1aXRvIGRhbCBjb21wb25lbnRlIGFkZC1mb3JtLWZpZWxkIChxdWVzdG8gcXVpKSBjb250ZW5lbnRlIGlsIFJlY29yZCBcclxuICAgKiBhZ2dpb3JuYXRvIGRhbGwndXRlbnRlLiBTZSBudWxsIGFsbG9yYSBsJ3V0ZW50ZSBub24gaGEgbW9kaWZpY2F0byBudWxsYSBlIGhhIGNoaXVzbyBpbCBkaWFsb2cuXHJcbiAgICovXHJcbiAgb25TYXZlSW5uZXJGb3JtUmVjb3JkKHJlY29yZDogUmVjb3JkKSB7XHJcbiAgICBpZiAocmVjb3JkICE9IG51bGwpIHtcclxuICAgICAgY29uc3QgYXJyYXlOYW1lOiBzdHJpbmcgPSB0aGlzLnNlbGVjdGVkSW5uZXJGb3JtLk5hbWUuc3BsaXQoJyAnKS5qb2luKCdfJyk7XHJcbiAgICAgIGlmICh0aGlzLmluZGV4SW5uZXJGb3JtUmVjb3JkICE9IG51bGwgJiYgdGhpcy5pbmRleElubmVyRm9ybVJlY29yZCA+PSAwKSB7XHJcbiAgICAgICAgdGhpcy5yZWNvcmRbYXJyYXlOYW1lXVt0aGlzLmluZGV4SW5uZXJGb3JtUmVjb3JkXSA9IHJlY29yZDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoIXRoaXMucmVjb3JkW2FycmF5TmFtZV0pIHtcclxuICAgICAgICAgIHRoaXMucmVjb3JkW2FycmF5TmFtZV0gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yZWNvcmRbYXJyYXlOYW1lXS5wdXNoKHJlY29yZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuZGlhbG9nSW5uZXJGb3JtUmVjb3JkUmVmLmNsb3NlKCk7XHJcblxyXG4gICAgLy8gUmljYXJpY28gbGEgdGFiZWxsYSBkZWkgcmVjb3JkIHBlciB2aXN1YWxpenphcmUgbGUgbW9kaWZpY2hlIGZhdHRlIGRhbGwndXRlbnRlLlxyXG4gICAgaWYgKHRoaXMubGlzdElubmVyRm9ybVJlY29yZHMgJiYgdGhpcy5saXN0SW5uZXJGb3JtUmVjb3Jkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMubGlzdElubmVyRm9ybVJlY29yZHMuZm9yRWFjaChsaXN0ID0+IHtcclxuICAgICAgICBpZiAobGlzdCAmJiBsaXN0LnRhYmxlUmVjb3Jkcykge1xyXG4gICAgICAgICAgbGlzdC50YWJsZVJlY29yZHMucmVsb2FkRGF0YXRhYmxlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFBhc3NvIGwnaW1tYWdpbmUgZGlzZWduYXRhIGFsIGxpdmVsbG8gc3VwZXJpb3JlXHJcbiAgb25JbWFnZURyYXcoZXZlbnQ6IER5bkF0dGFjaG1lbnQpe1xyXG4gICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IGV2ZW50O1xyXG4gICAgdGhpcy5yZWNvcmRDaGFuZ2UuZW1pdCh0aGlzLnJlY29yZCk7XHJcbiAgfVxyXG5cclxuICAgIC8vIFBhc3NvIGwnaW1tYWdpbmUgZGlzZWduYXRhIGFsIGxpdmVsbG8gc3VwZXJpb3JlXHJcbiAgICBvbkltYWdlTWFyayhldmVudDogRHluQXR0YWNobWVudCl7XHJcbiAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBldmVudDtcclxuICAgICAgdGhpcy5yZWNvcmRDaGFuZ2UuZW1pdCh0aGlzLnJlY29yZCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25FeHRlcm5hbENvbXBvbmVudE91dChldjogZXZlbnRPdXQpe1xyXG4gICAgICB0aGlzLm91dC5lbWl0KGV2KTtcclxuICAgIH1cclxuXHJcbiAgICBvblNlbGVjdGVkVmFsdWUodmFsdWU6IGFueSl7XHJcbiAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSB2YWx1ZVswXTtcclxuICAgICAgdGhpcy5EQkdldHRlclZhbHVlID0gdmFsdWVbMF07XHJcbiAgICAgIHRoaXMuREJHZXR0ZXJFeGFjdCA9IHZhbHVlWzFdO1xyXG4gICAgICBpZiAodGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZS5vcGVuZWRGaWVsZHMuZmluZCh4ID0+IHguUXVlcnlQcm9wZXJ0eVZhbHVlID09ICc/JykgIT0gbnVsbCl7IHRoaXMuREJHZXR0ZXJIYXZlUXVlc3Rpb25zID0gdHJ1ZTsgfVxyXG4gICAgICBpZiAodmFsdWVbMF0gPT0gbnVsbCl7IHRoaXMuREJHZXR0ZXJMb2FkZWQgPSBmYWxzZTsgfVxyXG4gICAgfVxyXG5cclxuICAgIERCR2V0dGVyQ2hhbmdlKCl7XHJcbiAgICAgIHRoaXMuREJHZXR0ZXJWYWx1ZSA9IG51bGw7XHJcbiAgICAgIHRoaXMuREJHZXR0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5EQkdldHRlckV4YWN0ID0gdHJ1ZTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7IHRoaXMuREJHZXR0ZXJMb2FkZWQgPSB0cnVlOyB9LDEwMCk7XHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdiAqbmdJZj1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgPT0gRGF0YUdldHRlclR5cGVFbnVtWydNYW51YWxlJ10gfHwgZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9PSBEYXRhR2V0dGVyVHlwZUVudW1bJ0Zvcm11bGEnXVwiPiBcclxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmllbGRzVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBmaWVsZDogZmllbGQsIHJlY29yZDogcmVjb3JkIH1cIj48L25nLWNvbnRhaW5lcj5cclxuPC9kaXY+XHJcblxyXG48ZGl2ICpuZ0lmPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9PSBEYXRhR2V0dGVyVHlwZUVudW1bJ0RhIGRhdGFiYXNlJ11cIj4gXHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXggZGJnZXR0ZXJmaWVsZFwiICpuZ0lmPVwiREJHZXR0ZXJWYWx1ZSA9PSBudWxsICYmICFEQkdldHRlckxvYWRlZFwiPlxyXG4gICAgICAgIDxzcGFuPnt7ZmllbGQuTmFtZX19OiA8L3NwYW4+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJEQkdldHRlckNoYW5nZSgpXCI+UmlzcG9uZGk8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkYmdldHRlciBjbGFzcz1cImZsZXhcIiBbKHJlY29yZCldPVwicmVjb3JkXCIgW2ZpZWxkXT1cImZpZWxkXCIgW2hpZGRlbl09XCJEQkdldHRlclZhbHVlICE9IG51bGxcIiBbUXVlcnlFZGl0b3JDb21wb25lbnRdPVwiUXVlcnlFZGl0b3JDb21wb25lbnRcIiBbaW5Db25maWddPVwiaW5Db25maWdcIiAob3V0KT1cIm9uRXh0ZXJuYWxDb21wb25lbnRPdXQoJGV2ZW50KVwiIChzZWxlY3RlZFZhbHVlKT1cIm9uU2VsZWN0ZWRWYWx1ZSgkZXZlbnQpXCIgKm5nSWY9XCJEQkdldHRlckxvYWRlZFwiPjwvZGJnZXR0ZXI+XHJcbiAgICBcclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTExXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmllbGRzVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBmaWVsZDogZmllbGQsIHJlY29yZDogcmVjb3JkIH1cIiAqbmdJZj1cIkRCR2V0dGVyVmFsdWUgIT0gbnVsbFwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMSBmbGV4XCIgKm5nSWY9XCIhREJHZXR0ZXJFeGFjdCB8fCBEQkdldHRlckhhdmVRdWVzdGlvbnNcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4td2FybmluZ1wiIChjbGljayk9XCJEQkdldHRlckNoYW5nZSgpXCIgKm5nSWY9XCJEQkdldHRlclZhbHVlICE9IG51bGxcIj5Nb2RpZmljYTwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPG5nLXRlbXBsYXRlICNmaWVsZHNUZW1wbGF0ZT5cclxuXHJcbiAgICA8dGV4dC1maWVsZC10ZW1wbGF0ZSAjZmllbGRUZW1wbGF0ZSAqbmdJZj1cImZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtWydDYW1wbyBkaSB0ZXN0byddXCJcclxuICAgIFttYXRUb29sdGlwXT1cImZpZWxkLlRvb2x0aXBcIiBbKHJlY29yZCldPVwicmVjb3JkXCIgW2ZpZWxkXT1cImZpZWxkXCIgKHJlY29yZENoYW5nZSk9XCJvblJlY29yZENoYW5nZSgpXCI+XHJcbiAgICA8L3RleHQtZmllbGQtdGVtcGxhdGU+XHJcblxyXG4gICAgPHRleHRhcmVhLWZpZWxkLXRlbXBsYXRlICNmaWVsZFRlbXBsYXRlICpuZ0lmPVwiZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bJ0FyZWEgZGkgdGVzdG8nXVwiXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiZmllbGQuVG9vbHRpcFwiIFsocmVjb3JkKV09XCJyZWNvcmRcIiBbZmllbGRdPVwiZmllbGRcIiAocmVjb3JkQ2hhbmdlKT1cIm9uUmVjb3JkQ2hhbmdlKClcIj5cclxuICAgIDwvdGV4dGFyZWEtZmllbGQtdGVtcGxhdGU+XHJcblxyXG4gICAgPGJvb2xlYW4tZmllbGQtdGVtcGxhdGUgI2ZpZWxkVGVtcGxhdGUgKm5nSWY9XCJmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVsnQm9vbGVhbm8nXVwiXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiZmllbGQuVG9vbHRpcFwiIFsocmVjb3JkKV09XCJyZWNvcmRcIiBbZmllbGRdPVwiZmllbGRcIiAocmVjb3JkQ2hhbmdlKT1cIm9uUmVjb3JkQ2hhbmdlKClcIj5cclxuICAgIDwvYm9vbGVhbi1maWVsZC10ZW1wbGF0ZT5cclxuXHJcbiAgICA8ZGF0ZS1maWVsZC10ZW1wbGF0ZSAjZmllbGRUZW1wbGF0ZSAqbmdJZj1cImZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtWydEYXRhIGUvbyBvcmEnXVwiXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiZmllbGQuVG9vbHRpcFwiIFsocmVjb3JkKV09XCJyZWNvcmRcIiBbZmllbGRdPVwiZmllbGRcIiAocmVjb3JkQ2hhbmdlKT1cIm9uUmVjb3JkQ2hhbmdlKClcIj5cclxuICAgIDwvZGF0ZS1maWVsZC10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bnVtZXJpYy1maWVsZC10ZW1wbGF0ZSAjZmllbGRUZW1wbGF0ZSAqbmdJZj1cImZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtWydDYW1wbyBudW1lcmljbyddXCJcclxuICAgICAgICBbbWF0VG9vbHRpcF09XCJmaWVsZC5Ub29sdGlwXCIgWyhyZWNvcmQpXT1cInJlY29yZFwiIFtmaWVsZF09XCJmaWVsZFwiIChyZWNvcmRDaGFuZ2UpPVwib25SZWNvcmRDaGFuZ2UoKVwiPlxyXG4gICAgPC9udW1lcmljLWZpZWxkLXRlbXBsYXRlPlxyXG5cclxuICAgIDxsaXN0LXZhbHVlLWZpZWxkLXRlbXBsYXRlICNmaWVsZFRlbXBsYXRlICpuZ0lmPVwiZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bJ0VsZW5jbyBnZW5lcmljbyddXCJcclxuICAgICAgICBbbWF0VG9vbHRpcF09XCJmaWVsZC5Ub29sdGlwXCIgWyhyZWNvcmQpXT1cInJlY29yZFwiIFtmaWVsZF09XCJmaWVsZFwiIChyZWNvcmRDaGFuZ2UpPVwib25SZWNvcmRDaGFuZ2UoKVwiPlxyXG4gICAgPC9saXN0LXZhbHVlLWZpZWxkLXRlbXBsYXRlPlxyXG5cclxuICAgIDxhdHRhY2htZW50LWZpZWxkLXRlbXBsYXRlICNmaWVsZFRlbXBsYXRlICpuZ0lmPVwiZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bJ0FsbGVnYXRvJ11cIlxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cImZpZWxkLkRlc2NyaXB0aW9uXCIgWyhyZWNvcmQpXT1cInJlY29yZFwiIFtmaWVsZF09XCJmaWVsZFwiIChyZWNvcmRDaGFuZ2UpPVwib25SZWNvcmRDaGFuZ2UoKVwiPlxyXG4gICAgPC9hdHRhY2htZW50LWZpZWxkLXRlbXBsYXRlPlxyXG5cclxuICAgIDxpbWFnZS1maWVsZC10ZW1wbGF0ZSAjZmllbGRUZW1wbGF0ZSAqbmdJZj1cImZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtWydJbW1hZ2luZSddXCIgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIiBbaW5Db25maWddPVwiaW5Db25maWdcIlxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cImZpZWxkLkRlc2NyaXB0aW9uXCIgWyhyZWNvcmQpXT1cInJlY29yZFwiIFtmaWVsZF09XCJmaWVsZFwiIChyZWNvcmRDaGFuZ2UpPVwib25SZWNvcmRDaGFuZ2UoKVwiIChpbWFnZURyYXcpPVwib25JbWFnZURyYXcoJGV2ZW50KVwiPlxyXG4gICAgPC9pbWFnZS1maWVsZC10ZW1wbGF0ZT4gXHJcblxyXG4gICAgPGltYWdlLXdpdGgtbWFya2Vycy1maWVsZC10ZW1wbGF0ZSAjZmllbGRUZW1wbGF0ZSAqbmdJZj1cImZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtWydJbW1hZ2luZSBjb24gbWFya2VycyddXCIgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIiBbaW5Db25maWddPVwiaW5Db25maWdcIlxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cImZpZWxkLkRlc2NyaXB0aW9uXCIgWyhyZWNvcmQpXT1cInJlY29yZFwiIFtmaWVsZF09XCJmaWVsZFwiIChyZWNvcmRDaGFuZ2UpPVwib25SZWNvcmRDaGFuZ2UoKVwiIChpbWFnZU1hcmspPVwib25JbWFnZU1hcmsoJGV2ZW50KVwiPlxyXG4gICAgPC9pbWFnZS13aXRoLW1hcmtlcnMtZmllbGQtdGVtcGxhdGU+IFxyXG5cclxuICAgIDxpbWFnZS1maWVsZC1zZWxlY3Rvci10ZW1wbGF0ZSAjaW1hZ2VTZWxlY3RvclRlbXBsYXRlICpuZ0lmPVwiZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bJ0VsZW5jbyBpbW1hZ2luaSddXCJcclxuICAgIFttYXRUb29sdGlwXT1cImZpZWxkLkRlc2NyaXB0aW9uXCIgWyhyZWNvcmQpXT1cInJlY29yZFwiIFtmaWVsZF09XCJmaWVsZFwiIChyZWNvcmRDaGFuZ2UpPVwib25SZWNvcmRDaGFuZ2UoKVwiXHJcbiAgICA+XHJcbiAgICA8L2ltYWdlLWZpZWxkLXNlbGVjdG9yLXRlbXBsYXRlPlxyXG5cclxuICAgIDxsaXN0LWZvcm0tcmVjb3JkICNsaXN0SW5uZXJGb3JtUmVjb3JkcyAqbmdJZj1cImZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtWydGb3JtIGRpIGRldHRhZ2xpbyddXCJcclxuICAgICAgICBbZm9ybV09XCJnZXRJbm5lckZvcm1Gcm9tRmllbGQoZmllbGQpXCIgW2NvbmZpZ3VyYXRpb25zXT1cImNvbmZpZ0xpc3RcIlxyXG4gICAgICAgIChvbkFkZFZpZXdFZGl0UmVjb3JkKT1cIm9uQWRkVmlld0VkaXRJbm5lckZvcm1SZWNvcmQoJGV2ZW50LCBmaWVsZClcIj5cclxuICAgIDwvbGlzdC1mb3JtLXJlY29yZD5cclxuXHJcbiAgICA8bGFiZWwtZmllbGQtdGVtcGxhdGUgI2xhYmVsVGVtcGxhdGUgKm5nSWY9XCJmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVsnRXRpY2hldHRhJ11cIlxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cImZpZWxkLlRvb2x0aXBcIiBbKHJlY29yZCldPVwicmVjb3JkXCIgW2ZpZWxkXT1cImZpZWxkXCIgKHJlY29yZENoYW5nZSk9XCJvblJlY29yZENoYW5nZSgpXCI+XHJcbiAgICA8L2xhYmVsLWZpZWxkLXRlbXBsYXRlPlxyXG5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
185
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1tb2R1bGUtZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXFwLWR5bmFtaWMtbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9wcml2YXRlL2R5bmFtaWMtbW9kdWxlLWZpZWxkLWZpeC9keW5hbWljLW1vZHVsZS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZHluYW1pYy1tb2R1bGUtZmllbGQtZml4L2R5bmFtaWMtbW9kdWxlLWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQTBCLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHaEksT0FBTyxFQUFhLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9GLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRXhGLE9BQU8sRUFBRSx5Q0FBeUMsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQ3RILE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBV3RELE1BQU0sT0FBTyw4QkFBOEI7SUFpQ3pDLFlBQ1UsTUFBaUI7UUFBakIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQTVCbEIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUd6QixpQkFBWSxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ2hFLFFBQUcsR0FBMkIsSUFBSSxZQUFZLEVBQVksQ0FBQztRQUdyRSxlQUFVLEdBQTRCLElBQUksdUJBQXVCLEVBQUUsQ0FBQztRQUNwRSxrQkFBYSxH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QUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMxQixVQUFVLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEQsQ0FBQzs7NEhBL0pRLDhCQUE4QjtnSEFBOUIsOEJBQThCLDJtQkNsQjNDLHEzSkEyRWM7NEZEekRELDhCQUE4QjtrQkFMMUMsU0FBUzsrQkFDRSwwQkFBMEI7Z0dBTTNCLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFFSSxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLEdBQUc7c0JBQVosTUFBTTtnQkFpQitDLHFCQUFxQjtzQkFBMUUsU0FBUzt1QkFBQyx1QkFBdUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBR3JCLGFBQWE7c0JBQTNDLFlBQVk7dUJBQUMsZUFBZTtnQkFDUyxvQkFBb0I7c0JBQXpELFlBQVk7dUJBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgUXVlcnlMaXN0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBJQmFzZUZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9pQmFzZUZpZWxkQ29tcG9uZW50LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEJhc2VGaWVsZCwgRmllbGRUeXBlRW51bSwgRGF0YUdldHRlclR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2Jhc2VGaWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVMaXN0Q29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVMaXN0Q29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgRm9ybSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9mb3JtLm1vZGVsJztcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQnO1xyXG5pbXBvcnQgeyBSZWNvcmQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvcmVjb3JkLm1vZGVsJztcclxuaW1wb3J0IHsgTGlzdEZvcm1SZWNvcmRDb21wb25lbnQgfSBmcm9tICcuLi9mb3JtLXJlY29yZHMvbGlzdC1mb3JtLXJlY29yZC9saXN0LWZvcm0tcmVjb3JkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEVuZFBvaW50Q29uZmlndXJhdGlvbiB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9lbmRQb2ludENvbmZpZ3VyYXRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBEeW5BdHRhY2htZW50IH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2R5bkF0dGFjaG1lbnQnO1xyXG5pbXBvcnQgeyBEeW5hbWljTG9hZGVyRGlyZWN0aXZlRGF0YSwgZXZlbnRPdXQgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmVzL2R5bmFtaWMtbG9hZGVyL2R5bmFtaWMtbG9hZGVyLmRpcmVjdGl2ZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2R5bmFtaWMtbW9kdWxlLWZpZWxkLWZpeCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2R5bmFtaWMtbW9kdWxlLWZpZWxkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9keW5hbWljLW1vZHVsZS1maWVsZC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEeW5hbWljTW9kdWxlRmllbGRGaXhDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIElCYXNlRmllbGRDb21wb25lbnQge1xyXG5cclxuICBASW5wdXQoKSBlbmRQb2ludENvbmZpZ3VyYXRpb246IEVuZFBvaW50Q29uZmlndXJhdGlvbjtcclxuICBASW5wdXQoKSBmaWVsZDogQmFzZUZpZWxkO1xyXG4gIEBJbnB1dCgpIGZvcm06IEZvcm07XHJcbiAgQElucHV0KCkgcmVjb3JkOiBSZWNvcmQ7XHJcbiAgQElucHV0KCkgaW5Db25maWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBRdWVyeUVkaXRvckNvbXBvbmVudDogRHluYW1pY0xvYWRlckRpcmVjdGl2ZURhdGE7IC8vIEwnaW50ZXJvIGNvbXBvbmVudGUgcXVlcnkgRWRpdG9yXHJcblxyXG4gIEBPdXRwdXQoKSByZWNvcmRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcbiAgQE91dHB1dCgpIG91dDogRXZlbnRFbWl0dGVyPGV2ZW50T3V0PiA9IG5ldyBFdmVudEVtaXR0ZXI8ZXZlbnRPdXQ+KCk7XHJcblxyXG5cclxuICBjb25maWdMaXN0OiBEeW5hbWljTW9kdWxlTGlzdENvbmZpZyA9IG5ldyBEeW5hbWljTW9kdWxlTGlzdENvbmZpZygpO1xyXG4gIEZpZWxkVHlwZUVudW0gPSBGaWVsZFR5cGVFbnVtO1xyXG4gIERhdGFHZXR0ZXJUeXBlRW51bSA9IERhdGFHZXR0ZXJUeXBlRW51bTtcclxuICBEQkdldHRlclZhbHVlOiBhbnkgPSBudWxsO1xyXG4gIERCR2V0dGVyTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgREJHZXR0ZXJFeGFjdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIERCR2V0dGVySGF2ZVF1ZXN0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyNyZWdpb24gUHJvcHJpZXTDoCBwZXIgYWdnaXVuZ2VyZS9tb2RpZmljYXJlIGkgcmVjb3JkIGRpIHVuYSBmb3JtIGRpIGRldHRhZ2xpb1xyXG4gIHNlbGVjdGVkSW5uZXJGb3JtOiBGb3JtO1xyXG4gIHNlbGVjdGVkSW5uZXJGb3JtUmVjb3JkOiBSZWNvcmQ7XHJcbiAgaW5kZXhJbm5lckZvcm1SZWNvcmQ6IG51bWJlcjtcclxuICBvbmx5Vmlld0lubmVyRm9ybVJlY29yZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGRpYWxvZ0lubmVyRm9ybVJlY29yZFJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIEBWaWV3Q2hpbGQoJ2RpYWxvZ0lubmVyRm9ybVJlY29yZCcsIHsgc3RhdGljOiB0cnVlIH0pIGRpYWxvZ0lubmVyRm9ybVJlY29yZDogVGVtcGxhdGVSZWY8YW55PjtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgQFZpZXdDaGlsZHJlbihcImZpZWxkVGVtcGxhdGVcIikgZmllbGRUZW1wbGF0ZTogUXVlcnlMaXN0PER5bmFtaWNNb2R1bGVGaWVsZEZpeENvbXBvbmVudD47XHJcbiAgQFZpZXdDaGlsZHJlbignbGlzdElubmVyRm9ybVJlY29yZHMnKSBsaXN0SW5uZXJGb3JtUmVjb3JkczogUXVlcnlMaXN0PExpc3RGb3JtUmVjb3JkQ29tcG9uZW50PjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nXHJcbiAgKSB7IH1cclxuXHJcblxyXG4gIHVwZGF0ZUZpZWxkKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZmllbGRUZW1wbGF0ZSAmJiB0aGlzLmZpZWxkVGVtcGxhdGUubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmZpZWxkVGVtcGxhdGUuZm9yRWFjaChmID0+IGYudXBkYXRlRmllbGQoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICBjb25zb2xlLmxvZyhcImR5bmFtaWMtbW9kdWxlLWZpZWxkXCIsdGhpcy5maWVsZCk7XHJcblxyXG4gICAgdGhpcy5jb25maWdMaXN0LnZhbHVlcyA9IHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV1cclxuICAgIHRoaXMuY29uZmlnTGlzdC5zaG93VGl0bGUgPSB0cnVlO1xyXG4gICAgdGhpcy5jb25maWdMaXN0LmRlZmF1bHRMaXN0QWN0aW9ucyA9IG5ldyBEeW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCgpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gaW52b2NhdG8gYWwgY2FtYmlvIGRlbCB2YWxvcmUgZGkgb2duaSBwcm9wcmlldMOgIGRlbGwnb2dnZXR0byByZWNvcmQuXHJcbiAgICogU2VydmUgYWQgYWdnaW9ybmFyZSBpbCB2YWxvcmUgZGkgdHV0dGkgaSBjYW1waSBjaGUgaGFubm8gdW5hIGZvcm11bGEuXHJcbiAgICovXHJcbiAgb25SZWNvcmRDaGFuZ2UoKSB7XHJcbiAgICB0aGlzLnJlY29yZENoYW5nZS5lbWl0KHRoaXMucmVjb3JkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmVjdXBlcmFyZSB1bmEgSW5uZXJGb3JtIGEgcGFydGlyZSBkYWwgRmllbGQgY2hlIGxhIHJhcHByZXNlbnRhLlxyXG4gICAqIEBwYXJhbSBmaWVsZCBDYW1wbyBhIHBhcnRpcmUgZGFsIHF1YWxlIHNpIHZ1b2xlIHJlY3VwZXJhcmUgbGEgSW5uZXJGb3JtLlxyXG4gICAqIEByZXR1cm5zIFJlc3RpdHVpc2NlIHVuIG9nZ2V0dG8gZGkgdGlwbyBGb3JtLlxyXG4gICAqL1xyXG4gIGdldElubmVyRm9ybUZyb21GaWVsZChmaWVsZDogQmFzZUZpZWxkKTogRm9ybSB7XHJcbiAgICBpZiAodGhpcy5mb3JtLklubmVyRm9ybXMgJiYgdGhpcy5mb3JtLklubmVyRm9ybXMuZmluZChmID0+IGYuTmFtZSA9PSBmaWVsZC5MYWJlbCkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZm9ybS5Jbm5lckZvcm1zLmZpbmQoZiA9PiBmLk5hbWUgPT0gZmllbGQuTGFiZWwpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogTWV0b2RvIHBlciBhcHJpcmUgdW4gZGlhbG9nIGluIGN1aSBhZ2dpdW5nZXJlL21vZGlmaWNhcmUvdmlzdWFsaXp6YXJlIHVuIHJlY29yZCBhcHBhcnRlbmVudGVcclxuICogYSB1bmEgZm9ybSBkaSBkZXR0YWdsaW8uXHJcbiAqIEBwYXJhbSByZWNvcmQgRXZlbnRvIGRpIG91dHB1dCBkZWwgY29tcG9uZW50ZSBsaXN0LWZvcm0tcmVjb3JkLCBjb250aWVuZSBpbCByZWNvcmQgc2VsZXppb25hdG8gZSB1biBib29sZW5vIGNoZSBpbmRpY2EgXHJcbiAqIHNlIGwndXRlbnRlIHZ1b2xlIG1vZGlmaWNhcmUgbyB2aXN1YWxpenphcmUgbCdlbGVtZW50byBzZWxlemlvbmF0by5cclxuICogQHBhcmFtIGlubmVyRm9ybSBDb250aWVuZSBsYSBGb3JtIGRpIGRldHRhZ2xpbyBkYWxsYSBxdWFsZSDDqCBzdGF0byByaWNoaWVzdG8gaWwgcmVjb3JkLlxyXG4gKi9cclxuICBvbkFkZFZpZXdFZGl0SW5uZXJGb3JtUmVjb3JkKHJlY29yZDogeyByZWNvcmQ6IFJlY29yZCwgb25seVZpZXc6IGJvb2xlYW4gfSwgZmllbGQ6IEJhc2VGaWVsZCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZElubmVyRm9ybSA9IHRoaXMuZ2V0SW5uZXJGb3JtRnJvbUZpZWxkKGZpZWxkKTtcclxuICAgIGlmIChyZWNvcmQgPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSW5uZXJGb3JtUmVjb3JkID0gbmV3IFJlY29yZCgpO1xyXG4gICAgICB0aGlzLmluZGV4SW5uZXJGb3JtUmVjb3JkID0gbnVsbDtcclxuICAgICAgdGhpcy5vbmx5Vmlld0lubmVyRm9ybVJlY29yZCA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZElubmVyRm9ybVJlY29yZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocmVjb3JkLnJlY29yZCkpO1xyXG4gICAgICB0aGlzLmluZGV4SW5uZXJGb3JtUmVjb3JkID0gdGhpcy5yZWNvcmRbZmllbGQuTmFtZV0uaW5kZXhPZihyZWNvcmQpO1xyXG4gICAgICB0aGlzLm9ubHlWaWV3SW5uZXJGb3JtUmVjb3JkID0gcmVjb3JkLm9ubHlWaWV3O1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGlhbG9nSW5uZXJGb3JtUmVjb3JkUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ0lubmVyRm9ybVJlY29yZCwge1xyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICB3aWR0aDogJzc1JSdcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludm9jYXRvIGFsIHNhbHZhdGFnZ2lvIG8gYWxsYSBjaGl1c3VyYSBkZWwgZGlhbG9nIGRpIGFnZ2l1bnRhL21vZGlmaWNhL3Zpc3VhbGl6emF6aW9uZVxyXG4gICAqIGRpIHVuIHJlY29yZCBkaSB1bmEgZm9ybSBkaSBkZXR0YWdsaW8uXHJcbiAgICogQHBhcmFtIHJlY29yZCBPZ2dldHRvIHJlc3RpdHVpdG8gZGFsIGNvbXBvbmVudGUgYWRkLWZvcm0tZmllbGQgKHF1ZXN0byBxdWkpIGNvbnRlbmVudGUgaWwgUmVjb3JkIFxyXG4gICAqIGFnZ2lvcm5hdG8gZGFsbCd1dGVudGUuIFNlIG51bGwgYWxsb3JhIGwndXRlbnRlIG5vbiBoYSBtb2RpZmljYXRvIG51bGxhIGUgaGEgY2hpdXNvIGlsIGRpYWxvZy5cclxuICAgKi9cclxuICBvblNhdmVJbm5lckZvcm1SZWNvcmQocmVjb3JkOiBSZWNvcmQpIHtcclxuICAgIGlmIChyZWNvcmQgIT0gbnVsbCkge1xyXG4gICAgICBjb25zdCBhcnJheU5hbWU6IHN0cmluZyA9IHRoaXMuc2VsZWN0ZWRJbm5lckZvcm0uTmFtZS5zcGxpdCgnICcpLmpvaW4oJ18nKTtcclxuICAgICAgaWYgKHRoaXMuaW5kZXhJbm5lckZvcm1SZWNvcmQgIT0gbnVsbCAmJiB0aGlzLmluZGV4SW5uZXJGb3JtUmVjb3JkID49IDApIHtcclxuICAgICAgICB0aGlzLnJlY29yZFthcnJheU5hbWVdW3RoaXMuaW5kZXhJbm5lckZvcm1SZWNvcmRdID0gcmVjb3JkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICghdGhpcy5yZWNvcmRbYXJyYXlOYW1lXSkge1xyXG4gICAgICAgICAgdGhpcy5yZWNvcmRbYXJyYXlOYW1lXSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlY29yZFthcnJheU5hbWVdLnB1c2gocmVjb3JkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5kaWFsb2dJbm5lckZvcm1SZWNvcmRSZWYuY2xvc2UoKTtcclxuXHJcbiAgICAvLyBSaWNhcmljbyBsYSB0YWJlbGxhIGRlaSByZWNvcmQgcGVyIHZpc3VhbGl6emFyZSBsZSBtb2RpZmljaGUgZmF0dGUgZGFsbCd1dGVudGUuXHJcbiAgICBpZiAodGhpcy5saXN0SW5uZXJGb3JtUmVjb3JkcyAmJiB0aGlzLmxpc3RJbm5lckZvcm1SZWNvcmRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5saXN0SW5uZXJGb3JtUmVjb3Jkcy5mb3JFYWNoKGxpc3QgPT4ge1xyXG4gICAgICAgIGlmIChsaXN0ICYmIGxpc3QudGFibGVSZWNvcmRzKSB7XHJcbiAgICAgICAgICBsaXN0LnRhYmxlUmVjb3Jkcy5yZWxvYWREYXRhdGFibGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gUGFzc28gbCdpbW1hZ2luZSBkaXNlZ25hdGEgYWwgbGl2ZWxsbyBzdXBlcmlvcmVcclxuICBvbkltYWdlRHJhdyhldmVudDogRHluQXR0YWNobWVudCl7XHJcbiAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gZXZlbnQ7XHJcbiAgICB0aGlzLnJlY29yZENoYW5nZS5lbWl0KHRoaXMucmVjb3JkKTtcclxuICB9XHJcblxyXG4gICAgLy8gUGFzc28gbCdpbW1hZ2luZSBkaXNlZ25hdGEgYWwgbGl2ZWxsbyBzdXBlcmlvcmVcclxuICAgIG9uSW1hZ2VNYXJrKGV2ZW50OiBEeW5BdHRhY2htZW50KXtcclxuICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IGV2ZW50O1xyXG4gICAgICB0aGlzLnJlY29yZENoYW5nZS5lbWl0KHRoaXMucmVjb3JkKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkV4dGVybmFsQ29tcG9uZW50T3V0KGV2OiBldmVudE91dCl7XHJcbiAgICAgIHRoaXMub3V0LmVtaXQoZXYpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uU2VsZWN0ZWRWYWx1ZSh2YWx1ZTogYW55KXtcclxuICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IHZhbHVlWzBdO1xyXG4gICAgICB0aGlzLkRCR2V0dGVyVmFsdWUgPSB2YWx1ZVswXTtcclxuICAgICAgdGhpcy5EQkdldHRlckV4YWN0ID0gdmFsdWVbMV07XHJcbiAgICAgIGlmICh0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlLm9wZW5lZEZpZWxkcy5maW5kKHggPT4geC5RdWVyeVByb3BlcnR5VmFsdWUgPT0gJz8nKSAhPSBudWxsKXsgdGhpcy5EQkdldHRlckhhdmVRdWVzdGlvbnMgPSB0cnVlOyB9XHJcbiAgICAgIGlmICh2YWx1ZVswXSA9PSBudWxsKXsgdGhpcy5EQkdldHRlckxvYWRlZCA9IGZhbHNlOyB9XHJcbiAgICB9XHJcblxyXG4gICAgREJHZXR0ZXJDaGFuZ2UoKXtcclxuICAgICAgdGhpcy5EQkdldHRlclZhbHVlID0gbnVsbDtcclxuICAgICAgdGhpcy5EQkdldHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLkRCR2V0dGVyRXhhY3QgPSB0cnVlO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy5EQkdldHRlckxvYWRlZCA9IHRydWU7IH0sMTAwKTtcclxuICAgIH1cclxufVxyXG4iLCI8ZGl2ICpuZ0lmPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9PSBEYXRhR2V0dGVyVHlwZUVudW1bJ01hbnVhbGUnXSB8fCBmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlID09IERhdGFHZXR0ZXJUeXBlRW51bVsnRm9ybXVsYSddXCI+IFxyXG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJmaWVsZHNUZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGZpZWxkOiBmaWVsZCwgcmVjb3JkOiByZWNvcmQgfVwiPjwvbmctY29udGFpbmVyPlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgKm5nSWY9XCJmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlID09IERhdGFHZXR0ZXJUeXBlRW51bVsnRGEgZGF0YWJhc2UnXVwiPiBcclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBkYmdldHRlcmZpZWxkXCIgKm5nSWY9XCJEQkdldHRlclZhbHVlID09IG51bGwgJiYgIURCR2V0dGVyTG9hZGVkXCI+XHJcbiAgICAgICAgPHNwYW4+e3tmaWVsZC5OYW1lfX06IDwvc3Bhbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cIkRCR2V0dGVyQ2hhbmdlKClcIj5SaXNwb25kaTwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRiZ2V0dGVyIGNsYXNzPVwiZmxleFwiIFsocmVjb3JkKV09XCJyZWNvcmRcIiBbZmllbGRdPVwiZmllbGRcIiBbaGlkZGVuXT1cIkRCR2V0dGVyVmFsdWUgIT0gbnVsbFwiIFtRdWVyeUVkaXRvckNvbXBvbmVudF09XCJRdWVyeUVkaXRvckNvbXBvbmVudFwiIFtpbkNvbmZpZ109XCJpbkNvbmZpZ1wiIChvdXQpPVwib25FeHRlcm5hbENvbXBvbmVudE91dCgkZXZlbnQpXCIgKHNlbGVjdGVkVmFsdWUpPVwib25TZWxlY3RlZFZhbHVlKCRldmVudClcIiAqbmdJZj1cIkRCR2V0dGVyTG9hZGVkXCI+PC9kYmdldHRlcj5cclxuICAgIFxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTFcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJmaWVsZHNUZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGZpZWxkOiBmaWVsZCwgcmVjb3JkOiByZWNvcmQgfVwiICpuZ0lmPVwiREJHZXR0ZXJWYWx1ZSAhPSBudWxsXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xIGZsZXhcIiAqbmdJZj1cIiFEQkdldHRlckV4YWN0IHx8IERCR2V0dGVySGF2ZVF1ZXN0aW9uc1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi13YXJuaW5nXCIgKGNsaWNrKT1cIkRCR2V0dGVyQ2hhbmdlKClcIiAqbmdJZj1cIkRCR2V0dGVyVmFsdWUgIT0gbnVsbFwiPk1vZGlmaWNhPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI2ZpZWxkc1RlbXBsYXRlPlxyXG5cclxuICAgIDx0ZXh0LWZpZWxkLXRlbXBsYXRlICNmaWVsZFRlbXBsYXRlICpuZ0lmPVwiZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bJ0NhbXBvIGRpIHRlc3RvJ11cIlxyXG4gICAgW21hdFRvb2x0aXBdPVwiZmllbGQuVG9vbHRpcFwiIFsocmVjb3JkKV09XCJyZWNvcmRcIiBbZmllbGRdPVwiZmllbGRcIiAocmVjb3JkQ2hhbmdlKT1cIm9uUmVjb3JkQ2hhbmdlKClcIj5cclxuICAgIDwvdGV4dC1maWVsZC10ZW1wbGF0ZT5cclxuXHJcbiAgICA8dGV4dGFyZWEtZmllbGQtdGVtcGxhdGUgI2ZpZWxkVGVtcGxhdGUgKm5nSWY9XCJmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVsnQXJlYSBkaSB0ZXN0byddXCJcclxuICAgICAgICBbbWF0VG9vbHRpcF09XCJmaWVsZC5Ub29sdGlwXCIgWyhyZWNvcmQpXT1cInJlY29yZFwiIFtmaWVsZF09XCJmaWVsZFwiIChyZWNvcmRDaGFuZ2UpPVwib25SZWNvcmRDaGFuZ2UoKVwiPlxyXG4gICAgPC90ZXh0YXJlYS1maWVsZC10ZW1wbGF0ZT5cclxuXHJcbiAgICA8Ym9vbGVhbi1maWVsZC10ZW1wbGF0ZSAjZmllbGRUZW1wbGF0ZSAqbmdJZj1cImZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtWydCb29sZWFubyddXCJcclxuICAgICAgICBbbWF0VG9vbHRpcF09XCJmaWVsZC5Ub29sdGlwXCIgWyhyZWNvcmQpXT1cInJlY29yZFwiIFtmaWVsZF09XCJmaWVsZFwiIChyZWNvcmRDaGFuZ2UpPVwib25SZWNvcmRDaGFuZ2UoKVwiPlxyXG4gICAgPC9ib29sZWFuLWZpZWxkLXRlbXBsYXRlPlxyXG5cclxuICAgIDxkYXRlLWZpZWxkLXRlbXBsYXRlICNmaWVsZFRlbXBsYXRlICpuZ0lmPVwiZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bJ0RhdGEgZS9vIG9yYSddXCJcclxuICAgICAgICBbbWF0VG9vbHRpcF09XCJmaWVsZC5Ub29sdGlwXCIgWyhyZWNvcmQpXT1cInJlY29yZFwiIFtmaWVsZF09XCJmaWVsZFwiIChyZWNvcmRDaGFuZ2UpPVwib25SZWNvcmRDaGFuZ2UoKVwiPlxyXG4gICAgPC9kYXRlLWZpZWxkLXRlbXBsYXRlPlxyXG5cclxuICAgIDxudW1lcmljLWZpZWxkLXRlbXBsYXRlICNmaWVsZFRlbXBsYXRlICpuZ0lmPVwiZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bJ0NhbXBvIG51bWVyaWNvJ11cIlxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cImZpZWxkLlRvb2x0aXBcIiBbKHJlY29yZCldPVwicmVjb3JkXCIgW2ZpZWxkXT1cImZpZWxkXCIgKHJlY29yZENoYW5nZSk9XCJvblJlY29yZENoYW5nZSgpXCI+XHJcbiAgICA8L251bWVyaWMtZmllbGQtdGVtcGxhdGU+XHJcblxyXG4gICAgPGxpc3QtdmFsdWUtZmllbGQtdGVtcGxhdGUgI2ZpZWxkVGVtcGxhdGUgKm5nSWY9XCJmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVsnRWxlbmNvIGdlbmVyaWNvJ11cIlxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cImZpZWxkLlRvb2x0aXBcIiBbKHJlY29yZCldPVwicmVjb3JkXCIgW2ZpZWxkXT1cImZpZWxkXCIgKHJlY29yZENoYW5nZSk9XCJvblJlY29yZENoYW5nZSgpXCI+XHJcbiAgICA8L2xpc3QtdmFsdWUtZmllbGQtdGVtcGxhdGU+XHJcblxyXG4gICAgPGF0dGFjaG1lbnQtZmllbGQtdGVtcGxhdGUgI2ZpZWxkVGVtcGxhdGUgKm5nSWY9XCJmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVsnQWxsZWdhdG8nXVwiXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiZmllbGQuRGVzY3JpcHRpb25cIiBbKHJlY29yZCldPVwicmVjb3JkXCIgW2ZpZWxkXT1cImZpZWxkXCIgKHJlY29yZENoYW5nZSk9XCJvblJlY29yZENoYW5nZSgpXCI+XHJcbiAgICA8L2F0dGFjaG1lbnQtZmllbGQtdGVtcGxhdGU+XHJcblxyXG4gICAgPGltYWdlLWZpZWxkLXRlbXBsYXRlICNmaWVsZFRlbXBsYXRlICpuZ0lmPVwiZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bJ0ltbWFnaW5lJ11cIiBbZW5kUG9pbnRDb25maWd1cmF0aW9uXT1cImVuZFBvaW50Q29uZmlndXJhdGlvblwiIFtpbkNvbmZpZ109XCJpbkNvbmZpZ1wiXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiZmllbGQuRGVzY3JpcHRpb25cIiBbKHJlY29yZCldPVwicmVjb3JkXCIgW2ZpZWxkXT1cImZpZWxkXCIgKHJlY29yZENoYW5nZSk9XCJvblJlY29yZENoYW5nZSgpXCIgKGltYWdlRHJhdyk9XCJvbkltYWdlRHJhdygkZXZlbnQpXCI+XHJcbiAgICA8L2ltYWdlLWZpZWxkLXRlbXBsYXRlPiBcclxuXHJcbiAgICA8aW1hZ2Utd2l0aC1tYXJrZXJzLWZpZWxkLXRlbXBsYXRlICNmaWVsZFRlbXBsYXRlICpuZ0lmPVwiZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bJ0ltbWFnaW5lIGNvbiBtYXJrZXJzJ11cIiBbZW5kUG9pbnRDb25maWd1cmF0aW9uXT1cImVuZFBvaW50Q29uZmlndXJhdGlvblwiIFtpbkNvbmZpZ109XCJpbkNvbmZpZ1wiXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiZmllbGQuRGVzY3JpcHRpb25cIiBbKHJlY29yZCldPVwicmVjb3JkXCIgW2ZpZWxkXT1cImZpZWxkXCIgKHJlY29yZENoYW5nZSk9XCJvblJlY29yZENoYW5nZSgpXCIgKGltYWdlTWFyayk9XCJvbkltYWdlTWFyaygkZXZlbnQpXCI+XHJcbiAgICA8L2ltYWdlLXdpdGgtbWFya2Vycy1maWVsZC10ZW1wbGF0ZT4gXHJcblxyXG4gICAgPGltYWdlLWZpZWxkLXNlbGVjdG9yLXRlbXBsYXRlICNpbWFnZVNlbGVjdG9yVGVtcGxhdGUgKm5nSWY9XCJmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVsnRWxlbmNvIGltbWFnaW5pJ11cIlxyXG4gICAgW21hdFRvb2x0aXBdPVwiZmllbGQuRGVzY3JpcHRpb25cIiBbKHJlY29yZCldPVwicmVjb3JkXCIgW2ZpZWxkXT1cImZpZWxkXCIgKHJlY29yZENoYW5nZSk9XCJvblJlY29yZENoYW5nZSgpXCJcclxuICAgID5cclxuICAgIDwvaW1hZ2UtZmllbGQtc2VsZWN0b3ItdGVtcGxhdGU+XHJcblxyXG4gICAgPGxpc3QtZm9ybS1yZWNvcmQgI2xpc3RJbm5lckZvcm1SZWNvcmRzICpuZ0lmPVwiZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bJ0Zvcm0gZGkgZGV0dGFnbGlvJ11cIlxyXG4gICAgICAgIFtmb3JtXT1cImdldElubmVyRm9ybUZyb21GaWVsZChmaWVsZClcIiBbY29uZmlndXJhdGlvbnNdPVwiY29uZmlnTGlzdFwiXHJcbiAgICAgICAgKG9uQWRkVmlld0VkaXRSZWNvcmQpPVwib25BZGRWaWV3RWRpdElubmVyRm9ybVJlY29yZCgkZXZlbnQsIGZpZWxkKVwiPlxyXG4gICAgPC9saXN0LWZvcm0tcmVjb3JkPlxyXG5cclxuICAgIDxsYWJlbC1maWVsZC10ZW1wbGF0ZSAjbGFiZWxUZW1wbGF0ZSAqbmdJZj1cImZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtWydFdGljaGV0dGEnXVwiXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiZmllbGQuVG9vbHRpcFwiIFsocmVjb3JkKV09XCJyZWNvcmRcIiBbZmllbGRdPVwiZmllbGRcIiAocmVjb3JkQ2hhbmdlKT1cIm9uUmVjb3JkQ2hhbmdlKClcIj5cclxuICAgIDwvbGFiZWwtZmllbGQtdGVtcGxhdGU+XHJcblxyXG48L25nLXRlbXBsYXRlPiJdfQ==
@@ -1,5 +1,5 @@
1
1
  import { Component, EventEmitter, Input, Output, ViewChildren } from '@angular/core';
2
- import { AnswerStyle, FieldTypeEnum } from '../../../../models/baseField.model';
2
+ import { AnswerStyle, DataGetter, DataGetterTypeEnum, FieldTypeEnum } from '../../../../models/baseField.model';
3
3
  import { FormScalarTypeEnum } from '../../../../models/form.model';
4
4
  import { DynRecord, Record } from '../../../../models/record.model';
5
5
  import { UtilityHelperService } from '../../../../services/utilityHelper.services';
@@ -173,6 +173,7 @@ export class AddFormRecordComponent {
173
173
  });
174
174
  this.utilityService.RunEndPointCall(this.endPointConfiguration.Forms.GetByIDEndPoint, dynamicModuleParams, (res) => {
175
175
  this.form = res;
176
+ this.setDataGetter(this.form);
176
177
  GlobalService.debugLog('getFormByID - DynaForm', this.form);
177
178
  this.fieldsConfig();
178
179
  }, (err) => { });
@@ -222,6 +223,7 @@ export class AddFormRecordComponent {
222
223
  this.utilityService.RunEndPointCall(this.endPointConfiguration.Forms.GetByIDAndVersionEndPoint, dynamicModuleParams, (res) => {
223
224
  GlobalService.debugLog("AFTER getFormByIDandVersion - this.form", res);
224
225
  this.form = res;
226
+ this.setDataGetter(this.form);
225
227
  this.createRecordProperties();
226
228
  this.reorderFormFields();
227
229
  this.createFormGroup();
@@ -537,6 +539,20 @@ export class AddFormRecordComponent {
537
539
  };
538
540
  });
539
541
  }
542
+ setDataGetter(form) {
543
+ form.Fields.forEach((field) => {
544
+ // Trasformo il Base64String del Datagetter nel Datagetter vero e proprio
545
+ if (field.DataGetterValueBase64String != null) {
546
+ field.DataGetter = JSON.parse(atob(field.DataGetterValueBase64String));
547
+ field.DataGetter.DataGetterType = field.DataGetter.DataGetterType == null ? DataGetterTypeEnum.Manuale : field.DataGetter.DataGetterType;
548
+ console.log("setDataGetter", field.DataGetter);
549
+ }
550
+ else {
551
+ field.DataGetter = new DataGetter();
552
+ }
553
+ field.DataGetterValueBase64String = null;
554
+ });
555
+ }
540
556
  }
541
557
  AddFormRecordComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AddFormRecordComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.UtilityHelperService }], target: i0.ɵɵFactoryTarget.Component });
542
558
  AddFormRecordComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: AddFormRecordComponent, selector: "add-form-record", inputs: { configurations: "configurations", endPointConfiguration: "endPointConfiguration", userID: "userID", formID: "formID", form: "form", record: "record", onlyView: "onlyView", isDuplicate: "isDuplicate", inConfig: "inConfig", QueryEditorComponent: "QueryEditorComponent" }, outputs: { saveRecordEvent: "saveRecordEvent", afterSaveRecordEvent: "afterSaveRecordEvent", out: "out" }, viewQueries: [{ propertyName: "fieldTemplate", predicate: ["fieldTemplate"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"loader\">\r\n\r\n <div class=\"row eqp-dynamic-module-title add-form-record-header\" *ngIf=\"showTitle\">\r\n <div class=\"col-md-12\">\r\n <span>{{form.Name}}</span>\r\n </div>\r\n </div>\r\n\r\n <form [formGroup]=\"formForm\" class=\"add-form-record-form\">\r\n\r\n <!-- VISUALIZZAZIONE SEMPLICE -->\r\n <ng-container *ngIf=\"form.FormScalarType == FormScalarTypeEnum.Semplice\" [ngTemplateOutlet]=\"fieldTemplates\"\r\n [ngTemplateOutletContext]=\"{ fields: form.Fields }\" class=\"add-form-record-semplice\">\r\n </ng-container>\r\n\r\n <!-- VISUALIZZAZIONE A STEPPER -->\r\n <mat-horizontal-stepper linear *ngIf=\"form.FormScalarType == FormScalarTypeEnum['A step']\"\r\n class=\"add-form-record-stepper\">\r\n <mat-step *ngFor=\"let group of form.FormFieldsGroups; let i = index; let first = first; let last = last\">\r\n <ng-template matStepLabel>\r\n {{group.Name}}\r\n </ng-template>\r\n\r\n <ng-container [ngTemplateOutlet]=\"fieldTemplates\"\r\n [ngTemplateOutletContext]=\"{ fields: fieldGroups[group.Name] }\">\r\n </ng-container>\r\n\r\n <div class=\"mt-2 d-flex justify-content-end add-form-record-buttons\">\r\n <button *ngIf=\"!first\" class=\"mr-2 previous\" mat-raised-button matStepperPrevious>\r\n Precedente\r\n </button>\r\n <button *ngIf=\"!last\" class=\"button-next\" color=\"primary\" mat-raised-button matStepperNext>\r\n Successivo\r\n </button>\r\n <button *ngIf=\"last && showSaveButton\" (click)=\"saveOrExitForm(false)\" class=\"button-next\"\r\n color=\"primary\" mat-raised-button>\r\n Salva\r\n </button>\r\n </div>\r\n\r\n </mat-step>\r\n </mat-horizontal-stepper>\r\n\r\n <!-- VISUALIZZAZIONE A TAB -->\r\n <mat-tab-group *ngIf=\"form.FormScalarType == FormScalarTypeEnum['In tab']\" class=\"add-form-record-tab\">\r\n <mat-tab *ngFor=\"let group of form.FormFieldsGroups\" [label]=\"group.Name\">\r\n <div class=\"mt-3\">\r\n <ng-container [ngTemplateOutlet]=\"fieldTemplates\"\r\n [ngTemplateOutletContext]=\"{ fields: fieldGroups[group.Name] }\">\r\n </ng-container>\r\n </div>\r\n </mat-tab>\r\n </mat-tab-group>\r\n\r\n <!-- VISUALIZZAZIONE AD ACCORDION -->\r\n <mat-accordion multi *ngIf=\"form.FormScalarType == FormScalarTypeEnum['In accordion']\"\r\n class=\"add-form-record-accordion\">\r\n <mat-expansion-panel *ngFor=\"let group of form.FormFieldsGroups\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{group.Name}}\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n\r\n <ng-container [ngTemplateOutlet]=\"fieldTemplates\"\r\n [ngTemplateOutletContext]=\"{ fields: fieldGroups[group.Name] }\">\r\n </ng-container>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n </form>\r\n\r\n <div class=\"row mt-2 add-form-record-buttons\"\r\n *ngIf=\"(showBackButton || showSaveButton) && form.FormScalarType != FormScalarTypeEnum['A step']\">\r\n <div class=\"col-sm-12 text-right\">\r\n <button class=\"mr-2\" mat-raised-button type=\"button\" *ngIf=\"showBackButton\" (click)=\"saveOrExitForm(true)\">\r\n Annulla\r\n </button>\r\n <button class=\"mr-2\" mat-raised-button color=\"primary\" type=\"button\" *ngIf=\"showSaveButton\"\r\n (click)=\"saveOrExitForm(false)\" [disabled]=\"formForm.invalid || formForm.disabled || isSaving\">\r\n <span *ngIf=\"!isSaving\">Salva</span>\r\n <span *ngIf=\"isSaving\">Salvataggio in Corso...</span>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n</ng-container>\r\n\r\n\r\n\r\n<!-- TEMPLATE PER LA VISUALIZZAZIONE DEI CAMPI DELLA FORM -->\r\n<ng-template #fieldTemplates let-fields='fields'>\r\n <div class=\"row\">\r\n <div class=\"mt-2\" *ngFor=\"let field of fields\"\r\n [ngClass]=\"utilityService.getFieldSyleClass(field)\">\r\n <dynamic-module-field-fix #fieldTemplate [field]=\"field\" [QueryEditorComponent]=\"QueryEditorComponent\" [form]=\"form\" [record]=\"record\" [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\"\r\n (recordChange)=\"onRecordChange()\">\r\n </dynamic-module-field-fix>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".visibility_hidden{display:none}.visibility_transparent{visibility:hidden}\n"], dependencies: [{ kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3.MatStep, selector: "mat-step", inputs: ["color"], exportAs: ["matStep"] }, { kind: "directive", type: i3.MatStepLabel, selector: "[matStepLabel]" }, { kind: "component", type: i3.MatStepper, selector: "mat-stepper, mat-vertical-stepper, mat-horizontal-stepper, [matStepper]", inputs: ["selectedIndex", "disableRipple", "color", "labelPosition", "headerPosition", "animationDuration"], outputs: ["animationDone"], exportAs: ["matStepper", "matVerticalStepper", "matHorizontalStepper"] }, { kind: "directive", type: i3.MatStepperNext, selector: "button[matStepperNext]", inputs: ["type"] }, { kind: "directive", type: i3.MatStepperPrevious, selector: "button[matStepperPrevious]", inputs: ["type"] }, { kind: "component", type: i4.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i4.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }, { kind: "directive", type: i5.MatAccordion, selector: "mat-accordion", inputs: ["multi", "hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i5.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i5.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "directive", type: i5.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i8.DynamicModuleFieldFixComponent, selector: "dynamic-module-field-fix", inputs: ["endPointConfiguration", "field", "form", "record", "inConfig", "QueryEditorComponent"], outputs: ["recordChange", "out"] }] });
@@ -573,4 +589,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
573
589
  type: ViewChildren,
574
590
  args: ["fieldTemplate"]
575
591
  }] } });
576
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWZvcm0tcmVjb3JkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9mb3JtLXJlY29yZHMvYWRkLWZvcm0tcmVjb3JkL2FkZC1mb3JtLXJlY29yZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1yZWNvcmRzL2FkZC1mb3JtLXJlY29yZC9hZGQtZm9ybS1yZWNvcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQWEsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNILE9BQU8sRUFBRSxXQUFXLEVBQWEsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDM0YsT0FBTyxFQUFRLGtCQUFrQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUVuRixPQUFPLEVBQTZDLGFBQWEsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBRTVILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7Ozs7OztBQU1wRSwyR0FBMkc7QUFPM0csTUFBTSxPQUFPLHNCQUFzQjtJQWlDakMsWUFDVSxHQUFzQixFQUN2QixjQUFvQztRQURuQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN2QixtQkFBYyxHQUFkLGNBQWMsQ0FBc0I7UUE3QnBDLFdBQU0sR0FBVyxJQUFJLENB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QyxNQUFNLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztnQkFDeEIsTUFBTSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7Z0JBQzFCLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUM5QyxJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUM7Z0JBQ2xCLElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUN0RCxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkIsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOztvSEE5bUJVLHNCQUFzQjt3R0FBdEIsc0JBQXNCLDZoQkN2Qm5DLGczSkFtR2M7NEZENUVELHNCQUFzQjtrQkFMbEMsU0FBUzsrQkFDRSxpQkFBaUI7MklBTWxCLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFFRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBRUksZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0csR0FBRztzQkFBWixNQUFNO2dCQWNQLGFBQWE7c0JBRFosWUFBWTt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgQW5zd2VyU3R5bGUsIEJhc2VGaWVsZCwgRmllbGRUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9iYXNlRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBGb3JtLCBGb3JtU2NhbGFyVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZm9ybS5tb2RlbCc7XHJcbmltcG9ydCB7IER5blJlY29yZCwgUmVjb3JkIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL3JlY29yZC5tb2RlbCc7XHJcbmltcG9ydCB7IFV0aWxpdHlIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0eUhlbHBlci5zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVGaWVsZEZpeENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2R5bmFtaWMtbW9kdWxlLWZpZWxkLWZpeC9keW5hbWljLW1vZHVsZS1maWVsZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBFbmRQb2ludENvbmZpZ3VyYXRpb24sIEVuZFBvaW50RGF0YVBhcmFtcywgUGFyYW1UeXBlRW51bSB9IGZyb20gJy4vLi4vLi4vLi4vLi4vbW9kZWxzL2VuZFBvaW50Q29uZmlndXJhdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IExpc3RWYWx1ZUZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9saXN0VmFsdWVGaWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IEdsb2JhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9nbG9iYWwuc2VydmljZSc7XHJcbmltcG9ydCB7IE51bWVyaWNGaWVsZCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvbnVtZXJpY0ZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgSW1hZ2VTZWxlY3RvckZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9pbWFnZVNlbGVjdG9yRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBEeW5BdHRhY2htZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2R5bkF0dGFjaG1lbnQnO1xyXG5pbXBvcnQgeyBEeW5hbWljTG9hZGVyRGlyZWN0aXZlRGF0YSwgZXZlbnRPdXQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vZGlyZWN0aXZlcy9keW5hbWljLWxvYWRlci9keW5hbWljLWxvYWRlci5kaXJlY3RpdmVcIjtcclxuXHJcbi8vIGltcG9ydCB7IER5bmFtaWNNb2R1bGVGaWVsZENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2R5bmFtaWMtbW9kdWxlLWZpZWxkL2R5bmFtaWMtbW9kdWxlLWZpZWxkLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJhZGQtZm9ybS1yZWNvcmRcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL2FkZC1mb3JtLXJlY29yZC5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9hZGQtZm9ybS1yZWNvcmQuY29tcG9uZW50LnNjc3NcIl0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBZGRGb3JtUmVjb3JkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgQElucHV0KCkgY29uZmlndXJhdGlvbnM6IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnO1xyXG4gIEBJbnB1dCgpIGVuZFBvaW50Q29uZmlndXJhdGlvbjogRW5kUG9pbnRDb25maWd1cmF0aW9uO1xyXG4gIEBJbnB1dCgpIHVzZXJJRDogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKSBmb3JtSUQ6IHN0cmluZyA9IG51bGw7IC8vIHByZXZpZXdcclxuICBASW5wdXQoKSBmb3JtOiBGb3JtID0gbnVsbDsgLy8gcHJldmlldyBjb25maWdcclxuICBASW5wdXQoKSByZWNvcmQ6IFJlY29yZCB8IHN0cmluZyA9IG51bGw7IC8vIGVkaXRcclxuICBASW5wdXQoKSBvbmx5VmlldzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGlzRHVwbGljYXRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaW5Db25maWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgUXVlcnlFZGl0b3JDb21wb25lbnQ6IER5bmFtaWNMb2FkZXJEaXJlY3RpdmVEYXRhOyAvLyBMJ2ludGVybyBjb21wb25lbnRlIHF1ZXJ5IEVkaXRvclxyXG5cclxuICBAT3V0cHV0KCkgc2F2ZVJlY29yZEV2ZW50OiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG4gIEBPdXRwdXQoKSBhZnRlclNhdmVSZWNvcmRFdmVudDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgb3V0OiBFdmVudEVtaXR0ZXI8ZXZlbnRPdXQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxldmVudE91dD4oKTtcclxuXHJcbiAgc2hvd1RpdGxlID0gdHJ1ZTtcclxuICBzaG93U2F2ZUJ1dHRvbiA9IHRydWU7XHJcbiAgc2hvd0JhY2tCdXR0b24gPSB0cnVlO1xyXG4gIGxvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzU2F2aW5nOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGZvcm1Gb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xyXG4gIGZpZWxkR3JvdXBzOiB7IFtrZXk6IHN0cmluZ106IEFycmF5PEJhc2VGaWVsZD4gfSA9IHt9O1xyXG4gIEZvcm1TY2FsYXJUeXBlRW51bSA9IEZvcm1TY2FsYXJUeXBlRW51bTtcclxuICBGaWVsZFR5cGVFbnVtID0gRmllbGRUeXBlRW51bTtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbihcImZpZWxkVGVtcGxhdGVcIilcclxuICBmaWVsZFRlbXBsYXRlOiBRdWVyeUxpc3Q8RHluYW1pY01vZHVsZUZpZWxkRml4Q29tcG9uZW50PjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwdWJsaWMgdXRpbGl0eVNlcnZpY2U6IFV0aWxpdHlIZWxwZXJTZXJ2aWNlXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAvLyBhZGQgcHXDsiBmdW56aW9uYXJlIGFuY2hlIGNvbWUgbW9kaWZpY2EgZSBjb21lIHByZXZpZXdcclxuICAgIC8vIGluIGFkZCBhYmJpYW1vIGluIGlucHV0IGwnSUQgZGVsIEZvcm1cclxuICAgIC8vIGluIG1vZGlmaWNhIGFiYmlhbW8gaW4gaW5wdXQgbCdJRCBkZWwgUmVjb3JkXHJcbiAgICAvLyBpbiBwcmV2aWV3IGFiYmlhbW8gaW4gaW5wdXQgaWwgRm9ybShjYXNvIGNvbmZpZ3VyYXRvcikgbyBsJ0lEIGRlbCBtb2R1bG8gb24gb25seVZpZXcgaW1wb3N0YXRvIGEgdHJ1ZVxyXG4gICAgdGhpcy5zaG93VGl0bGUgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLnNob3dUaXRsZTtcclxuICAgIHRoaXMuc2hvd1NhdmVCdXR0b24gPSB0aGlzLmNvbmZpZ3VyYXRpb25zLnNob3dTYXZlQnV0dG9uO1xyXG4gICAgdGhpcy5zaG93QmFja0J1dHRvbiA9IHRoaXMuY29uZmlndXJhdGlvbnMuc2hvd0JhY2tCdXR0b247XHJcblxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIkFkZEZvcm1SZWNvcmRcIilcclxuXHJcbiAgICBpZiAodGhpcy5yZWNvcmQgPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnNob3dUaXRsZSA9IHRydWU7XHJcbiAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJBZGRGb3JtUmVjb3JkIC0gbmV3XCIpXHJcbiAgICAgIHRoaXMucHJldmlld09yTmV3UmVzcG9uc2VSZWNvcmQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2hvd1RpdGxlID0gZmFsc2U7XHJcbiAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJBZGRGb3JtUmVjb3JkIC0gZWRpdFwiLCB0aGlzLnJlY29yZClcclxuICAgICAgdGhpcy5lZGl0UmVzcG9uc2VSZWNvcmQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBsJ2luaXppYWxpenphemlvbmUgdGVybWluYSBjb24gaWwgcmVjdXBlcm8gZGVsIHJlY29yZCBvIGNvbiBsJ2luaXppYWxpenphemlvbmUgZGVsIGZvcm0gdnVvdG9cclxuXHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdvbmluaXQgLSBEeW5hRm9ybScsIHRoaXMuZm9ybSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBpbnZvY2F0byBhbCBjYW1iaW8gZGVsIHZhbG9yZSBkaSBvZ25pIHByb3ByaWV0w6AgZGVsbCdvZ2dldHRvIHJlY29yZC5cclxuICAgKiBTZXJ2ZSBhZCBhZ2dpb3JuYXJlIGlsIHZhbG9yZSBkaSB0dXR0aSBpIGNhbXBpIGNoZSBoYW5ubyB1bmEgZm9ybXVsYS5cclxuICAgKi9cclxuICBvblJlY29yZENoYW5nZSgpIHtcclxuICAgIGlmICh0aGlzLmZpZWxkVGVtcGxhdGUgJiYgdGhpcy5maWVsZFRlbXBsYXRlLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5maWVsZFRlbXBsYXRlLmZvckVhY2goKGYpID0+IGYudXBkYXRlRmllbGQoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcmV2aWV3T3JOZXdSZXNwb25zZVJlY29yZCgpIHtcclxuICAgIHRoaXMucmVjb3JkID0gbmV3IFJlY29yZCgpO1xyXG4gICAgLy8gYWdnaXVnbmkgbnVvdm9cclxuICAgIGlmICh0aGlzLmZvcm0gIT0gbnVsbCkge1xyXG4gICAgICAvLyBwcmV2aWV3IHBlciBpbCBjb25maWd1cmF0b3JcclxuICAgICAgdGhpcy5maWVsZHNDb25maWcoKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5mb3JtSUQgIT0gbnVsbCkge1xyXG4gICAgICAvLyBwcmV2aWV3IHBlciBhZG1pblxyXG4gICAgICB0aGlzLmdldEZvcm1CeUlEKCk7IC8vIGRlbnRybyBjaGlhbWEgZmllbGRzQ29uZmlnXHJcbiAgICB9XHJcbiAgfVxyXG4gIGVkaXRSZXNwb25zZVJlY29yZCgpIHtcclxuICAgIFxyXG4gICAgLy8gbW9kaWlsdMOgIG1vZGlmaWNhXHJcbiAgICBpZiAodHlwZW9mIHRoaXMucmVjb3JkID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIC8vIGFsbG9yYSDDqCB1biBJRFxyXG4gICAgICB0aGlzLmdldFJlY29yZEJ5SUQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGlsIHJlY29yZCB2aWVuZSBwYXNzYXRvIGNvbWUgdGFsZVxyXG4gICAgICAvLyAoPFJlY29yZD50aGlzLnJlY29yZCkuRW50SUQgPSBcIjNcIjtcclxuICAgICAgLy8gKDxSZWNvcmQ+dGhpcy5yZWNvcmQpLlZlcnNpb247XHJcbiAgICAgIHRoaXMuZ2V0Rm9ybUJ5SURhbmRWZXJzaW9uKHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzYWx2YXJlIGkgZGF0aSBpbnNlcml0aSBkYWxsJ3V0ZW50ZSB1bmEgdm9sdGEgY29uY2x1c2EgbGEgY29tcGlsYXppb25lIGRlbGxhIGZvcm0uXHJcbiAgICovXHJcbiAgc2F2ZU9yRXhpdEZvcm0oZXhpdDogYm9vbGVhbikge1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnYWRkLWZvcm0tcmVjb3JkIHNhdmVSZWNvcmRFdmVudCcpXHJcbiAgICBpZiAoZXhpdCkge1xyXG4gICAgICAvLyB0aGlzLnNhdmVSZWNvcmRFdmVudC5lbWl0KG51bGwpO1xyXG4gICAgICB0aGlzLm9uU2F2ZVJlY29yZChudWxsKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIHRoaXMuc2F2ZVJlY29yZEV2ZW50LmVtaXQodGhpcy5yZWNvcmQpO1xyXG4gICAgICB0aGlzLmlzU2F2aW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5vblNhdmVSZWNvcmQoKDxSZWNvcmQ+dGhpcy5yZWNvcmQpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgc2FsdmFyZSBpbCByZWNvcmQgYWdnaXVudG8gbyBtb2RpZmljYXRvLlxyXG4gICAqIFNlIMOoIHN0YXRvIGNvbmZpZ3VyYXRvIHVuIGVuZFBvaW50IHBlciBpbCBzYWx2YXRhZ2dpbyB2aWVuZSBlZmZldHR1YXRhIHVuYSBjaGlhbWF0YSBhbCBzZXJ2ZXIgcGFzc2FuZG8gbCdvZ2dldG8gZGEgc2FsdmFyZVxyXG4gICAqIG5lbCBib2R5IGRlbGxhIGNoaWFtYXRhLCBhbHRyaW1lbnRpIHNjYXRlbmEgbCdldmVudG8gXCJzYXZlUmVjb3JkXCIuXHJcbiAgICogQHBhcmFtIGV2ZW50IE9nZ2V0dG8gZGkgdGlwbyBSZWNvcmQgZGEgc2FsdmFyZS5cclxuICAgKi9cclxuICBhc3luYyBvblNhdmVSZWNvcmQoZXZlbnQ6IFJlY29yZCkge1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnb25TYXZlUmVjb3JkIC0gZXZlbnQnLCBldmVudClcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ29uU2F2ZVJlY29yZCAtIGZvcm0nLCB0aGlzLmZvcm0pXHJcbiAgICBpZiAoXHJcbiAgICAgIGV2ZW50ICE9IG51bGwgJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gIT0gbnVsbCAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLlNhdmVFbmRQb2ludFxyXG4gICAgKSB7XHJcbiAgICAgIHZhciBkeW5SZWM6IER5blJlY29yZCA9IG5ldyBEeW5SZWNvcmQoKTtcclxuICAgICAgZHluUmVjLklEID0gZXZlbnQuSUQgPz8gbnVsbDtcclxuICAgICAgZHluUmVjLkVudElEID0gdGhpcy5mb3JtLklEO1xyXG4gICAgICBkeW5SZWMuVmVyc2lvbiA9IHRoaXMuZm9ybS5WZXJzaW9uO1xyXG4gICAgICBkeW5SZWMudXNlcklEID0gdGhpcy51c2VySUQ7XHJcbiAgICAgIGR5blJlYy5WYWx1ZXMgPSBldmVudCA/PyBudWxsO1xyXG4gICAgICBkeW5SZWMuSFRNTHJlYWRhYmxlVmFsdWVzID0gYXdhaXQgdGhpcy5jcmVhdGVIVE1McmVhZGFibGVWYWx1ZXMoZXZlbnQpO1xyXG5cclxuICAgICAgaWYgKGV2ZW50LkZLX0luc2VydFVzZXIgPT0gbnVsbCl7XHJcbiAgICAgICAgLy8gTnVvdm8gUmVjb3JkXHJcbiAgICAgICAgZHluUmVjLkZLX0luc2VydFVzZXIgPSB0aGlzLnVzZXJJRDtcclxuICAgICAgICBkeW5SZWMuSW5zZXJ0RGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgZHluUmVjLkZLX1VwZGF0ZVVzZXIgPSB0aGlzLnVzZXJJRDtcclxuICAgICAgICBkeW5SZWMuVXBkYXRlRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gTW9kaWZpY2EgZGVsIFJlY29yZFxyXG4gICAgICAgIGR5blJlYy5GS19JbnNlcnRVc2VyID0gZXZlbnQuRktfSW5zZXJ0VXNlclxyXG4gICAgICAgIGR5blJlYy5JbnNlcnREYXRlID0gZXZlbnQuSW5zZXJ0RGF0ZTtcclxuICAgICAgICBkeW5SZWMuRktfVXBkYXRlVXNlciA9IHRoaXMudXNlcklEO1xyXG4gICAgICAgIGR5blJlYy5VcGRhdGVEYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIGFkZGl0aW9uYWxQYXJhbXMgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmFkZGl0aW9uYWxQYXJhbXMgPT0gbnVsbCA/IGV2ZW50LkFkZGl0aW9uYWxQYXJhbXMgOiB0aGlzLmNvbmZpZ3VyYXRpb25zLmFkZGl0aW9uYWxQYXJhbXM7XHJcbiAgICAgIGR5blJlYy5BZGRpdGlvbmFsUGFyYW1zID0gSlNPTi5zdHJpbmdpZnkoYWRkaXRpb25hbFBhcmFtcyk7XHJcblxyXG4gICAgICAvLyB2YXIgYWRkaXRpb25hbEluZm8gPSB0aGlzLmFkZGl0aW9uYWxJbmZvID09IG51bGwgPyBldmVudC5BZGRpdGlvbmFsSW5mbyA6IHRoaXMuYWRkaXRpb25hbEluZm87XHJcbiAgICAgIHZhciBhZGRpdGlvbmFsSW5mbyA9IGV2ZW50LkFkZGl0aW9uYWxJbmZvID09IG51bGwgPyB0aGlzLmNvbmZpZ3VyYXRpb25zLmFkZGl0aW9uYWxJbmZvIDogZXZlbnQuQWRkaXRpb25hbEluZm87XHJcbiAgICAgIGR5blJlYy5BZGRpdGlvbmFsSW5mbyA9IEpTT04uc3RyaW5naWZ5KGFkZGl0aW9uYWxJbmZvKTtcclxuXHJcbiAgICAgIHZhciBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFBhcmFtTmFtZTogXCJSZWNvcmRcIixcclxuICAgICAgICAgIFBhcmFtVmFsdWU6IGR5blJlYyxcclxuICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIkluIEJvZHlcIl0sXHJcbiAgICAgICAgfSxcclxuICAgICAgXTtcclxuXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdvblNhdmVSZWNvcmQgLSBkeW5hbWljTW9kdWxlUGFyYW1zJywgZHluYW1pY01vZHVsZVBhcmFtcylcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5TYXZlRW5kUG9pbnQsXHJcbiAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAocmVzKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmFmdGVyU2F2ZVJlY29yZEV2ZW50LmVtaXQoZXZlbnQpO1xyXG4gICAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2F2ZVJlY29yZEV2ZW50LmVtaXQoZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Rm9ybUJ5SUQoaWQ6IHN0cmluZyA9IHRoaXMuZm9ybUlEKSB7XHJcbiAgICBjb25zdCBkeW5hbWljTW9kdWxlUGFyYW1zOiBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+ID1cclxuICAgICAgbmV3IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4oKTtcclxuICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMucHVzaCh7XHJcbiAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICBQYXJhbVZhbHVlOiBpZCxcclxuICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICB9KTtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlERW5kUG9pbnQsXHJcbiAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgIChyZXM6IEZvcm0pID0+IHtcclxuICAgICAgICB0aGlzLmZvcm0gPSByZXM7XHJcbiAgICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnZ2V0Rm9ybUJ5SUQgLSBEeW5hRm9ybScsIHRoaXMuZm9ybSlcclxuICAgICAgICB0aGlzLmZpZWxkc0NvbmZpZygpO1xyXG4gICAgICB9LFxyXG4gICAgICAoZXJyKSA9PiB7IH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyBjaSBlbnRybyBzb2xvIHNlIMOoIHN0YXRvIHBhc3NhdG8gaWwgcGFyYW1ldHJvIFwicmVjb3JkXCIgY29tZSBzdHJpbmdhXHJcbiAgZ2V0UmVjb3JkQnlJRCgpIHtcclxuXHJcbiAgICAvLyBwcmVwYXJvIGkgZGF0aSBkZWwgcmVjb3JkXHJcbiAgICB2YXIgZHluYW1pY1JlY29yZFBhcmFtcyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgIFBhcmFtVmFsdWU6IHRoaXMucmVjb3JkLFxyXG4gICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgZHluYW1pY1JlY29yZFBhcmFtcyxcclxuICAgICAgKHJlczogRHluUmVjb3JkKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZWNvcmQgPSBuZXcgUmVjb3JkKCk7XHJcblxyXG4gICAgICAgICg8UmVjb3JkPnRoaXMucmVjb3JkKSA9IEpTT04ucGFyc2UocmVzLlNlcmlhbGl6ZWRWYWx1ZXMpO1xyXG4gICAgICAgIHRoaXMucmVjb3JkLklEID0gdGhpcy5pc0R1cGxpY2F0ZSA/IFwiXCIgOiByZXMuSUQ7XHJcbiAgICAgICAgdGhpcy5yZWNvcmQuRW50SUQgPSByZXMuRW50SUQ7XHJcbiAgICAgICAgdGhpcy5yZWNvcmQudXNlcklEID0gcmVzLnVzZXJJRDtcclxuICAgICAgICB0aGlzLnJlY29yZC5WZXJzaW9uID0gcmVzLlZlcnNpb247XHJcbiAgICAgICAgdGhpcy5yZWNvcmQuVmFsdWVzID0gSlNPTi5wYXJzZShyZXMuU2VyaWFsaXplZFZhbHVlcyk7XHJcbiAgICAgICAgdGhpcy5yZWNvcmQuRktfSW5zZXJ0VXNlciA9IHJlcy5GS19JbnNlcnRVc2VyO1xyXG4gICAgICAgIHRoaXMucmVjb3JkLkZLX1VwZGF0ZVVzZXIgPSByZXMuRktfVXBkYXRlVXNlcjtcclxuICAgICAgICB0aGlzLnJlY29yZC5JbnNlcnREYXRlID0gcmVzLkluc2VydERhdGU7XHJcbiAgICAgICAgdGhpcy5yZWNvcmQuVXBkYXRlRGF0ZSA9IHJlcy5VcGRhdGVEYXRlO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIHRoaXMudmlld01vZGUgPSBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkNPTVBJTEU7XHJcbiAgICAgICAgLy8gdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZ2V0Rm9ybUJ5SURhbmRWZXJzaW9uKCk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG4gIGdldEZvcm1CeUlEYW5kVmVyc2lvbihnZXRBdHRhY2htZW50czogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAvLyBwcmVwYXJvIGxhIHZlcnNpb25lIGNvcnJldHRhIGRlbCBmb3JtXHJcbiAgICB2YXIgZHluYW1pY01vZHVsZVBhcmFtcyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJFbnRJRFwiLFxyXG4gICAgICAgIFBhcmFtVmFsdWU6ICg8UmVjb3JkPnRoaXMucmVjb3JkKS5FbnRJRCxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJWZXJzaW9uXCIsXHJcbiAgICAgICAgUGFyYW1WYWx1ZTogKDxSZWNvcmQ+dGhpcy5yZWNvcmQpLlZlcnNpb24sXHJcbiAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImdldEZvcm1CeUlEYW5kVmVyc2lvbiAtIHRoaXMgcmVjb3JkXCIsIDxSZWNvcmQ+dGhpcy5yZWNvcmQpXHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREFuZFZlcnNpb25FbmRQb2ludCxcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgKHJlczogRm9ybSkgPT4ge1xyXG4gICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJBRlRFUiBnZXRGb3JtQnlJRGFuZFZlcnNpb24gLSB0aGlzLmZvcm1cIiwgcmVzKVxyXG4gICAgICAgIHRoaXMuZm9ybSA9IHJlcztcclxuXHJcbiAgICAgICAgdGhpcy5jcmVhdGVSZWNvcmRQcm9wZXJ0aWVzKCk7XHJcbiAgICAgICAgdGhpcy5yZW9yZGVyRm9ybUZpZWxkcygpO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRm9ybUdyb3VwKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybS5Gb3JtU2NhbGFyVHlwZSAhPSBGb3JtU2NhbGFyVHlwZUVudW0uU2VtcGxpY2UpIHtcclxuICAgICAgICAgIHRoaXMuY3JlYXRlRmllbGRHcm91cHMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghZ2V0QXR0YWNobWVudHMpe1xyXG4gICAgICAgICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmdldEFsbFJlY29yZEF0dGFjaG1lbnRzKCg8UmVjb3JkPnRoaXMucmVjb3JkKS5JRCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsUmVjb3JkQXR0YWNobWVudHMocmVjb3JkSUQ6IHN0cmluZyl7XHJcblxyXG4gICAgdmFyIGR5bmFtaWNNb2R1bGVQYXJhbXMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBQYXJhbU5hbWU6IFwiYW5zd2VySWRcIixcclxuICAgICAgICBQYXJhbVZhbHVlOiByZWNvcmRJRCxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfVxyXG4gICAgXTtcclxuXHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRBbGxBdHRhY2htZW50c0VuZFBvaW50LFxyXG4gICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAocmVzOiBBcnJheTxEeW5BdHRhY2htZW50PikgPT4ge1xyXG4gICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJHZXRBbGxBdHRhY2htZW50c0VuZFBvaW50KClcIiwgcmVzKTtcclxuXHJcbiAgICAgICAgdGhpcy5mb3JtLkZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW0uSW1tYWdpbmUgfHwgZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bJ0ltbWFnaW5lIGNvbiBtYXJrZXJzJ10pe1xyXG4gICAgICAgICAgICAgIHZhciBhdHRhY2hJZCA9IHRoaXMucmVjb3JkW2ZpZWxkLk5hbWVdO1xyXG4gICAgICAgICAgICAgIHRoaXMucmVjb3JkW2ZpZWxkLk5hbWVdID0gcmVzLmZpbmQoeCA9PiB4LklEID09IGF0dGFjaElkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gIH1cclxuXHJcbiAgZmllbGRzQ29uZmlnKCkge1xyXG4gICAgdGhpcy5jcmVhdGVSZWNvcmRQcm9wZXJ0aWVzKCk7XHJcbiAgICB0aGlzLnJlb3JkZXJGb3JtRmllbGRzKCk7XHJcbiAgICB0aGlzLmNyZWF0ZUZvcm1Hcm91cCgpO1xyXG4gICAgaWYgKHRoaXMuZm9ybS5Gb3JtU2NhbGFyVHlwZSAhPSBGb3JtU2NhbGFyVHlwZUVudW0uU2VtcGxpY2UpIHtcclxuICAgICAgdGhpcy5jcmVhdGVGaWVsZEdyb3VwcygpO1xyXG4gICAgfVxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImZpZWxkc0NvbmZpZyAtIGZvcm1cIiwgdGhpcy5mb3JtKTtcclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY3JlYXJlIG5lbGwnb2dnZXR0byBSZWNvcmQgbGUgcHJvcHJpZXTDoCBtYW5jYW50aSByaXNwZXR0byBhaSBjYW1waSBjaGUgY29tcG9uZ29ubyBsYSBmb3JtLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlUmVjb3JkUHJvcGVydGllcygpIHtcclxuICAgIGNvbnN0IHJlY29yZFByb3BlcnRpZXM6IEFycmF5PHN0cmluZz4gPSBPYmplY3Qua2V5cyh0aGlzLnJlY29yZCk7XHJcbiAgICB0aGlzLmZvcm0uRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgICAgIGlmICghcmVjb3JkUHJvcGVydGllcy5maW5kKChwKSA9PiBwID09PSBmaWVsZC5OYW1lKSkge1xyXG4gICAgICAgIHRoaXMucmVjb3JkW2ZpZWxkLk5hbWVdID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAodGhpcy5mb3JtLklubmVyRm9ybXMgJiYgdGhpcy5mb3JtLklubmVyRm9ybXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmZvcm0uSW5uZXJGb3Jtcy5mb3JFYWNoKChmb3JtKSA9PiB7XHJcbiAgICAgICAgY29uc3QgYXJyYXlOYW1lOiBzdHJpbmcgPSBmb3JtLk5hbWUuc3BsaXQoXCIgXCIpLmpvaW4oXCJfXCIpO1xyXG4gICAgICAgIGlmICghcmVjb3JkUHJvcGVydGllcy5maW5kKChwKSA9PiBwID09PSBhcnJheU5hbWUpKSB7XHJcbiAgICAgICAgICB0aGlzLnJlY29yZFthcnJheU5hbWVdID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjcmVhdGVSZWNvcmRQcm9wZXJ0aWVzIC0gZm9ybVwiLCB0aGlzLmZvcm0pO1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImNyZWF0ZVJlY29yZFByb3BlcnRpZXMgLSByZWNvcmRcIiwgdGhpcy5yZWNvcmQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByaW9yZGluYXJlIGkgY2FtcGkgY2hlIGNvbXBvbmdvbm8gbGEgZm9ybS5cclxuICAgKi9cclxuICBwcml2YXRlIHJlb3JkZXJGb3JtRmllbGRzKCkge1xyXG4gICAgaWYgKHRoaXMuZm9ybS5GaWVsZHMgJiYgdGhpcy5mb3JtLkZpZWxkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5GaWVsZHMuc29ydCgoYSwgYikgPT5cclxuICAgICAgICBhLk9yZGluYWxQb3NpdGlvbiA+IGIuT3JkaW5hbFBvc2l0aW9uID8gMSA6IGIuT3JkaW5hbFBvc2l0aW9uID4gYS5PcmRpbmFsUG9zaXRpb24gPyAtMSA6IDApO1xyXG4gICAgfVxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcInJlb3JkZXJGb3JtRmllbGRzIC0gZm9ybVwiLCB0aGlzLmZvcm0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjcmVhcmUgaWwgRm9ybUdyb3VwIGNoZSByYXBwcmVzZW50YSBsYSBmb3JtLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlRm9ybUdyb3VwKCkge1xyXG4gICAgdGhpcy5mb3JtRm9ybSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuQ3JlYXRlRm9ybUZvcm1Hcm91cChcclxuICAgICAgdGhpcy5mb3JtLkZpZWxkcyxcclxuICAgICAgKDxSZWNvcmQ+dGhpcy5yZWNvcmQpLFxyXG4gICAgICB0aGlzLm9ubHlWaWV3XHJcbiAgICApO1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImNyZWF0ZUZvcm1Hcm91cCAtIGZvcm1cIiwgdGhpcy5mb3JtKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY3JlYXJlIGkgZ3J1cHBpIGluIGN1aSByYWdncnVwcGFyZSBpIGNhbXBpIGRlbGxhIGZvcm0gaW4gYmFzZVxyXG4gICAqIGEgY29tZSDDqCBzdGF0YSBjb25maWd1cmF0YSBkYWxsJ3V0ZW50ZS5cclxuICAgKi9cclxuICBwcml2YXRlIGNyZWF0ZUZpZWxkR3JvdXBzKCkge1xyXG4gICAgdGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHMuc29ydCgoYSwgYikgPT4gYS5PcmRpbmFsUG9zaXRpb24gPiBiLk9yZGluYWxQb3NpdGlvbiA/IDEgOiBiLk9yZGluYWxQb3NpdGlvbiA+IGEuT3JkaW5hbFBvc2l0aW9uID8gLTEgOiAwKVxyXG4gICAgICAubWFwKChnKSA9PiBnLk5hbWUpXHJcbiAgICAgIC5mb3JFYWNoKChncm91cE5hbWUpID0+IHtcclxuICAgICAgICB0aGlzLmZpZWxkR3JvdXBzW2dyb3VwTmFtZV0gPSB0aGlzLmZvcm0uRmllbGRzLmZpbHRlcihcclxuICAgICAgICAgIChmKSA9PiBmLkZpZWxkR3JvdXAgPT0gZ3JvdXBOYW1lXHJcbiAgICAgICAgKTtcclxuICAgICAgfSk7XHJcbiAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjcmVhdGVGaWVsZEdyb3VwcyAtIGZvcm1cIiwgdGhpcy5mb3JtKTtcclxuICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY3JlYXJlIGlsIEZvcm1Hcm91cCBjaGUgcmFwcHJlc2VudGEgbGEgZm9ybS5cclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIGNyZWF0ZUhUTUxyZWFkYWJsZVZhbHVlcyhyZWNvcmQ6IFJlY29yZCkge1xyXG5cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjcmVhdGVIVE1McmVhZGFibGVWYWx1ZXMgLSByZWNvcmRcIiwgcmVjb3JkKTtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjcmVhdGVIVE1McmVhZGFibGVWYWx1ZXMgLSBmb3JtXCIsIHRoaXMuZm9ybSk7XHJcblxyXG4gICAgdmFyIGZvcm1uYW1lcyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XHJcbiAgICB0aGlzLmZvcm0uRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7Zm9ybW5hbWVzLnB1c2goZmllbGQuTmFtZSk7fSk7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY3JlYXRlSFRNTHJlYWRhYmxlVmFsdWVzIC0gZm9ybSBmaWVsZHMgbmFtZXNcIiwgZm9ybW5hbWVzKTtcclxuXHJcbiAgICAvLyBhbGVydChcImNvbnRpbnVlIGZvciB2YWx1ZXM/XCIpXHJcblxyXG4gICAgbGV0IG91dHB1dFZhbHVlc0FycmF5ID0gYXdhaXQgdGhpcy5nZXRSZXNwb25zZVZhbHVlcyhyZWNvcmQsIHRoaXMuZm9ybSk7XHJcbiAgICBcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjcmVhdGVIVE1McmVhZGFibGVWYWx1ZXMgLSBvdXRwdXRWYWx1ZXNBcnJheVwiLCBvdXRwdXRWYWx1ZXNBcnJheSk7XHJcblxyXG4gICAgLy8gYWxlcnQoXCJjb250aW51ZSBmb3IgdGVtcGxhdGVzP1wiKVxyXG4gICAgbGV0IHRlbXBsYXRlOiBzdHJpbmcgPSB0aGlzLmdldFJlc3BvbnNlVGVtcGxhdGUocmVjb3JkLCB0aGlzLmZvcm0pOyAvLyBvZ2dldHRvIG5lbCBxdWFsZSB2aWVuZSBjb3N0cnVpdG8gaWwgdGVtcGxhdGUgbyBjaGUgcHJlbmRlIGlsIHZhbG9yZSBkYSB1biB0ZW1wbGF0ZSBlc3Rlcm5vXHJcbiAgICBcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjcmVhdGVIVE1McmVhZGFibGVWYWx1ZXMgLSB0ZW1wbGF0ZVwiLCB0ZW1wbGF0ZSk7XHJcbiAgICAvLyBhbGVydChcImNvbnRpbnVlIGZvciBvdXRwdXQ/XCIpXHJcbiAgICBjb25zdCByZWdleCA9IC8jIyhbXFx3XSspIyMvZztcclxuICAgIGNvbnN0IG91dHB1dCA9IHRoaXMucmVwbGFjZVRlbXBsYXRlUGxhY2Vob2xkZXJzV2l0aFZhbHVlcyh0ZW1wbGF0ZSwgb3V0cHV0VmFsdWVzQXJyYXksIHJlZ2V4KVxyXG5cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjcmVhdGVIVE1McmVhZGFibGVWYWx1ZXMgLSBvdXRwdXRcIiwgb3V0cHV0KTtcclxuICAgIC8vIGFsZXJ0KFwiY29udGludWUgZm9yIGVuZGluZz9cIilcclxuICAgIHJldHVybiBvdXRwdXQ7IC8vIG9nZ2V0dG8gY2hlIGNvbnRlcnLDoCBsJ291dHB1dCBlbGFib3JhdG8gICAgXHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRSZXNwb25zZVZhbHVlcyhyZWNvcmQ6IFJlY29yZCwgZm9ybTogRm9ybSkge1xyXG4gICAgbGV0IG91dHB1dFZhbHVlc0FycmF5OiBBcnJheTxhbnk+ID0gW107IC8vIGFycmF5IGNvbiBpIHZhbG9yaSBkZWxsZSByaXNwb3N0ZVxyXG4gICAgLy8oPER5blJlY29yZD50aGlzLnJlY29yZCkuVmFsdWVzIMOoIGxhIGxpc3RhIGRpIG9nZ2V0dGkge2ZpZWxkTmFtZTogdmFsb3JlfVxyXG4gICAgLy8gR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIihyZWNvcmQpLlZhbHVlc1wiLCByZWNvcmQpO1xyXG5cclxuICAgIGZvcm0uRmllbGRzLmZvckVhY2goXHJcbiAgICAgIGFzeW5jIChmaWVsZCkgPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJnZXRSZXNwb25zZVZhbHVlcyBmaWVsZFwiLCBmaWVsZCk7XHJcbiAgICAgICAgICAvLyBsZXQgZm91bmRPYmplY3QgPSByZWNvcmQuZmluZChcclxuICAgICAgICAgIC8vICAgKG9iaikgPT4gb2JqID09PSBmaWVsZC5OYW1lXHJcbiAgICAgICAgICAvLyApO1xyXG4gICAgICAgICAgbGV0IGZvdW5kT2JqZWN0ID0gcmVjb3JkW2ZpZWxkLk5hbWVdO1xyXG5cclxuICAgICAgICAgIC8vIGZhcmUgdW4gZXZhbCBwZXIgcG9wb2xhcmUgaSB2YWx1ZVBhaXJzIHNlIMOoIHByZXNlbnRlIHVuYSBmb3JtdWxhXHJcbiAgICAgICAgICAvLyBwcmVuZGVyZSBsYSBsYWJlbCBjb3JyZXR0YVxyXG4gICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgICAgICAgIC8vIFBSRVBBUk8gSUwgVkFMVUVQQUlSU1xyXG4gICAgICAgICAgc3dpdGNoKGZpZWxkLkZpZWxkVHlwZSl7XHJcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkVsZW5jbyBnZW5lcmljb1wiXTp7ICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICBpZiAoZmllbGQuRm9ybXVsYSAhPSBudWxsICYmIGZpZWxkLkZvcm11bGEpIHtcclxuICAgICAgICAgICAgICAgIC8vIGFnZ2l1bmdvIGEgdmFsdWVwYWlycyBpIHZhbG9yaSBjYWxjb2xhdGlcclxuICAgICAgICAgICAgICAgIC8vICg8TGlzdFZhbHVlRmllbGQ+Zm91bmRPYmplY3QpLlZhbHVlUGFpcnMgPSAoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzID8gKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlycyA6IHt9O1xyXG4gICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYShcclxuICAgICAgICAgICAgICAgICAgZmllbGQuRm9ybXVsYSxcclxuICAgICAgICAgICAgICAgICAgcmVjb3JkLFxyXG4gICAgICAgICAgICAgICAgICBudWxsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQga2V5MiBpbiB0ZW1wKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChVdGlsaXR5SGVscGVyU2VydmljZS5pc051bWVyaWModGVtcFtrZXkyXSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAoPExpc3RWYWx1ZUZpZWxkPmZpZWxkKS5WYWx1ZVBhaXJzW051bWJlcihrZXkyKV0gPSB0ZW1wW2tleTJdO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICg8TGlzdFZhbHVlRmllbGQ+ZmllbGQpLlZhbHVlUGFpcnNba2V5Ml0gPSB0ZW1wW2tleTJdO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBvdXRwdXRWYWx1ZXNBcnJheVtmaWVsZC5OYW1lXSA9ICg8TGlzdFZhbHVlRmllbGQ+ZmllbGQpLlZhbHVlUGFpcnNbcmVjb3JkW2ZpZWxkLk5hbWVdXTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKCg8TGlzdFZhbHVlRmllbGQ+ZmllbGQpLlZhbHVlUGFpcnMgIT0gbnVsbCAmJiAoPExpc3RWYWx1ZUZpZWxkPmZpZWxkKS5WYWx1ZVBhaXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIC8vIHZhIGJlbmUgY29zw6xcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKCg8TGlzdFZhbHVlRmllbGQ+ZmllbGQpLlZhbHVlU3RyaW5nICE9IG51bGwgJiYgKDxMaXN0VmFsdWVGaWVsZD5maWVsZCkuVmFsdWVTdHJpbmcgIT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgLy8gdmEgcHJlc2EgbGEgc3RyaWduYSBlIHJpbWFwcGF0YSBuZWwgZGlhcmlvXHJcbiAgICAgICAgICAgICAgICAoPExpc3RWYWx1ZUZpZWxkPmZpZWxkKS5WYWx1ZVBhaXJzID0gR2xvYmFsU2VydmljZS5zdHJpbmdUb1ZhbHVlUGFpcnMoKDxMaXN0VmFsdWVGaWVsZD5maWVsZCkuVmFsdWVTdHJpbmcpO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgbGV0IGludmVydGVkID0ge307XHJcbiAgICAgICAgICAgICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlyc1wiLCAoPExpc3RWYWx1ZUZpZWxkPmZpZWxkKS5WYWx1ZVBhaXJzKTtcclxuICAgICAgICAgICAgICAvLyBWYWx1ZVBhaXJzOiB7U2k6ICdTaScsIE5vOiAnTm8nfVxyXG4gICAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiAoPExpc3RWYWx1ZUZpZWxkPmZpZWxkKS5WYWx1ZVBhaXJzKSB7XHJcbiAgICAgICAgICAgICAgICBpbnZlcnRlZFsoPExpc3RWYWx1ZUZpZWxkPmZpZWxkKS5WYWx1ZVBhaXJzW2tleV1dID0ga2V5O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAoPExpc3RWYWx1ZUZpZWxkPmZpZWxkKS5WYWx1ZVBhaXJzID0gaW52ZXJ0ZWQ7XHJcbiAgICAgICAgICAgICAgaWYocmVjb3JkW2ZpZWxkLk5hbWVdICE9IG51bGwgJiYgKDxMaXN0VmFsdWVGaWVsZD5maWVsZCkuSXNNdWx0aUNob2ljaGUpe1xyXG4gICAgICAgICAgICAgICAgLy8gY2FzbyBNVUxUSVNDRUxUQVxyXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIHJlY29yZFtmaWVsZC5OYW1lXS5mb3JFYWNoKChlbGVtZW50LCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHZhbHVlICs9ICg8TGlzdFZhbHVlRmllbGQ+ZmllbGQpLlZhbHVlUGFpcnNbZWxlbWVudF07XHJcbiAgICAgICAgICAgICAgICAgIHZhbHVlICs9IGkgPT0gcmVjb3JkW2ZpZWxkLk5hbWVdLmxlbmd0aCAtMSA/IFwiXCI6IFwiLCBcIlxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXRWYWx1ZXNBcnJheVtmaWVsZC5OYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXRWYWx1ZXNBcnJheVtmaWVsZC5OYW1lXSA9ICg8TGlzdFZhbHVlRmllbGQ+ZmllbGQpLlZhbHVlUGFpcnNbcmVjb3JkW2ZpZWxkLk5hbWVdXTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIm91dHB1dFZhbHVlc0FycmF5XCIsIG91dHB1dFZhbHVlc0FycmF5KVxyXG5cclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQ2FtcG8gbnVtZXJpY29cIl06e1xyXG4gICAgICAgICAgICAgIGlmKCg8TnVtZXJpY0ZpZWxkPmZpZWxkKS5Jc0ludGVnZXIpe1xyXG4gICAgICAgICAgICAgICAgaWYoKDxOdW1lcmljRmllbGQ+ZmllbGQpLkRlY2ltYWxTZXBhcmF0b3IgPT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgIG91dHB1dFZhbHVlc0FycmF5W2ZpZWxkLk5hbWVdID0gcmVjb3JkW2ZpZWxkLk5hbWVdO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgb3V0cHV0VmFsdWVzQXJyYXlbZmllbGQuTmFtZV0gPSByZWNvcmRbZmllbGQuTmFtZV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG91dHB1dFZhbHVlc0FycmF5W2ZpZWxkLk5hbWVdID0gcmVjb3JkW2ZpZWxkLk5hbWVdO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bVsnSW1tYWdpbmUnXTp7XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgLy8gUmVjdXBlcm8gaWwgQkFTRTY0IGRlbGwnaW1tYWdpbmUgUmVzaXplZCB2aWEgcHJvbWlzZSBjbGllbnRcclxuICAgICAgICAgICAgICB2YXIgcmVzaXplZEJhc2U2NCA9IGF3YWl0IHRoaXMucmVzaXplQmFzZTY0SW1hZ2UoXCJkYXRhOmltYWdlL1wiK3JlY29yZFtmaWVsZC5OYW1lXS5GaWxlRXh0ZW5zaW9uK1wiO2Jhc2U2NCxcIiArIHJlY29yZFtmaWVsZC5OYW1lXS5GaWxlRGF0YUJhc2U2NCk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIEFnZ2l1bmdvIGwnSFRNTCBjb24gaWwgbnVvdm8gQkFTRTY0XHJcbiAgICAgICAgICAgICAgb3V0cHV0VmFsdWVzQXJyYXlbZmllbGQuTmFtZV0gPSBcIjxpbWcgc3JjPSdcIiArIHJlc2l6ZWRCYXNlNjQrXCInIHN0eWxlPSdoZWlnaHQ6IFwiK3JlY29yZFtmaWVsZC5OYW1lXS5SZXNpemVkSW1hZ2VIZWlnaHRQeCtcInB4Jz5cIjtcclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bVsnSW1tYWdpbmUgY29uIG1hcmtlcnMnXTp7XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgLy8gUmVjdXBlcm8gaWwgQkFTRTY0IGRlbGwnaW1tYWdpbmUgUmVzaXplZCB2aWEgcHJvbWlzZSBjbGllbnRcclxuICAgICAgICAgICAgICB2YXIgcmVzaXplZEJhc2U2NCA9IGF3YWl0IHRoaXMucmVzaXplQmFzZTY0SW1hZ2UoXCJkYXRhOmltYWdlL1wiK3JlY29yZFtmaWVsZC5OYW1lXS5GaWxlRXh0ZW5zaW9uK1wiO2Jhc2U2NCxcIiArIHJlY29yZFtmaWVsZC5OYW1lXS5GaWxlRGF0YUJhc2U2NCk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIEFnZ2l1bmdvIGwnSFRNTCBjb24gaWwgbnVvdm8gQkFTRTY0XHJcbiAgICAgICAgICAgICAgb3V0cHV0VmFsdWVzQXJyYXlbZmllbGQuTmFtZV0gPSBcIjxpbWcgc3JjPSdcIiArIHJlc2l6ZWRCYXNlNjQrXCInIHN0eWxlPSdoZWlnaHQ6IFwiK3JlY29yZFtmaWVsZC5OYW1lXS5SZXNpemVkSW1hZ2VIZWlnaHRQeCtcInB4Jz5cIjtcclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bVsnRWxlbmNvIGltbWFnaW5pJ106e1xyXG4gICAgICAgICAgICAgIG91dHB1dFZhbHVlc0FycmF5W2ZpZWxkLk5hbWVdID0gXCJcIjtcclxuICAgICAgICAgICAgICBpZihyZWNvcmRbZmllbGQuTmFtZV0gIT0gbnVsbCAmJiAoPEltYWdlU2VsZWN0b3JGaWVsZD5maWVsZCkuSXNNdWx0aUNob2ljaGUpe1xyXG4gICAgICAgICAgICAgICAgcmVjb3JkW2ZpZWxkLk5hbWVdLmZvckVhY2goKGltYWdlb2JqOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgdmFyIGF0dGFjaG1lbnRJbkZvcm06IER5bkF0dGFjaG1lbnQgPSAoPEltYWdlU2VsZWN0b3JGaWVsZD5maWVsZCkuQXR0YWNobWVudExpc3QuZmluZCh4ID0+IHguSUQgPT0gaW1hZ2VvYmopO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudEluRm9ybSAhPSBudWxsKXtcclxuICAgICAgICAgICAgICAgICAgICBvdXRwdXRWYWx1ZXNBcnJheVtmaWVsZC5OYW1lXSArPSBhdHRhY2htZW50SW5Gb3JtLkJ1dHRvbktleSArIFwiLCBcIjtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB2YXIgcGFydHMgPSBvdXRwdXRWYWx1ZXNBcnJheVtmaWVsZC5OYW1lXS5zcGxpdChcIiwgXCIpO1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0VmFsdWVzQXJyYXlbZmllbGQuTmFtZV0gPSBwYXJ0cy5zbGljZSgwLCBwYXJ0cy5sZW5ndGggLSAxKS5qb2luKFwiLCBcIik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXR0YWNobWVudEluRm9ybTogRHluQXR0YWNobWVudCA9ICg8SW1hZ2VTZWxlY3RvckZpZWxkPmZpZWxkKS5BdHRhY2htZW50TGlzdC5maW5kKHggPT4geC5JRCA9PSByZWNvcmRbZmllbGQuTmFtZV0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnRJbkZvcm0gIT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgIG91dHB1dFZhbHVlc0FycmF5W2ZpZWxkLk5hbWVdID0gYXR0YWNobWVudEluRm9ybS5CdXR0b25LZXk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH07ICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICBkZWZhdWx0OntcclxuICAgICAgICAgICAgICBvdXRwdXRWYWx1ZXNBcnJheVtmaWVsZC5OYW1lXSA9IHJlY29yZFtmaWVsZC5OYW1lXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIClcclxuXHJcbiAgICAvLyBGdW56aW9uYSwgbWEgbm9uIMOoIGFmZmlkYWJpbGUgYWwgMTAwJVxyXG4gICAgYXdhaXQgdGhpcy5kZWxheSgzMDAwKTtcclxuXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwib3V0cHV0VmFsdWVzQXJyYXkgMVwiLCBvdXRwdXRWYWx1ZXNBcnJheSk7XHJcbiAgICAvLyBjYW5jZWxsbyBpIHZhbG9yaSBpbmRlZmluaXRpIG8gbnVsbGlcclxuICAgIGZvciAoY29uc3QgY2hpYXZlIGluIG91dHB1dFZhbHVlc0FycmF5KSB7XHJcbiAgICAgIGlmIChvdXRwdXRWYWx1ZXNBcnJheVtjaGlhdmVdID09IHVuZGVmaW5lZCB8fCBvdXRwdXRWYWx1ZXNBcnJheVtjaGlhdmVdID09IG51bGwpXHJcbiAgICAgICAgb3V0cHV0VmFsdWVzQXJyYXlbY2hpYXZlXSA9ICcnXHJcbiAgICB9XHJcbiAgICByZXR1cm4gb3V0cHV0VmFsdWVzQXJyYXk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJlc3BvbnNlVGVtcGxhdGUocmVjb3JkOiBSZWNvcmQsIGZvcm06IEZvcm0pOiBzdHJpbmcge1xyXG4gICAgICBsZXQgdGVtcGxhdGU6IHN0cmluZyA9ICc8ZGl2IGNsYXNzPVwicm93XCI+JztcclxuICAgIC8vIFBSRVBBUk8gTyBQUkVORE8gTEEgU1RSVVRUVVJBIERBIFNUQU1QQVJFXHJcbiAgICBmb3JtLkZpZWxkcy5mb3JFYWNoKChiYXNlRmllbGQ6IEJhc2VGaWVsZCkgPT4ge1xyXG4gICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdnZXRSZXNwb3NuZVRlbXBsYXRlIC0gcHJlIC0gZmllbGQnLCBiYXNlRmllbGQpXHJcbiAgICAgIGlmKGJhc2VGaWVsZC5BbnN3ZXJTdHlsZSA9PSBudWxsIHx8IGJhc2VGaWVsZC5BbnN3ZXJTdHlsZSA9PSB1bmRlZmluZWQpe1xyXG4gICAgICAgIGJhc2VGaWVsZC5BbnN3ZXJTdHlsZSA9IG5ldyBBbnN3ZXJTdHlsZSgpO1xyXG4gICAgICAgIGJhc2VGaWVsZC5BbnN3ZXJTdHlsZS5Db2xTcGFuU2l6ZXMgPSBiYXNlRmllbGQuQ29sU3BhblNpemVzO1xyXG4gICAgICAgIGJhc2VGaWVsZC5BbnN3ZXJTdHlsZS5GaWVsZHN0eWxlQ1NTID0gYmFzZUZpZWxkLkZpZWxkc3R5bGVDU1M7XHJcbiAgICAgICAgYmFzZUZpZWxkLkFuc3dlclN0eWxlLkxhYmVsc3R5bGVDU1MgPSBiYXNlRmllbGQuTGFiZWxzdHlsZUNTUztcclxuICAgICAgICBpZihiYXNlRmllbGQuVmlzaWJsZUlmKXtcclxuICAgICAgICAgIGJhc2VGaWVsZC5BbnN3ZXJTdHlsZS5Jbkxpc3RWaWV3ID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEoYmFzZUZpZWxkLlZpc2libGVJZiwgcmVjb3JkLCBudWxsKTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgIGJhc2VGaWVsZC5BbnN3ZXJTdHlsZS5Jbkxpc3RWaWV3ID0gYmFzZUZpZWxkLkluTGlzdFZpZXc7XHJcbiAgICAgICAgICBiYXNlRmllbGQuQW5zd2VyU3R5bGUuVmlzaWJsZUlmID0gYmFzZUZpZWxkLlZpc2libGVJZjtcclxuICAgICAgICB9XHJcbiAgICAgIH0gXHJcbiAgICAgIGlmKGJhc2VGaWVsZC5BbnN3ZXJTdHlsZS5WaXNpYmxlSWYpe1xyXG4gICAgICAgIGNvbnN0IHZpc2liaWxpdHkgPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYShiYXNlRmllbGQuQW5zd2VyU3R5bGUuVmlzaWJsZUlmLCByZWNvcmQsIG51bGwpXHJcbiAgICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIkV2YWx1YXRlRmllbGRGb3JtdWxhIC0gdmlzaWJpbGl0eVwiLCB2aXNpYmlsaXR5KTtcclxuICAgICAgICBiYXNlRmllbGQuQW5zd2VyU3R5bGUuSW5MaXN0VmlldyA9ICh2aXNpYmlsaXR5ID09IHRydWUpID8gdHJ1ZSA6IGZhbHNlIDtcclxuICAgICAgfVxyXG4gICAgICBpZihiYXNlRmllbGQuQW5zd2VyU3R5bGUuSW5MaXN0Vmlldyl7XHJcbiAgICAgICAgdGVtcGxhdGUgKz0gJzxkaXYgY2xhc3M9XCInKyB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldEZpZWxkQW5zd2VyU3R5bGVDbGFzcyhiYXNlRmllbGQpICsnIGQtZmxleCBmbGV4LWNvbHVtbiBkeW5hZm9ybS1hbnN3ZXItZmllbGRcIj4gJytcclxuICAgICAgICAnIDxzcGFuIGNsYXNzPVwiZHluYWZvcm0tcXVlc3Rpb25cIiBzdHlsZT1cIicgKyBiYXNlRmllbGQuQW5zd2VyU3R5bGUuTGFiZWxzdHlsZUNTUyArICdcIj4nICsgYmFzZUZpZWxkLkRlc2NyaXB0aW9uICsgJzo8L3NwYW4+JyArIFxyXG4gICAgICAgICcgPHNwYW4gY2xhc3M9XCJkeW5hZm9ybS1yZXNwb25zZVwiIHN0eWxlPVwiJyArIGJhc2VGaWVsZC5BbnN3ZXJTdHlsZS5GaWVsZHN0eWxlQ1NTICsgJ1wiPiAjIycgKyBiYXNlRmllbGQuTmFtZSArICcjIzwvc3Bhbj4nICsgXHJcbiAgICAgICAgJzwvZGl2PiBcXG4gJztcclxuICAgICAgfVxyXG4gICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdnZXRSZXNwb3NuZVRlbXBsYXRlIC0gcG9zdCAtIGZpZWxkJywgYmFzZUZpZWxkKVxyXG4gICAgfSk7XHJcbiAgICAvLyAoYXR0dWFsbWVudGUgbm9uIGVzaXN0ZSBpbCBjb25jZXR0byBkaSB0ZW1wYXRlIGRpIG91dHB1dClcclxuICAgICAgdGVtcGxhdGUgKz0gJzwvZGl2Pic7XHJcbiAgICAgIHJldHVybiB0ZW1wbGF0ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVwbGFjZVRlbXBsYXRlUGxhY2Vob2xkZXJzV2l0aFZhbHVlcyh0ZW1wbGF0ZTogc3RyaW5nLCBvdXRwdXRWYWx1ZXNBcnJheTogQXJyYXk8YW55PiwgcmVnZXgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRlbXBsYXRlLnJlcGxhY2UocmVnZXgsIChtYXRjaCwgZ3JvdXApID0+IHtcclxuICAgICAgcmV0dXJuIDxzdHJpbmc+b3V0cHV0VmFsdWVzQXJyYXlbZ3JvdXBdO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkZWxheShtczogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoIHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgcmVzaXplQmFzZTY0SW1hZ2UgKGJhc2U2NEltYWdlOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xyXG4gICAgICBpbWcuc3JjID0gYmFzZTY0SW1hZ2U7XHJcbiAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcclxuICAgICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgICBjb25zdCB3aWR0aCA9IGltZy53aWR0aDtcclxuICAgICAgICBjb25zdCBoZWlnaHQgPSBpbWcuaGVpZ2h0O1xyXG4gICAgICAgIGNvbnN0IGFzcGVjdFJhdGlvID0gd2lkdGggLyBoZWlnaHQ7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgbmV3SGVpZ2h0ID0gMTI4O1xyXG4gICAgICAgIGNvbnN0IG5ld1dpZHRoID0gbmV3SGVpZ2h0ICogYXNwZWN0UmF0aW87XHJcblxyXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IG5ld1dpZHRoO1xyXG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSBuZXdIZWlnaHQ7XHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIDAsIDAsIG5ld1dpZHRoLCBuZXdIZWlnaHQpO1xyXG4gICAgICAgIGxldCBxdWFsaXR5ID0gMC44O1xyXG4gICAgICAgIGxldCBkYXRhVVJMID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIHF1YWxpdHkpO1xyXG4gICAgICAgIHJlc29sdmUoZGF0YVVSTCk7XHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9ICBcclxuXHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRlclwiPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgZXFwLWR5bmFtaWMtbW9kdWxlLXRpdGxlIGFkZC1mb3JtLXJlY29yZC1oZWFkZXJcIiAqbmdJZj1cInNob3dUaXRsZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgPHNwYW4+e3tmb3JtLk5hbWV9fTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybUZvcm1cIiBjbGFzcz1cImFkZC1mb3JtLXJlY29yZC1mb3JtXCI+XHJcblxyXG4gICAgICAgIDwhLS0gVklTVUFMSVpaQVpJT05FIFNFTVBMSUNFIC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmb3JtLkZvcm1TY2FsYXJUeXBlID09IEZvcm1TY2FsYXJUeXBlRW51bS5TZW1wbGljZVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpZWxkVGVtcGxhdGVzXCJcclxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgZmllbGRzOiBmb3JtLkZpZWxkcyB9XCIgY2xhc3M9XCJhZGQtZm9ybS1yZWNvcmQtc2VtcGxpY2VcIj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPCEtLSBWSVNVQUxJWlpBWklPTkUgQSBTVEVQUEVSIC0tPlxyXG4gICAgICAgIDxtYXQtaG9yaXpvbnRhbC1zdGVwcGVyIGxpbmVhciAqbmdJZj1cImZvcm0uRm9ybVNjYWxhclR5cGUgPT0gRm9ybVNjYWxhclR5cGVFbnVtWydBIHN0ZXAnXVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYWRkLWZvcm0tcmVjb3JkLXN0ZXBwZXJcIj5cclxuICAgICAgICAgICAgPG1hdC1zdGVwICpuZ0Zvcj1cImxldCBncm91cCBvZiBmb3JtLkZvcm1GaWVsZHNHcm91cHM7IGxldCBpID0gaW5kZXg7IGxldCBmaXJzdCA9IGZpcnN0OyBsZXQgbGFzdCA9IGxhc3RcIj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRTdGVwTGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAge3tncm91cC5OYW1lfX1cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJmaWVsZFRlbXBsYXRlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgZmllbGRzOiBmaWVsZEdyb3Vwc1tncm91cC5OYW1lXSB9XCI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBhZGQtZm9ybS1yZWNvcmQtYnV0dG9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhZmlyc3RcIiBjbGFzcz1cIm1yLTIgcHJldmlvdXNcIiBtYXQtcmFpc2VkLWJ1dHRvbiBtYXRTdGVwcGVyUHJldmlvdXM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFByZWNlZGVudGVcclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIWxhc3RcIiBjbGFzcz1cImJ1dHRvbi1uZXh0XCIgY29sb3I9XCJwcmltYXJ5XCIgbWF0LXJhaXNlZC1idXR0b24gbWF0U3RlcHBlck5leHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFN1Y2Nlc3Npdm9cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwibGFzdCAmJiBzaG93U2F2ZUJ1dHRvblwiIChjbGljayk9XCJzYXZlT3JFeGl0Rm9ybShmYWxzZSlcIiBjbGFzcz1cImJ1dHRvbi1uZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgbWF0LXJhaXNlZC1idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNhbHZhXHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwvbWF0LXN0ZXA+XHJcbiAgICAgICAgPC9tYXQtaG9yaXpvbnRhbC1zdGVwcGVyPlxyXG5cclxuICAgICAgICA8IS0tIFZJU1VBTElaWkFaSU9ORSBBIFRBQiAtLT5cclxuICAgICAgICA8bWF0LXRhYi1ncm91cCAqbmdJZj1cImZvcm0uRm9ybVNjYWxhclR5cGUgPT0gRm9ybVNjYWxhclR5cGVFbnVtWydJbiB0YWInXVwiIGNsYXNzPVwiYWRkLWZvcm0tcmVjb3JkLXRhYlwiPlxyXG4gICAgICAgICAgICA8bWF0LXRhYiAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgZm9ybS5Gb3JtRmllbGRzR3JvdXBzXCIgW2xhYmVsXT1cImdyb3VwLk5hbWVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJmaWVsZFRlbXBsYXRlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGZpZWxkczogZmllbGRHcm91cHNbZ3JvdXAuTmFtZV0gfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbWF0LXRhYj5cclxuICAgICAgICA8L21hdC10YWItZ3JvdXA+XHJcblxyXG4gICAgICAgIDwhLS0gVklTVUFMSVpaQVpJT05FIEFEIEFDQ09SRElPTiAtLT5cclxuICAgICAgICA8bWF0LWFjY29yZGlvbiBtdWx0aSAqbmdJZj1cImZvcm0uRm9ybVNjYWxhclR5cGUgPT0gRm9ybVNjYWxhclR5cGVFbnVtWydJbiBhY2NvcmRpb24nXVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYWRkLWZvcm0tcmVjb3JkLWFjY29yZGlvblwiPlxyXG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgZm9ybS5Gb3JtRmllbGRzR3JvdXBzXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tncm91cC5OYW1lfX1cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJmaWVsZFRlbXBsYXRlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgZmllbGRzOiBmaWVsZEdyb3Vwc1tncm91cC5OYW1lXSB9XCI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG4gICAgICAgIDwvbWF0LWFjY29yZGlvbj5cclxuICAgIDwvZm9ybT5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IG10LTIgYWRkLWZvcm0tcmVjb3JkLWJ1dHRvbnNcIlxyXG4gICAgICAgICpuZ0lmPVwiKHNob3dCYWNrQnV0dG9uIHx8IHNob3dTYXZlQnV0dG9uKSAmJiBmb3JtLkZvcm1TY2FsYXJUeXBlICE9IEZvcm1TY2FsYXJUeXBlRW51bVsnQSBzdGVwJ11cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIHRleHQtcmlnaHRcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1yLTJcIiBtYXQtcmFpc2VkLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJzaG93QmFja0J1dHRvblwiIChjbGljayk9XCJzYXZlT3JFeGl0Rm9ybSh0cnVlKVwiPlxyXG4gICAgICAgICAgICAgICAgQW5udWxsYVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1yLTJcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJzaG93U2F2ZUJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2F2ZU9yRXhpdEZvcm0oZmFsc2UpXCIgW2Rpc2FibGVkXT1cImZvcm1Gb3JtLmludmFsaWQgfHwgZm9ybUZvcm0uZGlzYWJsZWQgfHwgaXNTYXZpbmdcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWlzU2F2aW5nXCI+U2FsdmE8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImlzU2F2aW5nXCI+U2FsdmF0YWdnaW8gaW4gQ29yc28uLi48L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG48L25nLWNvbnRhaW5lcj5cclxuXHJcblxyXG5cclxuPCEtLSBURU1QTEFURSBQRVIgTEEgVklTVUFMSVpaQVpJT05FIERFSSBDQU1QSSBERUxMQSBGT1JNIC0tPlxyXG48bmctdGVtcGxhdGUgI2ZpZWxkVGVtcGxhdGVzIGxldC1maWVsZHM9J2ZpZWxkcyc+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTJcIiAqbmdGb3I9XCJsZXQgZmllbGQgb2YgZmllbGRzXCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwidXRpbGl0eVNlcnZpY2UuZ2V0RmllbGRTeWxlQ2xhc3MoZmllbGQpXCI+XHJcbiAgICAgICAgICAgIDxkeW5hbWljLW1vZHVsZS1maWVsZC1maXggI2ZpZWxkVGVtcGxhdGUgW2ZpZWxkXT1cImZpZWxkXCIgW1F1ZXJ5RWRpdG9yQ29tcG9uZW50XT1cIlF1ZXJ5RWRpdG9yQ29tcG9uZW50XCIgW2Zvcm1dPVwiZm9ybVwiIFtyZWNvcmRdPVwicmVjb3JkXCIgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIiBbaW5Db25maWddPVwiaW5Db25maWdcIlxyXG4gICAgICAgICAgICAgICAgKHJlY29yZENoYW5nZSk9XCJvblJlY29yZENoYW5nZSgpXCI+XHJcbiAgICAgICAgICAgIDwvZHluYW1pYy1tb2R1bGUtZmllbGQtZml4PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+Il19
592
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWZvcm0tcmVjb3JkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9mb3JtLXJlY29yZHMvYWRkLWZvcm0tcmVjb3JkL2FkZC1mb3JtLXJlY29yZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1yZWNvcmRzL2FkZC1mb3JtLXJlY29yZC9hZGQtZm9ybS1yZWNvcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQWEsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNILE9BQU8sRUFBRSxXQUFXLEVBQWEsVUFBVSxFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzNILE9BQU8sRUFBUSxrQkFBa0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDcEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFFbkYsT0FBTyxFQUE2QyxhQUFhLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUU1SCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUNBQXFDLENBQUM7Ozs7Ozs7Ozs7QUFNcEUsMkdBQTJHO0FBTzNHLE1BQU0sT0FBTyxzQkFBc0I7SUFpQ2pDLFlBQ1UsR0FBc0IsRUFDdkIsY0FBb0M7UUFEbkMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdkIsbUJBQWMsR0FBZCxjQUFjLENBQXNCO1FB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TCxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7YUFDckM7WUFFRCxLQUFLLENBQUMsMkJBQTJCLEdBQUcsSUFBSSxDQUFDO1FBRTNDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7b0hBam9CVSxzQkFBc0I7d0dBQXRCLHNCQUFzQiw2aEJDdkJuQyxnM0pBbUdjOzRGRDVFRCxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0UsaUJBQWlCOzJJQU1sQixjQUFjO3NCQUF0QixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsb0JBQW9CO3NCQUE1QixLQUFLO2dCQUVJLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUNHLEdBQUc7c0JBQVosTUFBTTtnQkFjUCxhQUFhO3NCQURaLFlBQVk7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBRdWVyeUxpc3QsIFZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IEFuc3dlclN0eWxlLCBCYXNlRmllbGQsIERhdGFHZXR0ZXIsIERhdGFHZXR0ZXJUeXBlRW51bSwgRmllbGRUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9iYXNlRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBGb3JtLCBGb3JtU2NhbGFyVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZm9ybS5tb2RlbCc7XHJcbmltcG9ydCB7IER5blJlY29yZCwgUmVjb3JkIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL3JlY29yZC5tb2RlbCc7XHJcbmltcG9ydCB7IFV0aWxpdHlIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0eUhlbHBlci5zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVGaWVsZEZpeENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2R5bmFtaWMtbW9kdWxlLWZpZWxkLWZpeC9keW5hbWljLW1vZHVsZS1maWVsZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBFbmRQb2ludENvbmZpZ3VyYXRpb24sIEVuZFBvaW50RGF0YVBhcmFtcywgUGFyYW1UeXBlRW51bSB9IGZyb20gJy4vLi4vLi4vLi4vLi4vbW9kZWxzL2VuZFBvaW50Q29uZmlndXJhdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IExpc3RWYWx1ZUZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9saXN0VmFsdWVGaWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IEdsb2JhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9nbG9iYWwuc2VydmljZSc7XHJcbmltcG9ydCB7IE51bWVyaWNGaWVsZCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvbnVtZXJpY0ZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgSW1hZ2VTZWxlY3RvckZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9pbWFnZVNlbGVjdG9yRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBEeW5BdHRhY2htZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2R5bkF0dGFjaG1lbnQnO1xyXG5pbXBvcnQgeyBEeW5hbWljTG9hZGVyRGlyZWN0aXZlRGF0YSwgZXZlbnRPdXQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vZGlyZWN0aXZlcy9keW5hbWljLWxvYWRlci9keW5hbWljLWxvYWRlci5kaXJlY3RpdmVcIjtcclxuXHJcbi8vIGltcG9ydCB7IER5bmFtaWNNb2R1bGVGaWVsZENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2R5bmFtaWMtbW9kdWxlLWZpZWxkL2R5bmFtaWMtbW9kdWxlLWZpZWxkLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJhZGQtZm9ybS1yZWNvcmRcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL2FkZC1mb3JtLXJlY29yZC5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9hZGQtZm9ybS1yZWNvcmQuY29tcG9uZW50LnNjc3NcIl0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBZGRGb3JtUmVjb3JkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgQElucHV0KCkgY29uZmlndXJhdGlvbnM6IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnO1xyXG4gIEBJbnB1dCgpIGVuZFBvaW50Q29uZmlndXJhdGlvbjogRW5kUG9pbnRDb25maWd1cmF0aW9uO1xyXG4gIEBJbnB1dCgpIHVzZXJJRDogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKSBmb3JtSUQ6IHN0cmluZyA9IG51bGw7IC8vIHByZXZpZXdcclxuICBASW5wdXQoKSBmb3JtOiBGb3JtID0gbnVsbDsgLy8gcHJldmlldyBjb25maWdcclxuICBASW5wdXQoKSByZWNvcmQ6IFJlY29yZCB8IHN0cmluZyA9IG51bGw7IC8vIGVkaXRcclxuICBASW5wdXQoKSBvbmx5VmlldzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGlzRHVwbGljYXRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaW5Db25maWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgUXVlcnlFZGl0b3JDb21wb25lbnQ6IER5bmFtaWNMb2FkZXJEaXJlY3RpdmVEYXRhOyAvLyBMJ2ludGVybyBjb21wb25lbnRlIHF1ZXJ5IEVkaXRvclxyXG5cclxuICBAT3V0cHV0KCkgc2F2ZVJlY29yZEV2ZW50OiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG4gIEBPdXRwdXQoKSBhZnRlclNhdmVSZWNvcmRFdmVudDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgb3V0OiBFdmVudEVtaXR0ZXI8ZXZlbnRPdXQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxldmVudE91dD4oKTtcclxuXHJcbiAgc2hvd1RpdGxlID0gdHJ1ZTtcclxuICBzaG93U2F2ZUJ1dHRvbiA9IHRydWU7XHJcbiAgc2hvd0JhY2tCdXR0b24gPSB0cnVlO1xyXG4gIGxvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzU2F2aW5nOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGZvcm1Gb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xyXG4gIGZpZWxkR3JvdXBzOiB7IFtrZXk6IHN0cmluZ106IEFycmF5PEJhc2VGaWVsZD4gfSA9IHt9O1xyXG4gIEZvcm1TY2FsYXJUeXBlRW51bSA9IEZvcm1TY2FsYXJUeXBlRW51bTtcclxuICBGaWVsZFR5cGVFbnVtID0gRmllbGRUeXBlRW51bTtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbihcImZpZWxkVGVtcGxhdGVcIilcclxuICBmaWVsZFRlbXBsYXRlOiBRdWVyeUxpc3Q8RHluYW1pY01vZHVsZUZpZWxkRml4Q29tcG9uZW50PjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwdWJsaWMgdXRpbGl0eVNlcnZpY2U6IFV0aWxpdHlIZWxwZXJTZXJ2aWNlXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAvLyBhZGQgcHXDsiBmdW56aW9uYXJlIGFuY2hlIGNvbWUgbW9kaWZpY2EgZSBjb21lIHByZXZpZXdcclxuICAgIC8vIGluIGFkZCBhYmJpYW1vIGluIGlucHV0IGwnSUQgZGVsIEZvcm1cclxuICAgIC8vIGluIG1vZGlmaWNhIGFiYmlhbW8gaW4gaW5wdXQgbCdJRCBkZWwgUmVjb3JkXHJcbiAgICAvLyBpbiBwcmV2aWV3IGFiYmlhbW8gaW4gaW5wdXQgaWwgRm9ybShjYXNvIGNvbmZpZ3VyYXRvcikgbyBsJ0lEIGRlbCBtb2R1bG8gb24gb25seVZpZXcgaW1wb3N0YXRvIGEgdHJ1ZVxyXG4gICAgdGhpcy5zaG93VGl0bGUgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLnNob3dUaXRsZTtcclxuICAgIHRoaXMuc2hvd1NhdmVCdXR0b24gPSB0aGlzLmNvbmZpZ3VyYXRpb25zLnNob3dTYXZlQnV0dG9uO1xyXG4gICAgdGhpcy5zaG93QmFja0J1dHRvbiA9IHRoaXMuY29uZmlndXJhdGlvbnMuc2hvd0JhY2tCdXR0b247XHJcblxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIkFkZEZvcm1SZWNvcmRcIilcclxuXHJcbiAgICBpZiAodGhpcy5yZWNvcmQgPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnNob3dUaXRsZSA9IHRydWU7XHJcbiAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJBZGRGb3JtUmVjb3JkIC0gbmV3XCIpXHJcbiAgICAgIHRoaXMucHJldmlld09yTmV3UmVzcG9uc2VSZWNvcmQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2hvd1RpdGxlID0gZmFsc2U7XHJcbiAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJBZGRGb3JtUmVjb3JkIC0gZWRpdFwiLCB0aGlzLnJlY29yZClcclxuICAgICAgdGhpcy5lZGl0UmVzcG9uc2VSZWNvcmQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBsJ2luaXppYWxpenphemlvbmUgdGVybWluYSBjb24gaWwgcmVjdXBlcm8gZGVsIHJlY29yZCBvIGNvbiBsJ2luaXppYWxpenphemlvbmUgZGVsIGZvcm0gdnVvdG9cclxuXHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdvbmluaXQgLSBEeW5hRm9ybScsIHRoaXMuZm9ybSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBpbnZvY2F0byBhbCBjYW1iaW8gZGVsIHZhbG9yZSBkaSBvZ25pIHByb3ByaWV0w6AgZGVsbCdvZ2dldHRvIHJlY29yZC5cclxuICAgKiBTZXJ2ZSBhZCBhZ2dpb3JuYXJlIGlsIHZhbG9yZSBkaSB0dXR0aSBpIGNhbXBpIGNoZSBoYW5ubyB1bmEgZm9ybXVsYS5cclxuICAgKi9cclxuICBvblJlY29yZENoYW5nZSgpIHtcclxuICAgIGlmICh0aGlzLmZpZWxkVGVtcGxhdGUgJiYgdGhpcy5maWVsZFRlbXBsYXRlLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5maWVsZFRlbXBsYXRlLmZvckVhY2goKGYpID0+IGYudXBkYXRlRmllbGQoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcmV2aWV3T3JOZXdSZXNwb25zZVJlY29yZCgpIHtcclxuICAgIHRoaXMucmVjb3JkID0gbmV3IFJlY29yZCgpO1xyXG4gICAgLy8gYWdnaXVnbmkgbnVvdm9cclxuICAgIGlmICh0aGlzLmZvcm0gIT0gbnVsbCkge1xyXG4gICAgICAvLyBwcmV2aWV3IHBlciBpbCBjb25maWd1cmF0b3JcclxuICAgICAgdGhpcy5maWVsZHNDb25maWcoKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5mb3JtSUQgIT0gbnVsbCkge1xyXG4gICAgICAvLyBwcmV2aWV3IHBlciBhZG1pblxyXG4gICAgICB0aGlzLmdldEZvcm1CeUlEKCk7IC8vIGRlbnRybyBjaGlhbWEgZmllbGRzQ29uZmlnXHJcbiAgICB9XHJcbiAgfVxyXG4gIGVkaXRSZXNwb25zZVJlY29yZCgpIHtcclxuICAgIFxyXG4gICAgLy8gbW9kaWlsdMOgIG1vZGlmaWNhXHJcbiAgICBpZiAodHlwZW9mIHRoaXMucmVjb3JkID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIC8vIGFsbG9yYSDDqCB1biBJRFxyXG4gICAgICB0aGlzLmdldFJlY29yZEJ5SUQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGlsIHJlY29yZCB2aWVuZSBwYXNzYXRvIGNvbWUgdGFsZVxyXG4gICAgICAvLyAoPFJlY29yZD50aGlzLnJlY29yZCkuRW50SUQgPSBcIjNcIjtcclxuICAgICAgLy8gKDxSZWNvcmQ+dGhpcy5yZWNvcmQpLlZlcnNpb247XHJcbiAgICAgIHRoaXMuZ2V0Rm9ybUJ5SURhbmRWZXJzaW9uKHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzYWx2YXJlIGkgZGF0aSBpbnNlcml0aSBkYWxsJ3V0ZW50ZSB1bmEgdm9sdGEgY29uY2x1c2EgbGEgY29tcGlsYXppb25lIGRlbGxhIGZvcm0uXHJcbiAgICovXHJcbiAgc2F2ZU9yRXhpdEZvcm0oZXhpdDogYm9vbGVhbikge1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnYWRkLWZvcm0tcmVjb3JkIHNhdmVSZWNvcmRFdmVudCcpXHJcbiAgICBpZiAoZXhpdCkge1xyXG4gICAgICAvLyB0aGlzLnNhdmVSZWNvcmRFdmVudC5lbWl0KG51bGwpO1xyXG4gICAgICB0aGlzLm9uU2F2ZVJlY29yZChudWxsKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIHRoaXMuc2F2ZVJlY29yZEV2ZW50LmVtaXQodGhpcy5yZWNvcmQpO1xyXG4gICAgICB0aGlzLmlzU2F2aW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5vblNhdmVSZWNvcmQoKDxSZWNvcmQ+dGhpcy5yZWNvcmQpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgc2FsdmFyZSBpbCByZWNvcmQgYWdnaXVudG8gbyBtb2RpZmljYXRvLlxyXG4gICAqIFNlIMOoIHN0YXRvIGNvbmZpZ3VyYXRvIHVuIGVuZFBvaW50IHBlciBpbCBzYWx2YXRhZ2dpbyB2aWVuZSBlZmZldHR1YXRhIHVuYSBjaGlhbWF0YSBhbCBzZXJ2ZXIgcGFzc2FuZG8gbCdvZ2dldG8gZGEgc2FsdmFyZVxyXG4gICAqIG5lbCBib2R5IGRlbGxhIGNoaWFtYXRhLCBhbHRyaW1lbnRpIHNjYXRlbmEgbCdldmVudG8gXCJzYXZlUmVjb3JkXCIuXHJcbiAgICogQHBhcmFtIGV2ZW50IE9nZ2V0dG8gZGkgdGlwbyBSZWNvcmQgZGEgc2FsdmFyZS5cclxuICAgKi9cclxuICBhc3luYyBvblNhdmVSZWNvcmQoZXZlbnQ6IFJlY29yZCkge1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnb25TYXZlUmVjb3JkIC0gZXZlbnQnLCBldmVudClcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ29uU2F2ZVJlY29yZCAtIGZvcm0nLCB0aGlzLmZvcm0pXHJcbiAgICBpZiAoXHJcbiAgICAgIGV2ZW50ICE9IG51bGwgJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gIT0gbnVsbCAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLlNhdmVFbmRQb2ludFxyXG4gICAgKSB7XHJcbiAgICAgIHZhciBkeW5SZWM6IER5blJlY29yZCA9IG5ldyBEeW5SZWNvcmQoKTtcclxuICAgICAgZHluUmVjLklEID0gZXZlbnQuSUQgPz8gbnVsbDtcclxuICAgICAgZHluUmVjLkVudElEID0gdGhpcy5mb3JtLklEO1xyXG4gICAgICBkeW5SZWMuVmVyc2lvbiA9IHRoaXMuZm9ybS5WZXJzaW9uO1xyXG4gICAgICBkeW5SZWMudXNlcklEID0gdGhpcy51c2VySUQ7XHJcbiAgICAgIGR5blJlYy5WYWx1ZXMgPSBldmVudCA/PyBudWxsO1xyXG4gICAgICBkeW5SZWMuSFRNTHJlYWRhYmxlVmFsdWVzID0gYXdhaXQgdGhpcy5jcmVhdGVIVE1McmVhZGFibGVWYWx1ZXMoZXZlbnQpO1xyXG5cclxuICAgICAgaWYgKGV2ZW50LkZLX0luc2VydFVzZXIgPT0gbnVsbCl7XHJcbiAgICAgICAgLy8gTnVvdm8gUmVjb3JkXHJcbiAgICAgICAgZHluUmVjLkZLX0luc2VydFVzZXIgPSB0aGlzLnVzZXJJRDtcclxuICAgICAgICBkeW5SZWMuSW5zZXJ0RGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgZHluUmVjLkZLX1VwZGF0ZVVzZXIgPSB0aGlzLnVzZXJJRDtcclxuICAgICAgICBkeW5SZWMuVXBkYXRlRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gTW9kaWZpY2EgZGVsIFJlY29yZFxyXG4gICAgICAgIGR5blJlYy5GS19JbnNlcnRVc2VyID0gZXZlbnQuRktfSW5zZXJ0VXNlclxyXG4gICAgICAgIGR5blJlYy5JbnNlcnREYXRlID0gZXZlbnQuSW5zZXJ0RGF0ZTtcclxuICAgICAgICBkeW5SZWMuRktfVXBkYXRlVXNlciA9IHRoaXMudXNlcklEO1xyXG4gICAgICAgIGR5blJlYy5VcGRhdGVEYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIGFkZGl0aW9uYWxQYXJhbXMgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmFkZGl0aW9uYWxQYXJhbXMgPT0gbnVsbCA/IGV2ZW50LkFkZGl0aW9uYWxQYXJhbXMgOiB0aGlzLmNvbmZpZ3VyYXRpb25zLmFkZGl0aW9uYWxQYXJhbXM7XHJcbiAgICAgIGR5blJlYy5BZGRpdGlvbmFsUGFyYW1zID0gSlNPTi5zdHJpbmdpZnkoYWRkaXRpb25hbFBhcmFtcyk7XHJcblxyXG4gICAgICAvLyB2YXIgYWRkaXRpb25hbEluZm8gPSB0aGlzLmFkZGl0aW9uYWxJbmZvID09IG51bGwgPyBldmVudC5BZGRpdGlvbmFsSW5mbyA6IHRoaXMuYWRkaXRpb25hbEluZm87XHJcbiAgICAgIHZhciBhZGRpdGlvbmFsSW5mbyA9IGV2ZW50LkFkZGl0aW9uYWxJbmZvID09IG51bGwgPyB0aGlzLmNvbmZpZ3VyYXRpb25zLmFkZGl0aW9uYWxJbmZvIDogZXZlbnQuQWRkaXRpb25hbEluZm87XHJcbiAgICAgIGR5blJlYy5BZGRpdGlvbmFsSW5mbyA9IEpTT04uc3RyaW5naWZ5KGFkZGl0aW9uYWxJbmZvKTtcclxuXHJcbiAgICAgIHZhciBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFBhcmFtTmFtZTogXCJSZWNvcmRcIixcclxuICAgICAgICAgIFBhcmFtVmFsdWU6IGR5blJlYyxcclxuICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIkluIEJvZHlcIl0sXHJcbiAgICAgICAgfSxcclxuICAgICAgXTtcclxuXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdvblNhdmVSZWNvcmQgLSBkeW5hbWljTW9kdWxlUGFyYW1zJywgZHluYW1pY01vZHVsZVBhcmFtcylcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5TYXZlRW5kUG9pbnQsXHJcbiAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAocmVzKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmFmdGVyU2F2ZVJlY29yZEV2ZW50LmVtaXQoZXZlbnQpO1xyXG4gICAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2F2ZVJlY29yZEV2ZW50LmVtaXQoZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Rm9ybUJ5SUQoaWQ6IHN0cmluZyA9IHRoaXMuZm9ybUlEKSB7XHJcbiAgICBjb25zdCBkeW5hbWljTW9kdWxlUGFyYW1zOiBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+ID1cclxuICAgICAgbmV3IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4oKTtcclxuICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMucHVzaCh7XHJcbiAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICBQYXJhbVZhbHVlOiBpZCxcclxuICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICB9KTtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlERW5kUG9pbnQsXHJcbiAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgIChyZXM6IEZvcm0pID0+IHtcclxuICAgICAgICB0aGlzLmZvcm0gPSByZXM7XHJcbiAgICAgICAgdGhpcy5zZXREYXRhR2V0dGVyKHRoaXMuZm9ybSk7XHJcbiAgICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnZ2V0Rm9ybUJ5SUQgLSBEeW5hRm9ybScsIHRoaXMuZm9ybSlcclxuICAgICAgICB0aGlzLmZpZWxkc0NvbmZpZygpO1xyXG4gICAgICB9LFxyXG4gICAgICAoZXJyKSA9PiB7IH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyBjaSBlbnRybyBzb2xvIHNlIMOoIHN0YXRvIHBhc3NhdG8gaWwgcGFyYW1ldHJvIFwicmVjb3JkXCIgY29tZSBzdHJpbmdhXHJcbiAgZ2V0UmVjb3JkQnlJRCgpIHtcclxuXHJcbiAgICAvLyBwcmVwYXJvIGkgZGF0aSBkZWwgcmVjb3JkXHJcbiAgICB2YXIgZHluYW1pY1JlY29yZFBhcmFtcyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgIFBhcmFtVmFsdWU6IHRoaXMucmVjb3JkLFxyXG4gICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgZHluYW1pY1JlY29yZFBhcmFtcyxcclxuICAgICAgKHJlczogRHluUmVjb3JkKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZWNvcmQgPSBuZXcgUmVjb3JkKCk7XHJcblxyXG4gICAgICAgICg8UmVjb3JkPnRoaXMucmVjb3JkKSA9IEpTT04ucGFyc2UocmVzLlNlcmlhbGl6ZWRWYWx1ZXMpO1xyXG4gICAgICAgIHRoaXMucmVjb3JkLklEID0gdGhpcy5pc0R1cGxpY2F0ZSA/IFwiXCIgOiByZXMuSUQ7XHJcbiAgICAgICAgdGhpcy5yZWNvcmQuRW50SUQgPSByZXMuRW50SUQ7XHJcbiAgICAgICAgdGhpcy5yZWNvcmQudXNlcklEID0gcmVzLnVzZXJJRDtcclxuICAgICAgICB0aGlzLnJlY29yZC5WZXJzaW9uID0gcmVzLlZlcnNpb247XHJcbiAgICAgICAgdGhpcy5yZWNvcmQuVmFsdWVzID0gSlNPTi5wYXJzZShyZXMuU2VyaWFsaXplZFZhbHVlcyk7XHJcbiAgICAgICAgdGhpcy5yZWNvcmQuRktfSW5zZXJ0VXNlciA9IHJlcy5GS19JbnNlcnRVc2VyO1xyXG4gICAgICAgIHRoaXMucmVjb3JkLkZLX1VwZGF0ZVVzZXIgPSByZXMuRktfVXBkYXRlVXNlcjtcclxuICAgICAgICB0aGlzLnJlY29yZC5JbnNlcnREYXRlID0gcmVzLkluc2VydERhdGU7XHJcbiAgICAgICAgdGhpcy5yZWNvcmQuVXBkYXRlRGF0ZSA9IHJlcy5VcGRhdGVEYXRlO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIHRoaXMudmlld01vZGUgPSBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkNPTVBJTEU7XHJcbiAgICAgICAgLy8gdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZ2V0Rm9ybUJ5SURhbmRWZXJzaW9uKCk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG4gIGdldEZvcm1CeUlEYW5kVmVyc2lvbihnZXRBdHRhY2htZW50czogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAvLyBwcmVwYXJvIGxhIHZlcnNpb25lIGNvcnJldHRhIGRlbCBmb3JtXHJcbiAgICB2YXIgZHluYW1pY01vZHVsZVBhcmFtcyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJFbnRJRFwiLFxyXG4gICAgICAgIFBhcmFtVmFsdWU6ICg8UmVjb3JkPnRoaXMucmVjb3JkKS5FbnRJRCxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJWZXJzaW9uXCIsXHJcbiAgICAgICAgUGFyYW1WYWx1ZTogKDxSZWNvcmQ+dGhpcy5yZWNvcmQpLlZlcnNpb24sXHJcbiAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImdldEZvcm1CeUlEYW5kVmVyc2lvbiAtIHRoaXMgcmVjb3JkXCIsIDxSZWNvcmQ+dGhpcy5yZWNvcmQpXHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREFuZFZlcnNpb25FbmRQb2ludCxcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgKHJlczogRm9ybSkgPT4ge1xyXG4gICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJBRlRFUiBnZXRGb3JtQnlJRGFuZFZlcnNpb24gLSB0aGlzLmZvcm1cIiwgcmVzKVxyXG4gICAgICAgIHRoaXMuZm9ybSA9IHJlcztcclxuICAgICAgICB0aGlzLnNldERhdGFHZXR0ZXIodGhpcy5mb3JtKTtcclxuXHJcbiAgICAgICAgdGhpcy5jcmVhdGVSZWNvcmRQcm9wZXJ0aWVzKCk7XHJcbiAgICAgICAgdGhpcy5yZW9yZGVyRm9ybUZpZWxkcygpO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRm9ybUdyb3VwKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybS5Gb3JtU2NhbGFyVHlwZSAhPSBGb3JtU2NhbGFyVHlwZUVudW0uU2VtcGxpY2UpIHtcclxuICAgICAgICAgIHRoaXMuY3JlYXRlRmllbGRHcm91cHMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghZ2V0QXR0YWNobWVudHMpe1xyXG4gICAgICAgICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmdldEFsbFJlY29yZEF0dGFjaG1lbnRzKCg8UmVjb3JkPnRoaXMucmVjb3JkKS5JRCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsUmVjb3JkQXR0YWNobWVudHMocmVjb3JkSUQ6IHN0cmluZyl7XHJcblxyXG4gICAgdmFyIGR5bmFtaWNNb2R1bGVQYXJhbXMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBQYXJhbU5hbWU6IFwiYW5zd2VySWRcIixcclxuICAgICAgICBQYXJhbVZhbHVlOiByZWNvcmRJRCxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfVxyXG4gICAgXTtcclxuXHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRBbGxBdHRhY2htZW50c0VuZFBvaW50LFxyXG4gICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAocmVzOiBBcnJheTxEeW5BdHRhY2htZW50PikgPT4ge1xyXG4gICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJHZXRBbGxBdHRhY2htZW50c0VuZFBvaW50KClcIiwgcmVzKTtcclxuXHJcbiAgICAgICAgdGhpcy5mb3JtLkZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW0uSW1tYWdpbmUgfHwgZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bJ0ltbWFnaW5lIGNvbiBtYXJrZXJzJ10pe1xyXG4gICAgICAgICAgICAgIHZhciBhdHRhY2hJZCA9IHRoaXMucmVjb3JkW2ZpZWxkLk5hbWVdO1xyXG4gICAgICAgICAgICAgIHRoaXMucmVjb3JkW2ZpZWxkLk5hbWVdID0gcmVzLmZpbmQoeCA9PiB4LklEID09IGF0dGFjaElkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gIH1cclxuXHJcbiAgZmllbGRzQ29uZmlnKCkge1xyXG4gICAgdGhpcy5jcmVhdGVSZWNvcmRQcm9wZXJ0aWVzKCk7XHJcbiAgICB0aGlzLnJlb3JkZXJGb3JtRmllbGRzKCk7XHJcbiAgICB0aGlzLmNyZWF0ZUZvcm1Hcm91cCgpO1xyXG4gICAgaWYgKHRoaXMuZm9ybS5Gb3JtU2NhbGFyVHlwZSAhPSBGb3JtU2NhbGFyVHlwZUVudW0uU2VtcGxpY2UpIHtcclxuICAgICAgdGhpcy5jcmVhdGVGaWVsZEdyb3VwcygpO1xyXG4gICAgfVxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImZpZWxkc0NvbmZpZyAtIGZvcm1cIiwgdGhpcy5mb3JtKTtcclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY3JlYXJlIG5lbGwnb2dnZXR0byBSZWNvcmQgbGUgcHJvcHJpZXTDoCBtYW5jYW50aSByaXNwZXR0byBhaSBjYW1waSBjaGUgY29tcG9uZ29ubyBsYSBmb3JtLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlUmVjb3JkUHJvcGVydGllcygpIHtcclxuICAgIGNvbnN0IHJlY29yZFByb3BlcnRpZXM6IEFycmF5PHN0cmluZz4gPSBPYmplY3Qua2V5cyh0aGlzLnJlY29yZCk7XHJcbiAgICB0aGlzLmZvcm0uRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgICAgIGlmICghcmVjb3JkUHJvcGVydGllcy5maW5kKChwKSA9PiBwID09PSBmaWVsZC5OYW1lKSkge1xyXG4gICAgICAgIHRoaXMucmVjb3JkW2ZpZWxkLk5hbWVdID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAodGhpcy5mb3JtLklubmVyRm9ybXMgJiYgdGhpcy5mb3JtLklubmVyRm9ybXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmZvcm0uSW5uZXJGb3Jtcy5mb3JFYWNoKChmb3JtKSA9PiB7XHJcbiAgICAgICAgY29uc3QgYXJyYXlOYW1lOiBzdHJpbmcgPSBmb3JtLk5hbWUuc3BsaXQoXCIgXCIpLmpvaW4oXCJfXCIpO1xyXG4gICAgICAgIGlmICghcmVjb3JkUHJvcGVydGllcy5maW5kKChwKSA9PiBwID09PSBhcnJheU5hbWUpKSB7XHJcbiAgICAgICAgICB0aGlzLnJlY29yZFthcnJheU5hbWVdID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjcmVhdGVSZWNvcmRQcm9wZXJ0aWVzIC0gZm9ybVwiLCB0aGlzLmZvcm0pO1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImNyZWF0ZVJlY29yZFByb3BlcnRpZXMgLSByZWNvcmRcIiwgdGhpcy5yZWNvcmQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByaW9yZGluYXJlIGkgY2FtcGkgY2hlIGNvbXBvbmdvbm8gbGEgZm9ybS5cclxuICAgKi9cclxuICBwcml2YXRlIHJlb3JkZXJGb3JtRmllbGRzKCkge1xyXG4gICAgaWYgKHRoaXMuZm9ybS5GaWVsZHMgJiYgdGhpcy5mb3JtLkZpZWxkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5GaWVsZHMuc29ydCgoYSwgYikgPT5cclxuICAgICAgICBhLk9yZGluYWxQb3NpdGlvbiA+IGIuT3JkaW5hbFBvc2l0aW9uID8gMSA6IGIuT3JkaW5hbFBvc2l0aW9uID4gYS5PcmRpbmFsUG9zaXRpb24gPyAtMSA6IDApO1xyXG4gICAgfVxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcInJlb3JkZXJGb3JtRmllbGRzIC0gZm9ybVwiLCB0aGlzLmZvcm0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjcmVhcmUgaWwgRm9ybUdyb3VwIGNoZSByYXBwcmVzZW50YSBsYSBmb3JtLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlRm9ybUdyb3VwKCkge1xyXG4gICAgdGhpcy5mb3JtRm9ybSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuQ3JlYXRlRm9ybUZvcm1Hcm91cChcclxuICAgICAgdGhpcy5mb3JtLkZpZWxkcyxcclxuICAgICAgKDxSZWNvcmQ+dGhpcy5yZWNvcmQpLFxyXG4gICAgICB0aGlzLm9ubHlWaWV3XHJcbiAgICApO1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImNyZWF0ZUZvcm1Hcm91cCAtIGZvcm1cIiwgdGhpcy5mb3JtKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY3JlYXJlIGkgZ3J1cHBpIGluIGN1aSByYWdncnVwcGFyZSBpIGNhbXBpIGRlbGxhIGZvcm0gaW4gYmFzZVxyXG4gICAqIGEgY29tZSDDqCBzdGF0YSBjb25maWd1cmF0YSBkYWxsJ3V0ZW50ZS5cclxuICAgKi9cclxuICBwcml2YXRlIGNyZWF0ZUZpZWxkR3JvdXBzKCkge1xyXG4gICAgdGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHMuc29ydCgoYSwgYikgPT4gYS5PcmRpbmFsUG9zaXRpb24gPiBiLk9yZGluYWxQb3NpdGlvbiA/IDEgOiBiLk9yZGluYWxQb3NpdGlvbiA+IGEuT3JkaW5hbFBvc2l0aW9uID8gLTEgOiAwKVxyXG4gICAgICAubWFwKChnKSA9PiBnLk5hbWUpXHJcbiAgICAgIC5mb3JFYWNoKChncm91cE5hbWUpID0+IHtcclxuICAgICAgICB0aGlzLmZpZWxkR3JvdXBzW2dyb3VwTmFtZV0gPSB0aGlzLmZvcm0uRmllbGRzLmZpbHRlcihcclxuICAgICAgICAgIChmKSA9PiBmLkZpZWxkR3JvdXAgPT0gZ3JvdXBOYW1lXHJcbiAgICAgICAgKTtcclxuICAgICAgfSk7XHJcbiAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjcmVhdGVGaWVsZEdyb3VwcyAtIGZvcm1cIiwgdGhpcy5mb3JtKTtcclxuICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY3JlYXJlIGlsIEZvcm1Hcm91cCBjaGUgcmFwcHJlc2VudGEgbGEgZm9ybS5cclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIGNyZWF0ZUhUTUxyZWFkYWJsZVZhbHVlcyhyZWNvcmQ6IFJlY29yZCkge1xyXG5cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjcmVhdGVIVE1McmVhZGFibGVWYWx1ZXMgLSByZWNvcmRcIiwgcmVjb3JkKTtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjcmVhdGVIVE1McmVhZGFibGVWYWx1ZXMgLSBmb3JtXCIsIHRoaXMuZm9ybSk7XHJcblxyXG4gICAgdmFyIGZvcm1uYW1lcyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XHJcbiAgICB0aGlzLmZvcm0uRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7Zm9ybW5hbWVzLnB1c2goZmllbGQuTmFtZSk7fSk7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY3JlYXRlSFRNTHJlYWRhYmxlVmFsdWVzIC0gZm9ybSBmaWVsZHMgbmFtZXNcIiwgZm9ybW5hbWVzKTtcclxuXHJcbiAgICAvLyBhbGVydChcImNvbnRpbnVlIGZvciB2YWx1ZXM/XCIpXHJcblxyXG4gICAgbGV0IG91dHB1dFZhbHVlc0FycmF5ID0gYXdhaXQgdGhpcy5nZXRSZXNwb25zZVZhbHVlcyhyZWNvcmQsIHRoaXMuZm9ybSk7XHJcbiAgICBcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjcmVhdGVIVE1McmVhZGFibGVWYWx1ZXMgLSBvdXRwdXRWYWx1ZXNBcnJheVwiLCBvdXRwdXRWYWx1ZXNBcnJheSk7XHJcblxyXG4gICAgLy8gYWxlcnQoXCJjb250aW51ZSBmb3IgdGVtcGxhdGVzP1wiKVxyXG4gICAgbGV0IHRlbXBsYXRlOiBzdHJpbmcgPSB0aGlzLmdldFJlc3BvbnNlVGVtcGxhdGUocmVjb3JkLCB0aGlzLmZvcm0pOyAvLyBvZ2dldHRvIG5lbCBxdWFsZSB2aWVuZSBjb3N0cnVpdG8gaWwgdGVtcGxhdGUgbyBjaGUgcHJlbmRlIGlsIHZhbG9yZSBkYSB1biB0ZW1wbGF0ZSBlc3Rlcm5vXHJcbiAgICBcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjcmVhdGVIVE1McmVhZGFibGVWYWx1ZXMgLSB0ZW1wbGF0ZVwiLCB0ZW1wbGF0ZSk7XHJcbiAgICAvLyBhbGVydChcImNvbnRpbnVlIGZvciBvdXRwdXQ/XCIpXHJcbiAgICBjb25zdCByZWdleCA9IC8jIyhbXFx3XSspIyMvZztcclxuICAgIGNvbnN0IG91dHB1dCA9IHRoaXMucmVwbGFjZVRlbXBsYXRlUGxhY2Vob2xkZXJzV2l0aFZhbHVlcyh0ZW1wbGF0ZSwgb3V0cHV0VmFsdWVzQXJyYXksIHJlZ2V4KVxyXG5cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjcmVhdGVIVE1McmVhZGFibGVWYWx1ZXMgLSBvdXRwdXRcIiwgb3V0cHV0KTtcclxuICAgIC8vIGFsZXJ0KFwiY29udGludWUgZm9yIGVuZGluZz9cIilcclxuICAgIHJldHVybiBvdXRwdXQ7IC8vIG9nZ2V0dG8gY2hlIGNvbnRlcnLDoCBsJ291dHB1dCBlbGFib3JhdG8gICAgXHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRSZXNwb25zZVZhbHVlcyhyZWNvcmQ6IFJlY29yZCwgZm9ybTogRm9ybSkge1xyXG4gICAgbGV0IG91dHB1dFZhbHVlc0FycmF5OiBBcnJheTxhbnk+ID0gW107IC8vIGFycmF5IGNvbiBpIHZhbG9yaSBkZWxsZSByaXNwb3N0ZVxyXG4gICAgLy8oPER5blJlY29yZD50aGlzLnJlY29yZCkuVmFsdWVzIMOoIGxhIGxpc3RhIGRpIG9nZ2V0dGkge2ZpZWxkTmFtZTogdmFsb3JlfVxyXG4gICAgLy8gR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIihyZWNvcmQpLlZhbHVlc1wiLCByZWNvcmQpO1xyXG5cclxuICAgIGZvcm0uRmllbGRzLmZvckVhY2goXHJcbiAgICAgIGFzeW5jIChmaWVsZCkgPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJnZXRSZXNwb25zZVZhbHVlcyBmaWVsZFwiLCBmaWVsZCk7XHJcbiAgICAgICAgICAvLyBsZXQgZm91bmRPYmplY3QgPSByZWNvcmQuZmluZChcclxuICAgICAgICAgIC8vICAgKG9iaikgPT4gb2JqID09PSBmaWVsZC5OYW1lXHJcbiAgICAgICAgICAvLyApO1xyXG4gICAgICAgICAgbGV0IGZvdW5kT2JqZWN0ID0gcmVjb3JkW2ZpZWxkLk5hbWVdO1xyXG5cclxuICAgICAgICAgIC8vIGZhcmUgdW4gZXZhbCBwZXIgcG9wb2xhcmUgaSB2YWx1ZVBhaXJzIHNlIMOoIHByZXNlbnRlIHVuYSBmb3JtdWxhXHJcbiAgICAgICAgICAvLyBwcmVuZGVyZSBsYSBsYWJlbCBjb3JyZXR0YVxyXG4gICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgICAgICAgIC8vIFBSRVBBUk8gSUwgVkFMVUVQQUlSU1xyXG4gICAgICAgICAgc3dpdGNoKGZpZWxkLkZpZWxkVHlwZSl7XHJcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkVsZW5jbyBnZW5lcmljb1wiXTp7ICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICBpZiAoZmllbGQuRm9ybXVsYSAhPSBudWxsICYmIGZpZWxkLkZvcm11bGEpIHtcclxuICAgICAgICAgICAgICAgIC8vIGFnZ2l1bmdvIGEgdmFsdWVwYWlycyBpIHZhbG9yaSBjYWxjb2xhdGlcclxuICAgICAgICAgICAgICAgIC8vICg8TGlzdFZhbHVlRmllbGQ+Zm91bmRPYmplY3QpLlZhbHVlUGFpcnMgPSAoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzID8gKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlycyA6IHt9O1xyXG4gICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYShcclxuICAgICAgICAgICAgICAgICAgZmllbGQuRm9ybXVsYSxcclxuICAgICAgICAgICAgICAgICAgcmVjb3JkLFxyXG4gICAgICAgICAgICAgICAgICBudWxsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQga2V5MiBpbiB0ZW1wKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChVdGlsaXR5SGVscGVyU2VydmljZS5pc051bWVyaWModGVtcFtrZXkyXSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAoPExpc3RWYWx1ZUZpZWxkPmZpZWxkKS5WYWx1ZVBhaXJzW051bWJlcihrZXkyKV0gPSB0ZW1wW2tleTJdO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICg8TGlzdFZhbHVlRmllbGQ+ZmllbGQpLlZhbHVlUGFpcnNba2V5Ml0gPSB0ZW1wW2tleTJdO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBvdXRwdXRWYWx1ZXNBcnJheVtmaWVsZC5OYW1lXSA9ICg8TGlzdFZhbHVlRmllbGQ+ZmllbGQpLlZhbHVlUGFpcnNbcmVjb3JkW2ZpZWxkLk5hbWVdXTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKCg8TGlzdFZhbHVlRmllbGQ+ZmllbGQpLlZhbHVlUGFpcnMgIT0gbnVsbCAmJiAoPExpc3RWYWx1ZUZpZWxkPmZpZWxkKS5WYWx1ZVBhaXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIC8vIHZhIGJlbmUgY29zw6xcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKCg8TGlzdFZhbHVlRmllbGQ+ZmllbGQpLlZhbHVlU3RyaW5nICE9IG51bGwgJiYgKDxMaXN0VmFsdWVGaWVsZD5maWVsZCkuVmFsdWVTdHJpbmcgIT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgLy8gdmEgcHJlc2EgbGEgc3RyaWduYSBlIHJpbWFwcGF0YSBuZWwgZGlhcmlvXHJcbiAgICAgICAgICAgICAgICAoPExpc3RWYWx1ZUZpZWxkPmZpZWxkKS5WYWx1ZVBhaXJzID0gR2xvYmFsU2VydmljZS5zdHJpbmdUb1ZhbHVlUGFpcnMoKDxMaXN0VmFsdWVGaWVsZD5maWVsZCkuVmFsdWVTdHJpbmcpO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgbGV0IGludmVydGVkID0ge307XHJcbiAgICAgICAgICAgICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlyc1wiLCAoPExpc3RWYWx1ZUZpZWxkPmZpZWxkKS5WYWx1ZVBhaXJzKTtcclxuICAgICAgICAgICAgICAvLyBWYWx1ZVBhaXJzOiB7U2k6ICdTaScsIE5vOiAnTm8nfVxyXG4gICAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiAoPExpc3RWYWx1ZUZpZWxkPmZpZWxkKS5WYWx1ZVBhaXJzKSB7XHJcbiAgICAgICAgICAgICAgICBpbnZlcnRlZFsoPExpc3RWYWx1ZUZpZWxkPmZpZWxkKS5WYWx1ZVBhaXJzW2tleV1dID0ga2V5O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAoPExpc3RWYWx1ZUZpZWxkPmZpZWxkKS5WYWx1ZVBhaXJzID0gaW52ZXJ0ZWQ7XHJcbiAgICAgICAgICAgICAgaWYocmVjb3JkW2ZpZWxkLk5hbWVdICE9IG51bGwgJiYgKDxMaXN0VmFsdWVGaWVsZD5maWVsZCkuSXNNdWx0aUNob2ljaGUpe1xyXG4gICAgICAgICAgICAgICAgLy8gY2FzbyBNVUxUSVNDRUxUQVxyXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIHJlY29yZFtmaWVsZC5OYW1lXS5mb3JFYWNoKChlbGVtZW50LCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHZhbHVlICs9ICg8TGlzdFZhbHVlRmllbGQ+ZmllbGQpLlZhbHVlUGFpcnNbZWxlbWVudF07XHJcbiAgICAgICAgICAgICAgICAgIHZhbHVlICs9IGkgPT0gcmVjb3JkW2ZpZWxkLk5hbWVdLmxlbmd0aCAtMSA/IFwiXCI6IFwiLCBcIlxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXRWYWx1ZXNBcnJheVtmaWVsZC5OYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXRWYWx1ZXNBcnJheVtmaWVsZC5OYW1lXSA9ICg8TGlzdFZhbHVlRmllbGQ+ZmllbGQpLlZhbHVlUGFpcnNbcmVjb3JkW2ZpZWxkLk5hbWVdXTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIm91dHB1dFZhbHVlc0FycmF5XCIsIG91dHB1dFZhbHVlc0FycmF5KVxyXG5cclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQ2FtcG8gbnVtZXJpY29cIl06e1xyXG4gICAgICAgICAgICAgIGlmKCg8TnVtZXJpY0ZpZWxkPmZpZWxkKS5Jc0ludGVnZXIpe1xyXG4gICAgICAgICAgICAgICAgaWYoKDxOdW1lcmljRmllbGQ+ZmllbGQpLkRlY2ltYWxTZXBhcmF0b3IgPT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgIG91dHB1dFZhbHVlc0FycmF5W2ZpZWxkLk5hbWVdID0gcmVjb3JkW2ZpZWxkLk5hbWVdO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgb3V0cHV0VmFsdWVzQXJyYXlbZmllbGQuTmFtZV0gPSByZWNvcmRbZmllbGQuTmFtZV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG91dHB1dFZhbHVlc0FycmF5W2ZpZWxkLk5hbWVdID0gcmVjb3JkW2ZpZWxkLk5hbWVdO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bVsnSW1tYWdpbmUnXTp7XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgLy8gUmVjdXBlcm8gaWwgQkFTRTY0IGRlbGwnaW1tYWdpbmUgUmVzaXplZCB2aWEgcHJvbWlzZSBjbGllbnRcclxuICAgICAgICAgICAgICB2YXIgcmVzaXplZEJhc2U2NCA9IGF3YWl0IHRoaXMucmVzaXplQmFzZTY0SW1hZ2UoXCJkYXRhOmltYWdlL1wiK3JlY29yZFtmaWVsZC5OYW1lXS5GaWxlRXh0ZW5zaW9uK1wiO2Jhc2U2NCxcIiArIHJlY29yZFtmaWVsZC5OYW1lXS5GaWxlRGF0YUJhc2U2NCk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIEFnZ2l1bmdvIGwnSFRNTCBjb24gaWwgbnVvdm8gQkFTRTY0XHJcbiAgICAgICAgICAgICAgb3V0cHV0VmFsdWVzQXJyYXlbZmllbGQuTmFtZV0gPSBcIjxpbWcgc3JjPSdcIiArIHJlc2l6ZWRCYXNlNjQrXCInIHN0eWxlPSdoZWlnaHQ6IFwiK3JlY29yZFtmaWVsZC5OYW1lXS5SZXNpemVkSW1hZ2VIZWlnaHRQeCtcInB4Jz5cIjtcclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bVsnSW1tYWdpbmUgY29uIG1hcmtlcnMnXTp7XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgLy8gUmVjdXBlcm8gaWwgQkFTRTY0IGRlbGwnaW1tYWdpbmUgUmVzaXplZCB2aWEgcHJvbWlzZSBjbGllbnRcclxuICAgICAgICAgICAgICB2YXIgcmVzaXplZEJhc2U2NCA9IGF3YWl0IHRoaXMucmVzaXplQmFzZTY0SW1hZ2UoXCJkYXRhOmltYWdlL1wiK3JlY29yZFtmaWVsZC5OYW1lXS5GaWxlRXh0ZW5zaW9uK1wiO2Jhc2U2NCxcIiArIHJlY29yZFtmaWVsZC5OYW1lXS5GaWxlRGF0YUJhc2U2NCk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIEFnZ2l1bmdvIGwnSFRNTCBjb24gaWwgbnVvdm8gQkFTRTY0XHJcbiAgICAgICAgICAgICAgb3V0cHV0VmFsdWVzQXJyYXlbZmllbGQuTmFtZV0gPSBcIjxpbWcgc3JjPSdcIiArIHJlc2l6ZWRCYXNlNjQrXCInIHN0eWxlPSdoZWlnaHQ6IFwiK3JlY29yZFtmaWVsZC5OYW1lXS5SZXNpemVkSW1hZ2VIZWlnaHRQeCtcInB4Jz5cIjtcclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bVsnRWxlbmNvIGltbWFnaW5pJ106e1xyXG4gICAgICAgICAgICAgIG91dHB1dFZhbHVlc0FycmF5W2ZpZWxkLk5hbWVdID0gXCJcIjtcclxuICAgICAgICAgICAgICBpZihyZWNvcmRbZmllbGQuTmFtZV0gIT0gbnVsbCAmJiAoPEltYWdlU2VsZWN0b3JGaWVsZD5maWVsZCkuSXNNdWx0aUNob2ljaGUpe1xyXG4gICAgICAgICAgICAgICAgcmVjb3JkW2ZpZWxkLk5hbWVdLmZvckVhY2goKGltYWdlb2JqOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgdmFyIGF0dGFjaG1lbnRJbkZvcm06IER5bkF0dGFjaG1lbnQgPSAoPEltYWdlU2VsZWN0b3JGaWVsZD5maWVsZCkuQXR0YWNobWVudExpc3QuZmluZCh4ID0+IHguSUQgPT0gaW1hZ2VvYmopO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudEluRm9ybSAhPSBudWxsKXtcclxuICAgICAgICAgICAgICAgICAgICBvdXRwdXRWYWx1ZXNBcnJheVtmaWVsZC5OYW1lXSArPSBhdHRhY2htZW50SW5Gb3JtLkJ1dHRvbktleSArIFwiLCBcIjtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB2YXIgcGFydHMgPSBvdXRwdXRWYWx1ZXNBcnJheVtmaWVsZC5OYW1lXS5zcGxpdChcIiwgXCIpO1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0VmFsdWVzQXJyYXlbZmllbGQuTmFtZV0gPSBwYXJ0cy5zbGljZSgwLCBwYXJ0cy5sZW5ndGggLSAxKS5qb2luKFwiLCBcIik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXR0YWNobWVudEluRm9ybTogRHluQXR0YWNobWVudCA9ICg8SW1hZ2VTZWxlY3RvckZpZWxkPmZpZWxkKS5BdHRhY2htZW50TGlzdC5maW5kKHggPT4geC5JRCA9PSByZWNvcmRbZmllbGQuTmFtZV0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnRJbkZvcm0gIT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgIG91dHB1dFZhbHVlc0FycmF5W2ZpZWxkLk5hbWVdID0gYXR0YWNobWVudEluRm9ybS5CdXR0b25LZXk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH07ICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICBkZWZhdWx0OntcclxuICAgICAgICAgICAgICBvdXRwdXRWYWx1ZXNBcnJheVtmaWVsZC5OYW1lXSA9IHJlY29yZFtmaWVsZC5OYW1lXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIClcclxuXHJcbiAgICAvLyBGdW56aW9uYSwgbWEgbm9uIMOoIGFmZmlkYWJpbGUgYWwgMTAwJVxyXG4gICAgYXdhaXQgdGhpcy5kZWxheSgzMDAwKTtcclxuXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwib3V0cHV0VmFsdWVzQXJyYXkgMVwiLCBvdXRwdXRWYWx1ZXNBcnJheSk7XHJcbiAgICAvLyBjYW5jZWxsbyBpIHZhbG9yaSBpbmRlZmluaXRpIG8gbnVsbGlcclxuICAgIGZvciAoY29uc3QgY2hpYXZlIGluIG91dHB1dFZhbHVlc0FycmF5KSB7XHJcbiAgICAgIGlmIChvdXRwdXRWYWx1ZXNBcnJheVtjaGlhdmVdID09IHVuZGVmaW5lZCB8fCBvdXRwdXRWYWx1ZXNBcnJheVtjaGlhdmVdID09IG51bGwpXHJcbiAgICAgICAgb3V0cHV0VmFsdWVzQXJyYXlbY2hpYXZlXSA9ICcnXHJcbiAgICB9XHJcbiAgICByZXR1cm4gb3V0cHV0VmFsdWVzQXJyYXk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJlc3BvbnNlVGVtcGxhdGUocmVjb3JkOiBSZWNvcmQsIGZvcm06IEZvcm0pOiBzdHJpbmcge1xyXG4gICAgICBsZXQgdGVtcGxhdGU6IHN0cmluZyA9ICc8ZGl2IGNsYXNzPVwicm93XCI+JztcclxuICAgIC8vIFBSRVBBUk8gTyBQUkVORE8gTEEgU1RSVVRUVVJBIERBIFNUQU1QQVJFXHJcbiAgICBmb3JtLkZpZWxkcy5mb3JFYWNoKChiYXNlRmllbGQ6IEJhc2VGaWVsZCkgPT4ge1xyXG4gICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdnZXRSZXNwb3NuZVRlbXBsYXRlIC0gcHJlIC0gZmllbGQnLCBiYXNlRmllbGQpXHJcbiAgICAgIGlmKGJhc2VGaWVsZC5BbnN3ZXJTdHlsZSA9PSBudWxsIHx8IGJhc2VGaWVsZC5BbnN3ZXJTdHlsZSA9PSB1bmRlZmluZWQpe1xyXG4gICAgICAgIGJhc2VGaWVsZC5BbnN3ZXJTdHlsZSA9IG5ldyBBbnN3ZXJTdHlsZSgpO1xyXG4gICAgICAgIGJhc2VGaWVsZC5BbnN3ZXJTdHlsZS5Db2xTcGFuU2l6ZXMgPSBiYXNlRmllbGQuQ29sU3BhblNpemVzO1xyXG4gICAgICAgIGJhc2VGaWVsZC5BbnN3ZXJTdHlsZS5GaWVsZHN0eWxlQ1NTID0gYmFzZUZpZWxkLkZpZWxkc3R5bGVDU1M7XHJcbiAgICAgICAgYmFzZUZpZWxkLkFuc3dlclN0eWxlLkxhYmVsc3R5bGVDU1MgPSBiYXNlRmllbGQuTGFiZWxzdHlsZUNTUztcclxuICAgICAgICBpZihiYXNlRmllbGQuVmlzaWJsZUlmKXtcclxuICAgICAgICAgIGJhc2VGaWVsZC5BbnN3ZXJTdHlsZS5Jbkxpc3RWaWV3ID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEoYmFzZUZpZWxkLlZpc2libGVJZiwgcmVjb3JkLCBudWxsKTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgIGJhc2VGaWVsZC5BbnN3ZXJTdHlsZS5Jbkxpc3RWaWV3ID0gYmFzZUZpZWxkLkluTGlzdFZpZXc7XHJcbiAgICAgICAgICBiYXNlRmllbGQuQW5zd2VyU3R5bGUuVmlzaWJsZUlmID0gYmFzZUZpZWxkLlZpc2libGVJZjtcclxuICAgICAgICB9XHJcbiAgICAgIH0gXHJcbiAgICAgIGlmKGJhc2VGaWVsZC5BbnN3ZXJTdHlsZS5WaXNpYmxlSWYpe1xyXG4gICAgICAgIGNvbnN0IHZpc2liaWxpdHkgPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYShiYXNlRmllbGQuQW5zd2VyU3R5bGUuVmlzaWJsZUlmLCByZWNvcmQsIG51bGwpXHJcbiAgICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIkV2YWx1YXRlRmllbGRGb3JtdWxhIC0gdmlzaWJpbGl0eVwiLCB2aXNpYmlsaXR5KTtcclxuICAgICAgICBiYXNlRmllbGQuQW5zd2VyU3R5bGUuSW5MaXN0VmlldyA9ICh2aXNpYmlsaXR5ID09IHRydWUpID8gdHJ1ZSA6IGZhbHNlIDtcclxuICAgICAgfVxyXG4gICAgICBpZihiYXNlRmllbGQuQW5zd2VyU3R5bGUuSW5MaXN0Vmlldyl7XHJcbiAgICAgICAgdGVtcGxhdGUgKz0gJzxkaXYgY2xhc3M9XCInKyB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldEZpZWxkQW5zd2VyU3R5bGVDbGFzcyhiYXNlRmllbGQpICsnIGQtZmxleCBmbGV4LWNvbHVtbiBkeW5hZm9ybS1hbnN3ZXItZmllbGRcIj4gJytcclxuICAgICAgICAnIDxzcGFuIGNsYXNzPVwiZHluYWZvcm0tcXVlc3Rpb25cIiBzdHlsZT1cIicgKyBiYXNlRmllbGQuQW5zd2VyU3R5bGUuTGFiZWxzdHlsZUNTUyArICdcIj4nICsgYmFzZUZpZWxkLkRlc2NyaXB0aW9uICsgJzo8L3NwYW4+JyArIFxyXG4gICAgICAgICcgPHNwYW4gY2xhc3M9XCJkeW5hZm9ybS1yZXNwb25zZVwiIHN0eWxlPVwiJyArIGJhc2VGaWVsZC5BbnN3ZXJTdHlsZS5GaWVsZHN0eWxlQ1NTICsgJ1wiPiAjIycgKyBiYXNlRmllbGQuTmFtZSArICcjIzwvc3Bhbj4nICsgXHJcbiAgICAgICAgJzwvZGl2PiBcXG4gJztcclxuICAgICAgfVxyXG4gICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdnZXRSZXNwb3NuZVRlbXBsYXRlIC0gcG9zdCAtIGZpZWxkJywgYmFzZUZpZWxkKVxyXG4gICAgfSk7XHJcbiAgICAvLyAoYXR0dWFsbWVudGUgbm9uIGVzaXN0ZSBpbCBjb25jZXR0byBkaSB0ZW1wYXRlIGRpIG91dHB1dClcclxuICAgICAgdGVtcGxhdGUgKz0gJzwvZGl2Pic7XHJcbiAgICAgIHJldHVybiB0ZW1wbGF0ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVwbGFjZVRlbXBsYXRlUGxhY2Vob2xkZXJzV2l0aFZhbHVlcyh0ZW1wbGF0ZTogc3RyaW5nLCBvdXRwdXRWYWx1ZXNBcnJheTogQXJyYXk8YW55PiwgcmVnZXgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRlbXBsYXRlLnJlcGxhY2UocmVnZXgsIChtYXRjaCwgZ3JvdXApID0+IHtcclxuICAgICAgcmV0dXJuIDxzdHJpbmc+b3V0cHV0VmFsdWVzQXJyYXlbZ3JvdXBdO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkZWxheShtczogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoIHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgcmVzaXplQmFzZTY0SW1hZ2UgKGJhc2U2NEltYWdlOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xyXG4gICAgICBpbWcuc3JjID0gYmFzZTY0SW1hZ2U7XHJcbiAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcclxuICAgICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgICBjb25zdCB3aWR0aCA9IGltZy53aWR0aDtcclxuICAgICAgICBjb25zdCBoZWlnaHQgPSBpbWcuaGVpZ2h0O1xyXG4gICAgICAgIGNvbnN0IGFzcGVjdFJhdGlvID0gd2lkdGggLyBoZWlnaHQ7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgbmV3SGVpZ2h0ID0gMTI4O1xyXG4gICAgICAgIGNvbnN0IG5ld1dpZHRoID0gbmV3SGVpZ2h0ICogYXNwZWN0UmF0aW87XHJcblxyXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IG5ld1dpZHRoO1xyXG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSBuZXdIZWlnaHQ7XHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIDAsIDAsIG5ld1dpZHRoLCBuZXdIZWlnaHQpO1xyXG4gICAgICAgIGxldCBxdWFsaXR5ID0gMC44O1xyXG4gICAgICAgIGxldCBkYXRhVVJMID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIHF1YWxpdHkpO1xyXG4gICAgICAgIHJlc29sdmUoZGF0YVVSTCk7XHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9ICBcclxuXHJcbiAgc2V0RGF0YUdldHRlcihmb3JtKXtcclxuICAgIGZvcm0uRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcblxyXG4gICAgICAvLyBUcmFzZm9ybW8gaWwgQmFzZTY0U3RyaW5nIGRlbCBEYXRhZ2V0dGVyIG5lbCBEYXRhZ2V0dGVyIHZlcm8gZSBwcm9wcmlvXHJcbiAgICAgIGlmIChmaWVsZC5EYXRhR2V0dGVyVmFsdWVCYXNlNjRTdHJpbmcgIT0gbnVsbCl7XHJcbiAgICAgICAgZmllbGQuRGF0YUdldHRlciA9IEpTT04ucGFyc2UoYXRvYihmaWVsZC5EYXRhR2V0dGVyVmFsdWVCYXNlNjRTdHJpbmcpKTtcclxuICAgICAgICBmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlID0gZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9PSBudWxsID8gRGF0YUdldHRlclR5cGVFbnVtLk1hbnVhbGUgOiBmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlOyAgIFxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwic2V0RGF0YUdldHRlclwiLGZpZWxkLkRhdGFHZXR0ZXIpOyAgICAgICBcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmaWVsZC5EYXRhR2V0dGVyID0gbmV3IERhdGFHZXR0ZXIoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZmllbGQuRGF0YUdldHRlclZhbHVlQmFzZTY0U3RyaW5nID0gbnVsbDtcclxuXHJcbiAgICB9KTsgICAgICBcclxuICB9XHJcblxyXG59XHJcbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJsb2FkZXJcIj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IGVxcC1keW5hbWljLW1vZHVsZS10aXRsZSBhZGQtZm9ybS1yZWNvcmQtaGVhZGVyXCIgKm5nSWY9XCJzaG93VGl0bGVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgIDxzcGFuPnt7Zm9ybS5OYW1lfX08L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1Gb3JtXCIgY2xhc3M9XCJhZGQtZm9ybS1yZWNvcmQtZm9ybVwiPlxyXG5cclxuICAgICAgICA8IS0tIFZJU1VBTElaWkFaSU9ORSBTRU1QTElDRSAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZm9ybS5Gb3JtU2NhbGFyVHlwZSA9PSBGb3JtU2NhbGFyVHlwZUVudW0uU2VtcGxpY2VcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJmaWVsZFRlbXBsYXRlc1wiXHJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGZpZWxkczogZm9ybS5GaWVsZHMgfVwiIGNsYXNzPVwiYWRkLWZvcm0tcmVjb3JkLXNlbXBsaWNlXCI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDwhLS0gVklTVUFMSVpaQVpJT05FIEEgU1RFUFBFUiAtLT5cclxuICAgICAgICA8bWF0LWhvcml6b250YWwtc3RlcHBlciBsaW5lYXIgKm5nSWY9XCJmb3JtLkZvcm1TY2FsYXJUeXBlID09IEZvcm1TY2FsYXJUeXBlRW51bVsnQSBzdGVwJ11cIlxyXG4gICAgICAgICAgICBjbGFzcz1cImFkZC1mb3JtLXJlY29yZC1zdGVwcGVyXCI+XHJcbiAgICAgICAgICAgIDxtYXQtc3RlcCAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgZm9ybS5Gb3JtRmllbGRzR3JvdXBzOyBsZXQgaSA9IGluZGV4OyBsZXQgZmlyc3QgPSBmaXJzdDsgbGV0IGxhc3QgPSBsYXN0XCI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0U3RlcExhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7Z3JvdXAuTmFtZX19XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmllbGRUZW1wbGF0ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGZpZWxkczogZmllbGRHcm91cHNbZ3JvdXAuTmFtZV0gfVwiPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgYWRkLWZvcm0tcmVjb3JkLWJ1dHRvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIWZpcnN0XCIgY2xhc3M9XCJtci0yIHByZXZpb3VzXCIgbWF0LXJhaXNlZC1idXR0b24gbWF0U3RlcHBlclByZXZpb3VzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBQcmVjZWRlbnRlXHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFsYXN0XCIgY2xhc3M9XCJidXR0b24tbmV4dFwiIGNvbG9yPVwicHJpbWFyeVwiIG1hdC1yYWlzZWQtYnV0dG9uIG1hdFN0ZXBwZXJOZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBTdWNjZXNzaXZvXHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImxhc3QgJiYgc2hvd1NhdmVCdXR0b25cIiAoY2xpY2spPVwic2F2ZU9yRXhpdEZvcm0oZmFsc2UpXCIgY2xhc3M9XCJidXR0b24tbmV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiIG1hdC1yYWlzZWQtYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBTYWx2YVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8L21hdC1zdGVwPlxyXG4gICAgICAgIDwvbWF0LWhvcml6b250YWwtc3RlcHBlcj5cclxuXHJcbiAgICAgICAgPCEtLSBWSVNVQUxJWlpBWklPTkUgQSBUQUIgLS0+XHJcbiAgICAgICAgPG1hdC10YWItZ3JvdXAgKm5nSWY9XCJmb3JtLkZvcm1TY2FsYXJUeXBlID09IEZvcm1TY2FsYXJUeXBlRW51bVsnSW4gdGFiJ11cIiBjbGFzcz1cImFkZC1mb3JtLXJlY29yZC10YWJcIj5cclxuICAgICAgICAgICAgPG1hdC10YWIgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGZvcm0uRm9ybUZpZWxkc0dyb3Vwc1wiIFtsYWJlbF09XCJncm91cC5OYW1lXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmllbGRUZW1wbGF0ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBmaWVsZHM6IGZpZWxkR3JvdXBzW2dyb3VwLk5hbWVdIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L21hdC10YWI+XHJcbiAgICAgICAgPC9tYXQtdGFiLWdyb3VwPlxyXG5cclxuICAgICAgICA8IS0tIFZJU1VBTElaWkFaSU9ORSBBRCBBQ0NPUkRJT04gLS0+XHJcbiAgICAgICAgPG1hdC1hY2NvcmRpb24gbXVsdGkgKm5nSWY9XCJmb3JtLkZvcm1TY2FsYXJUeXBlID09IEZvcm1TY2FsYXJUeXBlRW51bVsnSW4gYWNjb3JkaW9uJ11cIlxyXG4gICAgICAgICAgICBjbGFzcz1cImFkZC1mb3JtLXJlY29yZC1hY2NvcmRpb25cIj5cclxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGZvcm0uRm9ybUZpZWxkc0dyb3Vwc1wiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7Z3JvdXAuTmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmllbGRUZW1wbGF0ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGZpZWxkczogZmllbGRHcm91cHNbZ3JvdXAuTmFtZV0gfVwiPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuICAgICAgICA8L21hdC1hY2NvcmRpb24+XHJcbiAgICA8L2Zvcm0+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBtdC0yIGFkZC1mb3JtLXJlY29yZC1idXR0b25zXCJcclxuICAgICAgICAqbmdJZj1cIihzaG93QmFja0J1dHRvbiB8fCBzaG93U2F2ZUJ1dHRvbikgJiYgZm9ybS5Gb3JtU2NhbGFyVHlwZSAhPSBGb3JtU2NhbGFyVHlwZUVudW1bJ0Egc3RlcCddXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiB0ZXh0LXJpZ2h0XCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtci0yXCIgbWF0LXJhaXNlZC1idXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwic2hvd0JhY2tCdXR0b25cIiAoY2xpY2spPVwic2F2ZU9yRXhpdEZvcm0odHJ1ZSlcIj5cclxuICAgICAgICAgICAgICAgIEFubnVsbGFcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtci0yXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwic2hvd1NhdmVCdXR0b25cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVPckV4aXRGb3JtKGZhbHNlKVwiIFtkaXNhYmxlZF09XCJmb3JtRm9ybS5pbnZhbGlkIHx8IGZvcm1Gb3JtLmRpc2FibGVkIHx8IGlzU2F2aW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpc1NhdmluZ1wiPlNhbHZhPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpc1NhdmluZ1wiPlNhbHZhdGFnZ2lvIGluIENvcnNvLi4uPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuXHJcbjwhLS0gVEVNUExBVEUgUEVSIExBIFZJU1VBTElaWkFaSU9ORSBERUkgQ0FNUEkgREVMTEEgRk9STSAtLT5cclxuPG5nLXRlbXBsYXRlICNmaWVsZFRlbXBsYXRlcyBsZXQtZmllbGRzPSdmaWVsZHMnPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yXCIgKm5nRm9yPVwibGV0IGZpZWxkIG9mIGZpZWxkc1wiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInV0aWxpdHlTZXJ2aWNlLmdldEZpZWxkU3lsZUNsYXNzKGZpZWxkKVwiPlxyXG4gICAgICAgICAgICA8ZHluYW1pYy1tb2R1bGUtZmllbGQtZml4ICNmaWVsZFRlbXBsYXRlIFtmaWVsZF09XCJmaWVsZFwiIFtRdWVyeUVkaXRvckNvbXBvbmVudF09XCJRdWVyeUVkaXRvckNvbXBvbmVudFwiIFtmb3JtXT1cImZvcm1cIiBbcmVjb3JkXT1cInJlY29yZFwiIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCIgW2luQ29uZmlnXT1cImluQ29uZmlnXCJcclxuICAgICAgICAgICAgICAgIChyZWNvcmRDaGFuZ2UpPVwib25SZWNvcmRDaGFuZ2UoKVwiPlxyXG4gICAgICAgICAgICA8L2R5bmFtaWMtbW9kdWxlLWZpZWxkLWZpeD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
@@ -4107,6 +4107,7 @@ class DynamicModuleFieldFixComponent {
4107
4107
  }
4108
4108
  }
4109
4109
  ngOnInit() {
4110
+ console.log("dynamic-module-field", this.field);
4110
4111
  this.configList.values = this.record[this.field.Name];
4111
4112
  this.configList.showTitle = true;
4112
4113
  this.configList.defaultListActions = new DynamicModuleListFormRecordActionsDefault();
@@ -4410,6 +4411,7 @@ class AddFormRecordComponent {
4410
4411
  });
4411
4412
  this.utilityService.RunEndPointCall(this.endPointConfiguration.Forms.GetByIDEndPoint, dynamicModuleParams, (res) => {
4412
4413
  this.form = res;
4414
+ this.setDataGetter(this.form);
4413
4415
  GlobalService.debugLog('getFormByID - DynaForm', this.form);
4414
4416
  this.fieldsConfig();
4415
4417
  }, (err) => { });
@@ -4459,6 +4461,7 @@ class AddFormRecordComponent {
4459
4461
  this.utilityService.RunEndPointCall(this.endPointConfiguration.Forms.GetByIDAndVersionEndPoint, dynamicModuleParams, (res) => {
4460
4462
  GlobalService.debugLog("AFTER getFormByIDandVersion - this.form", res);
4461
4463
  this.form = res;
4464
+ this.setDataGetter(this.form);
4462
4465
  this.createRecordProperties();
4463
4466
  this.reorderFormFields();
4464
4467
  this.createFormGroup();
@@ -4780,6 +4783,20 @@ class AddFormRecordComponent {
4780
4783
  });
4781
4784
  });
4782
4785
  }
4786
+ setDataGetter(form) {
4787
+ form.Fields.forEach((field) => {
4788
+ // Trasformo il Base64String del Datagetter nel Datagetter vero e proprio
4789
+ if (field.DataGetterValueBase64String != null) {
4790
+ field.DataGetter = JSON.parse(atob(field.DataGetterValueBase64String));
4791
+ field.DataGetter.DataGetterType = field.DataGetter.DataGetterType == null ? DataGetterTypeEnum.Manuale : field.DataGetter.DataGetterType;
4792
+ console.log("setDataGetter", field.DataGetter);
4793
+ }
4794
+ else {
4795
+ field.DataGetter = new DataGetter();
4796
+ }
4797
+ field.DataGetterValueBase64String = null;
4798
+ });
4799
+ }
4783
4800
  }
4784
4801
  AddFormRecordComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AddFormRecordComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: UtilityHelperService }], target: i0.ɵɵFactoryTarget.Component });
4785
4802
  AddFormRecordComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: AddFormRecordComponent, selector: "add-form-record", inputs: { configurations: "configurations", endPointConfiguration: "endPointConfiguration", userID: "userID", formID: "formID", form: "form", record: "record", onlyView: "onlyView", isDuplicate: "isDuplicate", inConfig: "inConfig", QueryEditorComponent: "QueryEditorComponent" }, outputs: { saveRecordEvent: "saveRecordEvent", afterSaveRecordEvent: "afterSaveRecordEvent", out: "out" }, viewQueries: [{ propertyName: "fieldTemplate", predicate: ["fieldTemplate"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"loader\">\r\n\r\n <div class=\"row eqp-dynamic-module-title add-form-record-header\" *ngIf=\"showTitle\">\r\n <div class=\"col-md-12\">\r\n <span>{{form.Name}}</span>\r\n </div>\r\n </div>\r\n\r\n <form [formGroup]=\"formForm\" class=\"add-form-record-form\">\r\n\r\n <!-- VISUALIZZAZIONE SEMPLICE -->\r\n <ng-container *ngIf=\"form.FormScalarType == FormScalarTypeEnum.Semplice\" [ngTemplateOutlet]=\"fieldTemplates\"\r\n [ngTemplateOutletContext]=\"{ fields: form.Fields }\" class=\"add-form-record-semplice\">\r\n </ng-container>\r\n\r\n <!-- VISUALIZZAZIONE A STEPPER -->\r\n <mat-horizontal-stepper linear *ngIf=\"form.FormScalarType == FormScalarTypeEnum['A step']\"\r\n class=\"add-form-record-stepper\">\r\n <mat-step *ngFor=\"let group of form.FormFieldsGroups; let i = index; let first = first; let last = last\">\r\n <ng-template matStepLabel>\r\n {{group.Name}}\r\n </ng-template>\r\n\r\n <ng-container [ngTemplateOutlet]=\"fieldTemplates\"\r\n [ngTemplateOutletContext]=\"{ fields: fieldGroups[group.Name] }\">\r\n </ng-container>\r\n\r\n <div class=\"mt-2 d-flex justify-content-end add-form-record-buttons\">\r\n <button *ngIf=\"!first\" class=\"mr-2 previous\" mat-raised-button matStepperPrevious>\r\n Precedente\r\n </button>\r\n <button *ngIf=\"!last\" class=\"button-next\" color=\"primary\" mat-raised-button matStepperNext>\r\n Successivo\r\n </button>\r\n <button *ngIf=\"last && showSaveButton\" (click)=\"saveOrExitForm(false)\" class=\"button-next\"\r\n color=\"primary\" mat-raised-button>\r\n Salva\r\n </button>\r\n </div>\r\n\r\n </mat-step>\r\n </mat-horizontal-stepper>\r\n\r\n <!-- VISUALIZZAZIONE A TAB -->\r\n <mat-tab-group *ngIf=\"form.FormScalarType == FormScalarTypeEnum['In tab']\" class=\"add-form-record-tab\">\r\n <mat-tab *ngFor=\"let group of form.FormFieldsGroups\" [label]=\"group.Name\">\r\n <div class=\"mt-3\">\r\n <ng-container [ngTemplateOutlet]=\"fieldTemplates\"\r\n [ngTemplateOutletContext]=\"{ fields: fieldGroups[group.Name] }\">\r\n </ng-container>\r\n </div>\r\n </mat-tab>\r\n </mat-tab-group>\r\n\r\n <!-- VISUALIZZAZIONE AD ACCORDION -->\r\n <mat-accordion multi *ngIf=\"form.FormScalarType == FormScalarTypeEnum['In accordion']\"\r\n class=\"add-form-record-accordion\">\r\n <mat-expansion-panel *ngFor=\"let group of form.FormFieldsGroups\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{group.Name}}\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n\r\n <ng-container [ngTemplateOutlet]=\"fieldTemplates\"\r\n [ngTemplateOutletContext]=\"{ fields: fieldGroups[group.Name] }\">\r\n </ng-container>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n </form>\r\n\r\n <div class=\"row mt-2 add-form-record-buttons\"\r\n *ngIf=\"(showBackButton || showSaveButton) && form.FormScalarType != FormScalarTypeEnum['A step']\">\r\n <div class=\"col-sm-12 text-right\">\r\n <button class=\"mr-2\" mat-raised-button type=\"button\" *ngIf=\"showBackButton\" (click)=\"saveOrExitForm(true)\">\r\n Annulla\r\n </button>\r\n <button class=\"mr-2\" mat-raised-button color=\"primary\" type=\"button\" *ngIf=\"showSaveButton\"\r\n (click)=\"saveOrExitForm(false)\" [disabled]=\"formForm.invalid || formForm.disabled || isSaving\">\r\n <span *ngIf=\"!isSaving\">Salva</span>\r\n <span *ngIf=\"isSaving\">Salvataggio in Corso...</span>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n</ng-container>\r\n\r\n\r\n\r\n<!-- TEMPLATE PER LA VISUALIZZAZIONE DEI CAMPI DELLA FORM -->\r\n<ng-template #fieldTemplates let-fields='fields'>\r\n <div class=\"row\">\r\n <div class=\"mt-2\" *ngFor=\"let field of fields\"\r\n [ngClass]=\"utilityService.getFieldSyleClass(field)\">\r\n <dynamic-module-field-fix #fieldTemplate [field]=\"field\" [QueryEditorComponent]=\"QueryEditorComponent\" [form]=\"form\" [record]=\"record\" [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\"\r\n (recordChange)=\"onRecordChange()\">\r\n </dynamic-module-field-fix>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".visibility_hidden{display:none}.visibility_transparent{visibility:hidden}\n"], dependencies: [{ kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i11.MatStep, selector: "mat-step", inputs: ["color"], exportAs: ["matStep"] }, { kind: "directive", type: i11.MatStepLabel, selector: "[matStepLabel]" }, { kind: "component", type: i11.MatStepper, selector: "mat-stepper, mat-vertical-stepper, mat-horizontal-stepper, [matStepper]", inputs: ["selectedIndex", "disableRipple", "color", "labelPosition", "headerPosition", "animationDuration"], outputs: ["animationDone"], exportAs: ["matStepper", "matVerticalStepper", "matHorizontalStepper"] }, { kind: "directive", type: i11.MatStepperNext, selector: "button[matStepperNext]", inputs: ["type"] }, { kind: "directive", type: i11.MatStepperPrevious, selector: "button[matStepperPrevious]", inputs: ["type"] }, { kind: "component", type: i4$4.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i4$4.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }, { kind: "directive", type: i6$1.MatAccordion, selector: "mat-accordion", inputs: ["multi", "hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i6$1.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i6$1.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "directive", type: i6$1.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: DynamicModuleFieldFixComponent, selector: "dynamic-module-field-fix", inputs: ["endPointConfiguration", "field", "form", "record", "inConfig", "QueryEditorComponent"], outputs: ["recordChange", "out"] }] });