ngx-vflow 0.3.0 → 0.5.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 (56) hide show
  1. package/esm2022/lib/vflow/components/edge/edge.component.mjs +18 -6
  2. package/esm2022/lib/vflow/components/handle/handle.component.mjs +7 -7
  3. package/esm2022/lib/vflow/components/node/node.component.mjs +23 -8
  4. package/esm2022/lib/vflow/components/vflow/vflow.component.mjs +63 -22
  5. package/esm2022/lib/vflow/decorators/run-in-injection-context.decorator.mjs +6 -14
  6. package/esm2022/lib/vflow/directives/changes-controller.directive.mjs +115 -14
  7. package/esm2022/lib/vflow/directives/map-context.directive.mjs +31 -4
  8. package/esm2022/lib/vflow/directives/pointer.directive.mjs +84 -0
  9. package/esm2022/lib/vflow/directives/root-pointer.directive.mjs +42 -0
  10. package/esm2022/lib/vflow/directives/root-svg-context.directive.mjs +5 -2
  11. package/esm2022/lib/vflow/directives/selectable.directive.mjs +39 -0
  12. package/esm2022/lib/vflow/directives/space-point-context.directive.mjs +10 -6
  13. package/esm2022/lib/vflow/interfaces/flow-entity.interface.mjs +2 -0
  14. package/esm2022/lib/vflow/interfaces/template-context.interface.mjs +1 -1
  15. package/esm2022/lib/vflow/models/edge.model.mjs +3 -1
  16. package/esm2022/lib/vflow/models/node.model.mjs +9 -12
  17. package/esm2022/lib/vflow/services/edge-changes.service.mjs +6 -2
  18. package/esm2022/lib/vflow/services/flow-entities.service.mjs +5 -1
  19. package/esm2022/lib/vflow/services/flow-settings.service.mjs +25 -0
  20. package/esm2022/lib/vflow/services/node-changes.service.mjs +7 -3
  21. package/esm2022/lib/vflow/services/node-rendering.service.mjs +22 -0
  22. package/esm2022/lib/vflow/services/selection.service.mjs +45 -0
  23. package/esm2022/lib/vflow/types/edge-change.type.mjs +1 -1
  24. package/esm2022/lib/vflow/types/node-change.type.mjs +1 -1
  25. package/esm2022/lib/vflow/vflow.module.mjs +15 -4
  26. package/esm2022/public-api.mjs +2 -1
  27. package/fesm2022/ngx-vflow.mjs +582 -161
  28. package/fesm2022/ngx-vflow.mjs.map +1 -1
  29. package/lib/vflow/components/edge/edge.component.d.ts +5 -2
  30. package/lib/vflow/components/handle/handle.component.d.ts +4 -3
  31. package/lib/vflow/components/node/node.component.d.ts +10 -4
  32. package/lib/vflow/components/vflow/vflow.component.d.ts +12 -6
  33. package/lib/vflow/decorators/run-in-injection-context.decorator.d.ts +2 -5
  34. package/lib/vflow/directives/changes-controller.directive.d.ts +35 -9
  35. package/lib/vflow/directives/map-context.directive.d.ts +5 -0
  36. package/lib/vflow/directives/pointer.directive.d.ts +21 -0
  37. package/lib/vflow/directives/root-pointer.directive.d.ts +40 -0
  38. package/lib/vflow/directives/selectable.directive.d.ts +11 -0
  39. package/lib/vflow/directives/space-point-context.directive.d.ts +13 -3
  40. package/lib/vflow/interfaces/flow-entity.interface.d.ts +4 -0
  41. package/lib/vflow/interfaces/template-context.interface.d.ts +1 -0
  42. package/lib/vflow/models/edge.model.d.ts +8 -20
  43. package/lib/vflow/models/node.model.d.ts +6 -9
  44. package/lib/vflow/services/edge-changes.service.d.ts +5 -0
  45. package/lib/vflow/services/flow-entities.service.d.ts +5 -2
  46. package/lib/vflow/services/flow-settings.service.d.ts +20 -0
  47. package/lib/vflow/services/node-changes.service.d.ts +5 -0
  48. package/lib/vflow/services/node-rendering.service.d.ts +9 -0
  49. package/lib/vflow/services/selection.service.d.ts +19 -0
  50. package/lib/vflow/types/edge-change.type.d.ts +5 -1
  51. package/lib/vflow/types/node-change.type.d.ts +5 -1
  52. package/lib/vflow/vflow.module.d.ts +6 -3
  53. package/package.json +3 -3
  54. package/public-api.d.ts +1 -0
  55. package/esm2022/lib/vflow/models/flow.model.mjs +0 -18
  56. package/lib/vflow/models/flow.model.d.ts +0 -16
@@ -1,11 +1,10 @@
1
- import { ChangeDetectionStrategy, Component, ContentChild, Injector, Input, ViewChild, inject, runInInjectionContext } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, ContentChild, Injector, Input, ViewChild, computed, inject, runInInjectionContext } from '@angular/core';
2
2
  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
6
  import { ConnectionTemplateDirective, EdgeLabelHtmlTemplateDirective, EdgeTemplateDirective, NodeHtmlTemplateDirective } from '../../directives/template.directive';
7
7
  import { addNodesToEdges } from '../../utils/add-nodes-to-edges';
8
- import { FlowModel } from '../../models/flow.model';
9
8
  import { skip } from 'rxjs';
10
9
  import { FlowStatusService } from '../../services/flow-status.service';
11
10
  import { ConnectionControllerDirective } from '../../directives/connection-controller.directive';
@@ -15,6 +14,9 @@ import { ReferenceKeeper } from '../../utils/reference-keeper';
15
14
  import { NodesChangeService } from '../../services/node-changes.service';
16
15
  import { EdgeChangesService } from '../../services/edge-changes.service';
17
16
  import { ChangesControllerDirective } from '../../directives/changes-controller.directive';
17
+ import { NodeRenderingService } from '../../services/node-rendering.service';
18
+ import { SelectionService } from '../../services/selection.service';
19
+ import { FlowSettingsService } from '../../services/flow-settings.service';
18
20
  import * as i0 from "@angular/core";
19
21
  import * as i1 from "../../directives/connection-controller.directive";
20
22
  import * as i2 from "../../directives/changes-controller.directive";
@@ -27,13 +29,41 @@ import * as i8 from "../../directives/space-point-context.directive";
27
29
  import * as i9 from "../../directives/map-context.directive";
28
30
  import * as i10 from "../../directives/reference.directive";
29
31
  import * as i11 from "../../directives/root-svg-context.directive";
32
+ import * as i12 from "../../directives/root-pointer.directive";
30
33
  const connectionControllerHostDirective = {
31
34
  directive: ConnectionControllerDirective,
32
35
  outputs: ['onConnect']
33
36
  };
34
37
  const changesControllerHostDirective = {
35
38
  directive: ChangesControllerDirective,
36
- outputs: ['onNodesChange', 'onEdgesChange']
39
+ outputs: [
40
+ 'onNodesChange',
41
+ 'onNodesChange.position',
42
+ 'onNodesChange.position.single',
43
+ 'onNodesChange.position.many',
44
+ 'onNodesChange.add',
45
+ 'onNodesChange.add.single',
46
+ 'onNodesChange.add.many',
47
+ 'onNodesChange.remove',
48
+ 'onNodesChange.remove.single',
49
+ 'onNodesChange.remove.many',
50
+ 'onNodesChange.select',
51
+ 'onNodesChange.select.single',
52
+ 'onNodesChange.select.many',
53
+ 'onEdgesChange',
54
+ 'onEdgesChange.detached',
55
+ 'onEdgesChange.detached.single',
56
+ 'onEdgesChange.detached.many',
57
+ 'onEdgesChange.add',
58
+ 'onEdgesChange.add.single',
59
+ 'onEdgesChange.add.many',
60
+ 'onEdgesChange.remove',
61
+ 'onEdgesChange.remove.single',
62
+ 'onEdgesChange.remove.many',
63
+ 'onEdgesChange.select',
64
+ 'onEdgesChange.select.single',
65
+ 'onEdgesChange.select.many',
66
+ ]
37
67
  };
