@lenne.tech/ng-base 13.14.2 → 13.17.0

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.
Files changed (31) hide show
  1. package/base-cms/base-cms-routing.module.d.ts +7 -0
  2. package/base-cms/base-cms.module.d.ts +23 -0
  3. package/base-cms/interfaces/base-cms-module-config.interface.d.ts +12 -0
  4. package/base-cms/lenne.tech-ng-base-base-cms.d.ts +5 -0
  5. package/base-cms/package.json +10 -0
  6. package/base-cms/pages/base-cms/base-cms.component.d.ts +70 -0
  7. package/base-cms/public-api.d.ts +6 -0
  8. package/base-components/components/model-form/model-form.component.d.ts +2 -1
  9. package/base-components/components/model-table/model-table.component.d.ts +2 -1
  10. package/esm2020/base-cms/base-cms-routing.module.mjs +32 -0
  11. package/esm2020/base-cms/base-cms.module.mjs +60 -0
  12. package/esm2020/base-cms/interfaces/base-cms-module-config.interface.mjs +3 -0
  13. package/esm2020/base-cms/lenne.tech-ng-base-base-cms.mjs +5 -0
  14. package/esm2020/base-cms/pages/base-cms/base-cms.component.mjs +168 -0
  15. package/esm2020/base-cms/public-api.mjs +10 -0
  16. package/esm2020/base-components/components/model-form/model-form.component.mjs +16 -3
  17. package/esm2020/base-components/components/model-table/model-table.component.mjs +17 -3
  18. package/esm2020/shared/services/graphql.service.mjs +6 -1
  19. package/fesm2015/lenne.tech-ng-base-base-cms.mjs +265 -0
  20. package/fesm2015/lenne.tech-ng-base-base-cms.mjs.map +1 -0
  21. package/fesm2015/lenne.tech-ng-base-base-components.mjs +31 -4
  22. package/fesm2015/lenne.tech-ng-base-base-components.mjs.map +1 -1
  23. package/fesm2015/lenne.tech-ng-base-shared.mjs +5 -0
  24. package/fesm2015/lenne.tech-ng-base-shared.mjs.map +1 -1
  25. package/fesm2020/lenne.tech-ng-base-base-cms.mjs +263 -0
  26. package/fesm2020/lenne.tech-ng-base-base-cms.mjs.map +1 -0
  27. package/fesm2020/lenne.tech-ng-base-base-components.mjs +31 -4
  28. package/fesm2020/lenne.tech-ng-base-base-components.mjs.map +1 -1
  29. package/fesm2020/lenne.tech-ng-base-shared.mjs +5 -0
  30. package/fesm2020/lenne.tech-ng-base-shared.mjs.map +1 -1
  31. package/package.json +11 -2
@@ -14,6 +14,7 @@ export class ModelFormComponent {
14
14
  this.graphQLService = graphQLService;
15
15
  this.formsService = formsService;
16
16
  this.delete = true;
17
+ this.logging = false;
17
18
  this.finished = new EventEmitter();
18
19
  this.loading = false;
19
20
  this.keys = [];
@@ -43,6 +44,10 @@ export class ModelFormComponent {
43
44
  });
44
45
  this.fields = this.fields['input'];
45
46
  this.keys = Object.keys(this.fields);
47
+ if (this.logging) {
48
+ console.log('ModelFormComponent::init->fields', this.fields);
49
+ console.log('ModelFormComponent::init->keys', this.keys);
50
+ }
46
51
  this.createForm(this.fields);
