@talrace/ngx-noder 0.0.12 → 0.0.14

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 (73) hide show
  1. package/README.md +374 -71
  2. package/esm2022/lib/apart-components/editor-title/editor-title.component.mjs +1 -1
  3. package/esm2022/lib/apart-components/editor-toolbar/components/menu-dropdowns/menu-dropdowns.component.mjs +2 -5
  4. package/esm2022/lib/apart-components/editor-toolbar/editor-toolbar/editor-toolbar.component.mjs +3 -3
  5. package/esm2022/lib/editor/components/edges/edge-element.model.mjs +30 -1
  6. package/esm2022/lib/editor/components/edges/edge.component.mjs +23 -23
  7. package/esm2022/lib/editor/components/edges/edges.mjs +30 -15
  8. package/esm2022/lib/editor/components/image/components/image.component.mjs +2 -2
  9. package/esm2022/lib/editor/components/image/input-handler/image-input.handler.mjs +2 -2
  10. package/esm2022/lib/editor/components/table/components/table-cell.component.mjs +5 -3
  11. package/esm2022/lib/editor/components/table/components/table.component.mjs +7 -5
  12. package/esm2022/lib/editor/components/table/selection/table-selection.mjs +12 -5
  13. package/esm2022/lib/editor/content/display-data/display-data.mjs +4 -4
  14. package/esm2022/lib/editor/content/helpers/content-style.helper.mjs +1 -1
  15. package/esm2022/lib/editor/content/helpers/link.helper.mjs +39 -3
  16. package/esm2022/lib/editor/display/layers/text.layer.mjs +100 -75
  17. package/esm2022/lib/editor/display/print/print.helper.mjs +3 -3
  18. package/esm2022/lib/editor/display/print/print.renderer.mjs +5 -5
  19. package/esm2022/lib/editor/display/renderer.mjs +23 -25
  20. package/esm2022/lib/editor/display/virtual.renderer.mjs +10 -43
  21. package/esm2022/lib/editor/execution/edit.session.mjs +24 -14
  22. package/esm2022/lib/editor/execution/editor.mjs +77 -116
  23. package/esm2022/lib/editor/execution/regulator.service.mjs +44 -39
  24. package/esm2022/lib/editor/execution/targeting/cell-session-source.model.mjs +2 -3
  25. package/esm2022/lib/editor/execution/targeting/edge-session-source.model.mjs +2 -3
  26. package/esm2022/lib/editor/execution/targeting/main-session-source.model.mjs +2 -2
  27. package/esm2022/lib/editor/execution/targeting/session-source.model.mjs +1 -1
  28. package/esm2022/lib/editor/gadgets/history/operation-history.mjs +27 -24
  29. package/esm2022/lib/editor/interaction/editor.service.mjs +22 -22
  30. package/esm2022/lib/editor/interaction/mouse.handler.mjs +2 -2
  31. package/esm2022/lib/editor/operations/helpers/format-operations.helper.mjs +2 -2
  32. package/esm2022/lib/editor/operations/helpers/link-operations.helper.mjs +59 -7
  33. package/esm2022/lib/editor/operations/operations-helper.helper.mjs +19 -21
  34. package/esm2022/lib/editor/operations/save-commands.helper.mjs +3 -2
  35. package/esm2022/lib/editor/positioning/content.helper.mjs +10 -1
  36. package/esm2022/lib/editor/positioning/position.helper.mjs +49 -35
  37. package/esm2022/lib/editor/revision.helper.mjs +3 -1
  38. package/esm2022/lib/models/generated/restore-text-styles.model.mjs +1 -1
  39. package/esm2022/lib/models/generated/target.model.mjs +1 -1
  40. package/fesm2022/talrace-ngx-noder.mjs +636 -508
  41. package/fesm2022/talrace-ngx-noder.mjs.map +1 -1
  42. package/lib/apart-components/editor-toolbar/components/menu-dropdowns/menu-dropdowns.component.d.ts +1 -3
  43. package/lib/apart-components/editor-toolbar/editor-toolbar/editor-toolbar.component.d.ts +1 -1
  44. package/lib/editor/components/edges/edge-element.model.d.ts +9 -1
  45. package/lib/editor/components/edges/edge.component.d.ts +4 -4
  46. package/lib/editor/components/edges/edges.d.ts +8 -2
  47. package/lib/editor/components/table/components/table.component.d.ts +4 -2
  48. package/lib/editor/components/table/selection/table-selection.d.ts +5 -2
  49. package/lib/editor/content/display-data/display-data.d.ts +2 -1
  50. package/lib/editor/content/helpers/content-style.helper.d.ts +1 -1
  51. package/lib/editor/content/helpers/link.helper.d.ts +4 -1
  52. package/lib/editor/display/layers/text.layer.d.ts +8 -10
  53. package/lib/editor/display/print/print.helper.d.ts +1 -2
  54. package/lib/editor/display/print/print.renderer.d.ts +1 -2
  55. package/lib/editor/display/renderer.d.ts +9 -9
  56. package/lib/editor/display/virtual.renderer.d.ts +3 -10
  57. package/lib/editor/execution/edit.session.d.ts +7 -2
  58. package/lib/editor/execution/editor.d.ts +9 -8
  59. package/lib/editor/execution/regulator.service.d.ts +6 -4
  60. package/lib/editor/execution/targeting/cell-session-source.model.d.ts +0 -1
  61. package/lib/editor/execution/targeting/edge-session-source.model.d.ts +0 -1
  62. package/lib/editor/execution/targeting/session-source.model.d.ts +0 -1
  63. package/lib/editor/gadgets/history/operation-history.d.ts +5 -1
  64. package/lib/editor/interaction/editor.service.d.ts +13 -12
  65. package/lib/editor/operations/helpers/link-operations.helper.d.ts +7 -2
  66. package/lib/editor/operations/operations-helper.helper.d.ts +2 -2
  67. package/lib/editor/positioning/content.helper.d.ts +2 -0
  68. package/lib/editor/positioning/position.helper.d.ts +21 -6
  69. package/lib/models/generated/restore-text-styles.model.d.ts +1 -0
  70. package/lib/models/generated/target.model.d.ts +0 -1
  71. package/package.json +1 -1
  72. package/src/_ngx-noder.theme.scss +0 -7
  73. package/src/scss/base-editor.scss +4 -0
@@ -12,6 +12,7 @@ import * as i0 from "@angular/core";
12
12
  import * as i1 from "../../shared/services/component.service";
13
13
  import * as i2 from "../../../interaction/editor.service";
14
14
  import * as i3 from "../../shared/services/overlay.service";
15
+ import * as i4 from "../../../execution/regulator.service";
15
16
  export class NoderTableComponent extends BaseNoderComponent {
16
17
  get table() {
17
18
  return this.content;
@@ -19,12 +20,13 @@ export class NoderTableComponent extends BaseNoderComponent {
19
20
  set table(val) {
20
21
  this.content = val;
21
22
  }
22
- constructor(componentService, editorService, el, overlayService) {
23
+ constructor(componentService, editorService, el, overlayService, regulatorService) {
23
24
  super();
24
25
  this.componentService = componentService;
25
26
  this.editorService = editorService;
26
27
  this.el = el;
27
28
  this.overlayService = overlayService;
29
+ this.regulatorService = regulatorService;
28
30
  this.rowMatrix = [];
29
31
  this.splits = [];
30
32
  this.minRowHeight = 19;
@@ -67,7 +69,7 @@ export class NoderTableComponent extends BaseNoderComponent {
67
69
  this.createResizer();
68
70
  this.el.nativeElement.appendChild(this.resizerEl);
69
71
  this.el.nativeElement.appendChild(this.tableEl);
70
- this.tableSelection = new TableSelection(this.editorService, this.overlayService, this.rowMatrix, this.table, this.tableEl, this.sessionId);
72
+ this.tableSelection = new TableSelection(this.editorService, this.overlayService, this.regulatorService, this.rowMatrix, this.table, this.tableEl, this.regulatorService.getSession(this.sessionId));
71
73
  }
72
74
  getCellSession(row, column) {
73
75
  return this.rowMatrix[row].cells[column].componentRef.instance.session;
@@ -400,11 +402,11 @@ export class NoderTableComponent extends BaseNoderComponent {
400
402
  }
401
403
  }
402
404
  }
403
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NoderTableComponent, deps: [{ token: i1.ComponentService }, { token: i2.EditorService }, { token: i0.ElementRef }, { token: i3.OverlayService }], target: i0.ɵɵFactoryTarget.Component }); }
405
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NoderTableComponent, deps: [{ token: i1.ComponentService }, { token: i2.EditorService }, { token: i0.ElementRef }, { token: i3.OverlayService }, { token: i4.RegulatorService }], target: i0.ɵɵFactoryTarget.Component }); }
404
406
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: NoderTableComponent, selector: "app-nod-table", usesInheritance: true, ngImport: i0, template: '', isInline: true, styles: [":host{position:relative}:host::ng-deep table{position:relative;border-collapse:collapse;background:transparent;empty-cells:show;border-spacing:0;overflow:visible;table-layout:fixed}:host::ng-deep td{position:relative;vertical-align:top;border:1px solid #000;margin:0;padding:0;height:inherit}:host::ng-deep .hidden-cell{display:none;cursor:not-allowed}:host::ng-deep .resizer-border{position:absolute;border:solid .5px blue;z-index:1}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
405
407
  }
