@tsi-developpement/tsi-shared-ui 1.8.5 → 1.8.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/esm2022/lib/pipes/modal-label.pipe.mjs +4 -1
  2. package/esm2022/lib/services/base/crud-base.service.mjs +3 -14
  3. package/esm2022/lib/services/dynamic-form/colonne-personnalisee.service.mjs +1 -4
  4. package/esm2022/lib/services/form/form-state.service.mjs +4 -1
  5. package/esm2022/lib/tsi-base/components/tsi-form-base/tsi-form-base.component.mjs +20 -22
  6. package/esm2022/lib/tsi-components/create-or-edit-entity-informations/create-or-edit-entity-informations.component.mjs +1 -1
  7. package/esm2022/lib/tsi-components/create-or-edit-modele-import/create-or-edit-modele-import.component.mjs +1 -1
  8. package/esm2022/lib/tsi-components/manage-reporting/add-report-popup/add-report-popup.component.mjs +1 -1
  9. package/esm2022/lib/tsi-components/output-components/tsi-generic-grid/tsi-generic-grid.component.mjs +2 -2
  10. package/esm2022/lib/tsi-components/tsi-change-password/tsi-change-password.component.mjs +1 -1
  11. package/esm2022/lib/tsi-components/tsi-dynamic-form/create-or-edit-dynamic-form/create-or-edit-dynamic-form.component.mjs +1 -1
  12. package/esm2022/lib/tsi-components/tsi-form/tsi-form.component.mjs +31 -23
  13. package/esm2022/lib/tsi-components/tsi-generic-form/tsi-generic-form.component.mjs +1 -1
  14. package/esm2022/lib/tsi-components/tsi-modal-footer/tsi-modal-footer.component.mjs +14 -3
  15. package/esm2022/lib/tsi-components/tsi-notes-createoredit/tsi-notes.component.mjs +1 -1
  16. package/esm2022/lib/tsi-components/tsi-upload-fiche/tsi-upload-fiche.component.mjs +1 -1
  17. package/fesm2022/tsi-developpement-tsi-shared-ui.mjs +80 -69
  18. package/fesm2022/tsi-developpement-tsi-shared-ui.mjs.map +1 -1
  19. package/lib/consts/app-providers.d.ts +1 -1
  20. package/lib/services/base/crud-base.service.d.ts +0 -2
  21. package/lib/services/dynamic-form/colonne-personnalisee.service.d.ts +1 -3
  22. package/lib/services/form/form-state.service.d.ts +3 -0
  23. package/lib/tsi-base/components/tsi-form-base/tsi-form-base.component.d.ts +1 -3
  24. package/lib/tsi-components/tsi-form/tsi-form.component.d.ts +4 -1
  25. package/lib/tsi-components/tsi-modal-footer/tsi-modal-footer.component.d.ts +5 -1
  26. package/package.json +1 -1
@@ -22,6 +22,9 @@ export class ModalLabelPipe {
22
22
  ' ' +
23
23
  this._localizePipe.transform(label));
24
24
  }
25
+ if (mode == Modes.duplicate) {
26
+ return this._localizePipe.transform("Duplicate") + " " + this._localizePipe.transform(label);
27
+ }
25
28
  }
26
29
  throw new Error('No mode have been set to ModalLabelPipe');
27
30
  }
@@ -34,4 +37,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
34
37
  name: 'modalLabel'
35
38
  }]
36
39
  }], ctorParameters: () => [{ type: i1.LocalizePipe }] });
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtbGFiZWwucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi9waXBlcy9tb2RhbC1sYWJlbC5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBRXBELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7O0FBSzFELE1BQU0sT0FBTyxjQUFjO0lBRXpCLFlBQW9CLGFBQTJCO1FBQTNCLGtCQUFhLEdBQWIsYUFBYSxDQUFjO0lBQUksQ0FBQztJQUVwRCxTQUFTLENBQUMsS0FBYyxFQUFFLElBQWEsRUFBRSxLQUFjO1FBQ3JELElBQUcsS0FBSyxJQUFJLFNBQVMsRUFBQyxDQUFDO1lBRXZCLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDdkIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUYsQ0FBQztZQUNELElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDekIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUYsQ0FBQztZQUNELElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDekIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUYsQ0FBQztZQUNELElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDMUIsT0FBTyxDQUNMLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQztvQkFDdkMsR0FBRztvQkFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FDcEMsQ0FBQztZQUNKLENBQUM7UUFDRCxDQUFDO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO0lBQzdELENBQUM7K0dBekJVLGNBQWM7NkdBQWQsY0FBYzs7NEZBQWQsY0FBYztrQkFIMUIsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsWUFBWTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IExvY2FsaXplUGlwZSB9IGZyb20gJy4vbG9jYWxpemUucGlwZSc7XHJcbmltcG9ydCB7IE1vZGVzIH0gZnJvbSAnLi4vZW51bXMvY29tcG9uZW50LXVzZS1tb2Rlcy1lbnVtJztcclxuXHJcbkBQaXBlKHtcclxuICBuYW1lOiAnbW9kYWxMYWJlbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIE1vZGFsTGFiZWxQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2xvY2FsaXplUGlwZTogTG9jYWxpemVQaXBlKSB7IH1cclxuXHJcbiAgdHJhbnNmb3JtKHZhbHVlOiB1bmtub3duLCBtb2RlPzogc3RyaW5nLCBsYWJlbD86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZihsYWJlbCAhPSB1bmRlZmluZWQpe1xyXG4gICAgICBcclxuICAgIGlmIChtb2RlID09IE1vZGVzLmVkaXQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsaXplUGlwZS50cmFuc2Zvcm0oXCJFZGl0XCIpICsgXCIgXCIgKyB0aGlzLl9sb2NhbGl6ZVBpcGUudHJhbnNmb3JtKGxhYmVsKTtcclxuICAgIH1cclxuICAgIGlmIChtb2RlID09IE1vZGVzLmNyZWF0ZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fbG9jYWxpemVQaXBlLnRyYW5zZm9ybShcIkNyZWF0ZVwiKSArIFwiIFwiICsgdGhpcy5fbG9jYWxpemVQaXBlLnRyYW5zZm9ybShsYWJlbCk7XHJcbiAgICB9XHJcbiAgICBpZiAobW9kZSA9PSBNb2Rlcy5kZWxldGUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsaXplUGlwZS50cmFuc2Zvcm0oXCJEZWxldGVcIikgKyBcIiBcIiArIHRoaXMuX2xvY2FsaXplUGlwZS50cmFuc2Zvcm0obGFiZWwpO1xyXG4gICAgfVxyXG4gICAgaWYgKG1vZGUgPT0gTW9kZXMuY29uc3VsdCkge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIHRoaXMuX2xvY2FsaXplUGlwZS50cmFuc2Zvcm0oJ0NvbnN1bHQnKSArXHJcbiAgICAgICAgJyAnICtcclxuICAgICAgICB0aGlzLl9sb2NhbGl6ZVBpcGUudHJhbnNmb3JtKGxhYmVsKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgfVxyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBtb2RlIGhhdmUgYmVlbiBzZXQgdG8gTW9kYWxMYWJlbFBpcGUnKTtcclxuICB9XHJcbn1cclxuIl19
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtbGFiZWwucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi9waXBlcy9tb2RhbC1sYWJlbC5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBRXBELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7O0FBSzFELE1BQU0sT0FBTyxjQUFjO0lBRXpCLFlBQW9CLGFBQTJCO1FBQTNCLGtCQUFhLEdBQWIsYUFBYSxDQUFjO0lBQUksQ0FBQztJQUVwRCxTQUFTLENBQUMsS0FBYyxFQUFFLElBQWEsRUFBRSxLQUFjO1FBQ3JELElBQUcsS0FBSyxJQUFJLFNBQVMsRUFBQyxDQUFDO1lBRXZCLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDdkIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUYsQ0FBQztZQUNELElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDekIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUYsQ0FBQztZQUNELElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDekIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUYsQ0FBQztZQUNELElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDMUIsT0FBTyxDQUNMLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQztvQkFDdkMsR0FBRztvQkFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FDcEMsQ0FBQztZQUNKLENBQUM7WUFDRCxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQzVCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9GLENBQUM7UUFDRCxDQUFDO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO0lBQzdELENBQUM7K0dBNUJVLGNBQWM7NkdBQWQsY0FBYzs7NEZBQWQsY0FBYztrQkFIMUIsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsWUFBWTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IExvY2FsaXplUGlwZSB9IGZyb20gJy4vbG9jYWxpemUucGlwZSc7XHJcbmltcG9ydCB7IE1vZGVzIH0gZnJvbSAnLi4vZW51bXMvY29tcG9uZW50LXVzZS1tb2Rlcy1lbnVtJztcclxuXHJcbkBQaXBlKHtcclxuICBuYW1lOiAnbW9kYWxMYWJlbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIE1vZGFsTGFiZWxQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2xvY2FsaXplUGlwZTogTG9jYWxpemVQaXBlKSB7IH1cclxuXHJcbiAgdHJhbnNmb3JtKHZhbHVlOiB1bmtub3duLCBtb2RlPzogc3RyaW5nLCBsYWJlbD86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZihsYWJlbCAhPSB1bmRlZmluZWQpe1xyXG4gICAgICBcclxuICAgIGlmIChtb2RlID09IE1vZGVzLmVkaXQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsaXplUGlwZS50cmFuc2Zvcm0oXCJFZGl0XCIpICsgXCIgXCIgKyB0aGlzLl9sb2NhbGl6ZVBpcGUudHJhbnNmb3JtKGxhYmVsKTtcclxuICAgIH1cclxuICAgIGlmIChtb2RlID09IE1vZGVzLmNyZWF0ZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fbG9jYWxpemVQaXBlLnRyYW5zZm9ybShcIkNyZWF0ZVwiKSArIFwiIFwiICsgdGhpcy5fbG9jYWxpemVQaXBlLnRyYW5zZm9ybShsYWJlbCk7XHJcbiAgICB9XHJcbiAgICBpZiAobW9kZSA9PSBNb2Rlcy5kZWxldGUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsaXplUGlwZS50cmFuc2Zvcm0oXCJEZWxldGVcIikgKyBcIiBcIiArIHRoaXMuX2xvY2FsaXplUGlwZS50cmFuc2Zvcm0obGFiZWwpO1xyXG4gICAgfVxyXG4gICAgaWYgKG1vZGUgPT0gTW9kZXMuY29uc3VsdCkge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIHRoaXMuX2xvY2FsaXplUGlwZS50cmFuc2Zvcm0oJ0NvbnN1bHQnKSArXHJcbiAgICAgICAgJyAnICtcclxuICAgICAgICB0aGlzLl9sb2NhbGl6ZVBpcGUudHJhbnNmb3JtKGxhYmVsKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKG1vZGUgPT0gTW9kZXMuZHVwbGljYXRlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9sb2NhbGl6ZVBpcGUudHJhbnNmb3JtKFwiRHVwbGljYXRlXCIpICsgXCIgXCIgKyB0aGlzLl9sb2NhbGl6ZVBpcGUudHJhbnNmb3JtKGxhYmVsKTtcclxuICAgIH1cclxuICAgIH1cclxuICAgIHRocm93IG5ldyBFcnJvcignTm8gbW9kZSBoYXZlIGJlZW4gc2V0IHRvIE1vZGFsTGFiZWxQaXBlJyk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -1,15 +1,11 @@
1
1
  import { HttpHeaders } from '@angular/common/http';
2
- import { tap } from 'rxjs';
3
2
  import { Segment } from '../../end-points';
4
3
  import { requestHeaderNames } from '../../consts/tsi-consts';
5
- import { inject } from '@angular/core';
6
- import { ColonnePersonnaliseeService } from '../dynamic-form/colonne-personnalisee.service';
7
4
  export class CrudBaseService {
8
5
  constructor(_httpClient, endpoint) {
9
6
  this._httpClient = _httpClient;
10
7
  this.endpoint = endpoint;
11
8
  this.isDuplicate = false;
12
- this.colonnePersonnaliseeService = inject(ColonnePersonnaliseeService);
13
9
  }
14
10
  getAll() {
15
11
  return this._httpClient.get(`${Segment.base}/${this.endpoint}`);
@@ -20,17 +16,10 @@ export class CrudBaseService {
20
16
  return this._httpClient.get(`${Segment.base}/${this.endpoint}/${id}`, { headers });
21
17
  }
22
18
  create(model) {
23
- return this._httpClient.post(`${Segment.base}/${this.endpoint}`, model)
24
- .pipe(tap(response => {
25
- const uid = response?.uid;
26
- this.colonnePersonnaliseeService.dataSaved$.next(uid);
27
- }));
19
+ return this._httpClient.post(`${Segment.base}/${this.endpoint}`, model);
28
20
  }
29
21
  update(model, id) {
30
- return this._httpClient.put(`${Segment.base}/${this.endpoint}/${id}`, model)
31
- .pipe(tap(response => {
32
- this.colonnePersonnaliseeService.dataSaved$.next(id);
33
- }));
22
+ return this._httpClient.put(`${Segment.base}/${this.endpoint}/${id}`, model);
34
23
  }
35
24
  delete(id) {
36
25
  return this._httpClient.delete(`${Segment.base}/${this.endpoint}/${id}`);
@@ -46,4 +35,4 @@ export const Segments = {
46
35
  /*** Actions ***/
47
36
  getAllPaged: 'getallpaged',
48
37
  };
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC1iYXNlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvc2VydmljZXMvYmFzZS9jcnVkLWJhc2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0QsT0FBTyxFQUFjLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFM0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUc1RixNQUFNLE9BQWdCLGVBQWU7SUFNbkMsWUFBc0IsV0FBdUIsRUFDakMsUUFBZ0I7UUFETixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUNqQyxhQUFRLEdBQVIsUUFBUSxDQUFRO1FBTHJCLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBRXBDLGdDQUEyQixHQUFHLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxDQUFBO0lBR2pDLENBQUM7SUFFakMsTUFBTTtRQUNKLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQWMsR0FBRyxPQUFPLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFFRCxPQUFPLENBQUMsRUFBVTtRQUNoQixJQUFJLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2hDLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pGLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzVGLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBYztRQUNuQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsS0FBSyxDQUFDO2FBQ3pFLElBQUksQ0FDSCxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDYixNQUFNLEdBQUcsR0FBRyxRQUFRLEVBQUUsR0FBRyxDQUFDO1lBQzFCLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ3ZELENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQWMsRUFBRSxFQUFVO1FBQy9CLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDO2FBQzlFLElBQUksQ0FDSCxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDYixJQUFJLENBQUMsMkJBQTJCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUN0RCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ04sQ0FBQztJQUNELE1BQU0sQ0FBQyxFQUFVO1FBQ2YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBb0I7UUFDOUIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBNEIsR0FBRyxPQUFPLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLFdBQVcsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzdILENBQUM7SUFHRCxpQkFBaUIsQ0FBQyxLQUFjO1FBQzlCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDMUYsQ0FBQztDQUNGO0FBQ0QsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHO0lBRXRCLG9CQUFvQjtJQUNwQixXQUFXLEVBQUUsYUFBYTtDQUUzQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIHRhcCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTZWdtZW50IH0gZnJvbSAnLi4vLi4vZW5kLXBvaW50cyc7XHJcbmltcG9ydCB7IElQYWdlZFJlcXVlc3QsIElQYWdlZFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IHJlcXVlc3RIZWFkZXJOYW1lcyB9IGZyb20gJy4uLy4uL2NvbnN0cy90c2ktY29uc3RzJztcclxuaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbG9ubmVQZXJzb25uYWxpc2VlU2VydmljZSB9IGZyb20gJy4uL2R5bmFtaWMtZm9ybS9jb2xvbm5lLXBlcnNvbm5hbGlzZWUuc2VydmljZSc7XHJcblxyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENydWRCYXNlU2VydmljZTxUQ3JlYXRlLCBUVXBkYXRlLCBUQnlJZCwgVEFsbFBhZ2VkLCBUQWxsID0gVEFsbFBhZ2VkPiB7XHJcblxyXG4gIHB1YmxpYyBpc0R1cGxpY2F0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb2xvbm5lUGVyc29ubmFsaXNlZVNlcnZpY2UgPSBpbmplY3QoQ29sb25uZVBlcnNvbm5hbGlzZWVTZXJ2aWNlKVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX2h0dHBDbGllbnQ6IEh0dHBDbGllbnQsXHJcbiAgICBwcm90ZWN0ZWQgZW5kcG9pbnQ6IHN0cmluZykgeyB9XHJcblxyXG4gIGdldEFsbCgpOiBPYnNlcnZhYmxlPEFycmF5PFRBbGw+PiB7XHJcbiAgICByZXR1cm4gdGhpcy5faHR0cENsaWVudC5nZXQ8QXJyYXk8VEFsbD4+KGAke1NlZ21lbnQuYmFzZX0vJHt0aGlzLmVuZHBvaW50fWApO1xyXG4gIH1cclxuXHJcbiAgZ2V0QnlJZChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxUQnlJZD4ge1xyXG4gICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcclxuICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldChyZXF1ZXN0SGVhZGVyTmFtZXMuZHVwbGljYXRlLCB0aGlzLmlzRHVwbGljYXRlID8gXCJ0cnVlXCIgOiBcImZhbHNlXCIpO1xyXG4gICAgcmV0dXJuIHRoaXMuX2h0dHBDbGllbnQuZ2V0PFRCeUlkPihgJHtTZWdtZW50LmJhc2V9LyR7dGhpcy5lbmRwb2ludH0vJHtpZH1gLCB7IGhlYWRlcnMgfSk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGUobW9kZWw6IFRDcmVhdGUpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2h0dHBDbGllbnQucG9zdDxhbnk+KGAke1NlZ21lbnQuYmFzZX0vJHt0aGlzLmVuZHBvaW50fWAsIG1vZGVsKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YXAocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgY29uc3QgdWlkID0gcmVzcG9uc2U/LnVpZDtcclxuICAgICAgICAgIHRoaXMuY29sb25uZVBlcnNvbm5hbGlzZWVTZXJ2aWNlLmRhdGFTYXZlZCQubmV4dCh1aWQpXHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZShtb2RlbDogVFVwZGF0ZSwgaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5faHR0cENsaWVudC5wdXQ8YW55PihgJHtTZWdtZW50LmJhc2V9LyR7dGhpcy5lbmRwb2ludH0vJHtpZH1gLCBtb2RlbClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgIHRoaXMuY29sb25uZVBlcnNvbm5hbGlzZWVTZXJ2aWNlLmRhdGFTYXZlZCQubmV4dChpZClcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuICBkZWxldGUoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5faHR0cENsaWVudC5kZWxldGUoYCR7U2VnbWVudC5iYXNlfS8ke3RoaXMuZW5kcG9pbnR9LyR7aWR9YCk7XHJcbiAgfVxyXG5cclxuICBnZXRBbGxQYWdlZChtb2RlbDogSVBhZ2VkUmVxdWVzdCk6IE9ic2VydmFibGU8SVBhZ2VkUmVzcG9uc2U8VEFsbFBhZ2VkPj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2h0dHBDbGllbnQucG9zdDxJUGFnZWRSZXNwb25zZTxUQWxsUGFnZWQ+PihgJHtTZWdtZW50LmJhc2V9LyR7dGhpcy5lbmRwb2ludH0vJHtTZWdtZW50cy5nZXRBbGxQYWdlZH1gLCBtb2RlbCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgdXBkYXRlT2xkRW5kcG9pbnQobW9kZWw6IFRVcGRhdGUpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2h0dHBDbGllbnQucHV0PGFueT4oYCR7U2VnbWVudC5iYXNlfS8ke3RoaXMuZW5kcG9pbnR9LyR7J3VwZGF0ZSd9YCwgbW9kZWwpO1xyXG4gIH1cclxufVxyXG5leHBvcnQgY29uc3QgU2VnbWVudHMgPSB7XHJcblxyXG4gIC8qKiogICAgQWN0aW9ucyAqKiovXHJcbiAgZ2V0QWxsUGFnZWQ6ICdnZXRhbGxwYWdlZCcsXHJcblxyXG59Il19
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC1iYXNlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvc2VydmljZXMvYmFzZS9jcnVkLWJhc2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFL0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRzdELE1BQU0sT0FBZ0IsZUFBZTtJQUluQyxZQUFzQixXQUF1QixFQUNqQyxRQUFnQjtRQUROLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQ2pDLGFBQVEsR0FBUixRQUFRLENBQVE7UUFIckIsZ0JBQVcsR0FBWSxLQUFLLENBQUM7SUFHSixDQUFDO0lBRWpDLE1BQU07UUFDSixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFjLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRUQsT0FBTyxDQUFDLEVBQVU7UUFDaEIsSUFBSSxPQUFPLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNoQyxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6RixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUM1RixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQWM7UUFDbkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBYyxFQUFFLEVBQVU7UUFDL0IsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBQ0QsTUFBTSxDQUFDLEVBQVU7UUFDZixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFvQjtRQUM5QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUE0QixHQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDN0gsQ0FBQztJQUdELGlCQUFpQixDQUFDLEtBQWM7UUFDOUIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxRQUFRLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMxRixDQUFDO0NBQ0Y7QUFDRCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUc7SUFFdEIsb0JBQW9CO0lBQ3BCLFdBQVcsRUFBRSxhQUFhO0NBRTNCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGFwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFNlZ21lbnQgfSBmcm9tICcuLi8uLi9lbmQtcG9pbnRzJztcclxuaW1wb3J0IHsgSVBhZ2VkUmVxdWVzdCwgSVBhZ2VkUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgcmVxdWVzdEhlYWRlck5hbWVzIH0gZnJvbSAnLi4vLi4vY29uc3RzL3RzaS1jb25zdHMnO1xyXG5cclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDcnVkQmFzZVNlcnZpY2U8VENyZWF0ZSwgVFVwZGF0ZSwgVEJ5SWQsIFRBbGxQYWdlZCwgVEFsbCA9IFRBbGxQYWdlZD4ge1xyXG5cclxuICBwdWJsaWMgaXNEdXBsaWNhdGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIF9odHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxyXG4gICAgcHJvdGVjdGVkIGVuZHBvaW50OiBzdHJpbmcpIHsgfVxyXG5cclxuICBnZXRBbGwoKTogT2JzZXJ2YWJsZTxBcnJheTxUQWxsPj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2h0dHBDbGllbnQuZ2V0PEFycmF5PFRBbGw+PihgJHtTZWdtZW50LmJhc2V9LyR7dGhpcy5lbmRwb2ludH1gKTtcclxuICB9XHJcblxyXG4gIGdldEJ5SWQoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8VEJ5SWQ+IHtcclxuICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XHJcbiAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQocmVxdWVzdEhlYWRlck5hbWVzLmR1cGxpY2F0ZSwgdGhpcy5pc0R1cGxpY2F0ZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiKTtcclxuICAgIHJldHVybiB0aGlzLl9odHRwQ2xpZW50LmdldDxUQnlJZD4oYCR7U2VnbWVudC5iYXNlfS8ke3RoaXMuZW5kcG9pbnR9LyR7aWR9YCwgeyBoZWFkZXJzIH0pO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlKG1vZGVsOiBUQ3JlYXRlKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLl9odHRwQ2xpZW50LnBvc3Q8YW55PihgJHtTZWdtZW50LmJhc2V9LyR7dGhpcy5lbmRwb2ludH1gLCBtb2RlbCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUobW9kZWw6IFRVcGRhdGUsIGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2h0dHBDbGllbnQucHV0PGFueT4oYCR7U2VnbWVudC5iYXNlfS8ke3RoaXMuZW5kcG9pbnR9LyR7aWR9YCwgbW9kZWwpO1xyXG4gIH1cclxuICBkZWxldGUoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5faHR0cENsaWVudC5kZWxldGUoYCR7U2VnbWVudC5iYXNlfS8ke3RoaXMuZW5kcG9pbnR9LyR7aWR9YCk7XHJcbiAgfVxyXG5cclxuICBnZXRBbGxQYWdlZChtb2RlbDogSVBhZ2VkUmVxdWVzdCk6IE9ic2VydmFibGU8SVBhZ2VkUmVzcG9uc2U8VEFsbFBhZ2VkPj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2h0dHBDbGllbnQucG9zdDxJUGFnZWRSZXNwb25zZTxUQWxsUGFnZWQ+PihgJHtTZWdtZW50LmJhc2V9LyR7dGhpcy5lbmRwb2ludH0vJHtTZWdtZW50cy5nZXRBbGxQYWdlZH1gLCBtb2RlbCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgdXBkYXRlT2xkRW5kcG9pbnQobW9kZWw6IFRVcGRhdGUpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2h0dHBDbGllbnQucHV0PGFueT4oYCR7U2VnbWVudC5iYXNlfS8ke3RoaXMuZW5kcG9pbnR9LyR7J3VwZGF0ZSd9YCwgbW9kZWwpO1xyXG4gIH1cclxufVxyXG5leHBvcnQgY29uc3QgU2VnbWVudHMgPSB7XHJcblxyXG4gIC8qKiogICAgQWN0aW9ucyAqKiovXHJcbiAgZ2V0QWxsUGFnZWQ6ICdnZXRhbGxwYWdlZCcsXHJcblxyXG59Il19
@@ -1,13 +1,10 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { AdministrationEndpoints } from '../../end-points';
3
- import { Subject } from 'rxjs';
4
3
  import * as i0 from "@angular/core";
5
4
  import * as i1 from "@angular/common/http";
6
5
  export class ColonnePersonnaliseeService {
7
6
  constructor(_httpClient) {
8
7
  this._httpClient = _httpClient;
9
- this.dataSaved$ = new Subject();
10
- this.dataSavedObservable = this.dataSaved$.asObservable();
11
8
  }
12
9
  getColonnesPersonnalisee(businessClass, occurrence) {
13
10
  return this._httpClient.get(AdministrationEndpoints.getcolonnesPersonnalisee(businessClass, occurrence));
@@ -24,4 +21,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
24
21
  providedIn: 'root'
25
22
  }]
26
23
  }], ctorParameters: () => [{ type: i1.HttpClient }] });
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb25uZS1wZXJzb25uYWxpc2VlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvc2VydmljZXMvZHluYW1pYy1mb3JtL2NvbG9ubmUtcGVyc29ubmFsaXNlZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBVSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0QsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7O0FBSzNDLE1BQU0sT0FBTywyQkFBMkI7SUFLdEMsWUFBc0IsV0FBdUI7UUFBdkIsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFIN0MsZUFBVSxHQUFnQyxJQUFJLE9BQU8sRUFBc0IsQ0FBQztRQUU1RSx3QkFBbUIsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFBO0lBQ0gsQ0FBQztJQUczQyx3QkFBd0IsQ0FBQyxhQUFxQixFQUFFLFVBQW1CO1FBQ3hFLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQXdDLHVCQUF1QixDQUFDLHdCQUF3QixDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ2xKLENBQUM7SUFFRCx5QkFBeUIsQ0FBQyw0QkFBd0Q7UUFDaEYsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBTSx1QkFBdUIsQ0FBQyw0QkFBNEIsRUFBRSxFQUN0Riw0QkFBNEIsQ0FBQyxDQUFBO0lBQ2pDLENBQUM7K0dBZlUsMkJBQTJCO21IQUEzQiwyQkFBMkIsY0FGMUIsTUFBTTs7NEZBRVAsMkJBQTJCO2tCQUh2QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb2xvbm5lUGVyc29ubmFsaXNlZURhdGEsIENvbG9ubmVQZXJzb25uYWxpc2VlR3JvdXBlZFJlc3BvbnNlLCB9IGZyb20gJy4uLy4uL21vZGVscy9keW5hbWljLWZvcm0vY29sb25uZS1wZXJzb25uYWxpc2VlJztcclxuaW1wb3J0IHsgQWRtaW5pc3RyYXRpb25FbmRwb2ludHMgfSBmcm9tICcuLi8uLi9lbmQtcG9pbnRzJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29sb25uZVBlcnNvbm5hbGlzZWVTZXJ2aWNlIHtcclxuXHJcbiAgZGF0YVNhdmVkJDogU3ViamVjdDxzdHJpbmcgfCB1bmRlZmluZWQ+ID0gbmV3IFN1YmplY3Q8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xyXG5cclxuICBkYXRhU2F2ZWRPYnNlcnZhYmxlID0gdGhpcy5kYXRhU2F2ZWQkLmFzT2JzZXJ2YWJsZSgpXHJcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIF9odHRwQ2xpZW50OiBIdHRwQ2xpZW50KSB7IH1cclxuXHJcblxyXG4gIHB1YmxpYyBnZXRDb2xvbm5lc1BlcnNvbm5hbGlzZWUoYnVzaW5lc3NDbGFzczogc3RyaW5nLCBvY2N1cnJlbmNlPzogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faHR0cENsaWVudC5nZXQ8Q29sb25uZVBlcnNvbm5hbGlzZWVHcm91cGVkUmVzcG9uc2VbXT4oQWRtaW5pc3RyYXRpb25FbmRwb2ludHMuZ2V0Y29sb25uZXNQZXJzb25uYWxpc2VlKGJ1c2luZXNzQ2xhc3MsIG9jY3VycmVuY2UpKTtcclxuICB9XHJcblxyXG4gIGFkZE9yVXBkYXRlRm9ybXVsYWlyZURhdGEoY29sb25uZVBlcnNvbm5hbGlzZWVEYXRhTGlzdDogQ29sb25uZVBlcnNvbm5hbGlzZWVEYXRhW10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2h0dHBDbGllbnQucG9zdDxhbnk+KEFkbWluaXN0cmF0aW9uRW5kcG9pbnRzLmNyZWF0ZU9yVXBkYXRlRm9ybXVsYWlyZURhdGEoKSxcclxuICAgICAgY29sb25uZVBlcnNvbm5hbGlzZWVEYXRhTGlzdClcclxuICB9XHJcbn1cclxuIl19
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb25uZS1wZXJzb25uYWxpc2VlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvc2VydmljZXMvZHluYW1pYy1mb3JtL2NvbG9ubmUtcGVyc29ubmFsaXNlZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBVSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7OztBQU0zRCxNQUFNLE9BQU8sMkJBQTJCO0lBR3RDLFlBQXNCLFdBQXVCO1FBQXZCLGdCQUFXLEdBQVgsV0FBVyxDQUFZO0lBQUksQ0FBQztJQUczQyx3QkFBd0IsQ0FBQyxhQUFxQixFQUFFLFVBQW1CO1FBQ3hFLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQXdDLHVCQUF1QixDQUFDLHdCQUF3QixDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ2xKLENBQUM7SUFFRCx5QkFBeUIsQ0FBQyw0QkFBd0Q7UUFDaEYsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBTSx1QkFBdUIsQ0FBQyw0QkFBNEIsRUFBRSxFQUN0Riw0QkFBNEIsQ0FBQyxDQUFBO0lBQ2pDLENBQUM7K0dBYlUsMkJBQTJCO21IQUEzQiwyQkFBMkIsY0FGMUIsTUFBTTs7NEZBRVAsMkJBQTJCO2tCQUh2QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb2xvbm5lUGVyc29ubmFsaXNlZURhdGEsIENvbG9ubmVQZXJzb25uYWxpc2VlR3JvdXBlZFJlc3BvbnNlLCB9IGZyb20gJy4uLy4uL21vZGVscy9keW5hbWljLWZvcm0vY29sb25uZS1wZXJzb25uYWxpc2VlJztcclxuaW1wb3J0IHsgQWRtaW5pc3RyYXRpb25FbmRwb2ludHMgfSBmcm9tICcuLi8uLi9lbmQtcG9pbnRzJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29sb25uZVBlcnNvbm5hbGlzZWVTZXJ2aWNlIHtcclxuXHJcbiAgXHJcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIF9odHRwQ2xpZW50OiBIdHRwQ2xpZW50KSB7IH1cclxuXHJcblxyXG4gIHB1YmxpYyBnZXRDb2xvbm5lc1BlcnNvbm5hbGlzZWUoYnVzaW5lc3NDbGFzczogc3RyaW5nLCBvY2N1cnJlbmNlPzogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faHR0cENsaWVudC5nZXQ8Q29sb25uZVBlcnNvbm5hbGlzZWVHcm91cGVkUmVzcG9uc2VbXT4oQWRtaW5pc3RyYXRpb25FbmRwb2ludHMuZ2V0Y29sb25uZXNQZXJzb25uYWxpc2VlKGJ1c2luZXNzQ2xhc3MsIG9jY3VycmVuY2UpKTtcclxuICB9XHJcblxyXG4gIGFkZE9yVXBkYXRlRm9ybXVsYWlyZURhdGEoY29sb25uZVBlcnNvbm5hbGlzZWVEYXRhTGlzdDogQ29sb25uZVBlcnNvbm5hbGlzZWVEYXRhW10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2h0dHBDbGllbnQucG9zdDxhbnk+KEFkbWluaXN0cmF0aW9uRW5kcG9pbnRzLmNyZWF0ZU9yVXBkYXRlRm9ybXVsYWlyZURhdGEoKSxcclxuICAgICAgY29sb25uZVBlcnNvbm5hbGlzZWVEYXRhTGlzdClcclxuICB9XHJcbn1cclxuIl19
@@ -1,8 +1,11 @@
1
1
  import { Injectable } from '@angular/core';