38
68
  export class VflowComponent {
39
69
  constructor() {
@@ -42,6 +72,8 @@ export class VflowComponent {
42
72
  this.flowEntitiesService = inject(FlowEntitiesService);
43
73
  this.nodesChangeService = inject(NodesChangeService);
44
74
  this.edgesChangeService = inject(EdgeChangesService);
75
+ this.nodeRenderingService = inject(NodeRenderingService);
76
+ this.flowSettingsService = inject(FlowSettingsService);
45
77
  this.injector = inject(Injector);
46
78
  /**
47
79
  * Minimum zoom value
@@ -55,6 +87,8 @@ export class VflowComponent {
55
87
  * Background color for flow
56
88
  */
57
89
  this.background = '#FFFFFF';
90
+ this.nodeModels = computed(() => this.nodeRenderingService.nodes());
91
+ this.edgeModels = computed(() => this.flowEntitiesService.validEdges());
58
92
  // #endregion
59
93
  // #region SIGNAL_API
60
94
  /**
@@ -81,12 +115,12 @@ export class VflowComponent {
81
115
  */
82
116
  this.nodesChange$ = this.nodesChangeService.changes$;
83
117
  /**
84
- * Observable with nodes change
118
+ * Observable with edges change
85
119
  */
86
120
  this.edgesChange$ = this.edgesChangeService.changes$;
87
121
  // #endregion
88
- // TODO: probably better to make it injectable
89
- this.flowModel = new FlowModel();
122
+ this.flowWidth = this.flowSettingsService.flowWidth;
123
+ this.flowHeight = this.flowSettingsService.flowHeight;
90
124
  this.markers = this.flowEntitiesService.markers;
91
125
  }
92
126
  // #endregion
@@ -99,7 +133,7 @@ export class VflowComponent {
99
133
  * - 'auto' to compute size based on parent element size
100
134
  */
101
135
  set view(view) {
102
- this.flowModel.view.set(view);
136
+ this.flowSettingsService.view.set(view);
103
137
  }
104
138
  /**
105
139
  * Object that controls flow direction.
@@ -110,7 +144,13 @@ export class VflowComponent {
110
144
  * @deprecated
111
145
  */
112
146
  set handlePositions(handlePositions) {
113
- this.flowModel.handlePositions.set(handlePositions);
147
+ this.flowSettingsService.handlePositions.set(handlePositions);
148
+ }
149
+ /**
150
+ * Global rule if you can or can't select entities
151
+ */
152
+ set entitiesSelectable(value) {
153
+ this.flowSettingsService.entitiesSelectable.set(value);
114
154
  }
115
155
  /**
116
156
  * Settings for connection (it renders when user tries to create edge between nodes)
@@ -126,23 +166,19 @@ export class VflowComponent {
126
166
  */
127
167
  set nodes(newNodes) {
128
168
  const newModels = runInInjectionContext(this.injector, () => ReferenceKeeper.nodes(newNodes, this.flowEntitiesService.nodes()));
129
- // TODO better to solve this by DI
130
- bindFlowToNodes(this.flowModel, newModels);
131
169
  // quick and dirty binding nodes to edges
132
170
  addNodesToEdges(newModels, this.flowEntitiesService.edges());
133
171
  this.flowEntitiesService.nodes.set(newModels);
134
172
  }
135
- get nodeModels() { return this.flowEntitiesService.nodes(); }
136
173
  /**
137
174
  * Edges to render
138
175
  */
139
176
  set edges(newEdges) {
140
177
  const newModels = runInInjectionContext(this.injector, () => ReferenceKeeper.edges(newEdges, this.flowEntitiesService.edges()));
141
178
  // quick and dirty binding nodes to edges
142
- addNodesToEdges(this.nodeModels, newModels);
179
+ addNodesToEdges(this.nodeModels(), newModels);
143
180
  this.flowEntitiesService.edges.set(newModels);
144
181
  }
145
- get edgeModels() { return this.flowEntitiesService.validEdges(); }
146
182
  // #region METHODS_API
147
183
  /**
148
184
  * Change viewport to specified state
@@ -190,14 +226,17 @@ export class VflowComponent {
190
226
  return edge;
191
227
  }
192
228
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: VflowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
193
- 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", connection: ["connection", "connection", (settings) => new ConnectionModel(settings)], nodes: "nodes", edges: "edges" }, providers: [
229
+ 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" }, providers: [
194
230
  DraggableService,
195
231
  ViewportService,
196
232
  FlowStatusService,
197
233
  FlowEntitiesService,
198
234
  NodesChangeService,
199
- EdgeChangesService
200
- ], 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 }], hostDirectives: [{ directive: i1.ConnectionControllerDirective, outputs: ["onConnect", "onConnect"] }, { directive: i2.ChangesControllerDirective, outputs: ["onNodesChange", "onNodesChange", "onEdgesChange", "onEdgesChange"] }], ngImport: i0, template: "<svg:svg\n rootSvgRef\n rootSvgContext\n class=\"root-svg\"\n #flow\n [style.backgroundColor]=\"background\"\n [attr.width]=\"flowModel.flowWidth()\"\n [attr.height]=\"flowModel.flowHeight()\"\n>\n <defs [markers]=\"markers()\" flowDefs />\n\n <svg:g\n mapContext\n spacePointContext\n [minZoom]=\"minZoom\"\n [maxZoom]=\"maxZoom\"\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: "directive", type: i8.SpacePointContextDirective, selector: "g[spacePointContext]" }, { kind: "directive", type: i9.MapContextDirective, selector: "g[mapContext]", inputs: ["minZoom", "maxZoom"] }, { kind: "directive", type: i10.RootSvgReferenceDirective, selector: "svg[rootSvgRef]" }, { kind: "directive", type: i11.RootSvgContextDirective, selector: "svg[rootSvgContext]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
235
+ EdgeChangesService,
236
+ NodeRenderingService,
237
+ SelectionService,
238
+ FlowSettingsService
239
+ ], 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 }], 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 class=\"root-svg\"\n #flow\n [style.backgroundColor]=\"background\"\n [attr.width]=\"flowWidth()\"\n [attr.height]=\"flowHeight()\"\n>\n <defs [markers]=\"markers()\" flowDefs />\n\n <svg:g\n mapContext\n spacePointContext\n [minZoom]=\"minZoom\"\n [maxZoom]=\"maxZoom\"\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: "directive", type: i8.SpacePointContextDirective, selector: "g[spacePointContext]" }, { kind: "directive", type: i9.MapContextDirective, selector: "g[mapContext]", inputs: ["minZoom", "maxZoom"] }, { kind: "directive", type: i10.RootSvgReferenceDirective, selector: "svg[rootSvgRef]" }, { kind: "directive", type: i11.RootSvgContextDirective, selector: "svg[rootSvgContext]" }, { kind: "directive", type: i12.RootPointerDirective, selector: "svg[rootPointer]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
201
240
  }
202
241
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: VflowComponent, decorators: [{
203
242
  type: Component,
@@ -207,11 +246,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
207
246
  FlowStatusService,
208
247
  FlowEntitiesService,
209
248
  NodesChangeService,
210
- EdgeChangesService
249
+ EdgeChangesService,
250
+ NodeRenderingService,
251
+ SelectionService,
252
+ FlowSettingsService
211
253
  ], hostDirectives: [
212
254
  connectionControllerHostDirective,
213
255
  changesControllerHostDirective
214
- ], template: "<svg:svg\n rootSvgRef\n rootSvgContext\n class=\"root-svg\"\n #flow\n [style.backgroundColor]=\"background\"\n [attr.width]=\"flowModel.flowWidth()\"\n [attr.height]=\"flowModel.flowHeight()\"\n>\n <defs [markers]=\"markers()\" flowDefs />\n\n <svg:g\n mapContext\n spacePointContext\n [minZoom]=\"minZoom\"\n [maxZoom]=\"maxZoom\"\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"] }]
256
+ ], template: "<svg:svg\n rootSvgRef\n rootSvgContext\n rootPointer\n class=\"root-svg\"\n #flow\n [style.backgroundColor]=\"background\"\n [attr.width]=\"flowWidth()\"\n [attr.height]=\"flowHeight()\"\n>\n <defs [markers]=\"markers()\" flowDefs />\n\n <svg:g\n mapContext\n spacePointContext\n [minZoom]=\"minZoom\"\n [maxZoom]=\"maxZoom\"\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"] }]
215
257
  }], propDecorators: { view: [{
216
258
  type: Input
217
259
  }], minZoom: [{
@@ -222,6 +264,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
222
264
  type: Input
223
265
  }], background: [{
224
266
  type: Input
267
+ }], entitiesSelectable: [{
268
+ type: Input
225
269
  }], connection: [{
226
270
  type: Input,
227
271
  args: [{ transform: (settings) => new ConnectionModel(settings) }]
@@ -246,7 +290,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
246
290
  type: ViewChild,
247
291
  args: [MapContextDirective]
248
292
  }] } });
249
- function bindFlowToNodes(flow, nodes) {
250
- nodes.forEach(n => n.bindFlow(flow));
251
- }
252
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmZsb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvdmZsb3cvdmZsb3cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvdmZsb3cvdmZsb3cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQix1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFnQixRQUFRLEVBQUUsS0FBSyxFQUE0QyxTQUFTLEVBQW9CLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV4TyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUdwRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsOEJBQThCLEVBQUUscUJBQXFCLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUVwSyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHNUIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDakcsT0FBTyxF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cUI7c0JBRDlCLFlBQVk7dUJBQUMscUJBQXFCO2dCQUl6QixzQkFBc0I7c0JBRC9CLFlBQVk7dUJBQUMsOEJBQThCO2dCQUlsQywyQkFBMkI7c0JBRHBDLFlBQVk7dUJBQUMsMkJBQTJCO2dCQU0vQixVQUFVO3NCQURuQixTQUFTO3VCQUFDLG1CQUFtQjs7QUFvR2hDLFNBQVMsZUFBZSxDQUFDLElBQWUsRUFBRSxLQUFrQjtJQUMxRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0FBQ3RDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IsIElucHV0LCBPbkNoYW5nZXMsIE91dHB1dCwgU2lnbmFsLCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgcnVuSW5JbmplY3Rpb25Db250ZXh0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOb2RlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9ub2RlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBNYXBDb250ZXh0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9tYXAtY29udGV4dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRHJhZ2dhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RyYWdnYWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5vZGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9ub2RlLm1vZGVsJztcbmltcG9ydCB7IFZpZXdwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZpZXdwb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEVkZ2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2VkZ2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IEVkZ2VNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9lZGdlLm1vZGVsJztcbmltcG9ydCB7IENvbm5lY3Rpb25UZW1wbGF0ZURpcmVjdGl2ZSwgRWRnZUxhYmVsSHRtbFRlbXBsYXRlRGlyZWN0aXZlLCBFZGdlVGVtcGxhdGVEaXJlY3RpdmUsIE5vZGVIdG1sVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3RlbXBsYXRlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBIYW5kbGVQb3NpdGlvbnMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2hhbmRsZS1wb3NpdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IGFkZE5vZGVzVG9FZGdlcyB9IGZyb20gJy4uLy4uL3V0aWxzL2FkZC1ub2Rlcy10by1lZGdlcyc7XG5pbXBvcnQgeyBGbG93TW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZmxvdy5tb2RlbCc7XG5pbXBvcnQgeyBza2lwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQb2ludCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcG9pbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFZpZXdwb3J0U3RhdGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3ZpZXdwb3J0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBGbG93U3RhdHVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zsb3ctc3RhdHVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29ubmVjdGlvbkNvbnRyb2xsZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2Nvbm5lY3Rpb24tY29udHJvbGxlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRmxvd0VudGl0aWVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zsb3ctZW50aXRpZXMuc2VydmljZSc7XG5pbXBvcnQgeyBDb25uZWN0aW9uU2V0dGluZ3MgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2Nvbm5lY3Rpb24tc2V0dGluZ3MuaW50ZXJmYWNlJztcbmltcG9ydCB7IENvbm5lY3Rpb25Nb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9jb25uZWN0aW9uLm1vZGVsJztcbmltcG9ydCB7IFJlZmVyZW5jZUtlZXBlciB9IGZyb20gJy4uLy4uL3V0aWxzL3JlZmVyZW5jZS1rZWVwZXInO1xuaW1wb3J0IHsgTm9kZXNDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm9kZS1jaGFuZ2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWRnZUNoYW5nZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZWRnZS1jaGFuZ2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm9kZUNoYW5nZSB9IGZyb20gJy4uLy4uL3R5cGVzL25vZGUtY2hhbmdlLnR5cGUnO1xuaW1wb3J0IHsgQ2hhbmdlc0NvbnRyb2xsZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2NoYW5nZXMtY29udHJvbGxlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRWRnZUNoYW5nZSB9IGZyb20gJy4uLy4uL3R5cGVzL2VkZ2UtY2hhbmdlLnR5cGUnO1xuXG5jb25zdCBjb25uZWN0aW9uQ29udHJvbGxlckhvc3REaXJlY3RpdmUgPSB7XG4gIGRpcmVjdGl2ZTogQ29ubmVjdGlvbkNvbnRyb2xsZXJEaXJlY3RpdmUsXG4gIG91dHB1dHM6IFsnb25Db25uZWN0J11cbn1cblxuY29uc3QgY2hhbmdlc0NvbnRyb2xsZXJIb3N0RGlyZWN0aXZlID0ge1xuICBkaXJlY3RpdmU6IENoYW5nZXNDb250cm9sbGVyRGlyZWN0aXZlLFxuICBvdXRwdXRzOiBbJ29uTm9kZXNDaGFuZ2UnLCAnb25FZGdlc0NoYW5nZSddXG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZmbG93JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3ZmbG93LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdmZsb3cuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIERyYWdnYWJsZVNlcnZpY2UsXG4gICAgVmlld3BvcnRTZXJ2aWNlLFxuICAgIEZsb3dTdGF0dXNTZXJ2aWNlLFxuICAgIEZsb3dFbnRpdGllc1NlcnZpY2UsXG4gICAgTm9kZXNDaGFuZ2VTZXJ2aWNlLFxuICAgIEVkZ2VDaGFuZ2VzU2VydmljZVxuICBdLFxuICBob3N0RGlyZWN0aXZlczogW1xuICAgIGNvbm5lY3Rpb25Db250cm9sbGVySG9zdERpcmVjdGl2ZSxcbiAgICBjaGFuZ2VzQ29udHJvbGxlckhvc3REaXJlY3RpdmVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBWZmxvd0NvbXBvbmVudCB7XG4gIC8vICNyZWdpb24gRElcbiAgcHJpdmF0ZSB2aWV3cG9ydFNlcnZpY2UgPSBpbmplY3QoVmlld3BvcnRTZXJ2aWNlKVxuICBwcml2YXRlIGZsb3dFbnRpdGllc1NlcnZpY2UgPSBpbmplY3QoRmxvd0VudGl0aWVzU2VydmljZSlcbiAgcHJpdmF0ZSBub2Rlc0NoYW5nZVNlcnZpY2UgPSBpbmplY3QoTm9kZXNDaGFuZ2VTZXJ2aWNlKVxuICBwcml2YXRlIGVkZ2VzQ2hhbmdlU2VydmljZSA9IGluamVjdChFZGdlQ2hhbmdlc1NlcnZpY2UpXG4gIHByaXZhdGUgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpXG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIFNFVFRJTkdTXG5cbiAgLyoqXG4gICAqIFNpemUgZm9yIGZsb3cgdmlld1xuICAgKlxuICAgKiBhY2NlcHRzXG4gICAqIC0gYWJzb2x1dGUgc2l6ZSBpbiBmb3JtYXQgW3dpZHRoLCBoZWlnaHRdIG9yXG4gICAqIC0gJ2F1dG8nIHRvIGNvbXB1dGUgc2l6ZSBiYXNlZCBvbiBwYXJlbnQgZWxlbWVudCBzaXplXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHZpZXcodmlldzogW251bWJlciwgbnVtYmVyXSB8ICdhdXRvJykge1xuICAgIHRoaXMuZmxvd01vZGVsLnZpZXcuc2V0KHZpZXcpXG4gIH1cblxuICAvKipcbiAgICogTWluaW11bSB6b29tIHZhbHVlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgbWluWm9vbSA9IDAuNVxuXG4gIC8qKlxuICAgKiBNYXhpbXVtIHpvb20gdmFsdWVcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtYXhab29tID0gM1xuXG4gIC8qKlxuICAgKiBPYmplY3QgdGhhdCBjb250cm9scyBmbG93IGRpcmVjdGlvbi5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIGFyY2hpZXZlIHJpZ2h0IHRvIGxlZnQgZGlyZWN0aW9uXG4gICAqIHRoZW4geW91IG5lZWQgdG8gcGFzcyB0aGVzZSBwb3NpdGlvbnMgeyBzb3VyY2U6ICdsZWZ0JywgdGFyZ2V0OiAncmlnaHQnIH1cbiAgICpcbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgaGFuZGxlUG9zaXRpb25zKGhhbmRsZVBvc2l0aW9uczogSGFuZGxlUG9zaXRpb25zKSB7XG4gICAgdGhpcy5mbG93TW9kZWwuaGFuZGxlUG9zaXRpb25zLnNldChoYW5kbGVQb3NpdGlvbnMpXG4gIH1cblxuICAvKipcbiAgICogQmFja2dyb3VuZCBjb2xvciBmb3IgZmxvd1xuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGJhY2tncm91bmQ6IHN0cmluZyA9ICcjRkZGRkZGJ1xuXG4gIC8qKlxuICAgKiBTZXR0aW5ncyBmb3IgY29ubmVjdGlvbiAoaXQgcmVuZGVycyB3aGVuIHVzZXIgdHJpZXMgdG8gY3JlYXRlIGVkZ2UgYmV0d2VlbiBub2RlcylcbiAgICpcbiAgICogWW91IG5lZWQgdG8gcGFzcyBgQ29ubmVjdGlvblNldHRpbmdzYCBpbiB0aGlzIGlucHV0LlxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiAoc2V0dGluZ3M6IENvbm5lY3Rpb25TZXR0aW5ncykgPT4gbmV3IENvbm5lY3Rpb25Nb2RlbChzZXR0aW5ncykgfSlcbiAgcHVibGljIHNldCBjb25uZWN0aW9uKGNvbm5lY3Rpb246IENvbm5lY3Rpb25Nb2RlbCkgeyB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UuY29ubmVjdGlvbi5zZXQoY29ubmVjdGlvbikgfVxuXG4gIHB1YmxpYyBnZXQgY29ubmVjdGlvbigpIHsgcmV0dXJuIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5jb25uZWN0aW9uKCkgfVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBNQUlOX0lOUFVUU1xuICAvKipcbiAgICogTm9kZXMgdG8gcmVuZGVyXG4gICAqL1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICBwdWJsaWMgc2V0IG5vZGVzKG5ld05vZGVzOiBOb2RlW10pIHtcbiAgICBjb25zdCBuZXdNb2RlbHMgPSBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5pbmplY3RvcixcbiAgICAgICgpID0+IFJlZmVyZW5jZUtlZXBlci5ub2RlcyhuZXdOb2RlcywgdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLm5vZGVzKCkpXG4gICAgKVxuXG4gICAgLy8gVE9ETyBiZXR0ZXIgdG8gc29sdmUgdGhpcyBieSBESVxuICAgIGJpbmRGbG93VG9Ob2Rlcyh0aGlzLmZsb3dNb2RlbCwgbmV3TW9kZWxzKVxuXG4gICAgLy8gcXVpY2sgYW5kIGRpcnR5IGJpbmRpbmcgbm9kZXMgdG8gZWRnZXNcbiAgICBhZGROb2Rlc1RvRWRnZXMobmV3TW9kZWxzLCB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UuZWRnZXMoKSlcblxuICAgIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5ub2Rlcy5zZXQobmV3TW9kZWxzKVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBub2RlTW9kZWxzKCkgeyByZXR1cm4gdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLm5vZGVzKCkgfVxuXG4gIC8qKlxuICAgKiBFZGdlcyB0byByZW5kZXJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZWRnZXMobmV3RWRnZXM6IEVkZ2VbXSkge1xuICAgIGNvbnN0IG5ld01vZGVscyA9IHJ1bkluSW5qZWN0aW9uQ29udGV4dCh0aGlzLmluamVjdG9yLFxuICAgICAgKCkgPT4gUmVmZXJlbmNlS2VlcGVyLmVkZ2VzKG5ld0VkZ2VzLCB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UuZWRnZXMoKSlcbiAgICApXG5cbiAgICAvLyBxdWljayBhbmQgZGlydHkgYmluZGluZyBub2RlcyB0byBlZGdlc1xuICAgIGFkZE5vZGVzVG9FZGdlcyh0aGlzLm5vZGVNb2RlbHMsIG5ld01vZGVscylcblxuICAgIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5lZGdlcy5zZXQobmV3TW9kZWxzKVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBlZGdlTW9kZWxzKCkgeyByZXR1cm4gdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLnZhbGlkRWRnZXMoKSB9XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIFRFTVBMQVRFU1xuICBAQ29udGVudENoaWxkKE5vZGVIdG1sVGVtcGxhdGVEaXJlY3RpdmUpXG4gIHByb3RlY3RlZCBub2RlSHRtbERpcmVjdGl2ZT86IE5vZGVIdG1sVGVtcGxhdGVEaXJlY3RpdmVcblxuICBAQ29udGVudENoaWxkKEVkZ2VUZW1wbGF0ZURpcmVjdGl2ZSlcbiAgcHJvdGVjdGVkIGVkZ2VUZW1wbGF0ZURpcmVjdGl2ZT86IEVkZ2VUZW1wbGF0ZURpcmVjdGl2ZVxuXG4gIEBDb250ZW50Q2hpbGQoRWRnZUxhYmVsSHRtbFRlbXBsYXRlRGlyZWN0aXZlKVxuICBwcm90ZWN0ZWQgZWRnZUxhYmVsSHRtbERpcmVjdGl2ZT86IEVkZ2VMYWJlbEh0bWxUZW1wbGF0ZURpcmVjdGl2ZVxuXG4gIEBDb250ZW50Q2hpbGQoQ29ubmVjdGlvblRlbXBsYXRlRGlyZWN0aXZlKVxuICBwcm90ZWN0ZWQgY29ubmVjdGlvblRlbXBsYXRlRGlyZWN0aXZlPzogQ29ubmVjdGlvblRlbXBsYXRlRGlyZWN0aXZlXG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIERJUkVDVElWRVNcbiAgQFZpZXdDaGlsZChNYXBDb250ZXh0RGlyZWN0aXZlKVxuICBwcm90ZWN0ZWQgbWFwQ29udGV4dCE6IE1hcENvbnRleHREaXJlY3RpdmVcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gU0lHTkFMX0FQSVxuICAvKipcbiAgICogU2lnbmFsIGZvciByZWFkaW5nIHZpZXdwb3J0IGNoYW5nZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZpZXdwb3J0ID0gdGhpcy52aWV3cG9ydFNlcnZpY2UucmVhZGFibGVWaWV3cG9ydC5hc1JlYWRvbmx5KClcblxuICAvKipcbiAgICogU2lnbmFsIGZvciByZWFkaW5nIG5vZGVzIGNoYW5nZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5vZGVzQ2hhbmdlID1cbiAgICB0b1NpZ25hbCh0aGlzLm5vZGVzQ2hhbmdlU2VydmljZS5jaGFuZ2VzJCwgeyBpbml0aWFsVmFsdWU6IFtdIGFzIE5vZGVDaGFuZ2VbXSB9KVxuXG4gIC8qKlxuICAgKiBTaWduYWwgdG8gcmVhZGluZyBlZGdlcyBjaGFuZ2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBlZGdlc0NoYW5nZSA9XG4gICAgdG9TaWduYWwodGhpcy5lZGdlc0NoYW5nZVNlcnZpY2UuY2hhbmdlcyQsIHsgaW5pdGlhbFZhbHVlOiBbXSBhcyBFZGdlQ2hhbmdlW10gfSlcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gUlhfQVBJXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIHdpdGggdmlld3BvcnQgY2hhbmdlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmlld3BvcnRDaGFuZ2UkID0gdG9PYnNlcnZhYmxlKHRoaXMudmlld3BvcnRTZXJ2aWNlLnJlYWRhYmxlVmlld3BvcnQpXG4gICAgLnBpcGUoc2tpcCgxKSkgLy8gc2tpcCBkZWZhdWx0IHZhbHVlIHRoYXQgc2V0IGJ5IHNpZ25hbFxuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIHdpdGggbm9kZXMgY2hhbmdlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbm9kZXNDaGFuZ2UkID0gdGhpcy5ub2Rlc0NoYW5nZVNlcnZpY2UuY2hhbmdlcyRcblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSB3aXRoIG5vZGVzIGNoYW5nZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGVkZ2VzQ2hhbmdlJCA9IHRoaXMuZWRnZXNDaGFuZ2VTZXJ2aWNlLmNoYW5nZXMkXG4gIC8vICNlbmRyZWdpb25cblxuICAvLyBUT0RPOiBwcm9iYWJseSBiZXR0ZXIgdG8gbWFrZSBpdCBpbmplY3RhYmxlXG4gIHByb3RlY3RlZCBmbG93TW9kZWwgPSBuZXcgRmxvd01vZGVsKClcblxuICBwcm90ZWN0ZWQgbWFya2VycyA9IHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5tYXJrZXJzXG5cbiAgLy8gI3JlZ2lvbiBNRVRIT0RTX0FQSVxuICAvKipcbiAgICogQ2hhbmdlIHZpZXdwb3J0IHRvIHNwZWNpZmllZCBzdGF0ZVxuICAgKlxuICAgKiBAcGFyYW0gdmlld3BvcnQgdmlld3BvcnQgc3RhdGVcbiAgICovXG4gIHB1YmxpYyB2aWV3cG9ydFRvKHZpZXdwb3J0OiBWaWV3cG9ydFN0YXRlKTogdm9pZCB7XG4gICAgdGhpcy52aWV3cG9ydFNlcnZpY2Uud3JpdGFibGVWaWV3cG9ydC5zZXQoeyBjaGFuZ2VUeXBlOiAnYWJzb2x1dGUnLCBzdGF0ZTogdmlld3BvcnQgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFuZ2Ugem9vbVxuICAgKlxuICAgKiBAcGFyYW0gem9vbSB6b29tIHZhbHVlXG4gICAqL1xuICBwdWJsaWMgem9vbVRvKHpvb206IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMudmlld3BvcnRTZXJ2aWNlLndyaXRhYmxlVmlld3BvcnQuc2V0KHsgY2hhbmdlVHlwZTogJ2Fic29sdXRlJywgc3RhdGU6IHsgem9vbSB9IH0pXG4gIH1cblxuICAvKipcbiAgICogTW92ZSB0byBzcGVjaWZpZWQgY29vcmRpbmF0ZVxuICAgKlxuICAgKiBAcGFyYW0gcG9pbnQgcG9pbnQgd2hlcmUgdG8gbW92ZVxuICAgKi9cbiAgcHVibGljIHBhblRvKHBvaW50OiBQb2ludCk6IHZvaWQge1xuICAgIHRoaXMudmlld3BvcnRTZXJ2aWNlLndyaXRhYmxlVmlld3BvcnQuc2V0KHsgY2hhbmdlVHlwZTogJ2Fic29sdXRlJywgc3RhdGU6IHBvaW50IH0pXG4gIH1cblxuICAvKipcbiAgICogR2V0IG5vZGUgYnkgaWRcbiAgICpcbiAgICogQHBhcmFtIGlkIG5vZGUgaWRcbiAgICovXG4gIHB1YmxpYyBnZXROb2RlPFQgPSB1bmtub3duPihpZDogc3RyaW5nKTogTm9kZTxUPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5nZXROb2RlPFQ+KGlkKT8ubm9kZVxuICB9XG5cbiAgLyoqXG4gICAqIFN5bmMgbWV0aG9kIHRvIGdldCBkZXRhY2hlZCBlZGdlc1xuICAgKi9cbiAgcHVibGljIGdldERldGFjaGVkRWRnZXMoKTogRWRnZVtdIHtcbiAgICByZXR1cm4gdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLmdldERldGFjaGVkRWRnZXMoKS5tYXAoZSA9PiBlLmVkZ2UpXG4gIH1cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIHByb3RlY3RlZCB0cmFja05vZGVzKGlkeDogbnVtYmVyLCB7IG5vZGUgfTogTm9kZU1vZGVsKSB7XG4gICAgcmV0dXJuIG5vZGVcbiAgfVxuXG4gIHByb3RlY3RlZCB0cmFja0VkZ2VzKGlkeDogbnVtYmVyLCB7IGVkZ2UgfTogRWRnZU1vZGVsKSB7XG4gICAgcmV0dXJuIGVkZ2VcbiAgfVxufVxuXG5mdW5jdGlvbiBiaW5kRmxvd1RvTm9kZXMoZmxvdzogRmxvd01vZGVsLCBub2RlczogTm9kZU1vZGVsW10pIHtcbiAgbm9kZXMuZm9yRWFjaChuID0+IG4uYmluZEZsb3coZmxvdykpXG59XG5cbiIsIjxzdmc6c3ZnXG4gIHJvb3RTdmdSZWZcbiAgcm9vdFN2Z0NvbnRleHRcbiAgY2xhc3M9XCJyb290LXN2Z1wiXG4gICNmbG93XG4gIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiYmFja2dyb3VuZFwiXG4gIFthdHRyLndpZHRoXT1cImZsb3dNb2RlbC5mbG93V2lkdGgoKVwiXG4gIFthdHRyLmhlaWdodF09XCJmbG93TW9kZWwuZmxvd0hlaWdodCgpXCJcbj5cbiAgPGRlZnMgW21hcmtlcnNdPVwibWFya2VycygpXCIgZmxvd0RlZnMgLz5cblxuICA8c3ZnOmdcbiAgICBtYXBDb250ZXh0XG4gICAgc3BhY2VQb2ludENvbnRleHRcbiAgICBbbWluWm9vbV09XCJtaW5ab29tXCJcbiAgICBbbWF4Wm9vbV09XCJtYXhab29tXCJcbiAgPlxuICAgIDwhLS0gQ29ubmVjdGlvbiAtLT5cbiAgICA8c3ZnOmdcbiAgICAgIGNvbm5lY3Rpb25cbiAgICAgIFttb2RlbF09XCJjb25uZWN0aW9uXCJcbiAgICAgIFt0ZW1wbGF0ZV09XCJjb25uZWN0aW9uVGVtcGxhdGVEaXJlY3RpdmU/LnRlbXBsYXRlUmVmXCJcbiAgICAvPlxuXG4gICAgPCEtLSBFZGdlcyAgLS0+XG4gICAgPHN2ZzpnXG4gICAgICAqbmdGb3I9XCJsZXQgbW9kZWwgb2YgZWRnZU1vZGVsczsgdHJhY2tCeTogdHJhY2tFZGdlc1wiXG4gICAgICBlZGdlXG4gICAgICBbbW9kZWxdPVwibW9kZWxcIlxuICAgICAgW2VkZ2VUZW1wbGF0ZV09XCJlZGdlVGVtcGxhdGVEaXJlY3RpdmU/LnRlbXBsYXRlUmVmXCJcbiAgICAgIFtlZGdlTGFiZWxIdG1sVGVtcGxhdGVdPVwiZWRnZUxhYmVsSHRtbERpcmVjdGl2ZT8udGVtcGxhdGVSZWZcIlxuICAgIC8+XG5cbiAgICA8IS0tIE5vZGVzIC0tPlxuICAgIDxzdmc6Z1xuICAgICAgKm5nRm9yPVwibGV0IG1vZGVsIG9mIG5vZGVNb2RlbHM7IHRyYWNrQnk6IHRyYWNrTm9kZXNcIlxuICAgICAgbm9kZVxuICAgICAgW25vZGVNb2RlbF09XCJtb2RlbFwiXG4gICAgICBbbm9kZUh0bWxUZW1wbGF0ZV09XCJub2RlSHRtbERpcmVjdGl2ZT8udGVtcGxhdGVSZWZcIlxuICAgICAgW2F0dHIudHJhbnNmb3JtXT1cIm1vZGVsLnBvaW50VHJhbnNmb3JtKClcIlxuICAgIC8+XG4gIDwvc3ZnOmc+XG5cbjwvc3ZnOnN2Zz5cbiJdfQ==
293
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmZsb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvdmZsb3cvdmZsb3cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvdmZsb3cvdmZsb3cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQix1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFnQixRQUFRLEVBQUUsS0FBSyxFQUE0QyxTQUFTLEVBQUUsUUFBUSxFQUFVLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV4TyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUdwRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsOEJBQThCLEVBQUUscUJBQXFCLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUVwSyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUc1QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUNqRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztB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WyJpbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IsIElucHV0LCBPbkNoYW5nZXMsIE91dHB1dCwgU2lnbmFsLCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgcnVuSW5JbmplY3Rpb25Db250ZXh0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOb2RlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9ub2RlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBNYXBDb250ZXh0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9tYXAtY29udGV4dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRHJhZ2dhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RyYWdnYWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5vZGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9ub2RlLm1vZGVsJztcbmltcG9ydCB7IFZpZXdwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZpZXdwb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEVkZ2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2VkZ2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IEVkZ2VNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9lZGdlLm1vZGVsJztcbmltcG9ydCB7IENvbm5lY3Rpb25UZW1wbGF0ZURpcmVjdGl2ZSwgRWRnZUxhYmVsSHRtbFRlbXBsYXRlRGlyZWN0aXZlLCBFZGdlVGVtcGxhdGVEaXJlY3RpdmUsIE5vZGVIdG1sVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3RlbXBsYXRlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBIYW5kbGVQb3NpdGlvbnMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2hhbmRsZS1wb3NpdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IGFkZE5vZGVzVG9FZGdlcyB9IGZyb20gJy4uLy4uL3V0aWxzL2FkZC1ub2Rlcy10by1lZGdlcyc7XG5pbXBvcnQgeyBza2lwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQb2ludCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcG9pbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFZpZXdwb3J0U3RhdGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3ZpZXdwb3J0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBGbG93U3RhdHVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zsb3ctc3RhdHVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29ubmVjdGlvbkNvbnRyb2xsZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2Nvbm5lY3Rpb24tY29udHJvbGxlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRmxvd0VudGl0aWVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zsb3ctZW50aXRpZXMuc2VydmljZSc7XG5pbXBvcnQgeyBDb25uZWN0aW9uU2V0dGluZ3MgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2Nvbm5lY3Rpb24tc2V0dGluZ3MuaW50ZXJmYWNlJztcbmltcG9ydCB7IENvbm5lY3Rpb25Nb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9jb25uZWN0aW9uLm1vZGVsJztcbmltcG9ydCB7IFJlZmVyZW5jZUtlZXBlciB9IGZyb20gJy4uLy4uL3V0aWxzL3JlZmVyZW5jZS1rZWVwZXInO1xuaW1wb3J0IHsgTm9kZXNDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm9kZS1jaGFuZ2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWRnZUNoYW5nZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZWRnZS1jaGFuZ2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm9kZUNoYW5nZSB9IGZyb20gJy4uLy4uL3R5cGVzL25vZGUtY2hhbmdlLnR5cGUnO1xuaW1wb3J0IHsgQ2hhbmdlc0NvbnRyb2xsZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2NoYW5nZXMtY29udHJvbGxlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRWRnZUNoYW5nZSB9IGZyb20gJy4uLy4uL3R5cGVzL2VkZ2UtY2hhbmdlLnR5cGUnO1xuaW1wb3J0IHsgTm9kZVJlbmRlcmluZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub2RlLXJlbmRlcmluZy5zZXJ2aWNlJztcbmltcG9ydCB7IFNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWxlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBGbG93U2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmxvdy1zZXR0aW5ncy5zZXJ2aWNlJztcblxuY29uc3QgY29ubmVjdGlvbkNvbnRyb2xsZXJIb3N0RGlyZWN0aXZlID0ge1xuICBkaXJlY3RpdmU6IENvbm5lY3Rpb25Db250cm9sbGVyRGlyZWN0aXZlLFxuICBvdXRwdXRzOiBbJ29uQ29ubmVjdCddXG59XG5cbmNvbnN0IGNoYW5nZXNDb250cm9sbGVySG9zdERpcmVjdGl2ZSA9IHtcbiAgZGlyZWN0aXZlOiBDaGFuZ2VzQ29udHJvbGxlckRpcmVjdGl2ZSxcbiAgb3V0cHV0czogW1xuICAgICdvbk5vZGVzQ2hhbmdlJyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5wb3NpdGlvbicsXG4gICAgJ29uTm9kZXNDaGFuZ2UucG9zaXRpb24uc2luZ2xlJyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5wb3NpdGlvbi5tYW55JyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5hZGQnLFxuICAgICdvbk5vZGVzQ2hhbmdlLmFkZC5zaW5nbGUnLFxuICAgICdvbk5vZGVzQ2hhbmdlLmFkZC5tYW55JyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5yZW1vdmUnLFxuICAgICdvbk5vZGVzQ2hhbmdlLnJlbW92ZS5zaW5nbGUnLFxuICAgICdvbk5vZGVzQ2hhbmdlLnJlbW92ZS5tYW55JyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5zZWxlY3QnLFxuICAgICdvbk5vZGVzQ2hhbmdlLnNlbGVjdC5zaW5nbGUnLFxuICAgICdvbk5vZGVzQ2hhbmdlLnNlbGVjdC5tYW55JyxcbiAgICAnb25FZGdlc0NoYW5nZScsXG4gICAgJ29uRWRnZXNDaGFuZ2UuZGV0YWNoZWQnLFxuICAgICdvbkVkZ2VzQ2hhbmdlLmRldGFjaGVkLnNpbmdsZScsXG4gICAgJ29uRWRnZXNDaGFuZ2UuZGV0YWNoZWQubWFueScsXG4gICAgJ29uRWRnZXNDaGFuZ2UuYWRkJyxcbiAgICAnb25FZGdlc0NoYW5nZS5hZGQuc2luZ2xlJyxcbiAgICAnb25FZGdlc0NoYW5nZS5hZGQubWFueScsXG4gICAgJ29uRWRnZXNDaGFuZ2UucmVtb3ZlJyxcbiAgICAnb25FZGdlc0NoYW5nZS5yZW1vdmUuc2luZ2xlJyxcbiAgICAnb25FZGdlc0NoYW5nZS5yZW1vdmUubWFueScsXG4gICAgJ29uRWRnZXNDaGFuZ2Uuc2VsZWN0JyxcbiAgICAnb25FZGdlc0NoYW5nZS5zZWxlY3Quc2luZ2xlJyxcbiAgICAnb25FZGdlc0NoYW5nZS5zZWxlY3QubWFueScsXG4gIF1cbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmZsb3cnLFxuICB0ZW1wbGF0ZVVybDogJy4vdmZsb3cuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi92Zmxvdy5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbXG4gICAgRHJhZ2dhYmxlU2VydmljZSxcbiAgICBWaWV3cG9ydFNlcnZpY2UsXG4gICAgRmxvd1N0YXR1c1NlcnZpY2UsXG4gICAgRmxvd0VudGl0aWVzU2VydmljZSxcbiAgICBOb2Rlc0NoYW5nZVNlcnZpY2UsXG4gICAgRWRnZUNoYW5nZXNTZXJ2aWNlLFxuICAgIE5vZGVSZW5kZXJpbmdTZXJ2aWNlLFxuICAgIFNlbGVjdGlvblNlcnZpY2UsXG4gICAgRmxvd1NldHRpbmdzU2VydmljZVxuICBdLFxuICBob3N0RGlyZWN0aXZlczogW1xuICAgIGNvbm5lY3Rpb25Db250cm9sbGVySG9zdERpcmVjdGl2ZSxcbiAgICBjaGFuZ2VzQ29udHJvbGxlckhvc3REaXJlY3RpdmVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBWZmxvd0NvbXBvbmVudCB7XG4gIC8vICNyZWdpb24gRElcbiAgcHJpdmF0ZSB2aWV3cG9ydFNlcnZpY2UgPSBpbmplY3QoVmlld3BvcnRTZXJ2aWNlKVxuICBwcml2YXRlIGZsb3dFbnRpdGllc1NlcnZpY2UgPSBpbmplY3QoRmxvd0VudGl0aWVzU2VydmljZSlcbiAgcHJpdmF0ZSBub2Rlc0NoYW5nZVNlcnZpY2UgPSBpbmplY3QoTm9kZXNDaGFuZ2VTZXJ2aWNlKVxuICBwcml2YXRlIGVkZ2VzQ2hhbmdlU2VydmljZSA9IGluamVjdChFZGdlQ2hhbmdlc1NlcnZpY2UpXG4gIHByaXZhdGUgbm9kZVJlbmRlcmluZ1NlcnZpY2UgPSBpbmplY3QoTm9kZVJlbmRlcmluZ1NlcnZpY2UpXG4gIHByaXZhdGUgZmxvd1NldHRpbmdzU2VydmljZSA9IGluamVjdChGbG93U2V0dGluZ3NTZXJ2aWNlKVxuICBwcml2YXRlIGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBTRVRUSU5HU1xuXG4gIC8qKlxuICAgKiBTaXplIGZvciBmbG93IHZpZXdcbiAgICpcbiAgICogYWNjZXB0c1xuICAgKiAtIGFic29sdXRlIHNpemUgaW4gZm9ybWF0IFt3aWR0aCwgaGVpZ2h0XSBvclxuICAgKiAtICdhdXRvJyB0byBjb21wdXRlIHNpemUgYmFzZWQgb24gcGFyZW50IGVsZW1lbnQgc2l6ZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCB2aWV3KHZpZXc6IFtudW1iZXIsIG51bWJlcl0gfCAnYXV0bycpIHtcbiAgICB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2Uudmlldy5zZXQodmlldylcbiAgfVxuXG4gIC8qKlxuICAgKiBNaW5pbXVtIHpvb20gdmFsdWVcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtaW5ab29tID0gMC41XG5cbiAgLyoqXG4gICAqIE1heGltdW0gem9vbSB2YWx1ZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIG1heFpvb20gPSAzXG5cbiAgLyoqXG4gICAqIE9iamVjdCB0aGF0IGNvbnRyb2xzIGZsb3cgZGlyZWN0aW9uLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gYXJjaGlldmUgcmlnaHQgdG8gbGVmdCBkaXJlY3Rpb25cbiAgICogdGhlbiB5b3UgbmVlZCB0byBwYXNzIHRoZXNlIHBvc2l0aW9ucyB7IHNvdXJjZTogJ2xlZnQnLCB0YXJnZXQ6ICdyaWdodCcgfVxuICAgKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBoYW5kbGVQb3NpdGlvbnMoaGFuZGxlUG9zaXRpb25zOiBIYW5kbGVQb3NpdGlvbnMpIHtcbiAgICB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UuaGFuZGxlUG9zaXRpb25zLnNldChoYW5kbGVQb3NpdGlvbnMpXG4gIH1cblxuICAvKipcbiAgICogQmFja2dyb3VuZCBjb2xvciBmb3IgZmxvd1xuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGJhY2tncm91bmQ6IHN0cmluZyA9ICcjRkZGRkZGJ1xuXG4gIC8qKlxuICAgKiBHbG9iYWwgcnVsZSBpZiB5b3UgY2FuIG9yIGNhbid0IHNlbGVjdCBlbnRpdGllc1xuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBlbnRpdGllc1NlbGVjdGFibGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UuZW50aXRpZXNTZWxlY3RhYmxlLnNldCh2YWx1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXR0aW5ncyBmb3IgY29ubmVjdGlvbiAoaXQgcmVuZGVycyB3aGVuIHVzZXIgdHJpZXMgdG8gY3JlYXRlIGVkZ2UgYmV0d2VlbiBub2RlcylcbiAgICpcbiAgICogWW91IG5lZWQgdG8gcGFzcyBgQ29ubmVjdGlvblNldHRpbmdzYCBpbiB0aGlzIGlucHV0LlxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiAoc2V0dGluZ3M6IENvbm5lY3Rpb25TZXR0aW5ncykgPT4gbmV3IENvbm5lY3Rpb25Nb2RlbChzZXR0aW5ncykgfSlcbiAgcHVibGljIHNldCBjb25uZWN0aW9uKGNvbm5lY3Rpb246IENvbm5lY3Rpb25Nb2RlbCkgeyB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UuY29ubmVjdGlvbi5zZXQoY29ubmVjdGlvbikgfVxuXG4gIHB1YmxpYyBnZXQgY29ubmVjdGlvbigpIHsgcmV0dXJuIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5jb25uZWN0aW9uKCkgfVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBNQUlOX0lOUFVUU1xuICAvKipcbiAgICogTm9kZXMgdG8gcmVuZGVyXG4gICAqL1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICBwdWJsaWMgc2V0IG5vZGVzKG5ld05vZGVzOiBOb2RlW10pIHtcbiAgICBjb25zdCBuZXdNb2RlbHMgPSBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5pbmplY3RvcixcbiAgICAgICgpID0+IFJlZmVyZW5jZUtlZXBlci5ub2RlcyhuZXdOb2RlcywgdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLm5vZGVzKCkpXG4gICAgKVxuXG4gICAgLy8gcXVpY2sgYW5kIGRpcnR5IGJpbmRpbmcgbm9kZXMgdG8gZWRnZXNcbiAgICBhZGROb2Rlc1RvRWRnZXMobmV3TW9kZWxzLCB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UuZWRnZXMoKSlcblxuICAgIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5ub2Rlcy5zZXQobmV3TW9kZWxzKVxuICB9XG5cbiAgcHJvdGVjdGVkIG5vZGVNb2RlbHMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm5vZGVSZW5kZXJpbmdTZXJ2aWNlLm5vZGVzKCkpXG5cbiAgLyoqXG4gICAqIEVkZ2VzIHRvIHJlbmRlclxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBlZGdlcyhuZXdFZGdlczogRWRnZVtdKSB7XG4gICAgY29uc3QgbmV3TW9kZWxzID0gcnVuSW5JbmplY3Rpb25Db250ZXh0KHRoaXMuaW5qZWN0b3IsXG4gICAgICAoKSA9PiBSZWZlcmVuY2VLZWVwZXIuZWRnZXMobmV3RWRnZXMsIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5lZGdlcygpKVxuICAgIClcblxuICAgIC8vIHF1aWNrIGFuZCBkaXJ0eSBiaW5kaW5nIG5vZGVzIHRvIGVkZ2VzXG4gICAgYWRkTm9kZXNUb0VkZ2VzKHRoaXMubm9kZU1vZGVscygpLCBuZXdNb2RlbHMpXG5cbiAgICB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UuZWRnZXMuc2V0KG5ld01vZGVscylcbiAgfVxuXG4gIHByb3RlY3RlZCBlZGdlTW9kZWxzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLnZhbGlkRWRnZXMoKSlcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gVEVNUExBVEVTXG4gIEBDb250ZW50Q2hpbGQoTm9kZUh0bWxUZW1wbGF0ZURpcmVjdGl2ZSlcbiAgcHJvdGVjdGVkIG5vZGVIdG1sRGlyZWN0aXZlPzogTm9kZUh0bWxUZW1wbGF0ZURpcmVjdGl2ZVxuXG4gIEBDb250ZW50Q2hpbGQoRWRnZVRlbXBsYXRlRGlyZWN0aXZlKVxuICBwcm90ZWN0ZWQgZWRnZVRlbXBsYXRlRGlyZWN0aXZlPzogRWRnZVRlbXBsYXRlRGlyZWN0aXZlXG5cbiAgQENvbnRlbnRDaGlsZChFZGdlTGFiZWxIdG1sVGVtcGxhdGVEaXJlY3RpdmUpXG4gIHByb3RlY3RlZCBlZGdlTGFiZWxIdG1sRGlyZWN0aXZlPzogRWRnZUxhYmVsSHRtbFRlbXBsYXRlRGlyZWN0aXZlXG5cbiAgQENvbnRlbnRDaGlsZChDb25uZWN0aW9uVGVtcGxhdGVEaXJlY3RpdmUpXG4gIHByb3RlY3RlZCBjb25uZWN0aW9uVGVtcGxhdGVEaXJlY3RpdmU/OiBDb25uZWN0aW9uVGVtcGxhdGVEaXJlY3RpdmVcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gRElSRUNUSVZFU1xuICBAVmlld0NoaWxkKE1hcENvbnRleHREaXJlY3RpdmUpXG4gIHByb3RlY3RlZCBtYXBDb250ZXh0ITogTWFwQ29udGV4dERpcmVjdGl2ZVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBTSUdOQUxfQVBJXG4gIC8qKlxuICAgKiBTaWduYWwgZm9yIHJlYWRpbmcgdmlld3BvcnQgY2hhbmdlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmlld3BvcnQgPSB0aGlzLnZpZXdwb3J0U2VydmljZS5yZWFkYWJsZVZpZXdwb3J0LmFzUmVhZG9ubHkoKVxuXG4gIC8qKlxuICAgKiBTaWduYWwgZm9yIHJlYWRpbmcgbm9kZXMgY2hhbmdlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbm9kZXNDaGFuZ2UgPVxuICAgIHRvU2lnbmFsKHRoaXMubm9kZXNDaGFuZ2VTZXJ2aWNlLmNoYW5nZXMkLCB7IGluaXRpYWxWYWx1ZTogW10gYXMgTm9kZUNoYW5nZVtdIH0pXG5cbiAgLyoqXG4gICAqIFNpZ25hbCB0byByZWFkaW5nIGVkZ2VzIGNoYW5nZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGVkZ2VzQ2hhbmdlID1cbiAgICB0b1NpZ25hbCh0aGlzLmVkZ2VzQ2hhbmdlU2VydmljZS5jaGFuZ2VzJCwgeyBpbml0aWFsVmFsdWU6IFtdIGFzIEVkZ2VDaGFuZ2VbXSB9KVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBSWF9BUElcbiAgLyoqXG4gICAqIE9ic2VydmFibGUgd2l0aCB2aWV3cG9ydCBjaGFuZ2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2aWV3cG9ydENoYW5nZSQgPSB0b09ic2VydmFibGUodGhpcy52aWV3cG9ydFNlcnZpY2UucmVhZGFibGVWaWV3cG9ydClcbiAgICAucGlwZShza2lwKDEpKSAvLyBza2lwIGRlZmF1bHQgdmFsdWUgdGhhdCBzZXQgYnkgc2lnbmFsXG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgd2l0aCBub2RlcyBjaGFuZ2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBub2Rlc0NoYW5nZSQgPSB0aGlzLm5vZGVzQ2hhbmdlU2VydmljZS5jaGFuZ2VzJFxuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIHdpdGggZWRnZXMgY2hhbmdlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZWRnZXNDaGFuZ2UkID0gdGhpcy5lZGdlc0NoYW5nZVNlcnZpY2UuY2hhbmdlcyRcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIHByb3RlY3RlZCBmbG93V2lkdGggPSB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UuZmxvd1dpZHRoXG4gIHByb3RlY3RlZCBmbG93SGVpZ2h0ID0gdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLmZsb3dIZWlnaHRcblxuICBwcm90ZWN0ZWQgbWFya2VycyA9IHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5tYXJrZXJzXG5cbiAgLy8gI3JlZ2lvbiBNRVRIT0RTX0FQSVxuICAvKipcbiAgICogQ2hhbmdlIHZpZXdwb3J0IHRvIHNwZWNpZmllZCBzdGF0ZVxuICAgKlxuICAgKiBAcGFyYW0gdmlld3BvcnQgdmlld3BvcnQgc3RhdGVcbiAgICovXG4gIHB1YmxpYyB2aWV3cG9ydFRvKHZpZXdwb3J0OiBWaWV3cG9ydFN0YXRlKTogdm9pZCB7XG4gICAgdGhpcy52aWV3cG9ydFNlcnZpY2Uud3JpdGFibGVWaWV3cG9ydC5zZXQoeyBjaGFuZ2VUeXBlOiAnYWJzb2x1dGUnLCBzdGF0ZTogdmlld3BvcnQgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFuZ2Ugem9vbVxuICAgKlxuICAgKiBAcGFyYW0gem9vbSB6b29tIHZhbHVlXG4gICAqL1xuICBwdWJsaWMgem9vbVRvKHpvb206IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMudmlld3BvcnRTZXJ2aWNlLndyaXRhYmxlVmlld3BvcnQuc2V0KHsgY2hhbmdlVHlwZTogJ2Fic29sdXRlJywgc3RhdGU6IHsgem9vbSB9IH0pXG4gIH1cblxuICAvKipcbiAgICogTW92ZSB0byBzcGVjaWZpZWQgY29vcmRpbmF0ZVxuICAgKlxuICAgKiBAcGFyYW0gcG9pbnQgcG9pbnQgd2hlcmUgdG8gbW92ZVxuICAgKi9cbiAgcHVibGljIHBhblRvKHBvaW50OiBQb2ludCk6IHZvaWQge1xuICAgIHRoaXMudmlld3BvcnRTZXJ2aWNlLndyaXRhYmxlVmlld3BvcnQuc2V0KHsgY2hhbmdlVHlwZTogJ2Fic29sdXRlJywgc3RhdGU6IHBvaW50IH0pXG4gIH1cblxuICAvKipcbiAgICogR2V0IG5vZGUgYnkgaWRcbiAgICpcbiAgICogQHBhcmFtIGlkIG5vZGUgaWRcbiAgICovXG4gIHB1YmxpYyBnZXROb2RlPFQgPSB1bmtub3duPihpZDogc3RyaW5nKTogTm9kZTxUPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5nZXROb2RlPFQ+KGlkKT8ubm9kZVxuICB9XG5cbiAgLyoqXG4gICAqIFN5bmMgbWV0aG9kIHRvIGdldCBkZXRhY2hlZCBlZGdlc1xuICAgKi9cbiAgcHVibGljIGdldERldGFjaGVkRWRnZXMoKTogRWRnZVtdIHtcbiAgICByZXR1cm4gdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLmdldERldGFjaGVkRWRnZXMoKS5tYXAoZSA9PiBlLmVkZ2UpXG4gIH1cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIHByb3RlY3RlZCB0cmFja05vZGVzKGlkeDogbnVtYmVyLCB7IG5vZGUgfTogTm9kZU1vZGVsKSB7XG4gICAgcmV0dXJuIG5vZGVcbiAgfVxuXG4gIHByb3RlY3RlZCB0cmFja0VkZ2VzKGlkeDogbnVtYmVyLCB7IGVkZ2UgfTogRWRnZU1vZGVsKSB7XG4gICAgcmV0dXJuIGVkZ2VcbiAgfVxufVxuXG5cbiIsIjxzdmc6c3ZnXG4gIHJvb3RTdmdSZWZcbiAgcm9vdFN2Z0NvbnRleHRcbiAgcm9vdFBvaW50ZXJcbiAgY2xhc3M9XCJyb290LXN2Z1wiXG4gICNmbG93XG4gIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiYmFja2dyb3VuZFwiXG4gIFthdHRyLndpZHRoXT1cImZsb3dXaWR0aCgpXCJcbiAgW2F0dHIuaGVpZ2h0XT1cImZsb3dIZWlnaHQoKVwiXG4+XG4gIDxkZWZzIFttYXJrZXJzXT1cIm1hcmtlcnMoKVwiIGZsb3dEZWZzIC8+XG5cbiAgPHN2ZzpnXG4gICAgbWFwQ29udGV4dFxuICAgIHNwYWNlUG9pbnRDb250ZXh0XG4gICAgW21pblpvb21dPVwibWluWm9vbVwiXG4gICAgW21heFpvb21dPVwibWF4Wm9vbVwiXG4gID5cbiAgICA8IS0tIENvbm5lY3Rpb24gLS0+XG4gICAgPHN2ZzpnXG4gICAgICBjb25uZWN0aW9uXG4gICAgICBbbW9kZWxdPVwiY29ubmVjdGlvblwiXG4gICAgICBbdGVtcGxhdGVdPVwiY29ubmVjdGlvblRlbXBsYXRlRGlyZWN0aXZlPy50ZW1wbGF0ZVJlZlwiXG4gICAgLz5cblxuICAgIDwhLS0gRWRnZXMgIC0tPlxuICAgIDxzdmc6Z1xuICAgICAgKm5nRm9yPVwibGV0IG1vZGVsIG9mIGVkZ2VNb2RlbHMoKTsgdHJhY2tCeTogdHJhY2tFZGdlc1wiXG4gICAgICBlZGdlXG4gICAgICBbbW9kZWxdPVwibW9kZWxcIlxuICAgICAgW2VkZ2VUZW1wbGF0ZV09XCJlZGdlVGVtcGxhdGVEaXJlY3RpdmU/LnRlbXBsYXRlUmVmXCJcbiAgICAgIFtlZGdlTGFiZWxIdG1sVGVtcGxhdGVdPVwiZWRnZUxhYmVsSHRtbERpcmVjdGl2ZT8udGVtcGxhdGVSZWZcIlxuICAgIC8+XG5cbiAgICA8IS0tIE5vZGVzIC0tPlxuICAgIDxzdmc6Z1xuICAgICAgKm5nRm9yPVwibGV0IG1vZGVsIG9mIG5vZGVNb2RlbHMoKTsgdHJhY2tCeTogdHJhY2tOb2Rlc1wiXG4gICAgICBub2RlXG4gICAgICBbbm9kZU1vZGVsXT1cIm1vZGVsXCJcbiAgICAgIFtub2RlSHRtbFRlbXBsYXRlXT1cIm5vZGVIdG1sRGlyZWN0aXZlPy50ZW1wbGF0ZVJlZlwiXG4gICAgICBbYXR0ci50cmFuc2Zvcm1dPVwibW9kZWwucG9pbnRUcmFuc2Zvcm0oKVwiXG4gICAgLz5cbiAgPC9zdmc6Zz5cblxuPC9zdmc6c3ZnPlxuIl19
@@ -1,9 +1,8 @@
1
- import { Directive, Injector, inject, runInInjectionContext } from "@angular/core";
2
- import * as i0 from "@angular/core";
1
+ import { runInInjectionContext } from "@angular/core";
3
2
  export function InjectionContext(target, key, descriptor) {
4
3
  const originalMethod = descriptor.value;
5
4
  descriptor.value = function (...args) {
6
- if (this instanceof WithInjectorDirective) {
5
+ if (implementsWithInjector(this)) {
7
6
  return runInInjectionContext(this.injector, () => originalMethod.apply(this, args));
8
7
  }
9
8
  else {
@@ -13,14 +12,7 @@ export function InjectionContext(target, key, descriptor) {
13
12
  // Return the modified descriptor
14
13
  return descriptor;
15
14
  }
16
- export class WithInjectorDirective {
17
- constructor() {
18
- this.injector = inject(Injector);
19
- }
20
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WithInjectorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
21
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: WithInjectorDirective, ngImport: i0 }); }
22
- }
23
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WithInjectorDirective, decorators: [{
24
- type: Directive
25
- }] });
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLWluLWluamVjdGlvbi1jb250ZXh0LmRlY29yYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9kZWNvcmF0b3JzL3J1bi1pbi1pbmplY3Rpb24tY29udGV4dC5kZWNvcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUVuRixNQUFNLFVBQVUsZ0JBQWdCLENBQUMsTUFBVyxFQUFFLEdBQVcsRUFBRSxVQUE4QjtJQUN2RixNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO0lBRXhDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsVUFBVSxHQUFHLElBQVc7UUFDekMsSUFBSSxJQUFJLFlBQVkscUJBQXFCLEVBQUU7WUFDekMsT0FBTyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUE7U0FDcEY7YUFBTTtZQUNMLE1BQU0sSUFBSSxLQUFLLENBQUMsK0VBQStFLENBQUMsQ0FBQTtTQUNqRztJQUNILENBQUMsQ0FBQztJQUVGLGlDQUFpQztJQUNqQyxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDO0FBR0QsTUFBTSxPQUFnQixxQkFBcUI7SUFEM0M7UUFFa0IsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtLQUM1QzsrR0FGcUIscUJBQXFCO21HQUFyQixxQkFBcUI7OzRGQUFyQixxQkFBcUI7a0JBRDFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEluamVjdG9yLCBpbmplY3QsIHJ1bkluSW5qZWN0aW9uQ29udGV4dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBJbmplY3Rpb25Db250ZXh0KHRhcmdldDogYW55LCBrZXk6IHN0cmluZywgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKSB7XG4gIGNvbnN0IG9yaWdpbmFsTWV0aG9kID0gZGVzY3JpcHRvci52YWx1ZTtcblxuICBkZXNjcmlwdG9yLnZhbHVlID0gZnVuY3Rpb24gKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBXaXRoSW5qZWN0b3JEaXJlY3RpdmUpIHtcbiAgICAgIHJldHVybiBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5pbmplY3RvciwgKCkgPT4gb3JpZ2luYWxNZXRob2QuYXBwbHkodGhpcywgYXJncykpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2xhc3MgdGhhdCBjb250YWlucyBkZWNvcmF0ZWQgbWV0aG9kIG11c3QgZXh0ZW5kcyBXaXRoSW5qZWN0b3JEaXJlY3RpdmUgY2xhc3MnKVxuICAgIH1cbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIG1vZGlmaWVkIGRlc2NyaXB0b3JcbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFdpdGhJbmplY3RvckRpcmVjdGl2ZSB7XG4gIHB1YmxpYyByZWFkb25seSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcilcbn1cbiJdfQ==
15
+ const implementsWithInjector = (instance) => {
16
+ return 'injector' in instance && 'get' in instance.injector;
17
+ };
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLWluLWluamVjdGlvbi1jb250ZXh0LmRlY29yYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9kZWNvcmF0b3JzL3J1bi1pbi1pbmplY3Rpb24tY29udGV4dC5kZWNvcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUErQixxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRixNQUFNLFVBQVUsZ0JBQWdCLENBQUMsTUFBVyxFQUFFLEdBQVcsRUFBRSxVQUE4QjtJQUN2RixNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO0lBRXhDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsVUFBVSxHQUFHLElBQVc7UUFDekMsSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNoQyxPQUFPLHFCQUFxQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQTtTQUNwRjthQUFNO1lBQ0wsTUFBTSxJQUFJLEtBQUssQ0FBQywrRUFBK0UsQ0FBQyxDQUFBO1NBQ2pHO0lBQ0gsQ0FBQyxDQUFDO0lBRUYsaUNBQWlDO0lBQ2pDLE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFNRCxNQUFNLHNCQUFzQixHQUFHLENBQUMsUUFBWSxFQUE0QixFQUFFO0lBQ3hFLE9BQU8sVUFBVSxJQUFJLFFBQVEsSUFBSSxLQUFLLElBQUssUUFBUSxDQUFDLFFBQXFCLENBQUM7QUFDNUUsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbmplY3RvciwgaW5qZWN0LCBydW5JbkluamVjdGlvbkNvbnRleHQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gSW5qZWN0aW9uQ29udGV4dCh0YXJnZXQ6IGFueSwga2V5OiBzdHJpbmcsIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcikge1xuICBjb25zdCBvcmlnaW5hbE1ldGhvZCA9IGRlc2NyaXB0b3IudmFsdWU7XG5cbiAgZGVzY3JpcHRvci52YWx1ZSA9IGZ1bmN0aW9uICguLi5hcmdzOiBhbnlbXSkge1xuICAgIGlmIChpbXBsZW1lbnRzV2l0aEluamVjdG9yKHRoaXMpKSB7XG4gICAgICByZXR1cm4gcnVuSW5JbmplY3Rpb25Db250ZXh0KHRoaXMuaW5qZWN0b3IsICgpID0+IG9yaWdpbmFsTWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3MpKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsYXNzIHRoYXQgY29udGFpbnMgZGVjb3JhdGVkIG1ldGhvZCBtdXN0IGV4dGVuZHMgV2l0aEluamVjdG9yRGlyZWN0aXZlIGNsYXNzJylcbiAgICB9XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSBtb2RpZmllZCBkZXNjcmlwdG9yXG4gIHJldHVybiBkZXNjcmlwdG9yO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdpdGhJbmplY3RvciB7XG4gIGluamVjdG9yOiBJbmplY3RvclxufVxuXG5jb25zdCBpbXBsZW1lbnRzV2l0aEluamVjdG9yID0gKGluc3RhbmNlOiB7fSk6IGluc3RhbmNlIGlzIFdpdGhJbmplY3RvciA9PiB7XG4gIHJldHVybiAnaW5qZWN0b3InIGluIGluc3RhbmNlICYmICdnZXQnIGluIChpbnN0YW5jZS5pbmplY3RvciBhcyBJbmplY3Rvcik7XG59XG4iXX0=
@@ -1,8 +1,7 @@
1
- import { Directive, EventEmitter, Output, inject } from '@angular/core';
1
+ import { Directive, Output, inject } from '@angular/core';
2
2
  import { EdgeChangesService } from '../services/edge-changes.service';
3
3
  import { NodesChangeService } from '../services/node-changes.service';
4
- import { tap } from 'rxjs';
5
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
+ import { filter, map } from 'rxjs';
6
5
  import * as i0 from "@angular/core";
7
6
  export class ChangesControllerDirective {
8
7
  constructor() {
@@ -11,20 +10,50 @@ export class ChangesControllerDirective {
11
10
  /**
12
11
  * Watch nodes change
13
12
  */
14
- this.onNodesChange = new EventEmitter();
13
+ this.onNodesChange = this.nodesChangeService.changes$;
14
+ this.onNodesChangePosition = this.nodeChangesOfType('position');
15
+ this.onNodesChangePositionSignle = this.singleChange(this.nodeChangesOfType('position'));
16
+ this.onNodesChangePositionMany = this.manyChanges(this.nodeChangesOfType('position'));
17
+ this.onNodesChangeAdd = this.nodeChangesOfType('add');
18
+ this.onNodesChangeAddSingle = this.singleChange(this.nodeChangesOfType('add'));
19
+ this.onNodesChangeAddMany = this.manyChanges(this.nodeChangesOfType('add'));
20
+ this.onNodesChangeRemove = this.nodeChangesOfType('remove');
21
+ this.onNodesChangeRemoveSingle = this.singleChange(this.nodeChangesOfType('remove'));
22
+ this.onNodesChangeRemoveMany = this.manyChanges(this.nodeChangesOfType('remove'));
23
+ this.onNodesChangeSelect = this.nodeChangesOfType('select');
24
+ this.onNodesChangeSelectSingle = this.singleChange(this.nodeChangesOfType('select'));
25
+ this.onNodesChangeSelectMany = this.manyChanges(this.nodeChangesOfType('select'));
15
26
  /**
16
- * Watch nodes change
27
+ * Watch edges change
17
28
  */
18
- this.onEdgesChange = new EventEmitter();
19
- this.nodesChangeProxySubscription = this.nodesChangeService.changes$
20
- .pipe(tap((changes) => this.onNodesChange.emit(changes)), takeUntilDestroyed())
21
- .subscribe();
22
- this.edgesChangeProxySubscription = this.edgesChangeService.changes$
23
- .pipe(tap((changes) => this.onEdgesChange.emit(changes)), takeUntilDestroyed())
24
- .subscribe();
29
+ this.onEdgesChange = this.edgesChangeService.changes$;
30
+ this.onNodesChangeDetached = this.edgeChangesOfType('detached');
31
+ this.onNodesChangeDetachedSingle = this.singleChange(this.edgeChangesOfType('detached'));
32
+ this.onNodesChangeDetachedMany = this.manyChanges(this.edgeChangesOfType('detached'));
33
+ this.onEdgesChangeAdd = this.edgeChangesOfType('add');
34
+ this.onEdgeChangeAddSingle = this.singleChange(this.edgeChangesOfType('add'));
35
+ this.onEdgeChangeAddMany = this.manyChanges(this.edgeChangesOfType('add'));
36
+ this.onEdgeChangeRemove = this.edgeChangesOfType('remove');
37
+ this.onEdgeChangeRemoveSingle = this.singleChange(this.edgeChangesOfType('remove'));
38
+ this.onEdgeChangeRemoveMany = this.manyChanges(this.edgeChangesOfType('remove'));
39
+ this.onEdgeChangeSelect = this.edgeChangesOfType('select');
40
+ this.onEdgeChangeSelectSingle = this.singleChange(this.edgeChangesOfType('select'));
41
+ this.onEdgeChangeSelectMany = this.manyChanges(this.edgeChangesOfType('select'));
42
+ }
43
+ nodeChangesOfType(type) {
44
+ return this.nodesChangeService.changes$.pipe(map(changes => changes.filter((c) => c.type === type)), filter(changes => !!changes.length));
45
+ }
46
+ edgeChangesOfType(type) {
47
+ return this.edgesChangeService.changes$.pipe(map(changes => changes.filter((c) => c.type === type)), filter(changes => !!changes.length));
48
+ }
49
+ singleChange(changes$) {
50
+ return changes$.pipe(filter(changes => changes.length === 1), map(([first]) => first));
51
+ }
52
+ manyChanges(changes$) {
53
+ return changes$.pipe(filter(changes => changes.length > 1));
25
54
  }
26
55
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ChangesControllerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
27
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: ChangesControllerDirective, isStandalone: true, selector: "[changesController]", outputs: { onNodesChange: "onNodesChange", onEdgesChange: "onEdgesChange" }, ngImport: i0 }); }
56
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: ChangesControllerDirective, isStandalone: true, selector: "[changesController]", outputs: { onNodesChange: "onNodesChange", onNodesChangePosition: "onNodesChange.position", onNodesChangePositionSignle: "onNodesChange.position.single", onNodesChangePositionMany: "onNodesChange.position.many", onNodesChangeAdd: "onNodesChange.add", onNodesChangeAddSingle: "onNodesChange.add.single", onNodesChangeAddMany: "onNodesChange.add.many", onNodesChangeRemove: "onNodesChange.remove", onNodesChangeRemoveSingle: "onNodesChange.remove.single", onNodesChangeRemoveMany: "onNodesChange.remove.many", onNodesChangeSelect: "onNodesChange.select", onNodesChangeSelectSingle: "onNodesChange.select.single", onNodesChangeSelectMany: "onNodesChange.select.many", onEdgesChange: "onEdgesChange", onNodesChangeDetached: "onEdgesChange.detached", onNodesChangeDetachedSingle: "onEdgesChange.detached.single", onNodesChangeDetachedMany: "onEdgesChange.detached.many", onEdgesChangeAdd: "onEdgesChange.add", onEdgeChangeAddSingle: "onEdgesChange.add.single", onEdgeChangeAddMany: "onEdgesChange.add.many", onEdgeChangeRemove: "onEdgesChange.remove", onEdgeChangeRemoveSingle: "onEdgesChange.remove.single", onEdgeChangeRemoveMany: "onEdgesChange.remove.many", onEdgeChangeSelect: "onEdgesChange.select", onEdgeChangeSelectSingle: "onEdgesChange.select.single", onEdgeChangeSelectMany: "onEdgesChange.select.many" }, ngImport: i0 }); }
28
57
  }
