ngx-vflow 0.9.1 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/esm2022/lib/vflow/components/custom-node-base/custom-node-base.component.mjs +48 -0
  2. package/esm2022/lib/vflow/components/node/node.component.mjs +16 -13
  3. package/esm2022/lib/vflow/components/vflow/vflow.component.mjs +29 -6
  4. package/esm2022/lib/vflow/directives/template.directive.mjs +12 -1
  5. package/esm2022/lib/vflow/interfaces/component-node-event.interface.mjs +1 -1
  6. package/esm2022/lib/vflow/interfaces/node.interface.mjs +39 -2
  7. package/esm2022/lib/vflow/interfaces/optimization.interface.mjs +2 -0
  8. package/esm2022/lib/vflow/models/handle.model.mjs +22 -9
  9. package/esm2022/lib/vflow/models/node.model.mjs +103 -17
  10. package/esm2022/lib/vflow/public-components/custom-dynamic-node.component.mjs +19 -0
  11. package/esm2022/lib/vflow/public-components/custom-node.component.mjs +9 -41
  12. package/esm2022/lib/vflow/services/draggable.service.mjs +25 -10
  13. package/esm2022/lib/vflow/services/handle.service.mjs +7 -2
  14. package/esm2022/lib/vflow/services/node-rendering.service.mjs +12 -3
  15. package/esm2022/lib/vflow/utils/reference-keeper.mjs +1 -1
  16. package/esm2022/lib/vflow/vflow.module.mjs +5 -2
  17. package/esm2022/public-api.mjs +3 -1
  18. package/fesm2022/ngx-vflow.mjs +301 -71
  19. package/fesm2022/ngx-vflow.mjs.map +1 -1
  20. package/lib/vflow/components/custom-node-base/custom-node-base.component.d.ts +21 -0
  21. package/lib/vflow/components/node/node.component.d.ts +3 -2
  22. package/lib/vflow/components/vflow/vflow.component.d.ts +14 -9
  23. package/lib/vflow/directives/template.directive.d.ts +5 -0
  24. package/lib/vflow/interfaces/component-node-event.interface.d.ts +2 -1
  25. package/lib/vflow/interfaces/node.interface.d.ts +64 -5
  26. package/lib/vflow/interfaces/optimization.interface.d.ts +3 -0
  27. package/lib/vflow/models/edge.model.d.ts +17 -1
  28. package/lib/vflow/models/handle.model.d.ts +2 -1
  29. package/lib/vflow/models/node.model.d.ts +31 -22
  30. package/lib/vflow/public-components/custom-dynamic-node.component.d.ts +13 -0
  31. package/lib/vflow/public-components/custom-node.component.d.ts +6 -13
  32. package/lib/vflow/services/draggable.service.d.ts +9 -3
  33. package/lib/vflow/services/handle.service.d.ts +1 -1
  34. package/lib/vflow/services/node-changes.service.d.ts +1 -4
  35. package/lib/vflow/services/node-rendering.service.d.ts +1 -0
  36. package/lib/vflow/utils/reference-keeper.d.ts +2 -2
  37. package/lib/vflow/vflow.module.d.ts +1 -1
  38. package/package.json +1 -1
  39. package/public-api.d.ts +2 -0
@@ -0,0 +1,48 @@
1
+ import { DestroyRef, Directive, EventEmitter, Input, inject, signal } from "@angular/core";
2
+ import { merge, tap } from "rxjs";
3
+ import { takeUntilDestroyed } from "@angular/core/rxjs-interop";
4
+ import { ComponentEventBusService } from "../../services/component-event-bus.service";
5
+ import * as i0 from "@angular/core";
6
+ export class CustomNodeBaseComponent {
7
+ constructor() {
8
+ this.eventBus = inject(ComponentEventBusService);
9
+ this.destroyRef = inject(DestroyRef);
10
+ /**
11
+ * Signal with selected state of node
12
+ */
13
+ this.selected = signal(false);
14
+ this.data = signal(undefined);
15
+ }
16
+ set _selected(value) {
17
+ this.selected.set(value);
18
+ }
19
+ ngOnInit() {
20
+ this.trackEvents().pipe(takeUntilDestroyed(this.destroyRef)).subscribe();
21
+ }
22
+ trackEvents() {
23
+ const props = Object.getOwnPropertyNames(this);
24
+ const emitters = new Map();
25
+ for (const prop of props) {
26
+ const field = this[prop];
27
+ if (field instanceof EventEmitter) {
28
+ emitters.set(field, prop);
29
+ }
30
+ }
31
+ return merge(...Array.from(emitters.keys()).map(emitter => emitter.pipe(tap((event) => {
32
+ this.eventBus.pushEvent({
33
+ nodeId: this.node.id,
34
+ eventName: emitters.get(emitter),
35
+ eventPayload: event
36
+ });
37
+ }))));
38
+ }
39
+ ;
40
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CustomNodeBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
41
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: CustomNodeBaseComponent, inputs: { _selected: "_selected" }, ngImport: i0 }); }
42
+ }
43
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CustomNodeBaseComponent, decorators: [{
44
+ type: Directive
45
+ }], propDecorators: { _selected: [{
46
+ type: Input
47
+ }] } });
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLW5vZGUtYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvY29tcG9uZW50cy9jdXN0b20tbm9kZS1iYXNlL2N1c3RvbS1ub2RlLWJhc2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNsRyxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQzs7QUFJdEYsTUFBTSxPQUFnQix1QkFBdUI7SUFEN0M7UUFFVSxhQUFRLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUE7UUFFekMsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQVl6Qzs7V0FFRztRQUNJLGFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7UUFFeEIsU0FBSSxHQUFHLE1BQU0sQ0FBZ0IsU0FBUyxDQUFDLENBQUE7S0ErQi9DO0lBekNDLElBQ1csU0FBUyxDQUFDLEtBQWM7UUFDakMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDMUIsQ0FBQztJQVNNLFFBQVE7UUFDYixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFBO0lBQzFFLENBQUM7SUFFTyxXQUFXO1FBQ2pCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUU5QyxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBaUMsQ0FBQTtRQUN6RCxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRTtZQUN4QixNQUFNLEtBQUssR0FBSSxJQUFnQyxDQUFDLElBQUksQ0FBQyxDQUFBO1lBRXJELElBQUksS0FBSyxZQUFZLFlBQVksRUFBRTtnQkFDakMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUE7YUFDMUI7U0FDRjtRQUVELE9BQU8sS0FBSyxDQUNWLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FDM0MsT0FBTyxDQUFDLElBQUksQ0FDVixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNaLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO2dCQUN0QixNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNwQixTQUFTLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUU7Z0JBQ2pDLFlBQVksRUFBRSxLQUFLO2FBQ3BCLENBQUMsQ0FBQTtRQUNKLENBQUMsQ0FBQyxDQUFDLENBQ04sQ0FDRixDQUFBO0lBQ0gsQ0FBQztJQUFBLENBQUM7K0dBbERrQix1QkFBdUI7bUdBQXZCLHVCQUF1Qjs7NEZBQXZCLHVCQUF1QjtrQkFENUMsU0FBUzs4QkFZRyxTQUFTO3NCQURuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzdHJveVJlZiwgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIGluamVjdCwgc2lnbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxuaW1wb3J0IHsgbWVyZ2UsIHRhcCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3BcIjtcbmltcG9ydCB7IENvbXBvbmVudEV2ZW50QnVzU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9jb21wb25lbnQtZXZlbnQtYnVzLnNlcnZpY2VcIjtcbmltcG9ydCB7IENvbXBvbmVudER5bmFtaWNOb2RlLCBDb21wb25lbnROb2RlIH0gZnJvbSBcIi4uLy4uL2ludGVyZmFjZXMvbm9kZS5pbnRlcmZhY2VcIjtcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ3VzdG9tTm9kZUJhc2VDb21wb25lbnQ8VCA9IHVua25vd24+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSBldmVudEJ1cyA9IGluamVjdChDb21wb25lbnRFdmVudEJ1c1NlcnZpY2UpXG5cbiAgcHJvdGVjdGVkIGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZilcblxuICAvKipcbiAgICogUmVmZXJlbmNlIHRvIG5vZGUgYm91bmQgdG8gdGhpcyBjb21wb25lbnRcbiAgICovXG4gIHByb3RlY3RlZCBub2RlITogQ29tcG9uZW50Tm9kZSB8IENvbXBvbmVudER5bmFtaWNOb2RlXG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBfc2VsZWN0ZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNlbGVjdGVkLnNldCh2YWx1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduYWwgd2l0aCBzZWxlY3RlZCBzdGF0ZSBvZiBub2RlXG4gICAqL1xuICBwdWJsaWMgc2VsZWN0ZWQgPSBzaWduYWwoZmFsc2UpXG5cbiAgcHVibGljIGRhdGEgPSBzaWduYWw8VCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnRyYWNrRXZlbnRzKCkucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKClcbiAgfVxuXG4gIHByaXZhdGUgdHJhY2tFdmVudHMoKSB7XG4gICAgY29uc3QgcHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKVxuXG4gICAgY29uc3QgZW1pdHRlcnMgPSBuZXcgTWFwPEV2ZW50RW1pdHRlcjx1bmtub3duPiwgc3RyaW5nPigpXG4gICAgZm9yIChjb25zdCBwcm9wIG9mIHByb3BzKSB7XG4gICAgICBjb25zdCBmaWVsZCA9ICh0aGlzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtwcm9wXVxuXG4gICAgICBpZiAoZmllbGQgaW5zdGFuY2VvZiBFdmVudEVtaXR0ZXIpIHtcbiAgICAgICAgZW1pdHRlcnMuc2V0KGZpZWxkLCBwcm9wKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtZXJnZShcbiAgICAgIC4uLkFycmF5LmZyb20oZW1pdHRlcnMua2V5cygpKS5tYXAoZW1pdHRlciA9PlxuICAgICAgICBlbWl0dGVyLnBpcGUoXG4gICAgICAgICAgdGFwKChldmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5ldmVudEJ1cy5wdXNoRXZlbnQoe1xuICAgICAgICAgICAgICBub2RlSWQ6IHRoaXMubm9kZS5pZCxcbiAgICAgICAgICAgICAgZXZlbnROYW1lOiBlbWl0dGVycy5nZXQoZW1pdHRlcikhLFxuICAgICAgICAgICAgICBldmVudFBheWxvYWQ6IGV2ZW50XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pKVxuICAgICAgKVxuICAgIClcbiAgfTtcbn1cblxuIl19
@@ -1,7 +1,6 @@
1
1
  import { __decorate } from "tslib";
2
- import { ChangeDetectionStrategy, Component, ElementRef, Injector, Input, ViewChild, computed, inject } from '@angular/core';
2
+ import { ChangeDetectionStrategy, Component, ElementRef, Injector, Input, ViewChild, computed, effect, inject } from '@angular/core';
3
3
  import { DraggableService } from '../../services/draggable.service';
4
- import { NodeModel } from '../../models/node.model';
5
4
  import { FlowStatusService } from '../../services/flow-status.service';
6
5
  import { HandleService } from '../../services/handle.service';
7
6
  import { resizable } from '../../utils/resizable';
@@ -36,7 +35,14 @@ export class NodeComponent {
36
35
  }