2
+ import { Subject } from 'rxjs';
2
3
  import * as i0 from "@angular/core";
3
4
  export class FormStateService {
4
5
  constructor() {
5
6
  this.closeModal = true;
7
+ this.dataSaved$ = new Subject();
8
+ this.dataSavedObservable = this.dataSaved$.asObservable();
6
9
  }
7
10
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
8
11
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormStateService }); }
@@ -10,4 +13,4 @@ export class FormStateService {
10
13
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormStateService, decorators: [{
11
14
  type: Injectable
12
15
  }], ctorParameters: () => [] });
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1zdGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3NlcnZpY2VzL2Zvcm0vZm9ybS1zdGF0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRzNDLE1BQU0sT0FBTyxnQkFBZ0I7SUFJM0I7UUFGQSxlQUFVLEdBQWEsSUFBSSxDQUFBO0lBRVgsQ0FBQzsrR0FKTixnQkFBZ0I7bUhBQWhCLGdCQUFnQjs7NEZBQWhCLGdCQUFnQjtrQkFENUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEZvcm1TdGF0ZVNlcnZpY2Uge1xyXG5cclxuICBjbG9zZU1vZGFsIDogYm9vbGVhbiA9IHRydWVcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxufVxyXG4iXX0=
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1zdGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3NlcnZpY2VzL2Zvcm0vZm9ybS1zdGF0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFHL0IsTUFBTSxPQUFPLGdCQUFnQjtJQVEzQjtRQU5BLGVBQVUsR0FBYSxJQUFJLENBQUE7UUFFM0IsZUFBVSxHQUFnQyxJQUFJLE9BQU8sRUFBc0IsQ0FBQztRQUUxRSx3QkFBbUIsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFBO0lBRXRDLENBQUM7K0dBUk4sZ0JBQWdCO21IQUFoQixnQkFBZ0I7OzRGQUFoQixnQkFBZ0I7a0JBRDVCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEZvcm1TdGF0ZVNlcnZpY2Uge1xyXG5cclxuICBjbG9zZU1vZGFsIDogYm9vbGVhbiA9IHRydWVcclxuXHJcbiAgZGF0YVNhdmVkJDogU3ViamVjdDxzdHJpbmcgfCB1bmRlZmluZWQ+ID0gbmV3IFN1YmplY3Q8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xyXG4gIFxyXG4gICAgZGF0YVNhdmVkT2JzZXJ2YWJsZSA9IHRoaXMuZGF0YVNhdmVkJC5hc09ic2VydmFibGUoKVxyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG59XHJcbiJdfQ==
@@ -152,7 +152,6 @@ export class TsiFormComponentBaseComponent extends AppBaseComponent {
152
152
  super.ngOnInit();
153
153
  this._initModalRef();
154
154
  this.initModalData();
155
- this._initFormSaveSubscription();
156
155
  this._addedDirectiveSubscritpion = this._presentationDesignerService.addedDirectiveObservable
157
156
  .subscribe(data => {
158
157
  if (data.treated) {
@@ -189,22 +188,6 @@ export class TsiFormComponentBaseComponent extends AppBaseComponent {
189
188
  }
190
189
  });
191
190
  }
192
- _initFormSaveSubscription() {
193
- this.savedDataSubscription = this._colonnePersonnaliseeService
194
- .dataSavedObservable.subscribe(async (data) => {
195
- this._inputRegistry.resetDirtyStatusForAllInputs();
196
- if (data && this.mode == Modes.create) {
197
- this.id = data;
198
- this.mode = Modes.edit;
199
- this.cdRef?.detectChanges();
200
- if (this.form) {
201
- this.form.id = this.id;
202
- this.form.mode = this.mode;
203
- this.form.formEndpoint = this.formEndpoint;
204
- }
205
- }
206
- });
207
- }
208
191
  toggleDesignMode() {
209
192
  this.removeTsiModalFooter();
210
193
  this.createSaveButton();
@@ -403,7 +386,25 @@ export class TsiFormComponentBaseComponent extends AppBaseComponent {
403
386
  }
404
387
  }
405
388
  }
406
- resolveFiche(val) {
389
+ resolveFiche(val, apiResponse) {
390
+ this._inputRegistry.resetDirtyStatusForAllInputs();
391
+ const hasUid = apiResponse?.uid != null;
392
+ const isCreateOrDuplicate = this.mode == Component_Modes.CREATE ||
393
+ this.mode == Component_Modes.DUPLICATE;
394
+ const isEditableMode = isCreateOrDuplicate || this.mode == Component_Modes.EDIT;
395
+ if (hasUid && isEditableMode) {
396
+ this._formStateService.dataSaved$.next(apiResponse.uid);
397
+ }
398
+ if (hasUid && isCreateOrDuplicate) {
399
+ this.id = apiResponse.uid;
400
+ this.mode = Component_Modes.EDIT;
401
+ this.cdRef?.detectChanges();
402
+ if (this.form) {
403
+ this.form.id = this.id;
404
+ this.form.mode = this.mode;
405
+ this.form.formEndpoint = this.formEndpoint;
406
+ }
407
+ }
407
408
  if (!this._formStateService.closeModal)
408
409
  return;
409
410
  this.hide(val);
@@ -582,9 +583,6 @@ export class TsiFormComponentBaseComponent extends AppBaseComponent {
582
583
  if (this._addedDirectiveBaseSubscritpion) {
583
584
  this._addedDirectiveBaseSubscritpion.unsubscribe();
584
585
  }
585
- if (this.savedDataSubscription) {
586
- this.savedDataSubscription.unsubscribe();
587
- }
588
586
  }
589
587
  removeTsiModalFooter() {
590
588
  const tsiModalFooter = document.querySelector("tsi-modal-footer");
@@ -694,4 +692,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
694
692
  }], onSave: [{
695
693
  type: Output
696
694
  }] } });