47
52
  if (this.id) {
48
53
  this.getObjectById(this.id);
@@ -55,6 +60,9 @@ export class ModelFormComponent {
55
60
  * @param id - The id of the object to be loaded
56
61
  */
57
62
  getObjectById(id) {
63
+ if (this.logging) {
64
+ console.log('ModelFormComponent::getObjectById->id', id);
65
+ }
58
66
  this.graphQLService
59
67
  .graphQl('get' + this.capitalizeFirstLetter(this.modelName), {
60
68
  arguments: { id },
@@ -63,6 +71,9 @@ export class ModelFormComponent {
63
71
  })
64
72
  .subscribe({
65
73
  next: (value) => {
74
+ if (this.logging) {
75
+ console.log('ModelFormComponent::get->value', value);
76
+ }
66
77
  this.form.patchValue({ ...{}, ...value });
67
78
  },
68
79
  error: (err) => {
@@ -80,7 +91,7 @@ export class ModelFormComponent {
80
91
  const group = {};
81
92
  for (const [key, value] of Object.entries(fields)) {
82
93
  if (fields[key]?.type) {
83
- group[key] = new FormControl('', Validators.required);
94
+ group[key] = new FormControl('', value.isRequired ? Validators.required : []);
84
95
  }
85
96
  }
86
97
  this.form = new FormGroup(group);
@@ -160,7 +171,7 @@ export class ModelFormComponent {
160
171
  }
161
172
  }
162
173
  ModelFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ModelFormComponent, deps: [{ token: i1.GraphQLMetaService }, { token: i1.GraphQLService }, { token: i1.FormsService }], target: i0.ɵɵFactoryTarget.Component });
163
- ModelFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: ModelFormComponent, selector: "base-model-form", inputs: { modelName: "modelName", id: "id", delete: "delete" }, outputs: { finished: "finished" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"w-100\" *ngIf=\"form\">\n <h1>{{ capitalizeFirstLetter(modelName) }} {{ operation === 'update' ? 'bearbeiten' : 'erstellen' }}</h1>\n\n <form [formGroup]=\"form\">\n <div class=\"mt-3\" *ngFor=\"let key of keys\">\n <ng-container [ngSwitch]=\"fields[key]?.type\">\n <ng-container *ngSwitchCase=\"'String'\">\n <ng-container *ngIf=\"fields[key]?.isList\">\n <base-tags\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"fields[key].isRequired\"\n ></base-tags>\n </ng-container>\n\n <ng-container *ngIf=\"!fields[key]?.isList\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"capitalizeFirstLetter(key)\"\n [type]=\"'text'\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"fields[key].isRequired\"\n ></base-input>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Boolean'\">\n <base-checkbox\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"true\"\n ></base-checkbox>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'DateTime'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"capitalizeFirstLetter(key)\"\n [type]=\"'datetime-local'\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"true\"\n ></base-input>\n </ng-container>\n </ng-container>\n </div>\n\n <div class=\"d-flex mt-4\" [ngClass]=\"id && delete ? 'justify-content-between' : 'justify-content-end'\">\n <div *ngIf=\"id && delete\">\n <button class=\"btn btn-danger\" type=\"button\" (click)=\"deleteObject()\">L\u00F6schen</button>\n </div>\n <div>\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"submit()\" *ngIf=\"!loading\">\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}\n </button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}...\n </button>\n </div>\n </div>\n </form>\n</div>\n", styles: [""], components: [{ type: i2.TagsComponent, selector: "base-tags", inputs: ["id", "name", "label", "placeholder", "autocomplete", "tabIndex", "control", "options", "custom", "removeByKey", "required"] }, { type: i3.InputComponent, selector: "base-input", inputs: ["id", "name", "label", "placeholder", "autocomplete", "tabIndex", "control", "type", "required"] }, { type: i4.CheckboxComponent, selector: "base-checkbox", inputs: ["id", "name", "label", "value", "control", "required"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
174
+ ModelFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: ModelFormComponent, selector: "base-model-form", inputs: { modelName: "modelName", id: "id", delete: "delete", logging: "logging" }, outputs: { finished: "finished" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"w-100\" *ngIf=\"form\">\n <h1>{{ capitalizeFirstLetter(modelName) }} {{ operation === 'update' ? 'bearbeiten' : 'erstellen' }}</h1>\n\n <form [formGroup]=\"form\">\n <div class=\"mt-3\" *ngFor=\"let key of keys\">\n <ng-container [ngSwitch]=\"fields[key]?.type\">\n <ng-container *ngSwitchCase=\"'String'\">\n <ng-container *ngIf=\"fields[key]?.isList\">\n <base-tags\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"fields[key].isRequired\"\n ></base-tags>\n </ng-container>\n\n <ng-container *ngIf=\"!fields[key]?.isList\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"capitalizeFirstLetter(key)\"\n [type]=\"'text'\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"fields[key].isRequired\"\n ></base-input>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Boolean'\">\n <base-checkbox\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"true\"\n ></base-checkbox>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'DateTime'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"capitalizeFirstLetter(key)\"\n [type]=\"'datetime-local'\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"true\"\n ></base-input>\n </ng-container>\n </ng-container>\n </div>\n\n <div class=\"d-flex mt-4\" [ngClass]=\"id && delete ? 'justify-content-between' : 'justify-content-end'\">\n <div *ngIf=\"id && delete\">\n <button class=\"btn btn-danger\" type=\"button\" (click)=\"deleteObject()\">L\u00F6schen</button>\n </div>\n <div>\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"submit()\" *ngIf=\"!loading\">\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}\n </button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}...\n </button>\n </div>\n </div>\n </form>\n</div>\n", styles: [""], components: [{ type: i2.TagsComponent, selector: "base-tags", inputs: ["id", "name", "label", "placeholder", "autocomplete", "tabIndex", "control", "options", "custom", "removeByKey", "required"] }, { type: i3.InputComponent, selector: "base-input", inputs: ["id", "name", "label", "placeholder", "autocomplete", "tabIndex", "control", "type", "required"] }, { type: i4.CheckboxComponent, selector: "base-checkbox", inputs: ["id", "name", "label", "value", "control", "required"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
164
175
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ModelFormComponent, decorators: [{
165
176
  type: Component,
166
177
  args: [{ selector: 'base-model-form', template: "<div class=\"w-100\" *ngIf=\"form\">\n <h1>{{ capitalizeFirstLetter(modelName) }} {{ operation === 'update' ? 'bearbeiten' : 'erstellen' }}</h1>\n\n <form [formGroup]=\"form\">\n <div class=\"mt-3\" *ngFor=\"let key of keys\">\n <ng-container [ngSwitch]=\"fields[key]?.type\">\n <ng-container *ngSwitchCase=\"'String'\">\n <ng-container *ngIf=\"fields[key]?.isList\">\n <base-tags\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"fields[key].isRequired\"\n ></base-tags>\n </ng-container>\n\n <ng-container *ngIf=\"!fields[key]?.isList\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"capitalizeFirstLetter(key)\"\n [type]=\"'text'\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"fields[key].isRequired\"\n ></base-input>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'Boolean'\">\n <base-checkbox\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"capitalizeFirstLetter(key)\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"true\"\n ></base-checkbox>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'DateTime'\">\n <base-input\n [id]=\"key\"\n [name]=\"key\"\n [label]=\"capitalizeFirstLetter(key)\"\n [type]=\"'datetime-local'\"\n [control]=\"transformToControl(form?.get(key))\"\n [required]=\"true\"\n ></base-input>\n </ng-container>\n </ng-container>\n </div>\n\n <div class=\"d-flex mt-4\" [ngClass]=\"id && delete ? 'justify-content-between' : 'justify-content-end'\">\n <div *ngIf=\"id && delete\">\n <button class=\"btn btn-danger\" type=\"button\" (click)=\"deleteObject()\">L\u00F6schen</button>\n </div>\n <div>\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"submit()\" *ngIf=\"!loading\">\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}\n </button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}...\n </button>\n </div>\n </div>\n </form>\n</div>\n", styles: [""] }]
@@ -170,7 +181,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImpor
170
181
  type: Input
171
182
  }], delete: [{
172
183
  type: Input
184
+ }], logging: [{
185
+ type: Input
173
186
  }], finished: [{
174
187
  type: Output
175
188
  }] } });
176
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY29tcG9uZW50cy9jb21wb25lbnRzL21vZGVsLWZvcm0vbW9kZWwtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY29tcG9uZW50cy9jb21wb25lbnRzL21vZGVsLWZvcm0vbW9kZWwtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUlMLGtCQUFrQixHQUVuQixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBbUIsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7QUFRckYsTUFBTSxPQUFPLGtCQUFrQjtJQWM3QixZQUNVLGtCQUFzQyxFQUN0QyxjQUE4QixFQUM5QixZQUEwQjtRQUYxQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQWQzQixXQUFNLEdBQUcsSUFBSSxDQUFDO1FBRWIsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFJeEMsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUdoQixTQUFJLEdBQWEsRUFBRSxDQUFDO0lBTWpCLENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ25ELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBRWpCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2FBQ2I7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzVDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNiO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQUk7UUFDRixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUMvQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQy9DLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUMzRixJQUFJLEVBQUUsa0JBQWtCLENBQUMsUUFBUTthQUNsQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFRLENBQUM7WUFDMUMsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUVyQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUU3QixJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDN0I7U0FDRjtJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsYUFBYSxDQUFDLEVBQVU7UUFDdEIsSUFBSSxDQUFDLGNBQWM7YUFDaEIsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQzNELFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRTtZQUNqQixNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDakIsSUFBSSxFQUFFLGtCQUFrQixDQUFDLEtBQUs7U0FDL0IsQ0FBQzthQUNELFNBQVMsQ0FBQztZQUNULElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDYixPQUFPLENBQUMsS0FBSyxDQUFDLHNCQUFzQixFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUMzQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QixDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxVQUFVLENBQUMsTUFBOEI7UUFDdkMsTUFBTSxLQUFLLEdBQVEsRUFBRSxDQUFDO1FBRXRCLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2pELElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRTtnQkFDckIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDdkQ7U0FDRjtRQUVELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsWUFBWTtRQUNWLElBQUksT0FBTyxDQUFDLDBDQUEwQyxDQUFDLEVBQUU7WUFDdkQsSUFBSSxDQUFDLGNBQWM7aUJBQ2hCLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDOUQsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUU7Z0JBQzFCLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQztnQkFDZCxJQUFJLEVBQUUsa0JBQWtCLENBQUMsUUFBUTthQUNsQyxDQUFDO2lCQUNELFNBQVMsQ0FBQztnQkFDVCxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtvQkFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDM0IsQ0FBQztnQkFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDYixPQUFPLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUMvQyxDQUFDO2FBQ0YsQ0FBQyxDQUFDO1NBQ047SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxxQkFBcUIsQ0FBQyxLQUFhO1FBQ2pDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGtCQUFrQixDQUFDLE9BQTJDO1FBQzVELE9BQU8sT0FBc0IsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU07UUFDSixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQVcsQ0FBQyxDQUFDO1lBQzFELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLE9BQU87U0FDUjtRQUVELElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFO1lBQzNDLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsY0FBYzthQUNoQixPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ3BFLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDN0csTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDO1lBQ2QsSUFBSSxFQUFFLGtCQUFrQixDQUFDLFFBQVE7U0FDbEMsQ0FBQzthQUNELFNBQVMsQ0FBQztZQUNULElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNkLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQixDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDdkIsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNQLENBQUM7OytHQTlLVSxrQkFBa0I7bUdBQWxCLGtCQUFrQiwrS0NoQi9CLDZtRkFvRUE7MkZEcERhLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDRSxpQkFBaUI7aUtBS2xCLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csRUFBRTtzQkFBVixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFFSSxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBGb3Jtc1NlcnZpY2UsXG4gIEdyYXBoUUxNZXRhLFxuICBHcmFwaFFMTWV0YVNlcnZpY2UsXG4gIEdyYXBoUUxSZXF1ZXN0VHlwZSxcbiAgR3JhcGhRTFNlcnZpY2UsXG59IGZyb20gJ0BsZW5uZS50ZWNoL25nLWJhc2Uvc2hhcmVkJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElHcmFwaFFMVHlwZUNvbGxlY3Rpb24gfSBmcm9tICdAbGVubmUudGVjaC9uZy1iYXNlL3NoYXJlZCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Jhc2UtbW9kZWwtZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAnLi9tb2RlbC1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbW9kZWwtZm9ybS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBNb2RlbEZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIG1vZGVsTmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSBpZDogc3RyaW5nIHwgbnVsbDtcbiAgQElucHV0KCkgZGVsZXRlID0gdHJ1ZTtcblxuICBAT3V0cHV0KCkgZmluaXNoZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgbWV0YTogR3JhcGhRTE1ldGE7XG4gIGZvcm06IEZvcm1Hcm91cDtcbiAgbG9hZGluZyA9IGZhbHNlO1xuICBmaWVsZHM6IGFueTtcbiAgb3BlcmF0aW9uOiBzdHJpbmc7XG4gIGtleXM6IHN0cmluZ1tdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBncmFwaFFMTWV0YVNlcnZpY2U6IEdyYXBoUUxNZXRhU2VydmljZSxcbiAgICBwcml2YXRlIGdyYXBoUUxTZXJ2aWNlOiBHcmFwaFFMU2VydmljZSxcbiAgICBwcml2YXRlIGZvcm1zU2VydmljZTogRm9ybXNTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdyYXBoUUxNZXRhU2VydmljZS5nZXRNZXRhKCkuc3Vic2NyaWJlKChtZXRhKSA9PiB7XG4gICAgICB0aGlzLm1ldGEgPSBtZXRhO1xuXG4gICAgICBpZiAodGhpcy5tb2RlbE5hbWUpIHtcbiAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXNbJ21vZGVsTmFtZSddIHx8IGNoYW5nZXNbJ3ZhbHVlJ10pIHtcbiAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiA+IElmIHRoZSBtb2RlbCBuYW1lIGFuZCBtZXRhIGRhdGEgYXJlIHByZXNlbnQsIHNldCB0aGUgb3BlcmF0aW9uIHRvIHVwZGF0ZSBvciBjcmVhdGUsIGdldCB0aGUgZmllbGRzIGZyb20gdGhlIG1ldGFcbiAgICogZGF0YSwgY3JlYXRlIHRoZSBmb3JtLCBhbmQgaWYgdGhlIHZhbHVlIGlzIHByZXNlbnQsIHBhdGNoIHRoZSBmb3JtIHdpdGggdGhlIHZhbHVlXG4gICAqL1xuICBpbml0KCkge1xuICAgIGlmICh0aGlzLm1vZGVsTmFtZSAmJiB0aGlzLm1ldGEpIHtcbiAgICAgIHRoaXMub3BlcmF0aW9uID0gdGhpcy5pZCA/ICd1cGRhdGUnIDogJ2NyZWF0ZSc7XG4gICAgICB0aGlzLmZpZWxkcyA9IHRoaXMubWV0YS5nZXRBcmdzKHRoaXMub3BlcmF0aW9uICsgdGhpcy5jYXBpdGFsaXplRmlyc3RMZXR0ZXIodGhpcy5tb2RlbE5hbWUpLCB7XG4gICAgICAgIHR5cGU6IEdyYXBoUUxSZXF1ZXN0VHlwZS5NVVRBVElPTixcbiAgICAgIH0pO1xuICAgICAgdGhpcy5maWVsZHMgPSB0aGlzLmZpZWxkc1snaW5wdXQnXSBhcyBhbnk7XG4gICAgICB0aGlzLmtleXMgPSBPYmplY3Qua2V5cyh0aGlzLmZpZWxkcyk7XG5cbiAgICAgIHRoaXMuY3JlYXRlRm9ybSh0aGlzLmZpZWxkcyk7XG5cbiAgICAgIGlmICh0aGlzLmlkKSB7XG4gICAgICAgIHRoaXMuZ2V0T2JqZWN0QnlJZCh0aGlzLmlkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSXQgdGFrZXMgYW4gaWQsIGFuZCB0aGVuIGNhbGxzIHRoZSBncmFwaFFMU2VydmljZSB0byBnZXQgdGhlIG9iamVjdCBmcm9tIHRoZSBkYXRhYmFzZVxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgaWQgb2YgdGhlIG9iamVjdCB0byBiZSBsb2FkZWRcbiAgICovXG4gIGdldE9iamVjdEJ5SWQoaWQ6IHN0cmluZykge1xuICAgIHRoaXMuZ3JhcGhRTFNlcnZpY2VcbiAgICAgIC5ncmFwaFFsKCdnZXQnICsgdGhpcy5jYXBpdGFsaXplRmlyc3RMZXR0ZXIodGhpcy5tb2RlbE5hbWUpLCB7XG4gICAgICAgIGFyZ3VtZW50czogeyBpZCB9LFxuICAgICAgICBmaWVsZHM6IHRoaXMua2V5cyxcbiAgICAgICAgdHlwZTogR3JhcGhRTFJlcXVlc3RUeXBlLlFVRVJZLFxuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAodmFsdWUpID0+IHtcbiAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IC4uLnt9LCAuLi52YWx1ZSB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBvbiBsb2FkIG9iamVjdCcsIGVycik7XG4gICAgICAgICAgdGhpcy5maW5pc2hlZC5lbWl0KGZhbHNlKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IHRha2VzIGEgY29sbGVjdGlvbiBvZiBHcmFwaFFMIHR5cGVzIGFuZCBjcmVhdGVzIGEgZm9ybSBncm91cCB3aXRoIGEgZm9ybSBjb250cm9sIGZvciBlYWNoIHR5cGVcbiAgICpcbiAgICogQHBhcmFtIGZpZWxkcyAtIElHcmFwaFFMVHlwZUNvbGxlY3Rpb25cbiAgICovXG4gIGNyZWF0ZUZvcm0oZmllbGRzOiBJR3JhcGhRTFR5cGVDb2xsZWN0aW9uKSB7XG4gICAgY29uc3QgZ3JvdXA6IGFueSA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZmllbGRzKSkge1xuICAgICAgaWYgKGZpZWxkc1trZXldPy50eXBlKSB7XG4gICAgICAgIGdyb3VwW2tleV0gPSBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZm9ybSA9IG5ldyBGb3JtR3JvdXAoZ3JvdXApO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IGNhbGxzIHRoZSBncmFwaFFMU2VydmljZSB0byBkZWxldGUgdGhlIG9iamVjdCB3aXRoIHRoZSBpZCBvZiB0aGUgb2JqZWN0IHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIGVkaXRlZFxuICAgKi9cbiAgZGVsZXRlT2JqZWN0KCkge1xuICAgIGlmIChjb25maXJtKCdNw7ZjaHRlc3QgZHUgZGFzIE9iamVrdCB3aXJrbGljaCBsw7ZzY2hlbj8nKSkge1xuICAgICAgdGhpcy5ncmFwaFFMU2VydmljZVxuICAgICAgICAuZ3JhcGhRbCgnZGVsZXRlJyArIHRoaXMuY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHRoaXMubW9kZWxOYW1lKSwge1xuICAgICAgICAgIGFyZ3VtZW50czogeyBpZDogdGhpcy5pZCB9LFxuICAgICAgICAgIGZpZWxkczogWydpZCddLFxuICAgICAgICAgIHR5cGU6IEdyYXBoUUxSZXF1ZXN0VHlwZS5NVVRBVElPTixcbiAgICAgICAgfSlcbiAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaGVkLmVtaXQodHJ1ZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igb24gZGVsZXRlIG9iamVjdCcsIGVycik7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEl0IHRha2VzIGEgc3RyaW5nLCBjYXBpdGFsaXplcyB0aGUgZmlyc3QgbGV0dGVyLCBhbmQgcmV0dXJucyB0aGUgbW9kaWZpZWQgc3RyaW5nXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBzdHJpbmcgdG8gY2FwaXRhbGl6ZS5cbiAgICogQHJldHVybnMgVGhlIGZpcnN0IGxldHRlciBvZiB0aGUgc3RyaW5nIGlzIGJlaW5nIGNhcGl0YWxpemVkIGFuZCB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIGlzIGJlaW5nIHJldHVybmVkLlxuICAgKi9cbiAgY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdmFsdWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB2YWx1ZS5zbGljZSgxKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB0YWtlcyBhbiBBYnN0cmFjdENvbnRyb2wgYW5kIHJldHVybnMgYSBGb3JtQ29udHJvbFxuICAgKlxuICAgKiBAcGFyYW0gY29udHJvbCAtIEFic3RyYWN0Q29udHJvbCB8IG51bGwgfCB1bmRlZmluZWRcbiAgICogQHJldHVybnMgQSBGb3JtQ29udHJvbFxuICAgKi9cbiAgdHJhbnNmb3JtVG9Db250cm9sKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY29udHJvbCBhcyBGb3JtQ29udHJvbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB0YWtlcyB0aGUgZm9ybSwgdmFsaWRhdGVzIGl0LCBhbmQgdGhlbiBzZW5kcyBpdCB0byB0aGUgR3JhcGhRTCBzZXJ2ZXJcbiAgICpcbiAgICogQHJldHVybnMgVGhlIGlkIG9mIHRoZSBuZXdseSBjcmVhdGVkIG9yIHVwZGF0ZWQgb2JqZWN0LlxuICAgKi9cbiAgc3VibWl0KCkge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgaWYgKHRoaXMuZm9ybS5pbnZhbGlkKSB7XG4gICAgICB0aGlzLmZvcm1zU2VydmljZS52YWxpZGF0ZUFsbEZvcm1GaWVsZHModGhpcy5mb3JtIGFzIGFueSk7XG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcGVyYXRpb24gPT09ICd1cGRhdGUnICYmICF0aGlzLmlkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdJRCBpcyBtaXNzaW5nIGZvciB1cGRhdGUhJyk7XG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoUUxTZXJ2aWNlXG4gICAgICAuZ3JhcGhRbCh0aGlzLm9wZXJhdGlvbiArIHRoaXMuY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHRoaXMubW9kZWxOYW1lKSwge1xuICAgICAgICBhcmd1bWVudHM6IHRoaXMub3BlcmF0aW9uID09PSAndXBkYXRlJyA/IHsgaWQ6IHRoaXMuaWQsIGlucHV0OiB0aGlzLmZvcm0udmFsdWUgfSA6IHsgaW5wdXQ6IHRoaXMuZm9ybS52YWx1ZSB9LFxuICAgICAgICBmaWVsZHM6IFsnaWQnXSxcbiAgICAgICAgdHlwZTogR3JhcGhRTFJlcXVlc3RUeXBlLk1VVEFUSU9OLFxuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAodmFsdWUpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmZpbmlzaGVkLmVtaXQodHJ1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIG9uICcgKyB0aGlzLm9wZXJhdGlvbiwgZXJyKTtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidy0xMDBcIiAqbmdJZj1cImZvcm1cIj5cbiAgPGgxPnt7IGNhcGl0YWxpemVGaXJzdExldHRlcihtb2RlbE5hbWUpIH19IHt7IG9wZXJhdGlvbiA9PT0gJ3VwZGF0ZScgPyAnYmVhcmJlaXRlbicgOiAnZXJzdGVsbGVuJyB9fTwvaDE+XG5cbiAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gICAgPGRpdiBjbGFzcz1cIm10LTNcIiAqbmdGb3I9XCJsZXQga2V5IG9mIGtleXNcIj5cbiAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImZpZWxkc1trZXldPy50eXBlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidTdHJpbmcnXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpZWxkc1trZXldPy5pc0xpc3RcIj5cbiAgICAgICAgICAgIDxiYXNlLXRhZ3NcbiAgICAgICAgICAgICAgW2lkXT1cImtleVwiXG4gICAgICAgICAgICAgIFtuYW1lXT1cImtleVwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJjYXBpdGFsaXplRmlyc3RMZXR0ZXIoa2V5KVwiXG4gICAgICAgICAgICAgIFtjb250cm9sXT1cInRyYW5zZm9ybVRvQ29udHJvbChmb3JtPy5nZXQoa2V5KSlcIlxuICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiZmllbGRzW2tleV0uaXNSZXF1aXJlZFwiXG4gICAgICAgICAgICA+PC9iYXNlLXRhZ3M+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWZpZWxkc1trZXldPy5pc0xpc3RcIj5cbiAgICAgICAgICAgIDxiYXNlLWlucHV0XG4gICAgICAgICAgICAgIFtpZF09XCJrZXlcIlxuICAgICAgICAgICAgICBbbmFtZV09XCJrZXlcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKGtleSlcIlxuICAgICAgICAgICAgICBbdHlwZV09XCIndGV4dCdcIlxuICAgICAgICAgICAgICBbY29udHJvbF09XCJ0cmFuc2Zvcm1Ub0NvbnRyb2woZm9ybT8uZ2V0KGtleSkpXCJcbiAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImZpZWxkc1trZXldLmlzUmVxdWlyZWRcIlxuICAgICAgICAgICAgPjwvYmFzZS1pbnB1dD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ0Jvb2xlYW4nXCI+XG4gICAgICAgICAgPGJhc2UtY2hlY2tib3hcbiAgICAgICAgICAgIFtpZF09XCJrZXlcIlxuICAgICAgICAgICAgW25hbWVdPVwia2V5XCJcbiAgICAgICAgICAgIFtsYWJlbF09XCJjYXBpdGFsaXplRmlyc3RMZXR0ZXIoa2V5KVwiXG4gICAgICAgICAgICBbY29udHJvbF09XCJ0cmFuc2Zvcm1Ub0NvbnRyb2woZm9ybT8uZ2V0KGtleSkpXCJcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICA+PC9iYXNlLWNoZWNrYm94PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInRGF0ZVRpbWUnXCI+XG4gICAgICAgICAgPGJhc2UtaW5wdXRcbiAgICAgICAgICAgIFtpZF09XCJrZXlcIlxuICAgICAgICAgICAgW25hbWVdPVwia2V5XCJcbiAgICAgICAgICAgIFtsYWJlbF09XCJjYXBpdGFsaXplRmlyc3RMZXR0ZXIoa2V5KVwiXG4gICAgICAgICAgICBbdHlwZV09XCInZGF0ZXRpbWUtbG9jYWwnXCJcbiAgICAgICAgICAgIFtjb250cm9sXT1cInRyYW5zZm9ybVRvQ29udHJvbChmb3JtPy5nZXQoa2V5KSlcIlxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICAgID48L2Jhc2UtaW5wdXQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG10LTRcIiBbbmdDbGFzc109XCJpZCAmJiBkZWxldGUgPyAnanVzdGlmeS1jb250ZW50LWJldHdlZW4nIDogJ2p1c3RpZnktY29udGVudC1lbmQnXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwiaWQgJiYgZGVsZXRlXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRhbmdlclwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZGVsZXRlT2JqZWN0KClcIj5Mw7ZzY2hlbjwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2PlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJzdWJtaXQoKVwiICpuZ0lmPVwiIWxvYWRpbmdcIj5cbiAgICAgICAgICB7eyBvcGVyYXRpb24gPT09ICdjcmVhdGUnID8gJ0Vyc3RlbGxlbicgOiAnU3BlaWNoZXJuJyB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIiBkaXNhYmxlZCAqbmdJZj1cImxvYWRpbmdcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHNwaW5uZXItYm9yZGVyLXNtXCIgcm9sZT1cInN0YXR1c1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cbiAgICAgICAgICB7eyBvcGVyYXRpb24gPT09ICdjcmVhdGUnID8gJ0Vyc3RlbGxlbicgOiAnU3BlaWNoZXJuJyB9fS4uLlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Zvcm0+XG48L2Rpdj5cbiJdfQ==
189
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY29tcG9uZW50cy9jb21wb25lbnRzL21vZGVsLWZvcm0vbW9kZWwtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY29tcG9uZW50cy9jb21wb25lbnRzL21vZGVsLWZvcm0vbW9kZWwtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUlMLGtCQUFrQixHQUVuQixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBbUIsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7QUFRckYsTUFBTSxPQUFPLGtCQUFrQjtJQWU3QixZQUNVLGtCQUFzQyxFQUN0QyxjQUE4QixFQUM5QixZQUEwQjtRQUYxQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQWYzQixXQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ2QsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUVmLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBSXhDLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFHaEIsU0FBSSxHQUFhLEVBQUUsQ0FBQztJQU1qQixDQUFDO0lBRUosUUFBUTtRQUNOLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNuRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUVqQixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUNiO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUM1QyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDYjtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFJO1FBQ0YsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDL0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztZQUMvQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDM0YsSUFBSSxFQUFFLGtCQUFrQixDQUFDLFFBQVE7YUFDbEMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBUSxDQUFDO1lBQzFDLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFckMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNoQixPQUFPLENBQUMsR0FBRyxDQUFDLGtDQUFrQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDN0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQ0FBZ0MsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDMUQ7WUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUU3QixJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDN0I7U0FDRjtJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsYUFBYSxDQUFDLEVBQVU7UUFDdEIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUNBQXVDLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDMUQ7UUFFRCxJQUFJLENBQUMsY0FBYzthQUNoQixPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDM0QsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFO1lBQ2pCLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNqQixJQUFJLEVBQUUsa0JBQWtCLENBQUMsS0FBSztTQUMvQixDQUFDO2FBQ0QsU0FBUyxDQUFDO1lBQ1QsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2QsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO29CQUNoQixPQUFPLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxFQUFFLEtBQUssQ0FBQyxDQUFDO2lCQUN0RDtnQkFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUM1QyxDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDM0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsVUFBVSxDQUFDLE1BQThCO1FBQ3ZDLE1BQU0sS0FBSyxHQUFRLEVBQUUsQ0FBQztRQUV0QixLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNqRCxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUU7Z0JBQ3JCLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDL0U7U0FDRjtRQUVELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsWUFBWTtRQUNWLElBQUksT0FBTyxDQUFDLDBDQUEwQyxDQUFDLEVBQUU7WUFDdkQsSUFBSSxDQUFDLGNBQWM7aUJBQ2hCLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDOUQsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUU7Z0JBQzFCLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQztnQkFDZCxJQUFJLEVBQUUsa0JBQWtCLENBQUMsUUFBUTthQUNsQyxDQUFDO2lCQUNELFNBQVMsQ0FBQztnQkFDVCxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtvQkFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDM0IsQ0FBQztnQkFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDYixPQUFPLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUMvQyxDQUFDO2FBQ0YsQ0FBQyxDQUFDO1NBQ047SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxxQkFBcUIsQ0FBQyxLQUFhO1FBQ2pDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGtCQUFrQixDQUFDLE9BQTJDO1FBQzVELE9BQU8sT0FBc0IsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU07UUFDSixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQVcsQ0FBQyxDQUFDO1lBQzFELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLE9BQU87U0FDUjtRQUVELElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFO1lBQzNDLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsY0FBYzthQUNoQixPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ3BFLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDN0csTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDO1lBQ2QsSUFBSSxFQUFFLGtCQUFrQixDQUFDLFFBQVE7U0FDbEMsQ0FBQzthQUNELFNBQVMsQ0FBQztZQUNULElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNkLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQixDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDdkIsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNQLENBQUM7OytHQTVMVSxrQkFBa0I7bUdBQWxCLGtCQUFrQixtTUNoQi9CLDZtRkFvRUE7MkZEcERhLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDRSxpQkFBaUI7aUtBS2xCLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csRUFBRTtzQkFBVixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUksUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgRm9ybXNTZXJ2aWNlLFxuICBHcmFwaFFMTWV0YSxcbiAgR3JhcGhRTE1ldGFTZXJ2aWNlLFxuICBHcmFwaFFMUmVxdWVzdFR5cGUsXG4gIEdyYXBoUUxTZXJ2aWNlLFxufSBmcm9tICdAbGVubmUudGVjaC9uZy1iYXNlL3NoYXJlZCc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJR3JhcGhRTFR5cGVDb2xsZWN0aW9uIH0gZnJvbSAnQGxlbm5lLnRlY2gvbmctYmFzZS9zaGFyZWQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdiYXNlLW1vZGVsLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vbW9kZWwtZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21vZGVsLWZvcm0uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgTW9kZWxGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBtb2RlbE5hbWU6IHN0cmluZztcbiAgQElucHV0KCkgaWQ6IHN0cmluZyB8IG51bGw7XG4gIEBJbnB1dCgpIGRlbGV0ZSA9IHRydWU7XG4gIEBJbnB1dCgpIGxvZ2dpbmcgPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgZmluaXNoZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgbWV0YTogR3JhcGhRTE1ldGE7XG4gIGZvcm06IEZvcm1Hcm91cDtcbiAgbG9hZGluZyA9IGZhbHNlO1xuICBmaWVsZHM6IGFueTtcbiAgb3BlcmF0aW9uOiBzdHJpbmc7XG4gIGtleXM6IHN0cmluZ1tdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBncmFwaFFMTWV0YVNlcnZpY2U6IEdyYXBoUUxNZXRhU2VydmljZSxcbiAgICBwcml2YXRlIGdyYXBoUUxTZXJ2aWNlOiBHcmFwaFFMU2VydmljZSxcbiAgICBwcml2YXRlIGZvcm1zU2VydmljZTogRm9ybXNTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdyYXBoUUxNZXRhU2VydmljZS5nZXRNZXRhKCkuc3Vic2NyaWJlKChtZXRhKSA9PiB7XG4gICAgICB0aGlzLm1ldGEgPSBtZXRhO1xuXG4gICAgICBpZiAodGhpcy5tb2RlbE5hbWUpIHtcbiAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXNbJ21vZGVsTmFtZSddIHx8IGNoYW5nZXNbJ3ZhbHVlJ10pIHtcbiAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiA+IElmIHRoZSBtb2RlbCBuYW1lIGFuZCBtZXRhIGRhdGEgYXJlIHByZXNlbnQsIHNldCB0aGUgb3BlcmF0aW9uIHRvIHVwZGF0ZSBvciBjcmVhdGUsIGdldCB0aGUgZmllbGRzIGZyb20gdGhlIG1ldGFcbiAgICogZGF0YSwgY3JlYXRlIHRoZSBmb3JtLCBhbmQgaWYgdGhlIHZhbHVlIGlzIHByZXNlbnQsIHBhdGNoIHRoZSBmb3JtIHdpdGggdGhlIHZhbHVlXG4gICAqL1xuICBpbml0KCkge1xuICAgIGlmICh0aGlzLm1vZGVsTmFtZSAmJiB0aGlzLm1ldGEpIHtcbiAgICAgIHRoaXMub3BlcmF0aW9uID0gdGhpcy5pZCA/ICd1cGRhdGUnIDogJ2NyZWF0ZSc7XG4gICAgICB0aGlzLmZpZWxkcyA9IHRoaXMubWV0YS5nZXRBcmdzKHRoaXMub3BlcmF0aW9uICsgdGhpcy5jYXBpdGFsaXplRmlyc3RMZXR0ZXIodGhpcy5tb2RlbE5hbWUpLCB7XG4gICAgICAgIHR5cGU6IEdyYXBoUUxSZXF1ZXN0VHlwZS5NVVRBVElPTixcbiAgICAgIH0pO1xuICAgICAgdGhpcy5maWVsZHMgPSB0aGlzLmZpZWxkc1snaW5wdXQnXSBhcyBhbnk7XG4gICAgICB0aGlzLmtleXMgPSBPYmplY3Qua2V5cyh0aGlzLmZpZWxkcyk7XG5cbiAgICAgIGlmICh0aGlzLmxvZ2dpbmcpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ01vZGVsRm9ybUNvbXBvbmVudDo6aW5pdC0+ZmllbGRzJywgdGhpcy5maWVsZHMpO1xuICAgICAgICBjb25zb2xlLmxvZygnTW9kZWxGb3JtQ29tcG9uZW50Ojppbml0LT5rZXlzJywgdGhpcy5rZXlzKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jcmVhdGVGb3JtKHRoaXMuZmllbGRzKTtcblxuICAgICAgaWYgKHRoaXMuaWQpIHtcbiAgICAgICAgdGhpcy5nZXRPYmplY3RCeUlkKHRoaXMuaWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB0YWtlcyBhbiBpZCwgYW5kIHRoZW4gY2FsbHMgdGhlIGdyYXBoUUxTZXJ2aWNlIHRvIGdldCB0aGUgb2JqZWN0IGZyb20gdGhlIGRhdGFiYXNlXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgb2JqZWN0IHRvIGJlIGxvYWRlZFxuICAgKi9cbiAgZ2V0T2JqZWN0QnlJZChpZDogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMubG9nZ2luZykge1xuICAgICAgY29uc29sZS5sb2coJ01vZGVsRm9ybUNvbXBvbmVudDo6Z2V0T2JqZWN0QnlJZC0+aWQnLCBpZCk7XG4gICAgfVxuXG4gICAgdGhpcy5ncmFwaFFMU2VydmljZVxuICAgICAgLmdyYXBoUWwoJ2dldCcgKyB0aGlzLmNhcGl0YWxpemVGaXJzdExldHRlcih0aGlzLm1vZGVsTmFtZSksIHtcbiAgICAgICAgYXJndW1lbnRzOiB7IGlkIH0sXG4gICAgICAgIGZpZWxkczogdGhpcy5rZXlzLFxuICAgICAgICB0eXBlOiBHcmFwaFFMUmVxdWVzdFR5cGUuUVVFUlksXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmxvZ2dpbmcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdNb2RlbEZvcm1Db21wb25lbnQ6OmdldC0+dmFsdWUnLCB2YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyAuLi57fSwgLi4udmFsdWUgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igb24gbG9hZCBvYmplY3QnLCBlcnIpO1xuICAgICAgICAgIHRoaXMuZmluaXNoZWQuZW1pdChmYWxzZSk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB0YWtlcyBhIGNvbGxlY3Rpb24gb2YgR3JhcGhRTCB0eXBlcyBhbmQgY3JlYXRlcyBhIGZvcm0gZ3JvdXAgd2l0aCBhIGZvcm0gY29udHJvbCBmb3IgZWFjaCB0eXBlXG4gICAqXG4gICAqIEBwYXJhbSBmaWVsZHMgLSBJR3JhcGhRTFR5cGVDb2xsZWN0aW9uXG4gICAqL1xuICBjcmVhdGVGb3JtKGZpZWxkczogSUdyYXBoUUxUeXBlQ29sbGVjdGlvbikge1xuICAgIGNvbnN0IGdyb3VwOiBhbnkgPSB7fTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGZpZWxkcykpIHtcbiAgICAgIGlmIChmaWVsZHNba2V5XT8udHlwZSkge1xuICAgICAgICBncm91cFtrZXldID0gbmV3IEZvcm1Db250cm9sKCcnLCB2YWx1ZS5pc1JlcXVpcmVkID8gVmFsaWRhdG9ycy5yZXF1aXJlZCA6IFtdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmZvcm0gPSBuZXcgRm9ybUdyb3VwKGdyb3VwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCBjYWxscyB0aGUgZ3JhcGhRTFNlcnZpY2UgdG8gZGVsZXRlIHRoZSBvYmplY3Qgd2l0aCB0aGUgaWQgb2YgdGhlIG9iamVjdCB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyBlZGl0ZWRcbiAgICovXG4gIGRlbGV0ZU9iamVjdCgpIHtcbiAgICBpZiAoY29uZmlybSgnTcO2Y2h0ZXN0IGR1IGRhcyBPYmpla3Qgd2lya2xpY2ggbMO2c2NoZW4/JykpIHtcbiAgICAgIHRoaXMuZ3JhcGhRTFNlcnZpY2VcbiAgICAgICAgLmdyYXBoUWwoJ2RlbGV0ZScgKyB0aGlzLmNhcGl0YWxpemVGaXJzdExldHRlcih0aGlzLm1vZGVsTmFtZSksIHtcbiAgICAgICAgICBhcmd1bWVudHM6IHsgaWQ6IHRoaXMuaWQgfSxcbiAgICAgICAgICBmaWVsZHM6IFsnaWQnXSxcbiAgICAgICAgICB0eXBlOiBHcmFwaFFMUmVxdWVzdFR5cGUuTVVUQVRJT04sXG4gICAgICAgIH0pXG4gICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5maW5pc2hlZC5lbWl0KHRydWUpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIG9uIGRlbGV0ZSBvYmplY3QnLCBlcnIpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB0YWtlcyBhIHN0cmluZywgY2FwaXRhbGl6ZXMgdGhlIGZpcnN0IGxldHRlciwgYW5kIHJldHVybnMgdGhlIG1vZGlmaWVkIHN0cmluZ1xuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgc3RyaW5nIHRvIGNhcGl0YWxpemUuXG4gICAqIEByZXR1cm5zIFRoZSBmaXJzdCBsZXR0ZXIgb2YgdGhlIHN0cmluZyBpcyBiZWluZyBjYXBpdGFsaXplZCBhbmQgdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyBpcyBiZWluZyByZXR1cm5lZC5cbiAgICovXG4gIGNhcGl0YWxpemVGaXJzdExldHRlcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHZhbHVlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdmFsdWUuc2xpY2UoMSk7XG4gIH1cblxuICAvKipcbiAgICogSXQgdGFrZXMgYW4gQWJzdHJhY3RDb250cm9sIGFuZCByZXR1cm5zIGEgRm9ybUNvbnRyb2xcbiAgICpcbiAgICogQHBhcmFtIGNvbnRyb2wgLSBBYnN0cmFjdENvbnRyb2wgfCBudWxsIHwgdW5kZWZpbmVkXG4gICAqIEByZXR1cm5zIEEgRm9ybUNvbnRyb2xcbiAgICovXG4gIHRyYW5zZm9ybVRvQ29udHJvbChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGNvbnRyb2wgYXMgRm9ybUNvbnRyb2w7XG4gIH1cblxuICAvKipcbiAgICogSXQgdGFrZXMgdGhlIGZvcm0sIHZhbGlkYXRlcyBpdCwgYW5kIHRoZW4gc2VuZHMgaXQgdG8gdGhlIEdyYXBoUUwgc2VydmVyXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBpZCBvZiB0aGUgbmV3bHkgY3JlYXRlZCBvciB1cGRhdGVkIG9iamVjdC5cbiAgICovXG4gIHN1Ym1pdCgpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIGlmICh0aGlzLmZvcm0uaW52YWxpZCkge1xuICAgICAgdGhpcy5mb3Jtc1NlcnZpY2UudmFsaWRhdGVBbGxGb3JtRmllbGRzKHRoaXMuZm9ybSBhcyBhbnkpO1xuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3BlcmF0aW9uID09PSAndXBkYXRlJyAmJiAhdGhpcy5pZCkge1xuICAgICAgY29uc29sZS5lcnJvcignSUQgaXMgbWlzc2luZyBmb3IgdXBkYXRlIScpO1xuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5ncmFwaFFMU2VydmljZVxuICAgICAgLmdyYXBoUWwodGhpcy5vcGVyYXRpb24gKyB0aGlzLmNhcGl0YWxpemVGaXJzdExldHRlcih0aGlzLm1vZGVsTmFtZSksIHtcbiAgICAgICAgYXJndW1lbnRzOiB0aGlzLm9wZXJhdGlvbiA9PT0gJ3VwZGF0ZScgPyB7IGlkOiB0aGlzLmlkLCBpbnB1dDogdGhpcy5mb3JtLnZhbHVlIH0gOiB7IGlucHV0OiB0aGlzLmZvcm0udmFsdWUgfSxcbiAgICAgICAgZmllbGRzOiBbJ2lkJ10sXG4gICAgICAgIHR5cGU6IEdyYXBoUUxSZXF1ZXN0VHlwZS5NVVRBVElPTixcbiAgICAgIH0pXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHZhbHVlKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5maW5pc2hlZC5lbWl0KHRydWUpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCBvbiAnICsgdGhpcy5vcGVyYXRpb24sIGVycik7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInctMTAwXCIgKm5nSWY9XCJmb3JtXCI+XG4gIDxoMT57eyBjYXBpdGFsaXplRmlyc3RMZXR0ZXIobW9kZWxOYW1lKSB9fSB7eyBvcGVyYXRpb24gPT09ICd1cGRhdGUnID8gJ2JlYXJiZWl0ZW4nIDogJ2Vyc3RlbGxlbicgfX08L2gxPlxuXG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxuICAgIDxkaXYgY2xhc3M9XCJtdC0zXCIgKm5nRm9yPVwibGV0IGtleSBvZiBrZXlzXCI+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJmaWVsZHNba2V5XT8udHlwZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInU3RyaW5nJ1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWVsZHNba2V5XT8uaXNMaXN0XCI+XG4gICAgICAgICAgICA8YmFzZS10YWdzXG4gICAgICAgICAgICAgIFtpZF09XCJrZXlcIlxuICAgICAgICAgICAgICBbbmFtZV09XCJrZXlcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKGtleSlcIlxuICAgICAgICAgICAgICBbY29udHJvbF09XCJ0cmFuc2Zvcm1Ub0NvbnRyb2woZm9ybT8uZ2V0KGtleSkpXCJcbiAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImZpZWxkc1trZXldLmlzUmVxdWlyZWRcIlxuICAgICAgICAgICAgPjwvYmFzZS10YWdzPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFmaWVsZHNba2V5XT8uaXNMaXN0XCI+XG4gICAgICAgICAgICA8YmFzZS1pbnB1dFxuICAgICAgICAgICAgICBbaWRdPVwia2V5XCJcbiAgICAgICAgICAgICAgW25hbWVdPVwia2V5XCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImNhcGl0YWxpemVGaXJzdExldHRlcihrZXkpXCJcbiAgICAgICAgICAgICAgW3R5cGVdPVwiJ3RleHQnXCJcbiAgICAgICAgICAgICAgW2NvbnRyb2xdPVwidHJhbnNmb3JtVG9Db250cm9sKGZvcm0/LmdldChrZXkpKVwiXG4gICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJmaWVsZHNba2V5XS5pc1JlcXVpcmVkXCJcbiAgICAgICAgICAgID48L2Jhc2UtaW5wdXQ+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidCb29sZWFuJ1wiPlxuICAgICAgICAgIDxiYXNlLWNoZWNrYm94XG4gICAgICAgICAgICBbaWRdPVwia2V5XCJcbiAgICAgICAgICAgIFtuYW1lXT1cImtleVwiXG4gICAgICAgICAgICBbbGFiZWxdPVwiY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKGtleSlcIlxuICAgICAgICAgICAgW2NvbnRyb2xdPVwidHJhbnNmb3JtVG9Db250cm9sKGZvcm0/LmdldChrZXkpKVwiXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgPjwvYmFzZS1jaGVja2JveD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ0RhdGVUaW1lJ1wiPlxuICAgICAgICAgIDxiYXNlLWlucHV0XG4gICAgICAgICAgICBbaWRdPVwia2V5XCJcbiAgICAgICAgICAgIFtuYW1lXT1cImtleVwiXG4gICAgICAgICAgICBbbGFiZWxdPVwiY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKGtleSlcIlxuICAgICAgICAgICAgW3R5cGVdPVwiJ2RhdGV0aW1lLWxvY2FsJ1wiXG4gICAgICAgICAgICBbY29udHJvbF09XCJ0cmFuc2Zvcm1Ub0NvbnRyb2woZm9ybT8uZ2V0KGtleSkpXCJcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICA+PC9iYXNlLWlucHV0PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBtdC00XCIgW25nQ2xhc3NdPVwiaWQgJiYgZGVsZXRlID8gJ2p1c3RpZnktY29udGVudC1iZXR3ZWVuJyA6ICdqdXN0aWZ5LWNvbnRlbnQtZW5kJ1wiPlxuICAgICAgPGRpdiAqbmdJZj1cImlkICYmIGRlbGV0ZVwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1kYW5nZXJcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImRlbGV0ZU9iamVjdCgpXCI+TMO2c2NoZW48L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwic3VibWl0KClcIiAqbmdJZj1cIiFsb2FkaW5nXCI+XG4gICAgICAgICAge3sgb3BlcmF0aW9uID09PSAnY3JlYXRlJyA/ICdFcnN0ZWxsZW4nIDogJ1NwZWljaGVybicgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCIgZGlzYWJsZWQgKm5nSWY9XCJsb2FkaW5nXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzcGlubmVyLWJvcmRlciBzcGlubmVyLWJvcmRlci1zbVwiIHJvbGU9XCJzdGF0dXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+XG4gICAgICAgICAge3sgb3BlcmF0aW9uID09PSAnY3JlYXRlJyA/ICdFcnN0ZWxsZW4nIDogJ1NwZWljaGVybicgfX0uLi5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9mb3JtPlxuPC9kaXY+XG4iXX0=
@@ -12,6 +12,7 @@ export class ModelTableComponent {
12
12
  this.create = true;
13
13
  this.update = true;
14
14
  this.delete = true;
15
+ this.logging = false;
15
16
  this.tableFields = ['id', 'name', 'title', 'description', 'email', 'createdAt', 'updatedAt'];
16
17
  this.idSelected = new EventEmitter();
17
18
  this.createModeChanged = new EventEmitter();
@@ -36,6 +37,9 @@ export class ModelTableComponent {
36
37
  }
37
38
  if (changes['objectId'] && this.meta) {
38
39
  if (this.selectedId !== this.objectId) {
40
+ if (this.logging) {
41
+ console.log('ModelTableComponent::ngOnChanges->selectedId', this.selectedId);
42
+ }
39
43
  this.selectedId = this.objectId;
40
44
  }
41
45
  }
@@ -53,6 +57,11 @@ export class ModelTableComponent {
53
57
  this.availableFields.push(field);
54
58
  }
55
59
  });
60
+ if (this.logging) {
61
+ console.log('ModelTableComponent::init->possibleFields', possibleFields);
62
+ console.log('ModelTableComponent::init->keys', keys);
63
+ console.log('ModelTableComponent::init->availableFields', this.availableFields);
64
+ }
56
65
  this.loadObjects(this.availableFields);
57
66
  }
58
67
  /**
@@ -77,6 +86,9 @@ export class ModelTableComponent {
77
86
  })
78
87
  .subscribe({
79
88
  next: (value) => {
89
+ if (this.logging) {
90
+ console.log('ModelTableComponent::loadObjects->value', value);
91
+ }
80
92
  this.objects = value;
81
93
  },
82
94
  error: (err) => {
@@ -111,10 +123,10 @@ export class ModelTableComponent {
111
123
  }
112
124
  }
113
125
  ModelTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ModelTableComponent, deps: [{ token: i1.GraphQLMetaService }, { token: i1.GraphQLService }], target: i0.ɵɵFactoryTarget.Component });
114
- ModelTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: ModelTableComponent, selector: "base-model-table", inputs: { modelName: "modelName", objectId: "objectId", createMode: "createMode", create: "create", update: "update", delete: "delete", tableFields: "tableFields" }, outputs: { idSelected: "idSelected", createModeChanged: "createModeChanged" }, usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"!selectedId && !createMode\">\n <div class=\"w-100 d-flex flex-row justify-content-between mb-4\">\n <h1 *ngIf=\"modelName\">{{ capitalizeFirstLetter(modelName) }}s</h1>\n <div class=\"d-flex align-items-center\">\n <button class=\"btn btn-primary\" (click)=\"createNewObject()\" *ngIf=\"create\">Erstellen</button>\n </div>\n </div>\n <table class=\"table table-hover table-responsive bg-white\">\n <thead>\n <tr>\n <th scope=\"col\" *ngFor=\"let field of availableFields\">{{ capitalizeFirstLetter(field) }}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let object of objects\">\n <td class=\"cursor-pointer\" *ngFor=\"let field of availableFields\" (click)=\"selectId(object)\">\n {{ object[field] }}\n </td>\n </tr>\n </tbody>\n </table>\n</div>\n\n<div class=\"w-100\" *ngIf=\"selectedId || createMode\">\n <button class=\"btn btn-outline-primary mb-3\" (click)=\"selectId('')\">Zur\u00FCck</button>\n <base-model-form\n [modelName]=\"modelName\"\n [id]=\"selectedId\"\n (finished)=\"selectId('')\"\n [delete]=\"delete\"\n ></base-model-form>\n</div>\n", styles: [".cursor-pointer{cursor:pointer}.table>:not(:first-child){border-top:0}table{border-radius:.25rem;border-color:#e2e8f0!important}table thead{text-transform:uppercase;font-size:12px}table thead th{padding:12px 24px}table tbody tr td{font-weight:400!important;font-size:16px;padding:16px 24px}\n"], components: [{ type: i2.ModelFormComponent, selector: "base-model-form", inputs: ["modelName", "id", "delete"], outputs: ["finished"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
126
+ ModelTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: ModelTableComponent, selector: "base-model-table", inputs: { modelName: "modelName", objectId: "objectId", createMode: "createMode", create: "create", update: "update", delete: "delete", logging: "logging", tableFields: "tableFields" }, outputs: { idSelected: "idSelected", createModeChanged: "createModeChanged" }, usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"!selectedId && !createMode\">\n <div class=\"w-100 d-flex flex-row justify-content-between mb-4\">\n <h1 *ngIf=\"modelName\">{{ capitalizeFirstLetter(modelName) }}s</h1>\n <div class=\"d-flex align-items-center\">\n <button class=\"btn btn-primary\" (click)=\"createNewObject()\" *ngIf=\"create\">Erstellen</button>\n </div>\n </div>\n <table class=\"table table-hover table-responsive bg-white\">\n <thead>\n <tr>\n <th scope=\"col\" *ngFor=\"let field of availableFields\">{{ capitalizeFirstLetter(field) }}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let object of objects\">\n <td class=\"cursor-pointer\" *ngFor=\"let field of availableFields\" (click)=\"selectId(object)\">\n {{ object[field] }}\n </td>\n </tr>\n </tbody>\n </table>\n</div>\n\n<div class=\"w-100\" *ngIf=\"selectedId || createMode\">\n <button class=\"btn btn-outline-primary mb-3\" (click)=\"selectId('')\">Zur\u00FCck</button>\n <base-model-form\n [modelName]=\"modelName\"\n [logging]=\"logging\"\n [id]=\"selectedId\"\n (finished)=\"selectId('')\"\n [delete]=\"delete\"\n ></base-model-form>\n</div>\n", styles: [".cursor-pointer{cursor:pointer}.table>:not(:first-child){border-top:0}table{border-radius:.25rem;border-color:#e2e8f0!important}table thead{text-transform:uppercase;font-size:12px}table thead th{padding:12px 24px}table tbody tr td{font-weight:400!important;font-size:16px;padding:16px 24px}\n"], components: [{ type: i2.ModelFormComponent, selector: "base-model-form", inputs: ["modelName", "id", "delete", "logging"], outputs: ["finished"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
115
127
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ModelTableComponent, decorators: [{
116
128
  type: Component,
117
- args: [{ selector: 'base-model-table', template: "<div *ngIf=\"!selectedId && !createMode\">\n <div class=\"w-100 d-flex flex-row justify-content-between mb-4\">\n <h1 *ngIf=\"modelName\">{{ capitalizeFirstLetter(modelName) }}s</h1>\n <div class=\"d-flex align-items-center\">\n <button class=\"btn btn-primary\" (click)=\"createNewObject()\" *ngIf=\"create\">Erstellen</button>\n </div>\n </div>\n <table class=\"table table-hover table-responsive bg-white\">\n <thead>\n <tr>\n <th scope=\"col\" *ngFor=\"let field of availableFields\">{{ capitalizeFirstLetter(field) }}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let object of objects\">\n <td class=\"cursor-pointer\" *ngFor=\"let field of availableFields\" (click)=\"selectId(object)\">\n {{ object[field] }}\n </td>\n </tr>\n </tbody>\n </table>\n</div>\n\n<div class=\"w-100\" *ngIf=\"selectedId || createMode\">\n <button class=\"btn btn-outline-primary mb-3\" (click)=\"selectId('')\">Zur\u00FCck</button>\n <base-model-form\n [modelName]=\"modelName\"\n [id]=\"selectedId\"\n (finished)=\"selectId('')\"\n [delete]=\"delete\"\n ></base-model-form>\n</div>\n", styles: [".cursor-pointer{cursor:pointer}.table>:not(:first-child){border-top:0}table{border-radius:.25rem;border-color:#e2e8f0!important}table thead{text-transform:uppercase;font-size:12px}table thead th{padding:12px 24px}table tbody tr td{font-weight:400!important;font-size:16px;padding:16px 24px}\n"] }]
129
+ args: [{ selector: 'base-model-table', template: "<div *ngIf=\"!selectedId && !createMode\">\n <div class=\"w-100 d-flex flex-row justify-content-between mb-4\">\n <h1 *ngIf=\"modelName\">{{ capitalizeFirstLetter(modelName) }}s</h1>\n <div class=\"d-flex align-items-center\">\n <button class=\"btn btn-primary\" (click)=\"createNewObject()\" *ngIf=\"create\">Erstellen</button>\n </div>\n </div>\n <table class=\"table table-hover table-responsive bg-white\">\n <thead>\n <tr>\n <th scope=\"col\" *ngFor=\"let field of availableFields\">{{ capitalizeFirstLetter(field) }}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let object of objects\">\n <td class=\"cursor-pointer\" *ngFor=\"let field of availableFields\" (click)=\"selectId(object)\">\n {{ object[field] }}\n </td>\n </tr>\n </tbody>\n </table>\n</div>\n\n<div class=\"w-100\" *ngIf=\"selectedId || createMode\">\n <button class=\"btn btn-outline-primary mb-3\" (click)=\"selectId('')\">Zur\u00FCck</button>\n <base-model-form\n [modelName]=\"modelName\"\n [logging]=\"logging\"\n [id]=\"selectedId\"\n (finished)=\"selectId('')\"\n [delete]=\"delete\"\n ></base-model-form>\n</div>\n", styles: [".cursor-pointer{cursor:pointer}.table>:not(:first-child){border-top:0}table{border-radius:.25rem;border-color:#e2e8f0!important}table thead{text-transform:uppercase;font-size:12px}table thead th{padding:12px 24px}table tbody tr td{font-weight:400!important;font-size:16px;padding:16px 24px}\n"] }]
118
130
  }], ctorParameters: function () { return [{ type: i1.GraphQLMetaService }, { type: i1.GraphQLService }]; }, propDecorators: { modelName: [{
119
131
  type: Input
120
132
  }], objectId: [{
@@ -127,6 +139,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImpor
127
139
  type: Input
128
140
  }], delete: [{
129
141
  type: Input
142
+ }], logging: [{
143
+ type: Input
130
144
  }], tableFields: [{
131
145
  type: Input
132
146
  }], idSelected: [{
@@ -134,4 +148,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImpor
134
148
  }], createModeChanged: [{
135
149
  type: Output
136
150
  }] } });
137
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYmFzZS9iYXNlLWNvbXBvbmVudHMvY29tcG9uZW50cy9tb2RlbC10YWJsZS9tb2RlbC10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY29tcG9uZW50cy9jb21wb25lbnRzL21vZGVsLXRhYmxlL21vZGVsLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQW1DLGtCQUFrQixFQUFrQixNQUFNLDRCQUE0QixDQUFDOzs7OztBQU9qSCxNQUFNLE9BQU8sbUJBQW1CO0lBaUI5QixZQUFvQixrQkFBc0MsRUFBVSxjQUE4QjtRQUE5RSx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQVUsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBZHpGLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsV0FBTSxHQUFHLElBQUksQ0FBQztRQUNkLFdBQU0sR0FBRyxJQUFJLENBQUM7UUFDZCxXQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ2QsZ0JBQVcsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRXZGLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ3hDLHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFHMUQsWUFBTyxHQUFVLEVBQUUsQ0FBQztRQUNwQixvQkFBZSxHQUFhLEVBQUUsQ0FBQztRQUMvQixlQUFVLEdBQUcsRUFBRSxDQUFDO0lBRXFGLENBQUM7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QUksQ0FBQyxNQUFNLEVBQUU7WUFDZixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDdkM7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxxQkFBcUIsQ0FBQyxLQUFhO1FBQ2pDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7O2dIQXZIVSxtQkFBbUI7b0dBQW5CLG1CQUFtQixrVUNSaEMsa3BDQWdDQTsyRkR4QmEsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGtCQUFrQjtzSUFLbkIsU0FBUztzQkFBakIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFFSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgR3JhcGhRTE1ldGEsIEdyYXBoUUxNZXRhU2VydmljZSwgR3JhcGhRTFJlcXVlc3RUeXBlLCBHcmFwaFFMU2VydmljZSB9IGZyb20gJ0BsZW5uZS50ZWNoL25nLWJhc2Uvc2hhcmVkJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYmFzZS1tb2RlbC10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9tb2RlbC10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21vZGVsLXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIE1vZGVsVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIG1vZGVsTmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSBvYmplY3RJZDogc3RyaW5nO1xuICBASW5wdXQoKSBjcmVhdGVNb2RlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNyZWF0ZSA9IHRydWU7XG4gIEBJbnB1dCgpIHVwZGF0ZSA9IHRydWU7XG4gIEBJbnB1dCgpIGRlbGV0ZSA9IHRydWU7XG4gIEBJbnB1dCgpIHRhYmxlRmllbGRzID0gWydpZCcsICduYW1lJywgJ3RpdGxlJywgJ2Rlc2NyaXB0aW9uJywgJ2VtYWlsJywgJ2NyZWF0ZWRBdCcsICd1cGRhdGVkQXQnXTtcblxuICBAT3V0cHV0KCkgaWRTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgY3JlYXRlTW9kZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgbWV0YSE6IEdyYXBoUUxNZXRhO1xuICBvYmplY3RzOiBhbnlbXSA9IFtdO1xuICBhdmFpbGFibGVGaWVsZHM6IHN0cmluZ1tdID0gW107XG4gIHNlbGVjdGVkSWQgPSAnJztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGdyYXBoUUxNZXRhU2VydmljZTogR3JhcGhRTE1ldGFTZXJ2aWNlLCBwcml2YXRlIGdyYXBoUUxTZXJ2aWNlOiBHcmFwaFFMU2VydmljZSkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdyYXBoUUxNZXRhU2VydmljZS5nZXRNZXRhKCkuc3Vic2NyaWJlKChtZXRhKSA9PiB7XG4gICAgICB0aGlzLm1ldGEgPSBtZXRhO1xuXG4gICAgICBpZiAodGhpcy5tb2RlbE5hbWUpIHtcbiAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9iamVjdElkKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJZCA9IHRoaXMub2JqZWN0SWQ7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXNbJ21vZGVsTmFtZSddICYmIHRoaXMubWV0YSkge1xuICAgICAgdGhpcy5pbml0KCk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbJ29iamVjdElkJ10gJiYgdGhpcy5tZXRhKSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZElkICE9PSB0aGlzLm9iamVjdElkKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJZCA9IHRoaXMub2JqZWN0SWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdlJ3JlIHVzaW5nIHRoZSBgbWV0YWAgc2VydmljZSB0byBnZXQgdGhlIGZpZWxkcyB0aGF0IGFyZSBhdmFpbGFibGUgZm9yIHRoZSBgZmluZGAgcXVlcnkgZm9yIHRoZSBtb2RlbCB3ZSdyZSB3b3JraW5nXG4gICAqIHdpdGguIFdlJ3JlIHRoZW4gdXNpbmcgdGhhdCBpbmZvcm1hdGlvbiB0byBwb3B1bGF0ZSB0aGUgYGF2YWlsYWJsZUZpZWxkc2AgYXJyYXlcbiAgICovXG4gIGluaXQoKSB7XG4gICAgdGhpcy5hdmFpbGFibGVGaWVsZHMgPSBbXTtcbiAgICBjb25zdCBwb3NzaWJsZUZpZWxkcyA9IHRoaXMubWV0YS5nZXRGaWVsZHMoJ2ZpbmQnICsgdGhpcy5jYXBpdGFsaXplRmlyc3RMZXR0ZXIodGhpcy5tb2RlbE5hbWUpICsgJ3MnKTtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocG9zc2libGVGaWVsZHMpO1xuICAgIHRoaXMudGFibGVGaWVsZHM/LmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICBpZiAoa2V5cy5pbmNsdWRlcyhmaWVsZCkpIHtcbiAgICAgICAgdGhpcy5hdmFpbGFibGVGaWVsZHMucHVzaChmaWVsZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmxvYWRPYmplY3RzKHRoaXMuYXZhaWxhYmxlRmllbGRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIHRoZSB1c2VyIGNsaWNrcyB0aGUgXCJDcmVhdGUgTmV3XCIgYnV0dG9uLCB0aGUgY3JlYXRlTW9kZUNoYW5nZWQgZXZlbnQgaXMgZW1pdHRlZCwgd2hpY2ggaXMgdGhlbiBoYW5kbGVkIGJ5IHRoZVxuICAgKiBwYXJlbnQgY29tcG9uZW50XG4gICAqL1xuICBjcmVhdGVOZXdPYmplY3QoKSB7XG4gICAgdGhpcy5jcmVhdGVNb2RlID0gdHJ1ZTtcbiAgICB0aGlzLmNyZWF0ZU1vZGVDaGFuZ2VkLmVtaXQodHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogSXQgbG9hZHMgdGhlIG9iamVjdHMgZnJvbSB0aGUgZGF0YWJhc2UgYW5kIHN0b3JlcyB0aGVtIGluIHRoZSBvYmplY3RzIHZhcmlhYmxlXG4gICAqXG4gICAqIEBwYXJhbSBmaWVsZHMgLSBzdHJpbmdbXSAtIFRoZSBmaWVsZHMgeW91IHdhbnQgdG8gbG9hZCBmcm9tIHRoZSBkYXRhYmFzZS5cbiAgICovXG4gIGxvYWRPYmplY3RzKGZpZWxkczogc3RyaW5nW10pIHtcbiAgICB0aGlzLm9iamVjdHMgPSBbXTtcbiAgICB0aGlzLmdyYXBoUUxTZXJ2aWNlXG4gICAgICAuZ3JhcGhRbCgnZmluZCcgKyB0aGlzLmNhcGl0YWxpemVGaXJzdExldHRlcih0aGlzLm1vZGVsTmFtZSkgKyAncycsIHtcbiAgICAgICAgZmllbGRzLFxuICAgICAgICB0eXBlOiBHcmFwaFFMUmVxdWVzdFR5cGUuUVVFUlksXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgIHRoaXMub2JqZWN0cyA9IHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBvbiBsb2FkaW5nIG9iamVjdHMnLCBlcnIpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIHVwZGF0ZSBwcm9wZXJ0eSBpcyB0cnVlLCB0aGVuIHNldCB0aGUgc2VsZWN0ZWRJZCBwcm9wZXJ0eSB0byB0aGUgaWQgb2YgdGhlIG9iamVjdCBwYXNzZWQgaW4sIGFuZCBlbWl0IHRoZVxuICAgKiBzZWxlY3RlZElkIHByb3BlcnR5XG4gICAqXG4gICAqIEBwYXJhbSBvYmplY3QgLSBhbnkgLSB0aGlzIGlzIHRoZSBvYmplY3QgdGhhdCBpcyBwYXNzZWQgaW4gZnJvbSB0aGUgY2hpbGQgY29tcG9uZW50LlxuICAgKi9cbiAgc2VsZWN0SWQob2JqZWN0OiBhbnkpIHtcbiAgICBpZiAoIW9iamVjdCkge1xuICAgICAgdGhpcy5jcmVhdGVNb2RlID0gZmFsc2U7XG4gICAgICB0aGlzLmNyZWF0ZU1vZGVDaGFuZ2VkLmVtaXQoZmFsc2UpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnVwZGF0ZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZElkID0gb2JqZWN0WydpZCddO1xuICAgICAgdGhpcy5pZFNlbGVjdGVkLmVtaXQodGhpcy5zZWxlY3RlZElkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSXQgdGFrZXMgYSBzdHJpbmcsIGNhcGl0YWxpemVzIHRoZSBmaXJzdCBsZXR0ZXIsIGFuZCByZXR1cm5zIHRoZSBtb2RpZmllZCBzdHJpbmdcbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHN0cmluZyB0byBjYXBpdGFsaXplLlxuICAgKiBAcmV0dXJucyBUaGUgZmlyc3QgbGV0dGVyIG9mIHRoZSBzdHJpbmcgaXMgYmVpbmcgY2FwaXRhbGl6ZWQgYW5kIHRoZSByZXN0IG9mIHRoZSBzdHJpbmcgaXMgYmVpbmcgcmV0dXJuZWQuXG4gICAqL1xuICBjYXBpdGFsaXplRmlyc3RMZXR0ZXIodmFsdWU6IHN0cmluZykge1xuICAgIHJldHVybiB2YWx1ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHZhbHVlLnNsaWNlKDEpO1xuICB9XG59XG4iLCI8ZGl2ICpuZ0lmPVwiIXNlbGVjdGVkSWQgJiYgIWNyZWF0ZU1vZGVcIj5cbiAgPGRpdiBjbGFzcz1cInctMTAwIGQtZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtYi00XCI+XG4gICAgPGgxICpuZ0lmPVwibW9kZWxOYW1lXCI+e3sgY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKG1vZGVsTmFtZSkgfX1zPC9oMT5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJjcmVhdGVOZXdPYmplY3QoKVwiICpuZ0lmPVwiY3JlYXRlXCI+RXJzdGVsbGVuPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1ob3ZlciB0YWJsZS1yZXNwb25zaXZlIGJnLXdoaXRlXCI+XG4gICAgPHRoZWFkPlxuICAgICAgPHRyPlxuICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiAqbmdGb3I9XCJsZXQgZmllbGQgb2YgYXZhaWxhYmxlRmllbGRzXCI+e3sgY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKGZpZWxkKSB9fTwvdGg+XG4gICAgICA8L3RyPlxuICAgIDwvdGhlYWQ+XG4gICAgPHRib2R5PlxuICAgICAgPHRyICpuZ0Zvcj1cImxldCBvYmplY3Qgb2Ygb2JqZWN0c1wiPlxuICAgICAgICA8dGQgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBhdmFpbGFibGVGaWVsZHNcIiAoY2xpY2spPVwic2VsZWN0SWQob2JqZWN0KVwiPlxuICAgICAgICAgIHt7IG9iamVjdFtmaWVsZF0gfX1cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC90Ym9keT5cbiAgPC90YWJsZT5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwidy0xMDBcIiAqbmdJZj1cInNlbGVjdGVkSWQgfHwgY3JlYXRlTW9kZVwiPlxuICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgbWItM1wiIChjbGljayk9XCJzZWxlY3RJZCgnJylcIj5adXLDvGNrPC9idXR0b24+XG4gIDxiYXNlLW1vZGVsLWZvcm1cbiAgICBbbW9kZWxOYW1lXT1cIm1vZGVsTmFtZVwiXG4gICAgW2lkXT1cInNlbGVjdGVkSWRcIlxuICAgIChmaW5pc2hlZCk9XCJzZWxlY3RJZCgnJylcIlxuICAgIFtkZWxldGVdPVwiZGVsZXRlXCJcbiAgPjwvYmFzZS1tb2RlbC1mb3JtPlxuPC9kaXY+XG4iXX0=
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYmFzZS9iYXNlLWNvbXBvbmVudHMvY29tcG9uZW50cy9tb2RlbC10YWJsZS9tb2RlbC10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY29tcG9uZW50cy9jb21wb25lbnRzL21vZGVsLXRhYmxlL21vZGVsLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQW1DLGtCQUFrQixFQUFrQixNQUFNLDRCQUE0QixDQUFDOzs7OztBQU9qSCxNQUFNLE9BQU8sbUJBQW1CO0lBa0I5QixZQUFvQixrQkFBc0MsRUFBVSxjQUE4QjtRQUE5RSx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQVUsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBZnpGLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsV0FBTSxHQUFHLElBQUksQ0FBQztRQUNkLFdBQU0sR0FBRyxJQUFJLENBQUM7UUFDZCxXQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ2QsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixnQkFBVyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFdkYsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDeEMsc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUcxRCxZQUFPLEdBQVUsRUFBRSxDQUFDO1FBQ3BCLG9CQUFlLEdBQWEsRUFBRSxDQUFDO1FBQy9CLGVBQVUs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QkFBZCxLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFFSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgR3JhcGhRTE1ldGEsIEdyYXBoUUxNZXRhU2VydmljZSwgR3JhcGhRTFJlcXVlc3RUeXBlLCBHcmFwaFFMU2VydmljZSB9IGZyb20gJ0BsZW5uZS50ZWNoL25nLWJhc2Uvc2hhcmVkJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYmFzZS1tb2RlbC10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9tb2RlbC10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21vZGVsLXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIE1vZGVsVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIG1vZGVsTmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSBvYmplY3RJZDogc3RyaW5nO1xuICBASW5wdXQoKSBjcmVhdGVNb2RlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNyZWF0ZSA9IHRydWU7XG4gIEBJbnB1dCgpIHVwZGF0ZSA9IHRydWU7XG4gIEBJbnB1dCgpIGRlbGV0ZSA9IHRydWU7XG4gIEBJbnB1dCgpIGxvZ2dpbmcgPSBmYWxzZTtcbiAgQElucHV0KCkgdGFibGVGaWVsZHMgPSBbJ2lkJywgJ25hbWUnLCAndGl0bGUnLCAnZGVzY3JpcHRpb24nLCAnZW1haWwnLCAnY3JlYXRlZEF0JywgJ3VwZGF0ZWRBdCddO1xuXG4gIEBPdXRwdXQoKSBpZFNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBjcmVhdGVNb2RlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBtZXRhITogR3JhcGhRTE1ldGE7XG4gIG9iamVjdHM6IGFueVtdID0gW107XG4gIGF2YWlsYWJsZUZpZWxkczogc3RyaW5nW10gPSBbXTtcbiAgc2VsZWN0ZWRJZCA9ICcnO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZ3JhcGhRTE1ldGFTZXJ2aWNlOiBHcmFwaFFMTWV0YVNlcnZpY2UsIHByaXZhdGUgZ3JhcGhRTFNlcnZpY2U6IEdyYXBoUUxTZXJ2aWNlKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZ3JhcGhRTE1ldGFTZXJ2aWNlLmdldE1ldGEoKS5zdWJzY3JpYmUoKG1ldGEpID0+IHtcbiAgICAgIHRoaXMubWV0YSA9IG1ldGE7XG5cbiAgICAgIGlmICh0aGlzLm1vZGVsTmFtZSkge1xuICAgICAgICB0aGlzLmluaXQoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub2JqZWN0SWQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZElkID0gdGhpcy5vYmplY3RJZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1snbW9kZWxOYW1lJ10gJiYgdGhpcy5tZXRhKSB7XG4gICAgICB0aGlzLmluaXQoKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1snb2JqZWN0SWQnXSAmJiB0aGlzLm1ldGEpIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkSWQgIT09IHRoaXMub2JqZWN0SWQpIHtcbiAgICAgICAgaWYgKHRoaXMubG9nZ2luZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdNb2RlbFRhYmxlQ29tcG9uZW50OjpuZ09uQ2hhbmdlcy0+c2VsZWN0ZWRJZCcsIHRoaXMuc2VsZWN0ZWRJZCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdGVkSWQgPSB0aGlzLm9iamVjdElkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXZSdyZSB1c2luZyB0aGUgYG1ldGFgIHNlcnZpY2UgdG8gZ2V0IHRoZSBmaWVsZHMgdGhhdCBhcmUgYXZhaWxhYmxlIGZvciB0aGUgYGZpbmRgIHF1ZXJ5IGZvciB0aGUgbW9kZWwgd2UncmUgd29ya2luZ1xuICAgKiB3aXRoLiBXZSdyZSB0aGVuIHVzaW5nIHRoYXQgaW5mb3JtYXRpb24gdG8gcG9wdWxhdGUgdGhlIGBhdmFpbGFibGVGaWVsZHNgIGFycmF5XG4gICAqL1xuICBpbml0KCkge1xuICAgIHRoaXMuYXZhaWxhYmxlRmllbGRzID0gW107XG4gICAgY29uc3QgcG9zc2libGVGaWVsZHMgPSB0aGlzLm1ldGEuZ2V0RmllbGRzKCdmaW5kJyArIHRoaXMuY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHRoaXMubW9kZWxOYW1lKSArICdzJyk7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHBvc3NpYmxlRmllbGRzKTtcbiAgICB0aGlzLnRhYmxlRmllbGRzPy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgaWYgKGtleXMuaW5jbHVkZXMoZmllbGQpKSB7XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlRmllbGRzLnB1c2goZmllbGQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMubG9nZ2luZykge1xuICAgICAgY29uc29sZS5sb2coJ01vZGVsVGFibGVDb21wb25lbnQ6OmluaXQtPnBvc3NpYmxlRmllbGRzJywgcG9zc2libGVGaWVsZHMpO1xuICAgICAgY29uc29sZS5sb2coJ01vZGVsVGFibGVDb21wb25lbnQ6OmluaXQtPmtleXMnLCBrZXlzKTtcbiAgICAgIGNvbnNvbGUubG9nKCdNb2RlbFRhYmxlQ29tcG9uZW50Ojppbml0LT5hdmFpbGFibGVGaWVsZHMnLCB0aGlzLmF2YWlsYWJsZUZpZWxkcyk7XG4gICAgfVxuXG4gICAgdGhpcy5sb2FkT2JqZWN0cyh0aGlzLmF2YWlsYWJsZUZpZWxkcyk7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiB0aGUgdXNlciBjbGlja3MgdGhlIFwiQ3JlYXRlIE5ld1wiIGJ1dHRvbiwgdGhlIGNyZWF0ZU1vZGVDaGFuZ2VkIGV2ZW50IGlzIGVtaXR0ZWQsIHdoaWNoIGlzIHRoZW4gaGFuZGxlZCBieSB0aGVcbiAgICogcGFyZW50IGNvbXBvbmVudFxuICAgKi9cbiAgY3JlYXRlTmV3T2JqZWN0KCkge1xuICAgIHRoaXMuY3JlYXRlTW9kZSA9IHRydWU7XG4gICAgdGhpcy5jcmVhdGVNb2RlQ2hhbmdlZC5lbWl0KHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IGxvYWRzIHRoZSBvYmplY3RzIGZyb20gdGhlIGRhdGFiYXNlIGFuZCBzdG9yZXMgdGhlbSBpbiB0aGUgb2JqZWN0cyB2YXJpYWJsZVxuICAgKlxuICAgKiBAcGFyYW0gZmllbGRzIC0gc3RyaW5nW10gLSBUaGUgZmllbGRzIHlvdSB3YW50IHRvIGxvYWQgZnJvbSB0aGUgZGF0YWJhc2UuXG4gICAqL1xuICBsb2FkT2JqZWN0cyhmaWVsZHM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5vYmplY3RzID0gW107XG4gICAgdGhpcy5ncmFwaFFMU2VydmljZVxuICAgICAgLmdyYXBoUWwoJ2ZpbmQnICsgdGhpcy5jYXBpdGFsaXplRmlyc3RMZXR0ZXIodGhpcy5tb2RlbE5hbWUpICsgJ3MnLCB7XG4gICAgICAgIGZpZWxkcyxcbiAgICAgICAgdHlwZTogR3JhcGhRTFJlcXVlc3RUeXBlLlFVRVJZLFxuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAodmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5sb2dnaW5nKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnTW9kZWxUYWJsZUNvbXBvbmVudDo6bG9hZE9iamVjdHMtPnZhbHVlJywgdmFsdWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMub2JqZWN0cyA9IHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBvbiBsb2FkaW5nIG9iamVjdHMnLCBlcnIpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIHVwZGF0ZSBwcm9wZXJ0eSBpcyB0cnVlLCB0aGVuIHNldCB0aGUgc2VsZWN0ZWRJZCBwcm9wZXJ0eSB0byB0aGUgaWQgb2YgdGhlIG9iamVjdCBwYXNzZWQgaW4sIGFuZCBlbWl0IHRoZVxuICAgKiBzZWxlY3RlZElkIHByb3BlcnR5XG4gICAqXG4gICAqIEBwYXJhbSBvYmplY3QgLSBhbnkgLSB0aGlzIGlzIHRoZSBvYmplY3QgdGhhdCBpcyBwYXNzZWQgaW4gZnJvbSB0aGUgY2hpbGQgY29tcG9uZW50LlxuICAgKi9cbiAgc2VsZWN0SWQob2JqZWN0OiBhbnkpIHtcbiAgICBpZiAoIW9iamVjdCkge1xuICAgICAgdGhpcy5jcmVhdGVNb2RlID0gZmFsc2U7XG4gICAgICB0aGlzLmNyZWF0ZU1vZGVDaGFuZ2VkLmVtaXQoZmFsc2UpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnVwZGF0ZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZElkID0gb2JqZWN0WydpZCddO1xuICAgICAgdGhpcy5pZFNlbGVjdGVkLmVtaXQodGhpcy5zZWxlY3RlZElkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSXQgdGFrZXMgYSBzdHJpbmcsIGNhcGl0YWxpemVzIHRoZSBmaXJzdCBsZXR0ZXIsIGFuZCByZXR1cm5zIHRoZSBtb2RpZmllZCBzdHJpbmdcbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHN0cmluZyB0byBjYXBpdGFsaXplLlxuICAgKiBAcmV0dXJucyBUaGUgZmlyc3QgbGV0dGVyIG9mIHRoZSBzdHJpbmcgaXMgYmVpbmcgY2FwaXRhbGl6ZWQgYW5kIHRoZSByZXN0IG9mIHRoZSBzdHJpbmcgaXMgYmVpbmcgcmV0dXJuZWQuXG4gICAqL1xuICBjYXBpdGFsaXplRmlyc3RMZXR0ZXIodmFsdWU6IHN0cmluZykge1xuICAgIHJldHVybiB2YWx1ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHZhbHVlLnNsaWNlKDEpO1xuICB9XG59XG4iLCI8ZGl2ICpuZ0lmPVwiIXNlbGVjdGVkSWQgJiYgIWNyZWF0ZU1vZGVcIj5cbiAgPGRpdiBjbGFzcz1cInctMTAwIGQtZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtYi00XCI+XG4gICAgPGgxICpuZ0lmPVwibW9kZWxOYW1lXCI+e3sgY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKG1vZGVsTmFtZSkgfX1zPC9oMT5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJjcmVhdGVOZXdPYmplY3QoKVwiICpuZ0lmPVwiY3JlYXRlXCI+RXJzdGVsbGVuPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1ob3ZlciB0YWJsZS1yZXNwb25zaXZlIGJnLXdoaXRlXCI+XG4gICAgPHRoZWFkPlxuICAgICAgPHRyPlxuICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiAqbmdGb3I9XCJsZXQgZmllbGQgb2YgYXZhaWxhYmxlRmllbGRzXCI+e3sgY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKGZpZWxkKSB9fTwvdGg+XG4gICAgICA8L3RyPlxuICAgIDwvdGhlYWQ+XG4gICAgPHRib2R5PlxuICAgICAgPHRyICpuZ0Zvcj1cImxldCBvYmplY3Qgb2Ygb2JqZWN0c1wiPlxuICAgICAgICA8dGQgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBhdmFpbGFibGVGaWVsZHNcIiAoY2xpY2spPVwic2VsZWN0SWQob2JqZWN0KVwiPlxuICAgICAgICAgIHt7IG9iamVjdFtmaWVsZF0gfX1cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC90Ym9keT5cbiAgPC90YWJsZT5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwidy0xMDBcIiAqbmdJZj1cInNlbGVjdGVkSWQgfHwgY3JlYXRlTW9kZVwiPlxuICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgbWItM1wiIChjbGljayk9XCJzZWxlY3RJZCgnJylcIj5adXLDvGNrPC9idXR0b24+XG4gIDxiYXNlLW1vZGVsLWZvcm1cbiAgICBbbW9kZWxOYW1lXT1cIm1vZGVsTmFtZVwiXG4gICAgW2xvZ2dpbmddPVwibG9nZ2luZ1wiXG4gICAgW2lkXT1cInNlbGVjdGVkSWRcIlxuICAgIChmaW5pc2hlZCk9XCJzZWxlY3RJZCgnJylcIlxuICAgIFtkZWxldGVdPVwiZGVsZXRlXCJcbiAgPjwvYmFzZS1tb2RlbC1mb3JtPlxuPC9kaXY+XG4iXX0=
@@ -4,6 +4,7 @@ import { GraphQLRequestType } from '../enums/graphql-request-type.enum';
4
4
  import { Observable, throwError } from 'rxjs';
5
5
  import { GraphQLEnum } from '../classes/graphql-enum.class';
6
6
  import { GraphQLType } from '../classes/graphql-type.class';
7
+ import { sha256 } from 'js-sha256';
7
8
  import * as i0 from "@angular/core";
8
9
  import * as i1 from "apollo-angular";
9
10
  import * as i2 from "./graphql-meta.service";
@@ -265,6 +266,10 @@ export class GraphQLService {
265
266
  result.push(key + ':' + value.value);
266
267
  continue;
267
268
  }
269
+ if (key === 'password') {
270
+ result.push(key + ':' + sha256(value));
271
+ continue;
272
+ }
268
273
  // Process array
269
274
  else if (Array.isArray(value)) {
270
275
  result.push(key +
@@ -438,4 +443,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImpor
438
443
  providedIn: 'root',
439
444
  }]
440
445
  }], ctorParameters: function () { return [{ type: i1.Apollo }, { type: i2.GraphQLMetaService }]; } });
441
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYmFzZS9zaGFyZWQvc2VydmljZXMvZ3JhcGhxbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBVSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTlDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7Ozs7QUFHNUQ7O0dBRUc7QUFJSCxNQUFNLE9BQU8sY0FBYztJQUN6Qjs7T0FFRztJQUNILFlBQXNCLE1BQWMsRUFBWSxrQkFBc0M7UUFBaEUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFZLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7SUFBRyxDQUFDO0lBRTFGOztPQUVHO0lBQ0ksT0FBTyxDQUFDLE9BQWUsRUFBRSxVQUEyQixFQUFFO1FBQzNELGtCQUFrQjtRQUNsQixJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1osVUFBVSxDQUFDLDBCQUEwQixDQUFDLENBQUM7U0FDeEM7UUFFRCxhQUFhO1FBQ2IsTUFBTSxNQUFNLEdBQUc7WUFDYixTQUFTLEVBQUUsSUFBSTtZQUNmLE1BQU0sRUFBRSxJQUFJO1lBQ1osR0FBRyxFQUFFLEtBQUs7WUFDVixLQUFLLEVBQUUsSUFBSTtZQUNYLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxLQUFLO1lBQzlCLEdBQUcsT0FBTztTQUNYLENBQUM7UUFFRix3Q0FBd0M7UUFDeEMsSUFBSSxPQUFPLE1BQU0sQ0FBQyxT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QU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLFlBQVksV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHO2dDQUN2RyxNQUFNLEVBQUUsV0FBVyxHQUFHLEdBQUc7Z0NBQ3pCLE1BQU07Z0NBQ04sWUFBWTtnQ0FDWixHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7Z0NBQ1osVUFBVTs2QkFDWCxDQUFDLENBQUMsWUFBWTs0QkFDZixJQUFJOzRCQUNKLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQzs0QkFDOUIsR0FBRyxDQUFDO2lCQUNQO2FBQ0Y7U0FDRjtRQUVELGdCQUFnQjtRQUNoQixPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUNwRCxDQUFDOzsyR0F0Z0JVLGNBQWM7K0dBQWQsY0FBYyxjQUZiLE1BQU07MkZBRVAsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcG9sbG8sIGdxbCB9IGZyb20gJ2Fwb2xsby1hbmd1bGFyJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElHcmFwaFFMT3B0aW9ucyB9IGZyb20gJy4uL2ludGVyZmFjZXMvZ3JhcGhxbC1vcHRpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBHcmFwaFFMUmVxdWVzdFR5cGUgfSBmcm9tICcuLi9lbnVtcy9ncmFwaHFsLXJlcXVlc3QtdHlwZS5lbnVtJztcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEdyYXBoUUxNZXRhU2VydmljZSB9IGZyb20gJy4vZ3JhcGhxbC1tZXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgR3JhcGhRTEVudW0gfSBmcm9tICcuLi9jbGFzc2VzL2dyYXBocWwtZW51bS5jbGFzcyc7XG5pbXBvcnQgeyBHcmFwaFFMVHlwZSB9IGZyb20gJy4uL2NsYXNzZXMvZ3JhcGhxbC10eXBlLmNsYXNzJztcbmltcG9ydCB7IElHcmFwaFFMVHlwZUNvbGxlY3Rpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzL2dyYXBocWwtdHlwZS1jb2xsZWN0aW9uLmludGVyZmFjZSc7XG5cbi8qKlxuICogR3JhcGhRTCBzZXJ2aWNlXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBHcmFwaFFMU2VydmljZSB7XG4gIC8qKlxuICAgKiBJbmNsdWRlIHNlcnZpY2VzXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgYXBvbGxvOiBBcG9sbG8sIHByb3RlY3RlZCBncmFwaFFMTWV0YVNlcnZpY2U6IEdyYXBoUUxNZXRhU2VydmljZSkge31cblxuICAvKipcbiAgICogR3JhcGhRTCByZXF1ZXN0XG4gICAqL1xuICBwdWJsaWMgZ3JhcGhRbChncmFwaHFsOiBzdHJpbmcsIG9wdGlvbnM6IElHcmFwaFFMT3B0aW9ucyA9IHt9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAvLyBDaGVjayBhcmd1bWVudHNcbiAgICBpZiAoIWdyYXBocWwpIHtcbiAgICAgIHRocm93RXJyb3IoJ01pc3NpbmcgZ3JhcGhxbCBhcmd1bWVudCcpO1xuICAgIH1cblxuICAgIC8vIEdldCBjb25maWdcbiAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICBhcmd1bWVudHM6IG51bGwsXG4gICAgICBmaWVsZHM6IG51bGwsXG4gICAgICBsb2c6IGZhbHNlLFxuICAgICAgbW9kZWw6IG51bGwsXG4gICAgICB0eXBlOiBHcmFwaFFMUmVxdWVzdFR5cGUuUVVFUlksXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH07XG5cbiAgICAvLyBDb252ZXJ0IGNsYXNzIHRvIE9iamVjdCBmb3IgYXJndW1lbnRzXG4gICAgaWYgKHR5cGVvZiBjb25maWcuYXJndW1lbnRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25maWcuYXJndW1lbnRzID0gbmV3IGNvbmZpZy5hcmd1bWVudHMoKTtcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0IGNsYXNzIHRvIE9iamVjdCBmb3IgZmllbGRzXG4gICAgaWYgKHR5cGVvZiBjb25maWcuZmllbGRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25maWcuZmllbGRzID0gbmV3IGNvbmZpZy5maWVsZHMoKTtcbiAgICB9XG5cbiAgICAvLyBMb2dcbiAgICBpZiAoY29uZmlnLmxvZykge1xuICAgICAgY29uc29sZS5sb2coeyBjb25maWcgfSk7XG4gICAgfVxuXG4gICAgLy8gU2VuZCByZXF1ZXN0XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICAvLyBHZXQgbWV0YVxuICAgICAgdGhpcy5ncmFwaFFMTWV0YVNlcnZpY2UuZ2V0TWV0YSh7IGxvZzogY29uZmlnLmxvZyB9KS5zdWJzY3JpYmUoKG1ldGEpID0+IHtcbiAgICAgICAgLy8gUHJlcGFyZSBmaWVsZHNcbiAgICAgICAgbGV0IGZpZWxkcztcbiAgICAgICAgbGV0IGFsbG93ZWRGaWVsZHM7XG5cbiAgICAgICAgLy8gTG9nIG1ldGFcbiAgICAgICAgaWYgKGNvbmZpZy5sb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyh7IG1ldGEgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLmZpZWxkcykge1xuICAgICAgICAgIGFsbG93ZWRGaWVsZHMgPSBtZXRhLmdldEZpZWxkcyhncmFwaHFsLCB7IHR5cGU6IGNvbmZpZy50eXBlIH0pO1xuXG4gICAgICAgICAgLy8gTG9nIG1ldGFcbiAgICAgICAgICBpZiAoY29uZmlnLmxvZykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coeyBhbGxvd2VkRmllbGRzIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGZpZWxkc0RhdGEgPSB0aGlzLnByZXBhcmVGaWVsZHMoY29uZmlnLmZpZWxkcywge1xuICAgICAgICAgICAgYWxsb3dlZDogYWxsb3dlZEZpZWxkcyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIExvZyBmaWVsZHMgZGF0YVxuICAgICAgICAgIGlmIChjb25maWcubG9nKSB7XG4gICAgICAgICAgICBmaWVsZHNEYXRhLnVzZWRGaWVsZHMuc29ydCgpO1xuICAgICAgICAgICAgZmllbGRzRGF0YS5zY2hlbWFGaWVsZHMuc29ydCgpO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWQgPSBmaWVsZHNEYXRhLnNjaGVtYUZpZWxkcy5maWx0ZXIoKGZpZWxkKSA9PiAhZmllbGRzRGF0YS51c2VkRmllbGRzLmluY2x1ZGVzKGZpZWxkKSk7XG4gICAgICAgICAgICBjb25zdCB1bnVzZWQgPSB0aGlzLmdyYXBoUUxUeXBlQ29sbGVjdGlvblRvU3RyaW5nQXJyYXkoYWxsb3dlZEZpZWxkcykuZmlsdGVyKFxuICAgICAgICAgICAgICAoZmllbGQpID0+ICFmaWVsZHNEYXRhLnVzZWRGaWVsZHMuaW5jbHVkZXMoZmllbGQpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc29sZS5sb2coeyBmaWVsZHNEYXRhLCBmaWx0ZXJlZCwgdW51c2VkIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZpZWxkcyA9IGZpZWxkc0RhdGEuZmllbGRzU3RyaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpZWxkcyAmJiAhZmllbGRzLnN0YXJ0c1dpdGgoJ3snKSkge1xuICAgICAgICAgIGZpZWxkcyA9ICd7JyArIGZpZWxkcyArICdcXG59JztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIExvZyBmaWVsZHNcbiAgICAgICAgaWYgKGNvbmZpZy5sb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyh7IGZpZWxkcyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdldCBhbGxvd2VkIGFyZ3NcbiAgICAgICAgY29uc3QgYWxsb3dlZEFyZ3MgPSBtZXRhLmdldEFyZ3MoZ3JhcGhxbCwgeyB0eXBlOiBjb25maWcudHlwZSB9KTtcblxuICAgICAgICAvLyBMb2cgYWxsb3dlZCBhcmdzXG4gICAgICAgIGlmIChjb25maWcubG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coeyBhbGxvd2VkQXJncyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFyZ3NEYXRhID0gdGhpcy5wcmVwYXJlQXJndW1lbnRzKGNvbmZpZy5hcmd1bWVudHMsIHtcbiAgICAgICAgICBhbGxvd2VkOiBhbGxvd2VkQXJncyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gTG9nIGFyZ3MgZGF0YVxuICAgICAgICBpZiAoY29uZmlnLmxvZykge1xuICAgICAgICAgIGFyZ3NEYXRhLnVzZWRBcmdzLnNvcnQoKTtcbiAgICAgICAgICBhcmdzRGF0YS5zY2hlbWFBcmdzLnNvcnQoKTtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IGFyZ3NEYXRhLnNjaGVtYUFyZ3MuZmlsdGVyKChmaWVsZCkgPT4gIWFyZ3NEYXRhLnVzZWRBcmdzLmluY2x1ZGVzKGZpZWxkKSk7XG4gICAgICAgICAgY29uc3QgdW51c2VkID0gdGhpcy5ncmFwaFFMVHlwZUNvbGxlY3Rpb25Ub1N0cmluZ0FycmF5KGFsbG93ZWRBcmdzKVxuICAgICAgICAgICAgLnNvcnQoKVxuICAgICAgICAgICAgLmZpbHRlcigoZmllbGQpID0+ICFhcmdzRGF0YS51c2VkQXJncy5pbmNsdWRlcyhmaWVsZCkpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKHsgYXJnc0RhdGEsIGZpbHRlcmVkLCB1bnVzZWQgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcmdzID0gYXJnc0RhdGE/LmFyZ3NTdHJpbmcgfHwgJyc7XG5cbiAgICAgICAgLy8gTG9nXG4gICAgICAgIGlmIChjb25maWcubG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coeyBncmFwaFFMOiBncmFwaHFsLCBhcmdzLCBmaWVsZHMsIHR5cGU6IGNvbmZpZy50eXBlIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJlcGFyZSByZXF1ZXN0XG4gICAgICAgIGNvbnN0IGRvY3VtZW50Tm9kZSA9IGZpZWxkc1xuICAgICAgICAgID8gZ3FsKGNvbmZpZy50eXBlICsgJ3tcXG4nICsgZ3JhcGhxbCArIGFyZ3MgKyBmaWVsZHMgKyAnXFxufScpXG4gICAgICAgICAgOiBncWwoY29uZmlnLnR5cGUgKyAne1xcbicgKyBncmFwaHFsICsgYXJncyArICdcXG59Jyk7XG5cbiAgICAgICAgLy8gTG9nXG4gICAgICAgIGlmIChjb25maWcubG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coeyBkb2N1bWVudE5vZGUgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXF1ZXN0OiBhbnkgPSB7fTtcbiAgICAgICAgcmVxdWVzdFtjb25maWcudHlwZV0gPSBkb2N1bWVudE5vZGU7XG5cbiAgICAgICAgLy8gTG9nXG4gICAgICAgIGlmIChjb25maWcubG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coeyByZXF1ZXN0IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGZ1bmM7XG4gICAgICAgIGlmIChjb25maWcudHlwZSA9PT0gR3JhcGhRTFJlcXVlc3RUeXBlLk1VVEFUSU9OKSB7XG4gICAgICAgICAgZnVuYyA9ICdtdXRhdGUnO1xuICAgICAgICAgIHJlcXVlc3RbY29uZmlnLnR5cGVdID0gZG9jdW1lbnROb2RlO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy50eXBlID09PSBHcmFwaFFMUmVxdWVzdFR5cGUuU1VCU0NSSVBUSU9OKSB7XG4gICAgICAgICAgZnVuYyA9ICdzdWJzY3JpYmUnO1xuICAgICAgICAgIHJlcXVlc3QucXVlcnkgPSBkb2N1bWVudE5vZGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZnVuYyA9IGNvbmZpZy50eXBlO1xuICAgICAgICAgIHJlcXVlc3RbY29uZmlnLnR5cGVdID0gZG9jdW1lbnROb2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgKHRoaXMuYXBvbGxvIGFzIGFueSlbZnVuY10ocmVxdWVzdCkuc3Vic2NyaWJlKFxuICAgICAgICAgIChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlc3VsdD8uZGF0YT8uW2dyYXBocWxdICE9PSB1bmRlZmluZWQgPyByZXN1bHQuZGF0YVtncmFwaHFsXSA6IHJlc3VsdDtcblxuICAgICAgICAgICAgLy8gRGlyZWN0IGRhdGFcbiAgICAgICAgICAgIGlmICghY29uZmlnLm1vZGVsKSB7XG4gICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChkYXRhKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gTWFwIGRhdGEgYXMgYXJyYXlcbiAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KFxuICAgICAgICAgICAgICAgIGRhdGEubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnLm1vZGVsLm1hcChpdGVtKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBNYXAgZGF0YVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChjb25maWcubW9kZWwubWFwKGRhdGEpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbmZpZy50eXBlICE9PSBHcmFwaFFMUmVxdWVzdFR5cGUuU1VCU0NSSVBUSU9OKSB7XG4gICAgICAgICAgICAgIC8vIERvbmVcbiAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBmaWVsZHMgLyBhcmdzIGZyb20gSUdyYXBoUUxUeXBlQ29sbGVjdGlvblxuICAgKi9cbiAgcHJvdGVjdGVkIGdyYXBoUUxUeXBlQ29sbGVjdGlvblRvU3RyaW5nQXJyYXkoXG4gICAgY29sbGVjdGlvbjogSUdyYXBoUUxUeXBlQ29sbGVjdGlvbixcbiAgICBjdXJyZW50ID0gJycsXG4gICAgcmVzdWx0ID0gW10sXG4gICAgY2FjaGVOb2RlID0gW11cbiAgKSB7XG4gICAgaWYgKGNvbGxlY3Rpb24pIHtcbiAgICAgIGlmIChjb2xsZWN0aW9uIGluc3RhbmNlb2YgR3JhcGhRTFR5cGUpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goY3VycmVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoY3VycmVudD8uaW5jbHVkZXMoJy4nKSkge1xuICAgICAgICAgIGNhY2hlTm9kZS5wdXNoKGN1cnJlbnQuc3BsaXQoJy4nKVsxXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudCkge1xuICAgICAgICAgIGNhY2hlTm9kZS5wdXNoKGN1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNvbGxlY3Rpb24pKSB7XG4gICAgICAgICAgaWYgKGN1cnJlbnQgPT09IGtleSB8fCBjYWNoZU5vZGUuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZ3JhcGhRTFR5cGVDb2xsZWN0aW9uVG9TdHJpbmdBcnJheShcbiAgICAgICAgICAgIGNvbGxlY3Rpb25ba2V5XSBhcyBJR3JhcGhRTFR5cGVDb2xsZWN0aW9uLFxuICAgICAgICAgICAgY3VycmVudCA/IGN1cnJlbnQgKyAnLicgKyBrZXkgOiBrZXksXG4gICAgICAgICAgICByZXN1bHQsXG4gICAgICAgICAgICBjYWNoZU5vZGVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogUHJlcGFyZSBhcmd1bWVudHMgZm9yIEdyYXBoUUwgcmVxdWVzdFxuICAgKi9cbiAgcHJvdGVjdGVkIHByZXBhcmVBcmd1bWVudHMoXG4gICAgYXJnczogYW55LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGFsbG93ZWQ/OiBhbnk7XG4gICAgICBsZXZlbD86IG51bWJlcjtcbiAgICAgIHBhcmVudD86IHN0cmluZztcbiAgICAgIHNjaGVtYUFyZ3M/OiBzdHJpbmdbXTtcbiAgICAgIHVzZWRBcmdzPzogc3RyaW5nW107XG4gICAgfSA9IHt9XG4gICk6IHsgYXJnc1N0cmluZzogc3RyaW5nOyBzY2hlbWFBcmdzOiBzdHJpbmdbXTsgdXNlZEFyZ3M6IHN0cmluZ1tdIH0ge1xuICAgIC8vIEluaXQgY29uZmlnIHZhcmlhYmxlc1xuICAgIGNvbnN0IHsgYWxsb3dlZCwgbGV2ZWwsIHBhcmVudCwgc2NoZW1hQXJncywgdXNlZEFyZ3MgfSA9IHtcbiAgICAgIGFsbG93ZWQ6IG51bGwsXG4gICAgICBsZXZlbDogMSxcbiAgICAgIHBhcmVudDogJycsXG4gICAgICBzY2hlbWFBcmdzOiBbXSxcbiAgICAgIHVzZWRBcmdzOiBbXSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfTtcblxuICAgIC8vIENoZWNrIGFyZ3NcbiAgICBpZiAoYXJncyA9PT0gdW5kZWZpbmVkIHx8IGFyZ3MgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB7IGFyZ3NTdHJpbmc6ICcnLCBzY2hlbWFBcmdzLCB1c2VkQXJncyB9O1xuICAgIH1cblxuICAgIC8vIEluaXQgYXJnc1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gICAgLy8gUHJvY2VzcyBhcnJheVxuICAgIGlmIChBcnJheS5pc0FycmF5KGFyZ3MpKSB7XG4gICAgICBjb25zdCBhbGxvd2VkS2V5cyA9IGFsbG93ZWQgPyBPYmplY3Qua2V5cyhhbGxvd2VkKSA6IG51bGw7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXJncykge1xuICAgICAgICBsZXQga2V5ID0gbnVsbDtcbiAgICAgICAgaWYgKGFsbG93ZWQpIHtcbiAgICAgICAgICBpZiAoYWxsb3dlZC5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAga2V5ID0gYWxsb3dlZEtleXM/LnNoaWZ0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIHZhbHVlXG4gICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgIHRoaXMucHJlcGFyZUFyZ3VtZW50cyhpdGVtLCB7XG4gICAgICAgICAgICBhbGxvd2VkOiBrZXkgPyBhbGxvd2VkW2tleV0gOiBudWxsLFxuICAgICAgICAgICAgbGV2ZWw6IGxldmVsICsgMSxcbiAgICAgICAgICAgIHBhcmVudDogcGFyZW50ICsga2V5ICsgJy4nLFxuICAgICAgICAgICAgc2NoZW1hQXJncyxcbiAgICAgICAgICAgIHVzZWRBcmdzLFxuICAgICAgICAgIH0pLmFyZ3NTdHJpbmdcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gRW5jYXBzdWxhdGlvbiBvZiB0aGUgYXJyYXkgcmVzdWx0XG4gICAgICBpZiAocmVzdWx0Lmxlbmd0aCkge1xuICAgICAgICAvLyBDb21wbGV0ZSByZXN1bHQsIGVuY2Fwc3VsYXRlZCB2aWEgcm91bmQgYnJhY2tldHNcbiAgICAgICAgaWYgKGxldmVsID09PSAxKSB7XG4gICAgICAgICAgcmV0dXJuIHsgYXJnc1N0cmluZzogJygnICsgcmVzdWx0LmpvaW4oJywgJykgKyAnKScsIHNjaGVtYUFyZ3MsIHVzZWRBcmdzIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWVwZXIgcmVzdWx0IHBhcnQsIGVuY2Fwc3VsYXRlZCB2aWEgc3F1YXJlIGJyYWNrZXRzXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHJldHVybiB7IGFyZ3NTdHJpbmc6ICdbJyArIHJlc3VsdC5qb2luKCcsICcpICsgJ10nLCBzY2hlbWFBcmdzLCB1c2VkQXJncyB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUHJvY2VzcyBvYmplY3RcbiAgICBlbHNlIGlmICh0eXBlb2YgYXJncyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIC8vIENoZWNrIG9iamVjdCBpcyBlbXB0eVxuICAgICAgaWYgKGFyZ3MgJiYgT2JqZWN0LmtleXMoYXJncykubGVuZ3RoID09PSAwICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihhcmdzKSA9PT0gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgICAgICByZXR1cm4geyBhcmdzU3RyaW5nOiAne30nLCBzY2hlbWFBcmdzLCB1c2VkQXJncyB9O1xuICAgICAgfVxuICAgICAgLy8gUHJvY2VzcyBhbGwgb2JqZWN0IGVudHJpZXNcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGFyZ3MpKSB7XG4gICAgICAgIC8vIEluaXQgZGF0YSBmb3IgY3VycmVudCBlbnRyeVxuICAgICAgICBjb25zdCBjdXJyZW50S2V5ID0gcGFyZW50ICsga2V5O1xuICAgICAgICBzY2hlbWFBcmdzLnB1c2goY3VycmVudEtleSk7XG5cbiAgICAgICAgLy8gSWYgdGhlIGFsbG93ZWQga2V5IGhhbmRsaW5nIGlzIGVuYWJsZWQgYW5kIHRoZSBjdXJyZW50IGtleSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGxpc3Qgb2YgYWxsb3dlZCBrZXlzLFxuICAgICAgICAvLyB0aGUgY3VycmVudCBrZXkgd2lsbCBiZSBza2lwcGVkXG4gICAgICAgIGlmIChhbGxvd2VkICYmICFhbGxvd2VkW2tleV0pIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNraXAgdmFsdWUgaWYgbm90IGV4aXN0c1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWRkIGN1cnJlbnQga2V5IHRvIG1ldGFkYXRhXG4gICAgICAgIHVzZWRBcmdzLnB1c2goY3VycmVudEtleSk7XG5cbiAgICAgICAgLy8gUHJvY2VzcyBHcmFwaFFMRW51bVxuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBHcmFwaFFMRW51bSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGtleSArICc6JyArIHZhbHVlLnZhbHVlKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3MgYXJyYXlcbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgIGtleSArXG4gICAgICAgICAgICAgICc6IFsnICtcbiAgICAgICAgICAgICAgdmFsdWUubWFwKFxuICAgICAgICAgICAgICAgIChpdGVtKSA9PlxuICAgICAgICAgICAgICAgICAgdGhpcy5wcmVwYXJlQXJndW1lbnRzKGl0ZW0sIHtcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZDogYWxsb3dlZFtrZXldLFxuICAgICAgICAgICAgICAgICAgICBsZXZlbDogbGV2ZWwgKyAxLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGN1cnJlbnRLZXkgKyAnLicsXG4gICAgICAgICAgICAgICAgICAgIHNjaGVtYUFyZ3MsXG4gICAgICAgICAgICAgICAgICAgIHVzZWRBcmdzLFxuICAgICAgICAgICAgICAgICAgfSkuYXJnc1N0cmluZ1xuICAgICAgICAgICAgICApICtcbiAgICAgICAgICAgICAgJ10nXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByZXBhcmUgYWRkaXRpb25hbCByZXN1bHQgc3RyaW5nXG4gICAgICAgIGxldCBhZGRpdGlvbmFsUmVzdWx0ID0ga2V5ICsgJzogJztcblxuICAgICAgICAvLyBWYWx1ZSBpcyBhIGRhdGUgb2JqZWN0XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IERhdGVdJykge1xuICAgICAgICAgIGFkZGl0aW9uYWxSZXN1bHQgKz0gYFwiXCJcIiR7KHZhbHVlIGFzIERhdGUpLnRvU3RyaW5nKCl9XCJcIlwiYDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFZhbHVlIGlzIGEgc3RyaW5nXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAvLyBFbnVtIChkb2Vzbid0IG5lZWQgcXVvdGF0aW9uIG1hcmtzKVxuICAgICAgICAgIGlmIChhbGxvd2VkW2tleV0uaXNFbnVtKSB7XG4gICAgICAgICAgICBhZGRpdGlvbmFsUmVzdWx0ICs9IHZhbHVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFN0cmluZ1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYWRkaXRpb25hbFJlc3VsdCArPSBgXCIke3ZhbHVlLnJlcGxhY2UoL1wiL2csICdcXFxcXCInKS5yZXBsYWNlKC9cXG4vZywgJ1xcXFxuJyl9XCJgO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFZhbHVlIGlzIGEgc2ltcGxlIGJvb2xlYW4gb3IgYSBudW1iZXJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIGFkZGl0aW9uYWxSZXN1bHQgKz0gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPdGhlcnNcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgYWRkaXRpb25hbFJlc3VsdCArPSB0aGlzLnByZXBhcmVBcmd1bWVudHModmFsdWUsIHtcbiAgICAgICAgICAgIGFsbG93ZWQ6IGFsbG93ZWRba2V5XSxcbiAgICAgICAgICAgIGxldmVsOiBsZXZlbCArIDEsXG4gICAgICAgICAgICBwYXJlbnQ6IGN1cnJlbnRLZXkgKyAnLicsXG4gICAgICAgICAgICBzY2hlbWFBcmdzLFxuICAgICAgICAgICAgdXNlZEFyZ3MsXG4gICAgICAgICAgfSkuYXJnc1N0cmluZztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFB1c2ggZGVlcGVyIHBhcnQgaW50byByZXN1bHQgYXJyYXlcbiAgICAgICAgcmVzdWx0LnB1c2goYWRkaXRpb25hbFJlc3VsdCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEVuY2Fwc3VsYXRpb24gb2YgdGhlIG9iamVjdCByZXN1bHRcbiAgICAgIGlmIChyZXN1bHQubGVuZ3RoKSB7XG4gICAgICAgIC8vIENvbXBsZXRlIHJlc3VsdCwgZW5jYXBzdWxhdGVkIHZpYSByb3VuZCBicmFja2V0c1xuICAgICAgICBpZiAobGV2ZWwgPT09IDEpIHtcbiAgICAgICAgICByZXR1cm4geyBhcmdzU3RyaW5nOiAnKCcgKyByZXN1bHQuam9pbignLCAnKSArICcpJywgc2NoZW1hQXJncywgdXNlZEFyZ3MgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERlZXBlciByZXN1bHQgcGFydCwgZW5jYXBzdWxhdGVkIHZpYSBjdXJseSBicmFja2V0c1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICByZXR1cm4geyBhcmdzU3RyaW5nOiAneycgKyByZXN1bHQuam9pbignLCAnKSArICd9Jywgc2NoZW1hQXJncywgdXNlZEFyZ3MgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByZXBhcmUgYW5kIHByb2Nlc3Mgb3RoZXIgLyB1bmtub3duIHZhbHVlcyBhcyBKU09OXG4gICAgZWxzZSB7XG4gICAgICByZXR1cm4geyBhcmdzU3RyaW5nOiBKU09OLnN0cmluZ2lmeShhcmdzKSwgc2NoZW1hQXJncywgdXNlZEFyZ3MgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHJlcGFyZSBmaWVsZHMgZm9yIEdyYXBoUUwgcmVxdWVzdFxuICAgKi9cbiAgcHJvdGVjdGVkIHByZXBhcmVGaWVsZHMoXG4gICAgZmllbGRzOiBhbnksXG4gICAgb3B0aW9uczoge1xuICAgICAgYWxsb3dlZD86IGFueTtcbiAgICAgIHNjaGVtYUZpZWxkcz86IHN0cmluZ1tdO1xuICAgICAgdXNlZEZpZWxkcz86IHN0cmluZ1tdO1xuICAgICAgcGFyZW50Pzogc3RyaW5nO1xuICAgICAgc3BhY2VzPzogbnVtYmVyO1xuICAgICAgdGFiPzogbnVtYmVyO1xuICAgIH0gPSB7fVxuICApOiB7IHNjaGVtYUZpZWxkczogc3RyaW5nW107IGZpZWxkc1N0cmluZzogc3RyaW5nOyB1c2VkRmllbGRzOiBzdHJpbmdbXSB9IHtcbiAgICAvLyBDb25maWdcbiAgICBjb25zdCB7IGFsbG93ZWQsIHBhcmVudCwgc2NoZW1hRmllbGRzLCBzcGFjZXMsIHRhYiwgdXNlZEZpZWxkcyB9ID0ge1xuICAgICAgYWxsb3dlZDogbnVsbCxcbiAgICAgIHBhcmVudDogJycsXG4gICAgICBzY2hlbWFGaWVsZHM6IFtdLFxuICAgICAgc3BhY2VzOiAyLFxuICAgICAgdGFiOiAxLFxuICAgICAgdXNlZEZpZWxkczogW10sXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH07XG5cbiAgICAvLyBJbml0IGZpZWxkcyBzdHJpbmdcbiAgICBsZXQgZmllbGRzU3RyaW5nID0gJyc7XG5cbiAgICAvLyBDaGVjayBmaWVsZHNcbiAgICBpZiAoIWZpZWxkcykge1xuICAgICAgcmV0dXJuIHsgZmllbGRzU3RyaW5nLCBzY2hlbWFGaWVsZHMsIHVzZWRGaWVsZHMgfTtcbiAgICB9XG5cbiAgICAvLyBQcm9jZXNzIHN0cmluZ1xuICAgIGlmICh0eXBlb2YgZmllbGRzID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKFxuICAgICAgICBhbGxvd2VkICYmXG4gICAgICAgICgodHlwZW9mIGFsbG93ZWQgPT09ICdzdHJpbmcnICYmIGFsbG93ZWQgIT09IGZpZWxkcykgfHwgKHR5cGVvZiBhbGxvd2VkID09PSAnb2JqZWN0JyAmJiAhYWxsb3dlZFtmaWVsZHNdKSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4geyBmaWVsZHNTdHJpbmcsIHNjaGVtYUZpZWxkcywgdXNlZEZpZWxkcyB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgZmllbGRzU3RyaW5nOiAnXFxuJyArICcgJy5yZXBlYXQoc3BhY2VzKS5yZXBlYXQodGFiKSArIGZpZWxkcywgc2NoZW1hRmllbGRzLCB1c2VkRmllbGRzIH07XG4gICAgfVxuXG4gICAgLy8gUHJvY2VzcyBhcnJheVxuICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZmllbGRzKSkge1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGZpZWxkcykge1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgZmllbGRzU3RyaW5nID1cbiAgICAgICAgICAgIGZpZWxkc1N0cmluZyArXG4gICAgICAgICAgICB0aGlzLnByZXBhcmVGaWVsZHMoaXRlbSwge1xuICAgICAgICAgICAgICBhbGxvd2VkLFxuICAgICAgICAgICAgICBwYXJlbnQsXG4gICAgICAgICAgICAgIHNwYWNlcyxcbiAgICAgICAgICAgICAgc2NoZW1hRmllbGRzLFxuICAgICAgICAgICAgICB0YWI6IHRhYiArIDEsXG4gICAgICAgICAgICAgIHVzZWRGaWVsZHMsXG4gICAgICAgICAgICB9KS5maWVsZHNTdHJpbmc7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VycmVudFBhdGggPSBwYXJlbnQgKyBpdGVtO1xuICAgICAgICBzY2hlbWFGaWVsZHMucHVzaChjdXJyZW50UGF0aCk7XG4gICAgICAgIGlmIChhbGxvd2VkICYmICFhbGxvd2VkPy5baXRlbV0pIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB1c2VkRmllbGRzLnB1c2goY3VycmVudFBhdGgpO1xuICAgICAgICBmaWVsZHNTdHJpbmcgPVxuICAgICAgICAgIGZpZWxkc1N0cmluZyArXG4gICAgICAgICAgdGhpcy5wcmVwYXJlRmllbGRzKGl0ZW0sIHtcbiAgICAgICAgICAgIGFsbG93ZWQ6XG4gICAgICAgICAgICAgIHR5cGVvZiBhbGxvd2VkPy5baXRlbV0gPT09ICdvYmplY3QnICYmICEoYWxsb3dlZD8uW2l0ZW1dIGluc3RhbmNlb2YgR3JhcGhRTFR5cGUpID8gYWxsb3dlZD8uW2l0ZW1dIDogaXRlbSxcbiAgICAgICAgICAgIHBhcmVudDogY3VycmVudFBhdGggKyAnLicsXG4gICAgICAgICAgICBzcGFjZXMsXG4gICAgICAgICAgICBzY2hlbWFGaWVsZHMsXG4gICAgICAgICAgICB0YWI6IHRhYiArIDEsXG4gICAgICAgICAgICB1c2VkRmllbGRzLFxuICAgICAgICAgIH0pLmZpZWxkc1N0cmluZztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQcm9jZXNzIG9iamVjdFxuICAgIGVsc2UgaWYgKHR5cGVvZiBmaWVsZHMgPT09ICdvYmplY3QnKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoZmllbGRzKSkge1xuICAgICAgICBjb25zdCBjdXJyZW50UGF0aCA9IHBhcmVudCArIGtleTtcbiAgICAgICAgc2NoZW1hRmllbGRzLnB1c2goY3VycmVudFBhdGgpO1xuICAgICAgICBpZiAoYWxsb3dlZCAmJiAhYWxsb3dlZFtrZXldKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdXNlZEZpZWxkcy5wdXNoKGN1cnJlbnRQYXRoKTtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWwgIT09ICdvYmplY3QnIHx8ICFPYmplY3Qua2V5cyh2YWwpLmxlbmd0aCkge1xuICAgICAgICAgIGZpZWxkc1N0cmluZyA9IGZpZWxkc1N0cmluZyArICdcXG4nICsgJyAnLnJlcGVhdChzcGFjZXMpLnJlcGVhdCh0YWIpICsga2V5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpZWxkc1N0cmluZyA9XG4gICAgICAgICAgICBmaWVsZHNTdHJpbmcgK1xuICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgJyAnLnJlcGVhdChzcGFjZXMpLnJlcGVhdCh0YWIpICtcbiAgICAgICAgICAgIGtleSArXG4gICAgICAgICAgICAnICcgK1xuICAgICAgICAgICAgJ3snICtcbiAgICAgICAgICAgIHRoaXMucHJlcGFyZUZpZWxkcyh2YWwsIHtcbiAgICAgICAgICAgICAgYWxsb3dlZDpcbiAgICAgICAgICAgICAgICB0eXBlb2YgYWxsb3dlZD8uW2tleV0gPT09ICdvYmplY3QnICYmICEoYWxsb3dlZD8uW2tleV0gaW5zdGFuY2VvZiBHcmFwaFFMVHlwZSkgPyBhbGxvd2VkPy5ba2V5XSA6IGtleSxcbiAgICAgICAgICAgICAgcGFyZW50OiBjdXJyZW50UGF0aCArICcuJyxcbiAgICAgICAgICAgICAgc3BhY2VzLFxuICAgICAgICAgICAgICBzY2hlbWFGaWVsZHMsXG4gICAgICAgICAgICAgIHRhYjogdGFiICsgMSxcbiAgICAgICAgICAgICAgdXNlZEZpZWxkcyxcbiAgICAgICAgICAgIH0pLmZpZWxkc1N0cmluZyArXG4gICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAnICcucmVwZWF0KHNwYWNlcykucmVwZWF0KHRhYikgK1xuICAgICAgICAgICAgJ30nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIHJlc3VsdFxuICAgIHJldHVybiB7IGZpZWxkc1N0cmluZywgc2NoZW1hRmllbGRzLCB1c2VkRmllbGRzIH07XG4gIH1cbn1cbiJdfQ==
446
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYmFzZS9zaGFyZWQvc2VydmljZXMvZ3JhcGhxbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBVSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTlDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFNUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQzs7OztBQUVuQzs7R0FFRztBQUlILE1BQU0sT0FBTyxjQUFjO0lBQ3pCOztPQUVHO0lBQ0gsWUFBc0IsTUFBYyxFQUFZLGtCQUFzQztRQUFoRSxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVksdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtJQUFHLENBQUM7SUFFMUY7O09BRUc7SUFDSSxPQUFPLENBQUMsT0FBZSxFQUFFLFVBQTJCLEVBQUU7UUFDM0Qsa0JBQWtCO1FBQ2xCLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDWixVQUFVLENBQUMsMEJBQTBCLENBQUMsQ0FBQztTQUN4QztRQUVELGFBQWE7UUFDYixNQUFNLE1BQU0sR0FBRztZQUNiLFNBQVMsRUFBRSxJQUFJO1lBQ2YsTUFBTSxFQUFFLElBQUk7WUFDWixHQUFHLEVBQUUsS0FBSztZQUNWLEtBQUssRUFBRSxJQUFJO1lBQ1gsSUFBSSxFQUFFLGtCQUFrQixDQUFDLEtBQUs7WUFDOUIsR0FBRyxPQUFPO1NBQ1gsQ0FB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OzRCQUNaLElBQUk7NEJBQ0osR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDOzRCQUM5QixHQUFHOzRCQUNILEdBQUc7NEJBQ0gsR0FBRzs0QkFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRTtnQ0FDdEIsT0FBTyxFQUNMLE9BQU8sT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsWUFBWSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUc7Z0NBQ3ZHLE1BQU0sRUFBRSxXQUFXLEdBQUcsR0FBRztnQ0FDekIsTUFBTTtnQ0FDTixZQUFZO2dDQUNaLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztnQ0FDWixVQUFVOzZCQUNYLENBQUMsQ0FBQyxZQUFZOzRCQUNmLElBQUk7NEJBQ0osR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDOzRCQUM5QixHQUFHLENBQUM7aUJBQ1A7YUFDRjtTQUNGO1FBRUQsZ0JBQWdCO1FBQ2hCLE9BQU8sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQ3BELENBQUM7OzJHQTNnQlUsY0FBYzsrR0FBZCxjQUFjLGNBRmIsTUFBTTsyRkFFUCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwb2xsbywgZ3FsIH0gZnJvbSAnYXBvbGxvLWFuZ3VsYXInO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSUdyYXBoUUxPcHRpb25zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ncmFwaHFsLW9wdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IEdyYXBoUUxSZXF1ZXN0VHlwZSB9IGZyb20gJy4uL2VudW1zL2dyYXBocWwtcmVxdWVzdC10eXBlLmVudW0nO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgR3JhcGhRTE1ldGFTZXJ2aWNlIH0gZnJvbSAnLi9ncmFwaHFsLW1ldGEuc2VydmljZSc7XG5pbXBvcnQgeyBHcmFwaFFMRW51bSB9IGZyb20gJy4uL2NsYXNzZXMvZ3JhcGhxbC1lbnVtLmNsYXNzJztcbmltcG9ydCB7IEdyYXBoUUxUeXBlIH0gZnJvbSAnLi4vY2xhc3Nlcy9ncmFwaHFsLXR5cGUuY2xhc3MnO1xuaW1wb3J0IHsgSUdyYXBoUUxUeXBlQ29sbGVjdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvZ3JhcGhxbC10eXBlLWNvbGxlY3Rpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IHNoYTI1NiB9IGZyb20gJ2pzLXNoYTI1Nic7XG5cbi8qKlxuICogR3JhcGhRTCBzZXJ2aWNlXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBHcmFwaFFMU2VydmljZSB7XG4gIC8qKlxuICAgKiBJbmNsdWRlIHNlcnZpY2VzXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgYXBvbGxvOiBBcG9sbG8sIHByb3RlY3RlZCBncmFwaFFMTWV0YVNlcnZpY2U6IEdyYXBoUUxNZXRhU2VydmljZSkge31cblxuICAvKipcbiAgICogR3JhcGhRTCByZXF1ZXN0XG4gICAqL1xuICBwdWJsaWMgZ3JhcGhRbChncmFwaHFsOiBzdHJpbmcsIG9wdGlvbnM6IElHcmFwaFFMT3B0aW9ucyA9IHt9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAvLyBDaGVjayBhcmd1bWVudHNcbiAgICBpZiAoIWdyYXBocWwpIHtcbiAgICAgIHRocm93RXJyb3IoJ01pc3NpbmcgZ3JhcGhxbCBhcmd1bWVudCcpO1xuICAgIH1cblxuICAgIC8vIEdldCBjb25maWdcbiAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICBhcmd1bWVudHM6IG51bGwsXG4gICAgICBmaWVsZHM6IG51bGwsXG4gICAgICBsb2c6IGZhbHNlLFxuICAgICAgbW9kZWw6IG51bGwsXG4gICAgICB0eXBlOiBHcmFwaFFMUmVxdWVzdFR5cGUuUVVFUlksXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH07XG5cbiAgICAvLyBDb252ZXJ0IGNsYXNzIHRvIE9iamVjdCBmb3IgYXJndW1lbnRzXG4gICAgaWYgKHR5cGVvZiBjb25maWcuYXJndW1lbnRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25maWcuYXJndW1lbnRzID0gbmV3IGNvbmZpZy5hcmd1bWVudHMoKTtcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0IGNsYXNzIHRvIE9iamVjdCBmb3IgZmllbGRzXG4gICAgaWYgKHR5cGVvZiBjb25maWcuZmllbGRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25maWcuZmllbGRzID0gbmV3IGNvbmZpZy5maWVsZHMoKTtcbiAgICB9XG5cbiAgICAvLyBMb2dcbiAgICBpZiAoY29uZmlnLmxvZykge1xuICAgICAgY29uc29sZS5sb2coeyBjb25maWcgfSk7XG4gICAgfVxuXG4gICAgLy8gU2VuZCByZXF1ZXN0XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICAvLyBHZXQgbWV0YVxuICAgICAgdGhpcy5ncmFwaFFMTWV0YVNlcnZpY2UuZ2V0TWV0YSh7IGxvZzogY29uZmlnLmxvZyB9KS5zdWJzY3JpYmUoKG1ldGEpID0+IHtcbiAgICAgICAgLy8gUHJlcGFyZSBmaWVsZHNcbiAgICAgICAgbGV0IGZpZWxkcztcbiAgICAgICAgbGV0IGFsbG93ZWRGaWVsZHM7XG5cbiAgICAgICAgLy8gTG9nIG1ldGFcbiAgICAgICAgaWYgKGNvbmZpZy5sb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyh7IG1ldGEgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLmZpZWxkcykge1xuICAgICAgICAgIGFsbG93ZWRGaWVsZHMgPSBtZXRhLmdldEZpZWxkcyhncmFwaHFsLCB7IHR5cGU6IGNvbmZpZy50eXBlIH0pO1xuXG4gICAgICAgICAgLy8gTG9nIG1ldGFcbiAgICAgICAgICBpZiAoY29uZmlnLmxvZykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coeyBhbGxvd2VkRmllbGRzIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGZpZWxkc0RhdGEgPSB0aGlzLnByZXBhcmVGaWVsZHMoY29uZmlnLmZpZWxkcywge1xuICAgICAgICAgICAgYWxsb3dlZDogYWxsb3dlZEZpZWxkcyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIExvZyBmaWVsZHMgZGF0YVxuICAgICAgICAgIGlmIChjb25maWcubG9nKSB7XG4gICAgICAgICAgICBmaWVsZHNEYXRhLnVzZWRGaWVsZHMuc29ydCgpO1xuICAgICAgICAgICAgZmllbGRzRGF0YS5zY2hlbWFGaWVsZHMuc29ydCgpO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWQgPSBmaWVsZHNEYXRhLnNjaGVtYUZpZWxkcy5maWx0ZXIoKGZpZWxkKSA9PiAhZmllbGRzRGF0YS51c2VkRmllbGRzLmluY2x1ZGVzKGZpZWxkKSk7XG4gICAgICAgICAgICBjb25zdCB1bnVzZWQgPSB0aGlzLmdyYXBoUUxUeXBlQ29sbGVjdGlvblRvU3RyaW5nQXJyYXkoYWxsb3dlZEZpZWxkcykuZmlsdGVyKFxuICAgICAgICAgICAgICAoZmllbGQpID0+ICFmaWVsZHNEYXRhLnVzZWRGaWVsZHMuaW5jbHVkZXMoZmllbGQpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc29sZS5sb2coeyBmaWVsZHNEYXRhLCBmaWx0ZXJlZCwgdW51c2VkIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZpZWxkcyA9IGZpZWxkc0RhdGEuZmllbGRzU3RyaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpZWxkcyAmJiAhZmllbGRzLnN0YXJ0c1dpdGgoJ3snKSkge1xuICAgICAgICAgIGZpZWxkcyA9ICd7JyArIGZpZWxkcyArICdcXG59JztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIExvZyBmaWVsZHNcbiAgICAgICAgaWYgKGNvbmZpZy5sb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyh7IGZpZWxkcyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdldCBhbGxvd2VkIGFyZ3NcbiAgICAgICAgY29uc3QgYWxsb3dlZEFyZ3MgPSBtZXRhLmdldEFyZ3MoZ3JhcGhxbCwgeyB0eXBlOiBjb25maWcudHlwZSB9KTtcblxuICAgICAgICAvLyBMb2cgYWxsb3dlZCBhcmdzXG4gICAgICAgIGlmIChjb25maWcubG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coeyBhbGxvd2VkQXJncyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFyZ3NEYXRhID0gdGhpcy5wcmVwYXJlQXJndW1lbnRzKGNvbmZpZy5hcmd1bWVudHMsIHtcbiAgICAgICAgICBhbGxvd2VkOiBhbGxvd2VkQXJncyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gTG9nIGFyZ3MgZGF0YVxuICAgICAgICBpZiAoY29uZmlnLmxvZykge1xuICAgICAgICAgIGFyZ3NEYXRhLnVzZWRBcmdzLnNvcnQoKTtcbiAgICAgICAgICBhcmdzRGF0YS5zY2hlbWFBcmdzLnNvcnQoKTtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IGFyZ3NEYXRhLnNjaGVtYUFyZ3MuZmlsdGVyKChmaWVsZCkgPT4gIWFyZ3NEYXRhLnVzZWRBcmdzLmluY2x1ZGVzKGZpZWxkKSk7XG4gICAgICAgICAgY29uc3QgdW51c2VkID0gdGhpcy5ncmFwaFFMVHlwZUNvbGxlY3Rpb25Ub1N0cmluZ0FycmF5KGFsbG93ZWRBcmdzKVxuICAgICAgICAgICAgLnNvcnQoKVxuICAgICAgICAgICAgLmZpbHRlcigoZmllbGQpID0+ICFhcmdzRGF0YS51c2VkQXJncy5pbmNsdWRlcyhmaWVsZCkpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKHsgYXJnc0RhdGEsIGZpbHRlcmVkLCB1bnVzZWQgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcmdzID0gYXJnc0RhdGE/LmFyZ3NTdHJpbmcgfHwgJyc7XG5cbiAgICAgICAgLy8gTG9nXG4gICAgICAgIGlmIChjb25maWcubG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coeyBncmFwaFFMOiBncmFwaHFsLCBhcmdzLCBmaWVsZHMsIHR5cGU6IGNvbmZpZy50eXBlIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJlcGFyZSByZXF1ZXN0XG4gICAgICAgIGNvbnN0IGRvY3VtZW50Tm9kZSA9IGZpZWxkc1xuICAgICAgICAgID8gZ3FsKGNvbmZpZy50eXBlICsgJ3tcXG4nICsgZ3JhcGhxbCArIGFyZ3MgKyBmaWVsZHMgKyAnXFxufScpXG4gICAgICAgICAgOiBncWwoY29uZmlnLnR5cGUgKyAne1xcbicgKyBncmFwaHFsICsgYXJncyArICdcXG59Jyk7XG5cbiAgICAgICAgLy8gTG9nXG4gICAgICAgIGlmIChjb25maWcubG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coeyBkb2N1bWVudE5vZGUgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXF1ZXN0OiBhbnkgPSB7fTtcbiAgICAgICAgcmVxdWVzdFtjb25maWcudHlwZV0gPSBkb2N1bWVudE5vZGU7XG5cbiAgICAgICAgLy8gTG9nXG4gICAgICAgIGlmIChjb25maWcubG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coeyByZXF1ZXN0IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGZ1bmM7XG4gICAgICAgIGlmIChjb25maWcudHlwZSA9PT0gR3JhcGhRTFJlcXVlc3RUeXBlLk1VVEFUSU9OKSB7XG4gICAgICAgICAgZnVuYyA9ICdtdXRhdGUnO1xuICAgICAgICAgIHJlcXVlc3RbY29uZmlnLnR5cGVdID0gZG9jdW1lbnROb2RlO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy50eXBlID09PSBHcmFwaFFMUmVxdWVzdFR5cGUuU1VCU0NSSVBUSU9OKSB7XG4gICAgICAgICAgZnVuYyA9ICdzdWJzY3JpYmUnO1xuICAgICAgICAgIHJlcXVlc3QucXVlcnkgPSBkb2N1bWVudE5vZGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZnVuYyA9IGNvbmZpZy50eXBlO1xuICAgICAgICAgIHJlcXVlc3RbY29uZmlnLnR5cGVdID0gZG9jdW1lbnROb2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgKHRoaXMuYXBvbGxvIGFzIGFueSlbZnVuY10ocmVxdWVzdCkuc3Vic2NyaWJlKFxuICAgICAgICAgIChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlc3VsdD8uZGF0YT8uW2dyYXBocWxdICE9PSB1bmRlZmluZWQgPyByZXN1bHQuZGF0YVtncmFwaHFsXSA6IHJlc3VsdDtcblxuICAgICAgICAgICAgLy8gRGlyZWN0IGRhdGFcbiAgICAgICAgICAgIGlmICghY29uZmlnLm1vZGVsKSB7XG4gICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChkYXRhKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gTWFwIGRhdGEgYXMgYXJyYXlcbiAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KFxuICAgICAgICAgICAgICAgIGRhdGEubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnLm1vZGVsLm1hcChpdGVtKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBNYXAgZGF0YVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChjb25maWcubW9kZWwubWFwKGRhdGEpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbmZpZy50eXBlICE9PSBHcmFwaFFMUmVxdWVzdFR5cGUuU1VCU0NSSVBUSU9OKSB7XG4gICAgICAgICAgICAgIC8vIERvbmVcbiAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBmaWVsZHMgLyBhcmdzIGZyb20gSUdyYXBoUUxUeXBlQ29sbGVjdGlvblxuICAgKi9cbiAgcHJvdGVjdGVkIGdyYXBoUUxUeXBlQ29sbGVjdGlvblRvU3RyaW5nQXJyYXkoXG4gICAgY29sbGVjdGlvbjogSUdyYXBoUUxUeXBlQ29sbGVjdGlvbixcbiAgICBjdXJyZW50ID0gJycsXG4gICAgcmVzdWx0ID0gW10sXG4gICAgY2FjaGVOb2RlID0gW11cbiAgKSB7XG4gICAgaWYgKGNvbGxlY3Rpb24pIHtcbiAgICAgIGlmIChjb2xsZWN0aW9uIGluc3RhbmNlb2YgR3JhcGhRTFR5cGUpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goY3VycmVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoY3VycmVudD8uaW5jbHVkZXMoJy4nKSkge1xuICAgICAgICAgIGNhY2hlTm9kZS5wdXNoKGN1cnJlbnQuc3BsaXQoJy4nKVsxXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudCkge1xuICAgICAgICAgIGNhY2hlTm9kZS5wdXNoKGN1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNvbGxlY3Rpb24pKSB7XG4gICAgICAgICAgaWYgKGN1cnJlbnQgPT09IGtleSB8fCBjYWNoZU5vZGUuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZ3JhcGhRTFR5cGVDb2xsZWN0aW9uVG9TdHJpbmdBcnJheShcbiAgICAgICAgICAgIGNvbGxlY3Rpb25ba2V5XSBhcyBJR3JhcGhRTFR5cGVDb2xsZWN0aW9uLFxuICAgICAgICAgICAgY3VycmVudCA/IGN1cnJlbnQgKyAnLicgKyBrZXkgOiBrZXksXG4gICAgICAgICAgICByZXN1bHQsXG4gICAgICAgICAgICBjYWNoZU5vZGVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogUHJlcGFyZSBhcmd1bWVudHMgZm9yIEdyYXBoUUwgcmVxdWVzdFxuICAgKi9cbiAgcHJvdGVjdGVkIHByZXBhcmVBcmd1bWVudHMoXG4gICAgYXJnczogYW55LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGFsbG93ZWQ/OiBhbnk7XG4gICAgICBsZXZlbD86IG51bWJlcjtcbiAgICAgIHBhcmVudD86IHN0cmluZztcbiAgICAgIHNjaGVtYUFyZ3M/OiBzdHJpbmdbXTtcbiAgICAgIHVzZWRBcmdzPzogc3RyaW5nW107XG4gICAgfSA9IHt9XG4gICk6IHsgYXJnc1N0cmluZzogc3RyaW5nOyBzY2hlbWFBcmdzOiBzdHJpbmdbXTsgdXNlZEFyZ3M6IHN0cmluZ1tdIH0ge1xuICAgIC8vIEluaXQgY29uZmlnIHZhcmlhYmxlc1xuICAgIGNvbnN0IHsgYWxsb3dlZCwgbGV2ZWwsIHBhcmVudCwgc2NoZW1hQXJncywgdXNlZEFyZ3MgfSA9IHtcbiAgICAgIGFsbG93ZWQ6IG51bGwsXG4gICAgICBsZXZlbDogMSxcbiAgICAgIHBhcmVudDogJycsXG4gICAgICBzY2hlbWFBcmdzOiBbXSxcbiAgICAgIHVzZWRBcmdzOiBbXSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfTtcblxuICAgIC8vIENoZWNrIGFyZ3NcbiAgICBpZiAoYXJncyA9PT0gdW5kZWZpbmVkIHx8IGFyZ3MgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB7IGFyZ3NTdHJpbmc6ICcnLCBzY2hlbWFBcmdzLCB1c2VkQXJncyB9O1xuICAgIH1cblxuICAgIC8vIEluaXQgYXJnc1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gICAgLy8gUHJvY2VzcyBhcnJheVxuICAgIGlmIChBcnJheS5pc0FycmF5KGFyZ3MpKSB7XG4gICAgICBjb25zdCBhbGxvd2VkS2V5cyA9IGFsbG93ZWQgPyBPYmplY3Qua2V5cyhhbGxvd2VkKSA6IG51bGw7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXJncykge1xuICAgICAgICBsZXQga2V5ID0gbnVsbDtcbiAgICAgICAgaWYgKGFsbG93ZWQpIHtcbiAgICAgICAgICBpZiAoYWxsb3dlZC5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAga2V5ID0gYWxsb3dlZEtleXM/LnNoaWZ0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIHZhbHVlXG4gICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgIHRoaXMucHJlcGFyZUFyZ3VtZW50cyhpdGVtLCB7XG4gICAgICAgICAgICBhbGxvd2VkOiBrZXkgPyBhbGxvd2VkW2tleV0gOiBudWxsLFxuICAgICAgICAgICAgbGV2ZWw6IGxldmVsICsgMSxcbiAgICAgICAgICAgIHBhcmVudDogcGFyZW50ICsga2V5ICsgJy4nLFxuICAgICAgICAgICAgc2NoZW1hQXJncyxcbiAgICAgICAgICAgIHVzZWRBcmdzLFxuICAgICAgICAgIH0pLmFyZ3NTdHJpbmdcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gRW5jYXBzdWxhdGlvbiBvZiB0aGUgYXJyYXkgcmVzdWx0XG4gICAgICBpZiAocmVzdWx0Lmxlbmd0aCkge1xuICAgICAgICAvLyBDb21wbGV0ZSByZXN1bHQsIGVuY2Fwc3VsYXRlZCB2aWEgcm91bmQgYnJhY2tldHNcbiAgICAgICAgaWYgKGxldmVsID09PSAxKSB7XG4gICAgICAgICAgcmV0dXJuIHsgYXJnc1N0cmluZzogJygnICsgcmVzdWx0LmpvaW4oJywgJykgKyAnKScsIHNjaGVtYUFyZ3MsIHVzZWRBcmdzIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWVwZXIgcmVzdWx0IHBhcnQsIGVuY2Fwc3VsYXRlZCB2aWEgc3F1YXJlIGJyYWNrZXRzXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHJldHVybiB7IGFyZ3NTdHJpbmc6ICdbJyArIHJlc3VsdC5qb2luKCcsICcpICsgJ10nLCBzY2hlbWFBcmdzLCB1c2VkQXJncyB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUHJvY2VzcyBvYmplY3RcbiAgICBlbHNlIGlmICh0eXBlb2YgYXJncyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIC8vIENoZWNrIG9iamVjdCBpcyBlbXB0eVxuICAgICAgaWYgKGFyZ3MgJiYgT2JqZWN0LmtleXMoYXJncykubGVuZ3RoID09PSAwICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihhcmdzKSA9PT0gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgICAgICByZXR1cm4geyBhcmdzU3RyaW5nOiAne30nLCBzY2hlbWFBcmdzLCB1c2VkQXJncyB9O1xuICAgICAgfVxuICAgICAgLy8gUHJvY2VzcyBhbGwgb2JqZWN0IGVudHJpZXNcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGFyZ3MpKSB7XG4gICAgICAgIC8vIEluaXQgZGF0YSBmb3IgY3VycmVudCBlbnRyeVxuICAgICAgICBjb25zdCBjdXJyZW50S2V5ID0gcGFyZW50ICsga2V5O1xuICAgICAgICBzY2hlbWFBcmdzLnB1c2goY3VycmVudEtleSk7XG5cbiAgICAgICAgLy8gSWYgdGhlIGFsbG93ZWQga2V5IGhhbmRsaW5nIGlzIGVuYWJsZWQgYW5kIHRoZSBjdXJyZW50IGtleSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGxpc3Qgb2YgYWxsb3dlZCBrZXlzLFxuICAgICAgICAvLyB0aGUgY3VycmVudCBrZXkgd2lsbCBiZSBza2lwcGVkXG4gICAgICAgIGlmIChhbGxvd2VkICYmICFhbGxvd2VkW2tleV0pIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNraXAgdmFsdWUgaWYgbm90IGV4aXN0c1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWRkIGN1cnJlbnQga2V5IHRvIG1ldGFkYXRhXG4gICAgICAgIHVzZWRBcmdzLnB1c2goY3VycmVudEtleSk7XG5cbiAgICAgICAgLy8gUHJvY2VzcyBHcmFwaFFMRW51bVxuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBHcmFwaFFMRW51bSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGtleSArICc6JyArIHZhbHVlLnZhbHVlKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChrZXkgPT09ICdwYXNzd29yZCcpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChrZXkgKyAnOicgKyBzaGEyNTYodmFsdWUgYXMgc3RyaW5nKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIGFycmF5XG4gICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgICBrZXkgK1xuICAgICAgICAgICAgICAnOiBbJyArXG4gICAgICAgICAgICAgIHZhbHVlLm1hcChcbiAgICAgICAgICAgICAgICAoaXRlbSkgPT5cbiAgICAgICAgICAgICAgICAgIHRoaXMucHJlcGFyZUFyZ3VtZW50cyhpdGVtLCB7XG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWQ6IGFsbG93ZWRba2V5XSxcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IGxldmVsICsgMSxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBjdXJyZW50S2V5ICsgJy4nLFxuICAgICAgICAgICAgICAgICAgICBzY2hlbWFBcmdzLFxuICAgICAgICAgICAgICAgICAgICB1c2VkQXJncyxcbiAgICAgICAgICAgICAgICAgIH0pLmFyZ3NTdHJpbmdcbiAgICAgICAgICAgICAgKSArXG4gICAgICAgICAgICAgICddJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcmVwYXJlIGFkZGl0aW9uYWwgcmVzdWx0IHN0cmluZ1xuICAgICAgICBsZXQgYWRkaXRpb25hbFJlc3VsdCA9IGtleSArICc6ICc7XG5cbiAgICAgICAgLy8gVmFsdWUgaXMgYSBkYXRlIG9iamVjdFxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBEYXRlXScpIHtcbiAgICAgICAgICBhZGRpdGlvbmFsUmVzdWx0ICs9IGBcIlwiXCIkeyh2YWx1ZSBhcyBEYXRlKS50b1N0cmluZygpfVwiXCJcImA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWx1ZSBpcyBhIHN0cmluZ1xuICAgICAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgLy8gRW51bSAoZG9lc24ndCBuZWVkIHF1b3RhdGlvbiBtYXJrcylcbiAgICAgICAgICBpZiAoYWxsb3dlZFtrZXldLmlzRW51bSkge1xuICAgICAgICAgICAgYWRkaXRpb25hbFJlc3VsdCArPSB2YWx1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTdHJpbmdcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFkZGl0aW9uYWxSZXN1bHQgKz0gYFwiJHt2YWx1ZS5yZXBsYWNlKC9cIi9nLCAnXFxcXFwiJykucmVwbGFjZSgvXFxuL2csICdcXFxcbicpfVwiYDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWx1ZSBpcyBhIHNpbXBsZSBib29sZWFuIG9yIGEgbnVtYmVyXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBhZGRpdGlvbmFsUmVzdWx0ICs9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3RoZXJzXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGFkZGl0aW9uYWxSZXN1bHQgKz0gdGhpcy5wcmVwYXJlQXJndW1lbnRzKHZhbHVlLCB7XG4gICAgICAgICAgICBhbGxvd2VkOiBhbGxvd2VkW2tleV0sXG4gICAgICAgICAgICBsZXZlbDogbGV2ZWwgKyAxLFxuICAgICAgICAgICAgcGFyZW50OiBjdXJyZW50S2V5ICsgJy4nLFxuICAgICAgICAgICAgc2NoZW1hQXJncyxcbiAgICAgICAgICAgIHVzZWRBcmdzLFxuICAgICAgICAgIH0pLmFyZ3NTdHJpbmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQdXNoIGRlZXBlciBwYXJ0IGludG8gcmVzdWx0IGFycmF5XG4gICAgICAgIHJlc3VsdC5wdXNoKGFkZGl0aW9uYWxSZXN1bHQpO1xuICAgICAgfVxuXG4gICAgICAvLyBFbmNhcHN1bGF0aW9uIG9mIHRoZSBvYmplY3QgcmVzdWx0XG4gICAgICBpZiAocmVzdWx0Lmxlbmd0aCkge1xuICAgICAgICAvLyBDb21wbGV0ZSByZXN1bHQsIGVuY2Fwc3VsYXRlZCB2aWEgcm91bmQgYnJhY2tldHNcbiAgICAgICAgaWYgKGxldmVsID09PSAxKSB7XG4gICAgICAgICAgcmV0dXJuIHsgYXJnc1N0cmluZzogJygnICsgcmVzdWx0LmpvaW4oJywgJykgKyAnKScsIHNjaGVtYUFyZ3MsIHVzZWRBcmdzIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWVwZXIgcmVzdWx0IHBhcnQsIGVuY2Fwc3VsYXRlZCB2aWEgY3VybHkgYnJhY2tldHNcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHsgYXJnc1N0cmluZzogJ3snICsgcmVzdWx0LmpvaW4oJywgJykgKyAnfScsIHNjaGVtYUFyZ3MsIHVzZWRBcmdzIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQcmVwYXJlIGFuZCBwcm9jZXNzIG90aGVyIC8gdW5rbm93biB2YWx1ZXMgYXMgSlNPTlxuICAgIGVsc2Uge1xuICAgICAgcmV0dXJuIHsgYXJnc1N0cmluZzogSlNPTi5zdHJpbmdpZnkoYXJncyksIHNjaGVtYUFyZ3MsIHVzZWRBcmdzIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmUgZmllbGRzIGZvciBHcmFwaFFMIHJlcXVlc3RcbiAgICovXG4gIHByb3RlY3RlZCBwcmVwYXJlRmllbGRzKFxuICAgIGZpZWxkczogYW55LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGFsbG93ZWQ/OiBhbnk7XG4gICAgICBzY2hlbWFGaWVsZHM/OiBzdHJpbmdbXTtcbiAgICAgIHVzZWRGaWVsZHM/OiBzdHJpbmdbXTtcbiAgICAgIHBhcmVudD86IHN0cmluZztcbiAgICAgIHNwYWNlcz86IG51bWJlcjtcbiAgICAgIHRhYj86IG51bWJlcjtcbiAgICB9ID0ge31cbiAgKTogeyBzY2hlbWFGaWVsZHM6IHN0cmluZ1tdOyBmaWVsZHNTdHJpbmc6IHN0cmluZzsgdXNlZEZpZWxkczogc3RyaW5nW10gfSB7XG4gICAgLy8gQ29uZmlnXG4gICAgY29uc3QgeyBhbGxvd2VkLCBwYXJlbnQsIHNjaGVtYUZpZWxkcywgc3BhY2VzLCB0YWIsIHVzZWRGaWVsZHMgfSA9IHtcbiAgICAgIGFsbG93ZWQ6IG51bGwsXG4gICAgICBwYXJlbnQ6ICcnLFxuICAgICAgc2NoZW1hRmllbGRzOiBbXSxcbiAgICAgIHNwYWNlczogMixcbiAgICAgIHRhYjogMSxcbiAgICAgIHVzZWRGaWVsZHM6IFtdLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9O1xuXG4gICAgLy8gSW5pdCBmaWVsZHMgc3RyaW5nXG4gICAgbGV0IGZpZWxkc1N0cmluZyA9ICcnO1xuXG4gICAgLy8gQ2hlY2sgZmllbGRzXG4gICAgaWYgKCFmaWVsZHMpIHtcbiAgICAgIHJldHVybiB7IGZpZWxkc1N0cmluZywgc2NoZW1hRmllbGRzLCB1c2VkRmllbGRzIH07XG4gICAgfVxuXG4gICAgLy8gUHJvY2VzcyBzdHJpbmdcbiAgICBpZiAodHlwZW9mIGZpZWxkcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmIChcbiAgICAgICAgYWxsb3dlZCAmJlxuICAgICAgICAoKHR5cGVvZiBhbGxvd2VkID09PSAnc3RyaW5nJyAmJiBhbGxvd2VkICE9PSBmaWVsZHMpIHx8ICh0eXBlb2YgYWxsb3dlZCA9PT0gJ29iamVjdCcgJiYgIWFsbG93ZWRbZmllbGRzXSkpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHsgZmllbGRzU3RyaW5nLCBzY2hlbWFGaWVsZHMsIHVzZWRGaWVsZHMgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IGZpZWxkc1N0cmluZzogJ1xcbicgKyAnICcucmVwZWF0KHNwYWNlcykucmVwZWF0KHRhYikgKyBmaWVsZHMsIHNjaGVtYUZpZWxkcywgdXNlZEZpZWxkcyB9O1xuICAgIH1cblxuICAgIC8vIFByb2Nlc3MgYXJyYXlcbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGZpZWxkcykpIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBmaWVsZHMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGZpZWxkc1N0cmluZyA9XG4gICAgICAgICAgICBmaWVsZHNTdHJpbmcgK1xuICAgICAgICAgICAgdGhpcy5wcmVwYXJlRmllbGRzKGl0ZW0sIHtcbiAgICAgICAgICAgICAgYWxsb3dlZCxcbiAgICAgICAgICAgICAgcGFyZW50LFxuICAgICAgICAgICAgICBzcGFjZXMsXG4gICAgICAgICAgICAgIHNjaGVtYUZpZWxkcyxcbiAgICAgICAgICAgICAgdGFiOiB0YWIgKyAxLFxuICAgICAgICAgICAgICB1c2VkRmllbGRzLFxuICAgICAgICAgICAgfSkuZmllbGRzU3RyaW5nO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQYXRoID0gcGFyZW50ICsgaXRlbTtcbiAgICAgICAgc2NoZW1hRmllbGRzLnB1c2goY3VycmVudFBhdGgpO1xuICAgICAgICBpZiAoYWxsb3dlZCAmJiAhYWxsb3dlZD8uW2l0ZW1dKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdXNlZEZpZWxkcy5wdXNoKGN1cnJlbnRQYXRoKTtcbiAgICAgICAgZmllbGRzU3RyaW5nID1cbiAgICAgICAgICBmaWVsZHNTdHJpbmcgK1xuICAgICAgICAgIHRoaXMucHJlcGFyZUZpZWxkcyhpdGVtLCB7XG4gICAgICAgICAgICBhbGxvd2VkOlxuICAgICAgICAgICAgICB0eXBlb2YgYWxsb3dlZD8uW2l0ZW1dID09PSAnb2JqZWN0JyAmJiAhKGFsbG93ZWQ/LltpdGVtXSBpbnN0YW5jZW9mIEdyYXBoUUxUeXBlKSA/IGFsbG93ZWQ/LltpdGVtXSA6IGl0ZW0sXG4gICAgICAgICAgICBwYXJlbnQ6IGN1cnJlbnRQYXRoICsgJy4nLFxuICAgICAgICAgICAgc3BhY2VzLFxuICAgICAgICAgICAgc2NoZW1hRmllbGRzLFxuICAgICAgICAgICAgdGFiOiB0YWIgKyAxLFxuICAgICAgICAgICAgdXNlZEZpZWxkcyxcbiAgICAgICAgICB9KS5maWVsZHNTdHJpbmc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUHJvY2VzcyBvYmplY3RcbiAgICBlbHNlIGlmICh0eXBlb2YgZmllbGRzID09PSAnb2JqZWN0Jykge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKGZpZWxkcykpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFBhdGggPSBwYXJlbnQgKyBrZXk7XG4gICAgICAgIHNjaGVtYUZpZWxkcy5wdXNoKGN1cnJlbnRQYXRoKTtcbiAgICAgICAgaWYgKGFsbG93ZWQgJiYgIWFsbG93ZWRba2V5XSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHVzZWRGaWVsZHMucHVzaChjdXJyZW50UGF0aCk7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsICE9PSAnb2JqZWN0JyB8fCAhT2JqZWN0LmtleXModmFsKS5sZW5ndGgpIHtcbiAgICAgICAgICBmaWVsZHNTdHJpbmcgPSBmaWVsZHNTdHJpbmcgKyAnXFxuJyArICcgJy5yZXBlYXQoc3BhY2VzKS5yZXBlYXQodGFiKSArIGtleTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWVsZHNTdHJpbmcgPVxuICAgICAgICAgICAgZmllbGRzU3RyaW5nICtcbiAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICcgJy5yZXBlYXQoc3BhY2VzKS5yZXBlYXQodGFiKSArXG4gICAgICAgICAgICBrZXkgK1xuICAgICAgICAgICAgJyAnICtcbiAgICAgICAgICAgICd7JyArXG4gICAgICAgICAgICB0aGlzLnByZXBhcmVGaWVsZHModmFsLCB7XG4gICAgICAgICAgICAgIGFsbG93ZWQ6XG4gICAgICAgICAgICAgICAgdHlwZW9mIGFsbG93ZWQ/LltrZXldID09PSAnb2JqZWN0JyAmJiAhKGFsbG93ZWQ/LltrZXldIGluc3RhbmNlb2YgR3JhcGhRTFR5cGUpID8gYWxsb3dlZD8uW2tleV0gOiBrZXksXG4gICAgICAgICAgICAgIHBhcmVudDogY3VycmVudFBhdGggKyAnLicsXG4gICAgICAgICAgICAgIHNwYWNlcyxcbiAgICAgICAgICAgICAgc2NoZW1hRmllbGRzLFxuICAgICAgICAgICAgICB0YWI6IHRhYiArIDEsXG4gICAgICAgICAgICAgIHVzZWRGaWVsZHMsXG4gICAgICAgICAgICB9KS5maWVsZHNTdHJpbmcgK1xuICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgJyAnLnJlcGVhdChzcGFjZXMpLnJlcGVhdCh0YWIpICtcbiAgICAgICAgICAgICd9JztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybiByZXN1bHRcbiAgICByZXR1cm4geyBmaWVsZHNTdHJpbmcsIHNjaGVtYUZpZWxkcywgdXNlZEZpZWxkcyB9O1xuICB9XG59XG4iXX0=