37
36
  ngOnInit() {
38
37
  this.handleService.node.set(this.nodeModel);
39
- this.draggableService.toggleDraggable(this.hostRef.nativeElement, this.nodeModel);
38
+ effect(() => {
39
+ if (this.nodeModel.draggable()) {
40
+ this.draggableService.enable(this.hostRef.nativeElement, this.nodeModel);
41
+ }
42
+ else {
43
+ this.draggableService.disable(this.hostRef.nativeElement);
44
+ }
45
+ });
40
46
  this.nodeModel.handles$
41
47
  .pipe(switchMap((handles) => resizable(handles.map(h => h.parentReference)).pipe(map(() => handles))), tap((handles) => {
42
48
  // TODO (performance) inspect how to avoid calls of this when flow initially rendered
@@ -45,12 +51,7 @@ export class NodeComponent {
45
51
  .subscribe();
46
52
  }
47
53
  ngAfterViewInit() {
48
- if (this.nodeModel.node.type === 'default') {
49
- this.nodeModel.size.set({
50
- width: this.nodeModel.node.width ?? NodeModel.defaultTypeSize.width,
51
- height: this.nodeModel.node.height ?? NodeModel.defaultTypeSize.height
52
- });
53
- }
54
+ this.nodeModel.linkDefaultNodeSizeWithModelSize();
54
55
  if (this.nodeModel.node.type === 'html-template' || this.nodeModel.isComponentType) {
55
56
  resizable([this.htmlWrapperRef.nativeElement])
56
57
  .pipe(startWith(null), tap(() => {
@@ -86,7 +87,7 @@ export class NodeComponent {
86
87
  }
87
88
  }
88
89
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NodeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
89
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NodeComponent, selector: "g[node]", inputs: { nodeModel: "nodeModel", nodeHtmlTemplate: "nodeHtmlTemplate" }, providers: [HandleService], viewQueries: [{ propertyName: "nodeContentRef", first: true, predicate: ["nodeContent"], descendants: true }, { propertyName: "htmlWrapperRef", first: true, predicate: ["htmlWrapper"], descendants: true }], ngImport: i0, template: "<svg:foreignObject\n *ngIf=\"nodeModel.node.type === 'default'\"\n class=\"selectable\"\n #nodeContent\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n (mousedown)=\"pullNode(); selectNode()\"\n>\n <div\n #htmlWrapper\n class=\"default-node\"\n [class.default-node_selected]=\"nodeModel.selected()\"\n [style.width]=\"styleWidth()\"\n [style.height]=\"styleHeight()\"\n [style.max-width]=\"styleWidth()\"\n [style.max-height]=\"styleHeight()\"\n >\n <div [outerHTML]=\"nodeModel.node.text ?? ''\"></div>\n\n <handle type=\"source\" [position]=\"nodeModel.sourcePosition()\" />\n <handle type=\"target\" [position]=\"nodeModel.targetPosition()\" />\n </div>\n</svg:foreignObject>\n\n<svg:foreignObject\n *ngIf=\"nodeModel.node.type === 'html-template' && nodeHtmlTemplate\"\n class=\"selectable\"\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n (mousedown)=\"pullNode()\"\n>\n <div #htmlWrapper class=\"wrapper\">\n <ng-container\n [ngTemplateOutlet]=\"nodeHtmlTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { node: nodeModel.node, selected: nodeModel.selected } }\"\n [ngTemplateOutletInjector]=\"injector\"\n />\n </div>\n</svg:foreignObject>\n\n<svg:foreignObject\n *ngIf=\"nodeModel.isComponentType\"\n class=\"selectable\"\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n (mousedown)=\"pullNode()\"\n>\n <div #htmlWrapper class=\"wrapper\">\n <ng-container\n [ngComponentOutlet]=\"$any(nodeModel.node.type)\"\n [ngComponentOutletInputs]=\"nodeModel.componentTypeInputs()\"\n [ngComponentOutletInjector]=\"injector\"\n />\n </div>\n</svg:foreignObject>\n\n<ng-container *ngFor=\"let handle of nodeModel.handles()\">\n <svg:circle\n *ngIf=\"!handle.template\"\n class=\"default-handle\"\n [attr.cx]=\"handle.offset().x\"\n [attr.cy]=\"handle.offset().y\"\n [attr.stroke-width]=\"handle.strokeWidth\"\n r=\"5\"\n (pointerStart)=\"startConnection($event, handle)\"\n (pointerEnd)=\"endConnection(handle)\"\n />\n\n <svg:g\n *ngIf=\"handle.template\"\n [handleSizeController]=\"handle\"\n (pointerStart)=\"startConnection($event, handle)\"\n (pointerEnd)=\"endConnection(handle)\"\n >\n <ng-container *ngTemplateOutlet=\"handle.template; context: handle.templateContext\" />\n </svg:g>\n\n <svg:circle\n *ngIf=\"showMagnet()\"\n class=\"magnet\"\n [attr.r]=\"nodeModel.magnetRadius\"\n [attr.cx]=\"handle.offset().x\"\n [attr.cy]=\"handle.offset().y\"\n (pointerEnd)=\"endConnection(handle); resetValidateConnection(handle)\"\n (pointerOver)=\"validateConnection(handle)\"\n (pointerOut)=\"resetValidateConnection(handle)\"\n />\n</ng-container>\n", styles: [".wrapper{width:max-content}.magnet{opacity:0}.default-node{border:1.5px solid #1b262c;border-radius:5px;display:flex;align-items:center;justify-content:center;color:#000;background-color:#fff}.default-node_selected{border-width:2px}.default-handle{stroke:#fff;fill:#1b262c}\n"], dependencies: [{ kind: "directive", type: i1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.HandleComponent, selector: "handle", inputs: ["position", "type", "id", "template"] }, { kind: "directive", type: i3.HandleSizeControllerDirective, selector: "[handleSizeController]", inputs: ["handleSizeController"] }, { kind: "directive", type: i4.PointerDirective, selector: "[pointerStart], [pointerEnd], [pointerOver], [pointerOut]", outputs: ["pointerOver", "pointerOut", "pointerStart", "pointerEnd"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
90
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NodeComponent, selector: "g[node]", inputs: { nodeModel: "nodeModel", nodeTemplate: "nodeTemplate", groupNodeTemplate: "groupNodeTemplate" }, providers: [HandleService], viewQueries: [{ propertyName: "nodeContentRef", first: true, predicate: ["nodeContent"], descendants: true }, { propertyName: "htmlWrapperRef", first: true, predicate: ["htmlWrapper"], descendants: true }], ngImport: i0, template: "<!-- Default node -->\n<svg:foreignObject\n *ngIf=\"nodeModel.node.type === 'default'\"\n class=\"selectable\"\n #nodeContent\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n (mousedown)=\"pullNode(); selectNode()\"\n>\n <div\n #htmlWrapper\n class=\"default-node\"\n [class.default-node_selected]=\"nodeModel.selected()\"\n [style.width]=\"styleWidth()\"\n [style.height]=\"styleHeight()\"\n [style.max-width]=\"styleWidth()\"\n [style.max-height]=\"styleHeight()\"\n >\n <div [outerHTML]=\"nodeModel.text()\"></div>\n\n <handle type=\"source\" [position]=\"nodeModel.sourcePosition()\" />\n <handle type=\"target\" [position]=\"nodeModel.targetPosition()\" />\n </div>\n</svg:foreignObject>\n\n<!-- Template node -->\n<svg:foreignObject\n *ngIf=\"nodeModel.node.type === 'html-template' && nodeTemplate\"\n class=\"selectable\"\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n (mousedown)=\"pullNode()\"\n>\n <div #htmlWrapper class=\"wrapper\">\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { node: nodeModel.node, selected: nodeModel.selected } }\"\n [ngTemplateOutletInjector]=\"injector\"\n />\n </div>\n</svg:foreignObject>\n\n<!-- Component node -->\n<svg:foreignObject\n *ngIf=\"nodeModel.isComponentType\"\n class=\"selectable\"\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n (mousedown)=\"pullNode()\"\n>\n <div #htmlWrapper class=\"wrapper\">\n <ng-container\n [ngComponentOutlet]=\"$any(nodeModel.node.type)\"\n [ngComponentOutletInputs]=\"nodeModel.componentTypeInputs()\"\n [ngComponentOutletInjector]=\"injector\"\n />\n </div>\n</svg:foreignObject>\n\n<!-- Default group node -->\n<svg:rect\n *ngIf=\"nodeModel.node.type === 'default-group'\"\n class=\"default-group-node\"\n rx=\"5\"\n ry=\"5\"\n [class.default-group-node_selected]=\"nodeModel.selected()\"\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n [style.stroke]=\"nodeModel.color()\"\n [style.fill]=\"nodeModel.color()\"\n (mousedown)=\"pullNode(); selectNode()\"\n/>\n\n<svg:g\n *ngIf=\"nodeModel.node.type === 'template-group' && groupNodeTemplate\"\n class=\"selectable\"\n (mousedown)=\"pullNode()\"\n>\n <ng-container\n [ngTemplateOutlet]=\"groupNodeTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { node: nodeModel.node, selected: nodeModel.selected } }\"\n [ngTemplateOutletInjector]=\"injector\"\n />\n</svg:g>\n\n<!-- Handles -->\n<ng-container *ngFor=\"let handle of nodeModel.handles()\">\n <svg:circle\n *ngIf=\"!handle.template\"\n class=\"default-handle\"\n [attr.cx]=\"handle.offset().x\"\n [attr.cy]=\"handle.offset().y\"\n [attr.stroke-width]=\"handle.strokeWidth\"\n r=\"5\"\n (pointerStart)=\"startConnection($event, handle)\"\n (pointerEnd)=\"endConnection(handle)\"\n />\n\n <svg:g\n *ngIf=\"handle.template\"\n [handleSizeController]=\"handle\"\n (pointerStart)=\"startConnection($event, handle)\"\n (pointerEnd)=\"endConnection(handle)\"\n >\n <ng-container *ngTemplateOutlet=\"handle.template; context: handle.templateContext\" />\n </svg:g>\n\n <svg:circle\n *ngIf=\"showMagnet()\"\n class=\"magnet\"\n [attr.r]=\"nodeModel.magnetRadius\"\n [attr.cx]=\"handle.offset().x\"\n [attr.cy]=\"handle.offset().y\"\n (pointerEnd)=\"endConnection(handle); resetValidateConnection(handle)\"\n (pointerOver)=\"validateConnection(handle)\"\n (pointerOut)=\"resetValidateConnection(handle)\"\n />\n</ng-container>\n", styles: [".wrapper{width:max-content}.magnet{opacity:0}.default-node{border:1.5px solid #1b262c;border-radius:5px;display:flex;align-items:center;justify-content:center;color:#000;background-color:#fff}.default-node_selected{border-width:2px}.default-group-node{stroke-width:1.5px;fill-opacity:.05}.default-group-node_selected{stroke-width:2px}.default-handle{stroke:#fff;fill:#1b262c}\n"], dependencies: [{ kind: "directive", type: i1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.HandleComponent, selector: "handle", inputs: ["position", "type", "id", "template"] }, { kind: "directive", type: i3.HandleSizeControllerDirective, selector: "[handleSizeController]", inputs: ["handleSizeController"] }, { kind: "directive", type: i4.PointerDirective, selector: "[pointerStart], [pointerEnd], [pointerOver], [pointerOut]", outputs: ["pointerOver", "pointerOut", "pointerStart", "pointerEnd"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
90
91
  }
91
92
  __decorate([
92
93
  InjectionContext
@@ -98,10 +99,12 @@ __decorate([
98
99
  ], NodeComponent.prototype, "ngAfterViewInit", null);
99
100
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NodeComponent, decorators: [{
100
101
  type: Component,
101
- args: [{ selector: 'g[node]', changeDetection: ChangeDetectionStrategy.OnPush, providers: [HandleService], template: "<svg:foreignObject\n *ngIf=\"nodeModel.node.type === 'default'\"\n class=\"selectable\"\n #nodeContent\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n (mousedown)=\"pullNode(); selectNode()\"\n>\n <div\n #htmlWrapper\n class=\"default-node\"\n [class.default-node_selected]=\"nodeModel.selected()\"\n [style.width]=\"styleWidth()\"\n [style.height]=\"styleHeight()\"\n [style.max-width]=\"styleWidth()\"\n [style.max-height]=\"styleHeight()\"\n >\n <div [outerHTML]=\"nodeModel.node.text ?? ''\"></div>\n\n <handle type=\"source\" [position]=\"nodeModel.sourcePosition()\" />\n <handle type=\"target\" [position]=\"nodeModel.targetPosition()\" />\n </div>\n</svg:foreignObject>\n\n<svg:foreignObject\n *ngIf=\"nodeModel.node.type === 'html-template' && nodeHtmlTemplate\"\n class=\"selectable\"\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n (mousedown)=\"pullNode()\"\n>\n <div #htmlWrapper class=\"wrapper\">\n <ng-container\n [ngTemplateOutlet]=\"nodeHtmlTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { node: nodeModel.node, selected: nodeModel.selected } }\"\n [ngTemplateOutletInjector]=\"injector\"\n />\n </div>\n</svg:foreignObject>\n\n<svg:foreignObject\n *ngIf=\"nodeModel.isComponentType\"\n class=\"selectable\"\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n (mousedown)=\"pullNode()\"\n>\n <div #htmlWrapper class=\"wrapper\">\n <ng-container\n [ngComponentOutlet]=\"$any(nodeModel.node.type)\"\n [ngComponentOutletInputs]=\"nodeModel.componentTypeInputs()\"\n [ngComponentOutletInjector]=\"injector\"\n />\n </div>\n</svg:foreignObject>\n\n<ng-container *ngFor=\"let handle of nodeModel.handles()\">\n <svg:circle\n *ngIf=\"!handle.template\"\n class=\"default-handle\"\n [attr.cx]=\"handle.offset().x\"\n [attr.cy]=\"handle.offset().y\"\n [attr.stroke-width]=\"handle.strokeWidth\"\n r=\"5\"\n (pointerStart)=\"startConnection($event, handle)\"\n (pointerEnd)=\"endConnection(handle)\"\n />\n\n <svg:g\n *ngIf=\"handle.template\"\n [handleSizeController]=\"handle\"\n (pointerStart)=\"startConnection($event, handle)\"\n (pointerEnd)=\"endConnection(handle)\"\n >\n <ng-container *ngTemplateOutlet=\"handle.template; context: handle.templateContext\" />\n </svg:g>\n\n <svg:circle\n *ngIf=\"showMagnet()\"\n class=\"magnet\"\n [attr.r]=\"nodeModel.magnetRadius\"\n [attr.cx]=\"handle.offset().x\"\n [attr.cy]=\"handle.offset().y\"\n (pointerEnd)=\"endConnection(handle); resetValidateConnection(handle)\"\n (pointerOver)=\"validateConnection(handle)\"\n (pointerOut)=\"resetValidateConnection(handle)\"\n />\n</ng-container>\n", styles: [".wrapper{width:max-content}.magnet{opacity:0}.default-node{border:1.5px solid #1b262c;border-radius:5px;display:flex;align-items:center;justify-content:center;color:#000;background-color:#fff}.default-node_selected{border-width:2px}.default-handle{stroke:#fff;fill:#1b262c}\n"] }]
102
+ args: [{ selector: 'g[node]', changeDetection: ChangeDetectionStrategy.OnPush, providers: [HandleService], template: "<!-- Default node -->\n<svg:foreignObject\n *ngIf=\"nodeModel.node.type === 'default'\"\n class=\"selectable\"\n #nodeContent\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n (mousedown)=\"pullNode(); selectNode()\"\n>\n <div\n #htmlWrapper\n class=\"default-node\"\n [class.default-node_selected]=\"nodeModel.selected()\"\n [style.width]=\"styleWidth()\"\n [style.height]=\"styleHeight()\"\n [style.max-width]=\"styleWidth()\"\n [style.max-height]=\"styleHeight()\"\n >\n <div [outerHTML]=\"nodeModel.text()\"></div>\n\n <handle type=\"source\" [position]=\"nodeModel.sourcePosition()\" />\n <handle type=\"target\" [position]=\"nodeModel.targetPosition()\" />\n </div>\n</svg:foreignObject>\n\n<!-- Template node -->\n<svg:foreignObject\n *ngIf=\"nodeModel.node.type === 'html-template' && nodeTemplate\"\n class=\"selectable\"\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n (mousedown)=\"pullNode()\"\n>\n <div #htmlWrapper class=\"wrapper\">\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { node: nodeModel.node, selected: nodeModel.selected } }\"\n [ngTemplateOutletInjector]=\"injector\"\n />\n </div>\n</svg:foreignObject>\n\n<!-- Component node -->\n<svg:foreignObject\n *ngIf=\"nodeModel.isComponentType\"\n class=\"selectable\"\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n (mousedown)=\"pullNode()\"\n>\n <div #htmlWrapper class=\"wrapper\">\n <ng-container\n [ngComponentOutlet]=\"$any(nodeModel.node.type)\"\n [ngComponentOutletInputs]=\"nodeModel.componentTypeInputs()\"\n [ngComponentOutletInjector]=\"injector\"\n />\n </div>\n</svg:foreignObject>\n\n<!-- Default group node -->\n<svg:rect\n *ngIf=\"nodeModel.node.type === 'default-group'\"\n class=\"default-group-node\"\n rx=\"5\"\n ry=\"5\"\n [class.default-group-node_selected]=\"nodeModel.selected()\"\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n [style.stroke]=\"nodeModel.color()\"\n [style.fill]=\"nodeModel.color()\"\n (mousedown)=\"pullNode(); selectNode()\"\n/>\n\n<svg:g\n *ngIf=\"nodeModel.node.type === 'template-group' && groupNodeTemplate\"\n class=\"selectable\"\n (mousedown)=\"pullNode()\"\n>\n <ng-container\n [ngTemplateOutlet]=\"groupNodeTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { node: nodeModel.node, selected: nodeModel.selected } }\"\n [ngTemplateOutletInjector]=\"injector\"\n />\n</svg:g>\n\n<!-- Handles -->\n<ng-container *ngFor=\"let handle of nodeModel.handles()\">\n <svg:circle\n *ngIf=\"!handle.template\"\n class=\"default-handle\"\n [attr.cx]=\"handle.offset().x\"\n [attr.cy]=\"handle.offset().y\"\n [attr.stroke-width]=\"handle.strokeWidth\"\n r=\"5\"\n (pointerStart)=\"startConnection($event, handle)\"\n (pointerEnd)=\"endConnection(handle)\"\n />\n\n <svg:g\n *ngIf=\"handle.template\"\n [handleSizeController]=\"handle\"\n (pointerStart)=\"startConnection($event, handle)\"\n (pointerEnd)=\"endConnection(handle)\"\n >\n <ng-container *ngTemplateOutlet=\"handle.template; context: handle.templateContext\" />\n </svg:g>\n\n <svg:circle\n *ngIf=\"showMagnet()\"\n class=\"magnet\"\n [attr.r]=\"nodeModel.magnetRadius\"\n [attr.cx]=\"handle.offset().x\"\n [attr.cy]=\"handle.offset().y\"\n (pointerEnd)=\"endConnection(handle); resetValidateConnection(handle)\"\n (pointerOver)=\"validateConnection(handle)\"\n (pointerOut)=\"resetValidateConnection(handle)\"\n />\n</ng-container>\n", styles: [".wrapper{width:max-content}.magnet{opacity:0}.default-node{border:1.5px solid #1b262c;border-radius:5px;display:flex;align-items:center;justify-content:center;color:#000;background-color:#fff}.default-node_selected{border-width:2px}.default-group-node{stroke-width:1.5px;fill-opacity:.05}.default-group-node_selected{stroke-width:2px}.default-handle{stroke:#fff;fill:#1b262c}\n"] }]
102
103
  }], propDecorators: { nodeModel: [{
103
104
  type: Input
104
- }], nodeHtmlTemplate: [{
105
+ }], nodeTemplate: [{
106
+ type: Input
107
+ }], groupNodeTemplate: [{
105
108
  type: Input
106
109
  }], nodeContentRef: [{
107
110
  type: ViewChild,
@@ -110,4 +113,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
110
113
  type: ViewChild,
111
114
  args: ['htmlWrapper']
112
115
  }], ngOnInit: [], ngAfterViewInit: [] } });
113
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvY29tcG9uZW50cy9ub2RlL25vZGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvbm9kZS9ub2RlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBa0MsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUssT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDcEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUU5RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQWdCLE1BQU0scURBQXFELENBQUM7QUFDckcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtD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Q0FBQyxNQUFtQjtRQUN6QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2pELENBQUM7SUFFUyxRQUFRO1FBQ2hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ3BELENBQUM7SUFFUyxVQUFVO1FBQ2xCLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixFQUFFLEVBQUU7WUFDakQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7U0FDN0M7SUFDSCxDQUFDOytHQTVHVSxhQUFhO21HQUFiLGFBQWEsNEdBRmIsQ0FBQyxhQUFhLENBQUMseU9DdkI1QixzeEZBd0ZBOztBRDlCUztJQUROLGdCQUFnQjs2Q0FrQmhCO0FBSU07SUFGTixTQUFTLENBQUMscURBQXFEOztJQUMvRCxnQkFBZ0I7b0RBc0JoQjs0RkEzRVUsYUFBYTtrQkFQekIsU0FBUzsrQkFDRSxTQUFTLG1CQUdGLHVCQUF1QixDQUFDLE1BQU0sYUFDcEMsQ0FBQyxhQUFhLENBQUM7OEJBY25CLFNBQVM7c0JBRGYsS0FBSztnQkFJQyxnQkFBZ0I7c0JBRHRCLEtBQUs7Z0JBSUMsY0FBYztzQkFEcEIsU0FBUzt1QkFBQyxhQUFhO2dCQUlqQixjQUFjO3NCQURwQixTQUFTO3VCQUFDLGFBQWE7Z0JBYWpCLFFBQVEsTUFxQlIsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIGNvbXB1dGVkLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERyYWdnYWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kcmFnZ2FibGUuc2VydmljZSc7XG5pbXBvcnQgeyBOb2RlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvbm9kZS5tb2RlbCc7XG5pbXBvcnQgeyBGbG93U3RhdHVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zsb3ctc3RhdHVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgSGFuZGxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2hhbmRsZS5zZXJ2aWNlJztcbmltcG9ydCB7IEhhbmRsZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2hhbmRsZS5tb2RlbCc7XG5pbXBvcnQgeyByZXNpemFibGUgfSBmcm9tICcuLi8uLi91dGlscy9yZXNpemFibGUnO1xuaW1wb3J0IHsgbWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJbmplY3Rpb25Db250ZXh0LCBXaXRoSW5qZWN0b3IgfSBmcm9tICcuLi8uLi9kZWNvcmF0b3JzL3J1bi1pbi1pbmplY3Rpb24tY29udGV4dC5kZWNvcmF0b3InO1xuaW1wb3J0IHsgTWljcm90YXNrIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9ycy9taWNyb3Rhc2suZGVjb3JhdG9yJztcbmltcG9ydCB7IE5vZGVSZW5kZXJpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm9kZS1yZW5kZXJpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBGbG93U2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmxvdy1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7IFNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWxlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBDb25uZWN0aW9uQ29udHJvbGxlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvY29ubmVjdGlvbi1jb250cm9sbGVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbmV4cG9ydCB0eXBlIEhhbmRsZVN0YXRlID0gJ3ZhbGlkJyB8ICdpbnZhbGlkJyB8ICdpZGxlJ1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnW25vZGVdJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25vZGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ub2RlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtIYW5kbGVTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBOb2RlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIFdpdGhJbmplY3RvciB7XG4gIHB1YmxpYyBpbmplY3RvciA9IGluamVjdChJbmplY3RvcilcbiAgcHJpdmF0ZSBoYW5kbGVTZXJ2aWNlID0gaW5qZWN0KEhhbmRsZVNlcnZpY2UpXG4gIHByaXZhdGUgZHJhZ2dhYmxlU2VydmljZSA9IGluamVjdChEcmFnZ2FibGVTZXJ2aWNlKVxuICBwcml2YXRlIGZsb3dTdGF0dXNTZXJ2aWNlID0gaW5qZWN0KEZsb3dTdGF0dXNTZXJ2aWNlKVxuICBwcml2YXRlIG5vZGVSZW5kZXJpbmdTZXJ2aWNlID0gaW5qZWN0KE5vZGVSZW5kZXJpbmdTZXJ2aWNlKVxuICBwcml2YXRlIGZsb3dTZXR0aW5nc1NlcnZpY2UgPSBpbmplY3QoRmxvd1NldHRpbmdzU2VydmljZSlcbiAgcHJpdmF0ZSBzZWxlY3Rpb25TZXJ2aWNlID0gaW5qZWN0KFNlbGVjdGlvblNlcnZpY2UpXG4gIHByaXZhdGUgaG9zdFJlZiA9IGluamVjdDxFbGVtZW50UmVmPFNWR0VsZW1lbnQ+PihFbGVtZW50UmVmKVxuICBwcml2YXRlIGNvbm5lY3Rpb25Db250cm9sbGVyID0gaW5qZWN0KENvbm5lY3Rpb25Db250cm9sbGVyRGlyZWN0aXZlKVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBub2RlTW9kZWwhOiBOb2RlTW9kZWxcblxuICBASW5wdXQoKVxuICBwdWJsaWMgbm9kZUh0bWxUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT5cblxuICBAVmlld0NoaWxkKCdub2RlQ29udGVudCcpXG4gIHB1YmxpYyBub2RlQ29udGVudFJlZiE6IEVsZW1lbnRSZWY8U1ZHR3JhcGhpY3NFbGVtZW50PlxuXG4gIEBWaWV3Q2hpbGQoJ2h0bWxXcmFwcGVyJylcbiAgcHVibGljIGh0bWxXcmFwcGVyUmVmITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD5cblxuICBwcm90ZWN0ZWQgc2hvd01hZ25ldCA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy5mbG93U3RhdHVzU2VydmljZS5zdGF0dXMoKS5zdGF0ZSA9PT0gJ2Nvbm5lY3Rpb24tc3RhcnQnIHx8XG4gICAgdGhpcy5mbG93U3RhdHVzU2VydmljZS5zdGF0dXMoKS5zdGF0ZSA9PT0gJ2Nvbm5lY3Rpb24tdmFsaWRhdGlvbidcbiAgKVxuXG4gIHByb3RlY3RlZCBzdHlsZVdpZHRoID0gY29tcHV0ZWQoKCkgPT4gYCR7dGhpcy5ub2RlTW9kZWwuc2l6ZSgpLndpZHRofXB4YClcblxuICBwcm90ZWN0ZWQgc3R5bGVIZWlnaHQgPSBjb21wdXRlZCgoKSA9PiBgJHt0aGlzLm5vZGVNb2RlbC5zaXplKCkuaGVpZ2h0fXB4YClcblxuICBASW5qZWN0aW9uQ29udGV4dFxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5oYW5kbGVTZXJ2aWNlLm5vZGUuc2V0KHRoaXMubm9kZU1vZGVsKTtcblxuICAgIHRoaXMuZHJhZ2dhYmxlU2VydmljZS50b2dnbGVEcmFnZ2FibGUodGhpcy5ob3N0UmVmLm5hdGl2ZUVsZW1lbnQsIHRoaXMubm9kZU1vZGVsKVxuXG4gICAgdGhpcy5ub2RlTW9kZWwuaGFuZGxlcyRcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKGhhbmRsZXMpID0+XG4gICAgICAgICAgcmVzaXphYmxlKGhhbmRsZXMubWFwKGggPT4gaC5wYXJlbnRSZWZlcmVuY2UhKSkucGlwZShtYXAoKCkgPT4gaGFuZGxlcykpXG4gICAgICAgICksXG4gICAgICAgIHRhcCgoaGFuZGxlcykgPT4ge1xuICAgICAgICAgIC8vIFRPRE8gKHBlcmZvcm1hbmNlKSBpbnNwZWN0IGhvdyB0byBhdm9pZCBjYWxscyBvZiB0aGlzIHdoZW4gZmxvdyBpbml0aWFsbHkgcmVuZGVyZWRcbiAgICAgICAgICBoYW5kbGVzLmZvckVhY2goaCA9PiBoLnVwZGF0ZVBhcmVudCgpKVxuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKVxuICB9XG5cbiAgQE1pY3JvdGFzayAvLyBUT0RPIChwZXJmb3JtYW5jZSkgY2hlY2sgaWYgd2UgbmVlZCBtaWNyb3Rhc2sgaGVyZVxuICBASW5qZWN0aW9uQ29udGV4dFxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm5vZGVNb2RlbC5ub2RlLnR5cGUgPT09ICdkZWZhdWx0Jykge1xuICAgICAgdGhpcy5ub2RlTW9kZWwuc2l6ZS5zZXQoe1xuICAgICAgICB3aWR0aDogdGhpcy5ub2RlTW9kZWwubm9kZS53aWR0aCA/PyBOb2RlTW9kZWwuZGVmYXVsdFR5cGVTaXplLndpZHRoLFxuICAgICAgICBoZWlnaHQ6IHRoaXMubm9kZU1vZGVsLm5vZGUuaGVpZ2h0ID8/IE5vZGVNb2RlbC5kZWZhdWx0VHlwZVNpemUuaGVpZ2h0XG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0aGlzLm5vZGVNb2RlbC5ub2RlLnR5cGUgPT09ICdodG1sLXRlbXBsYXRlJyB8fCB0aGlzLm5vZGVNb2RlbC5pc0NvbXBvbmVudFR5cGUpIHtcbiAgICAgIHJlc2l6YWJsZShbdGhpcy5odG1sV3JhcHBlclJlZi5uYXRpdmVFbGVtZW50XSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgc3RhcnRXaXRoKG51bGwpLFxuICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMuaHRtbFdyYXBwZXJSZWYubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aFxuICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5odG1sV3JhcHBlclJlZi5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodFxuXG4gICAgICAgICAgICB0aGlzLm5vZGVNb2RlbC5zaXplLnNldCh7IHdpZHRoLCBoZWlnaHQgfSlcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKVxuICAgICAgICApLnN1YnNjcmliZSgpXG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZHJhZ2dhYmxlU2VydmljZS5kZXN0cm95KHRoaXMuaG9zdFJlZi5uYXRpdmVFbGVtZW50KVxuICB9XG5cbiAgcHJvdGVjdGVkIHN0YXJ0Q29ubmVjdGlvbihldmVudDogRXZlbnQsIGhhbmRsZTogSGFuZGxlTW9kZWwpIHtcbiAgICAvLyBpZ25vcmUgZHJhZyBieSBzdG9wcGluZyBwcm9wYWdhdGlvblxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG5cbiAgICB0aGlzLmNvbm5lY3Rpb25Db250cm9sbGVyLnN0YXJ0Q29ubmVjdGlvbihoYW5kbGUpXG4gIH1cblxuICBwcm90ZWN0ZWQgdmFsaWRhdGVDb25uZWN0aW9uKGhhbmRsZTogSGFuZGxlTW9kZWwpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25Db250cm9sbGVyLnZhbGlkYXRlQ29ubmVjdGlvbihoYW5kbGUpXG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzZXRWYWxpZGF0ZUNvbm5lY3Rpb24odGFyZ2V0SGFuZGxlOiBIYW5kbGVNb2RlbCkge1xuICAgIHRoaXMuY29ubmVjdGlvbkNvbnRyb2xsZXIucmVzZXRWYWxpZGF0ZUNvbm5lY3Rpb24odGFyZ2V0SGFuZGxlKVxuICB9XG5cbiAgcHJvdGVjdGVkIGVuZENvbm5lY3Rpb24oaGFuZGxlOiBIYW5kbGVNb2RlbCkge1xuICAgIHRoaXMuY29ubmVjdGlvbkNvbnRyb2xsZXIuZW5kQ29ubmVjdGlvbihoYW5kbGUpXG4gIH1cblxuICBwcm90ZWN0ZWQgcHVsbE5vZGUoKSB7XG4gICAgdGhpcy5ub2RlUmVuZGVyaW5nU2VydmljZS5wdWxsTm9kZSh0aGlzLm5vZGVNb2RlbClcbiAgfVxuXG4gIHByb3RlY3RlZCBzZWxlY3ROb2RlKCkge1xuICAgIGlmICh0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UuZW50aXRpZXNTZWxlY3RhYmxlKCkpIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3QodGhpcy5ub2RlTW9kZWwpXG4gICAgfVxuICB9XG59XG4iLCI8c3ZnOmZvcmVpZ25PYmplY3RcbiAgKm5nSWY9XCJub2RlTW9kZWwubm9kZS50eXBlID09PSAnZGVmYXVsdCdcIlxuICBjbGFzcz1cInNlbGVjdGFibGVcIlxuICAjbm9kZUNvbnRlbnRcbiAgW2F0dHIud2lkdGhdPVwibm9kZU1vZGVsLnNpemUoKS53aWR0aFwiXG4gIFthdHRyLmhlaWdodF09XCJub2RlTW9kZWwuc2l6ZSgpLmhlaWdodFwiXG4gIChtb3VzZWRvd24pPVwicHVsbE5vZGUoKTsgc2VsZWN0Tm9kZSgpXCJcbj5cbiAgPGRpdlxuICAgICNodG1sV3JhcHBlclxuICAgIGNsYXNzPVwiZGVmYXVsdC1ub2RlXCJcbiAgICBbY2xhc3MuZGVmYXVsdC1ub2RlX3NlbGVjdGVkXT1cIm5vZGVNb2RlbC5zZWxlY3RlZCgpXCJcbiAgICBbc3R5bGUud2lkdGhdPVwic3R5bGVXaWR0aCgpXCJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cInN0eWxlSGVpZ2h0KClcIlxuICAgIFtzdHlsZS5tYXgtd2lkdGhdPVwic3R5bGVXaWR0aCgpXCJcbiAgICBbc3R5bGUubWF4LWhlaWdodF09XCJzdHlsZUhlaWdodCgpXCJcbiAgPlxuICAgIDxkaXYgW291dGVySFRNTF09XCJub2RlTW9kZWwubm9kZS50ZXh0ID8/ICcnXCI+PC9kaXY+XG5cbiAgICA8aGFuZGxlIHR5cGU9XCJzb3VyY2VcIiBbcG9zaXRpb25dPVwibm9kZU1vZGVsLnNvdXJjZVBvc2l0aW9uKClcIiAvPlxuICAgIDxoYW5kbGUgdHlwZT1cInRhcmdldFwiIFtwb3NpdGlvbl09XCJub2RlTW9kZWwudGFyZ2V0UG9zaXRpb24oKVwiIC8+XG4gIDwvZGl2PlxuPC9zdmc6Zm9yZWlnbk9iamVjdD5cblxuPHN2Zzpmb3JlaWduT2JqZWN0XG4gICpuZ0lmPVwibm9kZU1vZGVsLm5vZGUudHlwZSA9PT0gJ2h0bWwtdGVtcGxhdGUnICYmIG5vZGVIdG1sVGVtcGxhdGVcIlxuICBjbGFzcz1cInNlbGVjdGFibGVcIlxuICBbYXR0ci53aWR0aF09XCJub2RlTW9kZWwuc2l6ZSgpLndpZHRoXCJcbiAgW2F0dHIuaGVpZ2h0XT1cIm5vZGVNb2RlbC5zaXplKCkuaGVpZ2h0XCJcbiAgKG1vdXNlZG93bik9XCJwdWxsTm9kZSgpXCJcbj5cbiAgPGRpdiAjaHRtbFdyYXBwZXIgY2xhc3M9XCJ3cmFwcGVyXCI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZUh0bWxUZW1wbGF0ZVwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IHsgbm9kZTogbm9kZU1vZGVsLm5vZGUsIHNlbGVjdGVkOiBub2RlTW9kZWwuc2VsZWN0ZWQgfSB9XCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3JdPVwiaW5qZWN0b3JcIlxuICAgIC8+XG4gIDwvZGl2PlxuPC9zdmc6Zm9yZWlnbk9iamVjdD5cblxuPHN2Zzpmb3JlaWduT2JqZWN0XG4gICpuZ0lmPVwibm9kZU1vZGVsLmlzQ29tcG9uZW50VHlwZVwiXG4gIGNsYXNzPVwic2VsZWN0YWJsZVwiXG4gIFthdHRyLndpZHRoXT1cIm5vZGVNb2RlbC5zaXplKCkud2lkdGhcIlxuICBbYXR0ci5oZWlnaHRdPVwibm9kZU1vZGVsLnNpemUoKS5oZWlnaHRcIlxuICAobW91c2Vkb3duKT1cInB1bGxOb2RlKClcIlxuPlxuICA8ZGl2ICNodG1sV3JhcHBlciBjbGFzcz1cIndyYXBwZXJcIj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICBbbmdDb21wb25lbnRPdXRsZXRdPVwiJGFueShub2RlTW9kZWwubm9kZS50eXBlKVwiXG4gICAgICBbbmdDb21wb25lbnRPdXRsZXRJbnB1dHNdPVwibm9kZU1vZGVsLmNvbXBvbmVudFR5cGVJbnB1dHMoKVwiXG4gICAgICBbbmdDb21wb25lbnRPdXRsZXRJbmplY3Rvcl09XCJpbmplY3RvclwiXG4gICAgLz5cbiAgPC9kaXY+XG48L3N2Zzpmb3JlaWduT2JqZWN0PlxuXG48bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBoYW5kbGUgb2Ygbm9kZU1vZGVsLmhhbmRsZXMoKVwiPlxuICA8c3ZnOmNpcmNsZVxuICAgICpuZ0lmPVwiIWhhbmRsZS50ZW1wbGF0ZVwiXG4gICAgY2xhc3M9XCJkZWZhdWx0LWhhbmRsZVwiXG4gICAgW2F0dHIuY3hdPVwiaGFuZGxlLm9mZnNldCgpLnhcIlxuICAgIFthdHRyLmN5XT1cImhhbmRsZS5vZmZzZXQoKS55XCJcbiAgICBbYXR0ci5zdHJva2Utd2lkdGhdPVwiaGFuZGxlLnN0cm9rZVdpZHRoXCJcbiAgICByPVwiNVwiXG4gICAgKHBvaW50ZXJTdGFydCk9XCJzdGFydENvbm5lY3Rpb24oJGV2ZW50LCBoYW5kbGUpXCJcbiAgICAocG9pbnRlckVuZCk9XCJlbmRDb25uZWN0aW9uKGhhbmRsZSlcIlxuICAvPlxuXG4gIDxzdmc6Z1xuICAgICpuZ0lmPVwiaGFuZGxlLnRlbXBsYXRlXCJcbiAgICBbaGFuZGxlU2l6ZUNvbnRyb2xsZXJdPVwiaGFuZGxlXCJcbiAgICAocG9pbnRlclN0YXJ0KT1cInN0YXJ0Q29ubmVjdGlvbigkZXZlbnQsIGhhbmRsZSlcIlxuICAgIChwb2ludGVyRW5kKT1cImVuZENvbm5lY3Rpb24oaGFuZGxlKVwiXG4gID5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGFuZGxlLnRlbXBsYXRlOyBjb250ZXh0OiBoYW5kbGUudGVtcGxhdGVDb250ZXh0XCIgLz5cbiAgPC9zdmc6Zz5cblxuICA8c3ZnOmNpcmNsZVxuICAgICpuZ0lmPVwic2hvd01hZ25ldCgpXCJcbiAgICBjbGFzcz1cIm1hZ25ldFwiXG4gICAgW2F0dHIucl09XCJub2RlTW9kZWwubWFnbmV0UmFkaXVzXCJcbiAgICBbYXR0ci5jeF09XCJoYW5kbGUub2Zmc2V0KCkueFwiXG4gICAgW2F0dHIuY3ldPVwiaGFuZGxlLm9mZnNldCgpLnlcIlxuICAgIChwb2ludGVyRW5kKT1cImVuZENvbm5lY3Rpb24oaGFuZGxlKTsgcmVzZXRWYWxpZGF0ZUNvbm5lY3Rpb24oaGFuZGxlKVwiXG4gICAgKHBvaW50ZXJPdmVyKT1cInZhbGlkYXRlQ29ubmVjdGlvbihoYW5kbGUpXCJcbiAgICAocG9pbnRlck91dCk9XCJyZXNldFZhbGlkYXRlQ29ubmVjdGlvbihoYW5kbGUpXCJcbiAgLz5cbjwvbmctY29udGFpbmVyPlxuIl19
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvY29tcG9uZW50cy9ub2RlL25vZGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvbm9kZS9ub2RlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBa0MsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BMLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXBFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUU5RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQWdCLE1BQU0scURBQXFELENBQUM7QUFDckcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSw2QkFBNkIs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QUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUNwRCxDQUFDO0lBRVMsVUFBVTtRQUNsQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFO1lBQ2pELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1NBQzdDO0lBQ0gsQ0FBQzsrR0FoSFUsYUFBYTttR0FBYixhQUFhLDRJQUZiLENBQUMsYUFBYSxDQUFDLHlPQ3ZCNUIsK25IQXNIQTs7QUR6RFM7SUFETixnQkFBZ0I7NkNBd0JoQjtBQUlNO0lBRk4sU0FBUyxDQUFDLHFEQUFxRDs7SUFDL0QsZ0JBQWdCO29EQWlCaEI7NEZBL0VVLGFBQWE7a0JBUHpCLFNBQVM7K0JBQ0UsU0FBUyxtQkFHRix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDLENBQUMsYUFBYSxDQUFDOzhCQWNuQixTQUFTO3NCQURmLEtBQUs7Z0JBSUMsWUFBWTtzQkFEbEIsS0FBSztnQkFJQyxpQkFBaUI7c0JBRHZCLEtBQUs7Z0JBSUMsY0FBYztzQkFEcEIsU0FBUzt1QkFBQyxhQUFhO2dCQUlqQixjQUFjO3NCQURwQixTQUFTO3VCQUFDLGFBQWE7Z0JBYWpCLFFBQVEsTUEyQlIsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRHJhZ2dhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RyYWdnYWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5vZGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9ub2RlLm1vZGVsJztcbmltcG9ydCB7IEZsb3dTdGF0dXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmxvdy1zdGF0dXMuc2VydmljZSc7XG5pbXBvcnQgeyBIYW5kbGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaGFuZGxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgSGFuZGxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvaGFuZGxlLm1vZGVsJztcbmltcG9ydCB7IHJlc2l6YWJsZSB9IGZyb20gJy4uLy4uL3V0aWxzL3Jlc2l6YWJsZSc7XG5pbXBvcnQgeyBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEluamVjdGlvbkNvbnRleHQsIFdpdGhJbmplY3RvciB9IGZyb20gJy4uLy4uL2RlY29yYXRvcnMvcnVuLWluLWluamVjdGlvbi1jb250ZXh0LmRlY29yYXRvcic7XG5pbXBvcnQgeyBNaWNyb3Rhc2sgfSBmcm9tICcuLi8uLi9kZWNvcmF0b3JzL21pY3JvdGFzay5kZWNvcmF0b3InO1xuaW1wb3J0IHsgTm9kZVJlbmRlcmluZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub2RlLXJlbmRlcmluZy5zZXJ2aWNlJztcbmltcG9ydCB7IEZsb3dTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mbG93LXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VsZWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IENvbm5lY3Rpb25Db250cm9sbGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9jb25uZWN0aW9uLWNvbnRyb2xsZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuZXhwb3J0IHR5cGUgSGFuZGxlU3RhdGUgPSAndmFsaWQnIHwgJ2ludmFsaWQnIHwgJ2lkbGUnXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2dbbm9kZV0nLFxuICB0ZW1wbGF0ZVVybDogJy4vbm9kZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL25vZGUuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW0hhbmRsZVNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIE5vZGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgV2l0aEluamVjdG9yIHtcbiAgcHVibGljIGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKVxuICBwcml2YXRlIGhhbmRsZVNlcnZpY2UgPSBpbmplY3QoSGFuZGxlU2VydmljZSlcbiAgcHJpdmF0ZSBkcmFnZ2FibGVTZXJ2aWNlID0gaW5qZWN0KERyYWdnYWJsZVNlcnZpY2UpXG4gIHByaXZhdGUgZmxvd1N0YXR1c1NlcnZpY2UgPSBpbmplY3QoRmxvd1N0YXR1c1NlcnZpY2UpXG4gIHByaXZhdGUgbm9kZVJlbmRlcmluZ1NlcnZpY2UgPSBpbmplY3QoTm9kZVJlbmRlcmluZ1NlcnZpY2UpXG4gIHByaXZhdGUgZmxvd1NldHRpbmdzU2VydmljZSA9IGluamVjdChGbG93U2V0dGluZ3NTZXJ2aWNlKVxuICBwcml2YXRlIHNlbGVjdGlvblNlcnZpY2UgPSBpbmplY3QoU2VsZWN0aW9uU2VydmljZSlcbiAgcHJpdmF0ZSBob3N0UmVmID0gaW5qZWN0PEVsZW1lbnRSZWY8U1ZHRWxlbWVudD4+KEVsZW1lbnRSZWYpXG4gIHByaXZhdGUgY29ubmVjdGlvbkNvbnRyb2xsZXIgPSBpbmplY3QoQ29ubmVjdGlvbkNvbnRyb2xsZXJEaXJlY3RpdmUpXG5cbiAgQElucHV0KClcbiAgcHVibGljIG5vZGVNb2RlbCE6IE5vZGVNb2RlbFxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBub2RlVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+XG5cbiAgQElucHV0KClcbiAgcHVibGljIGdyb3VwTm9kZVRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PlxuXG4gIEBWaWV3Q2hpbGQoJ25vZGVDb250ZW50JylcbiAgcHVibGljIG5vZGVDb250ZW50UmVmITogRWxlbWVudFJlZjxTVkdHcmFwaGljc0VsZW1lbnQ+XG5cbiAgQFZpZXdDaGlsZCgnaHRtbFdyYXBwZXInKVxuICBwdWJsaWMgaHRtbFdyYXBwZXJSZWYhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PlxuXG4gIHByb3RlY3RlZCBzaG93TWFnbmV0ID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLmZsb3dTdGF0dXNTZXJ2aWNlLnN0YXR1cygpLnN0YXRlID09PSAnY29ubmVjdGlvbi1zdGFydCcgfHxcbiAgICB0aGlzLmZsb3dTdGF0dXNTZXJ2aWNlLnN0YXR1cygpLnN0YXRlID09PSAnY29ubmVjdGlvbi12YWxpZGF0aW9uJ1xuICApXG5cbiAgcHJvdGVjdGVkIHN0eWxlV2lkdGggPSBjb21wdXRlZCgoKSA9PiBgJHt0aGlzLm5vZGVNb2RlbC5zaXplKCkud2lkdGh9cHhgKVxuXG4gIHByb3RlY3RlZCBzdHlsZUhlaWdodCA9IGNvbXB1dGVkKCgpID0+IGAke3RoaXMubm9kZU1vZGVsLnNpemUoKS5oZWlnaHR9cHhgKVxuXG4gIEBJbmplY3Rpb25Db250ZXh0XG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmhhbmRsZVNlcnZpY2Uubm9kZS5zZXQodGhpcy5ub2RlTW9kZWwpO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLm5vZGVNb2RlbC5kcmFnZ2FibGUoKSkge1xuICAgICAgICB0aGlzLmRyYWdnYWJsZVNlcnZpY2UuZW5hYmxlKHRoaXMuaG9zdFJlZi5uYXRpdmVFbGVtZW50LCB0aGlzLm5vZGVNb2RlbClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZHJhZ2dhYmxlU2VydmljZS5kaXNhYmxlKHRoaXMuaG9zdFJlZi5uYXRpdmVFbGVtZW50KVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzLm5vZGVNb2RlbC5oYW5kbGVzJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoaGFuZGxlcykgPT5cbiAgICAgICAgICByZXNpemFibGUoaGFuZGxlcy5tYXAoaCA9PiBoLnBhcmVudFJlZmVyZW5jZSEpKS5waXBlKG1hcCgoKSA9PiBoYW5kbGVzKSlcbiAgICAgICAgKSxcbiAgICAgICAgdGFwKChoYW5kbGVzKSA9PiB7XG4gICAgICAgICAgLy8gVE9ETyAocGVyZm9ybWFuY2UpIGluc3BlY3QgaG93IHRvIGF2b2lkIGNhbGxzIG9mIHRoaXMgd2hlbiBmbG93IGluaXRpYWxseSByZW5kZXJlZFxuICAgICAgICAgIGhhbmRsZXMuZm9yRWFjaChoID0+IGgudXBkYXRlUGFyZW50KCkpXG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpXG4gIH1cblxuICBATWljcm90YXNrIC8vIFRPRE8gKHBlcmZvcm1hbmNlKSBjaGVjayBpZiB3ZSBuZWVkIG1pY3JvdGFzayBoZXJlXG4gIEBJbmplY3Rpb25Db250ZXh0XG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5ub2RlTW9kZWwubGlua0RlZmF1bHROb2RlU2l6ZVdpdGhNb2RlbFNpemUoKVxuXG4gICAgaWYgKHRoaXMubm9kZU1vZGVsLm5vZGUudHlwZSA9PT0gJ2h0bWwtdGVtcGxhdGUnIHx8IHRoaXMubm9kZU1vZGVsLmlzQ29tcG9uZW50VHlwZSkge1xuICAgICAgcmVzaXphYmxlKFt0aGlzLmh0bWxXcmFwcGVyUmVmLm5hdGl2ZUVsZW1lbnRdKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBzdGFydFdpdGgobnVsbCksXG4gICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5odG1sV3JhcHBlclJlZi5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoXG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmh0bWxXcmFwcGVyUmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0XG5cbiAgICAgICAgICAgIHRoaXMubm9kZU1vZGVsLnNpemUuc2V0KHsgd2lkdGgsIGhlaWdodCB9KVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpXG4gICAgICAgICkuc3Vic2NyaWJlKClcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kcmFnZ2FibGVTZXJ2aWNlLmRlc3Ryb3kodGhpcy5ob3N0UmVmLm5hdGl2ZUVsZW1lbnQpXG4gIH1cblxuICBwcm90ZWN0ZWQgc3RhcnRDb25uZWN0aW9uKGV2ZW50OiBFdmVudCwgaGFuZGxlOiBIYW5kbGVNb2RlbCkge1xuICAgIC8vIGlnbm9yZSBkcmFnIGJ5IHN0b3BwaW5nIHByb3BhZ2F0aW9uXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcblxuICAgIHRoaXMuY29ubmVjdGlvbkNvbnRyb2xsZXIuc3RhcnRDb25uZWN0aW9uKGhhbmRsZSlcbiAgfVxuXG4gIHByb3RlY3RlZCB2YWxpZGF0ZUNvbm5lY3Rpb24oaGFuZGxlOiBIYW5kbGVNb2RlbCkge1xuICAgIHRoaXMuY29ubmVjdGlvbkNvbnRyb2xsZXIudmFsaWRhdGVDb25uZWN0aW9uKGhhbmRsZSlcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNldFZhbGlkYXRlQ29ubmVjdGlvbih0YXJnZXRIYW5kbGU6IEhhbmRsZU1vZGVsKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uQ29udHJvbGxlci5yZXNldFZhbGlkYXRlQ29ubmVjdGlvbih0YXJnZXRIYW5kbGUpXG4gIH1cblxuICBwcm90ZWN0ZWQgZW5kQ29ubmVjdGlvbihoYW5kbGU6IEhhbmRsZU1vZGVsKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uQ29udHJvbGxlci5lbmRDb25uZWN0aW9uKGhhbmRsZSlcbiAgfVxuXG4gIHByb3RlY3RlZCBwdWxsTm9kZSgpIHtcbiAgICB0aGlzLm5vZGVSZW5kZXJpbmdTZXJ2aWNlLnB1bGxOb2RlKHRoaXMubm9kZU1vZGVsKVxuICB9XG5cbiAgcHJvdGVjdGVkIHNlbGVjdE5vZGUoKSB7XG4gICAgaWYgKHRoaXMuZmxvd1NldHRpbmdzU2VydmljZS5lbnRpdGllc1NlbGVjdGFibGUoKSkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdCh0aGlzLm5vZGVNb2RlbClcbiAgICB9XG4gIH1cbn1cbiIsIjwhLS0gRGVmYXVsdCBub2RlIC0tPlxuPHN2Zzpmb3JlaWduT2JqZWN0XG4gICpuZ0lmPVwibm9kZU1vZGVsLm5vZGUudHlwZSA9PT0gJ2RlZmF1bHQnXCJcbiAgY2xhc3M9XCJzZWxlY3RhYmxlXCJcbiAgI25vZGVDb250ZW50XG4gIFthdHRyLndpZHRoXT1cIm5vZGVNb2RlbC5zaXplKCkud2lkdGhcIlxuICBbYXR0ci5oZWlnaHRdPVwibm9kZU1vZGVsLnNpemUoKS5oZWlnaHRcIlxuICAobW91c2Vkb3duKT1cInB1bGxOb2RlKCk7IHNlbGVjdE5vZGUoKVwiXG4+XG4gIDxkaXZcbiAgICAjaHRtbFdyYXBwZXJcbiAgICBjbGFzcz1cImRlZmF1bHQtbm9kZVwiXG4gICAgW2NsYXNzLmRlZmF1bHQtbm9kZV9zZWxlY3RlZF09XCJub2RlTW9kZWwuc2VsZWN0ZWQoKVwiXG4gICAgW3N0eWxlLndpZHRoXT1cInN0eWxlV2lkdGgoKVwiXG4gICAgW3N0eWxlLmhlaWdodF09XCJzdHlsZUhlaWdodCgpXCJcbiAgICBbc3R5bGUubWF4LXdpZHRoXT1cInN0eWxlV2lkdGgoKVwiXG4gICAgW3N0eWxlLm1heC1oZWlnaHRdPVwic3R5bGVIZWlnaHQoKVwiXG4gID5cbiAgICA8ZGl2IFtvdXRlckhUTUxdPVwibm9kZU1vZGVsLnRleHQoKVwiPjwvZGl2PlxuXG4gICAgPGhhbmRsZSB0eXBlPVwic291cmNlXCIgW3Bvc2l0aW9uXT1cIm5vZGVNb2RlbC5zb3VyY2VQb3NpdGlvbigpXCIgLz5cbiAgICA8aGFuZGxlIHR5cGU9XCJ0YXJnZXRcIiBbcG9zaXRpb25dPVwibm9kZU1vZGVsLnRhcmdldFBvc2l0aW9uKClcIiAvPlxuICA8L2Rpdj5cbjwvc3ZnOmZvcmVpZ25PYmplY3Q+XG5cbjwhLS0gVGVtcGxhdGUgbm9kZSAtLT5cbjxzdmc6Zm9yZWlnbk9iamVjdFxuICAqbmdJZj1cIm5vZGVNb2RlbC5ub2RlLnR5cGUgPT09ICdodG1sLXRlbXBsYXRlJyAmJiBub2RlVGVtcGxhdGVcIlxuICBjbGFzcz1cInNlbGVjdGFibGVcIlxuICBbYXR0ci53aWR0aF09XCJub2RlTW9kZWwuc2l6ZSgpLndpZHRoXCJcbiAgW2F0dHIuaGVpZ2h0XT1cIm5vZGVNb2RlbC5zaXplKCkuaGVpZ2h0XCJcbiAgKG1vdXNlZG93bik9XCJwdWxsTm9kZSgpXCJcbj5cbiAgPGRpdiAjaHRtbFdyYXBwZXIgY2xhc3M9XCJ3cmFwcGVyXCI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZVRlbXBsYXRlXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogeyBub2RlOiBub2RlTW9kZWwubm9kZSwgc2VsZWN0ZWQ6IG5vZGVNb2RlbC5zZWxlY3RlZCB9IH1cIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRJbmplY3Rvcl09XCJpbmplY3RvclwiXG4gICAgLz5cbiAgPC9kaXY+XG48L3N2Zzpmb3JlaWduT2JqZWN0PlxuXG48IS0tIENvbXBvbmVudCBub2RlIC0tPlxuPHN2Zzpmb3JlaWduT2JqZWN0XG4gICpuZ0lmPVwibm9kZU1vZGVsLmlzQ29tcG9uZW50VHlwZVwiXG4gIGNsYXNzPVwic2VsZWN0YWJsZVwiXG4gIFthdHRyLndpZHRoXT1cIm5vZGVNb2RlbC5zaXplKCkud2lkdGhcIlxuICBbYXR0ci5oZWlnaHRdPVwibm9kZU1vZGVsLnNpemUoKS5oZWlnaHRcIlxuICAobW91c2Vkb3duKT1cInB1bGxOb2RlKClcIlxuPlxuICA8ZGl2ICNodG1sV3JhcHBlciBjbGFzcz1cIndyYXBwZXJcIj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICBbbmdDb21wb25lbnRPdXRsZXRdPVwiJGFueShub2RlTW9kZWwubm9kZS50eXBlKVwiXG4gICAgICBbbmdDb21wb25lbnRPdXRsZXRJbnB1dHNdPVwibm9kZU1vZGVsLmNvbXBvbmVudFR5cGVJbnB1dHMoKVwiXG4gICAgICBbbmdDb21wb25lbnRPdXRsZXRJbmplY3Rvcl09XCJpbmplY3RvclwiXG4gICAgLz5cbiAgPC9kaXY+XG48L3N2Zzpmb3JlaWduT2JqZWN0PlxuXG48IS0tIERlZmF1bHQgZ3JvdXAgbm9kZSAtLT5cbjxzdmc6cmVjdFxuICAqbmdJZj1cIm5vZGVNb2RlbC5ub2RlLnR5cGUgPT09ICdkZWZhdWx0LWdyb3VwJ1wiXG4gIGNsYXNzPVwiZGVmYXVsdC1ncm91cC1ub2RlXCJcbiAgcng9XCI1XCJcbiAgcnk9XCI1XCJcbiAgW2NsYXNzLmRlZmF1bHQtZ3JvdXAtbm9kZV9zZWxlY3RlZF09XCJub2RlTW9kZWwuc2VsZWN0ZWQoKVwiXG4gIFthdHRyLndpZHRoXT1cIm5vZGVNb2RlbC5zaXplKCkud2lkdGhcIlxuICBbYXR0ci5oZWlnaHRdPVwibm9kZU1vZGVsLnNpemUoKS5oZWlnaHRcIlxuICBbc3R5bGUuc3Ryb2tlXT1cIm5vZGVNb2RlbC5jb2xvcigpXCJcbiAgW3N0eWxlLmZpbGxdPVwibm9kZU1vZGVsLmNvbG9yKClcIlxuICAobW91c2Vkb3duKT1cInB1bGxOb2RlKCk7IHNlbGVjdE5vZGUoKVwiXG4vPlxuXG48c3ZnOmdcbiAgKm5nSWY9XCJub2RlTW9kZWwubm9kZS50eXBlID09PSAndGVtcGxhdGUtZ3JvdXAnICYmIGdyb3VwTm9kZVRlbXBsYXRlXCJcbiAgY2xhc3M9XCJzZWxlY3RhYmxlXCJcbiAgKG1vdXNlZG93bik9XCJwdWxsTm9kZSgpXCJcbj5cbiAgPG5nLWNvbnRhaW5lclxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImdyb3VwTm9kZVRlbXBsYXRlXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IHsgbm9kZTogbm9kZU1vZGVsLm5vZGUsIHNlbGVjdGVkOiBub2RlTW9kZWwuc2VsZWN0ZWQgfSB9XCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldEluamVjdG9yXT1cImluamVjdG9yXCJcbiAgLz5cbjwvc3ZnOmc+XG5cbjwhLS0gSGFuZGxlcyAtLT5cbjxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGhhbmRsZSBvZiBub2RlTW9kZWwuaGFuZGxlcygpXCI+XG4gIDxzdmc6Y2lyY2xlXG4gICAgKm5nSWY9XCIhaGFuZGxlLnRlbXBsYXRlXCJcbiAgICBjbGFzcz1cImRlZmF1bHQtaGFuZGxlXCJcbiAgICBbYXR0ci5jeF09XCJoYW5kbGUub2Zmc2V0KCkueFwiXG4gICAgW2F0dHIuY3ldPVwiaGFuZGxlLm9mZnNldCgpLnlcIlxuICAgIFthdHRyLnN0cm9rZS13aWR0aF09XCJoYW5kbGUuc3Ryb2tlV2lkdGhcIlxuICAgIHI9XCI1XCJcbiAgICAocG9pbnRlclN0YXJ0KT1cInN0YXJ0Q29ubmVjdGlvbigkZXZlbnQsIGhhbmRsZSlcIlxuICAgIChwb2ludGVyRW5kKT1cImVuZENvbm5lY3Rpb24oaGFuZGxlKVwiXG4gIC8+XG5cbiAgPHN2ZzpnXG4gICAgKm5nSWY9XCJoYW5kbGUudGVtcGxhdGVcIlxuICAgIFtoYW5kbGVTaXplQ29udHJvbGxlcl09XCJoYW5kbGVcIlxuICAgIChwb2ludGVyU3RhcnQpPVwic3RhcnRDb25uZWN0aW9uKCRldmVudCwgaGFuZGxlKVwiXG4gICAgKHBvaW50ZXJFbmQpPVwiZW5kQ29ubmVjdGlvbihoYW5kbGUpXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoYW5kbGUudGVtcGxhdGU7IGNvbnRleHQ6IGhhbmRsZS50ZW1wbGF0ZUNvbnRleHRcIiAvPlxuICA8L3N2ZzpnPlxuXG4gIDxzdmc6Y2lyY2xlXG4gICAgKm5nSWY9XCJzaG93TWFnbmV0KClcIlxuICAgIGNsYXNzPVwibWFnbmV0XCJcbiAgICBbYXR0ci5yXT1cIm5vZGVNb2RlbC5tYWduZXRSYWRpdXNcIlxuICAgIFthdHRyLmN4XT1cImhhbmRsZS5vZmZzZXQoKS54XCJcbiAgICBbYXR0ci5jeV09XCJoYW5kbGUub2Zmc2V0KCkueVwiXG4gICAgKHBvaW50ZXJFbmQpPVwiZW5kQ29ubmVjdGlvbihoYW5kbGUpOyByZXNldFZhbGlkYXRlQ29ubmVjdGlvbihoYW5kbGUpXCJcbiAgICAocG9pbnRlck92ZXIpPVwidmFsaWRhdGVDb25uZWN0aW9uKGhhbmRsZSlcIlxuICAgIChwb2ludGVyT3V0KT1cInJlc2V0VmFsaWRhdGVDb25uZWN0aW9uKGhhbmRsZSlcIlxuICAvPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
@@ -3,7 +3,7 @@ import { MapContextDirective } from '../../directives/map-context.directive';
3
3
  import { DraggableService } from '../../services/draggable.service';
4
4
  import { ViewportService } from '../../services/viewport.service';
5
5
  import { toObservable, toSignal } from '@angular/core/rxjs-interop';
6
- import { ConnectionTemplateDirective, EdgeLabelHtmlTemplateDirective, EdgeTemplateDirective, NodeHtmlTemplateDirective } from '../../directives/template.directive';
6
+ import { ConnectionTemplateDirective, EdgeLabelHtmlTemplateDirective, EdgeTemplateDirective, GroupNodeTemplateDirective, NodeHtmlTemplateDirective } from '../../directives/template.directive';
7
7
  import { addNodesToEdges } from '../../utils/add-nodes-to-edges';
8
8
  import { skip } from 'rxjs';
9
9
  import { FlowStatusService } from '../../services/flow-status.service';
@@ -84,6 +84,9 @@ export class VflowComponent {
84
84
  * Background for flow
85
85
  */
86
86
  this.background = '#fff';
87
+ this.optimization = {
88
+ computeLayersOnInit: true
89
+ };
87
90
  this.nodeModels = computed(() => this.nodeRenderingService.nodes());
88
91
  this.edgeModels = computed(() => this.flowEntitiesService.validEdges());
89
92
  // #endregion
@@ -194,6 +197,9 @@ export class VflowComponent {
194
197
  addNodesToEdges(this.nodeModels(), newModels);
195
198
  this.flowEntitiesService.edges.set(newModels);
196
199
  }
200
+ ngOnInit() {
201
+ this.setInitialNodesOrder();
202
+ }
197
203
  // #region METHODS_API
198
204
  /**
199
205
  * Change viewport to specified state
@@ -249,8 +255,20 @@ export class VflowComponent {
249
255
  trackEdges(idx, { edge }) {
250
256
  return edge;
251
257
  }
258
+ setInitialNodesOrder() {
259
+ if (this.optimization.computeLayersOnInit) {
260
+ this.nodeModels().forEach(model => {
261
+ switch (model.node.type) {
262
+ case 'default-group':
263
+ case 'template-group': {
264
+ this.nodeRenderingService.pullNode(model);
265
+ }
266
+ }
267
+ });
268
+ }
269
+ }
252
270
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: VflowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
253
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "16.2.12", type: VflowComponent, selector: "vflow", inputs: { view: "view", minZoom: "minZoom", maxZoom: "maxZoom", handlePositions: "handlePositions", background: "background", entitiesSelectable: "entitiesSelectable", connection: ["connection", "connection", (settings) => new ConnectionModel(settings)], nodes: "nodes", edges: "edges" }, outputs: { onComponentNodeEvent: "onComponentNodeEvent" }, providers: [
271
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "16.2.12", type: VflowComponent, selector: "vflow", inputs: { view: "view", minZoom: "minZoom", maxZoom: "maxZoom", handlePositions: "handlePositions", background: "background", optimization: "optimization", entitiesSelectable: "entitiesSelectable", connection: ["connection", "connection", (settings) => new ConnectionModel(settings)], nodes: "nodes", edges: "edges" }, outputs: { onComponentNodeEvent: "onComponentNodeEvent" }, providers: [
254
272
  DraggableService,
255
273
  ViewportService,
256
274
  FlowStatusService,
@@ -261,7 +279,7 @@ export class VflowComponent {
261
279
  SelectionService,
262
280
  FlowSettingsService,
263
281
  ComponentEventBusService
264
- ], queries: [{ propertyName: "nodeHtmlDirective", first: true, predicate: NodeHtmlTemplateDirective, descendants: true }, { propertyName: "edgeTemplateDirective", first: true, predicate: EdgeTemplateDirective, descendants: true }, { propertyName: "edgeLabelHtmlDirective", first: true, predicate: EdgeLabelHtmlTemplateDirective, descendants: true }, { propertyName: "connectionTemplateDirective", first: true, predicate: ConnectionTemplateDirective, descendants: true }], viewQueries: [{ propertyName: "mapContext", first: true, predicate: MapContextDirective, descendants: true }, { propertyName: "spacePointContext", first: true, predicate: SpacePointContextDirective, descendants: true }], hostDirectives: [{ directive: i1.ConnectionControllerDirective, outputs: ["onConnect", "onConnect"] }, { directive: i2.ChangesControllerDirective, outputs: ["onNodesChange", "onNodesChange", "onNodesChange.position", "onNodesChange.position", "onNodesChange.position.single", "onNodesChange.position.single", "onNodesChange.position.many", "onNodesChange.position.many", "onNodesChange.add", "onNodesChange.add", "onNodesChange.add.single", "onNodesChange.add.single", "onNodesChange.add.many", "onNodesChange.add.many", "onNodesChange.remove", "onNodesChange.remove", "onNodesChange.remove.single", "onNodesChange.remove.single", "onNodesChange.remove.many", "onNodesChange.remove.many", "onNodesChange.select", "onNodesChange.select", "onNodesChange.select.single", "onNodesChange.select.single", "onNodesChange.select.many", "onNodesChange.select.many", "onEdgesChange", "onEdgesChange", "onEdgesChange.detached", "onEdgesChange.detached", "onEdgesChange.detached.single", "onEdgesChange.detached.single", "onEdgesChange.detached.many", "onEdgesChange.detached.many", "onEdgesChange.add", "onEdgesChange.add", "onEdgesChange.add.single", "onEdgesChange.add.single", "onEdgesChange.add.many", "onEdgesChange.add.many", "onEdgesChange.remove", "onEdgesChange.remove", "onEdgesChange.remove.single", "onEdgesChange.remove.single", "onEdgesChange.remove.many", "onEdgesChange.remove.many", "onEdgesChange.select", "onEdgesChange.select", "onEdgesChange.select.single", "onEdgesChange.select.single", "onEdgesChange.select.many", "onEdgesChange.select.many"] }], ngImport: i0, template: "<svg:svg\n rootSvgRef\n rootSvgContext\n rootPointer\n flowSizeController\n class=\"root-svg\"\n #flow\n>\n <defs [markers]=\"markers()\" flowDefs />\n\n <g [background]=\"background\"/>\n\n <svg:g\n mapContext\n spacePointContext\n >\n <!-- Connection -->\n <svg:g\n connection\n [model]=\"connection\"\n [template]=\"connectionTemplateDirective?.templateRef\"\n />\n\n <!-- Edges -->\n <svg:g\n *ngFor=\"let model of edgeModels(); trackBy: trackEdges\"\n edge\n [model]=\"model\"\n [edgeTemplate]=\"edgeTemplateDirective?.templateRef\"\n [edgeLabelHtmlTemplate]=\"edgeLabelHtmlDirective?.templateRef\"\n />\n\n <!-- Nodes -->\n <svg:g\n *ngFor=\"let model of nodeModels(); trackBy: trackNodes\"\n node\n [nodeModel]=\"model\"\n [nodeHtmlTemplate]=\"nodeHtmlDirective?.templateRef\"\n [attr.transform]=\"model.pointTransform()\"\n />\n </svg:g>\n\n</svg:svg>\n", styles: [":host{display:block;width:100%;height:100%;-webkit-user-select:none;user-select:none}:host ::ng-deep *{box-sizing:border-box}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i4.NodeComponent, selector: "g[node]", inputs: ["nodeModel", "nodeHtmlTemplate"] }, { kind: "component", type: i5.EdgeComponent, selector: "g[edge]", inputs: ["model", "edgeTemplate", "edgeLabelHtmlTemplate"] }, { kind: "component", type: i6.ConnectionComponent, selector: "g[connection]", inputs: ["model", "template"] }, { kind: "component", type: i7.DefsComponent, selector: "defs[flowDefs]", inputs: ["markers"] }, { kind: "component", type: i8.BackgroundComponent, selector: "g[background]", inputs: ["background"] }, { kind: "directive", type: i9.SpacePointContextDirective, selector: "g[spacePointContext]" }, { kind: "directive", type: i10.MapContextDirective, selector: "g[mapContext]" }, { kind: "directive", type: i11.RootSvgReferenceDirective, selector: "svg[rootSvgRef]" }, { kind: "directive", type: i12.RootSvgContextDirective, selector: "svg[rootSvgContext]" }, { kind: "directive", type: i13.RootPointerDirective, selector: "svg[rootPointer]" }, { kind: "directive", type: i14.FlowSizeControllerDirective, selector: "svg[flowSizeController]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
282
+ ], queries: [{ propertyName: "nodeTemplateDirective", first: true, predicate: NodeHtmlTemplateDirective, descendants: true }, { propertyName: "groupNodeTemplateDirective", first: true, predicate: GroupNodeTemplateDirective, descendants: true }, { propertyName: "edgeTemplateDirective", first: true, predicate: EdgeTemplateDirective, descendants: true }, { propertyName: "edgeLabelHtmlDirective", first: true, predicate: EdgeLabelHtmlTemplateDirective, descendants: true }, { propertyName: "connectionTemplateDirective", first: true, predicate: ConnectionTemplateDirective, descendants: true }], viewQueries: [{ propertyName: "mapContext", first: true, predicate: MapContextDirective, descendants: true }, { propertyName: "spacePointContext", first: true, predicate: SpacePointContextDirective, descendants: true }], hostDirectives: [{ directive: i1.ConnectionControllerDirective, outputs: ["onConnect", "onConnect"] }, { directive: i2.ChangesControllerDirective, outputs: ["onNodesChange", "onNodesChange", "onNodesChange.position", "onNodesChange.position", "onNodesChange.position.single", "onNodesChange.position.single", "onNodesChange.position.many", "onNodesChange.position.many", "onNodesChange.add", "onNodesChange.add", "onNodesChange.add.single", "onNodesChange.add.single", "onNodesChange.add.many", "onNodesChange.add.many", "onNodesChange.remove", "onNodesChange.remove", "onNodesChange.remove.single", "onNodesChange.remove.single", "onNodesChange.remove.many", "onNodesChange.remove.many", "onNodesChange.select", "onNodesChange.select", "onNodesChange.select.single", "onNodesChange.select.single", "onNodesChange.select.many", "onNodesChange.select.many", "onEdgesChange", "onEdgesChange", "onEdgesChange.detached", "onEdgesChange.detached", "onEdgesChange.detached.single", "onEdgesChange.detached.single", "onEdgesChange.detached.many", "onEdgesChange.detached.many", "onEdgesChange.add", "onEdgesChange.add", "onEdgesChange.add.single", "onEdgesChange.add.single", "onEdgesChange.add.many", "onEdgesChange.add.many", "onEdgesChange.remove", "onEdgesChange.remove", "onEdgesChange.remove.single", "onEdgesChange.remove.single", "onEdgesChange.remove.many", "onEdgesChange.remove.many", "onEdgesChange.select", "onEdgesChange.select", "onEdgesChange.select.single", "onEdgesChange.select.single", "onEdgesChange.select.many", "onEdgesChange.select.many"] }], ngImport: i0, template: "<svg:svg\n rootSvgRef\n rootSvgContext\n rootPointer\n flowSizeController\n class=\"root-svg\"\n #flow\n>\n <defs [markers]=\"markers()\" flowDefs />\n\n <g [background]=\"background\"/>\n\n <svg:g\n mapContext\n spacePointContext\n >\n <!-- Connection -->\n <svg:g\n connection\n [model]=\"connection\"\n [template]=\"connectionTemplateDirective?.templateRef\"\n />\n\n <!-- Edges -->\n <svg:g\n *ngFor=\"let model of edgeModels(); trackBy: trackEdges\"\n edge\n [model]=\"model\"\n [edgeTemplate]=\"edgeTemplateDirective?.templateRef\"\n [edgeLabelHtmlTemplate]=\"edgeLabelHtmlDirective?.templateRef\"\n />\n\n <!-- Nodes -->\n <svg:g\n *ngFor=\"let model of nodeModels(); trackBy: trackNodes\"\n node\n [nodeModel]=\"model\"\n [nodeTemplate]=\"nodeTemplateDirective?.templateRef\"\n [groupNodeTemplate]=\"groupNodeTemplateDirective?.templateRef\"\n [attr.transform]=\"model.pointTransform()\"\n />\n </svg:g>\n\n</svg:svg>\n", styles: [":host{display:block;width:100%;height:100%;-webkit-user-select:none;user-select:none}:host ::ng-deep *{box-sizing:border-box}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i4.NodeComponent, selector: "g[node]", inputs: ["nodeModel", "nodeTemplate", "groupNodeTemplate"] }, { kind: "component", type: i5.EdgeComponent, selector: "g[edge]", inputs: ["model", "edgeTemplate", "edgeLabelHtmlTemplate"] }, { kind: "component", type: i6.ConnectionComponent, selector: "g[connection]", inputs: ["model", "template"] }, { kind: "component", type: i7.DefsComponent, selector: "defs[flowDefs]", inputs: ["markers"] }, { kind: "component", type: i8.BackgroundComponent, selector: "g[background]", inputs: ["background"] }, { kind: "directive", type: i9.SpacePointContextDirective, selector: "g[spacePointContext]" }, { kind: "directive", type: i10.MapContextDirective, selector: "g[mapContext]" }, { kind: "directive", type: i11.RootSvgReferenceDirective, selector: "svg[rootSvgRef]" }, { kind: "directive", type: i12.RootSvgContextDirective, selector: "svg[rootSvgContext]" }, { kind: "directive", type: i13.RootPointerDirective, selector: "svg[rootPointer]" }, { kind: "directive", type: i14.FlowSizeControllerDirective, selector: "svg[flowSizeController]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
265
283
  }
266
284
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: VflowComponent, decorators: [{
267
285
  type: Component,
@@ -279,7 +297,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
279
297
  ], hostDirectives: [
280
298
  connectionControllerHostDirective,
281
299
  changesControllerHostDirective
282
- ], template: "<svg:svg\n rootSvgRef\n rootSvgContext\n rootPointer\n flowSizeController\n class=\"root-svg\"\n #flow\n>\n <defs [markers]=\"markers()\" flowDefs />\n\n <g [background]=\"background\"/>\n\n <svg:g\n mapContext\n spacePointContext\n >\n <!-- Connection -->\n <svg:g\n connection\n [model]=\"connection\"\n [template]=\"connectionTemplateDirective?.templateRef\"\n />\n\n <!-- Edges -->\n <svg:g\n *ngFor=\"let model of edgeModels(); trackBy: trackEdges\"\n edge\n [model]=\"model\"\n [edgeTemplate]=\"edgeTemplateDirective?.templateRef\"\n [edgeLabelHtmlTemplate]=\"edgeLabelHtmlDirective?.templateRef\"\n />\n\n <!-- Nodes -->\n <svg:g\n *ngFor=\"let model of nodeModels(); trackBy: trackNodes\"\n node\n [nodeModel]=\"model\"\n [nodeHtmlTemplate]=\"nodeHtmlDirective?.templateRef\"\n [attr.transform]=\"model.pointTransform()\"\n />\n </svg:g>\n\n</svg:svg>\n", styles: [":host{display:block;width:100%;height:100%;-webkit-user-select:none;user-select:none}:host ::ng-deep *{box-sizing:border-box}\n"] }]
300
+ ], template: "<svg:svg\n rootSvgRef\n rootSvgContext\n rootPointer\n flowSizeController\n class=\"root-svg\"\n #flow\n>\n <defs [markers]=\"markers()\" flowDefs />\n\n <g [background]=\"background\"/>\n\n <svg:g\n mapContext\n spacePointContext\n >\n <!-- Connection -->\n <svg:g\n connection\n [model]=\"connection\"\n [template]=\"connectionTemplateDirective?.templateRef\"\n />\n\n <!-- Edges -->\n <svg:g\n *ngFor=\"let model of edgeModels(); trackBy: trackEdges\"\n edge\n [model]=\"model\"\n [edgeTemplate]=\"edgeTemplateDirective?.templateRef\"\n [edgeLabelHtmlTemplate]=\"edgeLabelHtmlDirective?.templateRef\"\n />\n\n <!-- Nodes -->\n <svg:g\n *ngFor=\"let model of nodeModels(); trackBy: trackNodes\"\n node\n [nodeModel]=\"model\"\n [nodeTemplate]=\"nodeTemplateDirective?.templateRef\"\n [groupNodeTemplate]=\"groupNodeTemplateDirective?.templateRef\"\n [attr.transform]=\"model.pointTransform()\"\n />\n </svg:g>\n\n</svg:svg>\n", styles: [":host{display:block;width:100%;height:100%;-webkit-user-select:none;user-select:none}:host ::ng-deep *{box-sizing:border-box}\n"] }]
283
301
  }], propDecorators: { view: [{
284
302
  type: Input
285
303
  }], minZoom: [{
@@ -290,6 +308,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
290
308
  type: Input
291
309
  }], background: [{
292
310
  type: Input
311
+ }], optimization: [{
312
+ type: Input
293
313
  }], entitiesSelectable: [{
294
314
  type: Input
295
315
  }], connection: [{
@@ -302,9 +322,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
302
322
  type: Input
303
323
  }], onComponentNodeEvent: [{
304
324
  type: Output
305
- }], nodeHtmlDirective: [{
325
+ }], nodeTemplateDirective: [{
306
326
  type: ContentChild,
307
327
  args: [NodeHtmlTemplateDirective]
328
+ }], groupNodeTemplateDirective: [{
329
+ type: ContentChild,
330
+ args: [GroupNodeTemplateDirective]
308
331
  }], edgeTemplateDirective: [{
309
332
  type: ContentChild,
310
333
  args: [EdgeTemplateDirective]
@@ -321,4 +344,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
321
344
  type: ViewChild,
322
345
  args: [SpacePointContextDirective]
323
346
  }] } });
324
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmZsb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvdmZsb3cvdmZsb3cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvdmZsb3cvdmZsb3cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQix1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFnQixRQUFRLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFBeUIsU0FBUyxFQUFFLFFBQVEsRUFBVSxNQUFNLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeE8sT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFcEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHcEUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLDhCQUE4QixFQUFFLHFCQUFxQixFQUFFLHlCQUF5QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFcEssT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHNUIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDakcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUV6RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUUzRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUV0RixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQUc1RixNQUFNLGlDQUFpQyxHQUFHO0lBQ3hDLFNBQVMsRUFBRSw2QkFBNkI7SUFDeEMsT0FBTyxFQUFFLENBQUMsV0FBVyxDQUFDO0NBQ3ZCLENBQUE7QUFFRCxNQUFNLDhCQUE4QixHQUFHO0lBQ3JDLFNBQVMsRUFBRSwwQkFBMEI7SUFDckMsT0FBTyxFQUFFO1FBQ1AsZUFBZTtRQUNmLHdCQUF3QjtRQUN4QiwrQkFBK0I7UUFDL0IsNkJBQTZCO1FBQzdCLG1CQUFtQjtRQUNuQiwwQkFBMEI7UUFDMUIsd0JBQXdCO1FBQ3hCLHNCQUFzQjtRQUN0Qiw2QkFBNkI7UUFDN0IsMkJBQTJCO1FBQzNCLHNCQUFzQjtRQUN0Qiw2QkFBNkI7UUFDN0IsMkJBQTJCO1FBQzNCLGVBQWU7UUFDZix3QkFBd0I7UUFDeEIsK0JBQStCO1FBQy9CLDZCQUE2QjtRQUM3QixtQkFBbUI7UUFDbkIsMEJBQTBCO1FBQzFCLHdCQUF3QjtRQUN4QixzQkFBc0I7UUFDdEIsNkJBQTZCO1FBQzdCLDJCQUEyQjtRQUMzQixzQkFBc0I7UUFDdEIsNkJBQTZCO1FBQzdCLDJCQUEyQjtLQUM1QjtDQUNGLENBQUE7QUF3QkQsTUFBTSxPQUFPLGNBQWM7SUF0QjNCO1FBdUJFLGFBQWE7UUFDTCxvQkFBZSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQTtRQUN6Qyx3QkFBbUIsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtRQUNqRCx1QkFBa0IsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtRQUMvQyx1QkFBa0IsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtRQUMvQyx5QkFBb0IsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQTtRQUNuRCx3QkFBbUIsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtRQUNqRCw2QkFBd0IsR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQTtRQUMzRCxhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBOENuQzs7V0FFRztRQUVJLGVBQVUsR0FBd0IsTUFBTSxDQUFBO1FBcUNyQyxlQUFVLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFBO1FBaUI5RCxlQUFVLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFBO1FBQzVFLGFBQWE7UUFFYixrQkFBa0I7UUFDbEI7Ozs7V0FJRztRQUVJLHlCQUFvQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFhLENBQUEsQ0FBQyxzQ0FBc0M7UUF1QmhILGFBQWE7UUFFYixxQkFBcUI7UUFDckI7O1dBRUc7UUFDYSxhQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQTtRQUU3RTs7V0FFRztRQUNhLGdCQUFXLEdBQ3pCLFFBQVEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLEVBQUUsWUFBWSxFQUFFLEVBQWtCLEVBQUUsQ0FBQyxDQUFBO1FBRWxGOztXQUVHO1FBQ2EsZ0JBQVcsR0FDekIsUUFBUSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBa0IsRUFBRSxDQUFDLENBQUE7UUFDbEYsYUFBYTtRQUViLGlCQUFpQjtRQUNqQjs7V0FFRztRQUNhLG9CQUFlLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUM7YUFDbEYsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBLENBQUMsd0NBQXdDO1FBRXpEOztXQUVHO1FBQ2EsaUJBQVksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFBO1FBRS9EOztXQUVHO1FBQ2EsaUJBQVksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFBO1FBQy9ELGFBQWE7UUFFSCxZQUFPLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQTtLQWlFckQ7SUFoUEMsYUFBYTtJQUViLG1CQUFtQjtJQUVuQjs7Ozs7O09BTUc7SUFDSCxJQUNXLElBQUksQ0FBQyxJQUErQjtRQUM3QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUN6QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUNXLE9BQU8sQ0FBQyxLQUFhO1FBQzlCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzdDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQ1csT0FBTyxDQUFDLEtBQWE7UUFDOUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDN0MsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxJQUNXLGVBQWUsQ0FBQyxlQUFnQztRQUN6RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQTtJQUMvRCxDQUFDO0lBUUQ7O09BRUc7SUFDSCxJQUNXLGtCQUFrQixDQUFDLEtBQWM7UUFDMUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUN4RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQ1csVUFBVSxDQUFDLFVBQTJCLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUEsQ0FBQyxDQUFDO0lBRTFHLElBQVcsVUFBVSxLQUFLLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxDQUFBLENBQUMsQ0FBQztJQUN4RSxhQUFhO0lBRWIsc0JBQXNCO0lBQ3RCOztPQUVHO0lBQ0gsSUFDVyxLQUFLLENBQUMsUUFBZ0I7UUFDL0IsTUFBTSxTQUFTLEdBQUcscUJBQXFCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFDbkQsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxDQUFDLENBQ3hFLENBQUE7UUFFRCx5Q0FBeUM7UUFDekMsZUFBZSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQTtRQUU1RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUMvQyxDQUFDO0lBSUQ7O09BRUc7SUFDSCxJQUNXLEtBQUssQ0FBQyxRQUFnQjtRQUMvQixNQUFNLFNBQVMsR0FBRyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUNuRCxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FDeEUsQ0FBQTtRQUVELHlDQUF5QztRQUN6QyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFBO1FBRTdDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQy9DLENBQUM7SUE0RUQsc0JBQXNCO0lBQ3RCOzs7O09BSUc7SUFDSSxVQUFVLENBQUMsUUFBdUI7UUFDdkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDckcsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsSUFBWTtRQUN4QixJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDckcsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsS0FBWTtRQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUNsRyxDQUFDO0lBRU0sT0FBTyxDQUFDLE9BQXdCO1FBQ3JDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3ZDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksT0FBTyxDQUFjLEVBQVU7UUFDcEMsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQTtJQUN0RCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxnQkFBZ0I7UUFDckIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDckUsQ0FBQztJQUVEOztPQUVHO0lBQ0ksd0JBQXdCLENBQUMsS0FBWTtRQUMxQyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUMvRCxDQUFDO0lBQ0QsYUFBYTtJQUVILFVBQVUsQ0FBQyxHQUFXLEVBQUUsRUFBRSxJQUFJLEVBQWE7UUFDbkQsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRVMsVUFBVSxDQUFDLEdBQVcsRUFBRSxFQUFFLElBQUksRUFBYTtRQUNuRCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7K0dBelBVLGNBQWM7bUdBQWQsY0FBYyxzT0EwRUwsQ0FBQyxRQUE0QixFQUFFLEVBQUUsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxRQUFRLENBQUMsMkdBM0Z4RTtZQUNULGdCQUFnQjtZQUNoQixlQUFlO1lBQ2YsaUJBQWlCO1lBQ2pCLG1CQUFtQjtZQUNuQixrQkFBa0I7WUFDbEIsa0JBQWtCO1lBQ2xCLG9CQUFvQjtZQUNwQixnQkFBZ0I7WUFDaEIsbUJBQW1CO1lBQ25CLHdCQUF3QjtTQUN6Qix5RUFxSWEseUJBQXlCLHdGQUd6QixxQkFBcUIseUZBR3JCLDhCQUE4Qiw4RkFHOUIsMkJBQTJCLDRGQUs5QixtQkFBbUIsb0ZBR25CLDBCQUEwQix5a0RDN092Qyw2OEJBMkNBOzs0RkRrRGEsY0FBYztrQkF0QjFCLFNBQVM7K0JBQ0UsT0FBTyxtQkFHQSx1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDO3dCQUNULGdCQUFnQjt3QkFDaEIsZUFBZTt3QkFDZixpQkFBaUI7d0JBQ2pCLG1CQUFtQjt3QkFDbkIsa0JBQWtCO3dCQUNsQixrQkFBa0I7d0JBQ2xCLG9CQUFvQjt3QkFDcEIsZ0JBQWdCO3dCQUNoQixtQkFBbUI7d0JBQ25CLHdCQUF3QjtxQkFDekIsa0JBQ2U7d0JBQ2QsaUNBQWlDO3dCQUNqQyw4QkFBOEI7cUJBQy9COzhCQXdCVSxJQUFJO3NCQURkLEtBQUs7Z0JBU0ssT0FBTztzQkFEakIsS0FBSztnQkFTSyxPQUFPO3NCQURqQixLQUFLO2dCQWNLLGVBQWU7c0JBRHpCLEtBQUs7Z0JBU0MsVUFBVTtzQkFEaEIsS0FBSztnQkFPSyxrQkFBa0I7c0JBRDVCLEtBQUs7Z0JBV0ssVUFBVTtzQkFEcEIsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLFFBQTRCLEVBQUUsRUFBRSxDQUFDLElBQUksZUFBZSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQVcxRSxLQUFLO3NCQURmLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQWtCZCxLQUFLO3NCQURmLEtBQUs7Z0JBc0JDLG9CQUFvQjtzQkFEMUIsTUFBTTtnQkFNRyxpQkFBaUI7c0JBRDFCLFlBQVk7dUJBQUMseUJBQXlCO2dCQUk3QixxQkFBcUI7c0JBRDlCLFlBQVk7dUJBQUMscUJBQXFCO2dCQUl6QixzQkFBc0I7c0JBRC9CLFlBQVk7dUJBQUMsOEJBQThCO2dCQUlsQywyQkFBMkI7c0JBRHBDLFlBQVk7dUJBQUMsMkJBQTJCO2dCQU0vQixVQUFVO3NCQURuQixTQUFTO3VCQUFDLG1CQUFtQjtnQkFJcEIsaUJBQWlCO3NCQUQxQixTQUFTO3VCQUFDLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgRXZlbnRFbWl0dGVyLCBJbmplY3RvciwgSW5wdXQsIE9uQ2hhbmdlcywgT3V0cHV0LCBTaWduYWwsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCwgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0LCBydW5JbkluamVjdGlvbkNvbnRleHQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5vZGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL25vZGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IE1hcENvbnRleHREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL21hcC1jb250ZXh0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEcmFnZ2FibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZHJhZ2dhYmxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm9kZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL25vZGUubW9kZWwnO1xuaW1wb3J0IHsgVmlld3BvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdmlld3BvcnQuc2VydmljZSc7XG5pbXBvcnQgeyB0b09ic2VydmFibGUsIHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRWRnZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZWRnZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRWRnZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2VkZ2UubW9kZWwnO1xuaW1wb3J0IHsgQ29ubmVjdGlvblRlbXBsYXRlRGlyZWN0aXZlLCBFZGdlTGFiZWxIdG1sVGVtcGxhdGVEaXJlY3RpdmUsIEVkZ2VUZW1wbGF0ZURpcmVjdGl2ZSwgTm9kZUh0bWxUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvdGVtcGxhdGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IEhhbmRsZVBvc2l0aW9ucyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvaGFuZGxlLXBvc2l0aW9ucy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgYWRkTm9kZXNUb0VkZ2VzIH0gZnJvbSAnLi4vLi4vdXRpbHMvYWRkLW5vZGVzLXRvLWVkZ2VzJztcbmltcG9ydCB7IHNraXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFBvaW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9wb2ludC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVmlld3BvcnRTdGF0ZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvdmlld3BvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IEZsb3dTdGF0dXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmxvdy1zdGF0dXMuc2VydmljZSc7XG5pbXBvcnQgeyBDb25uZWN0aW9uQ29udHJvbGxlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvY29ubmVjdGlvbi1jb250cm9sbGVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBGbG93RW50aXRpZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmxvdy1lbnRpdGllcy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbm5lY3Rpb25TZXR0aW5ncyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvY29ubmVjdGlvbi1zZXR0aW5ncy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ29ubmVjdGlvbk1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2Nvbm5lY3Rpb24ubW9kZWwnO1xuaW1wb3J0IHsgUmVmZXJlbmNlS2VlcGVyIH0gZnJvbSAnLi4vLi4vdXRpbHMvcmVmZXJlbmNlLWtlZXBlcic7XG5pbXBvcnQgeyBOb2Rlc0NoYW5nZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub2RlLWNoYW5nZXMuc2VydmljZSc7XG5pbXBvcnQgeyBFZGdlQ2hhbmdlc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lZGdlLWNoYW5nZXMuc2VydmljZSc7XG5pbXBvcnQgeyBOb2RlQ2hhbmdlIH0gZnJvbSAnLi4vLi4vdHlwZXMvbm9kZS1jaGFuZ2UudHlwZSc7XG5pbXBvcnQgeyBDaGFuZ2VzQ29udHJvbGxlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvY2hhbmdlcy1jb250cm9sbGVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBFZGdlQ2hhbmdlIH0gZnJvbSAnLi4vLi4vdHlwZXMvZWRnZS1jaGFuZ2UudHlwZSc7XG5pbXBvcnQgeyBOb2RlUmVuZGVyaW5nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vZGUtcmVuZGVyaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VsZWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEZsb3dTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mbG93LXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tcG9uZW50RXZlbnRCdXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29tcG9uZW50LWV2ZW50LWJ1cy5zZXJ2aWNlJztcbmltcG9ydCB7IEJhY2tncm91bmQgfSBmcm9tICcuLi8uLi90eXBlcy9iYWNrZ3JvdW5kLnR5cGUnO1xuaW1wb3J0IHsgU3BhY2VQb2ludENvbnRleHREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3NwYWNlLXBvaW50LWNvbnRleHQuZGlyZWN0aXZlJztcbmltcG9ydCB7IEZpdFZpZXdPcHRpb25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9maXQtdmlldy1vcHRpb25zLmludGVyZmFjZSc7XG5cbmNvbnN0IGNvbm5lY3Rpb25Db250cm9sbGVySG9zdERpcmVjdGl2ZSA9IHtcbiAgZGlyZWN0aXZlOiBDb25uZWN0aW9uQ29udHJvbGxlckRpcmVjdGl2ZSxcbiAgb3V0cHV0czogWydvbkNvbm5lY3QnXVxufVxuXG5jb25zdCBjaGFuZ2VzQ29udHJvbGxlckhvc3REaXJlY3RpdmUgPSB7XG4gIGRpcmVjdGl2ZTogQ2hhbmdlc0NvbnRyb2xsZXJEaXJlY3RpdmUsXG4gIG91dHB1dHM6IFtcbiAgICAnb25Ob2Rlc0NoYW5nZScsXG4gICAgJ29uTm9kZXNDaGFuZ2UucG9zaXRpb24nLFxuICAgICdvbk5vZGVzQ2hhbmdlLnBvc2l0aW9uLnNpbmdsZScsXG4gICAgJ29uTm9kZXNDaGFuZ2UucG9zaXRpb24ubWFueScsXG4gICAgJ29uTm9kZXNDaGFuZ2UuYWRkJyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5hZGQuc2luZ2xlJyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5hZGQubWFueScsXG4gICAgJ29uTm9kZXNDaGFuZ2UucmVtb3ZlJyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5yZW1vdmUuc2luZ2xlJyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5yZW1vdmUubWFueScsXG4gICAgJ29uTm9kZXNDaGFuZ2Uuc2VsZWN0JyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5zZWxlY3Quc2luZ2xlJyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5zZWxlY3QubWFueScsXG4gICAgJ29uRWRnZXNDaGFuZ2UnLFxuICAgICdvbkVkZ2VzQ2hhbmdlLmRldGFjaGVkJyxcbiAgICAnb25FZGdlc0NoYW5nZS5kZXRhY2hlZC5zaW5nbGUnLFxuICAgICdvbkVkZ2VzQ2hhbmdlLmRldGFjaGVkLm1hbnknLFxuICAgICdvbkVkZ2VzQ2hhbmdlLmFkZCcsXG4gICAgJ29uRWRnZXNDaGFuZ2UuYWRkLnNpbmdsZScsXG4gICAgJ29uRWRnZXNDaGFuZ2UuYWRkLm1hbnknLFxuICAgICdvbkVkZ2VzQ2hhbmdlLnJlbW92ZScsXG4gICAgJ29uRWRnZXNDaGFuZ2UucmVtb3ZlLnNpbmdsZScsXG4gICAgJ29uRWRnZXNDaGFuZ2UucmVtb3ZlLm1hbnknLFxuICAgICdvbkVkZ2VzQ2hhbmdlLnNlbGVjdCcsXG4gICAgJ29uRWRnZXNDaGFuZ2Uuc2VsZWN0LnNpbmdsZScsXG4gICAgJ29uRWRnZXNDaGFuZ2Uuc2VsZWN0Lm1hbnknLFxuICBdXG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZmbG93JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3ZmbG93LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdmZsb3cuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIERyYWdnYWJsZVNlcnZpY2UsXG4gICAgVmlld3BvcnRTZXJ2aWNlLFxuICAgIEZsb3dTdGF0dXNTZXJ2aWNlLFxuICAgIEZsb3dFbnRpdGllc1NlcnZpY2UsXG4gICAgTm9kZXNDaGFuZ2VTZXJ2aWNlLFxuICAgIEVkZ2VDaGFuZ2VzU2VydmljZSxcbiAgICBOb2RlUmVuZGVyaW5nU2VydmljZSxcbiAgICBTZWxlY3Rpb25TZXJ2aWNlLFxuICAgIEZsb3dTZXR0aW5nc1NlcnZpY2UsXG4gICAgQ29tcG9uZW50RXZlbnRCdXNTZXJ2aWNlXG4gIF0sXG4gIGhvc3REaXJlY3RpdmVzOiBbXG4gICAgY29ubmVjdGlvbkNvbnRyb2xsZXJIb3N0RGlyZWN0aXZlLFxuICAgIGNoYW5nZXNDb250cm9sbGVySG9zdERpcmVjdGl2ZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFZmbG93Q29tcG9uZW50IHtcbiAgLy8gI3JlZ2lvbiBESVxuICBwcml2YXRlIHZpZXdwb3J0U2VydmljZSA9IGluamVjdChWaWV3cG9ydFNlcnZpY2UpXG4gIHByaXZhdGUgZmxvd0VudGl0aWVzU2VydmljZSA9IGluamVjdChGbG93RW50aXRpZXNTZXJ2aWNlKVxuICBwcml2YXRlIG5vZGVzQ2hhbmdlU2VydmljZSA9IGluamVjdChOb2Rlc0NoYW5nZVNlcnZpY2UpXG4gIHByaXZhdGUgZWRnZXNDaGFuZ2VTZXJ2aWNlID0gaW5qZWN0KEVkZ2VDaGFuZ2VzU2VydmljZSlcbiAgcHJpdmF0ZSBub2RlUmVuZGVyaW5nU2VydmljZSA9IGluamVjdChOb2RlUmVuZGVyaW5nU2VydmljZSlcbiAgcHJpdmF0ZSBmbG93U2V0dGluZ3NTZXJ2aWNlID0gaW5qZWN0KEZsb3dTZXR0aW5nc1NlcnZpY2UpXG4gIHByaXZhdGUgY29tcG9uZW50RXZlbnRCdXNTZXJ2aWNlID0gaW5qZWN0KENvbXBvbmVudEV2ZW50QnVzU2VydmljZSlcbiAgcHJpdmF0ZSBpbmplY3RvciA9IGluamVjdChJbmplY3RvcilcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gU0VUVElOR1NcblxuICAvKipcbiAgICogU2l6ZSBmb3IgZmxvdyB2aWV3XG4gICAqXG4gICAqIGFjY2VwdHNcbiAgICogLSBhYnNvbHV0ZSBzaXplIGluIGZvcm1hdCBbd2lkdGgsIGhlaWdodF0gb3JcbiAgICogLSAnYXV0bycgdG8gY29tcHV0ZSBzaXplIGJhc2VkIG9uIHBhcmVudCBlbGVtZW50IHNpemVcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgdmlldyh2aWV3OiBbbnVtYmVyLCBudW1iZXJdIHwgJ2F1dG8nKSB7XG4gICAgdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLnZpZXcuc2V0KHZpZXcpXG4gIH1cblxuICAvKipcbiAgICogTWluaW11bSB6b29tIHZhbHVlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG1pblpvb20odmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuZmxvd1NldHRpbmdzU2VydmljZS5taW5ab29tLnNldCh2YWx1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXhpbXVtIHpvb20gdmFsdWVcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbWF4Wm9vbSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLm1heFpvb20uc2V0KHZhbHVlKVxuICB9XG5cbiAgLyoqXG4gICAqIE9iamVjdCB0aGF0IGNvbnRyb2xzIGZsb3cgZGlyZWN0aW9uLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gYXJjaGlldmUgcmlnaHQgdG8gbGVmdCBkaXJlY3Rpb25cbiAgICogdGhlbiB5b3UgbmVlZCB0byBwYXNzIHRoZXNlIHBvc2l0aW9ucyB7IHNvdXJjZTogJ2xlZnQnLCB0YXJnZXQ6ICdyaWdodCcgfVxuICAgKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBoYW5kbGVQb3NpdGlvbnMoaGFuZGxlUG9zaXRpb25zOiBIYW5kbGVQb3NpdGlvbnMpIHtcbiAgICB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UuaGFuZGxlUG9zaXRpb25zLnNldChoYW5kbGVQb3NpdGlvbnMpXG4gIH1cblxuICAvKipcbiAgICogQmFja2dyb3VuZCBmb3IgZmxvd1xuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGJhY2tncm91bmQ6IEJhY2tncm91bmQgfCBzdHJpbmcgPSAnI2ZmZidcblxuICAvKipcbiAgICogR2xvYmFsIHJ1bGUgaWYgeW91IGNhbiBvciBjYW4ndCBzZWxlY3QgZW50aXRpZXNcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZW50aXRpZXNTZWxlY3RhYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLmVudGl0aWVzU2VsZWN0YWJsZS5zZXQodmFsdWUpXG4gIH1cblxuICAvKipcbiAgICogU2V0dGluZ3MgZm9yIGNvbm5lY3Rpb24gKGl0IHJlbmRlcnMgd2hlbiB1c2VyIHRyaWVzIHRvIGNyZWF0ZSBlZGdlIGJldHdlZW4gbm9kZXMpXG4gICAqXG4gICAqIFlvdSBuZWVkIHRvIHBhc3MgYENvbm5lY3Rpb25TZXR0aW5nc2AgaW4gdGhpcyBpbnB1dC5cbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogKHNldHRpbmdzOiBDb25uZWN0aW9uU2V0dGluZ3MpID0+IG5ldyBDb25uZWN0aW9uTW9kZWwoc2V0dGluZ3MpIH0pXG4gIHB1YmxpYyBzZXQgY29ubmVjdGlvbihjb25uZWN0aW9uOiBDb25uZWN0aW9uTW9kZWwpIHsgdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLmNvbm5lY3Rpb24uc2V0KGNvbm5lY3Rpb24pIH1cblxuICBwdWJsaWMgZ2V0IGNvbm5lY3Rpb24oKSB7IHJldHVybiB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UuY29ubmVjdGlvbigpIH1cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gTUFJTl9JTlBVVFNcbiAgLyoqXG4gICAqIE5vZGVzIHRvIHJlbmRlclxuICAgKi9cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgcHVibGljIHNldCBub2RlcyhuZXdOb2RlczogTm9kZVtdKSB7XG4gICAgY29uc3QgbmV3TW9kZWxzID0gcnVuSW5JbmplY3Rpb25Db250ZXh0KHRoaXMuaW5qZWN0b3IsXG4gICAgICAoKSA9PiBSZWZlcmVuY2VLZWVwZXIubm9kZXMobmV3Tm9kZXMsIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5ub2RlcygpKVxuICAgIClcblxuICAgIC8vIHF1aWNrIGFuZCBkaXJ0eSBiaW5kaW5nIG5vZGVzIHRvIGVkZ2VzXG4gICAgYWRkTm9kZXNUb0VkZ2VzKG5ld01vZGVscywgdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLmVkZ2VzKCkpXG5cbiAgICB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2Uubm9kZXMuc2V0KG5ld01vZGVscylcbiAgfVxuXG4gIHByb3RlY3RlZCBub2RlTW9kZWxzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5ub2RlUmVuZGVyaW5nU2VydmljZS5ub2RlcygpKVxuXG4gIC8qKlxuICAgKiBFZGdlcyB0byByZW5kZXJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZWRnZXMobmV3RWRnZXM6IEVkZ2VbXSkge1xuICAgIGNvbnN0IG5ld01vZGVscyA9IHJ1bkluSW5qZWN0aW9uQ29udGV4dCh0aGlzLmluamVjdG9yLFxuICAgICAgKCkgPT4gUmVmZXJlbmNlS2VlcGVyLmVkZ2VzKG5ld0VkZ2VzLCB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UuZWRnZXMoKSlcbiAgICApXG5cbiAgICAvLyBxdWljayBhbmQgZGlydHkgYmluZGluZyBub2RlcyB0byBlZGdlc1xuICAgIGFkZE5vZGVzVG9FZGdlcyh0aGlzLm5vZGVNb2RlbHMoKSwgbmV3TW9kZWxzKVxuXG4gICAgdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLmVkZ2VzLnNldChuZXdNb2RlbHMpXG4gIH1cblxuICBwcm90ZWN0ZWQgZWRnZU1vZGVscyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS52YWxpZEVkZ2VzKCkpXG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIE9VVFBVVFNcbiAgLyoqXG4gICAqIEV2ZW50IHRoYXQgYWNjdW11bGF0ZXMgYWxsIGN1c3RvbSBub2RlIGV2ZW50c1xuICAgKlxuICAgKiBAZXhwZXJpbWVudGFsXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIG9uQ29tcG9uZW50Tm9kZUV2ZW50ID0gdGhpcy5jb21wb25lbnRFdmVudEJ1c1NlcnZpY2UuZXZlbnQkIGFzIGFueSAvLyBUT0RPOiByZXNlYXJjaCBob3cgdG8gcmVtb3ZlIGFzIGFueVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBURU1QTEFURVNcbiAgQENvbnRlbnRDaGlsZChOb2RlSHRtbFRlbXBsYXRlRGlyZWN0aXZlKVxuICBwcm90ZWN0ZWQgbm9kZUh0bWxEaXJlY3RpdmU/OiBOb2RlSHRtbFRlbXBsYXRlRGlyZWN0aXZlXG5cbiAgQENvbnRlbnRDaGlsZChFZGdlVGVtcGxhdGVEaXJlY3RpdmUpXG4gIHByb3RlY3RlZCBlZGdlVGVtcGxhdGVEaXJlY3RpdmU/OiBFZGdlVGVtcGxhdGVEaXJlY3RpdmVcblxuICBAQ29udGVudENoaWxkKEVkZ2VMYWJlbEh0bWxUZW1wbGF0ZURpcmVjdGl2ZSlcbiAgcHJvdGVjdGVkIGVkZ2VMYWJlbEh0bWxEaXJlY3RpdmU/OiBFZGdlTGFiZWxIdG1sVGVtcGxhdGVEaXJlY3RpdmVcblxuICBAQ29udGVudENoaWxkKENvbm5lY3Rpb25UZW1wbGF0ZURpcmVjdGl2ZSlcbiAgcHJvdGVjdGVkIGNvbm5lY3Rpb25UZW1wbGF0ZURpcmVjdGl2ZT86IENvbm5lY3Rpb25UZW1wbGF0ZURpcmVjdGl2ZVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBESVJFQ1RJVkVTXG4gIEBWaWV3Q2hpbGQoTWFwQ29udGV4dERpcmVjdGl2ZSlcbiAgcHJvdGVjdGVkIG1hcENvbnRleHQhOiBNYXBDb250ZXh0RGlyZWN0aXZlXG5cbiAgQFZpZXdDaGlsZChTcGFjZVBvaW50Q29udGV4dERpcmVjdGl2ZSlcbiAgcHJvdGVjdGVkIHNwYWNlUG9pbnRDb250ZXh0ITogU3BhY2VQb2ludENvbnRleHREaXJlY3RpdmVcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gU0lHTkFMX0FQSVxuICAvKipcbiAgICogU2lnbmFsIGZvciByZWFkaW5nIHZpZXdwb3J0IGNoYW5nZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZpZXdwb3J0ID0gdGhpcy52aWV3cG9ydFNlcnZpY2UucmVhZGFibGVWaWV3cG9ydC5hc1JlYWRvbmx5KClcblxuICAvKipcbiAgICogU2lnbmFsIGZvciByZWFkaW5nIG5vZGVzIGNoYW5nZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5vZGVzQ2hhbmdlID1cbiAgICB0b1NpZ25hbCh0aGlzLm5vZGVzQ2hhbmdlU2VydmljZS5jaGFuZ2VzJCwgeyBpbml0aWFsVmFsdWU6IFtdIGFzIE5vZGVDaGFuZ2VbXSB9KVxuXG4gIC8qKlxuICAgKiBTaWduYWwgdG8gcmVhZGluZyBlZGdlcyBjaGFuZ2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBlZGdlc0NoYW5nZSA9XG4gICAgdG9TaWduYWwodGhpcy5lZGdlc0NoYW5nZVNlcnZpY2UuY2hhbmdlcyQsIHsgaW5pdGlhbFZhbHVlOiBbXSBhcyBFZGdlQ2hhbmdlW10gfSlcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gUlhfQVBJXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIHdpdGggdmlld3BvcnQgY2hhbmdlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmlld3BvcnRDaGFuZ2UkID0gdG9PYnNlcnZhYmxlKHRoaXMudmlld3BvcnRTZXJ2aWNlLnJlYWRhYmxlVmlld3BvcnQpXG4gICAgLnBpcGUoc2tpcCgxKSkgLy8gc2tpcCBkZWZhdWx0IHZhbHVlIHRoYXQgc2V0IGJ5IHNpZ25hbFxuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIHdpdGggbm9kZXMgY2hhbmdlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbm9kZXNDaGFuZ2UkID0gdGhpcy5ub2Rlc0NoYW5nZVNlcnZpY2UuY2hhbmdlcyRcblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSB3aXRoIGVkZ2VzIGNoYW5nZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGVkZ2VzQ2hhbmdlJCA9IHRoaXMuZWRnZXNDaGFuZ2VTZXJ2aWNlLmNoYW5nZXMkXG4gIC8vICNlbmRyZWdpb25cblxuICBwcm90ZWN0ZWQgbWFya2VycyA9IHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5tYXJrZXJzXG5cbiAgLy8gI3JlZ2lvbiBNRVRIT0RTX0FQSVxuICAvKipcbiAgICogQ2hhbmdlIHZpZXdwb3J0IHRvIHNwZWNpZmllZCBzdGF0ZVxuICAgKlxuICAgKiBAcGFyYW0gdmlld3BvcnQgdmlld3BvcnQgc3RhdGVcbiAgICovXG4gIHB1YmxpYyB2aWV3cG9ydFRvKHZpZXdwb3J0OiBWaWV3cG9ydFN0YXRlKTogdm9pZCB7XG4gICAgdGhpcy52aWV3cG9ydFNlcnZpY2Uud3JpdGFibGVWaWV3cG9ydC5zZXQoeyBjaGFuZ2VUeXBlOiAnYWJzb2x1dGUnLCBzdGF0ZTogdmlld3BvcnQsIGR1cmF0aW9uOiAwIH0pXG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlIHpvb21cbiAgICpcbiAgICogQHBhcmFtIHpvb20gem9vbSB2YWx1ZVxuICAgKi9cbiAgcHVibGljIHpvb21Ubyh6b29tOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdwb3J0U2VydmljZS53cml0YWJsZVZpZXdwb3J0LnNldCh7IGNoYW5nZVR5cGU6ICdhYnNvbHV0ZScsIHN0YXRlOiB7IHpvb20gfSwgZHVyYXRpb246IDAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlIHRvIHNwZWNpZmllZCBjb29yZGluYXRlXG4gICAqXG4gICAqIEBwYXJhbSBwb2ludCBwb2ludCB3aGVyZSB0byBtb3ZlXG4gICAqL1xuICBwdWJsaWMgcGFuVG8ocG9pbnQ6IFBvaW50KTogdm9pZCB7XG4gICAgdGhpcy52aWV3cG9ydFNlcnZpY2Uud3JpdGFibGVWaWV3cG9ydC5zZXQoeyBjaGFuZ2VUeXBlOiAnYWJzb2x1dGUnLCBzdGF0ZTogcG9pbnQsIGR1cmF0aW9uOiAwIH0pXG4gIH1cblxuICBwdWJsaWMgZml0VmlldyhvcHRpb25zPzogRml0Vmlld09wdGlvbnMpIHtcbiAgICB0aGlzLnZpZXdwb3J0U2VydmljZS5maXRWaWV3KG9wdGlvbnMpXG4gIH1cblxuICAvKipcbiAgICogR2V0IG5vZGUgYnkgaWRcbiAgICpcbiAgICogQHBhcmFtIGlkIG5vZGUgaWRcbiAgICovXG4gIHB1YmxpYyBnZXROb2RlPFQgPSB1bmtub3duPihpZDogc3RyaW5nKTogTm9kZTxUPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5nZXROb2RlPFQ+KGlkKT8ubm9kZVxuICB9XG5cbiAgLyoqXG4gICAqIFN5bmMgbWV0aG9kIHRvIGdldCBkZXRhY2hlZCBlZGdlc1xuICAgKi9cbiAgcHVibGljIGdldERldGFjaGVkRWRnZXMoKTogRWRnZVtdIHtcbiAgICByZXR1cm4gdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLmdldERldGFjaGVkRWRnZXMoKS5tYXAoZSA9PiBlLmVkZ2UpXG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBwb2ludCByZWNlaXZlZCBmcm9tIGRvY3VtZW50IHRvIHBvaW50IG9uIHRoZSBmbG93XG4gICAqL1xuICBwdWJsaWMgZG9jdW1lbnRQb2ludFRvRmxvd1BvaW50KHBvaW50OiBQb2ludCk6IFBvaW50IHtcbiAgICByZXR1cm4gdGhpcy5zcGFjZVBvaW50Q29udGV4dC5kb2N1bWVudFBvaW50VG9GbG93UG9pbnQocG9pbnQpXG4gIH1cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIHByb3RlY3RlZCB0cmFja05vZGVzKGlkeDogbnVtYmVyLCB7IG5vZGUgfTogTm9kZU1vZGVsKSB7XG4gICAgcmV0dXJuIG5vZGVcbiAgfVxuXG4gIHByb3RlY3RlZCB0cmFja0VkZ2VzKGlkeDogbnVtYmVyLCB7IGVkZ2UgfTogRWRnZU1vZGVsKSB7XG4gICAgcmV0dXJuIGVkZ2VcbiAgfVxufVxuXG5cbiIsIjxzdmc6c3ZnXG4gIHJvb3RTdmdSZWZcbiAgcm9vdFN2Z0NvbnRleHRcbiAgcm9vdFBvaW50ZXJcbiAgZmxvd1NpemVDb250cm9sbGVyXG4gIGNsYXNzPVwicm9vdC1zdmdcIlxuICAjZmxvd1xuPlxuICA8ZGVmcyBbbWFya2Vyc109XCJtYXJrZXJzKClcIiBmbG93RGVmcyAvPlxuXG4gIDxnIFtiYWNrZ3JvdW5kXT1cImJhY2tncm91bmRcIi8+XG5cbiAgPHN2ZzpnXG4gICAgbWFwQ29udGV4dFxuICAgIHNwYWNlUG9pbnRDb250ZXh0XG4gID5cbiAgICA8IS0tIENvbm5lY3Rpb24gLS0+XG4gICAgPHN2ZzpnXG4gICAgICBjb25uZWN0aW9uXG4gICAgICBbbW9kZWxdPVwiY29ubmVjdGlvblwiXG4gICAgICBbdGVtcGxhdGVdPVwiY29ubmVjdGlvblRlbXBsYXRlRGlyZWN0aXZlPy50ZW1wbGF0ZVJlZlwiXG4gICAgLz5cblxuICAgIDwhLS0gRWRnZXMgIC0tPlxuICAgIDxzdmc6Z1xuICAgICAgKm5nRm9yPVwibGV0IG1vZGVsIG9mIGVkZ2VNb2RlbHMoKTsgdHJhY2tCeTogdHJhY2tFZGdlc1wiXG4gICAgICBlZGdlXG4gICAgICBbbW9kZWxdPVwibW9kZWxcIlxuICAgICAgW2VkZ2VUZW1wbGF0ZV09XCJlZGdlVGVtcGxhdGVEaXJlY3RpdmU/LnRlbXBsYXRlUmVmXCJcbiAgICAgIFtlZGdlTGFiZWxIdG1sVGVtcGxhdGVdPVwiZWRnZUxhYmVsSHRtbERpcmVjdGl2ZT8udGVtcGxhdGVSZWZcIlxuICAgIC8+XG5cbiAgICA8IS0tIE5vZGVzIC0tPlxuICAgIDxzdmc6Z1xuICAgICAgKm5nRm9yPVwibGV0IG1vZGVsIG9mIG5vZGVNb2RlbHMoKTsgdHJhY2tCeTogdHJhY2tOb2Rlc1wiXG4gICAgICBub2RlXG4gICAgICBbbm9kZU1vZGVsXT1cIm1vZGVsXCJcbiAgICAgIFtub2RlSHRtbFRlbXBsYXRlXT1cIm5vZGVIdG1sRGlyZWN0aXZlPy50ZW1wbGF0ZVJlZlwiXG4gICAgICBbYXR0ci50cmFuc2Zvcm1dPVwibW9kZWwucG9pbnRUcmFuc2Zvcm0oKVwiXG4gICAgLz5cbiAgPC9zdmc6Zz5cblxuPC9zdmc6c3ZnPlxuIl19
347
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmZsb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvdmZsb3cvdmZsb3cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvdmZsb3cvdmZsb3cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQix1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFnQixRQUFRLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQXlCLFNBQVMsRUFBRSxRQUFRLEVBQVUsTUFBTSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhQLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXBFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBR3BFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSw4QkFBOEIsRUFBRSxxQkFBcUIsRUFBRSwwQkFBMEIsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRWhNLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRzVCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxtQkFBbUIs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QkFJN0IsMEJBQTBCO3NCQURuQyxZQUFZO3VCQUFDLDBCQUEwQjtnQkFJOUIscUJBQXFCO3NCQUQ5QixZQUFZO3VCQUFDLHFCQUFxQjtnQkFJekIsc0JBQXNCO3NCQUQvQixZQUFZO3VCQUFDLDhCQUE4QjtnQkFJbEMsMkJBQTJCO3NCQURwQyxZQUFZO3VCQUFDLDJCQUEyQjtnQkFNL0IsVUFBVTtzQkFEbkIsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBSXBCLGlCQUFpQjtzQkFEMUIsU0FBUzt1QkFBQywwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaWduYWwsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCwgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0LCBydW5JbkluamVjdGlvbkNvbnRleHQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IER5bmFtaWNOb2RlLCBOb2RlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9ub2RlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBNYXBDb250ZXh0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9tYXAtY29udGV4dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRHJhZ2dhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RyYWdnYWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5vZGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9ub2RlLm1vZGVsJztcbmltcG9ydCB7IFZpZXdwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZpZXdwb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEVkZ2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2VkZ2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IEVkZ2VNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9lZGdlLm1vZGVsJztcbmltcG9ydCB7IENvbm5lY3Rpb25UZW1wbGF0ZURpcmVjdGl2ZSwgRWRnZUxhYmVsSHRtbFRlbXBsYXRlRGlyZWN0aXZlLCBFZGdlVGVtcGxhdGVEaXJlY3RpdmUsIEdyb3VwTm9kZVRlbXBsYXRlRGlyZWN0aXZlLCBOb2RlSHRtbFRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy90ZW1wbGF0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSGFuZGxlUG9zaXRpb25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9oYW5kbGUtcG9zaXRpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBhZGROb2Rlc1RvRWRnZXMgfSBmcm9tICcuLi8uLi91dGlscy9hZGQtbm9kZXMtdG8tZWRnZXMnO1xuaW1wb3J0IHsgc2tpcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUG9pbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3BvaW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBWaWV3cG9ydFN0YXRlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy92aWV3cG9ydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRmxvd1N0YXR1c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mbG93LXN0YXR1cy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbm5lY3Rpb25Db250cm9sbGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9jb25uZWN0aW9uLWNvbnRyb2xsZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IEZsb3dFbnRpdGllc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mbG93LWVudGl0aWVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29ubmVjdGlvblNldHRpbmdzIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9jb25uZWN0aW9uLXNldHRpbmdzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDb25uZWN0aW9uTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvY29ubmVjdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBSZWZlcmVuY2VLZWVwZXIgfSBmcm9tICcuLi8uLi91dGlscy9yZWZlcmVuY2Uta2VlcGVyJztcbmltcG9ydCB7IE5vZGVzQ2hhbmdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vZGUtY2hhbmdlcy5zZXJ2aWNlJztcbmltcG9ydCB7IEVkZ2VDaGFuZ2VzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VkZ2UtY2hhbmdlcy5zZXJ2aWNlJztcbmltcG9ydCB7IE5vZGVDaGFuZ2UgfSBmcm9tICcuLi8uLi90eXBlcy9ub2RlLWNoYW5nZS50eXBlJztcbmltcG9ydCB7IENoYW5nZXNDb250cm9sbGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9jaGFuZ2VzLWNvbnRyb2xsZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IEVkZ2VDaGFuZ2UgfSBmcm9tICcuLi8uLi90eXBlcy9lZGdlLWNoYW5nZS50eXBlJztcbmltcG9ydCB7IE5vZGVSZW5kZXJpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm9kZS1yZW5kZXJpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmxvd1NldHRpbmdzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zsb3ctc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBDb21wb25lbnRFdmVudEJ1c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb21wb25lbnQtZXZlbnQtYnVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFja2dyb3VuZCB9IGZyb20gJy4uLy4uL3R5cGVzL2JhY2tncm91bmQudHlwZSc7XG5pbXBvcnQgeyBTcGFjZVBvaW50Q29udGV4dERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvc3BhY2UtcG9pbnQtY29udGV4dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRml0Vmlld09wdGlvbnMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2ZpdC12aWV3LW9wdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IE9wdGltaXphdGlvbiB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvb3B0aW1pemF0aW9uLmludGVyZmFjZSc7XG5cbmNvbnN0IGNvbm5lY3Rpb25Db250cm9sbGVySG9zdERpcmVjdGl2ZSA9IHtcbiAgZGlyZWN0aXZlOiBDb25uZWN0aW9uQ29udHJvbGxlckRpcmVjdGl2ZSxcbiAgb3V0cHV0czogWydvbkNvbm5lY3QnXVxufVxuXG5jb25zdCBjaGFuZ2VzQ29udHJvbGxlckhvc3REaXJlY3RpdmUgPSB7XG4gIGRpcmVjdGl2ZTogQ2hhbmdlc0NvbnRyb2xsZXJEaXJlY3RpdmUsXG4gIG91dHB1dHM6IFtcbiAgICAnb25Ob2Rlc0NoYW5nZScsXG4gICAgJ29uTm9kZXNDaGFuZ2UucG9zaXRpb24nLFxuICAgICdvbk5vZGVzQ2hhbmdlLnBvc2l0aW9uLnNpbmdsZScsXG4gICAgJ29uTm9kZXNDaGFuZ2UucG9zaXRpb24ubWFueScsXG4gICAgJ29uTm9kZXNDaGFuZ2UuYWRkJyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5hZGQuc2luZ2xlJyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5hZGQubWFueScsXG4gICAgJ29uTm9kZXNDaGFuZ2UucmVtb3ZlJyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5yZW1vdmUuc2luZ2xlJyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5yZW1vdmUubWFueScsXG4gICAgJ29uTm9kZXNDaGFuZ2Uuc2VsZWN0JyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5zZWxlY3Quc2luZ2xlJyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5zZWxlY3QubWFueScsXG4gICAgJ29uRWRnZXNDaGFuZ2UnLFxuICAgICdvbkVkZ2VzQ2hhbmdlLmRldGFjaGVkJyxcbiAgICAnb25FZGdlc0NoYW5nZS5kZXRhY2hlZC5zaW5nbGUnLFxuICAgICdvbkVkZ2VzQ2hhbmdlLmRldGFjaGVkLm1hbnknLFxuICAgICdvbkVkZ2VzQ2hhbmdlLmFkZCcsXG4gICAgJ29uRWRnZXNDaGFuZ2UuYWRkLnNpbmdsZScsXG4gICAgJ29uRWRnZXNDaGFuZ2UuYWRkLm1hbnknLFxuICAgICdvbkVkZ2VzQ2hhbmdlLnJlbW92ZScsXG4gICAgJ29uRWRnZXNDaGFuZ2UucmVtb3ZlLnNpbmdsZScsXG4gICAgJ29uRWRnZXNDaGFuZ2UucmVtb3ZlLm1hbnknLFxuICAgICdvbkVkZ2VzQ2hhbmdlLnNlbGVjdCcsXG4gICAgJ29uRWRnZXNDaGFuZ2Uuc2VsZWN0LnNpbmdsZScsXG4gICAgJ29uRWRnZXNDaGFuZ2Uuc2VsZWN0Lm1hbnknLFxuICBdXG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZmbG93JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3ZmbG93LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdmZsb3cuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIERyYWdnYWJsZVNlcnZpY2UsXG4gICAgVmlld3BvcnRTZXJ2aWNlLFxuICAgIEZsb3dTdGF0dXNTZXJ2aWNlLFxuICAgIEZsb3dFbnRpdGllc1NlcnZpY2UsXG4gICAgTm9kZXNDaGFuZ2VTZXJ2aWNlLFxuICAgIEVkZ2VDaGFuZ2VzU2VydmljZSxcbiAgICBOb2RlUmVuZGVyaW5nU2VydmljZSxcbiAgICBTZWxlY3Rpb25TZXJ2aWNlLFxuICAgIEZsb3dTZXR0aW5nc1NlcnZpY2UsXG4gICAgQ29tcG9uZW50RXZlbnRCdXNTZXJ2aWNlXG4gIF0sXG4gIGhvc3REaXJlY3RpdmVzOiBbXG4gICAgY29ubmVjdGlvbkNvbnRyb2xsZXJIb3N0RGlyZWN0aXZlLFxuICAgIGNoYW5nZXNDb250cm9sbGVySG9zdERpcmVjdGl2ZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFZmbG93Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLy8gI3JlZ2lvbiBESVxuICBwcml2YXRlIHZpZXdwb3J0U2VydmljZSA9IGluamVjdChWaWV3cG9ydFNlcnZpY2UpXG4gIHByaXZhdGUgZmxvd0VudGl0aWVzU2VydmljZSA9IGluamVjdChGbG93RW50aXRpZXNTZXJ2aWNlKVxuICBwcml2YXRlIG5vZGVzQ2hhbmdlU2VydmljZSA9IGluamVjdChOb2Rlc0NoYW5nZVNlcnZpY2UpXG4gIHByaXZhdGUgZWRnZXNDaGFuZ2VTZXJ2aWNlID0gaW5qZWN0KEVkZ2VDaGFuZ2VzU2VydmljZSlcbiAgcHJpdmF0ZSBub2RlUmVuZGVyaW5nU2VydmljZSA9IGluamVjdChOb2RlUmVuZGVyaW5nU2VydmljZSlcbiAgcHJpdmF0ZSBmbG93U2V0dGluZ3NTZXJ2aWNlID0gaW5qZWN0KEZsb3dTZXR0aW5nc1NlcnZpY2UpXG4gIHByaXZhdGUgY29tcG9uZW50RXZlbnRCdXNTZXJ2aWNlID0gaW5qZWN0KENvbXBvbmVudEV2ZW50QnVzU2VydmljZSlcbiAgcHJpdmF0ZSBpbmplY3RvciA9IGluamVjdChJbmplY3RvcilcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gU0VUVElOR1NcblxuICAvKipcbiAgICogU2l6ZSBmb3IgZmxvdyB2aWV3XG4gICAqXG4gICAqIGFjY2VwdHNcbiAgICogLSBhYnNvbHV0ZSBzaXplIGluIGZvcm1hdCBbd2lkdGgsIGhlaWdodF0gb3JcbiAgICogLSAnYXV0bycgdG8gY29tcHV0ZSBzaXplIGJhc2VkIG9uIHBhcmVudCBlbGVtZW50IHNpemVcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgdmlldyh2aWV3OiBbbnVtYmVyLCBudW1iZXJdIHwgJ2F1dG8nKSB7XG4gICAgdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLnZpZXcuc2V0KHZpZXcpXG4gIH1cblxuICAvKipcbiAgICogTWluaW11bSB6b29tIHZhbHVlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG1pblpvb20odmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuZmxvd1NldHRpbmdzU2VydmljZS5taW5ab29tLnNldCh2YWx1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXhpbXVtIHpvb20gdmFsdWVcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbWF4Wm9vbSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLm1heFpvb20uc2V0KHZhbHVlKVxuICB9XG5cbiAgLyoqXG4gICAqIE9iamVjdCB0aGF0IGNvbnRyb2xzIGZsb3cgZGlyZWN0aW9uLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gYXJjaGlldmUgcmlnaHQgdG8gbGVmdCBkaXJlY3Rpb25cbiAgICogdGhlbiB5b3UgbmVlZCB0byBwYXNzIHRoZXNlIHBvc2l0aW9ucyB7IHNvdXJjZTogJ2xlZnQnLCB0YXJnZXQ6ICdyaWdodCcgfVxuICAgKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBoYW5kbGVQb3NpdGlvbnMoaGFuZGxlUG9zaXRpb25zOiBIYW5kbGVQb3NpdGlvbnMpIHtcbiAgICB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UuaGFuZGxlUG9zaXRpb25zLnNldChoYW5kbGVQb3NpdGlvbnMpXG4gIH1cblxuICAvKipcbiAgICogQmFja2dyb3VuZCBmb3IgZmxvd1xuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGJhY2tncm91bmQ6IEJhY2tncm91bmQgfCBzdHJpbmcgPSAnI2ZmZidcblxuICBASW5wdXQoKVxuICBwdWJsaWMgb3B0aW1pemF0aW9uOiBPcHRpbWl6YXRpb24gPSB7XG4gICAgY29tcHV0ZUxheWVyc09uSW5pdDogdHJ1ZVxuICB9XG5cbiAgLyoqXG4gICAqIEdsb2JhbCBydWxlIGlmIHlvdSBjYW4gb3IgY2FuJ3Qgc2VsZWN0IGVudGl0aWVzXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGVudGl0aWVzU2VsZWN0YWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuZmxvd1NldHRpbmdzU2VydmljZS5lbnRpdGllc1NlbGVjdGFibGUuc2V0KHZhbHVlKVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHRpbmdzIGZvciBjb25uZWN0aW9uIChpdCByZW5kZXJzIHdoZW4gdXNlciB0cmllcyB0byBjcmVhdGUgZWRnZSBiZXR3ZWVuIG5vZGVzKVxuICAgKlxuICAgKiBZb3UgbmVlZCB0byBwYXNzIGBDb25uZWN0aW9uU2V0dGluZ3NgIGluIHRoaXMgaW5wdXQuXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IChzZXR0aW5nczogQ29ubmVjdGlvblNldHRpbmdzKSA9PiBuZXcgQ29ubmVjdGlvbk1vZGVsKHNldHRpbmdzKSB9KVxuICBwdWJsaWMgc2V0IGNvbm5lY3Rpb24oY29ubmVjdGlvbjogQ29ubmVjdGlvbk1vZGVsKSB7IHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5jb25uZWN0aW9uLnNldChjb25uZWN0aW9uKSB9XG5cbiAgcHVibGljIGdldCBjb25uZWN0aW9uKCkgeyByZXR1cm4gdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLmNvbm5lY3Rpb24oKSB9XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIE1BSU5fSU5QVVRTXG4gIC8qKlxuICAgKiBOb2RlcyB0byByZW5kZXJcbiAgICovXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIHB1YmxpYyBzZXQgbm9kZXMobmV3Tm9kZXM6IE5vZGVbXSB8IER5bmFtaWNOb2RlW10pIHtcbiAgICBjb25zdCBuZXdNb2RlbHMgPSBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5pbmplY3RvcixcbiAgICAgICgpID0+IFJlZmVyZW5jZUtlZXBlci5ub2RlcyhuZXdOb2RlcywgdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLm5vZGVzKCkpXG4gICAgKVxuXG4gICAgLy8gcXVpY2sgYW5kIGRpcnR5IGJpbmRpbmcgbm9kZXMgdG8gZWRnZXNcbiAgICBhZGROb2Rlc1RvRWRnZXMobmV3TW9kZWxzLCB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UuZWRnZXMoKSlcblxuICAgIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5ub2Rlcy5zZXQobmV3TW9kZWxzKVxuICB9XG5cbiAgcHJvdGVjdGVkIG5vZGVNb2RlbHMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm5vZGVSZW5kZXJpbmdTZXJ2aWNlLm5vZGVzKCkpXG5cbiAgLyoqXG4gICAqIEVkZ2VzIHRvIHJlbmRlclxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBlZGdlcyhuZXdFZGdlczogRWRnZVtdKSB7XG4gICAgY29uc3QgbmV3TW9kZWxzID0gcnVuSW5JbmplY3Rpb25Db250ZXh0KHRoaXMuaW5qZWN0b3IsXG4gICAgICAoKSA9PiBSZWZlcmVuY2VLZWVwZXIuZWRnZXMobmV3RWRnZXMsIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5lZGdlcygpKVxuICAgIClcblxuICAgIC8vIHF1aWNrIGFuZCBkaXJ0eSBiaW5kaW5nIG5vZGVzIHRvIGVkZ2VzXG4gICAgYWRkTm9kZXNUb0VkZ2VzKHRoaXMubm9kZU1vZGVscygpLCBuZXdNb2RlbHMpXG5cbiAgICB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UuZWRnZXMuc2V0KG5ld01vZGVscylcbiAgfVxuXG4gIHByb3RlY3RlZCBlZGdlTW9kZWxzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLnZhbGlkRWRnZXMoKSlcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gT1VUUFVUU1xuICAvKipcbiAgICogRXZlbnQgdGhhdCBhY2N1bXVsYXRlcyBhbGwgY3VzdG9tIG5vZGUgZXZlbnRzXG4gICAqXG4gICAqIEBleHBlcmltZW50YWxcbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgb25Db21wb25lbnROb2RlRXZlbnQgPSB0aGlzLmNvbXBvbmVudEV2ZW50QnVzU2VydmljZS5ldmVudCQgYXMgYW55IC8vIFRPRE86IHJlc2VhcmNoIGhvdyB0byByZW1vdmUgYXMgYW55XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIFRFTVBMQVRFU1xuICBAQ29udGVudENoaWxkKE5vZGVIdG1sVGVtcGxhdGVEaXJlY3RpdmUpXG4gIHByb3RlY3RlZCBub2RlVGVtcGxhdGVEaXJlY3RpdmU/OiBOb2RlSHRtbFRlbXBsYXRlRGlyZWN0aXZlXG5cbiAgQENvbnRlbnRDaGlsZChHcm91cE5vZGVUZW1wbGF0ZURpcmVjdGl2ZSlcbiAgcHJvdGVjdGVkIGdyb3VwTm9kZVRlbXBsYXRlRGlyZWN0aXZlPzogR3JvdXBOb2RlVGVtcGxhdGVEaXJlY3RpdmVcblxuICBAQ29udGVudENoaWxkKEVkZ2VUZW1wbGF0ZURpcmVjdGl2ZSlcbiAgcHJvdGVjdGVkIGVkZ2VUZW1wbGF0ZURpcmVjdGl2ZT86IEVkZ2VUZW1wbGF0ZURpcmVjdGl2ZVxuXG4gIEBDb250ZW50Q2hpbGQoRWRnZUxhYmVsSHRtbFRlbXBsYXRlRGlyZWN0aXZlKVxuICBwcm90ZWN0ZWQgZWRnZUxhYmVsSHRtbERpcmVjdGl2ZT86IEVkZ2VMYWJlbEh0bWxUZW1wbGF0ZURpcmVjdGl2ZVxuXG4gIEBDb250ZW50Q2hpbGQoQ29ubmVjdGlvblRlbXBsYXRlRGlyZWN0aXZlKVxuICBwcm90ZWN0ZWQgY29ubmVjdGlvblRlbXBsYXRlRGlyZWN0aXZlPzogQ29ubmVjdGlvblRlbXBsYXRlRGlyZWN0aXZlXG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIERJUkVDVElWRVNcbiAgQFZpZXdDaGlsZChNYXBDb250ZXh0RGlyZWN0aXZlKVxuICBwcm90ZWN0ZWQgbWFwQ29udGV4dCE6IE1hcENvbnRleHREaXJlY3RpdmVcblxuICBAVmlld0NoaWxkKFNwYWNlUG9pbnRDb250ZXh0RGlyZWN0aXZlKVxuICBwcm90ZWN0ZWQgc3BhY2VQb2ludENvbnRleHQhOiBTcGFjZVBvaW50Q29udGV4dERpcmVjdGl2ZVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBTSUdOQUxfQVBJXG4gIC8qKlxuICAgKiBTaWduYWwgZm9yIHJlYWRpbmcgdmlld3BvcnQgY2hhbmdlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmlld3BvcnQgPSB0aGlzLnZpZXdwb3J0U2VydmljZS5yZWFkYWJsZVZpZXdwb3J0LmFzUmVhZG9ubHkoKVxuXG4gIC8qKlxuICAgKiBTaWduYWwgZm9yIHJlYWRpbmcgbm9kZXMgY2hhbmdlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbm9kZXNDaGFuZ2UgPVxuICAgIHRvU2lnbmFsKHRoaXMubm9kZXNDaGFuZ2VTZXJ2aWNlLmNoYW5nZXMkLCB7IGluaXRpYWxWYWx1ZTogW10gYXMgTm9kZUNoYW5nZVtdIH0pXG5cbiAgLyoqXG4gICAqIFNpZ25hbCB0byByZWFkaW5nIGVkZ2VzIGNoYW5nZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGVkZ2VzQ2hhbmdlID1cbiAgICB0b1NpZ25hbCh0aGlzLmVkZ2VzQ2hhbmdlU2VydmljZS5jaGFuZ2VzJCwgeyBpbml0aWFsVmFsdWU6IFtdIGFzIEVkZ2VDaGFuZ2VbXSB9KVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBSWF9BUElcbiAgLyoqXG4gICAqIE9ic2VydmFibGUgd2l0aCB2aWV3cG9ydCBjaGFuZ2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2aWV3cG9ydENoYW5nZSQgPSB0b09ic2VydmFibGUodGhpcy52aWV3cG9ydFNlcnZpY2UucmVhZGFibGVWaWV3cG9ydClcbiAgICAucGlwZShza2lwKDEpKSAvLyBza2lwIGRlZmF1bHQgdmFsdWUgdGhhdCBzZXQgYnkgc2lnbmFsXG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgd2l0aCBub2RlcyBjaGFuZ2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBub2Rlc0NoYW5nZSQgPSB0aGlzLm5vZGVzQ2hhbmdlU2VydmljZS5jaGFuZ2VzJFxuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIHdpdGggZWRnZXMgY2hhbmdlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZWRnZXNDaGFuZ2UkID0gdGhpcy5lZGdlc0NoYW5nZVNlcnZpY2UuY2hhbmdlcyRcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIHByb3RlY3RlZCBtYXJrZXJzID0gdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLm1hcmtlcnNcblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRJbml0aWFsTm9kZXNPcmRlcigpXG4gIH1cblxuICAvLyAjcmVnaW9uIE1FVEhPRFNfQVBJXG4gIC8qKlxuICAgKiBDaGFuZ2Ugdmlld3BvcnQgdG8gc3BlY2lmaWVkIHN0YXRlXG4gICAqXG4gICAqIEBwYXJhbSB2aWV3cG9ydCB2aWV3cG9ydCBzdGF0ZVxuICAgKi9cbiAgcHVibGljIHZpZXdwb3J0VG8odmlld3BvcnQ6IFZpZXdwb3J0U3RhdGUpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdwb3J0U2VydmljZS53cml0YWJsZVZpZXdwb3J0LnNldCh7IGNoYW5nZVR5cGU6ICdhYnNvbHV0ZScsIHN0YXRlOiB2aWV3cG9ydCwgZHVyYXRpb246IDAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFuZ2Ugem9vbVxuICAgKlxuICAgKiBAcGFyYW0gem9vbSB6b29tIHZhbHVlXG4gICAqL1xuICBwdWJsaWMgem9vbVRvKHpvb206IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMudmlld3BvcnRTZXJ2aWNlLndyaXRhYmxlVmlld3BvcnQuc2V0KHsgY2hhbmdlVHlwZTogJ2Fic29sdXRlJywgc3RhdGU6IHsgem9vbSB9LCBkdXJhdGlvbjogMCB9KVxuICB9XG5cbiAgLyoqXG4gICAqIE1vdmUgdG8gc3BlY2lmaWVkIGNvb3JkaW5hdGVcbiAgICpcbiAgICogQHBhcmFtIHBvaW50IHBvaW50IHdoZXJlIHRvIG1vdmVcbiAgICovXG4gIHB1YmxpYyBwYW5Ubyhwb2ludDogUG9pbnQpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdwb3J0U2VydmljZS53cml0YWJsZVZpZXdwb3J0LnNldCh7IGNoYW5nZVR5cGU6ICdhYnNvbHV0ZScsIHN0YXRlOiBwb2ludCwgZHVyYXRpb246IDAgfSlcbiAgfVxuXG4gIHB1YmxpYyBmaXRWaWV3KG9wdGlvbnM/OiBGaXRWaWV3T3B0aW9ucykge1xuICAgIHRoaXMudmlld3BvcnRTZXJ2aWNlLmZpdFZpZXcob3B0aW9ucylcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbm9kZSBieSBpZFxuICAgKlxuICAgKiBAcGFyYW0gaWQgbm9kZSBpZFxuICAgKi9cbiAgcHVibGljIGdldE5vZGU8VCA9IHVua25vd24+KGlkOiBzdHJpbmcpOiBOb2RlPFQ+IHwgRHluYW1pY05vZGU8VD4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UuZ2V0Tm9kZTxUPihpZCk/Lm5vZGVcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW5jIG1ldGhvZCB0byBnZXQgZGV0YWNoZWQgZWRnZXNcbiAgICovXG4gIHB1YmxpYyBnZXREZXRhY2hlZEVkZ2VzKCk6IEVkZ2VbXSB7XG4gICAgcmV0dXJuIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5nZXREZXRhY2hlZEVkZ2VzKCkubWFwKGUgPT4gZS5lZGdlKVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgcG9pbnQgcmVjZWl2ZWQgZnJvbSBkb2N1bWVudCB0byBwb2ludCBvbiB0aGUgZmxvd1xuICAgKi9cbiAgcHVibGljIGRvY3VtZW50UG9pbnRUb0Zsb3dQb2ludChwb2ludDogUG9pbnQpOiBQb2ludCB7XG4gICAgcmV0dXJuIHRoaXMuc3BhY2VQb2ludENvbnRleHQuZG9jdW1lbnRQb2ludFRvRmxvd1BvaW50KHBvaW50KVxuICB9XG4gIC8vICNlbmRyZWdpb25cblxuICBwcm90ZWN0ZWQgdHJhY2tOb2RlcyhpZHg6IG51bWJlciwgeyBub2RlIH06IE5vZGVNb2RlbCkge1xuICAgIHJldHVybiBub2RlXG4gIH1cblxuICBwcm90ZWN0ZWQgdHJhY2tFZGdlcyhpZHg6IG51bWJlciwgeyBlZGdlIH06IEVkZ2VNb2RlbCkge1xuICAgIHJldHVybiBlZGdlXG4gIH1cblxuICBwcml2YXRlIHNldEluaXRpYWxOb2Rlc09yZGVyKCkge1xuICAgIGlmICh0aGlzLm9wdGltaXphdGlvbi5jb21wdXRlTGF5ZXJzT25Jbml0KSB7XG5cbiAgICAgIHRoaXMubm9kZU1vZGVscygpLmZvckVhY2gobW9kZWwgPT4ge1xuICAgICAgICBzd2l0Y2ggKG1vZGVsLm5vZGUudHlwZSkge1xuICAgICAgICAgIGNhc2UgJ2RlZmF1bHQtZ3JvdXAnOlxuICAgICAgICAgIGNhc2UgJ3RlbXBsYXRlLWdyb3VwJzoge1xuICAgICAgICAgICAgdGhpcy5ub2RlUmVuZGVyaW5nU2VydmljZS5wdWxsTm9kZShtb2RlbClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG5cbiIsIjxzdmc6c3ZnXG4gIHJvb3RTdmdSZWZcbiAgcm9vdFN2Z0NvbnRleHRcbiAgcm9vdFBvaW50ZXJcbiAgZmxvd1NpemVDb250cm9sbGVyXG4gIGNsYXNzPVwicm9vdC1zdmdcIlxuICAjZmxvd1xuPlxuICA8ZGVmcyBbbWFya2Vyc109XCJtYXJrZXJzKClcIiBmbG93RGVmcyAvPlxuXG4gIDxnIFtiYWNrZ3JvdW5kXT1cImJhY2tncm91bmRcIi8+XG5cbiAgPHN2ZzpnXG4gICAgbWFwQ29udGV4dFxuICAgIHNwYWNlUG9pbnRDb250ZXh0XG4gID5cbiAgICA8IS0tIENvbm5lY3Rpb24gLS0+XG4gICAgPHN2ZzpnXG4gICAgICBjb25uZWN0aW9uXG4gICAgICBbbW9kZWxdPVwiY29ubmVjdGlvblwiXG4gICAgICBbdGVtcGxhdGVdPVwiY29ubmVjdGlvblRlbXBsYXRlRGlyZWN0aXZlPy50ZW1wbGF0ZVJlZlwiXG4gICAgLz5cblxuICAgIDwhLS0gRWRnZXMgIC0tPlxuICAgIDxzdmc6Z1xuICAgICAgKm5nRm9yPVwibGV0IG1vZGVsIG9mIGVkZ2VNb2RlbHMoKTsgdHJhY2tCeTogdHJhY2tFZGdlc1wiXG4gICAgICBlZGdlXG4gICAgICBbbW9kZWxdPVwibW9kZWxcIlxuICAgICAgW2VkZ2VUZW1wbGF0ZV09XCJlZGdlVGVtcGxhdGVEaXJlY3RpdmU/LnRlbXBsYXRlUmVmXCJcbiAgICAgIFtlZGdlTGFiZWxIdG1sVGVtcGxhdGVdPVwiZWRnZUxhYmVsSHRtbERpcmVjdGl2ZT8udGVtcGxhdGVSZWZcIlxuICAgIC8+XG5cbiAgICA8IS0tIE5vZGVzIC0tPlxuICAgIDxzdmc6Z1xuICAgICAgKm5nRm9yPVwibGV0IG1vZGVsIG9mIG5vZGVNb2RlbHMoKTsgdHJhY2tCeTogdHJhY2tOb2Rlc1wiXG4gICAgICBub2RlXG4gICAgICBbbm9kZU1vZGVsXT1cIm1vZGVsXCJcbiAgICAgIFtub2RlVGVtcGxhdGVdPVwibm9kZVRlbXBsYXRlRGlyZWN0aXZlPy50ZW1wbGF0ZVJlZlwiXG4gICAgICBbZ3JvdXBOb2RlVGVtcGxhdGVdPVwiZ3JvdXBOb2RlVGVtcGxhdGVEaXJlY3RpdmU/LnRlbXBsYXRlUmVmXCJcbiAgICAgIFthdHRyLnRyYW5zZm9ybV09XCJtb2RlbC5wb2ludFRyYW5zZm9ybSgpXCJcbiAgICAvPlxuICA8L3N2ZzpnPlxuXG48L3N2Zzpzdmc+XG4iXX0=
@@ -44,6 +44,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
44
44
  type: Directive,
45
45
  args: [{ selector: 'ng-template[nodeHtml]' }]
46
46
  }] });
47
+ export class GroupNodeTemplateDirective {
48
+ constructor() {
49
+ this.templateRef = inject(TemplateRef);
50
+ }
51
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GroupNodeTemplateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
52
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: GroupNodeTemplateDirective, selector: "ng-template[groupNode]", ngImport: i0 }); }
53
+ }
54
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GroupNodeTemplateDirective, decorators: [{
55
+ type: Directive,
56
+ args: [{ selector: 'ng-template[groupNode]' }]
57
+ }] });
47
58
  export class HandleTemplateDirective {
48
59
  constructor() {
49
60
  this.templateRef = inject(TemplateRef);
@@ -55,4 +66,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
55
66
  type: Directive,
56
67
  args: [{ selector: 'ng-template[handle]' }]
57
68
  }] });
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2RpcmVjdGl2ZXMvdGVtcGxhdGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFJL0QsTUFBTSxPQUFPLHFCQUFxQjtJQURsQztRQUVTLGdCQUFXLEdBQUcsTUFBTSxDQUEyQixXQUFXLENBQUMsQ0FBQTtLQUNuRTsrR0FGWSxxQkFBcUI7bUdBQXJCLHFCQUFxQjs7NEZBQXJCLHFCQUFxQjtrQkFEakMsU0FBUzttQkFBQyxFQUFFLFFBQVEsRUFBRSxtQkFBbUIsRUFBRTs7QUFNNUMsTUFBTSxPQUFPLDJCQUEyQjtJQUR4QztRQUVTLGdCQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0tBQ3pDOytHQUZZLDJCQUEyQjttR0FBM0IsMkJBQTJCOzs0RkFBM0IsMkJBQTJCO2tCQUR2QyxTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLHlCQUF5QixFQUFFOztBQU1sRCxNQUFNLE9BQU8sOEJBQThCO0lBRDNDO1FBRVMsZ0JBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUE7S0FDekM7K0dBRlksOEJBQThCO21HQUE5Qiw4QkFBOEI7OzRGQUE5Qiw4QkFBOEI7a0JBRDFDLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsNEJBQTRCLEVBQUU7O0FBTXJELE1BQU0sT0FBTyx5QkFBeUI7SUFEdEM7UUFFUyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQTtLQUN6QzsrR0FGWSx5QkFBeUI7bUdBQXpCLHlCQUF5Qjs7NEZBQXpCLHlCQUF5QjtrQkFEckMsU0FBUzttQkFBQyxFQUFFLFFBQVEsRUFBRSx1QkFBdUIsRUFBRTs7QUFNaEQsTUFBTSxPQUFPLHVCQUF1QjtJQURwQztRQUVTLGdCQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0tBQ3pDOytHQUZZLHVCQUF1QjttR0FBdkIsdUJBQXVCOzs0RkFBdkIsdUJBQXVCO2tCQURuQyxTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLHFCQUFxQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBUZW1wbGF0ZVJlZiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFZGdlQ29udGV4dCB9IGZyb20gJy4uL2ludGVyZmFjZXMvdGVtcGxhdGUtY29udGV4dC5pbnRlcmZhY2UnO1xuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICduZy10ZW1wbGF0ZVtlZGdlXScgfSlcbmV4cG9ydCBjbGFzcyBFZGdlVGVtcGxhdGVEaXJlY3RpdmUge1xuICBwdWJsaWMgdGVtcGxhdGVSZWYgPSBpbmplY3Q8VGVtcGxhdGVSZWY8RWRnZUNvbnRleHQ+PihUZW1wbGF0ZVJlZilcbn1cblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnbmctdGVtcGxhdGVbY29ubmVjdGlvbl0nIH0pXG5leHBvcnQgY2xhc3MgQ29ubmVjdGlvblRlbXBsYXRlRGlyZWN0aXZlIHtcbiAgcHVibGljIHRlbXBsYXRlUmVmID0gaW5qZWN0KFRlbXBsYXRlUmVmKVxufVxuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICduZy10ZW1wbGF0ZVtlZGdlTGFiZWxIdG1sXScgfSlcbmV4cG9ydCBjbGFzcyBFZGdlTGFiZWxIdG1sVGVtcGxhdGVEaXJlY3RpdmUge1xuICBwdWJsaWMgdGVtcGxhdGVSZWYgPSBpbmplY3QoVGVtcGxhdGVSZWYpXG59XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ25nLXRlbXBsYXRlW25vZGVIdG1sXScgfSlcbmV4cG9ydCBjbGFzcyBOb2RlSHRtbFRlbXBsYXRlRGlyZWN0aXZlIHtcbiAgcHVibGljIHRlbXBsYXRlUmVmID0gaW5qZWN0KFRlbXBsYXRlUmVmKVxufVxuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICduZy10ZW1wbGF0ZVtoYW5kbGVdJyB9KVxuZXhwb3J0IGNsYXNzIEhhbmRsZVRlbXBsYXRlRGlyZWN0aXZlIHtcbiAgcHVibGljIHRlbXBsYXRlUmVmID0gaW5qZWN0KFRlbXBsYXRlUmVmKVxufVxuIl19
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2RpcmVjdGl2ZXMvdGVtcGxhdGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFJL0QsTUFBTSxPQUFPLHFCQUFxQjtJQURsQztRQUVTLGdCQUFXLEdBQUcsTUFBTSxDQUEyQixXQUFXLENBQUMsQ0FBQTtLQUNuRTsrR0FGWSxxQkFBcUI7bUdBQXJCLHFCQUFxQjs7NEZBQXJCLHFCQUFxQjtrQkFEakMsU0FBUzttQkFBQyxFQUFFLFFBQVEsRUFBRSxtQkFBbUIsRUFBRTs7QUFNNUMsTUFBTSxPQUFPLDJCQUEyQjtJQUR4QztRQUVTLGdCQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0tBQ3pDOytHQUZZLDJCQUEyQjttR0FBM0IsMkJBQTJCOzs0RkFBM0IsMkJBQTJCO2tCQUR2QyxTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLHlCQUF5QixFQUFFOztBQU1sRCxNQUFNLE9BQU8sOEJBQThCO0lBRDNDO1FBRVMsZ0JBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUE7S0FDekM7K0dBRlksOEJBQThCO21HQUE5Qiw4QkFBOEI7OzRGQUE5Qiw4QkFBOEI7a0JBRDFDLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsNEJBQTRCLEVBQUU7O0FBTXJELE1BQU0sT0FBTyx5QkFBeUI7SUFEdEM7UUFFUyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQTtLQUN6QzsrR0FGWSx5QkFBeUI7bUdBQXpCLHlCQUF5Qjs7NEZBQXpCLHlCQUF5QjtrQkFEckMsU0FBUzttQkFBQyxFQUFFLFFBQVEsRUFBRSx1QkFBdUIsRUFBRTs7QUFNaEQsTUFBTSxPQUFPLDBCQUEwQjtJQUR2QztRQUVTLGdCQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0tBQ3pDOytHQUZZLDBCQUEwQjttR0FBMUIsMEJBQTBCOzs0RkFBMUIsMEJBQTBCO2tCQUR0QyxTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLHdCQUF3QixFQUFFOztBQU1qRCxNQUFNLE9BQU8sdUJBQXVCO0lBRHBDO1FBRVMsZ0JBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUE7S0FDekM7K0dBRlksdUJBQXVCO21HQUF2Qix1QkFBdUI7OzRGQUF2Qix1QkFBdUI7a0JBRG5DLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIFRlbXBsYXRlUmVmLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEVkZ2VDb250ZXh0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy90ZW1wbGF0ZS1jb250ZXh0LmludGVyZmFjZSc7XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ25nLXRlbXBsYXRlW2VkZ2VdJyB9KVxuZXhwb3J0IGNsYXNzIEVkZ2VUZW1wbGF0ZURpcmVjdGl2ZSB7XG4gIHB1YmxpYyB0ZW1wbGF0ZVJlZiA9IGluamVjdDxUZW1wbGF0ZVJlZjxFZGdlQ29udGV4dD4+KFRlbXBsYXRlUmVmKVxufVxuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICduZy10ZW1wbGF0ZVtjb25uZWN0aW9uXScgfSlcbmV4cG9ydCBjbGFzcyBDb25uZWN0aW9uVGVtcGxhdGVEaXJlY3RpdmUge1xuICBwdWJsaWMgdGVtcGxhdGVSZWYgPSBpbmplY3QoVGVtcGxhdGVSZWYpXG59XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ25nLXRlbXBsYXRlW2VkZ2VMYWJlbEh0bWxdJyB9KVxuZXhwb3J0IGNsYXNzIEVkZ2VMYWJlbEh0bWxUZW1wbGF0ZURpcmVjdGl2ZSB7XG4gIHB1YmxpYyB0ZW1wbGF0ZVJlZiA9IGluamVjdChUZW1wbGF0ZVJlZilcbn1cblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnbmctdGVtcGxhdGVbbm9kZUh0bWxdJyB9KVxuZXhwb3J0IGNsYXNzIE5vZGVIdG1sVGVtcGxhdGVEaXJlY3RpdmUge1xuICBwdWJsaWMgdGVtcGxhdGVSZWYgPSBpbmplY3QoVGVtcGxhdGVSZWYpXG59XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ25nLXRlbXBsYXRlW2dyb3VwTm9kZV0nIH0pXG5leHBvcnQgY2xhc3MgR3JvdXBOb2RlVGVtcGxhdGVEaXJlY3RpdmUge1xuICBwdWJsaWMgdGVtcGxhdGVSZWYgPSBpbmplY3QoVGVtcGxhdGVSZWYpXG59XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ25nLXRlbXBsYXRlW2hhbmRsZV0nIH0pXG5leHBvcnQgY2xhc3MgSGFuZGxlVGVtcGxhdGVEaXJlY3RpdmUge1xuICBwdWJsaWMgdGVtcGxhdGVSZWYgPSBpbmplY3QoVGVtcGxhdGVSZWYpXG59XG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LW5vZGUtZXZlbnQuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2ludGVyZmFjZXMvY29tcG9uZW50LW5vZGUtZXZlbnQuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQ3VzdG9tTm9kZUNvbXBvbmVudCB9IGZyb20gXCIuLi9wdWJsaWMtY29tcG9uZW50cy9jdXN0b20tbm9kZS5jb21wb25lbnRcIjtcblxudHlwZSBFdmVudEluZm88VD4gPSBUIGV4dGVuZHMgRXZlbnRFbWl0dGVyPGluZmVyIFU+ID8gVSA6IG5ldmVyO1xuXG50eXBlIEV2ZW50S2V5czxUPiA9IHtcbiAgW0sgaW4ga2V5b2YgVF06IFRbS10gZXh0ZW5kcyBFdmVudEVtaXR0ZXI8YW55PiA/IEsgOiBuZXZlclxufVtrZXlvZiBUXTtcblxudHlwZSBFdmVudFNoYXBlPFQsIEsgZXh0ZW5kcyBrZXlvZiBUPiA9IHtcbiAgW1AgaW4gS106IHsgZXZlbnROYW1lOiBQLCBldmVudFBheWxvYWQ6IEV2ZW50SW5mbzxUW1BdPiB9XG59W0tdO1xuXG50eXBlIEV2ZW50c0Zyb21Db21wb25lbnQ8VD4gPSBFdmVudFNoYXBlPFQsIEV2ZW50S2V5czxUPj47XG5cbi8qKlxuICogRXZlbnQgb2YgY3VzdG9tIGNvbXBvbmVudCBub2RlXG4gKlxuICogR2VuZXJpYyBhY2NlcHRzIGFycmF5IG9mIGN1c3RvbSBjb21wb25lbnRzIGFuZCBtZXJnZSB0aGVpciBldmVudCBlbWl0dGVycyBmb3IgdHlwZS1zYWZlXG4gKiBldmVudCBoYW5kbGluZ1xuICpcbiAqIEBleHBlcmltZW50YWxcbiAqL1xuZXhwb3J0IHR5cGUgQ29tcG9uZW50Tm9kZUV2ZW50PFQgZXh0ZW5kcyBDdXN0b21Ob2RlQ29tcG9uZW50W10+ID0geyBub2RlSWQ6IHN0cmluZyB9ICYge1xuICBbSSBpbiBrZXlvZiBUXTogRXZlbnRzRnJvbUNvbXBvbmVudDxUW0ldPlxufVtudW1iZXJdO1xuXG5leHBvcnQgdHlwZSBBbnlDb21wb25lbnROb2RlRXZlbnQgPSB7XG4gIG5vZGVJZDogc3RyaW5nXG4gIGV2ZW50TmFtZTogc3RyaW5nXG4gIGV2ZW50UGF5bG9hZDogdW5rbm93blxufVxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LW5vZGUtZXZlbnQuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2ludGVyZmFjZXMvY29tcG9uZW50LW5vZGUtZXZlbnQuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQ3VzdG9tTm9kZUNvbXBvbmVudCB9IGZyb20gXCIuLi9wdWJsaWMtY29tcG9uZW50cy9jdXN0b20tbm9kZS5jb21wb25lbnRcIjtcbmltcG9ydCB7IEN1c3RvbUR5bmFtaWNOb2RlQ29tcG9uZW50IH0gZnJvbSBcIi4uL3B1YmxpYy1jb21wb25lbnRzL2N1c3RvbS1keW5hbWljLW5vZGUuY29tcG9uZW50XCI7XG5cbnR5cGUgRXZlbnRJbmZvPFQ+ID0gVCBleHRlbmRzIEV2ZW50RW1pdHRlcjxpbmZlciBVPiA/IFUgOiBuZXZlcjtcblxudHlwZSBFdmVudEtleXM8VD4gPSB7XG4gIFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgRXZlbnRFbWl0dGVyPGFueT4gPyBLIDogbmV2ZXJcbn1ba2V5b2YgVF07XG5cbnR5cGUgRXZlbnRTaGFwZTxULCBLIGV4dGVuZHMga2V5b2YgVD4gPSB7XG4gIFtQIGluIEtdOiB7IGV2ZW50TmFtZTogUCwgZXZlbnRQYXlsb2FkOiBFdmVudEluZm88VFtQXT4gfVxufVtLXTtcblxudHlwZSBFdmVudHNGcm9tQ29tcG9uZW50PFQ+ID0gRXZlbnRTaGFwZTxULCBFdmVudEtleXM8VD4+O1xuXG4vKipcbiAqIEV2ZW50IG9mIGN1c3RvbSBjb21wb25lbnQgbm9kZVxuICpcbiAqIEdlbmVyaWMgYWNjZXB0cyBhcnJheSBvZiBjdXN0b20gY29tcG9uZW50cyBhbmQgbWVyZ2UgdGhlaXIgZXZlbnQgZW1pdHRlcnMgZm9yIHR5cGUtc2FmZVxuICogZXZlbnQgaGFuZGxpbmdcbiAqXG4gKiBAZXhwZXJpbWVudGFsXG4gKi9cbmV4cG9ydCB0eXBlIENvbXBvbmVudE5vZGVFdmVudDxUIGV4dGVuZHMgKEN1c3RvbU5vZGVDb21wb25lbnQgfCBDdXN0b21EeW5hbWljTm9kZUNvbXBvbmVudClbXT4gPSB7IG5vZGVJZDogc3RyaW5nIH0gJiB7XG4gIFtJIGluIGtleW9mIFRdOiBFdmVudHNGcm9tQ29tcG9uZW50PFRbSV0+XG59W251bWJlcl07XG5cbmV4cG9ydCB0eXBlIEFueUNvbXBvbmVudE5vZGVFdmVudCA9IHtcbiAgbm9kZUlkOiBzdHJpbmdcbiAgZXZlbnROYW1lOiBzdHJpbmdcbiAgZXZlbnRQYXlsb2FkOiB1bmtub3duXG59XG4iXX0=
@@ -1,2 +1,39 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvaW50ZXJmYWNlcy9ub2RlLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCwgVHlwZSwgc2lnbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxuaW1wb3J0IHsgUG9pbnQgfSBmcm9tIFwiLi9wb2ludC5pbnRlcmZhY2VcIlxuaW1wb3J0IHsgQ3VzdG9tTm9kZUNvbXBvbmVudCB9IGZyb20gXCIuLi9wdWJsaWMtY29tcG9uZW50cy9jdXN0b20tbm9kZS5jb21wb25lbnRcIlxuXG5leHBvcnQgdHlwZSBOb2RlPFQgPSB1bmtub3duPiA9IFNoYXJlZE5vZGUgJiAoXG4gIERlZmF1bHROb2RlIHxcbiAgSHRtbFRlbXBsYXRlTm9kZTxUPiB8XG4gIENvbXBvbmVudE5vZGU8VD5cbilcbmV4cG9ydCBpbnRlcmZhY2UgU2hhcmVkTm9kZSB7XG4gIGlkOiBzdHJpbmdcbiAgcG9pbnQ6IFBvaW50XG4gIGRyYWdnYWJsZT86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZWZhdWx0Tm9kZSB7XG4gIHR5cGU6ICdkZWZhdWx0J1xuICB0ZXh0Pzogc3RyaW5nXG4gIHdpZHRoPzogbnVtYmVyXG4gIGhlaWdodD86IG51bWJlclxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEh0bWxUZW1wbGF0ZU5vZGU8VCA9IHVua25vd24+IHtcbiAgdHlwZTogJ2h0bWwtdGVtcGxhdGUnXG4gIGRhdGE/OiBUXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50Tm9kZTxUID0gdW5rbm93bj4ge1xuICB0eXBlOiBUeXBlPEN1c3RvbU5vZGVDb21wb25lbnQ8VD4+XG4gIGRhdGE/OiBUXG59XG4iXX0=
1
+ import { CustomNodeComponent } from "../public-components/custom-node.component";
2
+ import { CustomDynamicNodeComponent } from "../public-components/custom-dynamic-node.component";
3
+ export function isStaticNode(node) {
4
+ return typeof node.point !== 'function';
5
+ }
6
+ export function isDynamicNode(node) {
7
+ return typeof node.point === 'function';
8
+ }
9
+ export function isComponentStaticNode(node) {
10
+ return CustomNodeComponent.isPrototypeOf(node.type);
11
+ }
12
+ export function isComponentDynamicNode(node) {
13
+ return CustomDynamicNodeComponent.isPrototypeOf(node.type);
14
+ }
15
+ export function isTemplateStaticNode(node) {
16
+ return node.type === 'html-template';
17
+ }
18
+ export function isTemplateDynamicNode(node) {
19
+ return node.type === 'html-template';
20
+ }
21
+ export function isDefaultStaticNode(node) {
22
+ return node.type === 'default';
23
+ }
24
+ export function isDefaultDynamicNode(node) {
25
+ return node.type === 'default';
26
+ }
27
+ export function isDefaultStaticGroupNode(node) {
28
+ return node.type === 'default-group';
29
+ }
30
+ export function isDefaultDynamicGroupNode(node) {
31
+ return node.type === 'default-group';
32
+ }
33
+ export function isTemplateStaticGroupNode(node) {
34
+ return node.type === 'template-group';
35
+ }
36
+ export function isTemplateDynamicGroupNode(node) {
37
+ return node.type === 'template-group';
38
+ }
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvaW50ZXJmYWNlcy9ub2RlLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQTtBQUNoRixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQTtBQTRGL0YsTUFBTSxVQUFVLFlBQVksQ0FBSSxJQUF3QjtJQUN0RCxPQUFPLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxVQUFVLENBQUE7QUFDekMsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUksSUFBd0I7SUFDdkQsT0FBTyxPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssVUFBVSxDQUFBO0FBQ3pDLENBQUM7QUFFRCxNQUFNLFVBQVUscUJBQXFCLENBQUksSUFBVTtJQUNqRCxPQUFPLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7QUFDckQsQ0FBQztBQUVELE1BQU0sVUFBVSxzQkFBc0IsQ0FBSSxJQUFpQjtJQUN6RCxPQUFPLDBCQUEwQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7QUFDNUQsQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0IsQ0FBSSxJQUFVO0lBQ2hELE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxlQUFlLENBQUE7QUFDdEMsQ0FBQztBQUVELE1BQU0sVUFBVSxxQkFBcUIsQ0FBSSxJQUFpQjtJQUN4RCxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFBO0FBQ3RDLENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsSUFBVTtJQUM1QyxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFBO0FBQ2hDLENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsSUFBaUI7SUFDcEQsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQTtBQUNoQyxDQUFDO0FBRUQsTUFBTSxVQUFVLHdCQUF3QixDQUFDLElBQVU7SUFDakQsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQTtBQUN0QyxDQUFDO0FBRUQsTUFBTSxVQUFVLHlCQUF5QixDQUFDLElBQWlCO0lBQ3pELE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxlQUFlLENBQUE7QUFDdEMsQ0FBQztBQUVELE1BQU0sVUFBVSx5QkFBeUIsQ0FBSSxJQUFVO0lBQ3JELE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQTtBQUN2QyxDQUFDO0FBRUQsTUFBTSxVQUFVLDBCQUEwQixDQUFJLElBQWlCO0lBQzdELE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQTtBQUN2QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHlwZSwgV3JpdGFibGVTaWduYWwgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXG5pbXBvcnQgeyBQb2ludCB9IGZyb20gXCIuL3BvaW50LmludGVyZmFjZVwiXG5pbXBvcnQgeyBDdXN0b21Ob2RlQ29tcG9uZW50IH0gZnJvbSBcIi4uL3B1YmxpYy1jb21wb25lbnRzL2N1c3RvbS1ub2RlLmNvbXBvbmVudFwiXG5pbXBvcnQgeyBDdXN0b21EeW5hbWljTm9kZUNvbXBvbmVudCB9IGZyb20gXCIuLi9wdWJsaWMtY29tcG9uZW50cy9jdXN0b20tZHluYW1pYy1ub2RlLmNvbXBvbmVudFwiXG5cbmV4cG9ydCB0eXBlIE5vZGU8VCA9IHVua25vd24+ID1cbiAgRGVmYXVsdE5vZGUgfFxuICBIdG1sVGVtcGxhdGVOb2RlPFQ+IHxcbiAgQ29tcG9uZW50Tm9kZTxUPiB8XG4gIERlZmF1bHRHcm91cE5vZGUgfFxuICBUZW1wbGF0ZUdyb3VwTm9kZTxUPlxuXG5leHBvcnQgdHlwZSBEeW5hbWljTm9kZTxUID0gdW5rbm93bj4gPVxuICBEZWZhdWx0RHluYW1pY05vZGUgfFxuICBIdG1sVGVtcGxhdGVEeW5hbWljTm9kZTxUPiB8XG4gIENvbXBvbmVudER5bmFtaWNOb2RlPFQ+IHxcbiAgRGVmYXVsdER5bmFtaWNHcm91cE5vZGUgfFxuICBUZW1wbGF0ZUR5bmFtaWNHcm91cE5vZGU8VD5cblxuZXhwb3J0IGludGVyZmFjZSBTaGFyZWROb2RlIHtcbiAgaWQ6IHN0cmluZ1xuICBwb2ludDogUG9pbnRcbiAgZHJhZ2dhYmxlPzogYm9vbGVhblxuICBwYXJlbnRJZD86IHN0cmluZyB8IG51bGxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaGFyZWREeW5hbWljTm9kZSB7XG4gIGlkOiBzdHJpbmc7XG4gIHBvaW50OiBXcml0YWJsZVNpZ25hbDxQb2ludD5cbiAgZHJhZ2dhYmxlPzogV3JpdGFibGVTaWduYWw8Ym9vbGVhbj5cbiAgcGFyZW50SWQ/OiBXcml0YWJsZVNpZ25hbDxzdHJpbmcgfCBudWxsPlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlZmF1bHROb2RlIGV4dGVuZHMgU2hhcmVkTm9kZSB7XG4gIHR5cGU6ICdkZWZhdWx0J1xuICB0ZXh0Pzogc3RyaW5nXG4gIHdpZHRoPzogbnVtYmVyXG4gIGhlaWdodD86IG51bWJlclxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlZmF1bHREeW5hbWljTm9kZSBleHRlbmRzIFNoYXJlZER5bmFtaWNOb2RlIHtcbiAgdHlwZTogJ2RlZmF1bHQnXG4gIHRleHQ/OiBXcml0YWJsZVNpZ25hbDxzdHJpbmc+XG4gIHdpZHRoPzogV3JpdGFibGVTaWduYWw8bnVtYmVyPlxuICBoZWlnaHQ/OiBXcml0YWJsZVNpZ25hbDxudW1iZXI+XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHRtbFRlbXBsYXRlTm9kZTxUID0gdW5rbm93bj4gZXh0ZW5kcyBTaGFyZWROb2RlIHtcbiAgdHlwZTogJ2h0bWwtdGVtcGxhdGUnXG4gIGRhdGE/OiBUXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHRtbFRlbXBsYXRlRHluYW1pY05vZGU8VCA9IHVua25vd24+IGV4dGVuZHMgU2hhcmVkRHluYW1pY05vZGUge1xuICB0eXBlOiAnaHRtbC10ZW1wbGF0ZSdcbiAgZGF0YT86IFdyaXRhYmxlU2lnbmFsPFQ+XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVmYXVsdEdyb3VwTm9kZSBleHRlbmRzIFNoYXJlZE5vZGUge1xuICB0eXBlOiAnZGVmYXVsdC1ncm91cCdcbiAgd2lkdGg6IG51bWJlclxuICBoZWlnaHQ6IG51bWJlclxuICBjb2xvcj86IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlZmF1bHREeW5hbWljR3JvdXBOb2RlIGV4dGVuZHMgU2hhcmVkRHluYW1pY05vZGUge1xuICB0eXBlOiAnZGVmYXVsdC1ncm91cCdcbiAgd2lkdGg6IFdyaXRhYmxlU2lnbmFsPG51bWJlcj5cbiAgaGVpZ2h0OiBXcml0YWJsZVNpZ25hbDxudW1iZXI+XG4gIGNvbG9yPzogV3JpdGFibGVTaWduYWw8c3RyaW5nPlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlbXBsYXRlR3JvdXBOb2RlPFQ+IGV4dGVuZHMgU2hhcmVkTm9kZSB7XG4gIHR5cGU6ICd0ZW1wbGF0ZS1ncm91cCdcbiAgd2lkdGg6IG51bWJlclxuICBoZWlnaHQ6IG51bWJlclxuICBkYXRhPzogVFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlbXBsYXRlRHluYW1pY0dyb3VwTm9kZTxUPiBleHRlbmRzIFNoYXJlZER5bmFtaWNOb2RlIHtcbiAgdHlwZTogJ3RlbXBsYXRlLWdyb3VwJ1xuICB3aWR0aDogV3JpdGFibGVTaWduYWw8bnVtYmVyPlxuICBoZWlnaHQ6IFdyaXRhYmxlU2lnbmFsPG51bWJlcj5cbiAgZGF0YT86IFdyaXRhYmxlU2lnbmFsPFQ+XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50Tm9kZTxUID0gdW5rbm93bj4gZXh0ZW5kcyBTaGFyZWROb2RlIHtcbiAgdHlwZTogVHlwZTxDdXN0b21Ob2RlQ29tcG9uZW50PFQ+PlxuICBkYXRhPzogVFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudER5bmFtaWNOb2RlPFQgPSB1bmtub3duPiBleHRlbmRzIFNoYXJlZER5bmFtaWNOb2RlIHtcbiAgdHlwZTogVHlwZTxDdXN0b21EeW5hbWljTm9kZUNvbXBvbmVudDxUPj5cbiAgZGF0YT86IFdyaXRhYmxlU2lnbmFsPFQ+XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1N0YXRpY05vZGU8VD4obm9kZTogTm9kZSB8IER5bmFtaWNOb2RlKTogbm9kZSBpcyBOb2RlPFQ+IHtcbiAgcmV0dXJuIHR5cGVvZiBub2RlLnBvaW50ICE9PSAnZnVuY3Rpb24nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0R5bmFtaWNOb2RlPFQ+KG5vZGU6IE5vZGUgfCBEeW5hbWljTm9kZSk6IG5vZGUgaXMgRHluYW1pY05vZGU8VD4ge1xuICByZXR1cm4gdHlwZW9mIG5vZGUucG9pbnQgPT09ICdmdW5jdGlvbidcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tcG9uZW50U3RhdGljTm9kZTxUPihub2RlOiBOb2RlKTogbm9kZSBpcyBDb21wb25lbnROb2RlPFQ+IHtcbiAgcmV0dXJuIEN1c3RvbU5vZGVDb21wb25lbnQuaXNQcm90b3R5cGVPZihub2RlLnR5cGUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbXBvbmVudER5bmFtaWNOb2RlPFQ+KG5vZGU6IER5bmFtaWNOb2RlKTogbm9kZSBpcyBDb21wb25lbnREeW5hbWljTm9kZTxUPiB7XG4gIHJldHVybiBDdXN0b21EeW5hbWljTm9kZUNvbXBvbmVudC5pc1Byb3RvdHlwZU9mKG5vZGUudHlwZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGVtcGxhdGVTdGF0aWNOb2RlPFQ+KG5vZGU6IE5vZGUpOiBub2RlIGlzIEh0bWxUZW1wbGF0ZU5vZGU8VD4ge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAnaHRtbC10ZW1wbGF0ZSdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGVtcGxhdGVEeW5hbWljTm9kZTxUPihub2RlOiBEeW5hbWljTm9kZSk6IG5vZGUgaXMgSHRtbFRlbXBsYXRlRHluYW1pY05vZGU8VD4ge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAnaHRtbC10ZW1wbGF0ZSdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVmYXVsdFN0YXRpY05vZGUobm9kZTogTm9kZSk6IG5vZGUgaXMgRGVmYXVsdE5vZGUge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAnZGVmYXVsdCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVmYXVsdER5bmFtaWNOb2RlKG5vZGU6IER5bmFtaWNOb2RlKTogbm9kZSBpcyBEZWZhdWx0RHluYW1pY05vZGUge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAnZGVmYXVsdCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVmYXVsdFN0YXRpY0dyb3VwTm9kZShub2RlOiBOb2RlKTogbm9kZSBpcyBEZWZhdWx0R3JvdXBOb2RlIHtcbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ2RlZmF1bHQtZ3JvdXAnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RlZmF1bHREeW5hbWljR3JvdXBOb2RlKG5vZGU6IER5bmFtaWNOb2RlKTogbm9kZSBpcyBEZWZhdWx0RHluYW1pY0dyb3VwTm9kZSB7XG4gIHJldHVybiBub2RlLnR5cGUgPT09ICdkZWZhdWx0LWdyb3VwJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZW1wbGF0ZVN0YXRpY0dyb3VwTm9kZTxUPihub2RlOiBOb2RlKTogbm9kZSBpcyBUZW1wbGF0ZUdyb3VwTm9kZTxUPiB7XG4gIHJldHVybiBub2RlLnR5cGUgPT09ICd0ZW1wbGF0ZS1ncm91cCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGVtcGxhdGVEeW5hbWljR3JvdXBOb2RlPFQ+KG5vZGU6IER5bmFtaWNOb2RlKTogbm9kZSBpcyBUZW1wbGF0ZUR5bmFtaWNHcm91cE5vZGU8VD4ge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAndGVtcGxhdGUtZ3JvdXAnXG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW1pemF0aW9uLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9pbnRlcmZhY2VzL29wdGltaXphdGlvbi5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgT3B0aW1pemF0aW9uIHtcbiAgY29tcHV0ZUxheWVyc09uSW5pdDogYm9vbGVhblxufVxuIl19