697
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWZvcm0tYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWJhc2UvY29tcG9uZW50cy90c2ktZm9ybS1iYXNlL3RzaS1mb3JtLWJhc2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3RzaS1iYXNlL2NvbXBvbmVudHMvdHNpLWZvcm0tYmFzZS90c2ktZm9ybS1iYXNlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBMkUsU0FBUyxFQUFjLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJN08sT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBc0IsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakcsT0FBTyxFQUEwQixtQkFBbUIsRUFBa0UsTUFBTSxpQkFBaUIsQ0FBQztBQUM5SSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUE4QiwyQkFBMkIsRUFBRSw2QkFBNkIsRUFBRSxvQkFBb0IsRUFBRSxtQkFBbUIsRUFBRSwyQkFBMkIsRUFBRSwwQkFBMEIsRUFBb0Isc0JBQXNCLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2UyxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSwyRUFBMkUsQ0FBQztBQUM1SCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyRUFBMkUsQ0FBQztBQUUvRyxPQUFPLEVBQUUsb0JBQW9C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UUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyw4QkFBOEI7WUFBRSxPQUFPO1FBRWpELElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFL0QsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ25GLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDOytHQTcwQlUsNkJBQTZCO21HQUE3Qiw2QkFBNkIsd1JBcUU3QixnQkFBZ0IsOEVBR2hCLHVCQUF1Qiw4REFFcEIsb0JBQW9CLHVFQ3pHcEMsaUNBQ0E7OzRGRDhCYSw2QkFBNkI7a0JBTHpDLFNBQVM7K0JBQ0UsbUJBQW1CO3VKQXlFQSxJQUFJO3NCQUFoQyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFHUyxXQUFXO3NCQUE5QyxTQUFTO3VCQUFDLHVCQUF1QjtnQkFFRSxRQUFRO3NCQUEzQyxZQUFZO3VCQUFDLG9CQUFvQjtnQkF1QnpCLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0YsSUFBSTtzQkFEUCxLQUFLO2dCQVFHLEVBQUU7c0JBQVYsS0FBSztnQkFJRixTQUFTO3NCQURaLEtBQUs7Z0JBY0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBTU8sTUFBTTtzQkFBbEIsS0FBSztnQkE4QkksTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJDb250ZW50Q2hlY2tlZCwgQWZ0ZXJWaWV3Q2hlY2tlZCwgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBSZW5kZXJlcjIsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRHluYW1pY0RpYWxvZ0NvbmZpZywgRHluYW1pY0RpYWxvZ1JlZiB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25LZXlzIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50X01vZGVzLCBGb3JtVmFsaWRhdGlvbkVycm9yLCBGb3JtVmFsaWRpdHlSZXN1bHQsIE1vZGVzIH0gZnJvbSAnLi4vLi4vLi4vZW51bXMnO1xyXG5pbXBvcnQgeyBDb21ib1N0YXR1c01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IENvbXBvbmVudERlc2NyaW1pbmF0b3IsIFByZXNlbnRhdGlvblNldHRpbmcsIFByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwsIHdvcmtmbG93SW5zdGFuY2VJbmZvcm1hdGlvblJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgTG9jYWxpemVQaXBlIH0gZnJvbSAnLi4vLi4vLi4vcGlwZXMvbG9jYWxpemUucGlwZSc7XHJcbmltcG9ydCB7IEVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlLCBFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UsIEdlbmVyaWNWYWxpZGF0aW9uU3RhdGVTZXJ2aWNlLCBJbnB1dFJlZ2lzdHJ5U2VydmljZSwgTGF5b3V0SGVscGVyU2VydmljZSwgUHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLCBQcmVzZW50YXRpb25TZXR0aW5nU2VydmljZSwgUmVwb3J0aW5nU2VydmljZSwgVHNpTm90aWZpY2F0aW9uU2VydmljZSwgV29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgUHJlc2VudGF0aW9uRGVzaWduZXJCYXNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3ByZXNlbnRhdGlvbi1zZXR0aW5nL3ByZXNlbnRhdGlvbi1kZXNpZ25lci1iYXNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUc2lCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90c2ktY29tcG9uZW50cy9idXR0b24tY29tcG9uZW50cy90c2ktYnV0dG9uL3RzaS1idXR0b24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgRWRpdGFibGVHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdHNpLWNvbXBvbmVudHMvaW5wdXQtY29tcG9uZW50cy9lZGl0YWJsZS1ncmlkL2VkaXRhYmxlLWdyaWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHNpQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90c2ktY29tcG9uZW50cy9pbnB1dC1jb21wb25lbnRzL3RzaS1jaGVja2JveC90c2ktY2hlY2tib3guY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHNpR2VuZXJpY0dyaWRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90c2ktY29tcG9uZW50cy9vdXRwdXQtY29tcG9uZW50cy90c2ktZ2VuZXJpYy1ncmlkL3RzaS1nZW5lcmljLWdyaWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHNpVmlld0dyaWRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90c2ktY29tcG9uZW50cy9vdXRwdXQtY29tcG9uZW50cy90c2ktdmlldy1ncmlkL3RzaS12aWV3LWdyaWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHNpRm9ybUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3RzaS1jb21wb25lbnRzL3RzaS1mb3JtL3RzaS1mb3JtLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRzaUdlbmVyaWNDcnVkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdHNpLWNvbXBvbmVudHMvdHNpLWdlbmVyaWMtY3J1ZC90c2ktZ2VuZXJpYy1jcnVkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlLCBQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZUJhc2UgfSBmcm9tICcuLi8uLi8uLi90c2ktZGlyZWN0aXZlcyc7XHJcbmltcG9ydCB7IFRzaUlucHV0QmFzZSB9IGZyb20gJy4uLy4uL3RzaS1pbnB1dC1iYXNlL3RzaS1pbnB1dC1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFwcEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9hcHAtYmFzZS9hcHAtYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGb3JtU3RhdGUgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZm9ybS9mb3JtLXN0YXRlJztcclxuaW1wb3J0IHsgVHNpTW9kYWxGb290ZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90c2ktY29tcG9uZW50cy90c2ktbW9kYWwtZm9vdGVyL3RzaS1tb2RhbC1mb290ZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRm9ybVN0YXRlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Zvcm0vZm9ybS1zdGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29sb25uZVBlcnNvbm5hbGlzZWVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZHluYW1pYy1mb3JtL2NvbG9ubmUtcGVyc29ubmFsaXNlZS5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXRzaS1mb3JtLWJhc2UnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90c2ktZm9ybS1iYXNlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90c2ktZm9ybS1iYXNlLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFRzaUZvcm1Db21wb25lbnRCYXNlQ29tcG9uZW50IGV4dGVuZHMgQXBwQmFzZUNvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRDaGVja2VkLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0NoZWNrZWQge1xyXG4gIC8vI3JlZ2lvbiBwcm9wZXJ0aWVzXHJcbiAgcHVibGljIG92ZXJyaWRlIGdldCBmb3JtRW5kcG9pbnQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBzdXBlci5mb3JtRW5kcG9pbnQ7XHJcbiAgfTtcclxuICBwcml2YXRlIG92ZXJyaWRlIHNldCBmb3JtRW5kcG9pbnQoZW5kcG9pbnQ6IHN0cmluZykge1xyXG4gICAgc3VwZXIuZm9ybUVuZHBvaW50ID0gYCR7ZW5kcG9pbnR9LyR7dGhpcy5pZH1gO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG92ZXJyaWRlIGdldCBidXNpbmVzc0NsYXNzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2J1c2luZXNzQ2xhc3M7XHJcbiAgfVxyXG4gIHB1YmxpYyBvdmVycmlkZSBzZXQgYnVzaW5lc3NDbGFzcyh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9idXNpbmVzc0NsYXNzID0gdmFsdWU7XHJcbiAgICB0aGlzLmZvcm1FbmRwb2ludCA9IHRoaXMuYnVzaW5lc3NDbGFzcztcclxuICAgIHRoaXMuX2dlbmVyaWNWYWxpZGF0aW9uU3RhdGVTZXJ2aWNlPy5sb2FkRW50aXR5VmFsaWRhdGlvbkluZm9zKHRoaXMuX2J1c2luZXNzQ2xhc3MpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY29tcG9uZW50RGVzY3JpbWluYXRvcjogQ29tcG9uZW50RGVzY3JpbWluYXRvciB8IHVuZGVmaW5lZFxyXG4gIHByaXZhdGUgZGVzY3JpbWluYXRvclZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWRcclxuXHJcbiAgcHJvdGVjdGVkIHNldCBjb21wb25lbnREZXNjcmltaW5hdG9yKHZhbHVlOiBDb21wb25lbnREZXNjcmltaW5hdG9yIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9jb21wb25lbnREZXNjcmltaW5hdG9yID0gdmFsdWVcclxuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5wcm9wZXJ0eVZhbHVlKSB7XHJcbiAgICAgIGlmICh0aGlzLmZvcm0pIHtcclxuICAgICAgICB0aGlzLmZvcm0uZGVzY3JpbWluYXRvclZhbHVlID0gdmFsdWUucHJvcGVydHlWYWx1ZVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZGVzY3JpbWluYXRvclZhbHVlID0gdmFsdWUucHJvcGVydHlWYWx1ZVxyXG4gICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QgPSB0aGlzLl9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZS5nZXRQcmVzZW50YXRpb25TZXR0aW5nQnlDb21wb25lbnRJZGVudGlmaWVyU3luYyh0aGlzLmdldENvbXBvbmVudElkZW50aWZpZXIoKSxcclxuICAgICAgICB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSkgPz8gbmV3IFByZXNlbnRhdGlvblNldHRpbmcoKVxyXG4gICAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzID0gWy4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXREaXJlY3RpdmVzKCksXHJcbiAgICAgIC4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZVNlcnZpY2UuZ2V0RGlyZWN0aXZlcygpXHJcbiAgICAgIF07XHJcbiAgICAgIHRoaXMuYWRkSW5wdXRzKHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCwgIXRoaXMuX2xheW91dEhlbHBlclNlcnZpY2U/LmlzRGVzaWduTW9kZSlcclxuXHJcbiAgICAgIC8vIHRoaXMuX3JlcG9ydGluZ1NlcnZpY2UuZ2V0UmVwb3J0RGVjcmltaW5hdG9yKHJlcSkuc3Vic2NyaWJlKHtcclxuICAgICAgLy8gICBuZXh0OiBhc3luYyAocmVzdWx0KSA9PiB7XHJcbiAgICAgIC8vICAgICB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSA9IHJlc3VsdC5wcm9wZXJ0eVZhbHVlO1xyXG4gICAgICAvLyAgICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0ID0gdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UuZ2V0UHJlc2VudGF0aW9uU2V0dGluZ0J5Q29tcG9uZW50SWRlbnRpZmllclN5bmModGhpcy5nZXRDb21wb25lbnRJZGVudGlmaWVyKCkpID8/IG5ldyBQcmVzZW50YXRpb25TZXR0aW5nKClcclxuICAgICAgLy8gICAgIGlmICh0aGlzLmZvcm0pIHtcclxuICAgICAgLy8gICAgICAgdGhpcy5mb3JtLmRlc2NyaW1pbmF0b3JWYWx1ZSA9IHJlc3VsdC5wcm9wZXJ0eVZhbHVlXHJcbiAgICAgIC8vICAgICAgIGlmICh0aGlzLmVudGl0eUluZm8/LmlzV29ya2Zsb3cpIHtcclxuICAgICAgLy8gICAgICAgICBhd2FpdCB0aGlzLmZvcm0uZ2V0V29ya2Zsb3dFbnRpdHlJbmZvcm1hdGlvbih0aGlzLmJ1c2luZXNzQ2xhc3MsIHRoaXMuaWQsIHRoaXMuZW50aXR5SW5mbz8uZGlzY3JpbWluYXRvckNsYXNzTmFtZSxcclxuICAgICAgLy8gICAgICAgICAgIHRoaXMuZW50aXR5SW5mbz8uZGlzY3JpbWluYXRvclByb3BlcnR5TmFtZSlcclxuICAgICAgLy8gICAgICAgfVxyXG4gICAgICAvLyAgICAgfVxyXG4gICAgICAvLyAgICAgdGhpcy5hZGRJbnB1dHModGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0LCAhdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZT8uaXNEZXNpZ25Nb2RlKVxyXG4gICAgICAvLyAgIH0sXHJcbiAgICAgIC8vICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAvLyAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgLy8gICB9LFxyXG4gICAgICAvLyB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5mb3JtKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLmRlc2NyaW1pbmF0b3JWYWx1ZSA9IHVuZGVmaW5lZFxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0IGNvbXBvbmVudERlc2NyaW1pbmF0b3IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29tcG9uZW50RGVzY3JpbWluYXRvclxyXG4gIH1cclxuXHJcblxyXG4gIEBWaWV3Q2hpbGQoVHNpRm9ybUNvbXBvbmVudCkgZm9ybT86IFRzaUZvcm1Db21wb25lbnQ7XHJcblxyXG5cclxuICBAVmlld0NoaWxkKFRzaU1vZGFsRm9vdGVyQ29tcG9uZW50KSBtb2RhbEZvb3Rlcj86IFRzaU1vZGFsRm9vdGVyQ29tcG9uZW50IHwgYW55O1xyXG5cclxuICBAVmlld0NoaWxkcmVuKFRzaUNoZWNrYm94Q29tcG9uZW50KSBjaGVja2JveD86IEFycmF5PFRzaUNoZWNrYm94Q29tcG9uZW50PjtcclxuXHJcbiAgZmF1bHR5SW5wdXRzOiBGb3JtVmFsaWRpdHlSZXN1bHRbXSA9IFtdO1xyXG4gIGlzRm9ybVZhbGlkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xyXG4gIHJlcXVpcmVkSW5wdXRzOiBUc2lJbnB1dEJhc2VbXSA9IFtdO1xyXG4gIC8vIEBWaWV3Q2hpbGRyZW4oRWRpdGFibGVHcmlkQ29tcG9uZW50KSBlZGl0YWJsZUdyaWRDb21wb25lbnRzITogUXVlcnlMaXN0PEVkaXRhYmxlR3JpZENvbXBvbmVudD47XHJcblxyXG4gIC8vIEBWaWV3Q2hpbGRyZW4oVHNpVmlld0dyaWRDb21wb25lbnQpIHZpZXdHcmlkc0NvbXBvbmVudHMhOiBRdWVyeUxpc3Q8VHNpVmlld0dyaWRDb21wb25lbnQ+O1xyXG4gIC8vIEBWaWV3Q2hpbGRyZW4oVHNpR2VuZXJpY0dyaWRDb21wb25lbnQpIGdlbmVyaWNHcmlkc0NvbXBvbmVudHMhOiBRdWVyeUxpc3Q8VHNpR2VuZXJpY0dyaWRDb21wb25lbnQ+O1xyXG4gIC8vIEBWaWV3Q2hpbGRyZW4oVHNpR2VuZXJpY0NydWRDb21wb25lbnQpIGdlbmVyaWNDcnVkc0NvbXBvbmVudHMhOiBRdWVyeUxpc3Q8VHNpR2VuZXJpY0NydWRDb21wb25lbnQ+O1xyXG4gIGVkaXRhYmxlR3JpZENvbXBvbmVudHM6IEFycmF5PEVkaXRhYmxlR3JpZENvbXBvbmVudD4gPSBbXTtcclxuICB2aWV3R3JpZHNDb21wb25lbnRzOiBBcnJheTxUc2lWaWV3R3JpZENvbXBvbmVudD4gPSBbXTtcclxuICBnZW5lcmljR3JpZHNDb21wb25lbnRzOiBBcnJheTxUc2lHZW5lcmljR3JpZENvbXBvbmVudD4gPSBbXTtcclxuICBnZW5lcmljQ3J1ZHNDb21wb25lbnRzOiBBcnJheTxUc2lHZW5lcmljQ3J1ZENvbXBvbmVudD4gPSBbXTtcclxuXHJcblxyXG4gIGZvcm1SZWY/OiBOZ0Zvcm07XHJcbiAgaXNGb3JtRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjdWRDb21wb25lbnQ6IGFueTtcclxuICBwcml2YXRlIF9tb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBJbnB1dHNcclxuICBASW5wdXQoKSBpdGVtRGlhbG9nOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IG1vZGUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9tb2RlO1xyXG4gIH1cclxuICBzZXQgbW9kZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9tb2RlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBpZD86IHN0cmluZztcclxuICBwcml2YXRlIF9pc2xvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgaXNsb2FkaW5nKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9pc2xvYWRpbmcgPSB2YWx1ZTtcclxuICAgIGNvbnNvbGUubG9nKCdpc2xvYWRpbmcgc2V0IHRvJywgdmFsdWUpO1xyXG4gICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnByb2Nlc3NEaXNhYmxlZElucHV0cyh0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QpXHJcbiAgICAgIH0sIDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGlzbG9hZGluZygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pc2xvYWRpbmc7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIGhlYWRlcj86IHN0cmluZztcclxuICBASW5wdXQoKSBzYXZpbmcgPSBmYWxzZTtcclxuICBASW5wdXQoKSBpdGVtOiBhbnk7XHJcblxyXG4gIHByaXZhdGUgX3N0YXR1cz86IHN0cmluZyA9ICcnO1xyXG4gIGdldCBzdGF0dXMoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGF0dXM7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIHNldCBzdGF0dXModmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fc3RhdHVzID0gdmFsdWU7XHJcbiAgICBpZiAodGhpcy5mb3JtICYmIHRoaXMuZm9ybS5zdGF0dXMgIT09IHRoaXMuX3N0YXR1cykge1xyXG4gICAgICB0aGlzLmZvcm0uc3RhdHVzID0gdGhpcy5fc3RhdHVzO1xyXG4gICAgfVxyXG4gIH1cclxuICAvL2JzTW9kYWxSZWY/OiBhbnk7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIHByaXZhdGUgX3ZpZXdDb250YWluZXJSZWYgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZilcclxuICBwcml2YXRlIF9yZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpXHJcbiAgcHJpdmF0ZSBfbGF5b3V0SGVscGVyU2VydmljZSA9IGluamVjdChMYXlvdXRIZWxwZXJTZXJ2aWNlKVxyXG4gIHByaXZhdGUgX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UgPSBpbmplY3QoV29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZSlcclxuICBwcml2YXRlIF9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZSA9IGluamVjdChQcmVzZW50YXRpb25TZXR0aW5nU2VydmljZSlcclxuICBwcml2YXRlIF9tZXNzYWdlSW5mb1NlcnZpY2UgPSBpbmplY3QoVHNpTm90aWZpY2F0aW9uU2VydmljZSlcclxuICBwcml2YXRlIF9lcnJvclJlc3BvbnNlTWFuYWdlciA9IGluamVjdChFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UpXHJcbiAgcHJpdmF0ZSBfcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlID0gaW5qZWN0KFByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZSlcclxuICBwcml2YXRlIF9wcmVzZW50YXRpb25EZXNpZ25lckJhc2VTZXJ2aWNlID0gaW5qZWN0KFByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZVNlcnZpY2UpXHJcbiAgcHVibGljIGxvY2FsaXplPyA9IGluamVjdChMb2NhbGl6ZVBpcGUpXHJcbiAgcHVibGljIF9pbnB1dFJlZ2lzdHJ5ID0gaW5qZWN0KElucHV0UmVnaXN0cnlTZXJ2aWNlKVxyXG4gIHByaXZhdGUgX2Zvcm1TdGF0ZVNlcnZpY2UgPSBpbmplY3QoRm9ybVN0YXRlU2VydmljZSlcclxuICBwcml2YXRlIF9jb2xvbm5lUGVyc29ubmFsaXNlZVNlcnZpY2UgPSBpbmplY3QoQ29sb25uZVBlcnNvbm5hbGlzZWVTZXJ2aWNlKVxyXG4gIHByaXZhdGUgZGlyZWN0aXZlRWxlbWVudHM6IChQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZSB8IFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlQmFzZSlbXSA9IFtdO1xyXG4gIHByZXNlbnRhdGlvblJlcXVlc3Q6IFByZXNlbnRhdGlvblNldHRpbmcgPSBuZXcgUHJlc2VudGF0aW9uU2V0dGluZygpXHJcbiAgX2Rlc2lnbk1vZGVGb3JtU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XHJcbiAgX3NhdmVXb3JrZmxvd0Zvcm1Db25maWd1cmF0aW9uU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWRcclxuICBfYWRkZWREaXJlY3RpdmVTdWJzY3JpdHBpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZFxyXG4gIF9hZGRlZERpcmVjdGl2ZUJhc2VTdWJzY3JpdHBpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZFxyXG4gIHNhdmVkRGF0YVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvblxyXG4gIC8vI3JlZ2lvbiBPdXRwdXRzXHJcbiAgQE91dHB1dCgpIG9uU2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBwcml2YXRlIF9nZW5lcmljVmFsaWRhdGlvblN0YXRlU2VydmljZT86IEdlbmVyaWNWYWxpZGF0aW9uU3RhdGVTZXJ2aWNlID0gaW5qZWN0KEdlbmVyaWNWYWxpZGF0aW9uU3RhdGVTZXJ2aWNlKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgcmVmPzogRHluYW1pY0RpYWxvZ1JlZixcclxuICAgIHB1YmxpYyBjb25maWc/OiBEeW5hbWljRGlhbG9nQ29uZmlnLFxyXG4gICAgcHVibGljIG92ZXJyaWRlIGNkUmVmPzogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcclxuICAgIHN1cGVyKGNkUmVmKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBpc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHdvcmtmbG93SW5mb3JtYXRpb24/OiB3b3JrZmxvd0luc3RhbmNlSW5mb3JtYXRpb25SZXNwb25zZVxyXG4gIGN1c3RvbURhdGE/OiBhbnlcclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIG92ZXJyaWRlIG5nT25Jbml0KCkge1xyXG4gICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgIHRoaXMuX2luaXRNb2RhbFJlZigpO1xyXG4gICAgdGhpcy5pbml0TW9kYWxEYXRhKCk7XHJcbiAgICB0aGlzLl9pbml0Rm9ybVNhdmVTdWJzY3JpcHRpb24oKVxyXG4gICAgdGhpcy5fYWRkZWREaXJlY3RpdmVTdWJzY3JpdHBpb24gPSB0aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UuYWRkZWREaXJlY3RpdmVPYnNlcnZhYmxlXHJcbiAgICAgIC5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGEudHJlYXRlZCkge1xyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5pc0Rlc2dpbk1vZGVGcm9tV29ya2Zsb3cpIHtcclxuICAgICAgICAgIHRoaXMuZW50aXR5SW5mbyA9IHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuY3VycmVudFdvcmtmbG93RW50aXR5SW5mb1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmVudGl0eUluZm8/LmRpc2NyaW1pbmF0b3JQcm9wZXJ0eU5hbWUgJiYgIXRoaXMuZW50aXR5SW5mbz8uZGlzY3JpbWluYXRvckNsYXNzTmFtZSkge1xyXG4gICAgICAgICAgdGhpcy5wcm9jZXNzU2luZ2xlRWxlbWVudChkYXRhKVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSkge1xyXG4gICAgICAgICAgdGhpcy5wcm9jZXNzU2luZ2xlRWxlbWVudChkYXRhKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuXHJcbiAgICB0aGlzLl9hZGRlZERpcmVjdGl2ZUJhc2VTdWJzY3JpdHBpb24gPSB0aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lckJhc2VTZXJ2aWNlLmFkZGVkRGlyZWN0aXZlT2JzZXJ2YWJsZVxyXG4gICAgICAuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICAgIGlmIChkYXRhLnRyZWF0ZWQpIHtcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuaXNEZXNnaW5Nb2RlRnJvbVdvcmtmbG93KSB7XHJcbiAgICAgICAgICB0aGlzLmVudGl0eUluZm8gPSB0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmN1cnJlbnRXb3JrZmxvd0VudGl0eUluZm9cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5lbnRpdHlJbmZvPy5kaXNjcmltaW5hdG9yUHJvcGVydHlOYW1lICYmICF0aGlzLmVudGl0eUluZm8/LmRpc2NyaW1pbmF0b3JDbGFzc05hbWUpIHtcclxuICAgICAgICAgIHRoaXMucHJvY2Vzc1NpbmdsZUVsZW1lbnQoZGF0YSlcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5kZXNjcmltaW5hdG9yVmFsdWUpIHtcclxuICAgICAgICAgIHRoaXMucHJvY2Vzc1NpbmdsZUVsZW1lbnQoZGF0YSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcblxyXG4gICAgdGhpcy5fZGVzaWduTW9kZUZvcm1TdWJzY3JpcHRpb24gPSB0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLl9kZXNpZ25Nb2RlRm9ybVN1YmplY3Quc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICBpZiAoZGF0YSAmJiBkYXRhID09IHRydWUpIHtcclxuICAgICAgICB0aGlzLnRvZ2dsZURlc2lnbk1vZGUoKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgX2luaXRGb3JtU2F2ZVN1YnNjcmlwdGlvbigpIHtcclxuICAgIHRoaXMuc2F2ZWREYXRhU3Vic2NyaXB0aW9uID0gdGhpcy5fY29sb25uZVBlcnNvbm5hbGlzZWVTZXJ2aWNlXHJcbiAgICAgIC5kYXRhU2F2ZWRPYnNlcnZhYmxlLnN1YnNjcmliZShcclxuICAgICAgICBhc3luYyAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9pbnB1dFJlZ2lzdHJ5LnJlc2V0RGlydHlTdGF0dXNGb3JBbGxJbnB1dHMoKVxyXG4gICAgICAgICAgaWYgKGRhdGEgJiYgdGhpcy5tb2RlID09IE1vZGVzLmNyZWF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmlkID0gZGF0YVxyXG4gICAgICAgICAgICB0aGlzLm1vZGUgPSBNb2Rlcy5lZGl0XHJcbiAgICAgICAgICAgIHRoaXMuY2RSZWY/LmRldGVjdENoYW5nZXMoKVxyXG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5mb3JtLmlkID0gdGhpcy5pZDtcclxuICAgICAgICAgICAgICB0aGlzLmZvcm0ubW9kZSA9IHRoaXMubW9kZVxyXG4gICAgICAgICAgICAgIHRoaXMuZm9ybS5mb3JtRW5kcG9pbnQgPSB0aGlzLmZvcm1FbmRwb2ludFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgfVxyXG5cclxuICB0b2dnbGVEZXNpZ25Nb2RlKCkge1xyXG4gICAgdGhpcy5yZW1vdmVUc2lNb2RhbEZvb3RlcigpXHJcbiAgICB0aGlzLmNyZWF0ZVNhdmVCdXR0b24oKTtcclxuXHJcbiAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QgPSB0aGlzLl9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZS5nZXRQcmVzZW50YXRpb25TZXR0aW5nQnlDb21wb25lbnRJZGVudGlmaWVyU3luYyh0aGlzLmdldENvbXBvbmVudElkZW50aWZpZXIoKSwgdGhpcy5kZXNjcmltaW5hdG9yVmFsdWUpID8/IG5ldyBQcmVzZW50YXRpb25TZXR0aW5nKClcclxuXHJcbiAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzID0gWy4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXREaXJlY3RpdmVzKCksXHJcbiAgICAuLi50aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lckJhc2VTZXJ2aWNlLmdldERpcmVjdGl2ZXMoKVxyXG4gICAgXTtcclxuXHJcbiAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzPy5mb3JFYWNoKGlucHV0ID0+IHtcclxuICAgICAgaW5wdXQuaW5zZXJ0RWxlbWVudCgpO1xyXG4gICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZSkge1xyXG4gICAgICAgIGlucHV0LnNlbGVjdEFwcHJvcmlhdGVDb2x1bW5zKHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCk7XHJcbiAgICAgIH1cclxuICAgICAgaW5wdXQuYWRkQ2hlY2tib3hlc1RvSW5wdXRzKHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpXHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlRnJvbUFjdGl2ZVN1YnNjcml0cGlvbigpXHJcbiAgICB0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLmlzRGVzaWduTW9kZSA9IGZhbHNlXHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzID0gWy4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXREaXJlY3RpdmVzKCksXHJcbiAgICAuLi50aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lckJhc2VTZXJ2aWNlLmdldERpcmVjdGl2ZXMoKVxyXG4gICAgXTtcclxuICAgIGNvbnNvbGUubG9nKFwiY291bnQgb2YgZGlyZWN0aXZlRWxlbWVudHMgPT4gXCIsIHRoaXMuZGlyZWN0aXZlRWxlbWVudHMubGVuZ3RoKVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZT8uaXNEZXNpZ25Nb2RlXHJcbiAgICAgICYmICF0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmlzRGVzZ2luTW9kZUZyb21Xb3JrZmxvdykge1xyXG4gICAgICAvLyB0aGlzLnJlbW92ZVRzaU1vZGFsRm9vdGVyKClcclxuICAgICAgLy8gdGhpcy5jcmVhdGVTYXZlQnV0dG9uKClcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG5cclxuICAgICAgaWYgKHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuaXNEZXNnaW5Nb2RlRnJvbVdvcmtmbG93KSB7XHJcbiAgICAgICAgdGhpcy5lbnRpdHlJbmZvID0gdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5jdXJyZW50V29ya2Zsb3dFbnRpdHlJbmZvXHJcbiAgICAgIH1cclxuICAgICAgLy8gZWxzZSB7XHJcbiAgICAgIC8vICAgdGhpcy5lbnRpdHlJbmZvID0gYXdhaXQgdGhpcy5fZW50aXR5Q29uZmlnU2VydmljZS5nZXRFbnRpdHlJbmZvRnJvbUNhY2hlKHRoaXMuYnVzaW5lc3NDbGFzcylcclxuICAgICAgLy8gfVxyXG4gICAgfVxyXG5cclxuICAgIC8vaW5pdCBnZW5lcmljQ3J1ZCByZXBvcnRpbmdcclxuICAgIGlmICh0aGlzLmZvcm0pIHtcclxuICAgICAgdGhpcy5mb3JtLmZvcm1SZWZDaGFuZ2Uuc3Vic2NyaWJlKGYgPT4ge1xyXG4gICAgICAgIGlmIChmKSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm1SZWYgPSBmO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuZm9ybS5kaXNhYmxlZCA9IHRoaXMuaXNGb3JtRGlzYWJsZWQ7XHJcbiAgICAgIHRoaXMuZm9ybS5mb3JtRW5kcG9pbnQgPSB0aGlzLmZvcm1FbmRwb2ludDtcclxuICAgICAgdGhpcy5mb3JtLmZvcm1OYW1lID0gdGhpcy5mb3JtTmFtZTtcclxuICAgICAgdGhpcy5mb3JtLmJ1c2luZXNzQ2xhc3MgPSB0aGlzLl9idXNpbmVzc0NsYXNzXHJcbiAgICAgIHRoaXMuZm9ybS5mb3JtTmFtZSA9IHRoaXMuZm9ybU5hbWU7XHJcbiAgICAgIHRoaXMuZm9ybS5pZCA9IHRoaXMuaWQ7XHJcbiAgICAgIHRoaXMuZm9ybS5tb2RlID0gdGhpcy5tb2RlXHJcblxyXG4gICAgICBpZighdGhpcy5mb3JtLmlzRGVzY3JpbWluYXRvclZhbHVlU2V0KXtcclxuICAgICAgICB0aGlzLmZvcm0uZGVzY3JpbWluYXRvclZhbHVlID0gdGhpcy5kZXNjcmltaW5hdG9yVmFsdWVcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gd29ya2Zsb3cgZm9ybSBkZXNpZ25cclxuICAgICAgdGhpcy5fc2F2ZVdvcmtmbG93Rm9ybUNvbmZpZ3VyYXRpb25TdWJzY3JpcHRpb24gPSB0aGlzLmZvcm0ub25TdWJtaXRGb3JtV29ya2Zsb3dDb25maWd1cmF0aW9uLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICBsZXQgd29ya2Zsb3dGb3JtQ29uZmlndXJhdGlvbiA9IHRoaXMuZ2V0Rm9ybVdvcmZrbG93UHJlc2VudGF0aW9uU2V0dGluZygpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiRm9ybVdvcmZrbG93U2V0dGluZyA9PiBcIiwgd29ya2Zsb3dGb3JtQ29uZmlndXJhdGlvbilcclxuICAgICAgICB0aGlzLmhpZGUod29ya2Zsb3dGb3JtQ29uZmlndXJhdGlvbilcclxuICAgICAgfSlcclxuXHJcbiAgICAgIHRoaXMuZm9ybS5vblN0YXR1c0NoYW5nZS5zdWJzY3JpYmUoKG5ld1ZhbHVlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICB0aGlzLnN0YXR1cyA9IG5ld1ZhbHVlO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm1vZGUgPT0gQ29tcG9uZW50X01vZGVzLkNSRUFURSkge1xyXG4gICAgICBpZiAodGhpcy5jaGVja2JveCkge1xyXG4gICAgICAgIHRoaXMuY2hlY2tib3guZm9yRWFjaChib3ggPT4ge1xyXG4gICAgICAgICAgYm94LmlucHV0RmllbGQgPSBmYWxzZTtcclxuICAgICAgICAgIGJveC5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBpbml0VHNpR3JpZHNSZWYoKSB7XHJcbiAgICB0aGlzLnZpZXdHcmlkc0NvbXBvbmVudHMgPSB0aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UuZ2V0Vmlld0dyaWRzKClcclxuICAgIHRoaXMuZ2VuZXJpY0dyaWRzQ29tcG9uZW50cyA9IHRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXRHZW5lcmljR3JpZHMoKVxyXG4gICAgdGhpcy5lZGl0YWJsZUdyaWRDb21wb25lbnRzID0gdGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLmdldEVkaXRhYmxlR3JpZHMoKVxyXG4gICAgdGhpcy5nZW5lcmljQ3J1ZHNDb21wb25lbnRzID0gdGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLmdldEdlbmVyaWNDcnVkcygpXHJcbiAgfVxyXG5cclxuICBnZXRGb3JtV29yZmtsb3dQcmVzZW50YXRpb25TZXR0aW5nKCkge1xyXG4gICAgbGV0IHByZXNlbnRhdGlvblJlcXVlc3QgPSBuZXcgUHJlc2VudGF0aW9uU2V0dGluZygpXHJcblxyXG4gICAgdGhpcy5kaXJlY3RpdmVFbGVtZW50cyA9IFsuLi50aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UuZ2V0RGlyZWN0aXZlcygpLFxyXG4gICAgLi4udGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlU2VydmljZS5nZXREaXJlY3RpdmVzKClcclxuICAgIF07XHJcblxyXG4gICAgbGV0IHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzOiBQcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsW10gPSBbXVxyXG4gICAgbGV0IGF2YWlsYWJsZURpcmVjdGl2ZUVsZW1lbnRzID0gdGhpcy5kaXJlY3RpdmVFbGVtZW50cy5maWx0ZXIoeCA9PlxyXG4gICAgICAhKHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdD8ucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHMuc29tZSh5ID0+XHJcbiAgICAgICAgeS5ibG9ja05hbWUgPT09IHgucHJlc2VudGF0aW9uRGVzaWduZXIgJiYgIXkuaXNCbG9ja1Zpc2libGVcclxuICAgICAgKSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5pbml0VHNpR3JpZHNSZWYoKVxyXG5cclxuICAgIGF2YWlsYWJsZURpcmVjdGl2ZUVsZW1lbnRzPy5mb3JFYWNoKChkaXJlY3RpdmUpID0+IHtcclxuXHJcbiAgICAgIGxldCBjb25maWd1cmF0aW9uID0gdW5kZWZpbmVkXHJcblxyXG5cclxuICAgICAgbGV0IGdyaWRTdGF0ZSA9IFtcclxuICAgICAgICAuLi50aGlzLnZpZXdHcmlkc0NvbXBvbmVudHMsXHJcbiAgICAgICAgLi4udGhpcy5nZW5lcmljR3JpZHNDb21wb25lbnRzLFxyXG4gICAgICAgIC4uLnRoaXMuZ2VuZXJpY0NydWRzQ29tcG9uZW50cyxcclxuICAgICAgICAuLi50aGlzLmVkaXRhYmxlR3JpZENvbXBvbmVudHNcclxuICAgICAgXVxyXG4gICAgICAgIC5maW5kKHggPT4geC5pZCA9PT0gZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyIHx8ICgnZm9ybU5hbWUnIGluIHggJiYgeC5mb3JtTmFtZSA9PT0gZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyKSlcclxuICAgICAgICA/LmdldFN0YXRlKCk7XHJcblxyXG4gICAgICBjb25maWd1cmF0aW9uID0gZ3JpZFN0YXRlID8gSlNPTi5zdHJpbmdpZnkoZ3JpZFN0YXRlKSA6IHVuZGVmaW5lZDtcclxuXHJcblxyXG4gICAgICBsZXQgb2JqZWN0OiBQcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsID0ge1xyXG4gICAgICAgIGJsb2NrTmFtZTogZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyLFxyXG4gICAgICAgIGlzQmxvY2tWaXNpYmxlOiAhZGlyZWN0aXZlLnNob3dIaWRlQ2hlY2tib3hDb21wb25lbnRSZWY/Lmluc3RhbmNlPy5fY2hlY2tlZCxcclxuICAgICAgICB1aWQ6IHRoaXMuZ2V0UHJlc2VudGF0aW9uU2V0aW5nRGV0YWlsVWlkKGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lciA/PyBcIlwiKSxcclxuICAgICAgICBjb25maWd1cmF0aW9uOiBjb25maWd1cmF0aW9uLFxyXG4gICAgICAgIGlzSW5wdXRFbmFibGVkOiAhZGlyZWN0aXZlLmRpc2FibGVkQ2hlY2tib3hDb21wb25lbnRSZWY/Lmluc3RhbmNlPy5fY2hlY2tlZFxyXG4gICAgICB9XHJcbiAgICAgIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzLnB1c2gob2JqZWN0KVxyXG4gICAgfSlcclxuXHJcbiAgICBwcmVzZW50YXRpb25SZXF1ZXN0LmNvbXBvbmVudElkZW50aWZlciA9IHRoaXMuZ2V0Q29tcG9uZW50SWRlbnRpZmllcigpO1xyXG4gICAgcHJlc2VudGF0aW9uUmVxdWVzdC5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscyA9IHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzXHJcblxyXG4gICAgY29uc29sZS5sb2coXCJwcmVzZW50YXRpb25SZXF1ZXN0ID0+IFwiLCBwcmVzZW50YXRpb25SZXF1ZXN0KVxyXG4gICAgcmV0dXJuIHByZXNlbnRhdGlvblJlcXVlc3RcclxuICB9XHJcblxyXG5cclxuICBpc0RlbGV0ZU1vZGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5tb2RlID09IENvbXBvbmVudF9Nb2Rlcy5ERUxFVEU7XHJcbiAgfVxyXG4gIGlzU3VibWl0RGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICAvL3JldHVybiAhdGhpcy5mb3JtUmVmPy5mb3JtPy52YWxpZCB8fCB0aGlzLnNhdmluZztcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgaXNDb25zdWx0TW9kZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGUgPT0gQ29tcG9uZW50X01vZGVzLkNPTlNVTFQ7XHJcbiAgfVxyXG5cclxuICBpc0R1cGxpY2F0ZU1vZGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5tb2RlID09IENvbXBvbmVudF9Nb2Rlcy5EVVBMSUNBVEU7XHJcbiAgfVxyXG4gIGlzRWRpdE1vZGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5tb2RlID09IENvbXBvbmVudF9Nb2Rlcy5FRElUO1xyXG4gIH1cclxuICAvLyNyZWdpb24gcHJpdmF0ZSBtZXRob2RzXHJcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGluaXRNb2RhbERhdGEoKSB7XHJcbiAgICBzdXBlci5pbml0TW9kYWxEYXRhKClcclxuICAgIGlmICh0aGlzLm9wZW5lZERpYWxvZ1JlZiAhPSBudWxsXHJcbiAgICAgICYmIHRoaXMub3BlbmVkRGlhbG9nUmVmICE9IHVuZGVmaW5lZFxyXG4gICAgICAmJiB0aGlzLm9wZW5lZERpYWxvZ0NvbmZpZyAhPSBudWxsXHJcbiAgICAgICYmIHRoaXMub3BlbmVkRGlhbG9nQ29uZmlnICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAvL2NoZWNrIGhhdmUgb3BlbmVkRGlhbG9nQ29uZmlnXHJcbiAgICAgIGlmICh0aGlzLm9wZW5lZERpYWxvZ0NvbmZpZy5kYXRhICE9IG51bGwgJiYgdGhpcy5vcGVuZWREaWFsb2dDb25maWcuZGF0YSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLmN1ZENvbXBvbmVudCA9IHRoaXMub3BlbmVkRGlhbG9nQ29uZmlnLmRhdGEuY3VkQ29tcG9uZW50O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF92ZXJpZnlNb2RhbERhdGEoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5vcGVuZWREaWFsb2dSZWYgIT0gbnVsbFxyXG4gICAgICAmJiB0aGlzLm9wZW5lZERpYWxvZ1JlZiAhPSB1bmRlZmluZWRcclxuICAgICAgJiYgdGhpcy5vcGVuZWREaWFsb2dDb25maWcgIT0gbnVsbFxyXG4gICAgICAmJiB0aGlzLm9wZW5lZERpYWxvZ0NvbmZpZyAhPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0TW9kYWxSZWYoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fdmVyaWZ5TW9kYWxEYXRhKCkpIHtcclxuICAgICAgLy90aGlzLmJzTW9kYWxSZWYgPSB7aGlkZTogKCkgPT4gdGhpcy5vcGVuZWREaWFsb2dSZWYuZGVzdHJveSgpLGNsb3NlOiAodmFsOiBhbnkpPT57dGhpcy5vcGVuZWREaWFsb2dSZWYuY2xvc2UodmFsKX19XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vXHJcbiAgbChrZXk6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5sb2NhbGl6ZSAhPSBudWxsXHJcbiAgICAgICYmIHRoaXMubG9jYWxpemUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmxvY2FsaXplLnRyYW5zZm9ybShrZXkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGtleTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiB0cmFpdGVyIG11bHRpcGxlIGNvbWJvXHJcbiAgYWxsQ29tYm9Mb2FkaW5nU3RhdHVzOiBBcnJheTxDb21ib1N0YXR1c01vZGVsPiA9IFtdO1xyXG4gIGFyZUFsbENvbWJvTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJvY2Vzc0NvbWJvSW5pdEV2ZW50KGNvbWJvU3RhdHVzOiBDb21ib1N0YXR1c01vZGVsKSB7XHJcbiAgICBpZiAoIXRoaXMuYWxsQ29tYm9Mb2FkaW5nU3RhdHVzLmZpbmQodSA9PiB1LnVpZCA9PSBjb21ib1N0YXR1cy51aWQpKVxyXG4gICAgICB0aGlzLmFsbENvbWJvTG9hZGluZ1N0YXR1cy5wdXNoKGNvbWJvU3RhdHVzKTtcclxuICB9XHJcblxyXG4gIHByb2Nlc3NDb21ib0lzTG9hZGVkRXZlbnQoY29tYm9TdGF0dXM6IENvbWJvU3RhdHVzTW9kZWwpIHtcclxuICAgIGxldCBjb21ib1MgPSB0aGlzLmFsbENvbWJvTG9hZGluZ1N0YXR1cy5maW5kKHUgPT4gdS51aWQgPT0gY29tYm9TdGF0dXMudWlkKTtcclxuICAgIGlmIChjb21ib1MgIT0gbnVsbCAmJiBjb21ib1MgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbWJvUy5pc0RhdGFMb2FkZWQgPSBjb21ib1N0YXR1cy5pc0RhdGFMb2FkZWQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFyZUFsbENvbWJvTG9hZGVkRm4oKTtcclxuICB9XHJcblxyXG4gIGFyZUFsbENvbWJvTG9hZGVkRm4oKTogdm9pZCB7XHJcbiAgICBsZXQgcmVzdWx0OiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5hbGxDb21ib0xvYWRpbmdTdGF0dXMubGVuZ3RoID4gMClcclxuICAgICAgdGhpcy5hbGxDb21ib0xvYWRpbmdTdGF0dXMuZm9yRWFjaCh1ID0+IHtcclxuICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgdS5pc0RhdGFMb2FkZWQ7XHJcbiAgICAgIH0pO1xyXG4gICAgZWxzZSByZXN1bHQgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmFyZUFsbENvbWJvTG9hZGVkID0gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgbmV3IG1vZGFsIGhhbmRsaW5nIG1ldGhvZCAocmVzb2x2ZUZpY2hlKSBpbnN0ZWFkLlxyXG4gKiBUaGlzIG1ldGhvZCBkaXJlY3RseSBtYW5pcHVsYXRlcyB0aGUgZGlhbG9nIHJlZmVyZW5jZSBhbmQgbWF5IGxlYWQgdG8gaW5jb25zaXN0ZW50IGJlaGF2aW9yLlxyXG4gKi9cclxuXHJcbiAgaGlkZSh2YWw/OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLm9wZW5lZERpYWxvZ1JlZiAhPSBudWxsICYmIHRoaXMub3BlbmVkRGlhbG9nUmVmICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodmFsID09IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5vcGVuZWREaWFsb2dSZWYuZGVzdHJveSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMub3BlbmVkRGlhbG9nUmVmLmNsb3NlKHZhbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlc29sdmVGaWNoZSh2YWw/OiBhbnkpIHtcclxuICAgIGlmICghdGhpcy5fZm9ybVN0YXRlU2VydmljZS5jbG9zZU1vZGFsKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5oaWRlKHZhbClcclxuICB9XHJcblxyXG5cclxuXHJcbiAgLy8jZW5kcmVnaW9uIHRyYWl0ZXIgbXVsdGlwbGUgY29tYm9cclxuXHJcbiAgZ2V0V29ya2Zsb3dFdGF0Rm9ybSgpIHtcclxuICAgIGxldCB3b3JrZmxvd0V0YXRGb3JtID0gdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS53b3JrZmxvd0V0YXRGb3JtRm9yQ3VycmVudEZvcm1cclxuICAgICAgPy5maW5kKHggPT4geC51aWQgPT0gdGhpcy53b3JrZmxvd0luZm9ybWF0aW9uPy53b3JrZmxvd0V0YXQpXHJcblxyXG4gICAgaWYgKHdvcmtmbG93RXRhdEZvcm0pIHtcclxuICAgICAgbGV0IHdvcmtmbG93RXRhdCA9IHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UubWFwV29ya2Zsb3dFdGF0Rm9ybVRvUHJlc2VudGF0aW9uU2V0dGluZyhcclxuICAgICAgICB3b3JrZmxvd0V0YXRGb3JtPy53b3JrZmxvd0V0YXRzRm9ybXNcclxuICAgICAgKTtcclxuXHJcbiAgICAgIHJldHVybiB3b3JrZmxvd0V0YXRcclxuICAgIH1cclxuICAgIHJldHVybiB1bmRlZmluZWRcclxuICB9XHJcblxyXG4gIC8vICNyZWdpb24gUHJlc2VudGF0aW9uIFNldHRpbmdzXHJcbiAgYWRkSW5wdXRzKFxyXG4gICAgcHJlc2VudGF0aW9uUmVxdWVzdDogUHJlc2VudGF0aW9uU2V0dGluZyxcclxuICAgIGFwcGx5R3JpZENvbmZpZzogYm9vbGVhbiA9IHRydWUsXHJcbiAgICB3b3JrZmxvd0V0YXQ/OiBQcmVzZW50YXRpb25TZXR0aW5nLFxyXG4gICAgZGlyZWN0aXZlRWxlbWVudHM6IChQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZSB8IFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlQmFzZSlbXSA9IHRoaXMuZGlyZWN0aXZlRWxlbWVudHNcclxuICApOiB2b2lkIHtcclxuXHJcbiAgICBpZiAoKCF3b3JrZmxvd0V0YXQgfHwgd29ya2Zsb3dFdGF0LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzLmxlbmd0aCA9PSAwKVxyXG4gICAgICAmJiB0aGlzLndvcmtmbG93SW5mb3JtYXRpb25cclxuICAgICAgJiYgdGhpcy53b3JrZmxvd0luZm9ybWF0aW9uPy53b3JrZmxvd0V0YXQpIHtcclxuICAgICAgd29ya2Zsb3dFdGF0ID0gdGhpcy5nZXRXb3JrZmxvd0V0YXRGb3JtKClcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBoYXNQcmVzZW50YXRpb25SZXF1ZXN0ID0gcHJlc2VudGF0aW9uUmVxdWVzdD8ucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHM/Lmxlbmd0aCA+IDA7XHJcblxyXG5cclxuICAgIGlmIChoYXNQcmVzZW50YXRpb25SZXF1ZXN0KSB7XHJcbiAgICAgIGRpcmVjdGl2ZUVsZW1lbnRzID0gZGlyZWN0aXZlRWxlbWVudHMuZmlsdGVyKHggPT5cclxuICAgICAgICBwcmVzZW50YXRpb25SZXF1ZXN0LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzPy5zb21lKFxyXG4gICAgICAgICAgeSA9PiB5LmJsb2NrTmFtZSA9PT0geC5wcmVzZW50YXRpb25EZXNpZ25lciAmJiAoeS5pc0Jsb2NrVmlzaWJsZSA9PSB1bmRlZmluZWQgfHwgeS5pc0Jsb2NrVmlzaWJsZSA9PSB0cnVlKVxyXG4gICAgICAgICAgICAmJiB4LnRyZWF0ZWQgPT0gZmFsc2VcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlyZWN0aXZlRWxlbWVudHM/LmZvckVhY2goZGlyZWN0aXZlID0+IHtcclxuXHJcbiAgICAgIGNvbnN0IHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwgPSBwcmVzZW50YXRpb25SZXF1ZXN0LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzLmZpbmQoeCA9PiB4LmJsb2NrTmFtZSA9PSBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIpXHJcblxyXG4gICAgICBpZiAocHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbCA9PSB1bmRlZmluZWQgfHwgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbC5pc0Jsb2NrVmlzaWJsZSkge1xyXG5cclxuICAgICAgICBsZXQgd29yZmtmbG93RXRhdEZvcm0gPSB0aGlzLmdldFdvcmtmbG93RXRhdEZvcm0oKTtcclxuXHJcbiAgICAgICAgaWYgKHdvcmZrZmxvd0V0YXRGb3JtKSB7XHJcbiAgICAgICAgICBsZXQgd29ya2Zsb3dDb25maWcgPSB3b3Jma2Zsb3dFdGF0Rm9ybS5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscy5maW5kKHggPT4geC5ibG9ja05hbWUgPT0gZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyKVxyXG5cclxuICAgICAgICAgIGlmICghd29ya2Zsb3dDb25maWcpIHtcclxuICAgICAgICAgICAgZGlyZWN0aXZlLmV4ZWN1dGUodHJ1ZSwgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbD8uY29uZmlndXJhdGlvbilcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKHdvcmtmbG93Q29uZmlnICYmIHdvcmtmbG93Q29uZmlnLmlzQmxvY2tWaXNpYmxlICYmICh3b3JrZmxvd0NvbmZpZy5pc0lucHV0RW5hYmxlZCA9PSB1bmRlZmluZWQgfHwgd29ya2Zsb3dDb25maWcuaXNJbnB1dEVuYWJsZWQgPT0gdHJ1ZSkpIHtcclxuICAgICAgICAgICAgZGlyZWN0aXZlLmV4ZWN1dGUodHJ1ZSwgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbD8uY29uZmlndXJhdGlvbilcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKHdvcmtmbG93Q29uZmlnICYmIHdvcmtmbG93Q29uZmlnLmlzQmxvY2tWaXNpYmxlICYmIHdvcmtmbG93Q29uZmlnLmlzSW5wdXRFbmFibGVkID09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGRpcmVjdGl2ZS5kaXNhYmxlSW5wdXRzKClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBkaXJlY3RpdmUuZXhlY3V0ZSh0cnVlLCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsPy5jb25maWd1cmF0aW9uKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuaXNEZXNnaW5Nb2RlRnJvbVdvcmtmbG93KSB7XHJcbiAgICAgICAgICBkaXJlY3RpdmUuYWRkQ2hlY2tib3hlc1RvSW5wdXRzKHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2Uud29ya2Zsb3dGb3JtQ29uZmlndXJhdGlvbilcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5tb2RlID09PSBNb2Rlcy5jcmVhdGUpIHtcclxuICAgICAgdGhpcy5wcm9jZXNzRGlzYWJsZWRJbnB1dHMocHJlc2VudGF0aW9uUmVxdWVzdCwgZGlyZWN0aXZlRWxlbWVudHMpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICB0aGlzLnJlbW92ZUVtcHR5QW5jZXN0b3JzRnJvbUVsZW1lbnRzKCk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIHByb2Nlc3NEaXNhYmxlZElucHV0cyhwcmVzZW50YXRpb25SZXF1ZXN0OiBQcmVzZW50YXRpb25TZXR0aW5nLCBkaXJlY3RpdmVFbGVtZW50czogKFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlIHwgUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmVCYXNlKVtdID0gdGhpcy5kaXJlY3RpdmVFbGVtZW50cykge1xyXG4gICAgaWYgKHRoaXMuX2xheW91dEhlbHBlclNlcnZpY2U/LmlzRGVzaWduTW9kZSB8fCB0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmlzRGVzZ2luTW9kZUZyb21Xb3JrZmxvdykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGNvbnN0IGhhc1ByZXNlbnRhdGlvblJlcXVlc3QgPSBwcmVzZW50YXRpb25SZXF1ZXN0Py5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscz8ubGVuZ3RoID4gMDtcclxuXHJcbiAgICBpZiAoaGFzUHJlc2VudGF0aW9uUmVxdWVzdCkge1xyXG4gICAgICBkaXJlY3RpdmVFbGVtZW50cyA9IGRpcmVjdGl2ZUVsZW1lbnRzLmZpbHRlcih4ID0+XHJcbiAgICAgICAgcHJlc2VudGF0aW9uUmVxdWVzdC5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscz8uc29tZShcclxuICAgICAgICAgIHkgPT4geS5ibG9ja05hbWUgPT09IHgucHJlc2VudGF0aW9uRGVzaWduZXIgJiYgeS5pc0Jsb2NrVmlzaWJsZVxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgY29uc3Qgd29yZmtmbG93RXRhdEZvcm0gPSB0aGlzLmdldFdvcmtmbG93RXRhdEZvcm0oKVxyXG4gICAgZGlyZWN0aXZlRWxlbWVudHM/LmZvckVhY2goZGlyZWN0aXZlID0+IHtcclxuXHJcbiAgICAgIGxldCB3b3JrZmxvd0NvbmZpZyA9IHdvcmZrZmxvd0V0YXRGb3JtPy5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscy5maW5kKHggPT4geC5ibG9ja05hbWUgPT0gZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyKVxyXG5cclxuICAgICAgaWYgKHdvcmtmbG93Q29uZmlnICYmICF3b3JrZmxvd0NvbmZpZy5pc0lucHV0RW5hYmxlZCAmJiAod29ya2Zsb3dDb25maWcuaXNCbG9ja1Zpc2libGUgPz8gdHJ1ZSkpIHtcclxuICAgICAgICBkaXJlY3RpdmUuZGlzYWJsZUlucHV0cygpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICByZW1vdmVFbXB0eUFuY2VzdG9yc0Zyb21FbGVtZW50cygpIHtcclxuICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICB0aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UuZ2V0RGlyZWN0aXZlcygpLmZvckVhY2gocyA9PiBzLnJlbW92ZUVtcHR5QW5jZXN0b3JzKHM/LnRlbXBUZW1wbGF0ZVBhcmVudE5vZGUpKVxyXG4gICAgLy8gfSwgMCk7XHJcbiAgfVxyXG5cclxuICBnZXRQcmVzZW50YXRpb25TZXRpbmdEZXRhaWxVaWQoYmxvY2tOYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3Q/LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzPy5maW5kKHggPT4geC5ibG9ja05hbWUgPT0gYmxvY2tOYW1lKT8udWlkXHJcbiAgfVxyXG5cclxuICBnZXRDb21wb25lbnRJZGVudGlmaWVyKCkge1xyXG4gICAgLy8gaWYgKHRoaXMuZGVzY3JpbWluYXRvclZhbHVlKSB7XHJcbiAgICAvLyAgIHJldHVybiBgJHt0aGlzLl9teU5hbWUoKX1fJHt0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZX1gXHJcbiAgICAvLyB9XHJcbiAgICByZXR1cm4gdGhpcy5fbXlOYW1lKClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2F2ZVByb3BlcnRpZXMoKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5pbml0VHNpR3JpZHNSZWYoKVxyXG5cclxuICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCA9IHRoaXMuX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlLmdldFByZXNlbnRhdGlvblNldHRpbmdCeUNvbXBvbmVudElkZW50aWZpZXJTeW5jKHRoaXMuZ2V0Q29tcG9uZW50SWRlbnRpZmllcigpLCB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSkgPz8gbmV3IFByZXNlbnRhdGlvblNldHRpbmcoKVxyXG5cclxuICAgIGlmICghdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0KSB7XHJcbiAgICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCA9IG5ldyBQcmVzZW50YXRpb25TZXR0aW5nKClcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHM6IFByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxbXSA9IFtdXHJcblxyXG4gICAgdGhpcy5kaXJlY3RpdmVFbGVtZW50cz8uZm9yRWFjaCgoZGlyZWN0aXZlKSA9PiB7XHJcblxyXG4gICAgICBsZXQgY29uZmlndXJhdGlvbiA9IHVuZGVmaW5lZFxyXG5cclxuXHJcbiAgICAgIGxldCBncmlkU3RhdGUgPSBbXHJcbiAgICAgICAgLi4udGhpcy52aWV3R3JpZHNDb21wb25lbnRzLFxyXG4gICAgICAgIC4uLnRoaXMuZ2VuZXJpY0dyaWRzQ29tcG9uZW50cyxcclxuICAgICAgICAuLi50aGlzLmdlbmVyaWNDcnVkc0NvbXBvbmVudHMsXHJcbiAgICAgICAgLi4udGhpcy5lZGl0YWJsZUdyaWRDb21wb25lbnRzXHJcbiAgICAgIF1cclxuICAgICAgICAuZmluZCh4ID0+IHguaWQgPT09IGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lciB8fCAoJ2Zvcm1OYW1lJyBpbiB4ICYmIHguZm9ybU5hbWUgPT09IGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lcikpXHJcbiAgICAgICAgPy5nZXRTdGF0ZSgpO1xyXG5cclxuICAgICAgY29uZmlndXJhdGlvbiA9IGdyaWRTdGF0ZSA/IEpTT04uc3RyaW5naWZ5KGdyaWRTdGF0ZSkgOiB1bmRlZmluZWQ7XHJcblxyXG5cclxuICAgICAgbGV0IG9iamVjdDogUHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbCA9IHtcclxuICAgICAgICBibG9ja05hbWU6IGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lcixcclxuICAgICAgICBpc0Jsb2NrVmlzaWJsZTogIWRpcmVjdGl2ZS5zaG93SGlkZUNoZWNrYm94Q29tcG9uZW50UmVmPy5pbnN0YW5jZT8uX2NoZWNrZWQsXHJcbiAgICAgICAgdWlkOiB0aGlzLmdldFByZXNlbnRhdGlvblNldGluZ0RldGFpbFVpZChkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIgPz8gXCJcIiksXHJcbiAgICAgICAgY29uZmlndXJhdGlvbjogY29uZmlndXJhdGlvblxyXG4gICAgICB9XHJcbiAgICAgIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzLnB1c2gob2JqZWN0KVxyXG4gICAgfSlcclxuXHJcbiAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QuY29tcG9uZW50SWRlbnRpZmVyID0gdGhpcy5nZXRDb21wb25lbnRJZGVudGlmaWVyKCk7XHJcbiAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QuZGVzY3JpbWluYXRvclZhbHVlID0gdGhpcy5kZXNjcmltaW5hdG9yVmFsdWVcclxuICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdC5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscyA9IHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzXHJcblxyXG4gICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlXHJcblxyXG4gICAgaWYgKHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdC51aWQgIT0gbnVsbCAmJiB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QudWlkICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLl9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZS51cGRhdGVQcmVzZW50YXRpb25TZXR0aW5nKHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCwgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0LnVpZClcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IGFzeW5jIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvY2Vzc0FmdGVyU2F2ZUNvbmZpZ3VyYXRpb24oKVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpXHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yUmVzcG9uc2VNYW5hZ2VyLnNob3dFcnJvck1lc3NhZ2UoZXJyb3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UuY3JlYXRlUHJlc2VudGF0aW9uU2V0dGluZyh0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiBhc3luYyAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3NBZnRlclNhdmVDb25maWd1cmF0aW9uKClcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKVxyXG4gICAgICAgICAgICB0aGlzLl9lcnJvclJlc3BvbnNlTWFuYWdlci5zaG93RXJyb3JNZXNzYWdlKGVycm9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvY2Vzc1NpbmdsZUVsZW1lbnQoZGlyZWN0aXZlOiBQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZSB8IFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlQmFzZSkge1xyXG4gICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0ID0gdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UuZ2V0UHJlc2VudGF0aW9uU2V0dGluZ0J5Q29tcG9uZW50SWRlbnRpZmllclN5bmModGhpcy5nZXRDb21wb25lbnRJZGVudGlmaWVyKCksIHRoaXMuZGVzY3JpbWluYXRvclZhbHVlKSA/PyBuZXcgUHJlc2VudGF0aW9uU2V0dGluZygpXHJcbiAgICBsZXQgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbCA9IHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdD8ucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHM/LmZpbmQoeCA9PiB4LmJsb2NrTmFtZSA9PSBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIpXHJcblxyXG5cclxuICAgIGlmIChwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsID09IHVuZGVmaW5lZCB8fCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsLmlzQmxvY2tWaXNpYmxlKSB7XHJcblxyXG4gICAgICBsZXQgd29yZmtmbG93RXRhdEZvcm0gPSB0aGlzLmdldFdvcmtmbG93RXRhdEZvcm0oKTtcclxuXHJcbiAgICAgIGlmICh3b3Jma2Zsb3dFdGF0Rm9ybSkge1xyXG4gICAgICAgIGxldCB3b3JrZmxvd0NvbmZpZyA9IHdvcmZrZmxvd0V0YXRGb3JtLnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzLmZpbmQoeCA9PiB4LmJsb2NrTmFtZSA9PSBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIpXHJcblxyXG4gICAgICAgIGlmICghd29ya2Zsb3dDb25maWcpIHtcclxuICAgICAgICAgIGRpcmVjdGl2ZS5leGVjdXRlKHRydWUsIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWw/LmNvbmZpZ3VyYXRpb24pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHdvcmtmbG93Q29uZmlnICYmIHdvcmtmbG93Q29uZmlnLmlzQmxvY2tWaXNpYmxlICYmICh3b3JrZmxvd0NvbmZpZy5pc0lucHV0RW5hYmxlZCA9PSB1bmRlZmluZWQgfHwgd29ya2Zsb3dDb25maWcuaXNJbnB1dEVuYWJsZWQgPT0gdHJ1ZSkpIHtcclxuICAgICAgICAgIGRpcmVjdGl2ZS5leGVjdXRlKHRydWUsIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWw/LmNvbmZpZ3VyYXRpb24pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHdvcmtmbG93Q29uZmlnICYmIHdvcmtmbG93Q29uZmlnLmlzQmxvY2tWaXNpYmxlICYmIHdvcmtmbG93Q29uZmlnLmlzSW5wdXRFbmFibGVkID09IGZhbHNlKSB7XHJcbiAgICAgICAgICBkaXJlY3RpdmUuZGlzYWJsZUlucHV0cygpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGRpcmVjdGl2ZS5leGVjdXRlKHRydWUsIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWw/LmNvbmZpZ3VyYXRpb24pXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmlzRGVzZ2luTW9kZUZyb21Xb3JrZmxvdykge1xyXG4gICAgICAgIGRpcmVjdGl2ZS5hZGRDaGVja2JveGVzVG9JbnB1dHModGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS53b3JrZmxvd0Zvcm1Db25maWd1cmF0aW9uKVxyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHVuc3Vic2NyaWJlRnJvbUFjdGl2ZVN1YnNjcml0cGlvbigpIHtcclxuICAgIGlmICh0aGlzLl9kZXNpZ25Nb2RlRm9ybVN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLl9kZXNpZ25Nb2RlRm9ybVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX3NhdmVXb3JrZmxvd0Zvcm1Db25maWd1cmF0aW9uU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuX3NhdmVXb3JrZmxvd0Zvcm1Db25maWd1cmF0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fYWRkZWREaXJlY3RpdmVTdWJzY3JpdHBpb24pIHtcclxuICAgICAgdGhpcy5fYWRkZWREaXJlY3RpdmVTdWJzY3JpdHBpb24udW5zdWJzY3JpYmUoKVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9hZGRlZERpcmVjdGl2ZUJhc2VTdWJzY3JpdHBpb24pIHtcclxuICAgICAgdGhpcy5fYWRkZWREaXJlY3RpdmVCYXNlU3Vic2NyaXRwaW9uLnVuc3Vic2NyaWJlKClcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zYXZlZERhdGFTdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5zYXZlZERhdGFTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlVHNpTW9kYWxGb290ZXIoKSB7XHJcbiAgICBjb25zdCB0c2lNb2RhbEZvb3RlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJ0c2ktbW9kYWwtZm9vdGVyXCIpXHJcblxyXG4gICAgaWYgKHRzaU1vZGFsRm9vdGVyICYmIHRzaU1vZGFsRm9vdGVyLmxhc3RDaGlsZCkge1xyXG4gICAgICB0aGlzLl9yZW5kZXJlcj8ucmVtb3ZlQ2hpbGQodHNpTW9kYWxGb290ZXIsIHRzaU1vZGFsRm9vdGVyLmxhc3RDaGlsZClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNyZWF0ZVNhdmVCdXR0b24oKSB7XHJcbiAgICBjb25zdCB0c2lCdXR0b25SZWYgPSB0aGlzLl92aWV3Q29udGFpbmVyUmVmPy5jcmVhdGVDb21wb25lbnQoVHNpQnV0dG9uQ29tcG9uZW50KTtcclxuICAgIHRzaUJ1dHRvblJlZj8uc2V0SW5wdXQoJ3RleHQnLCAnc2hhcmVkX3RzaV9jb21wb25lbnRfc2F2ZV9jb25maWdfc2hvd19oaWRlJyk7XHJcbiAgICB0c2lCdXR0b25SZWY/LnNldElucHV0KCdpY29uJywgJ3NhdmUnKTtcclxuXHJcbiAgICB0c2lCdXR0b25SZWYhLmluc3RhbmNlLm9uQ2xpY2suZW1pdCA9ICgpID0+IHRoaXMuc2F2ZVByb3BlcnRpZXMoKTtcclxuXHJcbiAgICBjb25zdCB0c2lGb3JtID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcInRzaS1mb3JtXCIpXHJcblxyXG4gICAgaWYgKHRzaUZvcm0pIHtcclxuICAgICAgdGhpcy5fcmVuZGVyZXI/LmFwcGVuZENoaWxkKHRzaUZvcm0sIHRzaUJ1dHRvblJlZj8ubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBwcm9jZXNzQWZ0ZXJTYXZlQ29uZmlndXJhdGlvbigpIHtcclxuICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2VcclxuICAgIHRoaXMuaGlkZSgpXHJcbiAgICB0aGlzLl9tZXNzYWdlSW5mb1NlcnZpY2Uuc3VjY2VzcyhMb2NhbGl6YXRpb25LZXlzLnNhdmVkU3VjY2Vzc2Z1bGx5KVxyXG4gICAgdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5pc0Rlc2lnbk1vZGUgPSBmYWxzZVxyXG4gICAgLy8gdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5jdXJyZW50Rm9ybU5hbWUgPSB1bmRlZmluZWRcclxuICAgIHRoaXMuX2xheW91dEhlbHBlclNlcnZpY2UuX2Rlc2lnbk1vZGVGb3JtU3ViamVjdC5uZXh0KGZhbHNlKVxyXG4gICAgYXdhaXQgdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UubG9hZFByZXNlbnRhdGlvblNldHRpbmdzKCk7XHJcbiAgfVxyXG5cclxuICBzYXZlKCk6IHZvaWQge1xyXG4gICAgbGV0IGVycm9yTWVzc2FnZTogc3RyaW5nID0gJyc7XHJcblxyXG4gICAgdGhpcy5yZXF1aXJlZElucHV0cyA9IHRoaXMuX2lucHV0UmVnaXN0cnkuZ2V0QWxsKCkuZmlsdGVyKGlucCA9PiBpbnAuaXNSZXF1aXJlZCAmJiBpbnAuZGlzYWJsZWQgPT09IGZhbHNlKTtcclxuICAgIHRoaXMuZmF1bHR5SW5wdXRzID0gW107XHJcbiAgICB0aGlzLmlzRm9ybVZhbGlkID0gdGhpcy5yZXF1aXJlZElucHV0cy5ldmVyeShpbnB1dCA9PiBpbnB1dC5pc1ZhbGlkKCkuaXNWYWxpZCA9PT0gdHJ1ZSlcclxuXHJcbiAgICB0aGlzLnJlcXVpcmVkSW5wdXRzLmZvckVhY2goaW5wdXQgPT4ge1xyXG4gICAgICBsZXQgZnZyID0gaW5wdXQuaXNWYWxpZCgpO1xyXG4gICAgICBpZiAoZnZyLmlzVmFsaWQgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5mYXVsdHlJbnB1dHMucHVzaChmdnIpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gICAgaWYgKHRoaXMuaXNGb3JtVmFsaWQgPT09IGZhbHNlICYmIHRoaXMuZmF1bHR5SW5wdXRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc29sZS5sb2codGhpcy5mYXVsdHlJbnB1dHMpXHJcbiAgICAgIGxldCBmYXVsdHlJbnB1dHNOYW1lcyA9IFwiXCI7XHJcbiAgICAgIHRoaXMuZmF1bHR5SW5wdXRzLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgaWYgKGluZGV4ID09PSB0aGlzLmZhdWx0eUlucHV0cy5sZW5ndGggLSAxKVxyXG4gICAgICAgICAgZmF1bHR5SW5wdXRzTmFtZXMgKz0gYCR7aXRlbS5pbnB1dE5hbWV9LiBgXHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgZmF1bHR5SW5wdXRzTmFtZXMgKz0gYCR7aXRlbS5pbnB1dE5hbWV9LCBgXHJcbiAgICAgIH0pXHJcbiAgICAgIGZhdWx0eUlucHV0c05hbWVzID0gZmF1bHR5SW5wdXRzTmFtZXMucmVwbGFjZSgvLCQvLCAnJyk7XHJcbiAgICAgIGlmICh0aGlzLmZhdWx0eUlucHV0cy5zb21lKGZpID0+IGZpLmVycm9yID09PSBGb3JtVmFsaWRhdGlvbkVycm9yLlJlcXVpcmVkKSkge1xyXG4gICAgICAgIHRoaXMuX21lc3NhZ2VJbmZvU2VydmljZS53YXJuKGZhdWx0eUlucHV0c05hbWVzLCB0aGlzLmxvY2FsaXplPy50cmFuc2Zvcm0oJ3RzaV9mb3JtX2Jhc2VfYXV0b192YWxpZGF0aW9uX3JlcXVpcmVkX2ZpZWxkX3RpdGxlJykpXHJcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gYExlcyBjaGFtcHMgJHtmYXVsdHlJbnB1dHNOYW1lc30gc29udCBvYmxpZ2F0b2lyZS5gO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuZmF1bHR5SW5wdXRzLnNvbWUoZmkgPT4gZmkuZXJyb3IgPT09IEZvcm1WYWxpZGF0aW9uRXJyb3IuTWF4TGVuZ3RoKSkge1xyXG4gICAgICAgIHRoaXMuX21lc3NhZ2VJbmZvU2VydmljZS53YXJuKGBcclxuICAgICAgICAgICR7dGhpcy5sb2NhbGl6ZT8udHJhbnNmb3JtKCd0c2lfZm9ybV9iYXNlX2F1dG9fdmFsaWRhdGlvbl90aGVfZmllbGQnKX1cclxuICAgICAgICAgICR7dGhpcy5mYXVsdHlJbnB1dHNbMF0uaW5wdXROYW1lfSBcclxuICAgICAgICAgICR7dGhpcy5sb2NhbGl6ZT8udHJhbnNmb3JtKCd0c2lfZm9ybV9iYXNlX2F1dG9fdmFsaWRhdGlvbl9tYXhfbGVuZ3RoJyl9XHJcbiAgICAgICAgICAke3RoaXMuZmF1bHR5SW5wdXRzWzBdLmRhdGF9ICR7dGhpcy5sb2NhbGl6ZT8udHJhbnNmb3JtKCd0c2lfZm9ybV9iYXNlX2F1dG9fdmFsaWRhdGlvbl9tYXhfbGVuZ3RoX2NoYXJzJyl9YCxcclxuICAgICAgICAgIHRoaXMubG9jYWxpemU/LnRyYW5zZm9ybSgndHNpX2Zvcm1fYmFzZV9hdXRvX3ZhbGlkYXRpb25fbWF4X2xlbmd0aF9maWVsZF90aXRsZScpKVxyXG4gICAgICAgIGVycm9yTWVzc2FnZSA9IGBMZSBjaGFtcCAke3RoaXMuZmF1bHR5SW5wdXRzWzBdLmlucHV0TmFtZX0gbmUgZG9pdCBwYXMgZMOpcGFzc2VyICR7dGhpcy5mYXVsdHlJbnB1dHNbMF0uZGF0YX0gY2FyYWN0w6hyZXMuYDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLmZhdWx0eUlucHV0cy5zb21lKGZpID0+IGZpLmVycm9yID09PSBGb3JtVmFsaWRhdGlvbkVycm9yLk91dE9mUmFuZ2UpKSB7XHJcbiAgICAgICAgLy90byBkb1xyXG4gICAgICAgIGVycm9yTWVzc2FnZSA9IGBMZSBjaGFtcCAke3RoaXMuZmF1bHR5SW5wdXRzWzBdLmlucHV0TmFtZX0gZG9pdCDDqnRyZSBkYW5zIGwnaW50ZXJ2YWxsZS5gO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnVwZGF0ZUZvcm1TdGF0ZSh7IGlzVmFsaWQ6IGZhbHNlLCBpc1N1Ym1pdHRlZDogdHJ1ZSB9KTtcclxuXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBkYXRlRm9ybVN0YXRlKHsgaXNWYWxpZDogdHJ1ZSwgaXNTdWJtaXR0ZWQ6IHRydWUgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUZvcm1TdGF0ZShmb3JtU3RhdGU6IEZvcm1TdGF0ZSk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLl9nZW5lcmljVmFsaWRhdGlvblN0YXRlU2VydmljZSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuX2dlbmVyaWNWYWxpZGF0aW9uU3RhdGVTZXJ2aWNlLnVwZGF0ZUZvcm1TdGF0ZShmb3JtU3RhdGUpO1xyXG5cclxuICAgIHRoaXMuZWRpdGFibGVHcmlkQ29tcG9uZW50cyA9IHRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXRFZGl0YWJsZUdyaWRzKCk7XHJcbiAgICB0aGlzLmVkaXRhYmxlR3JpZENvbXBvbmVudHMuZm9yRWFjaCgoZSkgPT4gZS51cGRhdGVGb3JtU3RhdGUoZm9ybVN0YXRlKSk7XHJcbiAgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxufVxyXG4iLCI8cD50c2ktZm9ybS1iYXNlIHdvcmtzITwvcD5cclxuIl19
695
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWZvcm0tYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWJhc2UvY29tcG9uZW50cy90c2ktZm9ybS1iYXNlL3RzaS1mb3JtLWJhc2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3RzaS1iYXNlL2NvbXBvbmVudHMvdHNpLWZvcm0tYmFzZS90c2ktZm9ybS1iYXNlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBMkUsU0FBUyxFQUFjLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJN08sT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBc0IsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakcsT0FBTyxFQUEwQixtQkFBbUIsRUFBa0UsTUFBTSxpQkFBaUIsQ0FBQztBQUM5SSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUE4QiwyQkFBMkIsRUFBRSw2QkFBNkIsRUFBRSxvQkFBb0IsRUFBRSxtQkFBbUIsRUFBRSwyQkFBMkIsRUFBRSwwQkFBMEIsRUFBb0Isc0JBQXNCLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2UyxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSwyRUFBMkUsQ0FBQztBQUM1SCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyRUFBMkUsQ0FBQztBQUUvRyxPQUFPLEVBQUUsb0JBQW9C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SUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFTyxlQUFlLENBQUMsU0FBb0I7UUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyw4QkFBOEI7WUFBRSxPQUFPO1FBRWpELElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFL0QsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ25GLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDOytHQWgxQlUsNkJBQTZCO21HQUE3Qiw2QkFBNkIsd1JBcUU3QixnQkFBZ0IsOEVBR2hCLHVCQUF1Qiw4REFFcEIsb0JBQW9CLHVFQ3pHcEMsaUNBQ0E7OzRGRDhCYSw2QkFBNkI7a0JBTHpDLFNBQVM7K0JBQ0UsbUJBQW1CO3VKQXlFQSxJQUFJO3NCQUFoQyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFHUyxXQUFXO3NCQUE5QyxTQUFTO3VCQUFDLHVCQUF1QjtnQkFFRSxRQUFRO3NCQUEzQyxZQUFZO3VCQUFDLG9CQUFvQjtnQkF1QnpCLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0YsSUFBSTtzQkFEUCxLQUFLO2dCQVFHLEVBQUU7c0JBQVYsS0FBSztnQkFJRixTQUFTO3NCQURaLEtBQUs7Z0JBY0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBTU8sTUFBTTtzQkFBbEIsS0FBSztnQkE2QkksTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJDb250ZW50Q2hlY2tlZCwgQWZ0ZXJWaWV3Q2hlY2tlZCwgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBSZW5kZXJlcjIsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRHluYW1pY0RpYWxvZ0NvbmZpZywgRHluYW1pY0RpYWxvZ1JlZiB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25LZXlzIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50X01vZGVzLCBGb3JtVmFsaWRhdGlvbkVycm9yLCBGb3JtVmFsaWRpdHlSZXN1bHQsIE1vZGVzIH0gZnJvbSAnLi4vLi4vLi4vZW51bXMnO1xyXG5pbXBvcnQgeyBDb21ib1N0YXR1c01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IENvbXBvbmVudERlc2NyaW1pbmF0b3IsIFByZXNlbnRhdGlvblNldHRpbmcsIFByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwsIHdvcmtmbG93SW5zdGFuY2VJbmZvcm1hdGlvblJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgTG9jYWxpemVQaXBlIH0gZnJvbSAnLi4vLi4vLi4vcGlwZXMvbG9jYWxpemUucGlwZSc7XHJcbmltcG9ydCB7IEVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlLCBFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UsIEdlbmVyaWNWYWxpZGF0aW9uU3RhdGVTZXJ2aWNlLCBJbnB1dFJlZ2lzdHJ5U2VydmljZSwgTGF5b3V0SGVscGVyU2VydmljZSwgUHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLCBQcmVzZW50YXRpb25TZXR0aW5nU2VydmljZSwgUmVwb3J0aW5nU2VydmljZSwgVHNpTm90aWZpY2F0aW9uU2VydmljZSwgV29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgUHJlc2VudGF0aW9uRGVzaWduZXJCYXNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3ByZXNlbnRhdGlvbi1zZXR0aW5nL3ByZXNlbnRhdGlvbi1kZXNpZ25lci1iYXNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUc2lCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90c2ktY29tcG9uZW50cy9idXR0b24tY29tcG9uZW50cy90c2ktYnV0dG9uL3RzaS1idXR0b24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgRWRpdGFibGVHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdHNpLWNvbXBvbmVudHMvaW5wdXQtY29tcG9uZW50cy9lZGl0YWJsZS1ncmlkL2VkaXRhYmxlLWdyaWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHNpQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90c2ktY29tcG9uZW50cy9pbnB1dC1jb21wb25lbnRzL3RzaS1jaGVja2JveC90c2ktY2hlY2tib3guY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHNpR2VuZXJpY0dyaWRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90c2ktY29tcG9uZW50cy9vdXRwdXQtY29tcG9uZW50cy90c2ktZ2VuZXJpYy1ncmlkL3RzaS1nZW5lcmljLWdyaWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHNpVmlld0dyaWRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90c2ktY29tcG9uZW50cy9vdXRwdXQtY29tcG9uZW50cy90c2ktdmlldy1ncmlkL3RzaS12aWV3LWdyaWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHNpRm9ybUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3RzaS1jb21wb25lbnRzL3RzaS1mb3JtL3RzaS1mb3JtLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRzaUdlbmVyaWNDcnVkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdHNpLWNvbXBvbmVudHMvdHNpLWdlbmVyaWMtY3J1ZC90c2ktZ2VuZXJpYy1jcnVkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlLCBQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZUJhc2UgfSBmcm9tICcuLi8uLi8uLi90c2ktZGlyZWN0aXZlcyc7XHJcbmltcG9ydCB7IFRzaUlucHV0QmFzZSB9IGZyb20gJy4uLy4uL3RzaS1pbnB1dC1iYXNlL3RzaS1pbnB1dC1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFwcEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9hcHAtYmFzZS9hcHAtYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGb3JtU3RhdGUgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZm9ybS9mb3JtLXN0YXRlJztcclxuaW1wb3J0IHsgVHNpTW9kYWxGb290ZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90c2ktY29tcG9uZW50cy90c2ktbW9kYWwtZm9vdGVyL3RzaS1tb2RhbC1mb290ZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRm9ybVN0YXRlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Zvcm0vZm9ybS1zdGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29sb25uZVBlcnNvbm5hbGlzZWVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZHluYW1pYy1mb3JtL2NvbG9ubmUtcGVyc29ubmFsaXNlZS5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXRzaS1mb3JtLWJhc2UnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90c2ktZm9ybS1iYXNlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90c2ktZm9ybS1iYXNlLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFRzaUZvcm1Db21wb25lbnRCYXNlQ29tcG9uZW50IGV4dGVuZHMgQXBwQmFzZUNvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRDaGVja2VkLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0NoZWNrZWQge1xyXG4gIC8vI3JlZ2lvbiBwcm9wZXJ0aWVzXHJcbiAgcHVibGljIG92ZXJyaWRlIGdldCBmb3JtRW5kcG9pbnQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBzdXBlci5mb3JtRW5kcG9pbnQ7XHJcbiAgfTtcclxuICBwcml2YXRlIG92ZXJyaWRlIHNldCBmb3JtRW5kcG9pbnQoZW5kcG9pbnQ6IHN0cmluZykge1xyXG4gICAgc3VwZXIuZm9ybUVuZHBvaW50ID0gYCR7ZW5kcG9pbnR9LyR7dGhpcy5pZH1gO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG92ZXJyaWRlIGdldCBidXNpbmVzc0NsYXNzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2J1c2luZXNzQ2xhc3M7XHJcbiAgfVxyXG4gIHB1YmxpYyBvdmVycmlkZSBzZXQgYnVzaW5lc3NDbGFzcyh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9idXNpbmVzc0NsYXNzID0gdmFsdWU7XHJcbiAgICB0aGlzLmZvcm1FbmRwb2ludCA9IHRoaXMuYnVzaW5lc3NDbGFzcztcclxuICAgIHRoaXMuX2dlbmVyaWNWYWxpZGF0aW9uU3RhdGVTZXJ2aWNlPy5sb2FkRW50aXR5VmFsaWRhdGlvbkluZm9zKHRoaXMuX2J1c2luZXNzQ2xhc3MpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY29tcG9uZW50RGVzY3JpbWluYXRvcjogQ29tcG9uZW50RGVzY3JpbWluYXRvciB8IHVuZGVmaW5lZFxyXG4gIHByaXZhdGUgZGVzY3JpbWluYXRvclZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWRcclxuXHJcbiAgcHJvdGVjdGVkIHNldCBjb21wb25lbnREZXNjcmltaW5hdG9yKHZhbHVlOiBDb21wb25lbnREZXNjcmltaW5hdG9yIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9jb21wb25lbnREZXNjcmltaW5hdG9yID0gdmFsdWVcclxuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5wcm9wZXJ0eVZhbHVlKSB7XHJcbiAgICAgIGlmICh0aGlzLmZvcm0pIHtcclxuICAgICAgICB0aGlzLmZvcm0uZGVzY3JpbWluYXRvclZhbHVlID0gdmFsdWUucHJvcGVydHlWYWx1ZVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZGVzY3JpbWluYXRvclZhbHVlID0gdmFsdWUucHJvcGVydHlWYWx1ZVxyXG4gICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QgPSB0aGlzLl9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZS5nZXRQcmVzZW50YXRpb25TZXR0aW5nQnlDb21wb25lbnRJZGVudGlmaWVyU3luYyh0aGlzLmdldENvbXBvbmVudElkZW50aWZpZXIoKSxcclxuICAgICAgICB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSkgPz8gbmV3IFByZXNlbnRhdGlvblNldHRpbmcoKVxyXG4gICAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzID0gWy4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXREaXJlY3RpdmVzKCksXHJcbiAgICAgIC4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZVNlcnZpY2UuZ2V0RGlyZWN0aXZlcygpXHJcbiAgICAgIF07XHJcbiAgICAgIHRoaXMuYWRkSW5wdXRzKHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCwgIXRoaXMuX2xheW91dEhlbHBlclNlcnZpY2U/LmlzRGVzaWduTW9kZSlcclxuXHJcbiAgICAgIC8vIHRoaXMuX3JlcG9ydGluZ1NlcnZpY2UuZ2V0UmVwb3J0RGVjcmltaW5hdG9yKHJlcSkuc3Vic2NyaWJlKHtcclxuICAgICAgLy8gICBuZXh0OiBhc3luYyAocmVzdWx0KSA9PiB7XHJcbiAgICAgIC8vICAgICB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSA9IHJlc3VsdC5wcm9wZXJ0eVZhbHVlO1xyXG4gICAgICAvLyAgICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0ID0gdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UuZ2V0UHJlc2VudGF0aW9uU2V0dGluZ0J5Q29tcG9uZW50SWRlbnRpZmllclN5bmModGhpcy5nZXRDb21wb25lbnRJZGVudGlmaWVyKCkpID8/IG5ldyBQcmVzZW50YXRpb25TZXR0aW5nKClcclxuICAgICAgLy8gICAgIGlmICh0aGlzLmZvcm0pIHtcclxuICAgICAgLy8gICAgICAgdGhpcy5mb3JtLmRlc2NyaW1pbmF0b3JWYWx1ZSA9IHJlc3VsdC5wcm9wZXJ0eVZhbHVlXHJcbiAgICAgIC8vICAgICAgIGlmICh0aGlzLmVudGl0eUluZm8/LmlzV29ya2Zsb3cpIHtcclxuICAgICAgLy8gICAgICAgICBhd2FpdCB0aGlzLmZvcm0uZ2V0V29ya2Zsb3dFbnRpdHlJbmZvcm1hdGlvbih0aGlzLmJ1c2luZXNzQ2xhc3MsIHRoaXMuaWQsIHRoaXMuZW50aXR5SW5mbz8uZGlzY3JpbWluYXRvckNsYXNzTmFtZSxcclxuICAgICAgLy8gICAgICAgICAgIHRoaXMuZW50aXR5SW5mbz8uZGlzY3JpbWluYXRvclByb3BlcnR5TmFtZSlcclxuICAgICAgLy8gICAgICAgfVxyXG4gICAgICAvLyAgICAgfVxyXG4gICAgICAvLyAgICAgdGhpcy5hZGRJbnB1dHModGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0LCAhdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZT8uaXNEZXNpZ25Nb2RlKVxyXG4gICAgICAvLyAgIH0sXHJcbiAgICAgIC8vICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAvLyAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgLy8gICB9LFxyXG4gICAgICAvLyB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5mb3JtKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLmRlc2NyaW1pbmF0b3JWYWx1ZSA9IHVuZGVmaW5lZFxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0IGNvbXBvbmVudERlc2NyaW1pbmF0b3IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29tcG9uZW50RGVzY3JpbWluYXRvclxyXG4gIH1cclxuXHJcblxyXG4gIEBWaWV3Q2hpbGQoVHNpRm9ybUNvbXBvbmVudCkgZm9ybT86IFRzaUZvcm1Db21wb25lbnQ7XHJcblxyXG5cclxuICBAVmlld0NoaWxkKFRzaU1vZGFsRm9vdGVyQ29tcG9uZW50KSBtb2RhbEZvb3Rlcj86IFRzaU1vZGFsRm9vdGVyQ29tcG9uZW50IHwgYW55O1xyXG5cclxuICBAVmlld0NoaWxkcmVuKFRzaUNoZWNrYm94Q29tcG9uZW50KSBjaGVja2JveD86IEFycmF5PFRzaUNoZWNrYm94Q29tcG9uZW50PjtcclxuXHJcbiAgZmF1bHR5SW5wdXRzOiBGb3JtVmFsaWRpdHlSZXN1bHRbXSA9IFtdO1xyXG4gIGlzRm9ybVZhbGlkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xyXG4gIHJlcXVpcmVkSW5wdXRzOiBUc2lJbnB1dEJhc2VbXSA9IFtdO1xyXG4gIC8vIEBWaWV3Q2hpbGRyZW4oRWRpdGFibGVHcmlkQ29tcG9uZW50KSBlZGl0YWJsZUdyaWRDb21wb25lbnRzITogUXVlcnlMaXN0PEVkaXRhYmxlR3JpZENvbXBvbmVudD47XHJcblxyXG4gIC8vIEBWaWV3Q2hpbGRyZW4oVHNpVmlld0dyaWRDb21wb25lbnQpIHZpZXdHcmlkc0NvbXBvbmVudHMhOiBRdWVyeUxpc3Q8VHNpVmlld0dyaWRDb21wb25lbnQ+O1xyXG4gIC8vIEBWaWV3Q2hpbGRyZW4oVHNpR2VuZXJpY0dyaWRDb21wb25lbnQpIGdlbmVyaWNHcmlkc0NvbXBvbmVudHMhOiBRdWVyeUxpc3Q8VHNpR2VuZXJpY0dyaWRDb21wb25lbnQ+O1xyXG4gIC8vIEBWaWV3Q2hpbGRyZW4oVHNpR2VuZXJpY0NydWRDb21wb25lbnQpIGdlbmVyaWNDcnVkc0NvbXBvbmVudHMhOiBRdWVyeUxpc3Q8VHNpR2VuZXJpY0NydWRDb21wb25lbnQ+O1xyXG4gIGVkaXRhYmxlR3JpZENvbXBvbmVudHM6IEFycmF5PEVkaXRhYmxlR3JpZENvbXBvbmVudD4gPSBbXTtcclxuICB2aWV3R3JpZHNDb21wb25lbnRzOiBBcnJheTxUc2lWaWV3R3JpZENvbXBvbmVudD4gPSBbXTtcclxuICBnZW5lcmljR3JpZHNDb21wb25lbnRzOiBBcnJheTxUc2lHZW5lcmljR3JpZENvbXBvbmVudD4gPSBbXTtcclxuICBnZW5lcmljQ3J1ZHNDb21wb25lbnRzOiBBcnJheTxUc2lHZW5lcmljQ3J1ZENvbXBvbmVudD4gPSBbXTtcclxuXHJcblxyXG4gIGZvcm1SZWY/OiBOZ0Zvcm07XHJcbiAgaXNGb3JtRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjdWRDb21wb25lbnQ6IGFueTtcclxuICBwcml2YXRlIF9tb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBJbnB1dHNcclxuICBASW5wdXQoKSBpdGVtRGlhbG9nOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IG1vZGUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9tb2RlO1xyXG4gIH1cclxuICBzZXQgbW9kZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9tb2RlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBpZD86IHN0cmluZztcclxuICBwcml2YXRlIF9pc2xvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgaXNsb2FkaW5nKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9pc2xvYWRpbmcgPSB2YWx1ZTtcclxuICAgIGNvbnNvbGUubG9nKCdpc2xvYWRpbmcgc2V0IHRvJywgdmFsdWUpO1xyXG4gICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnByb2Nlc3NEaXNhYmxlZElucHV0cyh0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QpXHJcbiAgICAgIH0sIDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGlzbG9hZGluZygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pc2xvYWRpbmc7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIGhlYWRlcj86IHN0cmluZztcclxuICBASW5wdXQoKSBzYXZpbmcgPSBmYWxzZTtcclxuICBASW5wdXQoKSBpdGVtOiBhbnk7XHJcblxyXG4gIHByaXZhdGUgX3N0YXR1cz86IHN0cmluZyA9ICcnO1xyXG4gIGdldCBzdGF0dXMoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGF0dXM7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIHNldCBzdGF0dXModmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fc3RhdHVzID0gdmFsdWU7XHJcbiAgICBpZiAodGhpcy5mb3JtICYmIHRoaXMuZm9ybS5zdGF0dXMgIT09IHRoaXMuX3N0YXR1cykge1xyXG4gICAgICB0aGlzLmZvcm0uc3RhdHVzID0gdGhpcy5fc3RhdHVzO1xyXG4gICAgfVxyXG4gIH1cclxuICAvL2JzTW9kYWxSZWY/OiBhbnk7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIHByaXZhdGUgX3ZpZXdDb250YWluZXJSZWYgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZilcclxuICBwcml2YXRlIF9yZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpXHJcbiAgcHJpdmF0ZSBfbGF5b3V0SGVscGVyU2VydmljZSA9IGluamVjdChMYXlvdXRIZWxwZXJTZXJ2aWNlKVxyXG4gIHByaXZhdGUgX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UgPSBpbmplY3QoV29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZSlcclxuICBwcml2YXRlIF9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZSA9IGluamVjdChQcmVzZW50YXRpb25TZXR0aW5nU2VydmljZSlcclxuICBwcml2YXRlIF9tZXNzYWdlSW5mb1NlcnZpY2UgPSBpbmplY3QoVHNpTm90aWZpY2F0aW9uU2VydmljZSlcclxuICBwcml2YXRlIF9lcnJvclJlc3BvbnNlTWFuYWdlciA9IGluamVjdChFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UpXHJcbiAgcHJpdmF0ZSBfcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlID0gaW5qZWN0KFByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZSlcclxuICBwcml2YXRlIF9wcmVzZW50YXRpb25EZXNpZ25lckJhc2VTZXJ2aWNlID0gaW5qZWN0KFByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZVNlcnZpY2UpXHJcbiAgcHVibGljIGxvY2FsaXplPyA9IGluamVjdChMb2NhbGl6ZVBpcGUpXHJcbiAgcHVibGljIF9pbnB1dFJlZ2lzdHJ5ID0gaW5qZWN0KElucHV0UmVnaXN0cnlTZXJ2aWNlKVxyXG4gIHByaXZhdGUgX2Zvcm1TdGF0ZVNlcnZpY2UgPSBpbmplY3QoRm9ybVN0YXRlU2VydmljZSlcclxuICBwcml2YXRlIF9jb2xvbm5lUGVyc29ubmFsaXNlZVNlcnZpY2UgPSBpbmplY3QoQ29sb25uZVBlcnNvbm5hbGlzZWVTZXJ2aWNlKVxyXG4gIHByaXZhdGUgZGlyZWN0aXZlRWxlbWVudHM6IChQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZSB8IFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlQmFzZSlbXSA9IFtdO1xyXG4gIHByZXNlbnRhdGlvblJlcXVlc3Q6IFByZXNlbnRhdGlvblNldHRpbmcgPSBuZXcgUHJlc2VudGF0aW9uU2V0dGluZygpXHJcbiAgX2Rlc2lnbk1vZGVGb3JtU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XHJcbiAgX3NhdmVXb3JrZmxvd0Zvcm1Db25maWd1cmF0aW9uU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWRcclxuICBfYWRkZWREaXJlY3RpdmVTdWJzY3JpdHBpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZFxyXG4gIF9hZGRlZERpcmVjdGl2ZUJhc2VTdWJzY3JpdHBpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZFxyXG4gIC8vI3JlZ2lvbiBPdXRwdXRzXHJcbiAgQE91dHB1dCgpIG9uU2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBwcml2YXRlIF9nZW5lcmljVmFsaWRhdGlvblN0YXRlU2VydmljZT86IEdlbmVyaWNWYWxpZGF0aW9uU3RhdGVTZXJ2aWNlID0gaW5qZWN0KEdlbmVyaWNWYWxpZGF0aW9uU3RhdGVTZXJ2aWNlKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgcmVmPzogRHluYW1pY0RpYWxvZ1JlZixcclxuICAgIHB1YmxpYyBjb25maWc/OiBEeW5hbWljRGlhbG9nQ29uZmlnLFxyXG4gICAgcHVibGljIG92ZXJyaWRlIGNkUmVmPzogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcclxuICAgIHN1cGVyKGNkUmVmKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBpc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHdvcmtmbG93SW5mb3JtYXRpb24/OiB3b3JrZmxvd0luc3RhbmNlSW5mb3JtYXRpb25SZXNwb25zZVxyXG4gIGN1c3RvbURhdGE/OiBhbnlcclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIG92ZXJyaWRlIG5nT25Jbml0KCkge1xyXG4gICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgIHRoaXMuX2luaXRNb2RhbFJlZigpO1xyXG4gICAgdGhpcy5pbml0TW9kYWxEYXRhKCk7XHJcbiAgICB0aGlzLl9hZGRlZERpcmVjdGl2ZVN1YnNjcml0cGlvbiA9IHRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5hZGRlZERpcmVjdGl2ZU9ic2VydmFibGVcclxuICAgICAgLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICBpZiAoZGF0YS50cmVhdGVkKSB7XHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmlzRGVzZ2luTW9kZUZyb21Xb3JrZmxvdykge1xyXG4gICAgICAgICAgdGhpcy5lbnRpdHlJbmZvID0gdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5jdXJyZW50V29ya2Zsb3dFbnRpdHlJbmZvXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuZW50aXR5SW5mbz8uZGlzY3JpbWluYXRvclByb3BlcnR5TmFtZSAmJiAhdGhpcy5lbnRpdHlJbmZvPy5kaXNjcmltaW5hdG9yQ2xhc3NOYW1lKSB7XHJcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTaW5nbGVFbGVtZW50KGRhdGEpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuZGVzY3JpbWluYXRvclZhbHVlKSB7XHJcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTaW5nbGVFbGVtZW50KGRhdGEpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG5cclxuICAgIHRoaXMuX2FkZGVkRGlyZWN0aXZlQmFzZVN1YnNjcml0cGlvbiA9IHRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZVNlcnZpY2UuYWRkZWREaXJlY3RpdmVPYnNlcnZhYmxlXHJcbiAgICAgIC5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGEudHJlYXRlZCkge1xyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5pc0Rlc2dpbk1vZGVGcm9tV29ya2Zsb3cpIHtcclxuICAgICAgICAgIHRoaXMuZW50aXR5SW5mbyA9IHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuY3VycmVudFdvcmtmbG93RW50aXR5SW5mb1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmVudGl0eUluZm8/LmRpc2NyaW1pbmF0b3JQcm9wZXJ0eU5hbWUgJiYgIXRoaXMuZW50aXR5SW5mbz8uZGlzY3JpbWluYXRvckNsYXNzTmFtZSkge1xyXG4gICAgICAgICAgdGhpcy5wcm9jZXNzU2luZ2xlRWxlbWVudChkYXRhKVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSkge1xyXG4gICAgICAgICAgdGhpcy5wcm9jZXNzU2luZ2xlRWxlbWVudChkYXRhKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuXHJcbiAgICB0aGlzLl9kZXNpZ25Nb2RlRm9ybVN1YnNjcmlwdGlvbiA9IHRoaXMuX2xheW91dEhlbHBlclNlcnZpY2UuX2Rlc2lnbk1vZGVGb3JtU3ViamVjdC5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgIGlmIChkYXRhICYmIGRhdGEgPT0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMudG9nZ2xlRGVzaWduTW9kZSgpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICB0b2dnbGVEZXNpZ25Nb2RlKCkge1xyXG4gICAgdGhpcy5yZW1vdmVUc2lNb2RhbEZvb3RlcigpXHJcbiAgICB0aGlzLmNyZWF0ZVNhdmVCdXR0b24oKTtcclxuXHJcbiAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QgPSB0aGlzLl9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZS5nZXRQcmVzZW50YXRpb25TZXR0aW5nQnlDb21wb25lbnRJZGVudGlmaWVyU3luYyh0aGlzLmdldENvbXBvbmVudElkZW50aWZpZXIoKSwgdGhpcy5kZXNjcmltaW5hdG9yVmFsdWUpID8/IG5ldyBQcmVzZW50YXRpb25TZXR0aW5nKClcclxuXHJcbiAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzID0gWy4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXREaXJlY3RpdmVzKCksXHJcbiAgICAuLi50aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lckJhc2VTZXJ2aWNlLmdldERpcmVjdGl2ZXMoKVxyXG4gICAgXTtcclxuXHJcbiAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzPy5mb3JFYWNoKGlucHV0ID0+IHtcclxuICAgICAgaW5wdXQuaW5zZXJ0RWxlbWVudCgpO1xyXG4gICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZSkge1xyXG4gICAgICAgIGlucHV0LnNlbGVjdEFwcHJvcmlhdGVDb2x1bW5zKHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCk7XHJcbiAgICAgIH1cclxuICAgICAgaW5wdXQuYWRkQ2hlY2tib3hlc1RvSW5wdXRzKHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpXHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlRnJvbUFjdGl2ZVN1YnNjcml0cGlvbigpXHJcbiAgICB0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLmlzRGVzaWduTW9kZSA9IGZhbHNlXHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzID0gWy4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXREaXJlY3RpdmVzKCksXHJcbiAgICAuLi50aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lckJhc2VTZXJ2aWNlLmdldERpcmVjdGl2ZXMoKVxyXG4gICAgXTtcclxuICAgIGNvbnNvbGUubG9nKFwiY291bnQgb2YgZGlyZWN0aXZlRWxlbWVudHMgPT4gXCIsIHRoaXMuZGlyZWN0aXZlRWxlbWVudHMubGVuZ3RoKVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZT8uaXNEZXNpZ25Nb2RlXHJcbiAgICAgICYmICF0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmlzRGVzZ2luTW9kZUZyb21Xb3JrZmxvdykge1xyXG4gICAgICAvLyB0aGlzLnJlbW92ZVRzaU1vZGFsRm9vdGVyKClcclxuICAgICAgLy8gdGhpcy5jcmVhdGVTYXZlQnV0dG9uKClcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG5cclxuICAgICAgaWYgKHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuaXNEZXNnaW5Nb2RlRnJvbVdvcmtmbG93KSB7XHJcbiAgICAgICAgdGhpcy5lbnRpdHlJbmZvID0gdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5jdXJyZW50V29ya2Zsb3dFbnRpdHlJbmZvXHJcbiAgICAgIH1cclxuICAgICAgLy8gZWxzZSB7XHJcbiAgICAgIC8vICAgdGhpcy5lbnRpdHlJbmZvID0gYXdhaXQgdGhpcy5fZW50aXR5Q29uZmlnU2VydmljZS5nZXRFbnRpdHlJbmZvRnJvbUNhY2hlKHRoaXMuYnVzaW5lc3NDbGFzcylcclxuICAgICAgLy8gfVxyXG4gICAgfVxyXG5cclxuICAgIC8vaW5pdCBnZW5lcmljQ3J1ZCByZXBvcnRpbmdcclxuICAgIGlmICh0aGlzLmZvcm0pIHtcclxuICAgICAgdGhpcy5mb3JtLmZvcm1SZWZDaGFuZ2Uuc3Vic2NyaWJlKGYgPT4ge1xyXG4gICAgICAgIGlmIChmKSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm1SZWYgPSBmO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuZm9ybS5kaXNhYmxlZCA9IHRoaXMuaXNGb3JtRGlzYWJsZWQ7XHJcbiAgICAgIHRoaXMuZm9ybS5mb3JtRW5kcG9pbnQgPSB0aGlzLmZvcm1FbmRwb2ludDtcclxuICAgICAgdGhpcy5mb3JtLmZvcm1OYW1lID0gdGhpcy5mb3JtTmFtZTtcclxuICAgICAgdGhpcy5mb3JtLmJ1c2luZXNzQ2xhc3MgPSB0aGlzLl9idXNpbmVzc0NsYXNzXHJcbiAgICAgIHRoaXMuZm9ybS5mb3JtTmFtZSA9IHRoaXMuZm9ybU5hbWU7XHJcbiAgICAgIHRoaXMuZm9ybS5pZCA9IHRoaXMuaWQ7XHJcbiAgICAgIHRoaXMuZm9ybS5tb2RlID0gdGhpcy5tb2RlXHJcblxyXG4gICAgICBpZiAoIXRoaXMuZm9ybS5pc0Rlc2NyaW1pbmF0b3JWYWx1ZVNldCkge1xyXG4gICAgICAgIHRoaXMuZm9ybS5kZXNjcmltaW5hdG9yVmFsdWUgPSB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyB3b3JrZmxvdyBmb3JtIGRlc2lnblxyXG4gICAgICB0aGlzLl9zYXZlV29ya2Zsb3dGb3JtQ29uZmlndXJhdGlvblN1YnNjcmlwdGlvbiA9IHRoaXMuZm9ybS5vblN1Ym1pdEZvcm1Xb3JrZmxvd0NvbmZpZ3VyYXRpb24uc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICAgIGxldCB3b3JrZmxvd0Zvcm1Db25maWd1cmF0aW9uID0gdGhpcy5nZXRGb3JtV29yZmtsb3dQcmVzZW50YXRpb25TZXR0aW5nKCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJGb3JtV29yZmtsb3dTZXR0aW5nID0+IFwiLCB3b3JrZmxvd0Zvcm1Db25maWd1cmF0aW9uKVxyXG4gICAgICAgIHRoaXMuaGlkZSh3b3JrZmxvd0Zvcm1Db25maWd1cmF0aW9uKVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgdGhpcy5mb3JtLm9uU3RhdHVzQ2hhbmdlLnN1YnNjcmliZSgobmV3VmFsdWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIHRoaXMuc3RhdHVzID0gbmV3VmFsdWU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubW9kZSA9PSBDb21wb25lbnRfTW9kZXMuQ1JFQVRFKSB7XHJcbiAgICAgIGlmICh0aGlzLmNoZWNrYm94KSB7XHJcbiAgICAgICAgdGhpcy5jaGVja2JveC5mb3JFYWNoKGJveCA9PiB7XHJcbiAgICAgICAgICBib3guaW5wdXRGaWVsZCA9IGZhbHNlO1xyXG4gICAgICAgICAgYm94LmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGluaXRUc2lHcmlkc1JlZigpIHtcclxuICAgIHRoaXMudmlld0dyaWRzQ29tcG9uZW50cyA9IHRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXRWaWV3R3JpZHMoKVxyXG4gICAgdGhpcy5nZW5lcmljR3JpZHNDb21wb25lbnRzID0gdGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLmdldEdlbmVyaWNHcmlkcygpXHJcbiAgICB0aGlzLmVkaXRhYmxlR3JpZENvbXBvbmVudHMgPSB0aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UuZ2V0RWRpdGFibGVHcmlkcygpXHJcbiAgICB0aGlzLmdlbmVyaWNDcnVkc0NvbXBvbmVudHMgPSB0aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UuZ2V0R2VuZXJpY0NydWRzKClcclxuICB9XHJcblxyXG4gIGdldEZvcm1Xb3Jma2xvd1ByZXNlbnRhdGlvblNldHRpbmcoKSB7XHJcbiAgICBsZXQgcHJlc2VudGF0aW9uUmVxdWVzdCA9IG5ldyBQcmVzZW50YXRpb25TZXR0aW5nKClcclxuXHJcbiAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzID0gWy4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXREaXJlY3RpdmVzKCksXHJcbiAgICAuLi50aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lckJhc2VTZXJ2aWNlLmdldERpcmVjdGl2ZXMoKVxyXG4gICAgXTtcclxuXHJcbiAgICBsZXQgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHM6IFByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxbXSA9IFtdXHJcbiAgICBsZXQgYXZhaWxhYmxlRGlyZWN0aXZlRWxlbWVudHMgPSB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzLmZpbHRlcih4ID0+XHJcbiAgICAgICEodGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0Py5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscy5zb21lKHkgPT5cclxuICAgICAgICB5LmJsb2NrTmFtZSA9PT0geC5wcmVzZW50YXRpb25EZXNpZ25lciAmJiAheS5pc0Jsb2NrVmlzaWJsZVxyXG4gICAgICApKVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmluaXRUc2lHcmlkc1JlZigpXHJcblxyXG4gICAgYXZhaWxhYmxlRGlyZWN0aXZlRWxlbWVudHM/LmZvckVhY2goKGRpcmVjdGl2ZSkgPT4ge1xyXG5cclxuICAgICAgbGV0IGNvbmZpZ3VyYXRpb24gPSB1bmRlZmluZWRcclxuXHJcblxyXG4gICAgICBsZXQgZ3JpZFN0YXRlID0gW1xyXG4gICAgICAgIC4uLnRoaXMudmlld0dyaWRzQ29tcG9uZW50cyxcclxuICAgICAgICAuLi50aGlzLmdlbmVyaWNHcmlkc0NvbXBvbmVudHMsXHJcbiAgICAgICAgLi4udGhpcy5nZW5lcmljQ3J1ZHNDb21wb25lbnRzLFxyXG4gICAgICAgIC4uLnRoaXMuZWRpdGFibGVHcmlkQ29tcG9uZW50c1xyXG4gICAgICBdXHJcbiAgICAgICAgLmZpbmQoeCA9PiB4LmlkID09PSBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIgfHwgKCdmb3JtTmFtZScgaW4geCAmJiB4LmZvcm1OYW1lID09PSBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIpKVxyXG4gICAgICAgID8uZ2V0U3RhdGUoKTtcclxuXHJcbiAgICAgIGNvbmZpZ3VyYXRpb24gPSBncmlkU3RhdGUgPyBKU09OLnN0cmluZ2lmeShncmlkU3RhdGUpIDogdW5kZWZpbmVkO1xyXG5cclxuXHJcbiAgICAgIGxldCBvYmplY3Q6IFByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwgPSB7XHJcbiAgICAgICAgYmxvY2tOYW1lOiBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIsXHJcbiAgICAgICAgaXNCbG9ja1Zpc2libGU6ICFkaXJlY3RpdmUuc2hvd0hpZGVDaGVja2JveENvbXBvbmVudFJlZj8uaW5zdGFuY2U/Ll9jaGVja2VkLFxyXG4gICAgICAgIHVpZDogdGhpcy5nZXRQcmVzZW50YXRpb25TZXRpbmdEZXRhaWxVaWQoZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyID8/IFwiXCIpLFxyXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IGNvbmZpZ3VyYXRpb24sXHJcbiAgICAgICAgaXNJbnB1dEVuYWJsZWQ6ICFkaXJlY3RpdmUuZGlzYWJsZWRDaGVja2JveENvbXBvbmVudFJlZj8uaW5zdGFuY2U/Ll9jaGVja2VkXHJcbiAgICAgIH1cclxuICAgICAgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHMucHVzaChvYmplY3QpXHJcbiAgICB9KVxyXG5cclxuICAgIHByZXNlbnRhdGlvblJlcXVlc3QuY29tcG9uZW50SWRlbnRpZmVyID0gdGhpcy5nZXRDb21wb25lbnRJZGVudGlmaWVyKCk7XHJcbiAgICBwcmVzZW50YXRpb25SZXF1ZXN0LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzID0gcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHNcclxuXHJcbiAgICBjb25zb2xlLmxvZyhcInByZXNlbnRhdGlvblJlcXVlc3QgPT4gXCIsIHByZXNlbnRhdGlvblJlcXVlc3QpXHJcbiAgICByZXR1cm4gcHJlc2VudGF0aW9uUmVxdWVzdFxyXG4gIH1cclxuXHJcblxyXG4gIGlzRGVsZXRlTW9kZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGUgPT0gQ29tcG9uZW50X01vZGVzLkRFTEVURTtcclxuICB9XHJcbiAgaXNTdWJtaXREaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIC8vcmV0dXJuICF0aGlzLmZvcm1SZWY/LmZvcm0/LnZhbGlkIHx8IHRoaXMuc2F2aW5nO1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBpc0NvbnN1bHRNb2RlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PSBDb21wb25lbnRfTW9kZXMuQ09OU1VMVDtcclxuICB9XHJcblxyXG4gIGlzRHVwbGljYXRlTW9kZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGUgPT0gQ29tcG9uZW50X01vZGVzLkRVUExJQ0FURTtcclxuICB9XHJcbiAgaXNFZGl0TW9kZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGUgPT0gQ29tcG9uZW50X01vZGVzLkVESVQ7XHJcbiAgfVxyXG4gIC8vI3JlZ2lvbiBwcml2YXRlIG1ldGhvZHNcclxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgaW5pdE1vZGFsRGF0YSgpIHtcclxuICAgIHN1cGVyLmluaXRNb2RhbERhdGEoKVxyXG4gICAgaWYgKHRoaXMub3BlbmVkRGlhbG9nUmVmICE9IG51bGxcclxuICAgICAgJiYgdGhpcy5vcGVuZWREaWFsb2dSZWYgIT0gdW5kZWZpbmVkXHJcbiAgICAgICYmIHRoaXMub3BlbmVkRGlhbG9nQ29uZmlnICE9IG51bGxcclxuICAgICAgJiYgdGhpcy5vcGVuZWREaWFsb2dDb25maWcgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIC8vY2hlY2sgaGF2ZSBvcGVuZWREaWFsb2dDb25maWdcclxuICAgICAgaWYgKHRoaXMub3BlbmVkRGlhbG9nQ29uZmlnLmRhdGEgIT0gbnVsbCAmJiB0aGlzLm9wZW5lZERpYWxvZ0NvbmZpZy5kYXRhICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuY3VkQ29tcG9uZW50ID0gdGhpcy5vcGVuZWREaWFsb2dDb25maWcuZGF0YS5jdWRDb21wb25lbnQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ZlcmlmeU1vZGFsRGF0YSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLm9wZW5lZERpYWxvZ1JlZiAhPSBudWxsXHJcbiAgICAgICYmIHRoaXMub3BlbmVkRGlhbG9nUmVmICE9IHVuZGVmaW5lZFxyXG4gICAgICAmJiB0aGlzLm9wZW5lZERpYWxvZ0NvbmZpZyAhPSBudWxsXHJcbiAgICAgICYmIHRoaXMub3BlbmVkRGlhbG9nQ29uZmlnICE9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXRNb2RhbFJlZigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl92ZXJpZnlNb2RhbERhdGEoKSkge1xyXG4gICAgICAvL3RoaXMuYnNNb2RhbFJlZiA9IHtoaWRlOiAoKSA9PiB0aGlzLm9wZW5lZERpYWxvZ1JlZi5kZXN0cm95KCksY2xvc2U6ICh2YWw6IGFueSk9Pnt0aGlzLm9wZW5lZERpYWxvZ1JlZi5jbG9zZSh2YWwpfX1cclxuICAgIH1cclxuICB9XHJcbiAgLy9cclxuICBsKGtleTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmxvY2FsaXplICE9IG51bGxcclxuICAgICAgJiYgdGhpcy5sb2NhbGl6ZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMubG9jYWxpemUudHJhbnNmb3JtKGtleSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ga2V5O1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIHRyYWl0ZXIgbXVsdGlwbGUgY29tYm9cclxuICBhbGxDb21ib0xvYWRpbmdTdGF0dXM6IEFycmF5PENvbWJvU3RhdHVzTW9kZWw+ID0gW107XHJcbiAgYXJlQWxsQ29tYm9Mb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcm9jZXNzQ29tYm9Jbml0RXZlbnQoY29tYm9TdGF0dXM6IENvbWJvU3RhdHVzTW9kZWwpIHtcclxuICAgIGlmICghdGhpcy5hbGxDb21ib0xvYWRpbmdTdGF0dXMuZmluZCh1ID0+IHUudWlkID09IGNvbWJvU3RhdHVzLnVpZCkpXHJcbiAgICAgIHRoaXMuYWxsQ29tYm9Mb2FkaW5nU3RhdHVzLnB1c2goY29tYm9TdGF0dXMpO1xyXG4gIH1cclxuXHJcbiAgcHJvY2Vzc0NvbWJvSXNMb2FkZWRFdmVudChjb21ib1N0YXR1czogQ29tYm9TdGF0dXNNb2RlbCkge1xyXG4gICAgbGV0IGNvbWJvUyA9IHRoaXMuYWxsQ29tYm9Mb2FkaW5nU3RhdHVzLmZpbmQodSA9PiB1LnVpZCA9PSBjb21ib1N0YXR1cy51aWQpO1xyXG4gICAgaWYgKGNvbWJvUyAhPSBudWxsICYmIGNvbWJvUyAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgY29tYm9TLmlzRGF0YUxvYWRlZCA9IGNvbWJvU3RhdHVzLmlzRGF0YUxvYWRlZDtcclxuICAgIH1cclxuICAgIHRoaXMuYXJlQWxsQ29tYm9Mb2FkZWRGbigpO1xyXG4gIH1cclxuXHJcbiAgYXJlQWxsQ29tYm9Mb2FkZWRGbigpOiB2b2lkIHtcclxuICAgIGxldCByZXN1bHQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIGlmICh0aGlzLmFsbENvbWJvTG9hZGluZ1N0YXR1cy5sZW5ndGggPiAwKVxyXG4gICAgICB0aGlzLmFsbENvbWJvTG9hZGluZ1N0YXR1cy5mb3JFYWNoKHUgPT4ge1xyXG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiB1LmlzRGF0YUxvYWRlZDtcclxuICAgICAgfSk7XHJcbiAgICBlbHNlIHJlc3VsdCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuYXJlQWxsQ29tYm9Mb2FkZWQgPSByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBuZXcgbW9kYWwgaGFuZGxpbmcgbWV0aG9kIChyZXNvbHZlRmljaGUpIGluc3RlYWQuXHJcbiAqIFRoaXMgbWV0aG9kIGRpcmVjdGx5IG1hbmlwdWxhdGVzIHRoZSBkaWFsb2cgcmVmZXJlbmNlIGFuZCBtYXkgbGVhZCB0byBpbmNvbnNpc3RlbnQgYmVoYXZpb3IuXHJcbiAqL1xyXG5cclxuICBoaWRlKHZhbD86IGFueSkge1xyXG4gICAgaWYgKHRoaXMub3BlbmVkRGlhbG9nUmVmICE9IG51bGwgJiYgdGhpcy5vcGVuZWREaWFsb2dSZWYgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmICh2YWwgPT0gZmFsc2UpIHtcclxuICAgICAgICB0aGlzLm9wZW5lZERpYWxvZ1JlZi5kZXN0cm95KCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5vcGVuZWREaWFsb2dSZWYuY2xvc2UodmFsKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzb2x2ZUZpY2hlKHZhbD86IGFueSwgYXBpUmVzcG9uc2U/OiBhbnkpIHtcclxuICAgIHRoaXMuX2lucHV0UmVnaXN0cnkucmVzZXREaXJ0eVN0YXR1c0ZvckFsbElucHV0cygpO1xyXG5cclxuICAgIGNvbnN0IGhhc1VpZCA9IGFwaVJlc3BvbnNlPy51aWQgIT0gbnVsbDtcclxuXHJcbiAgICBjb25zdCBpc0NyZWF0ZU9yRHVwbGljYXRlID1cclxuICAgICAgdGhpcy5tb2RlID09IENvbXBvbmVudF9Nb2Rlcy5DUkVBVEUgfHxcclxuICAgICAgdGhpcy5tb2RlID09IENvbXBvbmVudF9Nb2Rlcy5EVVBMSUNBVEU7XHJcblxyXG4gICAgY29uc3QgaXNFZGl0YWJsZU1vZGUgPVxyXG4gICAgICBpc0NyZWF0ZU9yRHVwbGljYXRlIHx8IHRoaXMubW9kZSA9PSBDb21wb25lbnRfTW9kZXMuRURJVDtcclxuXHJcbiAgICBpZiAoaGFzVWlkICYmIGlzRWRpdGFibGVNb2RlKSB7XHJcbiAgICAgIHRoaXMuX2Zvcm1TdGF0ZVNlcnZpY2UuZGF0YVNhdmVkJC5uZXh0KGFwaVJlc3BvbnNlLnVpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGhhc1VpZCAmJiBpc0NyZWF0ZU9yRHVwbGljYXRlKSB7XHJcbiAgICAgIHRoaXMuaWQgPSBhcGlSZXNwb25zZS51aWQ7XHJcbiAgICAgIHRoaXMubW9kZSA9IENvbXBvbmVudF9Nb2Rlcy5FRElUO1xyXG5cclxuICAgICAgdGhpcy5jZFJlZj8uZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZm9ybSkge1xyXG4gICAgICAgIHRoaXMuZm9ybS5pZCA9IHRoaXMuaWQ7XHJcbiAgICAgICAgdGhpcy5mb3JtLm1vZGUgPSB0aGlzLm1vZGU7XHJcbiAgICAgICAgdGhpcy5mb3JtLmZvcm1FbmRwb2ludCA9IHRoaXMuZm9ybUVuZHBvaW50O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLl9mb3JtU3RhdGVTZXJ2aWNlLmNsb3NlTW9kYWwpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmhpZGUodmFsKVxyXG4gIH1cclxuXHJcblxyXG5cclxuICAvLyNlbmRyZWdpb24gdHJhaXRlciBtdWx0aXBsZSBjb21ib1xyXG5cclxuICBnZXRXb3JrZmxvd0V0YXRGb3JtKCkge1xyXG4gICAgbGV0IHdvcmtmbG93RXRhdEZvcm0gPSB0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLndvcmtmbG93RXRhdEZvcm1Gb3JDdXJyZW50Rm9ybVxyXG4gICAgICA/LmZpbmQoeCA9PiB4LnVpZCA9PSB0aGlzLndvcmtmbG93SW5mb3JtYXRpb24/LndvcmtmbG93RXRhdClcclxuXHJcbiAgICBpZiAod29ya2Zsb3dFdGF0Rm9ybSkge1xyXG4gICAgICBsZXQgd29ya2Zsb3dFdGF0ID0gdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5tYXBXb3JrZmxvd0V0YXRGb3JtVG9QcmVzZW50YXRpb25TZXR0aW5nKFxyXG4gICAgICAgIHdvcmtmbG93RXRhdEZvcm0/LndvcmtmbG93RXRhdHNGb3Jtc1xyXG4gICAgICApO1xyXG5cclxuICAgICAgcmV0dXJuIHdvcmtmbG93RXRhdFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gIH1cclxuXHJcbiAgLy8gI3JlZ2lvbiBQcmVzZW50YXRpb24gU2V0dGluZ3NcclxuICBhZGRJbnB1dHMoXHJcbiAgICBwcmVzZW50YXRpb25SZXF1ZXN0OiBQcmVzZW50YXRpb25TZXR0aW5nLFxyXG4gICAgYXBwbHlHcmlkQ29uZmlnOiBib29sZWFuID0gdHJ1ZSxcclxuICAgIHdvcmtmbG93RXRhdD86IFByZXNlbnRhdGlvblNldHRpbmcsXHJcbiAgICBkaXJlY3RpdmVFbGVtZW50czogKFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlIHwgUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmVCYXNlKVtdID0gdGhpcy5kaXJlY3RpdmVFbGVtZW50c1xyXG4gICk6IHZvaWQge1xyXG5cclxuICAgIGlmICgoIXdvcmtmbG93RXRhdCB8fCB3b3JrZmxvd0V0YXQucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHMubGVuZ3RoID09IDApXHJcbiAgICAgICYmIHRoaXMud29ya2Zsb3dJbmZvcm1hdGlvblxyXG4gICAgICAmJiB0aGlzLndvcmtmbG93SW5mb3JtYXRpb24/LndvcmtmbG93RXRhdCkge1xyXG4gICAgICB3b3JrZmxvd0V0YXQgPSB0aGlzLmdldFdvcmtmbG93RXRhdEZvcm0oKVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGhhc1ByZXNlbnRhdGlvblJlcXVlc3QgPSBwcmVzZW50YXRpb25SZXF1ZXN0Py5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscz8ubGVuZ3RoID4gMDtcclxuXHJcblxyXG4gICAgaWYgKGhhc1ByZXNlbnRhdGlvblJlcXVlc3QpIHtcclxuICAgICAgZGlyZWN0aXZlRWxlbWVudHMgPSBkaXJlY3RpdmVFbGVtZW50cy5maWx0ZXIoeCA9PlxyXG4gICAgICAgIHByZXNlbnRhdGlvblJlcXVlc3QucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHM/LnNvbWUoXHJcbiAgICAgICAgICB5ID0+IHkuYmxvY2tOYW1lID09PSB4LnByZXNlbnRhdGlvbkRlc2lnbmVyICYmICh5LmlzQmxvY2tWaXNpYmxlID09IHVuZGVmaW5lZCB8fCB5LmlzQmxvY2tWaXNpYmxlID09IHRydWUpXHJcbiAgICAgICAgICAgICYmIHgudHJlYXRlZCA9PSBmYWxzZVxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXJlY3RpdmVFbGVtZW50cz8uZm9yRWFjaChkaXJlY3RpdmUgPT4ge1xyXG5cclxuICAgICAgY29uc3QgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbCA9IHByZXNlbnRhdGlvblJlcXVlc3QucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHMuZmluZCh4ID0+IHguYmxvY2tOYW1lID09IGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lcilcclxuXHJcbiAgICAgIGlmIChwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsID09IHVuZGVmaW5lZCB8fCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsLmlzQmxvY2tWaXNpYmxlKSB7XHJcblxyXG4gICAgICAgIGxldCB3b3Jma2Zsb3dFdGF0Rm9ybSA9IHRoaXMuZ2V0V29ya2Zsb3dFdGF0Rm9ybSgpO1xyXG5cclxuICAgICAgICBpZiAod29yZmtmbG93RXRhdEZvcm0pIHtcclxuICAgICAgICAgIGxldCB3b3JrZmxvd0NvbmZpZyA9IHdvcmZrZmxvd0V0YXRGb3JtLnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzLmZpbmQoeCA9PiB4LmJsb2NrTmFtZSA9PSBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIpXHJcblxyXG4gICAgICAgICAgaWYgKCF3b3JrZmxvd0NvbmZpZykge1xyXG4gICAgICAgICAgICBkaXJlY3RpdmUuZXhlY3V0ZSh0cnVlLCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsPy5jb25maWd1cmF0aW9uKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAod29ya2Zsb3dDb25maWcgJiYgd29ya2Zsb3dDb25maWcuaXNCbG9ja1Zpc2libGUgJiYgKHdvcmtmbG93Q29uZmlnLmlzSW5wdXRFbmFibGVkID09IHVuZGVmaW5lZCB8fCB3b3JrZmxvd0NvbmZpZy5pc0lucHV0RW5hYmxlZCA9PSB0cnVlKSkge1xyXG4gICAgICAgICAgICBkaXJlY3RpdmUuZXhlY3V0ZSh0cnVlLCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsPy5jb25maWd1cmF0aW9uKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAod29ya2Zsb3dDb25maWcgJiYgd29ya2Zsb3dDb25maWcuaXNCbG9ja1Zpc2libGUgJiYgd29ya2Zsb3dDb25maWcuaXNJbnB1dEVuYWJsZWQgPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgZGlyZWN0aXZlLmRpc2FibGVJbnB1dHMoKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGRpcmVjdGl2ZS5leGVjdXRlKHRydWUsIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWw/LmNvbmZpZ3VyYXRpb24pXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5pc0Rlc2dpbk1vZGVGcm9tV29ya2Zsb3cpIHtcclxuICAgICAgICAgIGRpcmVjdGl2ZS5hZGRDaGVja2JveGVzVG9JbnB1dHModGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS53b3JrZmxvd0Zvcm1Db25maWd1cmF0aW9uKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGUgPT09IE1vZGVzLmNyZWF0ZSkge1xyXG4gICAgICB0aGlzLnByb2Nlc3NEaXNhYmxlZElucHV0cyhwcmVzZW50YXRpb25SZXF1ZXN0LCBkaXJlY3RpdmVFbGVtZW50cyk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMucmVtb3ZlRW1wdHlBbmNlc3RvcnNGcm9tRWxlbWVudHMoKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgcHJvY2Vzc0Rpc2FibGVkSW5wdXRzKHByZXNlbnRhdGlvblJlcXVlc3Q6IFByZXNlbnRhdGlvblNldHRpbmcsIGRpcmVjdGl2ZUVsZW1lbnRzOiAoUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmUgfCBQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZUJhc2UpW10gPSB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzKSB7XHJcbiAgICBpZiAodGhpcy5fbGF5b3V0SGVscGVyU2VydmljZT8uaXNEZXNpZ25Nb2RlIHx8IHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuaXNEZXNnaW5Nb2RlRnJvbVdvcmtmbG93KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgY29uc3QgaGFzUHJlc2VudGF0aW9uUmVxdWVzdCA9IHByZXNlbnRhdGlvblJlcXVlc3Q/LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzPy5sZW5ndGggPiAwO1xyXG5cclxuICAgIGlmIChoYXNQcmVzZW50YXRpb25SZXF1ZXN0KSB7XHJcbiAgICAgIGRpcmVjdGl2ZUVsZW1lbnRzID0gZGlyZWN0aXZlRWxlbWVudHMuZmlsdGVyKHggPT5cclxuICAgICAgICBwcmVzZW50YXRpb25SZXF1ZXN0LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzPy5zb21lKFxyXG4gICAgICAgICAgeSA9PiB5LmJsb2NrTmFtZSA9PT0geC5wcmVzZW50YXRpb25EZXNpZ25lciAmJiB5LmlzQmxvY2tWaXNpYmxlXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBjb25zdCB3b3Jma2Zsb3dFdGF0Rm9ybSA9IHRoaXMuZ2V0V29ya2Zsb3dFdGF0Rm9ybSgpXHJcbiAgICBkaXJlY3RpdmVFbGVtZW50cz8uZm9yRWFjaChkaXJlY3RpdmUgPT4ge1xyXG5cclxuICAgICAgbGV0IHdvcmtmbG93Q29uZmlnID0gd29yZmtmbG93RXRhdEZvcm0/LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzLmZpbmQoeCA9PiB4LmJsb2NrTmFtZSA9PSBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIpXHJcblxyXG4gICAgICBpZiAod29ya2Zsb3dDb25maWcgJiYgIXdvcmtmbG93Q29uZmlnLmlzSW5wdXRFbmFibGVkICYmICh3b3JrZmxvd0NvbmZpZy5pc0Jsb2NrVmlzaWJsZSA/PyB0cnVlKSkge1xyXG4gICAgICAgIGRpcmVjdGl2ZS5kaXNhYmxlSW5wdXRzKClcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHJlbW92ZUVtcHR5QW5jZXN0b3JzRnJvbUVsZW1lbnRzKCkge1xyXG4gICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgIHRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXREaXJlY3RpdmVzKCkuZm9yRWFjaChzID0+IHMucmVtb3ZlRW1wdHlBbmNlc3RvcnMocz8udGVtcFRlbXBsYXRlUGFyZW50Tm9kZSkpXHJcbiAgICAvLyB9LCAwKTtcclxuICB9XHJcblxyXG4gIGdldFByZXNlbnRhdGlvblNldGluZ0RldGFpbFVpZChibG9ja05hbWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdD8ucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHM/LmZpbmQoeCA9PiB4LmJsb2NrTmFtZSA9PSBibG9ja05hbWUpPy51aWRcclxuICB9XHJcblxyXG4gIGdldENvbXBvbmVudElkZW50aWZpZXIoKSB7XHJcbiAgICAvLyBpZiAodGhpcy5kZXNjcmltaW5hdG9yVmFsdWUpIHtcclxuICAgIC8vICAgcmV0dXJuIGAke3RoaXMuX215TmFtZSgpfV8ke3RoaXMuZGVzY3JpbWluYXRvclZhbHVlfWBcclxuICAgIC8vIH1cclxuICAgIHJldHVybiB0aGlzLl9teU5hbWUoKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzYXZlUHJvcGVydGllcygpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLmluaXRUc2lHcmlkc1JlZigpXHJcblxyXG4gICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0ID0gdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UuZ2V0UHJlc2VudGF0aW9uU2V0dGluZ0J5Q29tcG9uZW50SWRlbnRpZmllclN5bmModGhpcy5nZXRDb21wb25lbnRJZGVudGlmaWVyKCksIHRoaXMuZGVzY3JpbWluYXRvclZhbHVlKSA/PyBuZXcgUHJlc2VudGF0aW9uU2V0dGluZygpXHJcblxyXG4gICAgaWYgKCF0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QpIHtcclxuICAgICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0ID0gbmV3IFByZXNlbnRhdGlvblNldHRpbmcoKVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsczogUHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbFtdID0gW11cclxuXHJcbiAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzPy5mb3JFYWNoKChkaXJlY3RpdmUpID0+IHtcclxuXHJcbiAgICAgIGxldCBjb25maWd1cmF0aW9uID0gdW5kZWZpbmVkXHJcblxyXG5cclxuICAgICAgbGV0IGdyaWRTdGF0ZSA9IFtcclxuICAgICAgICAuLi50aGlzLnZpZXdHcmlkc0NvbXBvbmVudHMsXHJcbiAgICAgICAgLi4udGhpcy5nZW5lcmljR3JpZHNDb21wb25lbnRzLFxyXG4gICAgICAgIC4uLnRoaXMuZ2VuZXJpY0NydWRzQ29tcG9uZW50cyxcclxuICAgICAgICAuLi50aGlzLmVkaXRhYmxlR3JpZENvbXBvbmVudHNcclxuICAgICAgXVxyXG4gICAgICAgIC5maW5kKHggPT4geC5pZCA9PT0gZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyIHx8ICgnZm9ybU5hbWUnIGluIHggJiYgeC5mb3JtTmFtZSA9PT0gZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyKSlcclxuICAgICAgICA/LmdldFN0YXRlKCk7XHJcblxyXG4gICAgICBjb25maWd1cmF0aW9uID0gZ3JpZFN0YXRlID8gSlNPTi5zdHJpbmdpZnkoZ3JpZFN0YXRlKSA6IHVuZGVmaW5lZDtcclxuXHJcblxyXG4gICAgICBsZXQgb2JqZWN0OiBQcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsID0ge1xyXG4gICAgICAgIGJsb2NrTmFtZTogZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyLFxyXG4gICAgICAgIGlzQmxvY2tWaXNpYmxlOiAhZGlyZWN0aXZlLnNob3dIaWRlQ2hlY2tib3hDb21wb25lbnRSZWY/Lmluc3RhbmNlPy5fY2hlY2tlZCxcclxuICAgICAgICB1aWQ6IHRoaXMuZ2V0UHJlc2VudGF0aW9uU2V0aW5nRGV0YWlsVWlkKGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lciA/PyBcIlwiKSxcclxuICAgICAgICBjb25maWd1cmF0aW9uOiBjb25maWd1cmF0aW9uXHJcbiAgICAgIH1cclxuICAgICAgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHMucHVzaChvYmplY3QpXHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdC5jb21wb25lbnRJZGVudGlmZXIgPSB0aGlzLmdldENvbXBvbmVudElkZW50aWZpZXIoKTtcclxuICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdC5kZXNjcmltaW5hdG9yVmFsdWUgPSB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZVxyXG4gICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzID0gcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHNcclxuXHJcbiAgICB0aGlzLmlzbG9hZGluZyA9IHRydWVcclxuXHJcbiAgICBpZiAodGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0LnVpZCAhPSBudWxsICYmIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdC51aWQgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlLnVwZGF0ZVByZXNlbnRhdGlvblNldHRpbmcodGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0LCB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QudWlkKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogYXN5bmMgKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzQWZ0ZXJTYXZlQ29uZmlndXJhdGlvbigpXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcilcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3JSZXNwb25zZU1hbmFnZXIuc2hvd0Vycm9yTWVzc2FnZShlcnJvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLl9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZS5jcmVhdGVQcmVzZW50YXRpb25TZXR0aW5nKHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdClcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IGFzeW5jIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvY2Vzc0FmdGVyU2F2ZUNvbmZpZ3VyYXRpb24oKVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpXHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yUmVzcG9uc2VNYW5hZ2VyLnNob3dFcnJvck1lc3NhZ2UoZXJyb3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm9jZXNzU2luZ2xlRWxlbWVudChkaXJlY3RpdmU6IFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlIHwgUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmVCYXNlKSB7XHJcbiAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QgPSB0aGlzLl9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZS5nZXRQcmVzZW50YXRpb25TZXR0aW5nQnlDb21wb25lbnRJZGVudGlmaWVyU3luYyh0aGlzLmdldENvbXBvbmVudElkZW50aWZpZXIoKSwgdGhpcy5kZXNjcmltaW5hdG9yVmFsdWUpID8/IG5ldyBQcmVzZW50YXRpb25TZXR0aW5nKClcclxuICAgIGxldCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsID0gdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0Py5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscz8uZmluZCh4ID0+IHguYmxvY2tOYW1lID09IGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lcilcclxuXHJcblxyXG4gICAgaWYgKHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwgPT0gdW5kZWZpbmVkIHx8IHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwuaXNCbG9ja1Zpc2libGUpIHtcclxuXHJcbiAgICAgIGxldCB3b3Jma2Zsb3dFdGF0Rm9ybSA9IHRoaXMuZ2V0V29ya2Zsb3dFdGF0Rm9ybSgpO1xyXG5cclxuICAgICAgaWYgKHdvcmZrZmxvd0V0YXRGb3JtKSB7XHJcbiAgICAgICAgbGV0IHdvcmtmbG93Q29uZmlnID0gd29yZmtmbG93RXRhdEZvcm0ucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHMuZmluZCh4ID0+IHguYmxvY2tOYW1lID09IGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lcilcclxuXHJcbiAgICAgICAgaWYgKCF3b3JrZmxvd0NvbmZpZykge1xyXG4gICAgICAgICAgZGlyZWN0aXZlLmV4ZWN1dGUodHJ1ZSwgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbD8uY29uZmlndXJhdGlvbilcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAod29ya2Zsb3dDb25maWcgJiYgd29ya2Zsb3dDb25maWcuaXNCbG9ja1Zpc2libGUgJiYgKHdvcmtmbG93Q29uZmlnLmlzSW5wdXRFbmFibGVkID09IHVuZGVmaW5lZCB8fCB3b3JrZmxvd0NvbmZpZy5pc0lucHV0RW5hYmxlZCA9PSB0cnVlKSkge1xyXG4gICAgICAgICAgZGlyZWN0aXZlLmV4ZWN1dGUodHJ1ZSwgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbD8uY29uZmlndXJhdGlvbilcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAod29ya2Zsb3dDb25maWcgJiYgd29ya2Zsb3dDb25maWcuaXNCbG9ja1Zpc2libGUgJiYgd29ya2Zsb3dDb25maWcuaXNJbnB1dEVuYWJsZWQgPT0gZmFsc2UpIHtcclxuICAgICAgICAgIGRpcmVjdGl2ZS5kaXNhYmxlSW5wdXRzKClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgZGlyZWN0aXZlLmV4ZWN1dGUodHJ1ZSwgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbD8uY29uZmlndXJhdGlvbilcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuaXNEZXNnaW5Nb2RlRnJvbVdvcmtmbG93KSB7XHJcbiAgICAgICAgZGlyZWN0aXZlLmFkZENoZWNrYm94ZXNUb0lucHV0cyh0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLndvcmtmbG93Rm9ybUNvbmZpZ3VyYXRpb24pXHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgdW5zdWJzY3JpYmVGcm9tQWN0aXZlU3Vic2NyaXRwaW9uKCkge1xyXG4gICAgaWYgKHRoaXMuX2Rlc2lnbk1vZGVGb3JtU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuX2Rlc2lnbk1vZGVGb3JtU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fc2F2ZVdvcmtmbG93Rm9ybUNvbmZpZ3VyYXRpb25TdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5fc2F2ZVdvcmtmbG93Rm9ybUNvbmZpZ3VyYXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9hZGRlZERpcmVjdGl2ZVN1YnNjcml0cGlvbikge1xyXG4gICAgICB0aGlzLl9hZGRlZERpcmVjdGl2ZVN1YnNjcml0cGlvbi51bnN1YnNjcmliZSgpXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2FkZGVkRGlyZWN0aXZlQmFzZVN1YnNjcml0cGlvbikge1xyXG4gICAgICB0aGlzLl9hZGRlZERpcmVjdGl2ZUJhc2VTdWJzY3JpdHBpb24udW5zdWJzY3JpYmUoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlVHNpTW9kYWxGb290ZXIoKSB7XHJcbiAgICBjb25zdCB0c2lNb2RhbEZvb3RlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJ0c2ktbW9kYWwtZm9vdGVyXCIpXHJcblxyXG4gICAgaWYgKHRzaU1vZGFsRm9vdGVyICYmIHRzaU1vZGFsRm9vdGVyLmxhc3RDaGlsZCkge1xyXG4gICAgICB0aGlzLl9yZW5kZXJlcj8ucmVtb3ZlQ2hpbGQodHNpTW9kYWxGb290ZXIsIHRzaU1vZGFsRm9vdGVyLmxhc3RDaGlsZClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNyZWF0ZVNhdmVCdXR0b24oKSB7XHJcbiAgICBjb25zdCB0c2lCdXR0b25SZWYgPSB0aGlzLl92aWV3Q29udGFpbmVyUmVmPy5jcmVhdGVDb21wb25lbnQoVHNpQnV0dG9uQ29tcG9uZW50KTtcclxuICAgIHRzaUJ1dHRvblJlZj8uc2V0SW5wdXQoJ3RleHQnLCAnc2hhcmVkX3RzaV9jb21wb25lbnRfc2F2ZV9jb25maWdfc2hvd19oaWRlJyk7XHJcbiAgICB0c2lCdXR0b25SZWY/LnNldElucHV0KCdpY29uJywgJ3NhdmUnKTtcclxuXHJcbiAgICB0c2lCdXR0b25SZWYhLmluc3RhbmNlLm9uQ2xpY2suZW1pdCA9ICgpID0+IHRoaXMuc2F2ZVByb3BlcnRpZXMoKTtcclxuXHJcbiAgICBjb25zdCB0c2lGb3JtID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcInRzaS1mb3JtXCIpXHJcblxyXG4gICAgaWYgKHRzaUZvcm0pIHtcclxuICAgICAgdGhpcy5fcmVuZGVyZXI/LmFwcGVuZENoaWxkKHRzaUZvcm0sIHRzaUJ1dHRvblJlZj8ubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBwcm9jZXNzQWZ0ZXJTYXZlQ29uZmlndXJhdGlvbigpIHtcclxuICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2VcclxuICAgIHRoaXMuaGlkZSgpXHJcbiAgICB0aGlzLl9tZXNzYWdlSW5mb1NlcnZpY2Uuc3VjY2VzcyhMb2NhbGl6YXRpb25LZXlzLnNhdmVkU3VjY2Vzc2Z1bGx5KVxyXG4gICAgdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5pc0Rlc2lnbk1vZGUgPSBmYWxzZVxyXG4gICAgLy8gdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5jdXJyZW50Rm9ybU5hbWUgPSB1bmRlZmluZWRcclxuICAgIHRoaXMuX2xheW91dEhlbHBlclNlcnZpY2UuX2Rlc2lnbk1vZGVGb3JtU3ViamVjdC5uZXh0KGZhbHNlKVxyXG4gICAgYXdhaXQgdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UubG9hZFByZXNlbnRhdGlvblNldHRpbmdzKCk7XHJcbiAgfVxyXG5cclxuICBzYXZlKCk6IHZvaWQge1xyXG4gICAgbGV0IGVycm9yTWVzc2FnZTogc3RyaW5nID0gJyc7XHJcblxyXG4gICAgdGhpcy5yZXF1aXJlZElucHV0cyA9IHRoaXMuX2lucHV0UmVnaXN0cnkuZ2V0QWxsKCkuZmlsdGVyKGlucCA9PiBpbnAuaXNSZXF1aXJlZCAmJiBpbnAuZGlzYWJsZWQgPT09IGZhbHNlKTtcclxuICAgIHRoaXMuZmF1bHR5SW5wdXRzID0gW107XHJcbiAgICB0aGlzLmlzRm9ybVZhbGlkID0gdGhpcy5yZXF1aXJlZElucHV0cy5ldmVyeShpbnB1dCA9PiBpbnB1dC5pc1ZhbGlkKCkuaXNWYWxpZCA9PT0gdHJ1ZSlcclxuXHJcbiAgICB0aGlzLnJlcXVpcmVkSW5wdXRzLmZvckVhY2goaW5wdXQgPT4ge1xyXG4gICAgICBsZXQgZnZyID0gaW5wdXQuaXNWYWxpZCgpO1xyXG4gICAgICBpZiAoZnZyLmlzVmFsaWQgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5mYXVsdHlJbnB1dHMucHVzaChmdnIpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gICAgaWYgKHRoaXMuaXNGb3JtVmFsaWQgPT09IGZhbHNlICYmIHRoaXMuZmF1bHR5SW5wdXRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc29sZS5sb2codGhpcy5mYXVsdHlJbnB1dHMpXHJcbiAgICAgIGxldCBmYXVsdHlJbnB1dHNOYW1lcyA9IFwiXCI7XHJcbiAgICAgIHRoaXMuZmF1bHR5SW5wdXRzLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgaWYgKGluZGV4ID09PSB0aGlzLmZhdWx0eUlucHV0cy5sZW5ndGggLSAxKVxyXG4gICAgICAgICAgZmF1bHR5SW5wdXRzTmFtZXMgKz0gYCR7aXRlbS5pbnB1dE5hbWV9LiBgXHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgZmF1bHR5SW5wdXRzTmFtZXMgKz0gYCR7aXRlbS5pbnB1dE5hbWV9LCBgXHJcbiAgICAgIH0pXHJcbiAgICAgIGZhdWx0eUlucHV0c05hbWVzID0gZmF1bHR5SW5wdXRzTmFtZXMucmVwbGFjZSgvLCQvLCAnJyk7XHJcbiAgICAgIGlmICh0aGlzLmZhdWx0eUlucHV0cy5zb21lKGZpID0+IGZpLmVycm9yID09PSBGb3JtVmFsaWRhdGlvbkVycm9yLlJlcXVpcmVkKSkge1xyXG4gICAgICAgIHRoaXMuX21lc3NhZ2VJbmZvU2VydmljZS53YXJuKGZhdWx0eUlucHV0c05hbWVzLCB0aGlzLmxvY2FsaXplPy50cmFuc2Zvcm0oJ3RzaV9mb3JtX2Jhc2VfYXV0b192YWxpZGF0aW9uX3JlcXVpcmVkX2ZpZWxkX3RpdGxlJykpXHJcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gYExlcyBjaGFtcHMgJHtmYXVsdHlJbnB1dHNOYW1lc30gc29udCBvYmxpZ2F0b2lyZS5gO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuZmF1bHR5SW5wdXRzLnNvbWUoZmkgPT4gZmkuZXJyb3IgPT09IEZvcm1WYWxpZGF0aW9uRXJyb3IuTWF4TGVuZ3RoKSkge1xyXG4gICAgICAgIHRoaXMuX21lc3NhZ2VJbmZvU2VydmljZS53YXJuKGBcclxuICAgICAgICAgICR7dGhpcy5sb2NhbGl6ZT8udHJhbnNmb3JtKCd0c2lfZm9ybV9iYXNlX2F1dG9fdmFsaWRhdGlvbl90aGVfZmllbGQnKX1cclxuICAgICAgICAgICR7dGhpcy5mYXVsdHlJbnB1dHNbMF0uaW5wdXROYW1lfSBcclxuICAgICAgICAgICR7dGhpcy5sb2NhbGl6ZT8udHJhbnNmb3JtKCd0c2lfZm9ybV9iYXNlX2F1dG9fdmFsaWRhdGlvbl9tYXhfbGVuZ3RoJyl9XHJcbiAgICAgICAgICAke3RoaXMuZmF1bHR5SW5wdXRzWzBdLmRhdGF9ICR7dGhpcy5sb2NhbGl6ZT8udHJhbnNmb3JtKCd0c2lfZm9ybV9iYXNlX2F1dG9fdmFsaWRhdGlvbl9tYXhfbGVuZ3RoX2NoYXJzJyl9YCxcclxuICAgICAgICAgIHRoaXMubG9jYWxpemU/LnRyYW5zZm9ybSgndHNpX2Zvcm1fYmFzZV9hdXRvX3ZhbGlkYXRpb25fbWF4X2xlbmd0aF9maWVsZF90aXRsZScpKVxyXG4gICAgICAgIGVycm9yTWVzc2FnZSA9IGBMZSBjaGFtcCAke3RoaXMuZmF1bHR5SW5wdXRzWzBdLmlucHV0TmFtZX0gbmUgZG9pdCBwYXMgZMOpcGFzc2VyICR7dGhpcy5mYXVsdHlJbnB1dHNbMF0uZGF0YX0gY2FyYWN0w6hyZXMuYDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLmZhdWx0eUlucHV0cy5zb21lKGZpID0+IGZpLmVycm9yID09PSBGb3JtVmFsaWRhdGlvbkVycm9yLk91dE9mUmFuZ2UpKSB7XHJcbiAgICAgICAgLy90byBkb1xyXG4gICAgICAgIGVycm9yTWVzc2FnZSA9IGBMZSBjaGFtcCAke3RoaXMuZmF1bHR5SW5wdXRzWzBdLmlucHV0TmFtZX0gZG9pdCDDqnRyZSBkYW5zIGwnaW50ZXJ2YWxsZS5gO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnVwZGF0ZUZvcm1TdGF0ZSh7IGlzVmFsaWQ6IGZhbHNlLCBpc1N1Ym1pdHRlZDogdHJ1ZSB9KTtcclxuXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBkYXRlRm9ybVN0YXRlKHsgaXNWYWxpZDogdHJ1ZSwgaXNTdWJtaXR0ZWQ6IHRydWUgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUZvcm1TdGF0ZShmb3JtU3RhdGU6IEZvcm1TdGF0ZSk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLl9nZW5lcmljVmFsaWRhdGlvblN0YXRlU2VydmljZSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuX2dlbmVyaWNWYWxpZGF0aW9uU3RhdGVTZXJ2aWNlLnVwZGF0ZUZvcm1TdGF0ZShmb3JtU3RhdGUpO1xyXG5cclxuICAgIHRoaXMuZWRpdGFibGVHcmlkQ29tcG9uZW50cyA9IHRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXRFZGl0YWJsZUdyaWRzKCk7XHJcbiAgICB0aGlzLmVkaXRhYmxlR3JpZENvbXBvbmVudHMuZm9yRWFjaCgoZSkgPT4gZS51cGRhdGVGb3JtU3RhdGUoZm9ybVN0YXRlKSk7XHJcbiAgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxufVxyXG4iLCI8cD50c2ktZm9ybS1iYXNlIHdvcmtzITwvcD5cclxuIl19