406
408
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NoderTableComponent, decorators: [{
407
409
  type: Component,
408
410
  args: [{ selector: 'app-nod-table', template: '', changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{position:relative}:host::ng-deep table{position:relative;border-collapse:collapse;background:transparent;empty-cells:show;border-spacing:0;overflow:visible;table-layout:fixed}:host::ng-deep td{position:relative;vertical-align:top;border:1px solid #000;margin:0;padding:0;height:inherit}:host::ng-deep .hidden-cell{display:none;cursor:not-allowed}:host::ng-deep .resizer-border{position:absolute;border:solid .5px blue;z-index:1}\n"] }]
409
- }], ctorParameters: () => [{ type: i1.ComponentService }, { type: i2.EditorService }, { type: i0.ElementRef }, { type: i3.OverlayService }] });
410
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvZWRpdG9yL2NvbXBvbmVudHMvdGFibGUvY29tcG9uZW50cy90YWJsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUUvRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBSzNELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRXhFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7O0FBUTdELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxrQkFBa0I7SUFDdkQsSUFBSSxLQUFLO1FBQ0wsT0FBTyxJQUFJLENBQUMsT0FBcUIsQ0FBQztJQUN0QyxDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsR0FBZTtRQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztJQUN2QixDQUFDO0lBa0JELFlBQ1ksZ0JBQWtDLEVBQ2xDLGFBQTRCLEVBQzVCLEVBQWMsRUFDZCxjQUE4QjtRQUV0QyxLQUFLLEVBQUUsQ0FBQztRQUxBLHFCQUFnQixHQUFo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LElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQ3ZFLENBQUM7YUFDTDtTQUNKO0lBQ0wsQ0FBQzsrR0FoZ0JRLG1CQUFtQjttR0FBbkIsbUJBQW1CLDRFQUpsQixFQUFFOzs0RkFJSCxtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0ksZUFBZSxZQUNmLEVBQUUsbUJBRUssdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQmFzZU5vZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Fic3RyYWN0L2Jhc2UuY29tcG9uZW50JztcbmltcG9ydCB7IENlbGxEYXRhTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvY2VsbC1kYXRhLm1vZGVsJztcbmltcG9ydCB7IENlbGxSZXNpemVyIH0gZnJvbSAnLi4vY2VsbC1yZXNpemVyL2NlbGwtcmVzaXplcic7XG5pbXBvcnQgeyBDZWxsUmVzaXplclBhcmFtZXRlcnNNb2RlbCB9IGZyb20gJy4uL21vZGVscy9jZWxsLXJlc2l6ZXItcGFyYW1ldGVycy5tb2RlbCc7XG5pbXBvcnQgeyBDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2NvbXBvbmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEVkaXRTZXNzaW9uIH0gZnJvbSAnLi4vLi4vLi4vZXhlY3V0aW9uL2VkaXQuc2Vzc2lvbic7XG5pbXBvcnQgeyBFZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJhY3Rpb24vZWRpdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgSFJ1bGUgfSBmcm9tICcuLi9lbnVtcy9ocnVsZS5lbnVtJztcbmltcG9ydCB7IE5vZGVyVGFibGVDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS1jZWxsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPdmVybGF5U2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9vdmVybGF5LnNlcnZpY2UnO1xuaW1wb3J0IHsgUm93RGF0YU1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3Jvdy1kYXRhLm1vZGVsJztcbmltcG9ydCB7IFJvd01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9yb3cubW9kZWwnO1xuaW1wb3J0IHsgU2NhbGluZ0hlbHBlciB9IGZyb20gJy4uLy4uLy4uL2NvbnRlbnQvaGVscGVycy9zY2FsaW5nLmhlbHBlcic7XG5pbXBvcnQgeyBUYWJsZU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC90YWJsZS5tb2RlbCc7XG5pbXBvcnQgeyBUYWJsZVNlbGVjdGlvbiB9IGZyb20gJy4uL3NlbGVjdGlvbi90YWJsZS1zZWxlY3Rpb24nO1xuaW1wb3J0IHsgVmVydGljYWxNZXJnZSB9IGZyb20gJy4uL2VudW1zL3ZlcnRpY2FsLW1lcmdlLmVudW0nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FwcC1ub2QtdGFibGUnLFxuICAgIHRlbXBsYXRlOiAnJyxcbiAgICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE5vZGVyVGFibGVDb21wb25lbnQgZXh0ZW5kcyBCYXNlTm9kZXJDb21wb25lbnQge1xuICAgIGdldCB0YWJsZSgpOiBUYWJsZU1vZGVsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGVudCBhcyBUYWJsZU1vZGVsO1xuICAgIH1cbiAgICBzZXQgdGFibGUodmFsOiBUYWJsZU1vZGVsKSB7XG4gICAgICAgIHRoaXMuY29udGVudCA9IHZhbDtcbiAgICB9XG5cbiAgICB0YWJsZVNlbGVjdGlvbjogVGFibGVTZWxlY3Rpb247XG5cbiAgICB0YWJsZUVsOiBIVE1MVGFibGVFbGVtZW50O1xuXG4gICAgcmVzaXplcjogQ2VsbFJlc2l6ZXI7XG5cbiAgICByZXNpemVyRWw6IEhUTUxEaXZFbGVtZW50O1xuXG4gICAgcm93TWF0cml4OiBSb3dEYXRhTW9kZWxbXSA9IFtdO1xuXG4gICAgc3BsaXRzOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgcmVhZG9ubHkgbWluUm93SGVpZ2h0ID0gMTk7XG5cbiAgICByZWFkb25seSBib3JkZXJTaXplID0gMTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGNvbXBvbmVudFNlcnZpY2U6IENvbXBvbmVudFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZWRpdG9yU2VydmljZTogRWRpdG9yU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBvdmVybGF5U2VydmljZTogT3ZlcmxheVNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy50YWJsZVNlbGVjdGlvbj8uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIGluaXRpYWxpemUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3JlYXRlVGFibGUoKTtcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVQcm9wZXJ0aWVzKCk7XG4gICAgICAgIHRoaXMuY3JlYXRlUmVzaXplcigpO1xuICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5yZXNpemVyRWwpO1xuICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy50YWJsZUVsKTtcbiAgICAgICAgdGhpcy50YWJsZVNlbGVjdGlvbiA9IG5ldyBUYWJsZVNlbGVjdGlvbihcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yU2VydmljZSxcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVNlcnZpY2UsXG4gICAgICAgICAgICB0aGlzLnJvd01hdHJpeCxcbiAgICAgICAgICAgIHRoaXMudGFibGUsXG4gICAgICAgICAgICB0aGlzLnRhYmxlRWwsXG4gICAgICAgICAgICB0aGlzLnNlc3Npb25JZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldENlbGxTZXNzaW9uKHJvdzogbnVtYmVyLCBjb2x1bW46IG51bWJlcik6IEVkaXRTZXNzaW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm93TWF0cml4W3Jvd10uY2VsbHNbY29sdW1uXS5jb21wb25lbnRSZWYuaW5zdGFuY2Uuc2Vzc2lvbjtcbiAgICB9XG5cbiAgICBnZXRDZWxsV2lkdGgodGFibGVSb3c6IFJvd01vZGVsLCBjZWxsSW5kZXg6IG51bWJlciwgYWJzb2x1dGVDZWxsSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGlmICh0YWJsZVJvdy5jZWxsc1tjZWxsSW5kZXhdLndpZHRoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGFibGVSb3cuY2VsbHNbY2VsbEluZGV4XS53aWR0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB3aWR0aCA9IDA7XG4gICAgICAgIGxldCBpID0gYWJzb2x1dGVDZWxsSW5kZXg7XG4gICAgICAgIGNvbnN0IGNlbGxTcGFuQ291bnQgPSBhYnNvbHV0ZUNlbGxJbmRleCArIHRhYmxlUm93LmNlbGxzW2NlbGxJbmRleF0uaG9yaXpvbnRhbE1lcmdlO1xuXG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIHdpZHRoICs9IHRoaXMudGFibGUuY29sdW1uc1tpXS53aWR0aDtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfSB3aGlsZSAoaSA8IGNlbGxTcGFuQ291bnQpO1xuXG4gICAgICAgIHJldHVybiB3aWR0aDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFkanVzdGVkV2lkdGgodGFibGVSb3c6IFJvd01vZGVsLCBjZWxsSW5kZXg6IG51bWJlciwgYWJzb2x1dGVDZWxsSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGNlbGxXaWR0aCA9IHRoaXMuZ2V0Q2VsbFdpZHRoKHRhYmxlUm93LCBjZWxsSW5kZXgsIGFic29sdXRlQ2VsbEluZGV4KTtcblxuICAgICAgICBpZiAodGFibGVSb3cuY2VsbHNbY2VsbEluZGV4XS53aWR0aFR5cGUgPT09ICdwY3QnKSB7XG4gICAgICAgICAgICB0YWJsZVJvdy5jZWxsc1tjZWxsSW5kZXhdLndpZHRoVHlwZSA9ICdkeGEnO1xuICAgICAgICAgICAgcmV0dXJuIChjZWxsV2lkdGggKiB0aGlzLl93aWR0aCkgLyA1MDAwOyAvLyA1MDAwIGlzIGVxdWFsIHRvIDEwMCUgaW4gZG9jeCB1bml0cyBvZiBtZWFzdXJlbWVudFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFNjYWxpbmdIZWxwZXIuc2NhbGUoY2VsbFdpZHRoLCB0aGlzLmdlbmVyYWxQcm9wZXJ0aWVzLnNjYWxpbmdSYXRpbyk7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVzaXplcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZXNpemVyRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGhpcy5yZXNpemVyRWwuY2xhc3NOYW1lID0gJ3Jlc2l6ZXItYm9yZGVyJztcbiAgICAgICAgdGhpcy5yZXNpemVyRWwuc2V0QXR0cmlidXRlKCdzdHlsZScsIGBkaXNwbGF5Om5vbmU7YCk7XG4gICAgICAgIHRoaXMucmVzaXplciA9IG5ldyBDZWxsUmVzaXplcih0aGlzLnRhYmxlLCB0aGlzLnRhYmxlRWwsIHRoaXMuZWRpdG9yU2VydmljZSwgdGhpcy5yZXNpemVyRWwpO1xuICAgICAgICB0aGlzLnJlc2l6ZXIuc2Vzc2lvbklkID0gdGhpcy5zZXNzaW9uSWQ7XG4gICAgfVxuXG4gICAgY3JlYXRlVGFibGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGFibGVFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RhYmxlJyk7XG4gICAgICAgIHRoaXMuc2V0Q29sZ3JvdXAoKTtcbiAgICAgICAgdGhpcy5pbnNlcnRSb3dzKHRoaXMudGFibGUucm93cy5sZW5ndGgsIDApO1xuICAgICAgICB0aGlzLmZpbGxUYWJsZUNlbGxzKCk7XG4gICAgfVxuXG4gICAgdXBkYXRlVGFibGUoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNlbGxSZWZzID0gbmV3IFNldCh0aGlzLnJvd01hdHJpeC5mbGF0TWFwKHJvdyA9PiByb3cuY2VsbHMpLm1hcChjZWxsID0+IGNlbGwuY29tcG9uZW50UmVmKSk7XG4gICAgICAgIGNlbGxSZWZzLmZvckVhY2goY2VsbFJlZiA9PiB0aGlzLmNvbXBvbmVudFNlcnZpY2UucmVtb3ZlQ29tcG9uZW50KGNlbGxSZWYpKTtcbiAgICAgICAgdGhpcy50YWJsZVNlbGVjdGlvbi5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMucm93TWF0cml4ID0gW107XG4gICAgICAgIHRoaXMudGFibGVFbC5yZW1vdmUoKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplKCk7XG4gICAgfVxuXG4gICAgaW5zZXJ0Um93cyhyb3dzQ291bnQ6IG51bWJlciwgdGFyZ2V0SW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl93aWR0aCA9IHRoaXMuZ2V0VGFibGVXaWR0aCgpO1xuICAgICAgICBsZXQgcm93SW5kZXggPSAwO1xuXG4gICAgICAgIHdoaWxlIChyb3dJbmRleCA8IHJvd3NDb3VudCkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0Um93SW5kZXggPSB0YXJnZXRJbmRleCArIHJvd0luZGV4O1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gdGhpcy50YWJsZUVsLmluc2VydFJvdyh0YXJnZXRSb3dJbmRleCk7XG4gICAgICAgICAgICB0aGlzLnJvd01hdHJpeC5zcGxpY2UodGFyZ2V0Um93SW5kZXgsIDAsIG5ldyBSb3dEYXRhTW9kZWwocm93LCAwLCBbXSkpO1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRDZWxscyh0YXJnZXRSb3dJbmRleCwgdGhpcy50YWJsZS5yb3dzW3RhcmdldFJvd0luZGV4XS5jZWxscy5sZW5ndGgsIDApO1xuICAgICAgICAgICAgcm93SW5kZXgrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmlsbFRhYmxlUm93KCk7XG4gICAgfVxuXG4gICAgaW5zZXJ0Q2VsbHMocm93SW5kZXg6IG51bWJlciwgY2VsbHNDb3VudDogbnVtYmVyLCB0YXJnZXRJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGxldCBtb2RlbFRhcmdldEluZGV4ID0gdGhpcy5nZXRNb2RlbFRhcmdldEluZGV4KHJvd0luZGV4LCB0YXJnZXRJbmRleCk7XG4gICAgICAgIHRoaXMuYWRkQ2VsbHMocm93SW5kZXgsIGNlbGxzQ291bnQsIHRhcmdldEluZGV4LCBtb2RlbFRhcmdldEluZGV4KTtcbiAgICB9XG5cbiAgICBnZXRNb2RlbFRhcmdldEluZGV4KHJvd0luZGV4OiBudW1iZXIsIHRhcmdldEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBsZXQgYWJzb2x1dGVNb2RlbENlbGxDb3VudCA9IDA7XG4gICAgICAgIGxldCBtb2RlbFRhcmdldEluZGV4ID0gMDtcblxuICAgICAgICB3aGlsZSAoYWJzb2x1dGVNb2RlbENlbGxDb3VudCA8IHRhcmdldEluZGV4KSB7XG4gICAgICAgICAgICBhYnNvbHV0ZU1vZGVsQ2VsbENvdW50ICs9IHRoaXMudGFibGUucm93c1tyb3dJbmRleF0uY2VsbHNbbW9kZWxUYXJnZXRJbmRleF0uaG9yaXpvbnRhbE1lcmdlID8/IDE7XG5cbiAgICAgICAgICAgIGlmIChhYnNvbHV0ZU1vZGVsQ2VsbENvdW50ID4gdGFyZ2V0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbW9kZWxUYXJnZXRJbmRleCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1vZGVsVGFyZ2V0SW5kZXg7XG4gICAgfVxuXG4gICAgYWRkQ2VsbHMocm93SW5kZXg6IG51bWJlciwgY2VsbHNDb3VudDogbnVtYmVyLCB0YXJnZXRJbmRleDogbnVtYmVyLCBtb2RlbFRhcmdldEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICBsZXQgY3VycmVudFRhcmdldEluZGV4ID0gdGFyZ2V0SW5kZXg7XG5cbiAgICAgICAgd2hpbGUgKGkgPCBjZWxsc0NvdW50KSB7XG4gICAgICAgICAgICBjb25zdCBtb2RlbENlbGxJbmRleCA9IG1vZGVsVGFyZ2V0SW5kZXggKyBpO1xuXG4gICAgICAgICAgICBpZiAoKHRoaXMudGFibGUucm93c1tyb3dJbmRleF0uY2VsbHNbbW9kZWxDZWxsSW5kZXhdLnZlcnRpY2FsTWVyZ2UgYXMgVmVydGljYWxNZXJnZSkgPT09IFZlcnRpY2FsTWVyZ2UuTWVyZ2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmhlcml0Q2VsbERhdGEgPSB0aGlzLnJvd01hdHJpeFtyb3dJbmRleCAtIDFdLmNlbGxzW2N1cnJlbnRUYXJnZXRJbmRleF07XG4gICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLnRhYmxlLnJvd3Nbcm93SW5kZXhdLmNlbGxzW21vZGVsQ2VsbEluZGV4XS5ob3Jpem9udGFsTWVyZ2UgPz8gMTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEFkZGl0aW9uYWxDZWxscyhyb3dJbmRleCwgY3VycmVudFRhcmdldEluZGV4LCBjb3VudCwgaW5oZXJpdENlbGxEYXRhKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0SW5kZXggKz0gY291bnQ7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjZWxsID0gdGhpcy50YWJsZUVsLnJvd3Nbcm93SW5kZXhdLmluc2VydENlbGwoY3VycmVudFRhcmdldEluZGV4KTtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuY29tcG9uZW50U2VydmljZS5nZW5lcmF0ZUFuZEF0dGFjaENvbXBvbmVudChjZWxsLCBOb2RlclRhYmxlQ2VsbENvbXBvbmVudCwge1xuICAgICAgICAgICAgICAgIHRhYmxlOiB0aGlzLnRhYmxlLFxuICAgICAgICAgICAgICAgIGNlbGw6IHRoaXMudGFibGUucm93c1tyb3dJbmRleF0uY2VsbHNbbW9kZWxDZWxsSW5kZXhdLFxuICAgICAgICAgICAgICAgIHBhcmVudFNlc3Npb25JZDogdGhpcy5zZXNzaW9uSWQsXG4gICAgICAgICAgICAgICAgcm93SW5kZXgsXG4gICAgICAgICAgICAgICAgY2VsbEluZGV4OiBtb2RlbENlbGxJbmRleCxcbiAgICAgICAgICAgICAgICBjb2x1bW5JbmRleDogY3VycmVudFRhcmdldEluZGV4LFxuICAgICAgICAgICAgICAgIHdpZHRoOiB0aGlzLmdldEFkanVzdGVkV2lkdGgodGhpcy50YWJsZS5yb3dzW3Jvd0luZGV4XSwgbW9kZWxDZWxsSW5kZXgsIGN1cnJlbnRUYXJnZXRJbmRleCksXG4gICAgICAgICAgICAgICAgZ2VuZXJhbFByb3BlcnRpZXM6IHRoaXMuZ2VuZXJhbFByb3BlcnRpZXMsXG4gICAgICAgICAgICAgICAgaGVpZ2h0Q2hhbmdlZDogdGhpcy5jZWxsSGVpZ2h0Q2hhbmdlZCxcbiAgICAgICAgICAgICAgICBzdGFydFJlc2l6aW5nOiB0aGlzLnN0YXJ0UmVzaXppbmdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgY2VsbENvbnRlbnRIZWlnaHQgPSBjb21wb25lbnRSZWYuaW5zdGFuY2UuZ2V0Q2VsbENvbnRlbnRIZWlnaHQoKTtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxEYXRhID0gbmV3IENlbGxEYXRhTW9kZWwoY2VsbCwgY2VsbENvbnRlbnRIZWlnaHQsIGNvbXBvbmVudFJlZik7XG4gICAgICAgICAgICB0aGlzLnJvd01hdHJpeFtyb3dJbmRleF0uY2VsbHMuc3BsaWNlKGN1cnJlbnRUYXJnZXRJbmRleCwgMCwgY2VsbERhdGEpO1xuICAgICAgICAgICAgY3VycmVudFRhcmdldEluZGV4Kys7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnRhYmxlLnJvd3Nbcm93SW5kZXhdLmNlbGxzW21vZGVsQ2VsbEluZGV4XS5ob3Jpem9udGFsTWVyZ2UgPiAxKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLnRhYmxlLnJvd3Nbcm93SW5kZXhdLmNlbGxzW21vZGVsQ2VsbEluZGV4XS5ob3Jpem9udGFsTWVyZ2UgLSAxO1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkQWRkaXRpb25hbENlbGxzKHJvd0luZGV4LCBjdXJyZW50VGFyZ2V0SW5kZXgsIGNvdW50LCBjZWxsRGF0YSk7XG4gICAgICAgICAgICAgICAgY3VycmVudFRhcmdldEluZGV4ICs9IGNvdW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRBZGRpdGlvbmFsQ2VsbHMocm93SW5kZXg6IG51bWJlciwgY2VsbEluZGV4OiBudW1iZXIsIGNlbGxzQ291bnQ6IG51bWJlciwgb3JpZ2luYWxDZWxsRGF0YTogQ2VsbERhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNlbGxzQ291bnQ7IGorKykge1xuICAgICAgICAgICAgY29uc3QgYWRkaXRpb25hbENlbGwgPSB0aGlzLnRhYmxlRWwucm93c1tyb3dJbmRleF0uaW5zZXJ0Q2VsbChjZWxsSW5kZXgpO1xuICAgICAgICAgICAgYWRkaXRpb25hbENlbGwuY2xhc3NMaXN0LmFkZCgnaGlkZGVuLWNlbGwnKTtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxEYXRhID0gbmV3IENlbGxEYXRhTW9kZWwob3JpZ2luYWxDZWxsRGF0YS5jZWxsLCBvcmlnaW5hbENlbGxEYXRhLmNlbGxDb250ZW50SGVpZ2h0LCBvcmlnaW5hbENlbGxEYXRhLmNvbXBvbmVudFJlZik7XG4gICAgICAgICAgICB0aGlzLnJvd01hdHJpeFtyb3dJbmRleF0uY2VsbHMuc3BsaWNlKGNlbGxJbmRleCwgMCwgY2VsbERhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0Q29sZ3JvdXAoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9sZENvbEdyb3VwcyA9IHRoaXMudGFibGVFbC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY29sZ3JvdXAnKTtcblxuICAgICAgICBpZiAob2xkQ29sR3JvdXBzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy50YWJsZUVsLnJlbW92ZUNoaWxkKG9sZENvbEdyb3Vwc1swXSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb2xncm91cCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NvbGdyb3VwJyk7XG4gICAgICAgIGxldCBpID0gMDtcblxuICAgICAgICB3aGlsZSAoaSA8IHRoaXMudGFibGUuY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NvbCcpO1xuICAgICAgICAgICAgY29uc3Qgc2NhbGVkV2lkdGggPSBTY2FsaW5nSGVscGVyLnNjYWxlKHRoaXMudGFibGUuY29sdW1uc1tpXS53aWR0aCwgdGhpcy5nZW5lcmFsUHJvcGVydGllcy5zY2FsaW5nUmF0aW8pO1xuICAgICAgICAgICAgY29sLnN0eWxlLndpZHRoID0gYCR7c2NhbGVkV2lkdGh9cHhgO1xuICAgICAgICAgICAgY29sZ3JvdXAuYXBwZW5kQ2hpbGQoY29sKTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGFibGVFbC5pbnNlcnRBZGphY2VudEVsZW1lbnQoJ2FmdGVyYmVnaW4nLCBjb2xncm91cCk7XG4gICAgfVxuXG4gICAgZmlsbFRhYmxlUm93KCk6IHZvaWQge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudGFibGUucm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgc3dpdGNoICh0aGlzLnRhYmxlLnJvd3NbaV0uaFJ1bGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIEhSdWxlLkF0TGVhc3Q6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93SGVpZ2h0ID0gdGhpcy5nZXRSb3dIZWlnaHQoaSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVFbC5yb3dzW2ldLnN0eWxlLm1pbkhlaWdodCA9IGAke3RoaXMudGFibGUucm93c1tpXS5oZWlnaHR9cHhgO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlRWwucm93c1tpXS5zdHlsZS5oZWlnaHQgPSBgJHtyb3dIZWlnaHR9cHhgO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd01hdHJpeFtpXS5oZWlnaHQgPSByb3dIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIEhSdWxlLkV4YWN0OlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlRWwucm93c1tpXS5zdHlsZS5oZWlnaHQgPSBgJHt0aGlzLnRhYmxlLnJvd3NbaV0uaGVpZ2h0fXB4YDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3dNYXRyaXhbaV0uaGVpZ2h0ID0gdGhpcy50YWJsZS5yb3dzW2ldLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByb3dIZWlnaHQgPSB0aGlzLmdldFJvd0hlaWdodChpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWluUm93SGVpZ2h0ID0gdGhpcy50YWJsZS5yb3dzW2ldLmhlaWdodCA/PyB0aGlzLm1pblJvd0hlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0SGVpZ2h0ID0gbWluUm93SGVpZ2h0ID4gcm93SGVpZ2h0ID8gbWluUm93SGVpZ2h0IDogcm93SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlRWwucm93c1tpXS5zdHlsZS5oZWlnaHQgPSBgJHtyZXN1bHRIZWlnaHR9cHhgO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd01hdHJpeFtpXS5oZWlnaHQgPSByZXN1bHRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFJvd0hlaWdodChyb3dJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgY2VsbEhlaWdodHMgPSB0aGlzLnJvd01hdHJpeFtyb3dJbmRleF0uY2VsbHMubWFwKCh4LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKCh4LmNvbXBvbmVudFJlZi5pbnN0YW5jZS5jZWxsLnZlcnRpY2FsTWVyZ2UgYXMgVmVydGljYWxNZXJnZSkgPT09IFZlcnRpY2FsTWVyZ2UuUmVzdGFydCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzTGFzdFZlcnRpY2FsTWVyZ2VkQ2VsbCA9IHguY2VsbCAhPT0gdGhpcy5yb3dNYXRyaXhbcm93SW5kZXggKyAxXT8uY2VsbHNbaW5kZXhdLmNlbGw7XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNMYXN0VmVydGljYWxNZXJnZWRDZWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpID0gcm93SW5kZXggLSAxO1xuICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudEhlaWdodCA9IHguY2VsbENvbnRlbnRIZWlnaHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHguY2VsbCA9PT0gdGhpcy5yb3dNYXRyaXhbaV0/LmNlbGxzW2luZGV4XS5jZWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50SGVpZ2h0IC09IHRoaXMucm93TWF0cml4W2ldLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGktLTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50SGVpZ2h0O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4geC5jZWxsQ29udGVudEhlaWdodDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KC4uLmNlbGxIZWlnaHRzKTtcbiAgICB9XG5cbiAgICBmaWxsVGFibGVDZWxscygpOiB2b2lkIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd01hdHJpeC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLnJvd01hdHJpeFtpXS5jZWxscy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3dNYXRyaXhbaSAtIDFdPy5jZWxsc1tqXT8uY2VsbCA9PT0gdGhpcy5yb3dNYXRyaXhbaV0uY2VsbHNbal0uY2VsbCB8fFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd01hdHJpeFtpXS5jZWxsc1tqXS5jZWxsID09PSB0aGlzLnJvd01hdHJpeFtpXS5jZWxsc1tqIC0gMV0/LmNlbGwgfHxcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMucm93TWF0cml4W2ldLmNlbGxzW2pdLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5jZWxsLnZlcnRpY2FsTWVyZ2UgYXMgVmVydGljYWxNZXJnZSkgPT09IFZlcnRpY2FsTWVyZ2UuTWVyZ2VcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5yb3dNYXRyaXhbaV0uY2VsbHNbal0uY2VsbC5jb2xTcGFuID0gdGhpcy5yb3dNYXRyaXhbaV0uY2VsbHNbal0uY29tcG9uZW50UmVmLmluc3RhbmNlLmNlbGwuaG9yaXpvbnRhbE1lcmdlO1xuICAgICAgICAgICAgICAgIHRoaXMucm93TWF0cml4W2ldLmNlbGxzW2pdLmNlbGwuc3R5bGUuYmFja2dyb3VuZENvbG9yID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3dNYXRyaXhbaV0uY2VsbHNbal0uY29tcG9uZW50UmVmLmluc3RhbmNlLmNlbGwuYmFja2dyb3VuZENvbG9yO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Q2VsbFJvd1NwYW4oaSwgaik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRDZWxsUm93U3Bhbihyb3dJbmRleDogbnVtYmVyLCBhYnNvbHV0ZUNlbGxJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMucm93TWF0cml4W3Jvd0luZGV4XS5jZWxsc1thYnNvbHV0ZUNlbGxJbmRleF0uY2VsbC5yb3dTcGFuID0gMTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAodGhpcy5yb3dNYXRyaXhbcm93SW5kZXhdLmNlbGxzW2Fic29sdXRlQ2VsbEluZGV4XS5jb21wb25lbnRSZWYuaW5zdGFuY2UuY2VsbC52ZXJ0aWNhbE1lcmdlIGFzIFZlcnRpY2FsTWVyZ2UpICE9PVxuICAgICAgICAgICAgVmVydGljYWxNZXJnZS5SZXN0YXJ0XG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IHJvd0luZGV4ICsgMTsgaSA8IHRoaXMucm93TWF0cml4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yb3dNYXRyaXhbaV0uY2VsbHNbYWJzb2x1dGVDZWxsSW5kZXhdLmNlbGwgPT09IHRoaXMucm93TWF0cml4W3Jvd0luZGV4XS5jZWxsc1thYnNvbHV0ZUNlbGxJbmRleF0uY2VsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMucm93TWF0cml4W3Jvd0luZGV4XS5jZWxsc1thYnNvbHV0ZUNlbGxJbmRleF0uY2VsbC5yb3dTcGFuKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0VGFibGVIZWlnaHQoKTogdm9pZCB7XG4gICAgICAgIGxldCBib3JkZXJzSGVpZ2h0ID0gMDtcbiAgICAgICAgbGV0IHJvd3NIZWlnaHQgPSAxO1xuXG4gICAgICAgIGZvciAobGV0IHJvdyBvZiB0aGlzLnJvd01hdHJpeCkge1xuICAgICAgICAgICAgcm93c0hlaWdodCArPSByb3cuaGVpZ2h0O1xuXG4gICAgICAgICAgICBpZiAocm93LmNlbGxzLnNvbWUoeCA9PiAheC5jb21wb25lbnRSZWYuaW5zdGFuY2UuY2VsbC52ZXJ0aWNhbE1lcmdlKSkge1xuICAgICAgICAgICAgICAgIGJvcmRlcnNIZWlnaHQgKz0gdGhpcy5ib3JkZXJTaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5faGVpZ2h0ID0gcm93c0hlaWdodCArIGJvcmRlcnNIZWlnaHQ7XG4gICAgfVxuXG4gICAgc3RhcnRSZXNpemluZyA9IChjZWxsUmVzaXplclBhcmFtZXRlcnM6IENlbGxSZXNpemVyUGFyYW1ldGVyc01vZGVsKTogdm9pZCA9PiB7XG4gICAgICAgIGNvbnN0IHNwbGl0Um93SW5kZXggPSB0aGlzLmdldFNwbGl0Um93SW5kZXgoY2VsbFJlc2l6ZXJQYXJhbWV0ZXJzLnJvd0luZGV4KTtcbiAgICAgICAgdGhpcy5yZXNpemVyLnJlc2l6ZXJIZWlnaHQgPSB0aGlzLmdldFJvd3NIZWlnaHRCZXR3ZWVuU3BsaXRzKHNwbGl0Um93SW5kZXgpO1xuICAgICAgICB0aGlzLnJlc2l6ZXIuc3RhcnRZID0gdGhpcy5nZXRSb3dzSGVpZ2h0QmVmb3JlKHNwbGl0Um93SW5kZXgpO1xuICAgICAgICB0aGlzLnJlc2l6ZXIuc3BsaXRSb3dJbmRleCA9IHNwbGl0Um93SW5kZXg7XG4gICAgICAgIHRoaXMucmVzaXplci50YWJsZUluc2VydEluZGV4ID0gdGhpcy5pbnNlcnRJbmRleDtcbiAgICAgICAgdGhpcy5yZXNpemVyLm9uU3RhcnRSZXNpemluZyhjZWxsUmVzaXplclBhcmFtZXRlcnMpO1xuICAgIH07XG5cbiAgICBwcm9jZXNzU3BsaXQoXG4gICAgICAgIGxlZnRTcGFjZU9uUGFnZTogbnVtYmVyLFxuICAgICAgICBzcGFjZUJldHdlZW5QYWdlc0NvbnRlbnQ6IG51bWJlcixcbiAgICAgICAgY29udGVudEhlaWdodDogbnVtYmVyXG4gICAgKTogeyBzcGxpdHNDb3VudDogbnVtYmVyOyB0YWJsZUhlaWdodDogbnVtYmVyOyBsZWZ0SGVpZ2h0OiBudW1iZXIgfSB7XG4gICAgICAgIHRoaXMucmVtb3ZlU3BsaXRzKCk7XG5cbiAgICAgICAgaWYgKGxlZnRTcGFjZU9uUGFnZSA+PSB0aGlzLmhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgc3BsaXRzQ291bnQ6IDAsIHRhYmxlSGVpZ2h0OiB0aGlzLmhlaWdodCwgbGVmdEhlaWdodDogMCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxlZnRTcGFjZU9uUGFnZSA8IHRoaXMucm93TWF0cml4WzBdLmhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgc3BsaXRzQ291bnQ6IDEsIHRhYmxlSGVpZ2h0OiB0aGlzLmhlaWdodCwgbGVmdEhlaWdodDogdGhpcy5oZWlnaHQgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnNwbGl0VGFibGUobGVmdFNwYWNlT25QYWdlLCBzcGFjZUJldHdlZW5QYWdlc0NvbnRlbnQsIGNvbnRlbnRIZWlnaHQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3BsaXRUYWJsZShcbiAgICAgICAgbGVmdFNwYWNlT25QYWdlOiBudW1iZXIsXG4gICAgICAgIHNwYWNlQmV0d2VlblBhZ2VzQ29udGVudDogbnVtYmVyLFxuICAgICAgICBjb250ZW50SGVpZ2h0OiBudW1iZXJcbiAgICApOiB7IHNwbGl0c0NvdW50OiBudW1iZXI7IHRhYmxlSGVpZ2h0OiBudW1iZXI7IGxlZnRIZWlnaHQ6IG51bWJlciB9IHtcbiAgICAgICAgbGV0IGxlZnRIZWlnaHQgPSAwLFxuICAgICAgICAgICAgdGFibGVIZWlnaHRXaXRoU3BsaXRzID0gdGhpcy5oZWlnaHQsXG4gICAgICAgICAgICByb3dJbmRleCA9IDA7XG4gICAgICAgIHdoaWxlIChyb3dJbmRleCA8IHRoaXMucm93TWF0cml4Lmxlbmd0aCkge1xuICAgICAgICAgICAgbGV0IHsgaW5kZXgsIHJvd3NIZWlnaHQgfSA9IHRoaXMuZ2V0Um93SW5kZXhCeUhlaWdodChyb3dJbmRleCwgbGVmdFNwYWNlT25QYWdlKTtcbiAgICAgICAgICAgIHJvd0luZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IHRoaXMucm93TWF0cml4Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZWZ0SGVpZ2h0ID0gdGhpcy5yb3dNYXRyaXhcbiAgICAgICAgICAgICAgICAuc2xpY2UoaW5kZXgpXG4gICAgICAgICAgICAgICAgLm1hcCh4ID0+IHguaGVpZ2h0KVxuICAgICAgICAgICAgICAgIC5yZWR1Y2UoKHBhcnRpYWxTdW0sIGN1cnIpID0+IHBhcnRpYWxTdW0gKyBjdXJyICsgdGhpcy5ib3JkZXJTaXplKTtcblxuICAgICAgICAgICAgY29uc3Qgc3BsaXRSb3dIZWlnaHQgPSBzcGFjZUJldHdlZW5QYWdlc0NvbnRlbnQgKyBsZWZ0U3BhY2VPblBhZ2UgLSByb3dzSGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVTcGxpdFJvdyhpbmRleCArIHRoaXMuc3BsaXRzLmxlbmd0aCwgc3BsaXRSb3dIZWlnaHQpO1xuICAgICAgICAgICAgdGhpcy5zcGxpdHMucHVzaChpbmRleCArIHRoaXMuc3BsaXRzLmxlbmd0aCk7XG4gICAgICAgICAgICB0YWJsZUhlaWdodFdpdGhTcGxpdHMgKz0gc3BsaXRSb3dIZWlnaHQ7XG4gICAgICAgICAgICBsZWZ0U3BhY2VPblBhZ2UgPSBjb250ZW50SGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNwbGl0c0NvdW50OiB0aGlzLnNwbGl0cy5sZW5ndGgsXG4gICAgICAgICAgICB0YWJsZUhlaWdodDogdGFibGVIZWlnaHRXaXRoU3BsaXRzLFxuICAgICAgICAgICAgbGVmdEhlaWdodFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Um93SW5kZXhCeUhlaWdodChzdGFydEluZGV4OiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogeyBpbmRleDogbnVtYmVyOyByb3dzSGVpZ2h0OiBudW1iZXIgfSB7XG4gICAgICAgIGlmIChzdGFydEluZGV4ID49IHRoaXMucm93TWF0cml4Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgaW5kZXg6IHRoaXMucm93TWF0cml4Lmxlbmd0aCwgcm93c0hlaWdodDogMCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHRhYmxlSGVpZ2h0ID0gdGhpcy5yb3dNYXRyaXhbc3RhcnRJbmRleF0uaGVpZ2h0ICsgdGhpcy5ib3JkZXJTaXplLFxuICAgICAgICAgICAgaSA9IHN0YXJ0SW5kZXg7XG5cbiAgICAgICAgd2hpbGUgKHRhYmxlSGVpZ2h0IDwgaGVpZ2h0KSB7XG4gICAgICAgICAgICB0YWJsZUhlaWdodCArPSB0aGlzLnJvd01hdHJpeFtpICsgMV0/LmhlaWdodCArIHRoaXMuYm9yZGVyU2l6ZTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IGluZGV4OiBpLCByb3dzSGVpZ2h0OiB0YWJsZUhlaWdodCAtIHRoaXMucm93TWF0cml4W2ldPy5oZWlnaHQgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVNwbGl0Um93KGluZGV4OiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGFibGVFbC5pbnNlcnRSb3coaW5kZXgpO1xuICAgICAgICB0aGlzLnRhYmxlRWwucm93c1tpbmRleF0uc3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YDtcbiAgICAgICAgdGhpcy50YWJsZUVsLnJvd3NbaW5kZXhdLmNsYXNzTGlzdC5hZGQoJ3NwbGl0LXJvdycpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlU3BsaXRzKCkge1xuICAgICAgICB0aGlzLnNwbGl0cyA9IFtdO1xuICAgICAgICB3aGlsZSAodGhpcy50YWJsZUVsLnF1ZXJ5U2VsZWN0b3IoJy5zcGxpdC1yb3cnKSkge1xuICAgICAgICAgICAgY29uc3QgZWwgPSB0aGlzLnRhYmxlRWwucXVlcnlTZWxlY3RvcignLnNwbGl0LXJvdycpO1xuICAgICAgICAgICAgZWwucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY2FsY3VsYXRlUHJvcGVydGllcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnRhYmxlRWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0VGFibGVIZWlnaHQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFRhYmxlV2lkdGgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGUuY29sdW1ucy5yZWR1Y2UoKHByZXYsIG5leHQpID0+IHByZXYgKyBuZXh0LndpZHRoICsgdGhpcy5ib3JkZXJTaXplLCAxKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNlbGxIZWlnaHRDaGFuZ2VkID0gKHJvd0luZGV4OiBudW1iZXIsIGNlbGxJbmRleDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IHZvaWQgPT4ge1xuICAgICAgICBjb25zdCB0YWJsZVJvdyA9IHRoaXMudGFibGUucm93c1tyb3dJbmRleF07XG4gICAgICAgIHRoaXMucm93TWF0cml4W3Jvd0luZGV4XS5jZWxsc1tjZWxsSW5kZXhdLmNlbGxDb250ZW50SGVpZ2h0ID0gaGVpZ2h0IDwgdGhpcy5taW5Sb3dIZWlnaHQgPyB0aGlzLm1pblJvd0hlaWdodCA6IGhlaWdodDtcblxuICAgICAgICBpZiAodGFibGVSb3cuaFJ1bGUgPT09IEhSdWxlLkV4YWN0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByb3dJbmRleFdpdGhTcGxpdCA9IHRoaXMuZ2V0SW5kZXhJbmNsdWRpbmdTcGxpdFJvd3ModGhpcy5yb3dNYXRyaXhbcm93SW5kZXhdLnJvdyk7XG5cbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy50YWJsZUVsLnJvd3Nbcm93SW5kZXhXaXRoU3BsaXRdO1xuICAgICAgICBjb25zdCBjdXJyZW50SGVpZ2h0ID0gcm93Lm9mZnNldEhlaWdodDtcbiAgICAgICAgY29uc3QgY2VsbEhlaWdodHMgPSB0aGlzLnJvd01hdHJpeFtyb3dJbmRleF0uY2VsbHMubWFwKHggPT4geC5jZWxsQ29udGVudEhlaWdodCk7XG4gICAgICAgIGNvbnN0IG1heENlbGxDb250ZW50SGVpZ2ggPSBNYXRoLm1heCguLi5jZWxsSGVpZ2h0cywgaGVpZ2h0KTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBtYXhDZWxsQ29udGVudEhlaWdoID4gY3VycmVudEhlaWdodCB8fFxuICAgICAgICAgICAgKG1heENlbGxDb250ZW50SGVpZ2ggPCBjdXJyZW50SGVpZ2h0ICYmICghdGFibGVSb3cuaGVpZ2h0IHx8IHRhYmxlUm93LmhlaWdodCA8PSBtYXhDZWxsQ29udGVudEhlaWdoKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByb3cuc3R5bGUuaGVpZ2h0ID0gYCR7bWF4Q2VsbENvbnRlbnRIZWlnaH1weGA7XG4gICAgICAgICAgICB0aGlzLnJvd01hdHJpeFtyb3dJbmRleF0uaGVpZ2h0ID0gbWF4Q2VsbENvbnRlbnRIZWlnaDtcbiAgICAgICAgICAgIHRoaXMuc2V0VGFibGVIZWlnaHQoKTtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5jaGFuZ2VkVGFibGVTaXplKHRoaXMuaW5zZXJ0SW5kZXgsIHRoaXMuc2Vzc2lvbklkKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBwcml2YXRlIGdldFNwbGl0Um93SW5kZXgocm93SW5kZXg6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRJbmRleEluY2x1ZGluZ1NwbGl0Um93cyh0aGlzLnJvd01hdHJpeFtyb3dJbmRleF0ucm93KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEluZGV4SW5jbHVkaW5nU3BsaXRSb3dzKHJvdzogSFRNTFRhYmxlUm93RWxlbWVudCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMudGFibGVFbC5yb3dzKS5pbmRleE9mKHJvdyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSb3dzSGVpZ2h0QmVmb3JlKHJvd0luZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdGhpcy5zcGxpdHMpIHtcbiAgICAgICAgICAgIGlmIChyb3dJbmRleCA8IGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5kZXggPSBlbGVtZW50ICsgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmdldFJvd3NIZWlnaHQoMCwgaW5kZXgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Um93c0hlaWdodEJldHdlZW5TcGxpdHMocm93SW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGxldCBzdGFydEluZGV4ID0gMDtcbiAgICAgICAgbGV0IGVuZEluZGV4ID0gdGhpcy50YWJsZUVsLnJvd3MubGVuZ3RoO1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdGhpcy5zcGxpdHMpIHtcbiAgICAgICAgICAgIGlmIChyb3dJbmRleCA8IGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBlbmRJbmRleCA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBlbGVtZW50ICsgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmdldFJvd3NIZWlnaHQoc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Um93c0hlaWdodChzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGxldCBzdW0gPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgICAgICAgc3VtICs9IHRoaXMudGFibGVFbC5yb3dzW2ldLm9mZnNldEhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdW07XG4gICAgfVxuXG4gICAgdXBkYXRlQ2VsbHMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJvd3MgPSB0aGlzLnJvd01hdHJpeC5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGNvbHMgPSByb3dzID4gMCA/IHRoaXMucm93TWF0cml4WzBdLmNlbGxzLmxlbmd0aCA6IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHM7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSB0aGlzLnJvd01hdHJpeFtpXS5jZWxsc1tqXTtcbiAgICAgICAgICAgICAgICBjZWxsLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5zZXNzaW9uLmRpc3BsYXlEYXRhLnVwZGF0ZU5leHRMaW5lSW5kZXhlcyhcbiAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgY2VsbC5jb21wb25lbnRSZWYuaW5zdGFuY2Uuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIl19
411
+ }], ctorParameters: () => [{ type: i1.ComponentService }, { type: i2.EditorService }, { type: i0.ElementRef }, { type: i3.OverlayService }, { type: i4.RegulatorService }] });
412
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvZWRpdG9yL2NvbXBvbmVudHMvdGFibGUvY29tcG9uZW50cy90YWJsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUUvRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBSzNELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUdqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRXhFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7OztBQVE3RCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsa0JBQWtCO0lBQ3ZELElBQUksS0FBSztRQUNMLE9BQU8sSUFBSSxDQUFDLE9BQXFCLENBQUM7SUFDdEMsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLEdBQWU7UUFDckIsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7SUFDdkIsQ0FBQztJQWtCRCxZQUNZLGdCQUFrQyxFQUNsQyxhQUE0QixFQUM1QixFQUFjLEVBQ2QsY0FBOEIsRUFDOUIsZ0JBQWtDO1FBRTFDLEtBQUssRUFBRSxDQUFDO1FB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QyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQ2hFLENBQUMsRUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUN2RSxDQUFDO2FBQ0w7U0FDSjtJQUNMLENBQUM7K0dBbGdCUSxtQkFBbUI7bUdBQW5CLG1CQUFtQiw0RUFKbEIsRUFBRTs7NEZBSUgsbUJBQW1CO2tCQU4vQixTQUFTOytCQUNJLGVBQWUsWUFDZixFQUFFLG1CQUVLLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEJhc2VOb2RlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3NoYXJlZC9hYnN0cmFjdC9iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDZWxsRGF0YU1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL2NlbGwtZGF0YS5tb2RlbCc7XG5pbXBvcnQgeyBDZWxsUmVzaXplciB9IGZyb20gJy4uL2NlbGwtcmVzaXplci9jZWxsLXJlc2l6ZXInO1xuaW1wb3J0IHsgQ2VsbFJlc2l6ZXJQYXJhbWV0ZXJzTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvY2VsbC1yZXNpemVyLXBhcmFtZXRlcnMubW9kZWwnO1xuaW1wb3J0IHsgQ29tcG9uZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9jb21wb25lbnQuc2VydmljZSc7XG5pbXBvcnQgeyBFZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJhY3Rpb24vZWRpdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWRpdFNlc3Npb24gfSBmcm9tICcuLi8uLi8uLi9leGVjdXRpb24vZWRpdC5zZXNzaW9uJztcbmltcG9ydCB7IEhSdWxlIH0gZnJvbSAnLi4vZW51bXMvaHJ1bGUuZW51bSc7XG5pbXBvcnQgeyBOb2RlclRhYmxlQ2VsbENvbXBvbmVudCB9IGZyb20gJy4vdGFibGUtY2VsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgT3ZlcmxheVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvb3ZlcmxheS5zZXJ2aWNlJztcbmltcG9ydCB7IFJlZ3VsYXRvclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9leGVjdXRpb24vcmVndWxhdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgUm93RGF0YU1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3Jvdy1kYXRhLm1vZGVsJztcbmltcG9ydCB7IFJvd01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9yb3cubW9kZWwnO1xuaW1wb3J0IHsgU2NhbGluZ0hlbHBlciB9IGZyb20gJy4uLy4uLy4uL2NvbnRlbnQvaGVscGVycy9zY2FsaW5nLmhlbHBlcic7XG5pbXBvcnQgeyBUYWJsZU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC90YWJsZS5tb2RlbCc7XG5pbXBvcnQgeyBUYWJsZVNlbGVjdGlvbiB9IGZyb20gJy4uL3NlbGVjdGlvbi90YWJsZS1zZWxlY3Rpb24nO1xuaW1wb3J0IHsgVmVydGljYWxNZXJnZSB9IGZyb20gJy4uL2VudW1zL3ZlcnRpY2FsLW1lcmdlLmVudW0nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FwcC1ub2QtdGFibGUnLFxuICAgIHRlbXBsYXRlOiAnJyxcbiAgICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE5vZGVyVGFibGVDb21wb25lbnQgZXh0ZW5kcyBCYXNlTm9kZXJDb21wb25lbnQge1xuICAgIGdldCB0YWJsZSgpOiBUYWJsZU1vZGVsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGVudCBhcyBUYWJsZU1vZGVsO1xuICAgIH1cbiAgICBzZXQgdGFibGUodmFsOiBUYWJsZU1vZGVsKSB7XG4gICAgICAgIHRoaXMuY29udGVudCA9IHZhbDtcbiAgICB9XG5cbiAgICB0YWJsZVNlbGVjdGlvbjogVGFibGVTZWxlY3Rpb247XG5cbiAgICB0YWJsZUVsOiBIVE1MVGFibGVFbGVtZW50O1xuXG4gICAgcmVzaXplcjogQ2VsbFJlc2l6ZXI7XG5cbiAgICByZXNpemVyRWw6IEhUTUxEaXZFbGVtZW50O1xuXG4gICAgcm93TWF0cml4OiBSb3dEYXRhTW9kZWxbXSA9IFtdO1xuXG4gICAgc3BsaXRzOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgcmVhZG9ubHkgbWluUm93SGVpZ2h0ID0gMTk7XG5cbiAgICByZWFkb25seSBib3JkZXJTaXplID0gMTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGNvbXBvbmVudFNlcnZpY2U6IENvbXBvbmVudFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZWRpdG9yU2VydmljZTogRWRpdG9yU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBvdmVybGF5U2VydmljZTogT3ZlcmxheVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVndWxhdG9yU2VydmljZTogUmVndWxhdG9yU2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICB0aGlzLnRhYmxlU2VsZWN0aW9uPy5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jcmVhdGVUYWJsZSgpO1xuICAgICAgICB0aGlzLmNhbGN1bGF0ZVByb3BlcnRpZXMoKTtcbiAgICAgICAgdGhpcy5jcmVhdGVSZXNpemVyKCk7XG4gICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnJlc2l6ZXJFbCk7XG4gICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnRhYmxlRWwpO1xuICAgICAgICB0aGlzLnRhYmxlU2VsZWN0aW9uID0gbmV3IFRhYmxlU2VsZWN0aW9uKFxuICAgICAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLFxuICAgICAgICAgICAgdGhpcy5vdmVybGF5U2VydmljZSxcbiAgICAgICAgICAgIHRoaXMucmVndWxhdG9yU2VydmljZSxcbiAgICAgICAgICAgIHRoaXMucm93TWF0cml4LFxuICAgICAgICAgICAgdGhpcy50YWJsZSxcbiAgICAgICAgICAgIHRoaXMudGFibGVFbCxcbiAgICAgICAgICAgIHRoaXMucmVndWxhdG9yU2VydmljZS5nZXRTZXNzaW9uKHRoaXMuc2Vzc2lvbklkKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldENlbGxTZXNzaW9uKHJvdzogbnVtYmVyLCBjb2x1bW46IG51bWJlcik6IEVkaXRTZXNzaW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm93TWF0cml4W3Jvd10uY2VsbHNbY29sdW1uXS5jb21wb25lbnRSZWYuaW5zdGFuY2Uuc2Vzc2lvbjtcbiAgICB9XG5cbiAgICBnZXRDZWxsV2lkdGgodGFibGVSb3c6IFJvd01vZGVsLCBjZWxsSW5kZXg6IG51bWJlciwgYWJzb2x1dGVDZWxsSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGlmICh0YWJsZVJvdy5jZWxsc1tjZWxsSW5kZXhdLndpZHRoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGFibGVSb3cuY2VsbHNbY2VsbEluZGV4XS53aWR0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB3aWR0aCA9IDA7XG4gICAgICAgIGxldCBpID0gYWJzb2x1dGVDZWxsSW5kZXg7XG4gICAgICAgIGNvbnN0IGNlbGxTcGFuQ291bnQgPSBhYnNvbHV0ZUNlbGxJbmRleCArIHRhYmxlUm93LmNlbGxzW2NlbGxJbmRleF0uaG9yaXpvbnRhbE1lcmdlO1xuXG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIHdpZHRoICs9IHRoaXMudGFibGUuY29sdW1uc1tpXS53aWR0aDtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfSB3aGlsZSAoaSA8IGNlbGxTcGFuQ291bnQpO1xuXG4gICAgICAgIHJldHVybiB3aWR0aDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFkanVzdGVkV2lkdGgodGFibGVSb3c6IFJvd01vZGVsLCBjZWxsSW5kZXg6IG51bWJlciwgYWJzb2x1dGVDZWxsSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGNlbGxXaWR0aCA9IHRoaXMuZ2V0Q2VsbFdpZHRoKHRhYmxlUm93LCBjZWxsSW5kZXgsIGFic29sdXRlQ2VsbEluZGV4KTtcblxuICAgICAgICBpZiAodGFibGVSb3cuY2VsbHNbY2VsbEluZGV4XS53aWR0aFR5cGUgPT09ICdwY3QnKSB7XG4gICAgICAgICAgICB0YWJsZVJvdy5jZWxsc1tjZWxsSW5kZXhdLndpZHRoVHlwZSA9ICdkeGEnO1xuICAgICAgICAgICAgcmV0dXJuIChjZWxsV2lkdGggKiB0aGlzLl93aWR0aCkgLyA1MDAwOyAvLyA1MDAwIGlzIGVxdWFsIHRvIDEwMCUgaW4gZG9jeCB1bml0cyBvZiBtZWFzdXJlbWVudFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFNjYWxpbmdIZWxwZXIuc2NhbGUoY2VsbFdpZHRoLCB0aGlzLmdlbmVyYWxQcm9wZXJ0aWVzLnNjYWxpbmdSYXRpbyk7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVzaXplcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZXNpemVyRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGhpcy5yZXNpemVyRWwuY2xhc3NOYW1lID0gJ3Jlc2l6ZXItYm9yZGVyJztcbiAgICAgICAgdGhpcy5yZXNpemVyRWwuc2V0QXR0cmlidXRlKCdzdHlsZScsIGBkaXNwbGF5Om5vbmU7YCk7XG4gICAgICAgIHRoaXMucmVzaXplciA9IG5ldyBDZWxsUmVzaXplcih0aGlzLnRhYmxlLCB0aGlzLnRhYmxlRWwsIHRoaXMuZWRpdG9yU2VydmljZSwgdGhpcy5yZXNpemVyRWwpO1xuICAgICAgICB0aGlzLnJlc2l6ZXIuc2Vzc2lvbklkID0gdGhpcy5zZXNzaW9uSWQ7XG4gICAgfVxuXG4gICAgY3JlYXRlVGFibGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGFibGVFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RhYmxlJyk7XG4gICAgICAgIHRoaXMuc2V0Q29sZ3JvdXAoKTtcbiAgICAgICAgdGhpcy5pbnNlcnRSb3dzKHRoaXMudGFibGUucm93cy5sZW5ndGgsIDApO1xuICAgICAgICB0aGlzLmZpbGxUYWJsZUNlbGxzKCk7XG4gICAgfVxuXG4gICAgdXBkYXRlVGFibGUoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNlbGxSZWZzID0gbmV3IFNldCh0aGlzLnJvd01hdHJpeC5mbGF0TWFwKHJvdyA9PiByb3cuY2VsbHMpLm1hcChjZWxsID0+IGNlbGwuY29tcG9uZW50UmVmKSk7XG4gICAgICAgIGNlbGxSZWZzLmZvckVhY2goY2VsbFJlZiA9PiB0aGlzLmNvbXBvbmVudFNlcnZpY2UucmVtb3ZlQ29tcG9uZW50KGNlbGxSZWYpKTtcbiAgICAgICAgdGhpcy50YWJsZVNlbGVjdGlvbi5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMucm93TWF0cml4ID0gW107XG4gICAgICAgIHRoaXMudGFibGVFbC5yZW1vdmUoKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplKCk7XG4gICAgfVxuXG4gICAgaW5zZXJ0Um93cyhyb3dzQ291bnQ6IG51bWJlciwgdGFyZ2V0SW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl93aWR0aCA9IHRoaXMuZ2V0VGFibGVXaWR0aCgpO1xuICAgICAgICBsZXQgcm93SW5kZXggPSAwO1xuXG4gICAgICAgIHdoaWxlIChyb3dJbmRleCA8IHJvd3NDb3VudCkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0Um93SW5kZXggPSB0YXJnZXRJbmRleCArIHJvd0luZGV4O1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gdGhpcy50YWJsZUVsLmluc2VydFJvdyh0YXJnZXRSb3dJbmRleCk7XG4gICAgICAgICAgICB0aGlzLnJvd01hdHJpeC5zcGxpY2UodGFyZ2V0Um93SW5kZXgsIDAsIG5ldyBSb3dEYXRhTW9kZWwocm93LCAwLCBbXSkpO1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRDZWxscyh0YXJnZXRSb3dJbmRleCwgdGhpcy50YWJsZS5yb3dzW3RhcmdldFJvd0luZGV4XS5jZWxscy5sZW5ndGgsIDApO1xuICAgICAgICAgICAgcm93SW5kZXgrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmlsbFRhYmxlUm93KCk7XG4gICAgfVxuXG4gICAgaW5zZXJ0Q2VsbHMocm93SW5kZXg6IG51bWJlciwgY2VsbHNDb3VudDogbnVtYmVyLCB0YXJnZXRJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGxldCBtb2RlbFRhcmdldEluZGV4ID0gdGhpcy5nZXRNb2RlbFRhcmdldEluZGV4KHJvd0luZGV4LCB0YXJnZXRJbmRleCk7XG4gICAgICAgIHRoaXMuYWRkQ2VsbHMocm93SW5kZXgsIGNlbGxzQ291bnQsIHRhcmdldEluZGV4LCBtb2RlbFRhcmdldEluZGV4KTtcbiAgICB9XG5cbiAgICBnZXRNb2RlbFRhcmdldEluZGV4KHJvd0luZGV4OiBudW1iZXIsIHRhcmdldEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBsZXQgYWJzb2x1dGVNb2RlbENlbGxDb3VudCA9IDA7XG4gICAgICAgIGxldCBtb2RlbFRhcmdldEluZGV4ID0gMDtcblxuICAgICAgICB3aGlsZSAoYWJzb2x1dGVNb2RlbENlbGxDb3VudCA8IHRhcmdldEluZGV4KSB7XG4gICAgICAgICAgICBhYnNvbHV0ZU1vZGVsQ2VsbENvdW50ICs9IHRoaXMudGFibGUucm93c1tyb3dJbmRleF0uY2VsbHNbbW9kZWxUYXJnZXRJbmRleF0uaG9yaXpvbnRhbE1lcmdlID8/IDE7XG5cbiAgICAgICAgICAgIGlmIChhYnNvbHV0ZU1vZGVsQ2VsbENvdW50ID4gdGFyZ2V0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbW9kZWxUYXJnZXRJbmRleCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1vZGVsVGFyZ2V0SW5kZXg7XG4gICAgfVxuXG4gICAgYWRkQ2VsbHMocm93SW5kZXg6IG51bWJlciwgY2VsbHNDb3VudDogbnVtYmVyLCB0YXJnZXRJbmRleDogbnVtYmVyLCBtb2RlbFRhcmdldEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICBsZXQgY3VycmVudFRhcmdldEluZGV4ID0gdGFyZ2V0SW5kZXg7XG5cbiAgICAgICAgd2hpbGUgKGkgPCBjZWxsc0NvdW50KSB7XG4gICAgICAgICAgICBjb25zdCBtb2RlbENlbGxJbmRleCA9IG1vZGVsVGFyZ2V0SW5kZXggKyBpO1xuXG4gICAgICAgICAgICBpZiAoKHRoaXMudGFibGUucm93c1tyb3dJbmRleF0uY2VsbHNbbW9kZWxDZWxsSW5kZXhdLnZlcnRpY2FsTWVyZ2UgYXMgVmVydGljYWxNZXJnZSkgPT09IFZlcnRpY2FsTWVyZ2UuTWVyZ2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmhlcml0Q2VsbERhdGEgPSB0aGlzLnJvd01hdHJpeFtyb3dJbmRleCAtIDFdLmNlbGxzW2N1cnJlbnRUYXJnZXRJbmRleF07XG4gICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLnRhYmxlLnJvd3Nbcm93SW5kZXhdLmNlbGxzW21vZGVsQ2VsbEluZGV4XS5ob3Jpem9udGFsTWVyZ2UgPz8gMTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEFkZGl0aW9uYWxDZWxscyhyb3dJbmRleCwgY3VycmVudFRhcmdldEluZGV4LCBjb3VudCwgaW5oZXJpdENlbGxEYXRhKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0SW5kZXggKz0gY291bnQ7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjZWxsID0gdGhpcy50YWJsZUVsLnJvd3Nbcm93SW5kZXhdLmluc2VydENlbGwoY3VycmVudFRhcmdldEluZGV4KTtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuY29tcG9uZW50U2VydmljZS5nZW5lcmF0ZUFuZEF0dGFjaENvbXBvbmVudChjZWxsLCBOb2RlclRhYmxlQ2VsbENvbXBvbmVudCwge1xuICAgICAgICAgICAgICAgIHRhYmxlOiB0aGlzLnRhYmxlLFxuICAgICAgICAgICAgICAgIGNlbGw6IHRoaXMudGFibGUucm93c1tyb3dJbmRleF0uY2VsbHNbbW9kZWxDZWxsSW5kZXhdLFxuICAgICAgICAgICAgICAgIHBhcmVudFNlc3Npb25JZDogdGhpcy5zZXNzaW9uSWQsXG4gICAgICAgICAgICAgICAgcm93SW5kZXgsXG4gICAgICAgICAgICAgICAgY2VsbEluZGV4OiBtb2RlbENlbGxJbmRleCxcbiAgICAgICAgICAgICAgICBjb2x1bW5JbmRleDogY3VycmVudFRhcmdldEluZGV4LFxuICAgICAgICAgICAgICAgIHdpZHRoOiB0aGlzLmdldEFkanVzdGVkV2lkdGgodGhpcy50YWJsZS5yb3dzW3Jvd0luZGV4XSwgbW9kZWxDZWxsSW5kZXgsIGN1cnJlbnRUYXJnZXRJbmRleCksXG4gICAgICAgICAgICAgICAgZ2VuZXJhbFByb3BlcnRpZXM6IHRoaXMuZ2VuZXJhbFByb3BlcnRpZXMsXG4gICAgICAgICAgICAgICAgaGVpZ2h0Q2hhbmdlZDogdGhpcy5jZWxsSGVpZ2h0Q2hhbmdlZCxcbiAgICAgICAgICAgICAgICBzdGFydFJlc2l6aW5nOiB0aGlzLnN0YXJ0UmVzaXppbmdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgY2VsbENvbnRlbnRIZWlnaHQgPSBjb21wb25lbnRSZWYuaW5zdGFuY2UuZ2V0Q2VsbENvbnRlbnRIZWlnaHQoKTtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxEYXRhID0gbmV3IENlbGxEYXRhTW9kZWwoY2VsbCwgY2VsbENvbnRlbnRIZWlnaHQsIGNvbXBvbmVudFJlZik7XG4gICAgICAgICAgICB0aGlzLnJvd01hdHJpeFtyb3dJbmRleF0uY2VsbHMuc3BsaWNlKGN1cnJlbnRUYXJnZXRJbmRleCwgMCwgY2VsbERhdGEpO1xuICAgICAgICAgICAgY3VycmVudFRhcmdldEluZGV4Kys7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnRhYmxlLnJvd3Nbcm93SW5kZXhdLmNlbGxzW21vZGVsQ2VsbEluZGV4XS5ob3Jpem9udGFsTWVyZ2UgPiAxKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLnRhYmxlLnJvd3Nbcm93SW5kZXhdLmNlbGxzW21vZGVsQ2VsbEluZGV4XS5ob3Jpem9udGFsTWVyZ2UgLSAxO1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkQWRkaXRpb25hbENlbGxzKHJvd0luZGV4LCBjdXJyZW50VGFyZ2V0SW5kZXgsIGNvdW50LCBjZWxsRGF0YSk7XG4gICAgICAgICAgICAgICAgY3VycmVudFRhcmdldEluZGV4ICs9IGNvdW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRBZGRpdGlvbmFsQ2VsbHMocm93SW5kZXg6IG51bWJlciwgY2VsbEluZGV4OiBudW1iZXIsIGNlbGxzQ291bnQ6IG51bWJlciwgb3JpZ2luYWxDZWxsRGF0YTogQ2VsbERhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNlbGxzQ291bnQ7IGorKykge1xuICAgICAgICAgICAgY29uc3QgYWRkaXRpb25hbENlbGwgPSB0aGlzLnRhYmxlRWwucm93c1tyb3dJbmRleF0uaW5zZXJ0Q2VsbChjZWxsSW5kZXgpO1xuICAgICAgICAgICAgYWRkaXRpb25hbENlbGwuY2xhc3NMaXN0LmFkZCgnaGlkZGVuLWNlbGwnKTtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxEYXRhID0gbmV3IENlbGxEYXRhTW9kZWwob3JpZ2luYWxDZWxsRGF0YS5jZWxsLCBvcmlnaW5hbENlbGxEYXRhLmNlbGxDb250ZW50SGVpZ2h0LCBvcmlnaW5hbENlbGxEYXRhLmNvbXBvbmVudFJlZik7XG4gICAgICAgICAgICB0aGlzLnJvd01hdHJpeFtyb3dJbmRleF0uY2VsbHMuc3BsaWNlKGNlbGxJbmRleCwgMCwgY2VsbERhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0Q29sZ3JvdXAoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9sZENvbEdyb3VwcyA9IHRoaXMudGFibGVFbC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY29sZ3JvdXAnKTtcblxuICAgICAgICBpZiAob2xkQ29sR3JvdXBzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy50YWJsZUVsLnJlbW92ZUNoaWxkKG9sZENvbEdyb3Vwc1swXSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb2xncm91cCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NvbGdyb3VwJyk7XG4gICAgICAgIGxldCBpID0gMDtcblxuICAgICAgICB3aGlsZSAoaSA8IHRoaXMudGFibGUuY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NvbCcpO1xuICAgICAgICAgICAgY29uc3Qgc2NhbGVkV2lkdGggPSBTY2FsaW5nSGVscGVyLnNjYWxlKHRoaXMudGFibGUuY29sdW1uc1tpXS53aWR0aCwgdGhpcy5nZW5lcmFsUHJvcGVydGllcy5zY2FsaW5nUmF0aW8pO1xuICAgICAgICAgICAgY29sLnN0eWxlLndpZHRoID0gYCR7c2NhbGVkV2lkdGh9cHhgO1xuICAgICAgICAgICAgY29sZ3JvdXAuYXBwZW5kQ2hpbGQoY29sKTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGFibGVFbC5pbnNlcnRBZGphY2VudEVsZW1lbnQoJ2FmdGVyYmVnaW4nLCBjb2xncm91cCk7XG4gICAgfVxuXG4gICAgZmlsbFRhYmxlUm93KCk6IHZvaWQge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudGFibGUucm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgc3dpdGNoICh0aGlzLnRhYmxlLnJvd3NbaV0uaFJ1bGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIEhSdWxlLkF0TGVhc3Q6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93SGVpZ2h0ID0gdGhpcy5nZXRSb3dIZWlnaHQoaSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVFbC5yb3dzW2ldLnN0eWxlLm1pbkhlaWdodCA9IGAke3RoaXMudGFibGUucm93c1tpXS5oZWlnaHR9cHhgO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlRWwucm93c1tpXS5zdHlsZS5oZWlnaHQgPSBgJHtyb3dIZWlnaHR9cHhgO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd01hdHJpeFtpXS5oZWlnaHQgPSByb3dIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIEhSdWxlLkV4YWN0OlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlRWwucm93c1tpXS5zdHlsZS5oZWlnaHQgPSBgJHt0aGlzLnRhYmxlLnJvd3NbaV0uaGVpZ2h0fXB4YDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3dNYXRyaXhbaV0uaGVpZ2h0ID0gdGhpcy50YWJsZS5yb3dzW2ldLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByb3dIZWlnaHQgPSB0aGlzLmdldFJvd0hlaWdodChpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWluUm93SGVpZ2h0ID0gdGhpcy50YWJsZS5yb3dzW2ldLmhlaWdodCA/PyB0aGlzLm1pblJvd0hlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0SGVpZ2h0ID0gbWluUm93SGVpZ2h0ID4gcm93SGVpZ2h0ID8gbWluUm93SGVpZ2h0IDogcm93SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlRWwucm93c1tpXS5zdHlsZS5oZWlnaHQgPSBgJHtyZXN1bHRIZWlnaHR9cHhgO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd01hdHJpeFtpXS5oZWlnaHQgPSByZXN1bHRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFJvd0hlaWdodChyb3dJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgY2VsbEhlaWdodHMgPSB0aGlzLnJvd01hdHJpeFtyb3dJbmRleF0uY2VsbHMubWFwKCh4LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKCh4LmNvbXBvbmVudFJlZi5pbnN0YW5jZS5jZWxsLnZlcnRpY2FsTWVyZ2UgYXMgVmVydGljYWxNZXJnZSkgPT09IFZlcnRpY2FsTWVyZ2UuUmVzdGFydCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzTGFzdFZlcnRpY2FsTWVyZ2VkQ2VsbCA9IHguY2VsbCAhPT0gdGhpcy5yb3dNYXRyaXhbcm93SW5kZXggKyAxXT8uY2VsbHNbaW5kZXhdLmNlbGw7XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNMYXN0VmVydGljYWxNZXJnZWRDZWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpID0gcm93SW5kZXggLSAxO1xuICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudEhlaWdodCA9IHguY2VsbENvbnRlbnRIZWlnaHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHguY2VsbCA9PT0gdGhpcy5yb3dNYXRyaXhbaV0/LmNlbGxzW2luZGV4XS5jZWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50SGVpZ2h0IC09IHRoaXMucm93TWF0cml4W2ldLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGktLTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50SGVpZ2h0O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4geC5jZWxsQ29udGVudEhlaWdodDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KC4uLmNlbGxIZWlnaHRzKTtcbiAgICB9XG5cbiAgICBmaWxsVGFibGVDZWxscygpOiB2b2lkIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd01hdHJpeC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLnJvd01hdHJpeFtpXS5jZWxscy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3dNYXRyaXhbaSAtIDFdPy5jZWxsc1tqXT8uY2VsbCA9PT0gdGhpcy5yb3dNYXRyaXhbaV0uY2VsbHNbal0uY2VsbCB8fFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd01hdHJpeFtpXS5jZWxsc1tqXS5jZWxsID09PSB0aGlzLnJvd01hdHJpeFtpXS5jZWxsc1tqIC0gMV0/LmNlbGwgfHxcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMucm93TWF0cml4W2ldLmNlbGxzW2pdLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5jZWxsLnZlcnRpY2FsTWVyZ2UgYXMgVmVydGljYWxNZXJnZSkgPT09IFZlcnRpY2FsTWVyZ2UuTWVyZ2VcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5yb3dNYXRyaXhbaV0uY2VsbHNbal0uY2VsbC5jb2xTcGFuID0gdGhpcy5yb3dNYXRyaXhbaV0uY2VsbHNbal0uY29tcG9uZW50UmVmLmluc3RhbmNlLmNlbGwuaG9yaXpvbnRhbE1lcmdlO1xuICAgICAgICAgICAgICAgIHRoaXMucm93TWF0cml4W2ldLmNlbGxzW2pdLmNlbGwuc3R5bGUuYmFja2dyb3VuZENvbG9yID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3dNYXRyaXhbaV0uY2VsbHNbal0uY29tcG9uZW50UmVmLmluc3RhbmNlLmNlbGwuYmFja2dyb3VuZENvbG9yO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Q2VsbFJvd1NwYW4oaSwgaik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRDZWxsUm93U3Bhbihyb3dJbmRleDogbnVtYmVyLCBhYnNvbHV0ZUNlbGxJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMucm93TWF0cml4W3Jvd0luZGV4XS5jZWxsc1thYnNvbHV0ZUNlbGxJbmRleF0uY2VsbC5yb3dTcGFuID0gMTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAodGhpcy5yb3dNYXRyaXhbcm93SW5kZXhdLmNlbGxzW2Fic29sdXRlQ2VsbEluZGV4XS5jb21wb25lbnRSZWYuaW5zdGFuY2UuY2VsbC52ZXJ0aWNhbE1lcmdlIGFzIFZlcnRpY2FsTWVyZ2UpICE9PVxuICAgICAgICAgICAgVmVydGljYWxNZXJnZS5SZXN0YXJ0XG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IHJvd0luZGV4ICsgMTsgaSA8IHRoaXMucm93TWF0cml4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yb3dNYXRyaXhbaV0uY2VsbHNbYWJzb2x1dGVDZWxsSW5kZXhdLmNlbGwgPT09IHRoaXMucm93TWF0cml4W3Jvd0luZGV4XS5jZWxsc1thYnNvbHV0ZUNlbGxJbmRleF0uY2VsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMucm93TWF0cml4W3Jvd0luZGV4XS5jZWxsc1thYnNvbHV0ZUNlbGxJbmRleF0uY2VsbC5yb3dTcGFuKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0VGFibGVIZWlnaHQoKTogdm9pZCB7XG4gICAgICAgIGxldCBib3JkZXJzSGVpZ2h0ID0gMDtcbiAgICAgICAgbGV0IHJvd3NIZWlnaHQgPSAxO1xuXG4gICAgICAgIGZvciAobGV0IHJvdyBvZiB0aGlzLnJvd01hdHJpeCkge1xuICAgICAgICAgICAgcm93c0hlaWdodCArPSByb3cuaGVpZ2h0O1xuXG4gICAgICAgICAgICBpZiAocm93LmNlbGxzLnNvbWUoeCA9PiAheC5jb21wb25lbnRSZWYuaW5zdGFuY2UuY2VsbC52ZXJ0aWNhbE1lcmdlKSkge1xuICAgICAgICAgICAgICAgIGJvcmRlcnNIZWlnaHQgKz0gdGhpcy5ib3JkZXJTaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5faGVpZ2h0ID0gcm93c0hlaWdodCArIGJvcmRlcnNIZWlnaHQ7XG4gICAgfVxuXG4gICAgc3RhcnRSZXNpemluZyA9IChjZWxsUmVzaXplclBhcmFtZXRlcnM6IENlbGxSZXNpemVyUGFyYW1ldGVyc01vZGVsKTogdm9pZCA9PiB7XG4gICAgICAgIGNvbnN0IHNwbGl0Um93SW5kZXggPSB0aGlzLmdldFNwbGl0Um93SW5kZXgoY2VsbFJlc2l6ZXJQYXJhbWV0ZXJzLnJvd0luZGV4KTtcbiAgICAgICAgdGhpcy5yZXNpemVyLnJlc2l6ZXJIZWlnaHQgPSB0aGlzLmdldFJvd3NIZWlnaHRCZXR3ZWVuU3BsaXRzKHNwbGl0Um93SW5kZXgpO1xuICAgICAgICB0aGlzLnJlc2l6ZXIuc3RhcnRZID0gdGhpcy5nZXRSb3dzSGVpZ2h0QmVmb3JlKHNwbGl0Um93SW5kZXgpO1xuICAgICAgICB0aGlzLnJlc2l6ZXIuc3BsaXRSb3dJbmRleCA9IHNwbGl0Um93SW5kZXg7XG4gICAgICAgIHRoaXMucmVzaXplci50YWJsZUluc2VydEluZGV4ID0gdGhpcy5pbnNlcnRJbmRleDtcbiAgICAgICAgdGhpcy5yZXNpemVyLm9uU3RhcnRSZXNpemluZyhjZWxsUmVzaXplclBhcmFtZXRlcnMpO1xuICAgIH07XG5cbiAgICBwcm9jZXNzU3BsaXQoXG4gICAgICAgIGxlZnRTcGFjZU9uUGFnZTogbnVtYmVyLFxuICAgICAgICBzcGFjZUJldHdlZW5QYWdlc0NvbnRlbnQ6IG51bWJlcixcbiAgICAgICAgY29udGVudEhlaWdodDogbnVtYmVyXG4gICAgKTogeyBzcGxpdHNDb3VudDogbnVtYmVyOyB0YWJsZUhlaWdodDogbnVtYmVyOyBsZWZ0SGVpZ2h0OiBudW1iZXIgfSB7XG4gICAgICAgIHRoaXMucmVtb3ZlU3BsaXRzKCk7XG5cbiAgICAgICAgaWYgKGxlZnRTcGFjZU9uUGFnZSA+PSB0aGlzLmhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgc3BsaXRzQ291bnQ6IDAsIHRhYmxlSGVpZ2h0OiB0aGlzLmhlaWdodCwgbGVmdEhlaWdodDogMCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxlZnRTcGFjZU9uUGFnZSA8IHRoaXMucm93TWF0cml4WzBdLmhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgc3BsaXRzQ291bnQ6IDEsIHRhYmxlSGVpZ2h0OiB0aGlzLmhlaWdodCwgbGVmdEhlaWdodDogdGhpcy5oZWlnaHQgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnNwbGl0VGFibGUobGVmdFNwYWNlT25QYWdlLCBzcGFjZUJldHdlZW5QYWdlc0NvbnRlbnQsIGNvbnRlbnRIZWlnaHQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3BsaXRUYWJsZShcbiAgICAgICAgbGVmdFNwYWNlT25QYWdlOiBudW1iZXIsXG4gICAgICAgIHNwYWNlQmV0d2VlblBhZ2VzQ29udGVudDogbnVtYmVyLFxuICAgICAgICBjb250ZW50SGVpZ2h0OiBudW1iZXJcbiAgICApOiB7IHNwbGl0c0NvdW50OiBudW1iZXI7IHRhYmxlSGVpZ2h0OiBudW1iZXI7IGxlZnRIZWlnaHQ6IG51bWJlciB9IHtcbiAgICAgICAgbGV0IGxlZnRIZWlnaHQgPSAwLFxuICAgICAgICAgICAgdGFibGVIZWlnaHRXaXRoU3BsaXRzID0gdGhpcy5oZWlnaHQsXG4gICAgICAgICAgICByb3dJbmRleCA9IDA7XG4gICAgICAgIHdoaWxlIChyb3dJbmRleCA8IHRoaXMucm93TWF0cml4Lmxlbmd0aCkge1xuICAgICAgICAgICAgbGV0IHsgaW5kZXgsIHJvd3NIZWlnaHQgfSA9IHRoaXMuZ2V0Um93SW5kZXhCeUhlaWdodChyb3dJbmRleCwgbGVmdFNwYWNlT25QYWdlKTtcbiAgICAgICAgICAgIHJvd0luZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IHRoaXMucm93TWF0cml4Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZWZ0SGVpZ2h0ID0gdGhpcy5yb3dNYXRyaXhcbiAgICAgICAgICAgICAgICAuc2xpY2UoaW5kZXgpXG4gICAgICAgICAgICAgICAgLm1hcCh4ID0+IHguaGVpZ2h0KVxuICAgICAgICAgICAgICAgIC5yZWR1Y2UoKHBhcnRpYWxTdW0sIGN1cnIpID0+IHBhcnRpYWxTdW0gKyBjdXJyICsgdGhpcy5ib3JkZXJTaXplKTtcblxuICAgICAgICAgICAgY29uc3Qgc3BsaXRSb3dIZWlnaHQgPSBzcGFjZUJldHdlZW5QYWdlc0NvbnRlbnQgKyBsZWZ0U3BhY2VPblBhZ2UgLSByb3dzSGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVTcGxpdFJvdyhpbmRleCArIHRoaXMuc3BsaXRzLmxlbmd0aCwgc3BsaXRSb3dIZWlnaHQpO1xuICAgICAgICAgICAgdGhpcy5zcGxpdHMucHVzaChpbmRleCArIHRoaXMuc3BsaXRzLmxlbmd0aCk7XG4gICAgICAgICAgICB0YWJsZUhlaWdodFdpdGhTcGxpdHMgKz0gc3BsaXRSb3dIZWlnaHQ7XG4gICAgICAgICAgICBsZWZ0U3BhY2VPblBhZ2UgPSBjb250ZW50SGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNwbGl0c0NvdW50OiB0aGlzLnNwbGl0cy5sZW5ndGgsXG4gICAgICAgICAgICB0YWJsZUhlaWdodDogdGFibGVIZWlnaHRXaXRoU3BsaXRzLFxuICAgICAgICAgICAgbGVmdEhlaWdodFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Um93SW5kZXhCeUhlaWdodChzdGFydEluZGV4OiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogeyBpbmRleDogbnVtYmVyOyByb3dzSGVpZ2h0OiBudW1iZXIgfSB7XG4gICAgICAgIGlmIChzdGFydEluZGV4ID49IHRoaXMucm93TWF0cml4Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgaW5kZXg6IHRoaXMucm93TWF0cml4Lmxlbmd0aCwgcm93c0hlaWdodDogMCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHRhYmxlSGVpZ2h0ID0gdGhpcy5yb3dNYXRyaXhbc3RhcnRJbmRleF0uaGVpZ2h0ICsgdGhpcy5ib3JkZXJTaXplLFxuICAgICAgICAgICAgaSA9IHN0YXJ0SW5kZXg7XG5cbiAgICAgICAgd2hpbGUgKHRhYmxlSGVpZ2h0IDwgaGVpZ2h0KSB7XG4gICAgICAgICAgICB0YWJsZUhlaWdodCArPSB0aGlzLnJvd01hdHJpeFtpICsgMV0/LmhlaWdodCArIHRoaXMuYm9yZGVyU2l6ZTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IGluZGV4OiBpLCByb3dzSGVpZ2h0OiB0YWJsZUhlaWdodCAtIHRoaXMucm93TWF0cml4W2ldPy5oZWlnaHQgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVNwbGl0Um93KGluZGV4OiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGFibGVFbC5pbnNlcnRSb3coaW5kZXgpO1xuICAgICAgICB0aGlzLnRhYmxlRWwucm93c1tpbmRleF0uc3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YDtcbiAgICAgICAgdGhpcy50YWJsZUVsLnJvd3NbaW5kZXhdLmNsYXNzTGlzdC5hZGQoJ3NwbGl0LXJvdycpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlU3BsaXRzKCkge1xuICAgICAgICB0aGlzLnNwbGl0cyA9IFtdO1xuICAgICAgICB3aGlsZSAodGhpcy50YWJsZUVsLnF1ZXJ5U2VsZWN0b3IoJy5zcGxpdC1yb3cnKSkge1xuICAgICAgICAgICAgY29uc3QgZWwgPSB0aGlzLnRhYmxlRWwucXVlcnlTZWxlY3RvcignLnNwbGl0LXJvdycpO1xuICAgICAgICAgICAgZWwucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY2FsY3VsYXRlUHJvcGVydGllcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnRhYmxlRWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0VGFibGVIZWlnaHQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFRhYmxlV2lkdGgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGUuY29sdW1ucy5yZWR1Y2UoKHByZXYsIG5leHQpID0+IHByZXYgKyBuZXh0LndpZHRoICsgdGhpcy5ib3JkZXJTaXplLCAxKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNlbGxIZWlnaHRDaGFuZ2VkID0gKHJvd0luZGV4OiBudW1iZXIsIGNlbGxJbmRleDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IHZvaWQgPT4ge1xuICAgICAgICBjb25zdCB0YWJsZVJvdyA9IHRoaXMudGFibGUucm93c1tyb3dJbmRleF07XG4gICAgICAgIHRoaXMucm93TWF0cml4W3Jvd0luZGV4XS5jZWxsc1tjZWxsSW5kZXhdLmNlbGxDb250ZW50SGVpZ2h0ID0gaGVpZ2h0IDwgdGhpcy5taW5Sb3dIZWlnaHQgPyB0aGlzLm1pblJvd0hlaWdodCA6IGhlaWdodDtcblxuICAgICAgICBpZiAodGFibGVSb3cuaFJ1bGUgPT09IEhSdWxlLkV4YWN0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByb3dJbmRleFdpdGhTcGxpdCA9IHRoaXMuZ2V0SW5kZXhJbmNsdWRpbmdTcGxpdFJvd3ModGhpcy5yb3dNYXRyaXhbcm93SW5kZXhdLnJvdyk7XG5cbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy50YWJsZUVsLnJvd3Nbcm93SW5kZXhXaXRoU3BsaXRdO1xuICAgICAgICBjb25zdCBjdXJyZW50SGVpZ2h0ID0gcm93Lm9mZnNldEhlaWdodDtcbiAgICAgICAgY29uc3QgY2VsbEhlaWdodHMgPSB0aGlzLnJvd01hdHJpeFtyb3dJbmRleF0uY2VsbHMubWFwKHggPT4geC5jZWxsQ29udGVudEhlaWdodCk7XG4gICAgICAgIGNvbnN0IG1heENlbGxDb250ZW50SGVpZ2ggPSBNYXRoLm1heCguLi5jZWxsSGVpZ2h0cywgaGVpZ2h0KTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBtYXhDZWxsQ29udGVudEhlaWdoID4gY3VycmVudEhlaWdodCB8fFxuICAgICAgICAgICAgKG1heENlbGxDb250ZW50SGVpZ2ggPCBjdXJyZW50SGVpZ2h0ICYmICghdGFibGVSb3cuaGVpZ2h0IHx8IHRhYmxlUm93LmhlaWdodCA8PSBtYXhDZWxsQ29udGVudEhlaWdoKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByb3cuc3R5bGUuaGVpZ2h0ID0gYCR7bWF4Q2VsbENvbnRlbnRIZWlnaH1weGA7XG4gICAgICAgICAgICB0aGlzLnJvd01hdHJpeFtyb3dJbmRleF0uaGVpZ2h0ID0gbWF4Q2VsbENvbnRlbnRIZWlnaDtcbiAgICAgICAgICAgIHRoaXMuc2V0VGFibGVIZWlnaHQoKTtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5jaGFuZ2VkVGFibGVTaXplKHRoaXMuaW5zZXJ0SW5kZXgsIHRoaXMuc2Vzc2lvbklkKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBwcml2YXRlIGdldFNwbGl0Um93SW5kZXgocm93SW5kZXg6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRJbmRleEluY2x1ZGluZ1NwbGl0Um93cyh0aGlzLnJvd01hdHJpeFtyb3dJbmRleF0ucm93KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEluZGV4SW5jbHVkaW5nU3BsaXRSb3dzKHJvdzogSFRNTFRhYmxlUm93RWxlbWVudCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMudGFibGVFbC5yb3dzKS5pbmRleE9mKHJvdyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSb3dzSGVpZ2h0QmVmb3JlKHJvd0luZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdGhpcy5zcGxpdHMpIHtcbiAgICAgICAgICAgIGlmIChyb3dJbmRleCA8IGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5kZXggPSBlbGVtZW50ICsgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmdldFJvd3NIZWlnaHQoMCwgaW5kZXgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Um93c0hlaWdodEJldHdlZW5TcGxpdHMocm93SW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGxldCBzdGFydEluZGV4ID0gMDtcbiAgICAgICAgbGV0IGVuZEluZGV4ID0gdGhpcy50YWJsZUVsLnJvd3MubGVuZ3RoO1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdGhpcy5zcGxpdHMpIHtcbiAgICAgICAgICAgIGlmIChyb3dJbmRleCA8IGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBlbmRJbmRleCA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBlbGVtZW50ICsgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmdldFJvd3NIZWlnaHQoc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Um93c0hlaWdodChzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGxldCBzdW0gPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgICAgICAgc3VtICs9IHRoaXMudGFibGVFbC5yb3dzW2ldLm9mZnNldEhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdW07XG4gICAgfVxuXG4gICAgdXBkYXRlQ2VsbHMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJvd3MgPSB0aGlzLnJvd01hdHJpeC5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGNvbHMgPSByb3dzID4gMCA/IHRoaXMucm93TWF0cml4WzBdLmNlbGxzLmxlbmd0aCA6IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHM7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSB0aGlzLnJvd01hdHJpeFtpXS5jZWxsc1tqXTtcbiAgICAgICAgICAgICAgICBjZWxsLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5zZXNzaW9uLmRpc3BsYXlEYXRhLnVwZGF0ZU5leHRMaW5lSW5kZXhlcyhcbiAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgY2VsbC5jb21wb25lbnRSZWYuaW5zdGFuY2Uuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIl19
@@ -3,13 +3,14 @@ import { MouseButton } from '../../../interaction/mouse-button.enum';
3
3
  import { SelectionRangeModel } from '../models/selection-range.model';