29
58
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ChangesControllerDirective, decorators: [{
30
59
  type: Directive,
@@ -34,7 +63,79 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
34
63
  }]
35
64
  }], propDecorators: { onNodesChange: [{
36
65
  type: Output
66
+ }], onNodesChangePosition: [{
67
+ type: Output,
68
+ args: ['onNodesChange.position']
69
+ }], onNodesChangePositionSignle: [{
70
+ type: Output,
71
+ args: ['onNodesChange.position.single']
72
+ }], onNodesChangePositionMany: [{
73
+ type: Output,
74
+ args: ['onNodesChange.position.many']
75
+ }], onNodesChangeAdd: [{
76
+ type: Output,
77
+ args: ['onNodesChange.add']
78
+ }], onNodesChangeAddSingle: [{
79
+ type: Output,
80
+ args: ['onNodesChange.add.single']
81
+ }], onNodesChangeAddMany: [{
82
+ type: Output,
83
+ args: ['onNodesChange.add.many']
84
+ }], onNodesChangeRemove: [{
85
+ type: Output,
86
+ args: ['onNodesChange.remove']
87
+ }], onNodesChangeRemoveSingle: [{
88
+ type: Output,
89
+ args: ['onNodesChange.remove.single']
90
+ }], onNodesChangeRemoveMany: [{
91
+ type: Output,
92
+ args: ['onNodesChange.remove.many']
93
+ }], onNodesChangeSelect: [{
94
+ type: Output,
95
+ args: ['onNodesChange.select']
96
+ }], onNodesChangeSelectSingle: [{
97
+ type: Output,
98
+ args: ['onNodesChange.select.single']
99
+ }], onNodesChangeSelectMany: [{
100
+ type: Output,
101
+ args: ['onNodesChange.select.many']
37
102
  }], onEdgesChange: [{
38
103
  type: Output
104
+ }], onNodesChangeDetached: [{
105
+ type: Output,
106
+ args: ['onEdgesChange.detached']
107
+ }], onNodesChangeDetachedSingle: [{
108
+ type: Output,
109
+ args: ['onEdgesChange.detached.single']
110
+ }], onNodesChangeDetachedMany: [{
111
+ type: Output,
112
+ args: ['onEdgesChange.detached.many']
113
+ }], onEdgesChangeAdd: [{
114
+ type: Output,
115
+ args: ['onEdgesChange.add']
116
+ }], onEdgeChangeAddSingle: [{
117
+ type: Output,
118
+ args: ['onEdgesChange.add.single']
119
+ }], onEdgeChangeAddMany: [{
120
+ type: Output,
121
+ args: ['onEdgesChange.add.many']
122
+ }], onEdgeChangeRemove: [{
123
+ type: Output,
124
+ args: ['onEdgesChange.remove']
125
+ }], onEdgeChangeRemoveSingle: [{
126
+ type: Output,
127
+ args: ['onEdgesChange.remove.single']
128
+ }], onEdgeChangeRemoveMany: [{
129
+ type: Output,
130
+ args: ['onEdgesChange.remove.many']
131
+ }], onEdgeChangeSelect: [{
132
+ type: Output,
133
+ args: ['onEdgesChange.select']
134
+ }], onEdgeChangeSelectSingle: [{
135
+ type: Output,
136
+ args: ['onEdgesChange.select.single']
137
+ }], onEdgeChangeSelectMany: [{
138
+ type: Output,
139
+ args: ['onEdgesChange.select.many']
39
140
  }] } });
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbmdlcy1jb250cm9sbGVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9kaXJlY3RpdmVzL2NoYW5nZXMtY29udHJvbGxlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQU9oRSxNQUFNLE9BQU8sMEJBQTBCO0lBSnZDO1FBS1ksdUJBQWtCLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUE7UUFDL0MsdUJBQWtCLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUE7UUFFekQ7O1dBRUc7UUFFSSxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFnQixDQUFBO1FBRXZEOztXQUVHO1FBRUksa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBZ0IsQ0FBQTtRQUU3QyxpQ0FBNEIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUTthQUN0RSxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUNsRCxrQkFBa0IsRUFBRSxDQUNyQjthQUNBLFNBQVMsRUFBRSxDQUFBO1FBRUosaUNBQTRCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVE7YUFDdEUsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsRUFDbEQsa0JBQWtCLEVBQUUsQ0FDckI7YUFDQSxTQUFTLEVBQUUsQ0FBQTtLQUNmOytHQTdCWSwwQkFBMEI7bUdBQTFCLDBCQUEwQjs7NEZBQTFCLDBCQUEwQjtrQkFKdEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUscUJBQXFCO29CQUMvQixVQUFVLEVBQUUsSUFBSTtpQkFDakI7OEJBU1EsYUFBYTtzQkFEbkIsTUFBTTtnQkFPQSxhQUFhO3NCQURuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgZWZmZWN0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5vZGVDaGFuZ2UgfSBmcm9tICcuLi90eXBlcy9ub2RlLWNoYW5nZS50eXBlJztcbmltcG9ydCB7IEVkZ2VDaGFuZ2VzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2VkZ2UtY2hhbmdlcy5zZXJ2aWNlJztcbmltcG9ydCB7IE5vZGVzQ2hhbmdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL25vZGUtY2hhbmdlcy5zZXJ2aWNlJztcbmltcG9ydCB7IHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRWRnZUNoYW5nZSB9IGZyb20gJy4uL3R5cGVzL2VkZ2UtY2hhbmdlLnR5cGUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbY2hhbmdlc0NvbnRyb2xsZXJdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBDaGFuZ2VzQ29udHJvbGxlckRpcmVjdGl2ZSB7XG4gIHByb3RlY3RlZCBub2Rlc0NoYW5nZVNlcnZpY2UgPSBpbmplY3QoTm9kZXNDaGFuZ2VTZXJ2aWNlKVxuICBwcm90ZWN0ZWQgZWRnZXNDaGFuZ2VTZXJ2aWNlID0gaW5qZWN0KEVkZ2VDaGFuZ2VzU2VydmljZSlcblxuICAvKipcbiAgICogV2F0Y2ggbm9kZXMgY2hhbmdlXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIG9uTm9kZXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPE5vZGVDaGFuZ2VbXT4oKVxuXG4gIC8qKlxuICAgKiBXYXRjaCBub2RlcyBjaGFuZ2VcbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgb25FZGdlc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RWRnZUNoYW5nZVtdPigpXG5cbiAgcHJvdGVjdGVkIG5vZGVzQ2hhbmdlUHJveHlTdWJzY3JpcHRpb24gPSB0aGlzLm5vZGVzQ2hhbmdlU2VydmljZS5jaGFuZ2VzJFxuICAgIC5waXBlKFxuICAgICAgdGFwKChjaGFuZ2VzKSA9PiB0aGlzLm9uTm9kZXNDaGFuZ2UuZW1pdChjaGFuZ2VzKSksXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKVxuICAgIClcbiAgICAuc3Vic2NyaWJlKClcblxuICBwcm90ZWN0ZWQgZWRnZXNDaGFuZ2VQcm94eVN1YnNjcmlwdGlvbiA9IHRoaXMuZWRnZXNDaGFuZ2VTZXJ2aWNlLmNoYW5nZXMkXG4gICAgLnBpcGUoXG4gICAgICB0YXAoKGNoYW5nZXMpID0+IHRoaXMub25FZGdlc0NoYW5nZS5lbWl0KGNoYW5nZXMpKSxcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpXG4gICAgKVxuICAgIC5zdWJzY3JpYmUoKVxufVxuIl19
141
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbmdlcy1jb250cm9sbGVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9kaXJlY3RpdmVzL2NoYW5nZXMtY29udHJvbGxlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sRUFBYyxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQU8vQyxNQUFNLE9BQU8sMEJBQTBCO0lBSnZDO1FBS1ksdUJBQWtCLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUE7UUFDL0MsdUJBQWtCLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUE7UUFFekQ7O1dBRUc7UUFFSSxrQkFBYSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUE7UUFHaEQsMEJBQXFCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBRzFELGdDQUEyQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQ3BELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FDbkMsQ0FBQTtRQUdNLDhCQUF5QixHQUFHLElBQUksQ0FBQyxXQUFXLENBQ2pELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FDbkMsQ0FBQTtRQUdNLHFCQUFnQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUdoRCwyQkFBc0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUMvQyxJQUFJ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QU0zQixvQkFBb0I7c0JBRDFCLE1BQU07dUJBQUMsd0JBQXdCO2dCQU16QixtQkFBbUI7c0JBRHpCLE1BQU07dUJBQUMsc0JBQXNCO2dCQUl2Qix5QkFBeUI7c0JBRC9CLE1BQU07dUJBQUMsNkJBQTZCO2dCQU05Qix1QkFBdUI7c0JBRDdCLE1BQU07dUJBQUMsMkJBQTJCO2dCQU01QixtQkFBbUI7c0JBRHpCLE1BQU07dUJBQUMsc0JBQXNCO2dCQUl2Qix5QkFBeUI7c0JBRC9CLE1BQU07dUJBQUMsNkJBQTZCO2dCQU05Qix1QkFBdUI7c0JBRDdCLE1BQU07dUJBQUMsMkJBQTJCO2dCQVM1QixhQUFhO3NCQURuQixNQUFNO2dCQUlBLHFCQUFxQjtzQkFEM0IsTUFBTTt1QkFBQyx3QkFBd0I7Z0JBSXpCLDJCQUEyQjtzQkFEakMsTUFBTTt1QkFBQywrQkFBK0I7Z0JBTWhDLHlCQUF5QjtzQkFEL0IsTUFBTTt1QkFBQyw2QkFBNkI7Z0JBTTlCLGdCQUFnQjtzQkFEdEIsTUFBTTt1QkFBQyxtQkFBbUI7Z0JBSXBCLHFCQUFxQjtzQkFEM0IsTUFBTTt1QkFBQywwQkFBMEI7Z0JBTTNCLG1CQUFtQjtzQkFEekIsTUFBTTt1QkFBQyx3QkFBd0I7Z0JBTXpCLGtCQUFrQjtzQkFEeEIsTUFBTTt1QkFBQyxzQkFBc0I7Z0JBSXZCLHdCQUF3QjtzQkFEOUIsTUFBTTt1QkFBQyw2QkFBNkI7Z0JBTTlCLHNCQUFzQjtzQkFENUIsTUFBTTt1QkFBQywyQkFBMkI7Z0JBTTVCLGtCQUFrQjtzQkFEeEIsTUFBTTt1QkFBQyxzQkFBc0I7Z0JBSXZCLHdCQUF3QjtzQkFEOUIsTUFBTTt1QkFBQyw2QkFBNkI7Z0JBTTlCLHNCQUFzQjtzQkFENUIsTUFBTTt1QkFBQywyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIE91dHB1dCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOb2RlQWRkQ2hhbmdlLCBOb2RlQ2hhbmdlLCBOb2RlUG9zaXRpb25DaGFuZ2UsIE5vZGVSZW1vdmVDaGFuZ2UsIE5vZGVTZWxlY3RlZENoYW5nZSB9IGZyb20gJy4uL3R5cGVzL25vZGUtY2hhbmdlLnR5cGUnO1xuaW1wb3J0IHsgRWRnZUNoYW5nZXNTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZWRnZS1jaGFuZ2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm9kZXNDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbm9kZS1jaGFuZ2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZmlsdGVyLCBtYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVkZ2VBZGRDaGFuZ2UsIEVkZ2VDaGFuZ2UsIEVkZ2VEZXRhY2hlZENoYW5nZSwgRWRnZVJlbW92ZUNoYW5nZSwgRWRnZVNlbGVjdENoYW5nZSB9IGZyb20gJy4uL3R5cGVzL2VkZ2UtY2hhbmdlLnR5cGUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbY2hhbmdlc0NvbnRyb2xsZXJdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBDaGFuZ2VzQ29udHJvbGxlckRpcmVjdGl2ZSB7XG4gIHByb3RlY3RlZCBub2Rlc0NoYW5nZVNlcnZpY2UgPSBpbmplY3QoTm9kZXNDaGFuZ2VTZXJ2aWNlKVxuICBwcm90ZWN0ZWQgZWRnZXNDaGFuZ2VTZXJ2aWNlID0gaW5qZWN0KEVkZ2VDaGFuZ2VzU2VydmljZSlcblxuICAvKipcbiAgICogV2F0Y2ggbm9kZXMgY2hhbmdlXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIG9uTm9kZXNDaGFuZ2UgPSB0aGlzLm5vZGVzQ2hhbmdlU2VydmljZS5jaGFuZ2VzJFxuXG4gIEBPdXRwdXQoJ29uTm9kZXNDaGFuZ2UucG9zaXRpb24nKVxuICBwdWJsaWMgb25Ob2Rlc0NoYW5nZVBvc2l0aW9uID0gdGhpcy5ub2RlQ2hhbmdlc09mVHlwZSgncG9zaXRpb24nKVxuXG4gIEBPdXRwdXQoJ29uTm9kZXNDaGFuZ2UucG9zaXRpb24uc2luZ2xlJylcbiAgcHVibGljIG9uTm9kZXNDaGFuZ2VQb3NpdGlvblNpZ25sZSA9IHRoaXMuc2luZ2xlQ2hhbmdlKFxuICAgIHRoaXMubm9kZUNoYW5nZXNPZlR5cGUoJ3Bvc2l0aW9uJylcbiAgKVxuXG4gIEBPdXRwdXQoJ29uTm9kZXNDaGFuZ2UucG9zaXRpb24ubWFueScpXG4gIHB1YmxpYyBvbk5vZGVzQ2hhbmdlUG9zaXRpb25NYW55ID0gdGhpcy5tYW55Q2hhbmdlcyhcbiAgICB0aGlzLm5vZGVDaGFuZ2VzT2ZUeXBlKCdwb3NpdGlvbicpXG4gIClcblxuICBAT3V0cHV0KCdvbk5vZGVzQ2hhbmdlLmFkZCcpXG4gIHB1YmxpYyBvbk5vZGVzQ2hhbmdlQWRkID0gdGhpcy5ub2RlQ2hhbmdlc09mVHlwZSgnYWRkJylcblxuICBAT3V0cHV0KCdvbk5vZGVzQ2hhbmdlLmFkZC5zaW5nbGUnKVxuICBwdWJsaWMgb25Ob2Rlc0NoYW5nZUFkZFNpbmdsZSA9IHRoaXMuc2luZ2xlQ2hhbmdlKFxuICAgIHRoaXMubm9kZUNoYW5nZXNPZlR5cGUoJ2FkZCcpXG4gIClcblxuICBAT3V0cHV0KCdvbk5vZGVzQ2hhbmdlLmFkZC5tYW55JylcbiAgcHVibGljIG9uTm9kZXNDaGFuZ2VBZGRNYW55ID0gdGhpcy5tYW55Q2hhbmdlcyhcbiAgICB0aGlzLm5vZGVDaGFuZ2VzT2ZUeXBlKCdhZGQnKVxuICApXG5cbiAgQE91dHB1dCgnb25Ob2Rlc0NoYW5nZS5yZW1vdmUnKVxuICBwdWJsaWMgb25Ob2Rlc0NoYW5nZVJlbW92ZSA9IHRoaXMubm9kZUNoYW5nZXNPZlR5cGUoJ3JlbW92ZScpXG5cbiAgQE91dHB1dCgnb25Ob2Rlc0NoYW5nZS5yZW1vdmUuc2luZ2xlJylcbiAgcHVibGljIG9uTm9kZXNDaGFuZ2VSZW1vdmVTaW5nbGUgPSB0aGlzLnNpbmdsZUNoYW5nZShcbiAgICB0aGlzLm5vZGVDaGFuZ2VzT2ZUeXBlKCdyZW1vdmUnKVxuICApXG5cbiAgQE91dHB1dCgnb25Ob2Rlc0NoYW5nZS5yZW1vdmUubWFueScpXG4gIHB1YmxpYyBvbk5vZGVzQ2hhbmdlUmVtb3ZlTWFueSA9IHRoaXMubWFueUNoYW5nZXMoXG4gICAgdGhpcy5ub2RlQ2hhbmdlc09mVHlwZSgncmVtb3ZlJylcbiAgKVxuXG4gIEBPdXRwdXQoJ29uTm9kZXNDaGFuZ2Uuc2VsZWN0JylcbiAgcHVibGljIG9uTm9kZXNDaGFuZ2VTZWxlY3QgPSB0aGlzLm5vZGVDaGFuZ2VzT2ZUeXBlKCdzZWxlY3QnKVxuXG4gIEBPdXRwdXQoJ29uTm9kZXNDaGFuZ2Uuc2VsZWN0LnNpbmdsZScpXG4gIHB1YmxpYyBvbk5vZGVzQ2hhbmdlU2VsZWN0U2luZ2xlID0gdGhpcy5zaW5nbGVDaGFuZ2UoXG4gICAgdGhpcy5ub2RlQ2hhbmdlc09mVHlwZSgnc2VsZWN0JylcbiAgKVxuXG4gIEBPdXRwdXQoJ29uTm9kZXNDaGFuZ2Uuc2VsZWN0Lm1hbnknKVxuICBwdWJsaWMgb25Ob2Rlc0NoYW5nZVNlbGVjdE1hbnkgPSB0aGlzLm1hbnlDaGFuZ2VzKFxuICAgIHRoaXMubm9kZUNoYW5nZXNPZlR5cGUoJ3NlbGVjdCcpXG4gIClcblxuICAvKipcbiAgICogV2F0Y2ggZWRnZXMgY2hhbmdlXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIG9uRWRnZXNDaGFuZ2UgPSB0aGlzLmVkZ2VzQ2hhbmdlU2VydmljZS5jaGFuZ2VzJFxuXG4gIEBPdXRwdXQoJ29uRWRnZXNDaGFuZ2UuZGV0YWNoZWQnKVxuICBwdWJsaWMgb25Ob2Rlc0NoYW5nZURldGFjaGVkID0gdGhpcy5lZGdlQ2hhbmdlc09mVHlwZSgnZGV0YWNoZWQnKVxuXG4gIEBPdXRwdXQoJ29uRWRnZXNDaGFuZ2UuZGV0YWNoZWQuc2luZ2xlJylcbiAgcHVibGljIG9uTm9kZXNDaGFuZ2VEZXRhY2hlZFNpbmdsZSA9IHRoaXMuc2luZ2xlQ2hhbmdlKFxuICAgIHRoaXMuZWRnZUNoYW5nZXNPZlR5cGUoJ2RldGFjaGVkJylcbiAgKVxuXG4gIEBPdXRwdXQoJ29uRWRnZXNDaGFuZ2UuZGV0YWNoZWQubWFueScpXG4gIHB1YmxpYyBvbk5vZGVzQ2hhbmdlRGV0YWNoZWRNYW55ID0gdGhpcy5tYW55Q2hhbmdlcyhcbiAgICB0aGlzLmVkZ2VDaGFuZ2VzT2ZUeXBlKCdkZXRhY2hlZCcpXG4gIClcblxuICBAT3V0cHV0KCdvbkVkZ2VzQ2hhbmdlLmFkZCcpXG4gIHB1YmxpYyBvbkVkZ2VzQ2hhbmdlQWRkID0gdGhpcy5lZGdlQ2hhbmdlc09mVHlwZSgnYWRkJylcblxuICBAT3V0cHV0KCdvbkVkZ2VzQ2hhbmdlLmFkZC5zaW5nbGUnKVxuICBwdWJsaWMgb25FZGdlQ2hhbmdlQWRkU2luZ2xlID0gdGhpcy5zaW5nbGVDaGFuZ2UoXG4gICAgdGhpcy5lZGdlQ2hhbmdlc09mVHlwZSgnYWRkJylcbiAgKVxuXG4gIEBPdXRwdXQoJ29uRWRnZXNDaGFuZ2UuYWRkLm1hbnknKVxuICBwdWJsaWMgb25FZGdlQ2hhbmdlQWRkTWFueSA9IHRoaXMubWFueUNoYW5nZXMoXG4gICAgdGhpcy5lZGdlQ2hhbmdlc09mVHlwZSgnYWRkJylcbiAgKVxuXG4gIEBPdXRwdXQoJ29uRWRnZXNDaGFuZ2UucmVtb3ZlJylcbiAgcHVibGljIG9uRWRnZUNoYW5nZVJlbW92ZSA9IHRoaXMuZWRnZUNoYW5nZXNPZlR5cGUoJ3JlbW92ZScpXG5cbiAgQE91dHB1dCgnb25FZGdlc0NoYW5nZS5yZW1vdmUuc2luZ2xlJylcbiAgcHVibGljIG9uRWRnZUNoYW5nZVJlbW92ZVNpbmdsZSA9IHRoaXMuc2luZ2xlQ2hhbmdlKFxuICAgIHRoaXMuZWRnZUNoYW5nZXNPZlR5cGUoJ3JlbW92ZScpXG4gIClcblxuICBAT3V0cHV0KCdvbkVkZ2VzQ2hhbmdlLnJlbW92ZS5tYW55JylcbiAgcHVibGljIG9uRWRnZUNoYW5nZVJlbW92ZU1hbnkgPSB0aGlzLm1hbnlDaGFuZ2VzKFxuICAgIHRoaXMuZWRnZUNoYW5nZXNPZlR5cGUoJ3JlbW92ZScpXG4gIClcblxuICBAT3V0cHV0KCdvbkVkZ2VzQ2hhbmdlLnNlbGVjdCcpXG4gIHB1YmxpYyBvbkVkZ2VDaGFuZ2VTZWxlY3QgPSB0aGlzLmVkZ2VDaGFuZ2VzT2ZUeXBlKCdzZWxlY3QnKVxuXG4gIEBPdXRwdXQoJ29uRWRnZXNDaGFuZ2Uuc2VsZWN0LnNpbmdsZScpXG4gIHB1YmxpYyBvbkVkZ2VDaGFuZ2VTZWxlY3RTaW5nbGUgPSB0aGlzLnNpbmdsZUNoYW5nZShcbiAgICB0aGlzLmVkZ2VDaGFuZ2VzT2ZUeXBlKCdzZWxlY3QnKVxuICApXG5cbiAgQE91dHB1dCgnb25FZGdlc0NoYW5nZS5zZWxlY3QubWFueScpXG4gIHB1YmxpYyBvbkVkZ2VDaGFuZ2VTZWxlY3RNYW55ID0gdGhpcy5tYW55Q2hhbmdlcyhcbiAgICB0aGlzLmVkZ2VDaGFuZ2VzT2ZUeXBlKCdzZWxlY3QnKVxuICApXG5cbiAgcHJpdmF0ZSBub2RlQ2hhbmdlc09mVHlwZTxUIGV4dGVuZHMgTm9kZUNoYW5nZVsndHlwZSddPih0eXBlOiBUKSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZXNDaGFuZ2VTZXJ2aWNlLmNoYW5nZXMkLnBpcGUoXG4gICAgICBtYXAoY2hhbmdlcyA9PiBjaGFuZ2VzLmZpbHRlcigoYyk6IGMgaXMgTm9kZUNoYW5nZU1hcFtUXSA9PiBjLnR5cGUgPT09IHR5cGUpKSxcbiAgICAgIGZpbHRlcihjaGFuZ2VzID0+ICEhY2hhbmdlcy5sZW5ndGgpXG4gICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBlZGdlQ2hhbmdlc09mVHlwZTxUIGV4dGVuZHMgRWRnZUNoYW5nZVsndHlwZSddPih0eXBlOiBUKSB7XG4gICAgcmV0dXJuIHRoaXMuZWRnZXNDaGFuZ2VTZXJ2aWNlLmNoYW5nZXMkLnBpcGUoXG4gICAgICBtYXAoY2hhbmdlcyA9PiBjaGFuZ2VzLmZpbHRlcigoYyk6IGMgaXMgRWRnZUNoYW5nZU1hcFtUXSA9PiBjLnR5cGUgPT09IHR5cGUpKSxcbiAgICAgIGZpbHRlcihjaGFuZ2VzID0+ICEhY2hhbmdlcy5sZW5ndGgpXG4gICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBzaW5nbGVDaGFuZ2U8VD4oY2hhbmdlcyQ6IE9ic2VydmFibGU8VFtdPikge1xuICAgIHJldHVybiBjaGFuZ2VzJC5waXBlKFxuICAgICAgZmlsdGVyKGNoYW5nZXMgPT4gY2hhbmdlcy5sZW5ndGggPT09IDEpLFxuICAgICAgbWFwKChbZmlyc3RdKSA9PiBmaXJzdClcbiAgICApXG4gIH1cblxuICBwcml2YXRlIG1hbnlDaGFuZ2VzPFQ+KGNoYW5nZXMkOiBPYnNlcnZhYmxlPFRbXT4pIHtcbiAgICByZXR1cm4gY2hhbmdlcyQucGlwZShcbiAgICAgIGZpbHRlcihjaGFuZ2VzID0+IGNoYW5nZXMubGVuZ3RoID4gMSksXG4gICAgKVxuICB9XG59XG5cbi8vIFRPRE86IGRvIG5vdCB3cml0ZSB0aGlzIHR5cGVzIG1hbnVhbGx5XG50eXBlIE5vZGVDaGFuZ2VNYXAgPSB7XG4gIHBvc2l0aW9uOiBOb2RlUG9zaXRpb25DaGFuZ2UsXG4gIGFkZDogTm9kZUFkZENoYW5nZSxcbiAgcmVtb3ZlOiBOb2RlUmVtb3ZlQ2hhbmdlLFxuICBzZWxlY3Q6IE5vZGVTZWxlY3RlZENoYW5nZVxufVxuXG50eXBlIEVkZ2VDaGFuZ2VNYXAgPSB7XG4gIGRldGFjaGVkOiBFZGdlRGV0YWNoZWRDaGFuZ2UsXG4gIGFkZDogRWRnZUFkZENoYW5nZSxcbiAgcmVtb3ZlOiBFZGdlUmVtb3ZlQ2hhbmdlLFxuICBzZWxlY3Q6IEVkZ2VTZWxlY3RDaGFuZ2Vcbn1cbiJdfQ==