4
4
  import { TableOverlayMenuComponent } from '../overlay-menu/overlay-menu.component';
5
5
  export class TableSelection {
6
- constructor(editorService, overlayService, rowMatrix, table, tableEl, sessionId) {
6
+ constructor(editorService, overlayService, regulatorService, rowMatrix, table, tableEl, session) {
7
7
  this.editorService = editorService;
8
8
  this.overlayService = overlayService;
9
+ this.regulatorService = regulatorService;
9
10
  this.rowMatrix = rowMatrix;
10
11
  this.table = table;
11
12
  this.tableEl = tableEl;
12
- this.sessionId = sessionId;
13
+ this.session = session;
13
14
  this.editorTagName = 'APP-NOD-EDITOR';
14
15
  this.tableTagName = 'APP-NOD-TABLE';
15
16
  this.cellTagName = 'TD';
@@ -28,6 +29,9 @@ export class TableSelection {
28
29
  }
29
30
  addTableContextMenuSubscriptions() {
30
31
  this.tableContextMenu$ = fromEvent(this.tableEl, 'contextmenu').subscribe((event) => {
32
+ if (this.session.isEdgeOrWithinEdge() && !this.regulatorService.mainSession.session.customComponents.edges.isEdit) {
33
+ return;
34
+ }
31
35
  event.preventDefault();
32
36
  if (this.editorService.isViewOnly) {
33
37
  return;
@@ -45,13 +49,16 @@ export class TableSelection {
45
49
  canRemoveRows,
46
50
  canRemoveColumns,
47
51
  tableInsertIndex: this.table.insertIndex,
48
- sessionId: this.sessionId
52
+ sessionId: this.session.sessionId
49
53
  };
50
54
  this.overlayService.open(TableOverlayMenuComponent, data, event.x, event.y);
51
55
  });
52
56
  }
53
57
  addTableMouseDownSubscriptions() {
54
58
  this.tableMouseDown$ = fromEvent(this.tableEl, 'mousedown').subscribe((event) => {
59
+ if (this.session.isEdgeOrWithinEdge() && !this.regulatorService.mainSession.session.customComponents.edges.isEdit) {
60
+ return;
61
+ }
55
62
  if (event.ctrlKey ||
56
63
  event.button === MouseButton.Right ||
57
64
  !this.canStartSelection(event.target)) {
@@ -262,7 +269,7 @@ export class TableSelection {
262
269
  break;
263
270
  }
264
271
  if (currentElement.tagName === this.tableTagName) {
265
- canStartSelection = this.sessionId === +currentElement.getAttribute('data-session-id');
272
+ canStartSelection = this.session.sessionId === +currentElement.getAttribute('data-session-id');
266
273
  break;
267
274
  }
268
275
  currentElement = currentElement.parentElement;
@@ -373,4 +380,4 @@ export class TableSelection {
373
380
  return index;
374
381
  }
375
382
  }
376
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtc2VsZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvZWRpdG9yL2NvbXBvbmVudHMvdGFibGUvc2VsZWN0aW9uL3RhYmxlLXNlbGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFnQixZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBR3JFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRW5GLE1BQU0sT0FBTyxjQUFjO0lBdUJ2QixZQUNZLGFBQTRCLEVBQzVCLGNBQThCLEVBQzlCLFNBQXlCLEVBQ3pCLEtBQWlCLEVBQ2pCLE9BQXlCLEVBQ3pCLFNBQWlCO1FBTGpCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixjQUFTLEdBQVQsU0FBUyxDQUFnQjtRQUN6QixVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQ2pCLFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBQ3pCLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFkcEIsa0JBQWEsR0FBRyxnQkFBZ0IsQ0FBQztRQUVqQyxpQkFBWSxHQUFHLGVBQWUsQ0FBQztRQUUvQixnQkFBVyxHQUFHLElBQUksQ0FBQztRQUVuQix5QkFBb0IsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFVaEQsSUFBSSxDQUFDLGdDQUFnQyxFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVELE9BQU87UUFDSCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLEVBQUU7WUFDckMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3hDO1FBRUQsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLFdBQVcsRUFBRTtZQUNuQyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3RDO1FBRUQsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELGdDQUFnQztRQUM1QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBbUIsRUFBRSxFQUFFO1lBQzlGLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFO2dCQUMvQixPQUFPO2FBQ1Y7WUFFRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsK0JBQStCLENBQUMsS0FBSyxDQUFDLE1BQXFCLENBQUMsQ0FBQztZQUN6RixJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUNqQixPQUFPO2FBQ1Y7WUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDOUQsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO1lBQzVILE1BQU0sZ0JBQWdCLEdBQ2xCLGNBQWMsQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLGNBQWMsQ0FBQyxXQUFXLENBQUMsVUFBVSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDckgsTUFBTSxJQUFJLEdBQUc7Z0JBQ1QsY0FBYztnQkFDZCxPQUFPO2dCQUNQLGFBQWE7Z0JBQ2IsZ0JBQWdCO2dCQUNoQixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVc7Z0JBQ3hDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUzthQUM1QixDQUFDO1lBQ0YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hGLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELDhCQUE4QjtRQUMxQixJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtZQUN4RixJQUNJLEtBQUssQ0FBQyxPQUFPO2dCQUNaLEtBQUssQ0FBQyxNQUFzQixLQUFLLFdBQVcsQ0FBQyxLQUFLO2dCQUNuRCxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsTUFBcUIsQ0FBQyxFQUN0RDtnQkFDRSxPQUFPO2FBQ1Y7WUFFRCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxxQ0FBcUMsRUFBRSxDQUFDO1lBQzdDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLE1BQXFCLENBQUMsQ0FBQztZQUM5RCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDM0QsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQscUNBQXFDO1FBQ2pDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxTQUFTLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQzthQUNyRCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3ZCLFNBQVMsQ0FBQyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtZQUM3QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7UUFFUCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2xFLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxpQ0FBaUMsRUFBRSxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGlDQUFpQztRQUM3QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsU0FBUyxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFpQixFQUFFLEVBQUU7WUFDdkYsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLE1BQXFCLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxNQUFxQixDQUFDLEVBQUU7Z0JBQ3hHLE9BQU87YUFDVjtZQUVELElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztZQUMvQixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCx3QkFBd0I7UUFDcEIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsV0FBVyxFQUFFO1lBQ3RDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUN6QztRQUVELElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLFdBQVcsRUFBRTtZQUNwQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDdkM7UUFFRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxXQUFXLEVBQUU7WUFDdEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3pDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQWlCO1FBQzlCLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDakUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQ25ILElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7U0FDN0M7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLFNBQVMsRUFBRTtZQUNyQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDdkM7SUFDTCxDQUFDO0lBRUQsdUJBQXVCLENBQUMsS0FBaUI7UUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUMxQixPQUFPO1NBQ1Y7UUFFRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxNQUFxQixDQUFDLElBQUksSUFBSSxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWhILElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDZixPQUFPO1NBQ1Y7UUFFRCxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUVoQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkcsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFHLE1BQU0sS0FBSyxHQUFvQixFQUFFLENBQUM7UUFDbEMsSUFBSSxlQUFlLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQztRQUU1QyxPQUFPLGVBQWUsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFO1lBQzNDLElBQUksZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQztZQUU5QyxPQUFPLGdCQUFnQixJQUFJLFdBQVcsQ0FBQyxRQUFRLEVBQUU7Z0JBQzdDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO2dCQUNwRSxnQkFBZ0IsRUFBRSxDQUFDO2FBQ3RCO1lBRUQsZUFBZSxFQUFFLENBQUM7U0FDckI7UUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsY0FBYyxDQUFDLE9BQW9CO1FBQy9CLElBQUksY0FBYyxHQUFHLE9BQU8sQ0FBQztRQUM3QixJQUFJLFlBQVksR0FBbUQsSUFBSSxDQUFDO1FBRXhFLE9BQU8sQ0FBQyxZQUFZLElBQUksY0FBYyxFQUFFO1lBQ3BDLElBQUksY0FBYyxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUM3QyxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUN2RDtZQUVELGNBQWMsR0FBRyxjQUFjLENBQUMsYUFBYSxDQUFDO1NBQ2pEO1FBRUQsT0FBTyxZQUFZLENBQUM7SUFDeEIsQ0FBQztJQUVELGVBQWUsQ0FBQyxFQUFlO1FBQzNCLElBQUksWUFBWSxHQUFtRCxJQUFJLENBQUM7UUFFeEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUU7WUFDbEMsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBRTFELElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUNoQixZQUFZLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLENBQUM7Z0JBQ3ZDLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFFRCxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sWUFBWSxDQUFDO0lBQ3hCLENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxLQUFpQjtRQUN4QyxJQUFJLFlBQVksR0FBbUQsSUFBSSxDQUFDO1FBQ3hFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUV4RCxJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksVUFBVSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUU7WUFDdkUsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7U0FDakM7YUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksVUFBVSxDQUFDLElBQUksRUFBRTtZQUN6QyxZQUFZLEdBQUcsSUFBSSxDQUFDLDhCQUE4QixDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzdEO2FBQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUU7WUFDMUMsWUFBWSxHQUFHLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMvRDtRQUVELE9BQU8sWUFBWSxDQUFDO0lBQ3hCLENBQUM7SUFFRCw4QkFBOEIsQ0FBQyxLQUFpQjtRQUM1QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVELGdDQUFnQyxDQUFDLEtBQWlCO1FBQzlDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVoRCxPQUFPO1lBQ0gsUUFBUTtZQUNSLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQztTQUN2RCxDQUFDO0lBQ04sQ0FBQztJQUVELGtCQUFrQixDQUFDLEtBQWlCO1FBQ2hDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQy9CLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRWxCLEdBQUc7WUFDQyxRQUFRLEVBQUUsQ0FBQztZQUNYLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBRXhELElBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSxRQUFRLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRTtnQkFDbkUsTUFBTTthQUNUO1NBQ0osUUFBUSxRQUFRLEdBQUcsV0FBVyxFQUFFO1FBRWpDLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxzQkFBc0I7UUFDbEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDekIsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN6QixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxVQUFVLEdBQUc7WUFDZixVQUFVLEVBQUUsQ0FBQztZQUNiLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDO1NBQ3RDLENBQUM7UUFDRixNQUFNLFdBQVcsR0FBRztZQUNoQixVQUFVLEVBQUUsQ0FBQztZQUNiLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2pFLENBQUM7UUFDRixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksbUJBQW1CLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCxjQUFjO1FBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDdEIsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELHdCQUF3QjtRQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN6QixHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDckIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO0lBQy9CLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxXQUFtQixFQUFFLFlBQW9CO1FBQzNELE1BQU0sT0FBTyxHQUFHLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzVDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFOUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzVELENBQUM7SUFFRCxZQUFZLENBQUMsS0FBaUI7UUFDMUIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsTUFBcUIsQ0FBQyxDQUFDO1FBRXRFLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDM0MsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFFRCxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEtBQUssWUFBWSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxLQUFLLFlBQVksQ0FBQyxTQUFTLENBQUM7SUFDdEksQ0FBQztJQUVELGVBQWUsQ0FBQyxPQUFvQjtRQUNoQyxJQUFJLGNBQWMsR0FBRyxPQUFPLENBQUM7UUFDN0IsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBRTVCLE9BQU8sQ0FBQyxlQUFlLElBQUksY0FBYyxFQUFFO1lBQ3ZDLGVBQWUsR0FBRyxjQUFjLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDaEUsY0FBYyxHQUFHLGNBQWMsQ0FBQyxhQUFhLENBQUM7U0FDakQ7UUFFRCxPQUFPLGVBQWUsQ0FBQztJQUMzQixDQUFDO0lBRUQsY0FBYyxDQUFDLE9BQW9CO1FBQy9CLElBQUksY0FBYyxHQUFHLE9BQU8sQ0FBQztRQUM3QixJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFFM0IsT0FBTyxDQUFDLGNBQWMsSUFBSSxjQUFjLEVBQUU7WUFDdEMsY0FBYyxHQUFHLGNBQWMsS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ2pELGNBQWMsR0FBRyxjQUFjLENBQUMsYUFBYSxDQUFDO1NBQ2pEO1FBRUQsT0FBTyxjQUFjLENBQUM7SUFDMUIsQ0FBQztJQUVELGlCQUFpQixDQUFDLE9BQW9CO1FBQ2xDLElBQUksY0FBYyxHQUFHLE9BQU8sQ0FBQztRQUM3QixJQUFJLGlCQUFpQixHQUFHLEtBQUssQ0FBQztRQUU5QixPQUFPLENBQUMsaUJBQWlCLElBQUksY0FBYyxFQUFFO1lBQ3pDLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQzVELE1BQU07YUFDVDtZQUVELElBQUksY0FBYyxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUM5QyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsU0FBUyxLQUFLLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUN2RixNQUFNO2FBQ1Q7WUFFRCxjQUFjLEdBQUcsY0FBYyxDQUFDLGFBQWEsQ0FBQztTQUNqRDtRQUVELE9BQU8saUJBQWlCLENBQUM7SUFDN0IsQ0FBQztJQUVELCtCQUErQixDQUFDLE9BQW9CO1FBQ2hELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNmLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxNQUFNLGlCQUFpQixHQUNuQixJQUFJLENBQUMsY0FBYztZQUNuQixJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxVQUFVLElBQUksWUFBWSxDQUFDLFFBQVE7WUFDbEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsUUFBUSxJQUFJLFlBQVksQ0FBQyxRQUFRO1lBQ2hFLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLFVBQVUsSUFBSSxZQUFZLENBQUMsU0FBUztZQUNwRSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksWUFBWSxDQUFDLFNBQVMsQ0FBQztRQUV2RSxJQUFJLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUMzQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztTQUNuQztRQUVELElBQUksaUJBQWlCLEVBQUU7WUFDbkIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO1NBQzlCO1FBRUQsSUFBSSxXQUFXLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQztRQUN4QyxJQUFJLGNBQWMsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDO1FBRTVDLE9BQ0ksSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUk7WUFDOUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQ3JFO1lBQ0UsV0FBVyxFQUFFLENBQUM7U0FDakI7UUFFRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFO1lBQzNILGNBQWMsRUFBRSxDQUFDO1NBQ3BCO1FBRUQsT0FBTyxJQUFJLG1CQUFtQixDQUMxQixFQUFFLFVBQVUsRUFBRSxZQUFZLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsRUFDNUQsRUFBRSxVQUFVLEVBQUUsWUFBWSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLENBQ25FLENBQUM7SUFDTixDQUFDO0lBRUQsd0JBQXdCLENBQUMsY0FBbUM7UUFDeEQsT0FBTyxJQUFJLG1CQUFtQixDQUMxQjtZQUNJLFVBQVUsRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7WUFDN0UsUUFBUSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztTQUMxRSxFQUNEO1lBQ0ksVUFBVSxFQUFFLElBQUksQ0FBQyx5QkFBeUIsQ0FDdEMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQ3BDLGNBQWMsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUNsQyxjQUFjLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FDeEM7WUFDRCxRQUFRLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixDQUNsQyxjQUFjLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFDcEMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQ2xDLGNBQWMsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUN0QztTQUNKLENBQ0osQ0FBQztJQUNOLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxVQUFrQjtRQUNyQyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQzFELENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQ3hFLENBQUM7UUFFRixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRTtZQUN4QixPQUFPLFVBQVUsQ0FBQztTQUNyQjtRQUVELE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzFDLElBQUksS0FBSyxHQUFHLFVBQVUsQ0FBQztRQUV2QixHQUFHO1lBQ0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFFMUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7Z0JBQzFDLEtBQUssRUFBRSxDQUFDO2dCQUNSLE1BQU07YUFDVDtZQUVELEtBQUssRUFBRSxDQUFDO1NBQ1gsUUFBUSxLQUFLLElBQUksQ0FBQyxFQUFFO1FBRXJCLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxRQUFnQjtRQUNqQyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRXBJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFO1lBQ3hCLE9BQU8sUUFBUSxHQUFHLENBQUMsQ0FBQztTQUN2QjtRQUVELE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzFDLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQztRQUVyQixHQUFHO1lBQ0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUM7WUFFM0MsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7Z0JBQzNDLE1BQU07YUFDVDtZQUVELEtBQUssRUFBRSxDQUFDO1NBQ1gsUUFBUSxLQUFLLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUU7UUFFekMsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELHlCQUF5QixDQUFDLGFBQXFCLEVBQUUsV0FBbUIsRUFBRSxjQUFzQjtRQUN4RixJQUFJLEtBQUssR0FBRyxjQUFjLENBQUM7UUFFM0IsS0FBSyxJQUFJLENBQUMsR0FBRyxhQUFhLEVBQUUsQ0FBQyxJQUFJLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMvQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxFQUFFO2dCQUMxRCxJQUFJLFNBQVMsR0FBRyxjQUFjLENBQUM7Z0JBRS9CLEdBQUc7b0JBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEtBQUssQ0FBQyxFQUFFO3dCQUM5RixNQUFNO3FCQUNUO29CQUVELE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQztvQkFDM0IsS0FBSyxHQUFHLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO29CQUM1QyxTQUFTLEVBQUUsQ0FBQztpQkFDZixRQUFRLFNBQVMsSUFBSSxDQUFDLEVBQUU7YUFDNUI7U0FDSjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxhQUFxQixFQUFFLFdBQW1CLEVBQUUsWUFBb0I7UUFDcEYsSUFBSSxLQUFLLEdBQUcsWUFBWSxHQUFHLENBQUMsQ0FBQztRQUU3QixLQUFLLElBQUksQ0FBQyxHQUFHLFdBQVcsRUFBRSxDQUFDLElBQUksYUFBYSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQy9DLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLEVBQUU7Z0JBQ3hELElBQUksU0FBUyxHQUFHLFlBQVksQ0FBQztnQkFFN0IsR0FBRztvQkFDQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sS0FBSyxDQUFDLEVBQUU7d0JBQzlGLE1BQU07cUJBQ1Q7b0JBRUQsTUFBTSxRQUFRLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQztvQkFDL0IsS0FBSyxHQUFHLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO29CQUM1QyxTQUFTLEVBQUUsQ0FBQztpQkFDZixRQUFRLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7YUFDekQ7U0FDSjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZyb21FdmVudCwgU3Vic2NyaXB0aW9uLCB0aHJvdHRsZVRpbWUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQ2VsbERhdGFNb2RlbCB9IGZyb20gJy4uL21vZGVscy9jZWxsLWRhdGEubW9kZWwnO1xuaW1wb3J0IHsgRWRpdG9yU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2ludGVyYWN0aW9uL2VkaXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IE1vdXNlQnV0dG9uIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJhY3Rpb24vbW91c2UtYnV0dG9uLmVudW0nO1xuaW1wb3J0IHsgT3ZlcmxheVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvb3ZlcmxheS5zZXJ2aWNlJztcbmltcG9ydCB7IFJvd0RhdGFNb2RlbCB9IGZyb20gJy4uL21vZGVscy9yb3ctZGF0YS5tb2RlbCc7XG5pbXBvcnQgeyBTZWxlY3Rpb25SYW5nZU1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3NlbGVjdGlvbi1yYW5nZS5tb2RlbCc7XG5pbXBvcnQgeyBUYWJsZU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC90YWJsZS5tb2RlbCc7XG5pbXBvcnQgeyBUYWJsZU92ZXJsYXlNZW51Q29tcG9uZW50IH0gZnJvbSAnLi4vb3ZlcmxheS1tZW51L292ZXJsYXktbWVudS5jb21wb25lbnQnO1xuXG5leHBvcnQgY2xhc3MgVGFibGVTZWxlY3Rpb24ge1xuICAgIG9yaWdpblNlbGVjdGVkQ2VsbDogeyByb3dJbmRleDogbnVtYmVyOyBjZWxsSW5kZXg6IG51bWJlcjsgaXNGb2N1c2VkOiBib29sZWFuIH07XG5cbiAgICB0YWJsZUNvbnRleHRNZW51JDogU3Vic2NyaXB0aW9uO1xuXG4gICAgdGFibGVNb3VzZURvd24kOiBTdWJzY3JpcHRpb247XG5cbiAgICBkb2N1bWVudE1vdXNlRG93biQ6IFN1YnNjcmlwdGlvbjtcblxuICAgIGRvY3VtZW50TW91c2VNb3ZlJDogU3Vic2NyaXB0aW9uO1xuXG4gICAgZG9jdW1lbnRNb3VzZVVwJDogU3Vic2NyaXB0aW9uO1xuXG4gICAgc2VsZWN0aW9uUmFuZ2U6IFNlbGVjdGlvblJhbmdlTW9kZWwgfCBudWxsO1xuXG4gICAgcmVhZG9ubHkgZWRpdG9yVGFnTmFtZSA9ICdBUFAtTk9ELUVESVRPUic7XG5cbiAgICByZWFkb25seSB0YWJsZVRhZ05hbWUgPSAnQVBQLU5PRC1UQUJMRSc7XG5cbiAgICByZWFkb25seSBjZWxsVGFnTmFtZSA9ICdURCc7XG5cbiAgICByZWFkb25seSBkcmFnZ2FibGVDZWxsQ29udGVudCA9IFsnQVBQLU5PRC1SRVNJWkVSJ107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBlZGl0b3JTZXJ2aWNlOiBFZGl0b3JTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG92ZXJsYXlTZXJ2aWNlOiBPdmVybGF5U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByb3dNYXRyaXg6IFJvd0RhdGFNb2RlbFtdLFxuICAgICAgICBwcml2YXRlIHRhYmxlOiBUYWJsZU1vZGVsLFxuICAgICAgICBwcml2YXRlIHRhYmxlRWw6IEhUTUxUYWJsZUVsZW1lbnQsXG4gICAgICAgIHByaXZhdGUgc2Vzc2lvbklkOiBudW1iZXJcbiAgICApIHtcbiAgICAgICAgdGhpcy5hZGRUYWJsZUNvbnRleHRNZW51U3Vic2NyaXB0aW9ucygpO1xuICAgICAgICB0aGlzLmFkZFRhYmxlTW91c2VEb3duU3Vic2NyaXB0aW9ucygpO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnRhYmxlQ29udGV4dE1lbnUkPy51bnN1YnNjcmliZSkge1xuICAgICAgICAgICAgdGhpcy50YWJsZUNvbnRleHRNZW51JC51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudGFibGVNb3VzZURvd24kPy51bnN1YnNjcmliZSkge1xuICAgICAgICAgICAgdGhpcy50YWJsZU1vdXNlRG93biQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVtb3ZlTW91c2VTdWJzY3JpcHRpb25zKCk7XG4gICAgfVxuXG4gICAgYWRkVGFibGVDb250ZXh0TWVudVN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGFibGVDb250ZXh0TWVudSQgPSBmcm9tRXZlbnQodGhpcy50YWJsZUVsLCAnY29udGV4dG1lbnUnKS5zdWJzY3JpYmUoKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBpZiAodGhpcy5lZGl0b3JTZXJ2aWNlLmlzVmlld09ubHkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvblJhbmdlID0gdGhpcy5nZXRTZWxlY3Rpb25SYW5nZUZvck1lbnVPdmVybGF5KGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoIXNlbGVjdGlvblJhbmdlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB0YXJnZXRzID0gdGhpcy5nZXRUYXJnZXRzRm9yTWVudU92ZXJsYXkoc2VsZWN0aW9uUmFuZ2UpO1xuICAgICAgICAgICAgY29uc3QgY2FuUmVtb3ZlUm93cyA9IHNlbGVjdGlvblJhbmdlLnJvd0luZGV4ZXMuZW5kSW5kZXggLSBzZWxlY3Rpb25SYW5nZS5yb3dJbmRleGVzLnN0YXJ0SW5kZXggKyAxIDwgdGhpcy5yb3dNYXRyaXgubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgY2FuUmVtb3ZlQ29sdW1ucyA9XG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2UuY2VsbEluZGV4ZXMuZW5kSW5kZXggLSBzZWxlY3Rpb25SYW5nZS5jZWxsSW5kZXhlcy5zdGFydEluZGV4ICsgMSA8IHRoaXMucm93TWF0cml4WzBdLmNlbGxzLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2UsXG4gICAgICAgICAgICAgICAgdGFyZ2V0cyxcbiAgICAgICAgICAgICAgICBjYW5SZW1vdmVSb3dzLFxuICAgICAgICAgICAgICAgIGNhblJlbW92ZUNvbHVtbnMsXG4gICAgICAgICAgICAgICAgdGFibGVJbnNlcnRJbmRleDogdGhpcy50YWJsZS5pbnNlcnRJbmRleCxcbiAgICAgICAgICAgICAgICBzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbklkXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5U2VydmljZS5vcGVuKFRhYmxlT3ZlcmxheU1lbnVDb21wb25lbnQsIGRhdGEsIGV2ZW50LngsIGV2ZW50LnkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhZGRUYWJsZU1vdXNlRG93blN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGFibGVNb3VzZURvd24kID0gZnJvbUV2ZW50KHRoaXMudGFibGVFbCwgJ21vdXNlZG93bicpLnN1YnNjcmliZSgoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBldmVudC5jdHJsS2V5IHx8XG4gICAgICAgICAgICAgICAgKGV2ZW50LmJ1dHRvbiBhcyBNb3VzZUJ1dHRvbikgPT09IE1vdXNlQnV0dG9uLlJpZ2h0IHx8XG4gICAgICAgICAgICAgICAgIXRoaXMuY2FuU3RhcnRTZWxlY3Rpb24oZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlTZXJ2aWNlLmNsb3NlKCk7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZU1vdXNlU3Vic2NyaXB0aW9ucygpO1xuICAgICAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbkluQWxsQ2VsbHMoKTtcbiAgICAgICAgICAgIHRoaXMuYWRkRG9jdW1lbnRNb3VzZU1vdmVtZW50U3Vic2NyaXB0aW9ucygpO1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IHRoaXMuZ2V0Q2VsbEluZGV4ZXMoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luU2VsZWN0ZWRDZWxsID0geyAuLi5jZWxsLCBpc0ZvY3VzZWQ6IHRydWUgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYWRkRG9jdW1lbnRNb3VzZU1vdmVtZW50U3Vic2NyaXB0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kb2N1bWVudE1vdXNlTW92ZSQgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdtb3VzZW1vdmUnKVxuICAgICAgICAgICAgLnBpcGUodGhyb3R0bGVUaW1lKDEwMCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc01vdXNlTW92ZShldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmRvY3VtZW50TW91c2VVcCQgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdtb3VzZXVwJykuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlTW91c2VTdWJzY3JpcHRpb25zKCk7XG4gICAgICAgICAgICB0aGlzLmFkZERvY3VtZW50TW91c2VEb3duU3Vic2NyaXB0aW9ucygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhZGREb2N1bWVudE1vdXNlRG93blN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRNb3VzZURvd24kID0gZnJvbUV2ZW50KGRvY3VtZW50LCAnbW91c2Vkb3duJykuc3Vic2NyaWJlKChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzT25FZGl0b3JDbGljayhldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpIHx8IHRoaXMuaXNPblRhYmxlQ2xpY2soZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5vdmVybGF5U2VydmljZS5jbG9zZSgpO1xuICAgICAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbkluQWxsQ2VsbHMoKTtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luU2VsZWN0ZWRDZWxsID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlTW91c2VTdWJzY3JpcHRpb25zKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlbW92ZU1vdXNlU3Vic2NyaXB0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnRNb3VzZU1vdmUkPy51bnN1YnNjcmliZSkge1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudE1vdXNlTW92ZSQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmRvY3VtZW50TW91c2VVcCQ/LnVuc3Vic2NyaWJlKSB7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50TW91c2VVcCQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmRvY3VtZW50TW91c2VEb3duJD8udW5zdWJzY3JpYmUpIHtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRNb3VzZURvd24kLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm9jZXNzTW91c2VNb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm9yaWdpblNlbGVjdGVkQ2VsbD8uaXNGb2N1c2VkICYmICF0aGlzLmlzT3JpZ2luQ2VsbChldmVudCkpIHtcbiAgICAgICAgICAgIHRoaXMucm93TWF0cml4W3RoaXMub3JpZ2luU2VsZWN0ZWRDZWxsLnJvd0luZGV4XS5jZWxsc1t0aGlzLm9yaWdpblNlbGVjdGVkQ2VsbC5jZWxsSW5kZXhdLmRpc2FibGVFZGl0b3JTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5lbmRNb3VzZVByZXNzKCk7XG4gICAgICAgICAgICB0aGlzLm9yaWdpblNlbGVjdGVkQ2VsbC5pc0ZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5vcmlnaW5TZWxlY3RlZENlbGw/LmlzRm9jdXNlZCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGxDZWxsc0luQmV0d2VlbihldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZWxlY3RBbGxDZWxsc0luQmV0d2VlbihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMub3JpZ2luU2VsZWN0ZWRDZWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZWxlY3RlZENlbGwgPSB0aGlzLmdldENlbGxJbmRleGVzKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkgfHwgdGhpcy5nZXRDZWxsSW5kZXhlc091dHNpZGVUYWJsZShldmVudCk7XG5cbiAgICAgICAgaWYgKCFzZWxlY3RlZENlbGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb25JbkFsbENlbGxzKCk7XG5cbiAgICAgICAgY29uc3Qgcm93SW5kZXhlcyA9IHRoaXMuZ2V0U3RhcnRBbmRFbmRJbmRleGVzKHRoaXMub3JpZ2luU2VsZWN0ZWRDZWxsLnJvd0luZGV4LCBzZWxlY3RlZENlbGwucm93SW5kZXgpO1xuICAgICAgICBjb25zdCBjZWxsSW5kZXhlcyA9IHRoaXMuZ2V0U3RhcnRBbmRFbmRJbmRleGVzKHRoaXMub3JpZ2luU2VsZWN0ZWRDZWxsLmNlbGxJbmRleCwgc2VsZWN0ZWRDZWxsLmNlbGxJbmRleCk7XG4gICAgICAgIGNvbnN0IGNlbGxzOiBDZWxsRGF0YU1vZGVsW10gPSBbXTtcbiAgICAgICAgbGV0IGN1cnJlbnRSb3dJbmRleCA9IHJvd0luZGV4ZXMuc3RhcnRJbmRleDtcblxuICAgICAgICB3aGlsZSAoY3VycmVudFJvd0luZGV4IDw9IHJvd0luZGV4ZXMuZW5kSW5kZXgpIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW50Q2VsbEluZGV4ID0gY2VsbEluZGV4ZXMuc3RhcnRJbmRleDtcblxuICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnRDZWxsSW5kZXggPD0gY2VsbEluZGV4ZXMuZW5kSW5kZXgpIHtcbiAgICAgICAgICAgICAgICBjZWxscy5wdXNoKHRoaXMucm93TWF0cml4W2N1cnJlbnRSb3dJbmRleF0uY2VsbHNbY3VycmVudENlbGxJbmRleF0pO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRDZWxsSW5kZXgrKztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY3VycmVudFJvd0luZGV4Kys7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1bmlxQ2VsbHMgPSBuZXcgU2V0KGNlbGxzKTtcbiAgICAgICAgdW5pcUNlbGxzLmZvckVhY2goY2VsbCA9PiBjZWxsLmhpZ2hsaWdodENlbGwoKSk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uUmFuZ2UgPSBuZXcgU2VsZWN0aW9uUmFuZ2VNb2RlbChyb3dJbmRleGVzLCBjZWxsSW5kZXhlcyk7XG4gICAgfVxuXG4gICAgZ2V0Q2VsbEluZGV4ZXMoZWxlbWVudDogSFRNTEVsZW1lbnQpOiB7IHJvd0luZGV4OiBudW1iZXI7IGNlbGxJbmRleDogbnVtYmVyIH0gfCBudWxsIHtcbiAgICAgICAgbGV0IGN1cnJlbnRFbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgbGV0IHNlbGVjdGVkQ2VsbDogeyByb3dJbmRleDogbnVtYmVyOyBjZWxsSW5kZXg6IG51bWJlciB9IHwgbnVsbCA9IG51bGw7XG5cbiAgICAgICAgd2hpbGUgKCFzZWxlY3RlZENlbGwgJiYgY3VycmVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50RWxlbWVudC50YWdOYW1lID09PSB0aGlzLmNlbGxUYWdOYW1lKSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDZWxsID0gdGhpcy5nZXRTZWxlY3RlZENlbGwoY3VycmVudEVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VsZWN0ZWRDZWxsO1xuICAgIH1cblxuICAgIGdldFNlbGVjdGVkQ2VsbChlbDogSFRNTEVsZW1lbnQpOiB7IHJvd0luZGV4OiBudW1iZXI7IGNlbGxJbmRleDogbnVtYmVyIH0gfCBudWxsIHtcbiAgICAgICAgbGV0IHNlbGVjdGVkQ2VsbDogeyByb3dJbmRleDogbnVtYmVyOyBjZWxsSW5kZXg6IG51bWJlciB9IHwgbnVsbCA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5yb3dNYXRyaXguc29tZSgocm93LCByb3dJbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2VsbEluZGV4ID0gcm93LmNlbGxzLmZpbmRJbmRleCh4ID0+IHguY2VsbCA9PT0gZWwpO1xuXG4gICAgICAgICAgICBpZiAoY2VsbEluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZENlbGwgPSB7IHJvd0luZGV4LCBjZWxsSW5kZXggfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gc2VsZWN0ZWRDZWxsO1xuICAgIH1cblxuICAgIGdldENlbGxJbmRleGVzT3V0c2lkZVRhYmxlKGV2ZW50OiBNb3VzZUV2ZW50KTogeyByb3dJbmRleDogbnVtYmVyOyBjZWxsSW5kZXg6IG51bWJlciB9IHwgbnVsbCB7XG4gICAgICAgIGxldCBzZWxlY3RlZENlbGw6IHsgcm93SW5kZXg6IG51bWJlcjsgY2VsbEluZGV4OiBudW1iZXIgfSB8IG51bGwgPSBudWxsO1xuICAgICAgICBjb25zdCB0YWJsZVJlYWN0ID0gdGhpcy50YWJsZUVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIGlmIChldmVudC5jbGllbnRZIDw9IHRhYmxlUmVhY3QudG9wIHx8IGV2ZW50LmNsaWVudFkgPj0gdGFibGVSZWFjdC5ib3R0b20pIHtcbiAgICAgICAgICAgIHRoaXMuYWRkU2VsZWN0aW9uSW5BbGxDZWxscygpO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmNsaWVudFggPD0gdGFibGVSZWFjdC5sZWZ0KSB7XG4gICAgICAgICAgICBzZWxlY3RlZENlbGwgPSB0aGlzLmdldENlbGxJbmRleGVzT3V0c2lkZVRhYmxlTGVmdChldmVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuY2xpZW50WCA+PSB0YWJsZVJlYWN0LnJpZ2h0KSB7XG4gICAgICAgICAgICBzZWxlY3RlZENlbGwgPSB0aGlzLmdldENlbGxJbmRleGVzT3V0c2lkZVRhYmxlUmlnaHRzKGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzZWxlY3RlZENlbGw7XG4gICAgfVxuXG4gICAgZ2V0Q2VsbEluZGV4ZXNPdXRzaWRlVGFibGVMZWZ0KGV2ZW50OiBNb3VzZUV2ZW50KTogeyByb3dJbmRleDogbnVtYmVyOyBjZWxsSW5kZXg6IG51bWJlciB9IHtcbiAgICAgICAgY29uc3Qgcm93SW5kZXggPSB0aGlzLmdldE5lYXJlc3RSb3dJbmRleChldmVudCk7XG4gICAgICAgIHJldHVybiB7IHJvd0luZGV4LCBjZWxsSW5kZXg6IDAgfTtcbiAgICB9XG5cbiAgICBnZXRDZWxsSW5kZXhlc091dHNpZGVUYWJsZVJpZ2h0cyhldmVudDogTW91c2VFdmVudCk6IHsgcm93SW5kZXg6IG51bWJlcjsgY2VsbEluZGV4OiBudW1iZXIgfSB7XG4gICAgICAgIGNvbnN0IHJvd0luZGV4ID0gdGhpcy5nZXROZWFyZXN0Um93SW5kZXgoZXZlbnQpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByb3dJbmRleCxcbiAgICAgICAgICAgIGNlbGxJbmRleDogdGhpcy5yb3dNYXRyaXhbcm93SW5kZXhdLmNlbGxzLmxlbmd0aCAtIDFcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBnZXROZWFyZXN0Um93SW5kZXgoZXZlbnQ6IE1vdXNlRXZlbnQpOiBudW1iZXIge1xuICAgICAgICBjb25zdCByb3dzID0gdGhpcy50YWJsZUVsLnJvd3M7XG4gICAgICAgIGNvbnN0IG1heFJvd0luZGV4ID0gcm93cy5sZW5ndGggLSAxO1xuICAgICAgICBsZXQgcm93SW5kZXggPSAtMTtcblxuICAgICAgICBkbyB7XG4gICAgICAgICAgICByb3dJbmRleCsrO1xuICAgICAgICAgICAgY29uc3Qgcm93UmVhY3QgPSByb3dzW3Jvd0luZGV4XS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICAgICAgaWYgKGV2ZW50LmNsaWVudFkgPj0gcm93UmVhY3QudG9wICYmIGV2ZW50LmNsaWVudFkgPD0gcm93UmVhY3QuYm90dG9tKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKHJvd0luZGV4IDwgbWF4Um93SW5kZXgpO1xuXG4gICAgICAgIHJldHVybiByb3dJbmRleDtcbiAgICB9XG5cbiAgICBhZGRTZWxlY3Rpb25JbkFsbENlbGxzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJvd01hdHJpeC5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgICByb3cuY2VsbHMuZm9yRWFjaChjZWxsID0+IHtcbiAgICAgICAgICAgICAgICBjZWxsLmhpZ2hsaWdodENlbGwoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgcm93SW5kZXhlcyA9IHtcbiAgICAgICAgICAgIHN0YXJ0SW5kZXg6IDAsXG4gICAgICAgICAgICBlbmRJbmRleDogdGhpcy5yb3dNYXRyaXgubGVuZ3RoIC0gMVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjZWxsSW5kZXhlcyA9IHtcbiAgICAgICAgICAgIHN0YXJ0SW5kZXg6IDAsXG4gICAgICAgICAgICBlbmRJbmRleDogTWF0aC5tYXgoLi4udGhpcy5yb3dNYXRyaXgubWFwKHggPT4geC5jZWxscy5sZW5ndGgpKVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnNlbGVjdGlvblJhbmdlID0gbmV3IFNlbGVjdGlvblJhbmdlTW9kZWwocm93SW5kZXhlcywgY2VsbEluZGV4ZXMpO1xuICAgIH1cblxuICAgIGNsZWFyU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uUmFuZ2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uSW5BbGxDZWxscygpO1xuICAgIH1cblxuICAgIGNsZWFyU2VsZWN0aW9uSW5BbGxDZWxscygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yb3dNYXRyaXguZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICAgICAgcm93LmNlbGxzLmZvckVhY2goY2VsbCA9PiB7XG4gICAgICAgICAgICAgICAgY2VsbC5yZW1vdmVIaWdobGlnaHRDZWxsKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uUmFuZ2UgPSBudWxsO1xuICAgIH1cblxuICAgIGdldFN0YXJ0QW5kRW5kSW5kZXhlcyhvcmlnaW5JbmRleDogbnVtYmVyLCBjdXJyZW50SW5kZXg6IG51bWJlcik6IHsgc3RhcnRJbmRleDogbnVtYmVyOyBlbmRJbmRleDogbnVtYmVyIH0ge1xuICAgICAgICBjb25zdCBpbmRleGVzID0gW29yaWdpbkluZGV4LCBjdXJyZW50SW5kZXhdO1xuICAgICAgICBpbmRleGVzLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcblxuICAgICAgICByZXR1cm4geyBzdGFydEluZGV4OiBpbmRleGVzWzBdLCBlbmRJbmRleDogaW5kZXhlc1sxXSB9O1xuICAgIH1cblxuICAgIGlzT3JpZ2luQ2VsbChldmVudDogTW91c2VFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBzZWxlY3RlZENlbGwgPSB0aGlzLmdldENlbGxJbmRleGVzKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XG5cbiAgICAgICAgaWYgKCFzZWxlY3RlZENlbGwgfHwgIXRoaXMub3JpZ2luU2VsZWN0ZWRDZWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5TZWxlY3RlZENlbGwucm93SW5kZXggPT09IHNlbGVjdGVkQ2VsbC5yb3dJbmRleCAmJiB0aGlzLm9yaWdpblNlbGVjdGVkQ2VsbC5jZWxsSW5kZXggPT09IHNlbGVjdGVkQ2VsbC5jZWxsSW5kZXg7XG4gICAgfVxuXG4gICAgaXNPbkVkaXRvckNsaWNrKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGxldCBjdXJyZW50RWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIGxldCBpc09uRWRpdG9yQ2xpY2sgPSBmYWxzZTtcblxuICAgICAgICB3aGlsZSAoIWlzT25FZGl0b3JDbGljayAmJiBjdXJyZW50RWxlbWVudCkge1xuICAgICAgICAgICAgaXNPbkVkaXRvckNsaWNrID0gY3VycmVudEVsZW1lbnQudGFnTmFtZSA9PT0gdGhpcy5lZGl0b3JUYWdOYW1lO1xuICAgICAgICAgICAgY3VycmVudEVsZW1lbnQgPSBjdXJyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGlzT25FZGl0b3JDbGljaztcbiAgICB9XG5cbiAgICBpc09uVGFibGVDbGljayhlbGVtZW50OiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgY3VycmVudEVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICBsZXQgaXNPblRhYmxlQ2xpY2sgPSBmYWxzZTtcblxuICAgICAgICB3aGlsZSAoIWlzT25UYWJsZUNsaWNrICYmIGN1cnJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICBpc09uVGFibGVDbGljayA9IGN1cnJlbnRFbGVtZW50ID09PSB0aGlzLnRhYmxlRWw7XG4gICAgICAgICAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXNPblRhYmxlQ2xpY2s7XG4gICAgfVxuXG4gICAgY2FuU3RhcnRTZWxlY3Rpb24oZWxlbWVudDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IGN1cnJlbnRFbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgbGV0IGNhblN0YXJ0U2VsZWN0aW9uID0gZmFsc2U7XG5cbiAgICAgICAgd2hpbGUgKCFjYW5TdGFydFNlbGVjdGlvbiAmJiBjdXJyZW50RWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZHJhZ2dhYmxlQ2VsbENvbnRlbnQuaW5jbHVkZXMoY3VycmVudEVsZW1lbnQudGFnTmFtZSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGN1cnJlbnRFbGVtZW50LnRhZ05hbWUgPT09IHRoaXMudGFibGVUYWdOYW1lKSB7XG4gICAgICAgICAgICAgICAgY2FuU3RhcnRTZWxlY3Rpb24gPSB0aGlzLnNlc3Npb25JZCA9PT0gK2N1cnJlbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1zZXNzaW9uLWlkJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjYW5TdGFydFNlbGVjdGlvbjtcbiAgICB9XG5cbiAgICBnZXRTZWxlY3Rpb25SYW5nZUZvck1lbnVPdmVybGF5KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogU2VsZWN0aW9uUmFuZ2VNb2RlbCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbCA9IHRoaXMuZ2V0Q2VsbEluZGV4ZXMoZWxlbWVudCk7XG4gICAgICAgIGlmICghc2VsZWN0ZWRDZWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzQ2VsbEluU2VsZWN0aW9uID1cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uUmFuZ2UgJiZcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uUmFuZ2Uucm93SW5kZXhlcy5zdGFydEluZGV4IDw9IHNlbGVjdGVkQ2VsbC5yb3dJbmRleCAmJlxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25SYW5nZS5yb3dJbmRleGVzLmVuZEluZGV4ID49IHNlbGVjdGVkQ2VsbC5yb3dJbmRleCAmJlxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25SYW5nZS5jZWxsSW5kZXhlcy5zdGFydEluZGV4IDw9IHNlbGVjdGVkQ2VsbC5jZWxsSW5kZXggJiZcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uUmFuZ2UuY2VsbEluZGV4ZXMuZW5kSW5kZXggPj0gc2VsZWN0ZWRDZWxsLmNlbGxJbmRleDtcblxuICAgICAgICBpZiAoIWlzQ2VsbEluU2VsZWN0aW9uICYmIHRoaXMuc2VsZWN0aW9uUmFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb25JbkFsbENlbGxzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNDZWxsSW5TZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvblJhbmdlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJvd0VuZEluZGV4ID0gc2VsZWN0ZWRDZWxsLnJvd0luZGV4O1xuICAgICAgICBsZXQgY29sdW1uRW5kSW5kZXggPSBzZWxlY3RlZENlbGwuY2VsbEluZGV4O1xuXG4gICAgICAgIHdoaWxlIChcbiAgICAgICAgICAgIHRoaXMucm93TWF0cml4W3Jvd0VuZEluZGV4XS5jZWxsc1tzZWxlY3RlZENlbGwuY2VsbEluZGV4XS5jZWxsID09PVxuICAgICAgICAgICAgdGhpcy5yb3dNYXRyaXhbcm93RW5kSW5kZXggKyAxXT8uY2VsbHNbc2VsZWN0ZWRDZWxsLmNlbGxJbmRleF0uY2VsbFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJvd0VuZEluZGV4Kys7XG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZSAodGhpcy5yb3dNYXRyaXhbcm93RW5kSW5kZXhdLmNlbGxzW2NvbHVtbkVuZEluZGV4XS5jZWxsID09PSB0aGlzLnJvd01hdHJpeFtyb3dFbmRJbmRleF0uY2VsbHNbY29sdW1uRW5kSW5kZXggKyAxXT8uY2VsbCkge1xuICAgICAgICAgICAgY29sdW1uRW5kSW5kZXgrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgU2VsZWN0aW9uUmFuZ2VNb2RlbChcbiAgICAgICAgICAgIHsgc3RhcnRJbmRleDogc2VsZWN0ZWRDZWxsLnJvd0luZGV4LCBlbmRJbmRleDogcm93RW5kSW5kZXggfSxcbiAgICAgICAgICAgIHsgc3RhcnRJbmRleDogc2VsZWN0ZWRDZWxsLmNlbGxJbmRleCwgZW5kSW5kZXg6IGNvbHVtbkVuZEluZGV4IH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXRUYXJnZXRzRm9yTWVudU92ZXJsYXkoc2VsZWN0aW9uUmFuZ2U6IFNlbGVjdGlvblJhbmdlTW9kZWwpOiBTZWxlY3Rpb25SYW5nZU1vZGVsIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3Rpb25SYW5nZU1vZGVsKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXg6IHRoaXMuZ2V0VGFyZ2V0Um93U3RhcnRJbmRleChzZWxlY3Rpb25SYW5nZS5yb3dJbmRleGVzLnN0YXJ0SW5kZXgpLFxuICAgICAgICAgICAgICAgIGVuZEluZGV4OiB0aGlzLmdldFRhcmdldFJvd0VuZEluZGV4KHNlbGVjdGlvblJhbmdlLnJvd0luZGV4ZXMuZW5kSW5kZXgpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXg6IHRoaXMuZ2V0VGFyZ2V0Q29sdW1uU3RhcnRJbmRleChcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2Uucm93SW5kZXhlcy5zdGFydEluZGV4LFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25SYW5nZS5yb3dJbmRleGVzLmVuZEluZGV4LFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25SYW5nZS5jZWxsSW5kZXhlcy5zdGFydEluZGV4XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBlbmRJbmRleDogdGhpcy5nZXRUYXJnZXRDb2x1bW5FbmRJbmRleChcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2Uucm93SW5kZXhlcy5zdGFydEluZGV4LFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25SYW5nZS5yb3dJbmRleGVzLmVuZEluZGV4LFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25SYW5nZS5jZWxsSW5kZXhlcy5lbmRJbmRleFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXRUYXJnZXRSb3dTdGFydEluZGV4KHN0YXJ0SW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IG1lcmdlZFJvd0NlbGxzID0gdGhpcy5yb3dNYXRyaXhbc3RhcnRJbmRleF0uY2VsbHMuZmlsdGVyKFxuICAgICAgICAgICAgeCA9PiB4LmNlbGwucm93U3BhbiA+IDEgJiYgeC5jb21wb25lbnRSZWYuaW5zdGFuY2UuY2VsbC52ZXJ0aWNhbE1lcmdlXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFtZXJnZWRSb3dDZWxscy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBzdGFydEluZGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdW5pcUNlbGxzID0gbmV3IFNldChtZXJnZWRSb3dDZWxscyk7XG4gICAgICAgIGxldCBpbmRleCA9IHN0YXJ0SW5kZXg7XG5cbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgY29uc3QgY2VsbHMgPSB0aGlzLnJvd01hdHJpeFtpbmRleF0uY2VsbHM7XG5cbiAgICAgICAgICAgIGlmICghY2VsbHMuc29tZShjZWxsID0+IHVuaXFDZWxscy5oYXMoY2VsbCkpKSB7XG4gICAgICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5kZXgtLTtcbiAgICAgICAgfSB3aGlsZSAoaW5kZXggPj0gMCk7XG5cbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIGdldFRhcmdldFJvd0VuZEluZGV4KGVuZEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBtZXJnZWRSb3dDZWxscyA9IHRoaXMucm93TWF0cml4W2VuZEluZGV4XS5jZWxscy5maWx0ZXIoeCA9PiB4LmNlbGwucm93U3BhbiA+IDEgJiYgeC5jb21wb25lbnRSZWYuaW5zdGFuY2UuY2VsbC52ZXJ0aWNhbE1lcmdlKTtcblxuICAgICAgICBpZiAoIW1lcmdlZFJvd0NlbGxzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGVuZEluZGV4ICsgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVuaXFDZWxscyA9IG5ldyBTZXQobWVyZ2VkUm93Q2VsbHMpO1xuICAgICAgICBsZXQgaW5kZXggPSBlbmRJbmRleDtcblxuICAgICAgICBkbyB7XG4gICAgICAgICAgICBjb25zdCBjZWxscyA9IHRoaXMucm93TWF0cml4W2luZGV4XT8uY2VsbHM7XG5cbiAgICAgICAgICAgIGlmICghY2VsbHM/LnNvbWUoY2VsbCA9PiB1bmlxQ2VsbHMuaGFzKGNlbGwpKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICB9IHdoaWxlIChpbmRleCA8PSB0aGlzLnJvd01hdHJpeC5sZW5ndGgpO1xuXG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG5cbiAgICBnZXRUYXJnZXRDb2x1bW5TdGFydEluZGV4KHJvd1N0YXJ0SW5kZXg6IG51bWJlciwgcm93RW5kSW5kZXg6IG51bWJlciwgY2VsbFN0YXJ0SW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGxldCBpbmRleCA9IGNlbGxTdGFydEluZGV4O1xuXG4gICAgICAgIGZvciAobGV0IGkgPSByb3dTdGFydEluZGV4OyBpIDw9IHJvd0VuZEluZGV4OyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJvd01hdHJpeFtpXS5jZWxsc1tjZWxsU3RhcnRJbmRleF0uY2VsbC5jb2xTcGFuID4gMSkge1xuICAgICAgICAgICAgICAgIGxldCBjZWxsSW5kZXggPSBjZWxsU3RhcnRJbmRleDtcblxuICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnJvd01hdHJpeFtpXS5jZWxsc1tjZWxsSW5kZXhdIHx8IHRoaXMucm93TWF0cml4W2ldLmNlbGxzW2NlbGxJbmRleF0uY2VsbC5jb2xTcGFuID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0luZGV4ID0gY2VsbEluZGV4O1xuICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGluZGV4IDwgbmV3SW5kZXggPyBpbmRleCA6IG5ld0luZGV4O1xuICAgICAgICAgICAgICAgICAgICBjZWxsSW5kZXgtLTtcbiAgICAgICAgICAgICAgICB9IHdoaWxlIChjZWxsSW5kZXggPj0gMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuXG4gICAgZ2V0VGFyZ2V0Q29sdW1uRW5kSW5kZXgocm93U3RhcnRJbmRleDogbnVtYmVyLCByb3dFbmRJbmRleDogbnVtYmVyLCBjZWxsRW5kSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGxldCBpbmRleCA9IGNlbGxFbmRJbmRleCArIDE7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IHJvd0VuZEluZGV4OyBpID49IHJvd1N0YXJ0SW5kZXg7IGktLSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucm93TWF0cml4W2ldLmNlbGxzW2NlbGxFbmRJbmRleF0uY2VsbC5jb2xTcGFuID4gMSkge1xuICAgICAgICAgICAgICAgIGxldCBjZWxsSW5kZXggPSBjZWxsRW5kSW5kZXg7XG5cbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5yb3dNYXRyaXhbaV0uY2VsbHNbY2VsbEluZGV4XSB8fCB0aGlzLnJvd01hdHJpeFtpXS5jZWxsc1tjZWxsSW5kZXhdLmNlbGwuY29sU3BhbiA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdJbmRleCA9IGNlbGxJbmRleCArIDE7XG4gICAgICAgICAgICAgICAgICAgIGluZGV4ID0gaW5kZXggPiBuZXdJbmRleCA/IGluZGV4IDogbmV3SW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIGNlbGxJbmRleCsrO1xuICAgICAgICAgICAgICAgIH0gd2hpbGUgKGNlbGxJbmRleCA8PSB0aGlzLnJvd01hdHJpeFtpXS5jZWxscy5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbn1cbiJdfQ==
383
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtc2VsZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvZWRpdG9yL2NvbXBvbmVudHMvdGFibGUvc2VsZWN0aW9uL3RhYmxlLXNlbGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFnQixZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFLN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBSXJFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRW5GLE1BQU0sT0FBTyxjQUFjO0lBdUJ2QixZQUNZLGFBQTRCLEVBQzVCLGNBQThCLEVBQzlCLGdCQUFrQyxFQUNsQyxTQUF5QixFQUN6QixLQUFpQixFQUNqQixPQUF5QixFQUN6QixPQUFvQjtRQU5wQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxjQUFTLEdBQVQsU0FBUyxDQUFnQjtRQUN6QixVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQ2pCLFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBQ3pCLFlBQU8sR0FBUCxPQUFPLENBQWE7UUFmdkIsa0JBQWEsR0FBRyxnQkFBZ0IsQ0FBQztRQUVqQyxpQkFBWSxHQUFHLGVBQWUsQ0FBQztRQUUvQixnQkFBVyxHQUFHLElBQUksQ0FBQztRQUVuQix5QkFBb0IsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFXaEQsSUFBSSxDQUFDLGdDQUFnQyxFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVELE9BQU87UUFD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LEVBQUUsWUFBb0I7UUFDcEYsSUFBSSxLQUFLLEdBQUcsWUFBWSxHQUFHLENBQUMsQ0FBQztRQUU3QixLQUFLLElBQUksQ0FBQyxHQUFHLFdBQVcsRUFBRSxDQUFDLElBQUksYUFBYSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQy9DLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLEVBQUU7Z0JBQ3hELElBQUksU0FBUyxHQUFHLFlBQVksQ0FBQztnQkFFN0IsR0FBRztvQkFDQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sS0FBSyxDQUFDLEVBQUU7d0JBQzlGLE1BQU07cUJBQ1Q7b0JBRUQsTUFBTSxRQUFRLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQztvQkFDL0IsS0FBSyxHQUFHLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO29CQUM1QyxTQUFTLEVBQUUsQ0FBQztpQkFDZixRQUFRLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7YUFDekQ7U0FDSjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZyb21FdmVudCwgU3Vic2NyaXB0aW9uLCB0aHJvdHRsZVRpbWUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQ2VsbERhdGFNb2RlbCB9IGZyb20gJy4uL21vZGVscy9jZWxsLWRhdGEubW9kZWwnO1xuaW1wb3J0IHsgRWRpdG9yU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2ludGVyYWN0aW9uL2VkaXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IEVkaXRTZXNzaW9uIH0gZnJvbSAnLi4vLi4vLi4vZXhlY3V0aW9uL2VkaXQuc2Vzc2lvbic7XG5pbXBvcnQgeyBNb3VzZUJ1dHRvbiB9IGZyb20gJy4uLy4uLy4uL2ludGVyYWN0aW9uL21vdXNlLWJ1dHRvbi5lbnVtJztcbmltcG9ydCB7IE92ZXJsYXlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL292ZXJsYXkuc2VydmljZSc7XG5pbXBvcnQgeyBSZWd1bGF0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vZXhlY3V0aW9uL3JlZ3VsYXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IFJvd0RhdGFNb2RlbCB9IGZyb20gJy4uL21vZGVscy9yb3ctZGF0YS5tb2RlbCc7XG5pbXBvcnQgeyBTZWxlY3Rpb25SYW5nZU1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3NlbGVjdGlvbi1yYW5nZS5tb2RlbCc7XG5pbXBvcnQgeyBUYWJsZU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC90YWJsZS5tb2RlbCc7XG5pbXBvcnQgeyBUYWJsZU92ZXJsYXlNZW51Q29tcG9uZW50IH0gZnJvbSAnLi4vb3ZlcmxheS1tZW51L292ZXJsYXktbWVudS5jb21wb25lbnQnO1xuXG5leHBvcnQgY2xhc3MgVGFibGVTZWxlY3Rpb24ge1xuICAgIG9yaWdpblNlbGVjdGVkQ2VsbDogeyByb3dJbmRleDogbnVtYmVyOyBjZWxsSW5kZXg6IG51bWJlcjsgaXNGb2N1c2VkOiBib29sZWFuIH07XG5cbiAgICB0YWJsZUNvbnRleHRNZW51JDogU3Vic2NyaXB0aW9uO1xuXG4gICAgdGFibGVNb3VzZURvd24kOiBTdWJzY3JpcHRpb247XG5cbiAgICBkb2N1bWVudE1vdXNlRG93biQ6IFN1YnNjcmlwdGlvbjtcblxuICAgIGRvY3VtZW50TW91c2VNb3ZlJDogU3Vic2NyaXB0aW9uO1xuXG4gICAgZG9jdW1lbnRNb3VzZVVwJDogU3Vic2NyaXB0aW9uO1xuXG4gICAgc2VsZWN0aW9uUmFuZ2U6IFNlbGVjdGlvblJhbmdlTW9kZWwgfCBudWxsO1xuXG4gICAgcmVhZG9ubHkgZWRpdG9yVGFnTmFtZSA9ICdBUFAtTk9ELUVESVRPUic7XG5cbiAgICByZWFkb25seSB0YWJsZVRhZ05hbWUgPSAnQVBQLU5PRC1UQUJMRSc7XG5cbiAgICByZWFkb25seSBjZWxsVGFnTmFtZSA9ICdURCc7XG5cbiAgICByZWFkb25seSBkcmFnZ2FibGVDZWxsQ29udGVudCA9IFsnQVBQLU5PRC1SRVNJWkVSJ107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBlZGl0b3JTZXJ2aWNlOiBFZGl0b3JTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG92ZXJsYXlTZXJ2aWNlOiBPdmVybGF5U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWd1bGF0b3JTZXJ2aWNlOiBSZWd1bGF0b3JTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJvd01hdHJpeDogUm93RGF0YU1vZGVsW10sXG4gICAgICAgIHByaXZhdGUgdGFibGU6IFRhYmxlTW9kZWwsXG4gICAgICAgIHByaXZhdGUgdGFibGVFbDogSFRNTFRhYmxlRWxlbWVudCxcbiAgICAgICAgcHJpdmF0ZSBzZXNzaW9uOiBFZGl0U2Vzc2lvblxuICAgICkge1xuICAgICAgICB0aGlzLmFkZFRhYmxlQ29udGV4dE1lbnVTdWJzY3JpcHRpb25zKCk7XG4gICAgICAgIHRoaXMuYWRkVGFibGVNb3VzZURvd25TdWJzY3JpcHRpb25zKCk7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudGFibGVDb250ZXh0TWVudSQ/LnVuc3Vic2NyaWJlKSB7XG4gICAgICAgICAgICB0aGlzLnRhYmxlQ29udGV4dE1lbnUkLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50YWJsZU1vdXNlRG93biQ/LnVuc3Vic2NyaWJlKSB7XG4gICAgICAgICAgICB0aGlzLnRhYmxlTW91c2VEb3duJC51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZW1vdmVNb3VzZVN1YnNjcmlwdGlvbnMoKTtcbiAgICB9XG5cbiAgICBhZGRUYWJsZUNvbnRleHRNZW51U3Vic2NyaXB0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50YWJsZUNvbnRleHRNZW51JCA9IGZyb21FdmVudCh0aGlzLnRhYmxlRWwsICdjb250ZXh0bWVudScpLnN1YnNjcmliZSgoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbi5pc0VkZ2VPcldpdGhpbkVkZ2UoKSAmJiAhdGhpcy5yZWd1bGF0b3JTZXJ2aWNlLm1haW5TZXNzaW9uLnNlc3Npb24uY3VzdG9tQ29tcG9uZW50cy5lZGdlcy5pc0VkaXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZWRpdG9yU2VydmljZS5pc1ZpZXdPbmx5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzZWxlY3Rpb25SYW5nZSA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2VGb3JNZW51T3ZlcmxheShldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKCFzZWxlY3Rpb25SYW5nZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdGFyZ2V0cyA9IHRoaXMuZ2V0VGFyZ2V0c0Zvck1lbnVPdmVybGF5KHNlbGVjdGlvblJhbmdlKTtcbiAgICAgICAgICAgIGNvbnN0IGNhblJlbW92ZVJvd3MgPSBzZWxlY3Rpb25SYW5nZS5yb3dJbmRleGVzLmVuZEluZGV4IC0gc2VsZWN0aW9uUmFuZ2Uucm93SW5kZXhlcy5zdGFydEluZGV4ICsgMSA8IHRoaXMucm93TWF0cml4Lmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IGNhblJlbW92ZUNvbHVtbnMgPVxuICAgICAgICAgICAgICAgIHNlbGVjdGlvblJhbmdlLmNlbGxJbmRleGVzLmVuZEluZGV4IC0gc2VsZWN0aW9uUmFuZ2UuY2VsbEluZGV4ZXMuc3RhcnRJbmRleCArIDEgPCB0aGlzLnJvd01hdHJpeFswXS5jZWxscy5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICAgICAgICAgIHNlbGVjdGlvblJhbmdlLFxuICAgICAgICAgICAgICAgIHRhcmdldHMsXG4gICAgICAgICAgICAgICAgY2FuUmVtb3ZlUm93cyxcbiAgICAgICAgICAgICAgICBjYW5SZW1vdmVDb2x1bW5zLFxuICAgICAgICAgICAgICAgIHRhYmxlSW5zZXJ0SW5kZXg6IHRoaXMudGFibGUuaW5zZXJ0SW5kZXgsXG4gICAgICAgICAgICAgICAgc2Vzc2lvbklkOiB0aGlzLnNlc3Npb24uc2Vzc2lvbklkXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5U2VydmljZS5vcGVuKFRhYmxlT3ZlcmxheU1lbnVDb21wb25lbnQsIGRhdGEsIGV2ZW50LngsIGV2ZW50LnkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhZGRUYWJsZU1vdXNlRG93blN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGFibGVNb3VzZURvd24kID0gZnJvbUV2ZW50KHRoaXMudGFibGVFbCwgJ21vdXNlZG93bicpLnN1YnNjcmliZSgoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlc3Npb24uaXNFZGdlT3JXaXRoaW5FZGdlKCkgJiYgIXRoaXMucmVndWxhdG9yU2VydmljZS5tYWluU2Vzc2lvbi5zZXNzaW9uLmN1c3RvbUNvbXBvbmVudHMuZWRnZXMuaXNFZGl0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGV2ZW50LmN0cmxLZXkgfHxcbiAgICAgICAgICAgICAgICAoZXZlbnQuYnV0dG9uIGFzIE1vdXNlQnV0dG9uKSA9PT0gTW91c2VCdXR0b24uUmlnaHQgfHxcbiAgICAgICAgICAgICAgICAhdGhpcy5jYW5TdGFydFNlbGVjdGlvbihldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVNlcnZpY2UuY2xvc2UoKTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlTW91c2VTdWJzY3JpcHRpb25zKCk7XG4gICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uSW5BbGxDZWxscygpO1xuICAgICAgICAgICAgdGhpcy5hZGREb2N1bWVudE1vdXNlTW92ZW1lbnRTdWJzY3JpcHRpb25zKCk7XG4gICAgICAgICAgICBjb25zdCBjZWxsID0gdGhpcy5nZXRDZWxsSW5kZXhlcyhldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5vcmlnaW5TZWxlY3RlZENlbGwgPSB7IC4uLmNlbGwsIGlzRm9jdXNlZDogdHJ1ZSB9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhZGREb2N1bWVudE1vdXNlTW92ZW1lbnRTdWJzY3JpcHRpb25zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRvY3VtZW50TW91c2VNb3ZlJCA9IGZyb21FdmVudChkb2N1bWVudCwgJ21vdXNlbW92ZScpXG4gICAgICAgICAgICAucGlwZSh0aHJvdHRsZVRpbWUoMTAwKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzTW91c2VNb3ZlKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZG9jdW1lbnRNb3VzZVVwJCA9IGZyb21FdmVudChkb2N1bWVudCwgJ21vdXNldXAnKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVNb3VzZVN1YnNjcmlwdGlvbnMoKTtcbiAgICAgICAgICAgIHRoaXMuYWRkRG9jdW1lbnRNb3VzZURvd25TdWJzY3JpcHRpb25zKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFkZERvY3VtZW50TW91c2VEb3duU3Vic2NyaXB0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kb2N1bWVudE1vdXNlRG93biQgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdtb3VzZWRvd24nKS5zdWJzY3JpYmUoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNPbkVkaXRvckNsaWNrKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkgfHwgdGhpcy5pc09uVGFibGVDbGljayhldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlTZXJ2aWNlLmNsb3NlKCk7XG4gICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uSW5BbGxDZWxscygpO1xuICAgICAgICAgICAgdGhpcy5vcmlnaW5TZWxlY3RlZENlbGwgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVNb3VzZVN1YnNjcmlwdGlvbnMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlTW91c2VTdWJzY3JpcHRpb25zKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kb2N1bWVudE1vdXNlTW92ZSQ/LnVuc3Vic2NyaWJlKSB7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50TW91c2VNb3ZlJC51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnRNb3VzZVVwJD8udW5zdWJzY3JpYmUpIHtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRNb3VzZVVwJC51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnRNb3VzZURvd24kPy51bnN1YnNjcmliZSkge1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudE1vdXNlRG93biQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb2Nlc3NNb3VzZU1vdmUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMub3JpZ2luU2VsZWN0ZWRDZWxsPy5pc0ZvY3VzZWQgJiYgIXRoaXMuaXNPcmlnaW5DZWxsKGV2ZW50KSkge1xuICAgICAgICAgICAgdGhpcy5yb3dNYXRyaXhbdGhpcy5vcmlnaW5TZWxlY3RlZENlbGwucm93SW5kZXhdLmNlbGxzW3RoaXMub3JpZ2luU2VsZWN0ZWRDZWxsLmNlbGxJbmRleF0uZGlzYWJsZUVkaXRvclNlbGVjdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmVuZE1vdXNlUHJlc3MoKTtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luU2VsZWN0ZWRDZWxsLmlzRm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLm9yaWdpblNlbGVjdGVkQ2VsbD8uaXNGb2N1c2VkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdEFsbENlbGxzSW5CZXR3ZWVuKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNlbGVjdEFsbENlbGxzSW5CZXR3ZWVuKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5vcmlnaW5TZWxlY3RlZENlbGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbCA9IHRoaXMuZ2V0Q2VsbEluZGV4ZXMoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KSB8fCB0aGlzLmdldENlbGxJbmRleGVzT3V0c2lkZVRhYmxlKGV2ZW50KTtcblxuICAgICAgICBpZiAoIXNlbGVjdGVkQ2VsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbkluQWxsQ2VsbHMoKTtcblxuICAgICAgICBjb25zdCByb3dJbmRleGVzID0gdGhpcy5nZXRTdGFydEFuZEVuZEluZGV4ZXModGhpcy5vcmlnaW5TZWxlY3RlZENlbGwucm93SW5kZXgsIHNlbGVjdGVkQ2VsbC5yb3dJbmRleCk7XG4gICAgICAgIGNvbnN0IGNlbGxJbmRleGVzID0gdGhpcy5nZXRTdGFydEFuZEVuZEluZGV4ZXModGhpcy5vcmlnaW5TZWxlY3RlZENlbGwuY2VsbEluZGV4LCBzZWxlY3RlZENlbGwuY2VsbEluZGV4KTtcbiAgICAgICAgY29uc3QgY2VsbHM6IENlbGxEYXRhTW9kZWxbXSA9IFtdO1xuICAgICAgICBsZXQgY3VycmVudFJvd0luZGV4ID0gcm93SW5kZXhlcy5zdGFydEluZGV4O1xuXG4gICAgICAgIHdoaWxlIChjdXJyZW50Um93SW5kZXggPD0gcm93SW5kZXhlcy5lbmRJbmRleCkge1xuICAgICAgICAgICAgbGV0IGN1cnJlbnRDZWxsSW5kZXggPSBjZWxsSW5kZXhlcy5zdGFydEluZGV4O1xuXG4gICAgICAgICAgICB3aGlsZSAoY3VycmVudENlbGxJbmRleCA8PSBjZWxsSW5kZXhlcy5lbmRJbmRleCkge1xuICAgICAgICAgICAgICAgIGNlbGxzLnB1c2godGhpcy5yb3dNYXRyaXhbY3VycmVudFJvd0luZGV4XS5jZWxsc1tjdXJyZW50Q2VsbEluZGV4XSk7XG4gICAgICAgICAgICAgICAgY3VycmVudENlbGxJbmRleCsrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdXJyZW50Um93SW5kZXgrKztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVuaXFDZWxscyA9IG5ldyBTZXQoY2VsbHMpO1xuICAgICAgICB1bmlxQ2VsbHMuZm9yRWFjaChjZWxsID0+IGNlbGwuaGlnaGxpZ2h0Q2VsbCgpKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25SYW5nZSA9IG5ldyBTZWxlY3Rpb25SYW5nZU1vZGVsKHJvd0luZGV4ZXMsIGNlbGxJbmRleGVzKTtcbiAgICB9XG5cbiAgICBnZXRDZWxsSW5kZXhlcyhlbGVtZW50OiBIVE1MRWxlbWVudCk6IHsgcm93SW5kZXg6IG51bWJlcjsgY2VsbEluZGV4OiBudW1iZXIgfSB8IG51bGwge1xuICAgICAgICBsZXQgY3VycmVudEVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICBsZXQgc2VsZWN0ZWRDZWxsOiB7IHJvd0luZGV4OiBudW1iZXI7IGNlbGxJbmRleDogbnVtYmVyIH0gfCBudWxsID0gbnVsbDtcblxuICAgICAgICB3aGlsZSAoIXNlbGVjdGVkQ2VsbCAmJiBjdXJyZW50RWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRFbGVtZW50LnRhZ05hbWUgPT09IHRoaXMuY2VsbFRhZ05hbWUpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZENlbGwgPSB0aGlzLmdldFNlbGVjdGVkQ2VsbChjdXJyZW50RWxlbWVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzZWxlY3RlZENlbGw7XG4gICAgfVxuXG4gICAgZ2V0U2VsZWN0ZWRDZWxsKGVsOiBIVE1MRWxlbWVudCk6IHsgcm93SW5kZXg6IG51bWJlcjsgY2VsbEluZGV4OiBudW1iZXIgfSB8IG51bGwge1xuICAgICAgICBsZXQgc2VsZWN0ZWRDZWxsOiB7IHJvd0luZGV4OiBudW1iZXI7IGNlbGxJbmRleDogbnVtYmVyIH0gfCBudWxsID0gbnVsbDtcblxuICAgICAgICB0aGlzLnJvd01hdHJpeC5zb21lKChyb3csIHJvd0luZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjZWxsSW5kZXggPSByb3cuY2VsbHMuZmluZEluZGV4KHggPT4geC5jZWxsID09PSBlbCk7XG5cbiAgICAgICAgICAgIGlmIChjZWxsSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2VsbCA9IHsgcm93SW5kZXgsIGNlbGxJbmRleCB9O1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBzZWxlY3RlZENlbGw7XG4gICAgfVxuXG4gICAgZ2V0Q2VsbEluZGV4ZXNPdXRzaWRlVGFibGUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB7IHJvd0luZGV4OiBudW1iZXI7IGNlbGxJbmRleDogbnVtYmVyIH0gfCBudWxsIHtcbiAgICAgICAgbGV0IHNlbGVjdGVkQ2VsbDogeyByb3dJbmRleDogbnVtYmVyOyBjZWxsSW5kZXg6IG51bWJlciB9IHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGNvbnN0IHRhYmxlUmVhY3QgPSB0aGlzLnRhYmxlRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgaWYgKGV2ZW50LmNsaWVudFkgPD0gdGFibGVSZWFjdC50b3AgfHwgZXZlbnQuY2xpZW50WSA+PSB0YWJsZVJlYWN0LmJvdHRvbSkge1xuICAgICAgICAgICAgdGhpcy5hZGRTZWxlY3Rpb25JbkFsbENlbGxzKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuY2xpZW50WCA8PSB0YWJsZVJlYWN0LmxlZnQpIHtcbiAgICAgICAgICAgIHNlbGVjdGVkQ2VsbCA9IHRoaXMuZ2V0Q2VsbEluZGV4ZXNPdXRzaWRlVGFibGVMZWZ0KGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC5jbGllbnRYID49IHRhYmxlUmVhY3QucmlnaHQpIHtcbiAgICAgICAgICAgIHNlbGVjdGVkQ2VsbCA9IHRoaXMuZ2V0Q2VsbEluZGV4ZXNPdXRzaWRlVGFibGVSaWdodHMoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkQ2VsbDtcbiAgICB9XG5cbiAgICBnZXRDZWxsSW5kZXhlc091dHNpZGVUYWJsZUxlZnQoZXZlbnQ6IE1vdXNlRXZlbnQpOiB7IHJvd0luZGV4OiBudW1iZXI7IGNlbGxJbmRleDogbnVtYmVyIH0ge1xuICAgICAgICBjb25zdCByb3dJbmRleCA9IHRoaXMuZ2V0TmVhcmVzdFJvd0luZGV4KGV2ZW50KTtcbiAgICAgICAgcmV0dXJuIHsgcm93SW5kZXgsIGNlbGxJbmRleDogMCB9O1xuICAgIH1cblxuICAgIGdldENlbGxJbmRleGVzT3V0c2lkZVRhYmxlUmlnaHRzKGV2ZW50OiBNb3VzZUV2ZW50KTogeyByb3dJbmRleDogbnVtYmVyOyBjZWxsSW5kZXg6IG51bWJlciB9IHtcbiAgICAgICAgY29uc3Qgcm93SW5kZXggPSB0aGlzLmdldE5lYXJlc3RSb3dJbmRleChldmVudCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJvd0luZGV4LFxuICAgICAgICAgICAgY2VsbEluZGV4OiB0aGlzLnJvd01hdHJpeFtyb3dJbmRleF0uY2VsbHMubGVuZ3RoIC0gMVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGdldE5lYXJlc3RSb3dJbmRleChldmVudDogTW91c2VFdmVudCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHJvd3MgPSB0aGlzLnRhYmxlRWwucm93cztcbiAgICAgICAgY29uc3QgbWF4Um93SW5kZXggPSByb3dzLmxlbmd0aCAtIDE7XG4gICAgICAgIGxldCByb3dJbmRleCA9IC0xO1xuXG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIHJvd0luZGV4Kys7XG4gICAgICAgICAgICBjb25zdCByb3dSZWFjdCA9IHJvd3Nbcm93SW5kZXhdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgICAgICBpZiAoZXZlbnQuY2xpZW50WSA+PSByb3dSZWFjdC50b3AgJiYgZXZlbnQuY2xpZW50WSA8PSByb3dSZWFjdC5ib3R0b20pIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAocm93SW5kZXggPCBtYXhSb3dJbmRleCk7XG5cbiAgICAgICAgcmV0dXJuIHJvd0luZGV4O1xuICAgIH1cblxuICAgIGFkZFNlbGVjdGlvbkluQWxsQ2VsbHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucm93TWF0cml4LmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgICAgIHJvdy5jZWxscy5mb3JFYWNoKGNlbGwgPT4ge1xuICAgICAgICAgICAgICAgIGNlbGwuaGlnaGxpZ2h0Q2VsbCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByb3dJbmRleGVzID0ge1xuICAgICAgICAgICAgc3RhcnRJbmRleDogMCxcbiAgICAgICAgICAgIGVuZEluZGV4OiB0aGlzLnJvd01hdHJpeC5sZW5ndGggLSAxXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGNlbGxJbmRleGVzID0ge1xuICAgICAgICAgICAgc3RhcnRJbmRleDogMCxcbiAgICAgICAgICAgIGVuZEluZGV4OiBNYXRoLm1heCguLi50aGlzLnJvd01hdHJpeC5tYXAoeCA9PiB4LmNlbGxzLmxlbmd0aCkpXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uUmFuZ2UgPSBuZXcgU2VsZWN0aW9uUmFuZ2VNb2RlbChyb3dJbmRleGVzLCBjZWxsSW5kZXhlcyk7XG4gICAgfVxuXG4gICAgY2xlYXJTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb25SYW5nZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb25JbkFsbENlbGxzKCk7XG4gICAgfVxuXG4gICAgY2xlYXJTZWxlY3Rpb25JbkFsbENlbGxzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJvd01hdHJpeC5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgICByb3cuY2VsbHMuZm9yRWFjaChjZWxsID0+IHtcbiAgICAgICAgICAgICAgICBjZWxsLnJlbW92ZUhpZ2hsaWdodENlbGwoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25SYW5nZSA9IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0U3RhcnRBbmRFbmRJbmRleGVzKG9yaWdpbkluZGV4OiBudW1iZXIsIGN1cnJlbnRJbmRleDogbnVtYmVyKTogeyBzdGFydEluZGV4OiBudW1iZXI7IGVuZEluZGV4OiBudW1iZXIgfSB7XG4gICAgICAgIGNvbnN0IGluZGV4ZXMgPSBbb3JpZ2luSW5kZXgsIGN1cnJlbnRJbmRleF07XG4gICAgICAgIGluZGV4ZXMuc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuXG4gICAgICAgIHJldHVybiB7IHN0YXJ0SW5kZXg6IGluZGV4ZXNbMF0sIGVuZEluZGV4OiBpbmRleGVzWzFdIH07XG4gICAgfVxuXG4gICAgaXNPcmlnaW5DZWxsKGV2ZW50OiBNb3VzZUV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbCA9IHRoaXMuZ2V0Q2VsbEluZGV4ZXMoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcblxuICAgICAgICBpZiAoIXNlbGVjdGVkQ2VsbCB8fCAhdGhpcy5vcmlnaW5TZWxlY3RlZENlbGwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpblNlbGVjdGVkQ2VsbC5yb3dJbmRleCA9PT0gc2VsZWN0ZWRDZWxsLnJvd0luZGV4ICYmIHRoaXMub3JpZ2luU2VsZWN0ZWRDZWxsLmNlbGxJbmRleCA9PT0gc2VsZWN0ZWRDZWxsLmNlbGxJbmRleDtcbiAgICB9XG5cbiAgICBpc09uRWRpdG9yQ2xpY2soZWxlbWVudDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IGN1cnJlbnRFbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgbGV0IGlzT25FZGl0b3JDbGljayA9IGZhbHNlO1xuXG4gICAgICAgIHdoaWxlICghaXNPbkVkaXRvckNsaWNrICYmIGN1cnJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICBpc09uRWRpdG9yQ2xpY2sgPSBjdXJyZW50RWxlbWVudC50YWdOYW1lID09PSB0aGlzLmVkaXRvclRhZ05hbWU7XG4gICAgICAgICAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXNPbkVkaXRvckNsaWNrO1xuICAgIH1cblxuICAgIGlzT25UYWJsZUNsaWNrKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGxldCBjdXJyZW50RWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIGxldCBpc09uVGFibGVDbGljayA9IGZhbHNlO1xuXG4gICAgICAgIHdoaWxlICghaXNPblRhYmxlQ2xpY2sgJiYgY3VycmVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGlzT25UYWJsZUNsaWNrID0gY3VycmVudEVsZW1lbnQgPT09IHRoaXMudGFibGVFbDtcbiAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpc09uVGFibGVDbGljaztcbiAgICB9XG5cbiAgICBjYW5TdGFydFNlbGVjdGlvbihlbGVtZW50OiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgY3VycmVudEVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICBsZXQgY2FuU3RhcnRTZWxlY3Rpb24gPSBmYWxzZTtcblxuICAgICAgICB3aGlsZSAoIWNhblN0YXJ0U2VsZWN0aW9uICYmIGN1cnJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kcmFnZ2FibGVDZWxsQ29udGVudC5pbmNsdWRlcyhjdXJyZW50RWxlbWVudC50YWdOYW1lKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY3VycmVudEVsZW1lbnQudGFnTmFtZSA9PT0gdGhpcy50YWJsZVRhZ05hbWUpIHtcbiAgICAgICAgICAgICAgICBjYW5TdGFydFNlbGVjdGlvbiA9IHRoaXMuc2Vzc2lvbi5zZXNzaW9uSWQgPT09ICtjdXJyZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2Vzc2lvbi1pZCcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2FuU3RhcnRTZWxlY3Rpb247XG4gICAgfVxuXG4gICAgZ2V0U2VsZWN0aW9uUmFuZ2VGb3JNZW51T3ZlcmxheShlbGVtZW50OiBIVE1MRWxlbWVudCk6IFNlbGVjdGlvblJhbmdlTW9kZWwge1xuICAgICAgICBjb25zdCBzZWxlY3RlZENlbGwgPSB0aGlzLmdldENlbGxJbmRleGVzKGVsZW1lbnQpO1xuICAgICAgICBpZiAoIXNlbGVjdGVkQ2VsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc0NlbGxJblNlbGVjdGlvbiA9XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblJhbmdlICYmXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblJhbmdlLnJvd0luZGV4ZXMuc3RhcnRJbmRleCA8PSBzZWxlY3RlZENlbGwucm93SW5kZXggJiZcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uUmFuZ2Uucm93SW5kZXhlcy5lbmRJbmRleCA+PSBzZWxlY3RlZENlbGwucm93SW5kZXggJiZcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uUmFuZ2UuY2VsbEluZGV4ZXMuc3RhcnRJbmRleCA8PSBzZWxlY3RlZENlbGwuY2VsbEluZGV4ICYmXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblJhbmdlLmNlbGxJbmRleGVzLmVuZEluZGV4ID49IHNlbGVjdGVkQ2VsbC5jZWxsSW5kZXg7XG5cbiAgICAgICAgaWYgKCFpc0NlbGxJblNlbGVjdGlvbiAmJiB0aGlzLnNlbGVjdGlvblJhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uSW5BbGxDZWxscygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzQ2VsbEluU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25SYW5nZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByb3dFbmRJbmRleCA9IHNlbGVjdGVkQ2VsbC5yb3dJbmRleDtcbiAgICAgICAgbGV0IGNvbHVtbkVuZEluZGV4ID0gc2VsZWN0ZWRDZWxsLmNlbGxJbmRleDtcblxuICAgICAgICB3aGlsZSAoXG4gICAgICAgICAgICB0aGlzLnJvd01hdHJpeFtyb3dFbmRJbmRleF0uY2VsbHNbc2VsZWN0ZWRDZWxsLmNlbGxJbmRleF0uY2VsbCA9PT1cbiAgICAgICAgICAgIHRoaXMucm93TWF0cml4W3Jvd0VuZEluZGV4ICsgMV0/LmNlbGxzW3NlbGVjdGVkQ2VsbC5jZWxsSW5kZXhdLmNlbGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByb3dFbmRJbmRleCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKHRoaXMucm93TWF0cml4W3Jvd0VuZEluZGV4XS5jZWxsc1tjb2x1bW5FbmRJbmRleF0uY2VsbCA9PT0gdGhpcy5yb3dNYXRyaXhbcm93RW5kSW5kZXhdLmNlbGxzW2NvbHVtbkVuZEluZGV4ICsgMV0/LmNlbGwpIHtcbiAgICAgICAgICAgIGNvbHVtbkVuZEluZGV4Kys7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFNlbGVjdGlvblJhbmdlTW9kZWwoXG4gICAgICAgICAgICB7IHN0YXJ0SW5kZXg6IHNlbGVjdGVkQ2VsbC5yb3dJbmRleCwgZW5kSW5kZXg6IHJvd0VuZEluZGV4IH0sXG4gICAgICAgICAgICB7IHN0YXJ0SW5kZXg6IHNlbGVjdGVkQ2VsbC5jZWxsSW5kZXgsIGVuZEluZGV4OiBjb2x1bW5FbmRJbmRleCB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0VGFyZ2V0c0Zvck1lbnVPdmVybGF5KHNlbGVjdGlvblJhbmdlOiBTZWxlY3Rpb25SYW5nZU1vZGVsKTogU2VsZWN0aW9uUmFuZ2VNb2RlbCB7XG4gICAgICAgIHJldHVybiBuZXcgU2VsZWN0aW9uUmFuZ2VNb2RlbChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGFydEluZGV4OiB0aGlzLmdldFRhcmdldFJvd1N0YXJ0SW5kZXgoc2VsZWN0aW9uUmFuZ2Uucm93SW5kZXhlcy5zdGFydEluZGV4KSxcbiAgICAgICAgICAgICAgICBlbmRJbmRleDogdGhpcy5nZXRUYXJnZXRSb3dFbmRJbmRleChzZWxlY3Rpb25SYW5nZS5yb3dJbmRleGVzLmVuZEluZGV4KVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGFydEluZGV4OiB0aGlzLmdldFRhcmdldENvbHVtblN0YXJ0SW5kZXgoXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblJhbmdlLnJvd0luZGV4ZXMuc3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2Uucm93SW5kZXhlcy5lbmRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2UuY2VsbEluZGV4ZXMuc3RhcnRJbmRleFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgZW5kSW5kZXg6IHRoaXMuZ2V0VGFyZ2V0Q29sdW1uRW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblJhbmdlLnJvd0luZGV4ZXMuc3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2Uucm93SW5kZXhlcy5lbmRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2UuY2VsbEluZGV4ZXMuZW5kSW5kZXhcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0VGFyZ2V0Um93U3RhcnRJbmRleChzdGFydEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBtZXJnZWRSb3dDZWxscyA9IHRoaXMucm93TWF0cml4W3N0YXJ0SW5kZXhdLmNlbGxzLmZpbHRlcihcbiAgICAgICAgICAgIHggPT4geC5jZWxsLnJvd1NwYW4gPiAxICYmIHguY29tcG9uZW50UmVmLmluc3RhbmNlLmNlbGwudmVydGljYWxNZXJnZVxuICAgICAgICApO1xuXG4gICAgICAgIGlmICghbWVyZ2VkUm93Q2VsbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhcnRJbmRleDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVuaXFDZWxscyA9IG5ldyBTZXQobWVyZ2VkUm93Q2VsbHMpO1xuICAgICAgICBsZXQgaW5kZXggPSBzdGFydEluZGV4O1xuXG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxzID0gdGhpcy5yb3dNYXRyaXhbaW5kZXhdLmNlbGxzO1xuXG4gICAgICAgICAgICBpZiAoIWNlbGxzLnNvbWUoY2VsbCA9PiB1bmlxQ2VsbHMuaGFzKGNlbGwpKSkge1xuICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGluZGV4LS07XG4gICAgICAgIH0gd2hpbGUgKGluZGV4ID49IDApO1xuXG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG5cbiAgICBnZXRUYXJnZXRSb3dFbmRJbmRleChlbmRJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgbWVyZ2VkUm93Q2VsbHMgPSB0aGlzLnJvd01hdHJpeFtlbmRJbmRleF0uY2VsbHMuZmlsdGVyKHggPT4geC5jZWxsLnJvd1NwYW4gPiAxICYmIHguY29tcG9uZW50UmVmLmluc3RhbmNlLmNlbGwudmVydGljYWxNZXJnZSk7XG5cbiAgICAgICAgaWYgKCFtZXJnZWRSb3dDZWxscy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBlbmRJbmRleCArIDE7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1bmlxQ2VsbHMgPSBuZXcgU2V0KG1lcmdlZFJvd0NlbGxzKTtcbiAgICAgICAgbGV0IGluZGV4ID0gZW5kSW5kZXg7XG5cbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgY29uc3QgY2VsbHMgPSB0aGlzLnJvd01hdHJpeFtpbmRleF0/LmNlbGxzO1xuXG4gICAgICAgICAgICBpZiAoIWNlbGxzPy5zb21lKGNlbGwgPT4gdW5pcUNlbGxzLmhhcyhjZWxsKSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfSB3aGlsZSAoaW5kZXggPD0gdGhpcy5yb3dNYXRyaXgubGVuZ3RoKTtcblxuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuXG4gICAgZ2V0VGFyZ2V0Q29sdW1uU3RhcnRJbmRleChyb3dTdGFydEluZGV4OiBudW1iZXIsIHJvd0VuZEluZGV4OiBudW1iZXIsIGNlbGxTdGFydEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBsZXQgaW5kZXggPSBjZWxsU3RhcnRJbmRleDtcblxuICAgICAgICBmb3IgKGxldCBpID0gcm93U3RhcnRJbmRleDsgaSA8PSByb3dFbmRJbmRleDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yb3dNYXRyaXhbaV0uY2VsbHNbY2VsbFN0YXJ0SW5kZXhdLmNlbGwuY29sU3BhbiA+IDEpIHtcbiAgICAgICAgICAgICAgICBsZXQgY2VsbEluZGV4ID0gY2VsbFN0YXJ0SW5kZXg7XG5cbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5yb3dNYXRyaXhbaV0uY2VsbHNbY2VsbEluZGV4XSB8fCB0aGlzLnJvd01hdHJpeFtpXS5jZWxsc1tjZWxsSW5kZXhdLmNlbGwuY29sU3BhbiA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdJbmRleCA9IGNlbGxJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBpbmRleCA8IG5ld0luZGV4ID8gaW5kZXggOiBuZXdJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgY2VsbEluZGV4LS07XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAoY2VsbEluZGV4ID49IDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIGdldFRhcmdldENvbHVtbkVuZEluZGV4KHJvd1N0YXJ0SW5kZXg6IG51bWJlciwgcm93RW5kSW5kZXg6IG51bWJlciwgY2VsbEVuZEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBsZXQgaW5kZXggPSBjZWxsRW5kSW5kZXggKyAxO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSByb3dFbmRJbmRleDsgaSA+PSByb3dTdGFydEluZGV4OyBpLS0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJvd01hdHJpeFtpXS5jZWxsc1tjZWxsRW5kSW5kZXhdLmNlbGwuY29sU3BhbiA+IDEpIHtcbiAgICAgICAgICAgICAgICBsZXQgY2VsbEluZGV4ID0gY2VsbEVuZEluZGV4O1xuXG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMucm93TWF0cml4W2ldLmNlbGxzW2NlbGxJbmRleF0gfHwgdGhpcy5yb3dNYXRyaXhbaV0uY2VsbHNbY2VsbEluZGV4XS5jZWxsLmNvbFNwYW4gPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3SW5kZXggPSBjZWxsSW5kZXggKyAxO1xuICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGluZGV4ID4gbmV3SW5kZXggPyBpbmRleCA6IG5ld0luZGV4O1xuICAgICAgICAgICAgICAgICAgICBjZWxsSW5kZXgrKztcbiAgICAgICAgICAgICAgICB9IHdoaWxlIChjZWxsSW5kZXggPD0gdGhpcy5yb3dNYXRyaXhbaV0uY2VsbHMubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG59XG4iXX0=