@worktile/gantt 12.2.1 → 12.2.2

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 (45) hide show
  1. package/bundles/worktile-gantt.umd.js +305 -210
  2. package/bundles/worktile-gantt.umd.js.map +1 -1
  3. package/components/bar/bar-drag.d.ts +4 -2
  4. package/components/bar/bar.component.d.ts +4 -4
  5. package/components/calendar/calendar.component.d.ts +3 -5
  6. package/components/drag-backdrop/drag-backdrop.component.d.ts +1 -5
  7. package/components/icon/icon.component.d.ts +2 -4
  8. package/components/main/gantt-main.component.d.ts +2 -3
  9. package/components/range/range.component.d.ts +2 -5
  10. package/components/table/gantt-table.component.d.ts +2 -3
  11. package/esm2015/components/bar/bar-drag.js +24 -17
  12. package/esm2015/components/bar/bar.component.js +21 -14
  13. package/esm2015/components/calendar/calendar.component.js +16 -11
  14. package/esm2015/components/drag-backdrop/drag-backdrop.component.js +8 -12
  15. package/esm2015/components/icon/icon.component.js +1 -3
  16. package/esm2015/components/links/links.component.js +2 -2
  17. package/esm2015/components/main/gantt-main.component.js +1 -2
  18. package/esm2015/components/range/range.component.js +2 -11
  19. package/esm2015/components/table/gantt-table.component.js +7 -3
  20. package/esm2015/gantt-dom.service.js +39 -25
  21. package/esm2015/gantt-item-upper.js +5 -5
  22. package/esm2015/gantt-print.service.js +50 -47
  23. package/esm2015/gantt-upper.js +27 -18
  24. package/esm2015/gantt.component.js +17 -16
  25. package/esm2015/root.component.js +41 -29
  26. package/esm2015/table/gantt-column.component.js +1 -2
  27. package/esm2015/table/gantt-table.component.js +2 -3
  28. package/esm2015/utils/passive-listeners.js +30 -0
  29. package/esm2015/utils/set-style-with-vendor-prefix.js +15 -0
  30. package/esm2015/views/day.js +1 -1
  31. package/fesm2015/worktile-gantt.js +285 -205
  32. package/fesm2015/worktile-gantt.js.map +1 -1
  33. package/gantt-dom.service.d.ts +11 -4
  34. package/gantt-item-upper.d.ts +5 -5
  35. package/gantt-print.service.d.ts +1 -1
  36. package/gantt-upper.d.ts +5 -5
  37. package/gantt.component.d.ts +2 -4
  38. package/main.bundle.scss +3 -2
  39. package/package.json +1 -1
  40. package/root.component.d.ts +5 -3
  41. package/table/gantt-column.component.d.ts +2 -3
  42. package/table/gantt-table.component.d.ts +2 -4
  43. package/utils/passive-listeners.d.ts +13 -0
  44. package/utils/set-style-with-vendor-prefix.d.ts +12 -0
  45. package/README.md +0 -24
@@ -4,11 +4,13 @@ import { GanttDomService } from '../../gantt-dom.service';
4
4
  import { GanttDragContainer } from '../../gantt-drag-container';
5
5
  import { GanttItemInternal } from '../../class/item';
6
6
  import { GanttUpper } from '../../gantt-upper';
7
+ import { NgxGanttRootComponent } from '../../root.component';
7
8
  import * as i0 from "@angular/core";
8
9
  export declare class GanttBarDrag implements OnDestroy {
9
10
  private dragDrop;
10
11
  private dom;
11
12
  private dragContainer;
13
+ private root;
12
14
  private ganttUpper;
13
15
  private barElement;
14
16
  private item;
@@ -18,7 +20,7 @@ export declare class GanttBarDrag implements OnDestroy {
18
20
  private barDragRef;
19
21
  private dragRefs;
20
22
  private destroy$;
21
- constructor(dragDrop: DragDrop, dom: GanttDomService, dragContainer: GanttDragContainer);
23
+ constructor(dragDrop: DragDrop, dom: GanttDomService, dragContainer: GanttDragContainer, root: NgxGanttRootComponent);
22
24
  private createMouseEvents;
23
25
  private createBarDrag;
24
26
  private createBarHandleDrags;
@@ -32,6 +34,6 @@ export declare class GanttBarDrag implements OnDestroy {
32
34
  private destroyLinkDraggingLine;
33
35
  createDrags(elementRef: ElementRef, item: GanttItemInternal, ganttUpper: GanttUpper): void;
34
36
  ngOnDestroy(): void;
35
- static ɵfac: i0.ɵɵFactoryDeclaration<GanttBarDrag, never>;
37
+ static ɵfac: i0.ɵɵFactoryDeclaration<GanttBarDrag, [null, null, null, { skipSelf: true; }]>;
36
38
  static ɵprov: i0.ɵɵInjectableDeclaration<GanttBarDrag>;
37
39
  }
@@ -1,4 +1,4 @@
1
- import { OnInit, ElementRef, OnChanges, OnDestroy, EventEmitter, AfterViewInit } from '@angular/core';
1
+ import { OnInit, ElementRef, OnChanges, OnDestroy, EventEmitter, AfterViewInit, QueryList, NgZone } from '@angular/core';
2
2
  import { GanttBarDrag } from './bar-drag';
3
3
  import { GanttDragContainer } from '../../gantt-drag-container';
4
4
  import { GanttBarClickEvent } from '../../class';
@@ -9,18 +9,18 @@ export declare class NgxGanttBarComponent extends GanttItemUpper implements OnIn
9
9
  private dragContainer;
10
10
  private drag;
11
11
  ganttUpper: GanttUpper;
12
+ private ngZone;
12
13
  barClick: EventEmitter<GanttBarClickEvent<unknown>>;
13
14
  contentElementRef: ElementRef<HTMLDivElement>;
14
15
  ganttItemClass: boolean;
16
+ handles: QueryList<ElementRef<HTMLElement>>;
15
17
  color: string;
16
- constructor(dragContainer: GanttDragContainer, drag: GanttBarDrag, elementRef: ElementRef<HTMLDivElement>, ganttUpper: GanttUpper);
18
+ constructor(dragContainer: GanttDragContainer, drag: GanttBarDrag, elementRef: ElementRef<HTMLDivElement>, ganttUpper: GanttUpper, ngZone: NgZone);
17
19
  ngOnInit(): void;
18
20
  ngAfterViewInit(): void;
19
- ngOnChanges(): void;
20
21
  onBarClick(event: Event): void;
21
22
  private setContentBackground;
22
23
  stopPropagation(event: Event): void;
23
- ngOnDestroy(): void;
24
24
  static ɵfac: i0.ɵɵFactoryDeclaration<NgxGanttBarComponent, never>;
25
25
  static ɵcmp: i0.ɵɵComponentDeclaration<NgxGanttBarComponent, "ngx-gantt-bar,gantt-bar", never, {}, { "barClick": "barClick"; }, never, never>;
26
26
  }
@@ -1,14 +1,13 @@
1
- import { OnInit, OnChanges, SimpleChanges, OnDestroy, NgZone, ElementRef, AfterViewInit } from '@angular/core';
1
+ import { OnInit, OnDestroy, NgZone, ElementRef } from '@angular/core';
2
2
  import { GanttDatePoint } from '../../class/date-point';
3
3
  import { GanttUpper } from '../../gantt-upper';
4
4
  import { GanttViewType } from './../../class/view-type';
5
5
  import * as i0 from "@angular/core";
6
- export declare class GanttCalendarComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy {
6
+ export declare class GanttCalendarComponent implements OnInit, OnDestroy {
7
7
  ganttUpper: GanttUpper;
8
8
  private ngZone;
9
9
  private elementRef;
10
10
  get view(): import("@worktile/gantt").GanttView;
11
- private unsubscribe$;
12
11
  headerHeight: number;
13
12
  mainHeight: number;
14
13
  todayHeight: number;
@@ -16,11 +15,10 @@ export declare class GanttCalendarComponent implements OnInit, AfterViewInit, On
16
15
  todayBorderRadius: number;
17
16
  viewTypes: typeof GanttViewType;
18
17
  className: boolean;
18
+ private unsubscribe$;
19
19
  constructor(ganttUpper: GanttUpper, ngZone: NgZone, elementRef: ElementRef<HTMLElement>);
20
20
  setTodayPoint(): void;
21
21
  ngOnInit(): void;
22
- ngAfterViewInit(): void;
23
- ngOnChanges(changes: SimpleChanges): void;
24
22
  trackBy(index: number, point: GanttDatePoint): string | number;
25
23
  ngOnDestroy(): void;
26
24
  static ɵfac: i0.ɵɵFactoryDeclaration<GanttCalendarComponent, never>;
@@ -1,9 +1,5 @@
1
- import { OnInit } from '@angular/core';
2
1
  import * as i0 from "@angular/core";
3
- export declare class GanttDragBackdropComponent implements OnInit {
4
- backdropClass: boolean;
5
- constructor();
6
- ngOnInit(): void;
2
+ export declare class GanttDragBackdropComponent {
7
3
  static ɵfac: i0.ɵɵFactoryDeclaration<GanttDragBackdropComponent, never>;
8
4
  static ɵcmp: i0.ɵɵComponentDeclaration<GanttDragBackdropComponent, "gantt-drag-backdrop", never, {}, {}, never, never>;
9
5
  }
@@ -1,12 +1,10 @@
1
- import { OnInit, AfterViewInit, ElementRef } from '@angular/core';
1
+ import { ElementRef } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
- export declare class GanttIconComponent implements OnInit, AfterViewInit {
3
+ export declare class GanttIconComponent {
4
4
  private elementRef;
5
5
  isIcon: boolean;
6
6
  set iconName(name: string);
7
7
  constructor(elementRef: ElementRef<HTMLElement>);
8
- ngOnInit(): void;
9
- ngAfterViewInit(): void;
10
8
  setSvg(name: string): void;
11
9
  static ɵfac: i0.ɵɵFactoryDeclaration<GanttIconComponent, never>;
12
10
  static ɵcmp: i0.ɵɵComponentDeclaration<GanttIconComponent, "gantt-icon", never, { "iconName": "iconName"; }, {}, never, never>;
@@ -1,8 +1,8 @@
1
- import { OnInit, TemplateRef, EventEmitter } from '@angular/core';
1
+ import { TemplateRef, EventEmitter } from '@angular/core';
2
2
  import { GanttGroupInternal, GanttItemInternal, GanttBarClickEvent, GanttLineClickEvent } from '../../class';
3
3
  import { GanttUpper } from '../../gantt-upper';
4
4
  import * as i0 from "@angular/core";
5
- export declare class GanttMainComponent implements OnInit {
5
+ export declare class GanttMainComponent {
6
6
  ganttUpper: GanttUpper;
7
7
  groups: GanttGroupInternal[];
8
8
  items: GanttItemInternal[];
@@ -14,7 +14,6 @@ export declare class GanttMainComponent implements OnInit {
14
14
  lineClick: EventEmitter<GanttLineClickEvent<unknown>>;
15
15
  ganttMainClass: boolean;
16
16
  constructor(ganttUpper: GanttUpper);
17
- ngOnInit(): void;
18
17
  trackBy(index: number, item: GanttGroupInternal | GanttItemInternal): string | number;
19
18
  static ɵfac: i0.ɵɵFactoryDeclaration<GanttMainComponent, never>;
20
19
  static ɵcmp: i0.ɵɵComponentDeclaration<GanttMainComponent, "gantt-main", never, { "groups": "groups"; "items": "items"; "groupHeaderTemplate": "groupHeaderTemplate"; "itemTemplate": "itemTemplate"; "barTemplate": "barTemplate"; "rangeTemplate": "rangeTemplate"; }, { "barClick": "barClick"; "lineClick": "lineClick"; }, never, never>;
@@ -1,13 +1,10 @@
1
- import { OnInit, ElementRef, OnChanges, OnDestroy } from '@angular/core';
1
+ import { ElementRef } from '@angular/core';
2
2
  import { GanttUpper } from '../../gantt-upper';
3
3
  import { GanttItemUpper } from '../../gantt-item-upper';
4
4
  import * as i0 from "@angular/core";
5
- export declare class NgxGanttRangeComponent extends GanttItemUpper implements OnInit, OnChanges, OnDestroy {
5
+ export declare class NgxGanttRangeComponent extends GanttItemUpper {
6
6
  ganttRangeClass: boolean;
7
7
  constructor(elementRef: ElementRef<HTMLDivElement>, ganttUpper: GanttUpper);
8
- ngOnInit(): void;
9
- ngOnChanges(): void;
10
- ngOnDestroy(): void;
11
8
  static ɵfac: i0.ɵɵFactoryDeclaration<NgxGanttRangeComponent, never>;
12
9
  static ɵcmp: i0.ɵɵComponentDeclaration<NgxGanttRangeComponent, "ngx-gantt-range,gantt-range", never, {}, {}, never, never>;
13
10
  }
@@ -1,4 +1,4 @@
1
- import { TemplateRef, QueryList, OnInit, ElementRef, OnChanges, SimpleChanges, EventEmitter } from '@angular/core';
1
+ import { TemplateRef, QueryList, ElementRef, OnChanges, SimpleChanges, EventEmitter } from '@angular/core';
2
2
  import { GanttItemInternal, GanttGroupInternal, GanttSelectedEvent } from '../../class';
3
3
  import { NgxGanttTableColumnComponent } from '../../table/gantt-column.component';
4
4
  import { CdkDragEnd, CdkDragMove, CdkDragStart } from '@angular/cdk/drag-drop';
@@ -7,7 +7,7 @@ import { GanttUpper } from '../../gantt-upper';
7
7
  import * as i0 from "@angular/core";
8
8
  export declare const defaultColumnWidth = 100;
9
9
  export declare const minColumnWidth = 80;
10
- export declare class GanttTableComponent implements OnInit, OnChanges {
10
+ export declare class GanttTableComponent implements OnChanges {
11
11
  gantt: GanttAbstractComponent;
12
12
  ganttUpper: GanttUpper;
13
13
  private elementRef;
@@ -25,7 +25,6 @@ export declare class GanttTableComponent implements OnInit, OnChanges {
25
25
  ganttTableClass: boolean;
26
26
  ganttTableEmptyClass: boolean;
27
27
  constructor(gantt: GanttAbstractComponent, ganttUpper: GanttUpper, elementRef: ElementRef);
28
- ngOnInit(): void;
29
28
  ngOnChanges(changes: SimpleChanges): void;
30
29
  private dragFixed;
31
30
  expandGroup(group: GanttGroupInternal): void;
@@ -1,13 +1,15 @@
1
- import { Injectable } from '@angular/core';
1
+ import { Injectable, SkipSelf } from '@angular/core';
2
2
  import { InBarPosition } from '../../gantt-drag-container';
3
3
  import { differenceInCalendarDays } from '../../utils/date';
4
4
  import { fromEvent, Subject } from 'rxjs';
5
5
  import { takeUntil } from 'rxjs/operators';
6
6
  import { GanttLinkType } from '../../class/link';
7
+ import { passiveListenerOptions } from '../../utils/passive-listeners';
7
8
  import * as i0 from "@angular/core";
8
9
  import * as i1 from "@angular/cdk/drag-drop";
9
10
  import * as i2 from "../../gantt-dom.service";
10
11
  import * as i3 from "../../gantt-drag-container";
12
+ import * as i4 from "../../root.component";
11
13
  const dragMinWidth = 10;
12
14
  const activeClass = 'gantt-bar-active';
13
15
  const dropActiveClass = 'gantt-bar-drop-active';
@@ -18,10 +20,11 @@ function createSvgElement(qualifiedName, className) {
18
20
  return element;
19
21
  }
20
22
  export class GanttBarDrag {
21
- constructor(dragDrop, dom, dragContainer) {
23
+ constructor(dragDrop, dom, dragContainer, root) {
22
24
  this.dragDrop = dragDrop;
23
25
  this.dom = dom;
24
26
  this.dragContainer = dragContainer;
27
+ this.root = root;
25
28
  this.dragRefs = [];
26
29
  this.destroy$ = new Subject();
27
30
  }
@@ -37,9 +40,9 @@ export class GanttBarDrag {
37
40
  ((_c = this.ganttUpper.config.linkOptions) === null || _c === void 0 ? void 0 : _c.dependencyTypes[0]) === GanttLinkType.fs
38
41
  ? singleDropActiveClass
39
42
  : dropActiveClass;
40
- fromEvent(this.barElement, 'mouseenter')
43
+ fromEvent(this.barElement, 'mouseenter', passiveListenerOptions)
41
44
  .pipe(takeUntil(this.destroy$))
42
- .subscribe((event) => {
45
+ .subscribe(() => {
43
46
  if (this.dragContainer.linkDraggingId && this.dragContainer.linkDraggingId !== this.item.id) {
44
47
  if (this.item.linkable) {
45
48
  this.barElement.classList.add(dropClass);
@@ -53,9 +56,9 @@ export class GanttBarDrag {
53
56
  this.barElement.classList.add(activeClass);
54
57
  }
55
58
  });
56
- fromEvent(this.barElement, 'mouseleave')
59
+ fromEvent(this.barElement, 'mouseleave', passiveListenerOptions)
57
60
  .pipe(takeUntil(this.destroy$))
58
- .subscribe((event) => {
61
+ .subscribe(() => {
59
62
  if (!this.dragContainer.linkDraggingId) {
60
63
  this.barElement.classList.remove(activeClass);
61
64
  }
@@ -116,7 +119,7 @@ export class GanttBarDrag {
116
119
  if (width > dragMinWidth) {
117
120
  this.barElement.style.width = width + 'px';
118
121
  this.barElement.style.left = x + 'px';
119
- this.openDragBackdrop(this.barElement, this.ganttUpper.view.getDateByXPoint(x), this.ganttUpper.view.getDateByXPoint(x + width));
122
+ this.openDragBackdrop(this.barElement, this.ganttUpper.view.getDateByXPoint(x), this.item.end);
120
123
  this.item.updateDate(this.ganttUpper.view.getDateByXPoint(x), this.item.end);
121
124
  }
122
125
  }
@@ -124,7 +127,7 @@ export class GanttBarDrag {
124
127
  const width = this.item.refs.width + event.distance.x;
125
128
  if (width > dragMinWidth) {
126
129
  this.barElement.style.width = width + 'px';
127
- this.openDragBackdrop(this.barElement, this.ganttUpper.view.getDateByXPoint(this.item.refs.x), this.ganttUpper.view.getDateByXPoint(this.item.refs.x + width));
130
+ this.openDragBackdrop(this.barElement, this.item.start, this.ganttUpper.view.getDateByXPoint(this.item.refs.x + width));
128
131
  }
129
132
  this.item.updateDate(this.item.start, this.ganttUpper.view.getDateByXPoint(this.item.refs.x + width));
130
133
  }
@@ -206,22 +209,24 @@ export class GanttBarDrag {
206
209
  return dragRefs;
207
210
  }
208
211
  openDragBackdrop(dragElement, start, end) {
209
- const dragMaskElement = this.dom.root.querySelector('.gantt-drag-mask');
210
- const dragBackdropElement = this.dom.root.querySelector('.gantt-drag-backdrop');
212
+ const dragBackdropElement = this.root.backdrop.nativeElement;
213
+ const dragMaskElement = dragBackdropElement.querySelector('.gantt-drag-mask');
211
214
  const rootRect = this.dom.root.getBoundingClientRect();
212
215
  const dragRect = dragElement.getBoundingClientRect();
213
216
  const left = dragRect.left - rootRect.left - this.dom.side.clientWidth;
214
217
  const width = dragRect.right - dragRect.left;
218
+ // Note: updating styles will cause re-layout so we have to place them consistently one by one.
215
219
  dragMaskElement.style.left = left + 'px';
216
220
  dragMaskElement.style.width = width + 'px';
217
- dragMaskElement.querySelector('.start').innerHTML = start.format('MM-dd');
218
- dragMaskElement.querySelector('.end').innerHTML = end.format('MM-dd');
219
221
  dragMaskElement.style.display = 'block';
220
222
  dragBackdropElement.style.display = 'block';
223
+ // This will invalidate the layout, but we won't need re-layout, because we set styles previously.
224
+ dragMaskElement.querySelector('.start').innerHTML = start.format('MM-dd');
225
+ dragMaskElement.querySelector('.end').innerHTML = end.format('MM-dd');
221
226
  }
222
227
  closeDragBackdrop() {
223
- const dragMaskElement = this.dom.root.querySelector('.gantt-drag-mask');
224
- const dragBackdropElement = this.dom.root.querySelector('.gantt-drag-backdrop');
228
+ const dragBackdropElement = this.root.backdrop.nativeElement;
229
+ const dragMaskElement = dragBackdropElement.querySelector('.gantt-drag-mask');
225
230
  dragMaskElement.style.display = 'none';
226
231
  dragBackdropElement.style.display = 'none';
227
232
  }
@@ -287,9 +292,11 @@ export class GanttBarDrag {
287
292
  this.destroy$.complete();
288
293
  }
289
294
  }
290
- GanttBarDrag.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: GanttBarDrag, deps: [{ token: i1.DragDrop }, { token: i2.GanttDomService }, { token: i3.GanttDragContainer }], target: i0.ɵɵFactoryTarget.Injectable });
295
+ GanttBarDrag.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: GanttBarDrag, deps: [{ token: i1.DragDrop }, { token: i2.GanttDomService }, { token: i3.GanttDragContainer }, { token: i4.NgxGanttRootComponent, skipSelf: true }], target: i0.ɵɵFactoryTarget.Injectable });
291
296
  GanttBarDrag.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: GanttBarDrag });
292
297
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: GanttBarDrag, decorators: [{
293
298
  type: Injectable
294
- }], ctorParameters: function () { return [{ type: i1.DragDrop }, { type: i2.GanttDomService }, { type: i3.GanttDragContainer }]; } });
295
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyLWRyYWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nYW50dC9zcmMvY29tcG9uZW50cy9iYXIvYmFyLWRyYWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBeUIsTUFBTSxlQUFlLENBQUM7QUFHbEUsT0FBTyxFQUFzQixhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUvRSxPQUFPLEVBQWEsd0JBQXdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7OztBQUVqRCxNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7QUFDeEIsTUFBTSxXQUFXLEdBQUcsa0JBQWtCLENBQUM7QUFDdkMsTUFBTSxlQUFlLEdBQUcsdUJBQXVCLENBQUM7QUFDaEQsTUFBTSxxQkFBcUIsR0FBRyw4QkFBOEIsQ0FBQztBQUU3RCxTQUFTLGdCQUFnQixDQUFDLGFBQXFCLEVBQUUsU0FBaUI7SUFDOUQsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyw0QkFBNEIsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUN0RixPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqQyxPQUFPLE9BQU8sQ0FBQztBQUNuQixDQUFDO0FBR0QsTUFBTSxPQUFPLFlBQVk7SUF1QnJCLFlBQW9CLFFBQWtCLEVBQVUsR0FBb0IsRUFBVSxhQUFpQztRQUEzRixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBaUI7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBb0I7UUFKdkcsYUFBUSxHQUFjLEVBQUUsQ0FBQztRQUV6QixhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUVpRixDQUFDO0lBaEJuSCxJQUFZLFlBQVk7UUFDcEIsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7SUFDOUQsQ0FBQztJQUVELElBQVksZ0JBQWdCO1FBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO0lBQzVELENBQUM7SUFZTyxpQkFBaUI7O1FBQ3JCLE1BQU0sU0FBUyxHQUNYLENBQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFdBQVcsMENBQUUsZUFBZSwwQ0FBRSxNQUFNLE1BQUssQ0FBQztZQUNqRSxDQUFBLE1BQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsV0FBVywwQ0FBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLE1BQUssYUFBYSxDQUFDLEVBQUU7WUFDdkUsQ0FBQyxDQUFDLHFCQUFxQjtZQUN2QixDQUFDLENBQUMsZUFBZSxDQUFDO1FBRTFCLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQzthQUNuQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM5QixTQUFTLENBQUMsQ0FBQyxLQUFpQixFQUFFLEVBQUU7WUFDN0IsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRTtnQkFDekYsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtvQkFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUN6QyxJQUFJLENBQUMsYUFBYSxDQUFDLG1CQUFtQixDQUFDO3dCQUNuQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7d0JBQ2YsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVO3FCQUMzQixDQUFDLENBQUM7aUJBQ047YUFDSjtpQkFBTTtnQkFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDOUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVQLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQzthQUNuQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM5QixTQUFTLENBQUMsQ0FBQyxLQUFpQixFQUFFLEVBQUU7WUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxFQUFFO2dCQUNwQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDakQ7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2FBQzNDO1lBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVPLGFBQWE7UUFDakIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzFELE9BQU8sQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO1FBQ3ZCLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUMzQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUM5QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDckQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25FLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN4RSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN4RSxNQUFNLFFBQVEsR0FBRyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEYsSUFBSSxLQUFLLEdBQUcsV0FBVyxDQUFDO1lBQ3hCLElBQUksR0FBRyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDeEMsSUFBSSxRQUFRLEdBQUcsYUFBYSxHQUFHLFFBQVEsR0FBRyxDQUFDLEVBQUU7Z0JBQ3pDLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN4QjtZQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNuRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNsRSxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDOUIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDekIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUM7UUFDMUIsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztJQUVPLG9CQUFvQjtRQUN4QixNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDcEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBYyx1QkFBdUIsQ0FBQyxDQUFDO1FBQ3ZGLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDOUIsTUFBTSxRQUFRLEdBQUcsS0FBSyxLQUFLLENBQUMsQ0FBQztZQUM3QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqRCxPQUFPLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztZQUN2QixPQUFPLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFtQixDQUFDLENBQUM7WUFFMUQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUMzQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUNwRSxDQUFDLENBQUMsQ0FBQztZQUVILE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQzlCLElBQUksUUFBUSxFQUFFO29CQUNWLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztvQkFDOUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUMzRCxJQUFJLEtBQUssR0FBRyxZQUFZLEVBQUU7d0JBQ3RCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDO3dCQUMzQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQzt3QkFDdEMsSUFBSSxDQUFDLGdCQUFnQixDQUNqQixJQUFJLENBQUMsVUFBVSxFQUNmLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFDdkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FDbEQsQ0FBQzt3QkFDRixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztxQkFDaEY7aUJBQ0o7cUJBQU07b0JBQ0gsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO29CQUN0RCxJQUFJLEtBQUssR0FBRyxZQUFZLEVBQUU7d0JBQ3RCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDO3dCQUMzQyxJQUFJLENBQUMsZ0JBQWdCLENBQ2pCLElBQUksQ0FBQyxVQUFVLEVBQ2YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUN0RCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUNqRSxDQUFDO3FCQUNMO29CQUNELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztpQkFDekc7Z0JBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztnQkFDOUQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN6QixDQUFDLENBQUMsQ0FBQztZQUVILE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQzlCLElBQUksUUFBUSxFQUFFO29CQUNWLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDM0QsSUFBSSxLQUFLLEdBQUcsWUFBWSxFQUFFO3dCQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztxQkFDbEg7eUJBQU07d0JBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztxQkFDbkU7aUJBQ0o7cUJBQU07b0JBQ0gsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO29CQUN0RCxJQUFJLEtBQUssR0FBRyxZQUFZLEVBQUU7d0JBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFDZixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUNuRyxDQUFDO3FCQUNMO3lCQUFNO3dCQUNILElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7cUJBQ3JFO2lCQUNKO2dCQUNELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUNsRSxDQUFDLENBQUMsQ0FBQztZQUNILFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0lBRU8scUJBQXFCO1FBQ3pCLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNwQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFjLHVCQUF1QixDQUFDLENBQUM7UUFDdkYsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUM5QixNQUFNLE9BQU8sR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDO1lBQzVCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pELE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQW1CLENBQUMsQ0FBQztZQUMxRCxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2pDLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztnQkFDcEMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO29CQUNqQixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7aUJBQ25DO2dCQUNELElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2dCQUM5QixJQUFJLENBQUMsYUFBYSxDQUFDLG1CQUFtQixDQUFDO29CQUNuQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVU7b0JBQ3hCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtvQkFDZixHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTTtpQkFDNUQsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQUM7WUFFSCxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3pCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQzlELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDbEUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUNsRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBQ2xFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUN0RSxDQUFDLENBQUMsQ0FBQztZQUVILE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQzlCLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO29CQUNqQixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7aUJBQ3BDO2dCQUNELGdFQUFnRTtnQkFDaEUsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUU7b0JBQ3BDLE1BQU0sV0FBVyxHQUNiLEtBQUssQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDO3dCQUN2RCxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUV6RSxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixpQ0FDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsRUFBRSxLQUNyQyxHQUFHLEVBQ0MsV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDOzRCQUNoRSxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUs7NEJBQ3JCLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxJQUNoQyxDQUFDO2lCQUNOO2dCQUNELEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDbkMsQ0FBQyxDQUFDLENBQUM7WUFFSCxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVPLGdCQUFnQixDQUFDLFdBQXdCLEVBQUUsS0FBZ0IsRUFBRSxHQUFjO1FBQy9FLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBZ0IsQ0FBQztRQUN2RixNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBZ0IsQ0FBQztRQUMvRixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3ZELE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3JELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDdkUsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQzdDLGVBQWUsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7UUFDekMsZUFBZSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQztRQUMzQyxlQUFlLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFFLGVBQWUsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEUsZUFBZSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3hDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ2hELENBQUM7SUFFTyxpQkFBaUI7UUFDckIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFnQixDQUFDO1FBQ3ZGLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFnQixDQUFDO1FBQy9GLGVBQWUsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN2QyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztJQUMvQyxDQUFDO0lBRU8saUJBQWlCO1FBQ3JCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7UUFDN0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVPLG1CQUFtQjtRQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxNQUFtQixFQUFFLFFBQWlCO1FBQ2hFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDdkQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDbEQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM3RSxPQUFPO1lBQ0gsRUFBRSxFQUFFLFNBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJO1lBQ3JFLEVBQUUsRUFBRSxTQUFTLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHO1lBQ3ZELEVBQUUsRUFBRSxVQUFVLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLEtBQUssR0FBRyxDQUFDO1lBQzFELEVBQUUsRUFBRSxVQUFVLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDO1NBQzVELENBQUM7SUFDTixDQUFDO0lBRU8sc0JBQXNCO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDeEIsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLDJCQUEyQixDQUFDLENBQUM7WUFDeEUsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLG9CQUFvQixDQUFDLENBQUM7WUFDbEUsVUFBVSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDO1lBQ3hDLFVBQVUsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxVQUFVLENBQUM7U0FDdEM7SUFDTCxDQUFDO0lBRU8sdUJBQXVCO1FBQzNCLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDN0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztTQUNoQztJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsVUFBc0IsRUFBRSxJQUF1QixFQUFFLFVBQXNCO1FBQy9FLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQztRQUMzQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUU3QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUU7WUFDakUsT0FBTztTQUNWO2FBQU07WUFDSCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDcEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNyQyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztnQkFDcEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUM7YUFDbkQ7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO2dCQUN4QixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQzthQUN2QztTQUNKO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzdCLENBQUM7O3lHQXRUUSxZQUFZOzZHQUFaLFlBQVk7MkZBQVosWUFBWTtrQkFEeEIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRHJhZ1JlZiwgRHJhZ0Ryb3AgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IEdhbnR0RG9tU2VydmljZSB9IGZyb20gJy4uLy4uL2dhbnR0LWRvbS5zZXJ2aWNlJztcbmltcG9ydCB7IEdhbnR0RHJhZ0NvbnRhaW5lciwgSW5CYXJQb3NpdGlvbiB9IGZyb20gJy4uLy4uL2dhbnR0LWRyYWctY29udGFpbmVyJztcbmltcG9ydCB7IEdhbnR0SXRlbUludGVybmFsIH0gZnJvbSAnLi4vLi4vY2xhc3MvaXRlbSc7XG5pbXBvcnQgeyBHYW50dERhdGUsIGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyB9IGZyb20gJy4uLy4uL3V0aWxzL2RhdGUnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBHYW50dFVwcGVyIH0gZnJvbSAnLi4vLi4vZ2FudHQtdXBwZXInO1xuaW1wb3J0IHsgR2FudHRMaW5rVHlwZSB9IGZyb20gJy4uLy4uL2NsYXNzL2xpbmsnO1xuXG5jb25zdCBkcmFnTWluV2lkdGggPSAxMDtcbmNvbnN0IGFjdGl2ZUNsYXNzID0gJ2dhbnR0LWJhci1hY3RpdmUnO1xuY29uc3QgZHJvcEFjdGl2ZUNsYXNzID0gJ2dhbnR0LWJhci1kcm9wLWFjdGl2ZSc7XG5jb25zdCBzaW5nbGVEcm9wQWN0aXZlQ2xhc3MgPSAnZ2FudHQtYmFyLXNpbmdsZS1kcm9wLWFjdGl2ZSc7XG5cbmZ1bmN0aW9uIGNyZWF0ZVN2Z0VsZW1lbnQocXVhbGlmaWVkTmFtZTogc3RyaW5nLCBjbGFzc05hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgcXVhbGlmaWVkTmFtZSk7XG4gICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBHYW50dEJhckRyYWcgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgZ2FudHRVcHBlcjogR2FudHRVcHBlcjtcblxuICAgIHByaXZhdGUgYmFyRWxlbWVudDogSFRNTEVsZW1lbnQ7XG5cbiAgICBwcml2YXRlIGl0ZW06IEdhbnR0SXRlbUludGVybmFsO1xuXG4gICAgcHJpdmF0ZSBnZXQgZHJhZ0Rpc2FibGVkKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXRlbS5kcmFnZ2FibGUgfHwgIXRoaXMuZ2FudHRVcHBlci5kcmFnZ2FibGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgbGlua0RyYWdEaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLml0ZW0ubGlua2FibGUgfHwgIXRoaXMuZ2FudHRVcHBlci5saW5rYWJsZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxpbmtEcmFnZ2luZ0xpbmU6IFNWR0VsZW1lbnQ7XG5cbiAgICBwcml2YXRlIGJhckRyYWdSZWY6IERyYWdSZWY7XG5cbiAgICBwcml2YXRlIGRyYWdSZWZzOiBEcmFnUmVmW10gPSBbXTtcblxuICAgIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBkcmFnRHJvcDogRHJhZ0Ryb3AsIHByaXZhdGUgZG9tOiBHYW50dERvbVNlcnZpY2UsIHByaXZhdGUgZHJhZ0NvbnRhaW5lcjogR2FudHREcmFnQ29udGFpbmVyKSB7fVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVNb3VzZUV2ZW50cygpIHtcbiAgICAgICAgY29uc3QgZHJvcENsYXNzID1cbiAgICAgICAgICAgIHRoaXMuZ2FudHRVcHBlci5jb25maWcubGlua09wdGlvbnM/LmRlcGVuZGVuY3lUeXBlcz8ubGVuZ3RoID09PSAxICYmXG4gICAgICAgICAgICB0aGlzLmdhbnR0VXBwZXIuY29uZmlnLmxpbmtPcHRpb25zPy5kZXBlbmRlbmN5VHlwZXNbMF0gPT09IEdhbnR0TGlua1R5cGUuZnNcbiAgICAgICAgICAgICAgICA/IHNpbmdsZURyb3BBY3RpdmVDbGFzc1xuICAgICAgICAgICAgICAgIDogZHJvcEFjdGl2ZUNsYXNzO1xuXG4gICAgICAgIGZyb21FdmVudCh0aGlzLmJhckVsZW1lbnQsICdtb3VzZWVudGVyJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZHJhZ0NvbnRhaW5lci5saW5rRHJhZ2dpbmdJZCAmJiB0aGlzLmRyYWdDb250YWluZXIubGlua0RyYWdnaW5nSWQgIT09IHRoaXMuaXRlbS5pZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pdGVtLmxpbmthYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJhckVsZW1lbnQuY2xhc3NMaXN0LmFkZChkcm9wQ2xhc3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmFnQ29udGFpbmVyLmVtaXRMaW5rRHJhZ0VudGVyZWQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW06IHRoaXMuaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB0aGlzLmJhckVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iYXJFbGVtZW50LmNsYXNzTGlzdC5hZGQoYWN0aXZlQ2xhc3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudCh0aGlzLmJhckVsZW1lbnQsICdtb3VzZWxlYXZlJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRyYWdDb250YWluZXIubGlua0RyYWdnaW5nSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iYXJFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoYWN0aXZlQ2xhc3MpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhZ0NvbnRhaW5lci5lbWl0TGlua0RyYWdMZWF2ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5iYXJFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoZHJvcENsYXNzKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlQmFyRHJhZygpIHtcbiAgICAgICAgY29uc3QgZHJhZ1JlZiA9IHRoaXMuZHJhZ0Ryb3AuY3JlYXRlRHJhZyh0aGlzLmJhckVsZW1lbnQpO1xuICAgICAgICBkcmFnUmVmLmxvY2tBeGlzID0gJ3gnO1xuICAgICAgICBkcmFnUmVmLnN0YXJ0ZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0RHJhZ2dpbmdTdHlsZXMoKTtcbiAgICAgICAgICAgIHRoaXMuZHJhZ0NvbnRhaW5lci5kcmFnU3RhcnRlZC5lbWl0KHsgaXRlbTogdGhpcy5pdGVtLm9yaWdpbiB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGRyYWdSZWYubW92ZWQuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFggPSB0aGlzLml0ZW0ucmVmcy54ICsgZXZlbnQuZGlzdGFuY2UueDtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gdGhpcy5nYW50dFVwcGVyLnZpZXcuZ2V0RGF0ZUJ5WFBvaW50KGN1cnJlbnRYKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTdGFydFggPSB0aGlzLmdhbnR0VXBwZXIudmlldy5nZXRYUG9pbnRCeURhdGUoY3VycmVudERhdGUpO1xuICAgICAgICAgICAgY29uc3QgZGF5V2lkdGggPSB0aGlzLmdhbnR0VXBwZXIudmlldy5nZXREYXlPY2N1cGFuY3lXaWR0aChjdXJyZW50RGF0ZSk7XG4gICAgICAgICAgICBjb25zdCBkaWZmRGF5cyA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyh0aGlzLml0ZW0uZW5kLnZhbHVlLCB0aGlzLml0ZW0uc3RhcnQudmFsdWUpO1xuICAgICAgICAgICAgbGV0IHN0YXJ0ID0gY3VycmVudERhdGU7XG4gICAgICAgICAgICBsZXQgZW5kID0gY3VycmVudERhdGUuYWRkRGF5cyhkaWZmRGF5cyk7XG4gICAgICAgICAgICBpZiAoY3VycmVudFggPiBjdXJyZW50U3RhcnRYICsgZGF5V2lkdGggLyAyKSB7XG4gICAgICAgICAgICAgICAgc3RhcnQgPSBzdGFydC5hZGREYXlzKDEpO1xuICAgICAgICAgICAgICAgIGVuZCA9IGVuZC5hZGREYXlzKDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vcGVuRHJhZ0JhY2tkcm9wKHRoaXMuYmFyRWxlbWVudCwgc3RhcnQsIGVuZCk7XG4gICAgICAgICAgICB0aGlzLml0ZW0udXBkYXRlRGF0ZShzdGFydCwgZW5kKTtcbiAgICAgICAgICAgIHRoaXMuZHJhZ0NvbnRhaW5lci5kcmFnTW92ZWQuZW1pdCh7IGl0ZW06IHRoaXMuaXRlbS5vcmlnaW4gfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBkcmFnUmVmLmVuZGVkLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJEcmFnZ2luZ1N0eWxlcygpO1xuICAgICAgICAgICAgdGhpcy5jbG9zZURyYWdCYWNrZHJvcCgpO1xuICAgICAgICAgICAgZXZlbnQuc291cmNlLnJlc2V0KCk7XG4gICAgICAgICAgICB0aGlzLmRyYWdDb250YWluZXIuZHJhZ0VuZGVkLmVtaXQoeyBpdGVtOiB0aGlzLml0ZW0ub3JpZ2luIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5iYXJEcmFnUmVmID0gZHJhZ1JlZjtcbiAgICAgICAgcmV0dXJuIGRyYWdSZWY7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVCYXJIYW5kbGVEcmFncygpIHtcbiAgICAgICAgY29uc3QgZHJhZ1JlZnMgPSBbXTtcbiAgICAgICAgY29uc3QgaGFuZGxlcyA9IHRoaXMuYmFyRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PignLmRyYWctaGFuZGxlcyAuaGFuZGxlJyk7XG4gICAgICAgIGhhbmRsZXMuZm9yRWFjaCgoaGFuZGxlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXNCZWZvcmUgPSBpbmRleCA9PT0gMDtcbiAgICAgICAgICAgIGNvbnN0IGRyYWdSZWYgPSB0aGlzLmRyYWdEcm9wLmNyZWF0ZURyYWcoaGFuZGxlKTtcbiAgICAgICAgICAgIGRyYWdSZWYubG9ja0F4aXMgPSAneCc7XG4gICAgICAgICAgICBkcmFnUmVmLndpdGhCb3VuZGFyeUVsZW1lbnQodGhpcy5kb20ucm9vdCBhcyBIVE1MRWxlbWVudCk7XG5cbiAgICAgICAgICAgIGRyYWdSZWYuc3RhcnRlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RHJhZ2dpbmdTdHlsZXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdDb250YWluZXIuZHJhZ1N0YXJ0ZWQuZW1pdCh7IGl0ZW06IHRoaXMuaXRlbS5vcmlnaW4gfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZHJhZ1JlZi5tb3ZlZC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzQmVmb3JlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHggPSB0aGlzLml0ZW0ucmVmcy54ICsgZXZlbnQuZGlzdGFuY2UueDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLml0ZW0ucmVmcy53aWR0aCArIGV2ZW50LmRpc3RhbmNlLnggKiAtMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gZHJhZ01pbldpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJhckVsZW1lbnQuc3R5bGUud2lkdGggPSB3aWR0aCArICdweCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJhckVsZW1lbnQuc3R5bGUubGVmdCA9IHggKyAncHgnO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuRHJhZ0JhY2tkcm9wKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmFyRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdhbnR0VXBwZXIudmlldy5nZXREYXRlQnlYUG9pbnQoeCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nYW50dFVwcGVyLnZpZXcuZ2V0RGF0ZUJ5WFBvaW50KHggKyB3aWR0aClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW0udXBkYXRlRGF0ZSh0aGlzLmdhbnR0VXBwZXIudmlldy5nZXREYXRlQnlYUG9pbnQoeCksIHRoaXMuaXRlbS5lbmQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLml0ZW0ucmVmcy53aWR0aCArIGV2ZW50LmRpc3RhbmNlLng7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aCA+IGRyYWdNaW5XaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iYXJFbGVtZW50LnN0eWxlLndpZHRoID0gd2lkdGggKyAncHgnO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuRHJhZ0JhY2tkcm9wKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmFyRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdhbnR0VXBwZXIudmlldy5nZXREYXRlQnlYUG9pbnQodGhpcy5pdGVtLnJlZnMueCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nYW50dFVwcGVyLnZpZXcuZ2V0RGF0ZUJ5WFBvaW50KHRoaXMuaXRlbS5yZWZzLnggKyB3aWR0aClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtLnVwZGF0ZURhdGUodGhpcy5pdGVtLnN0YXJ0LCB0aGlzLmdhbnR0VXBwZXIudmlldy5nZXREYXRlQnlYUG9pbnQodGhpcy5pdGVtLnJlZnMueCArIHdpZHRoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ0NvbnRhaW5lci5kcmFnTW92ZWQuZW1pdCh7IGl0ZW06IHRoaXMuaXRlbS5vcmlnaW4gfSk7XG4gICAgICAgICAgICAgICAgZXZlbnQuc291cmNlLnJlc2V0KCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZHJhZ1JlZi5lbmRlZC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzQmVmb3JlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5pdGVtLnJlZnMud2lkdGggKyBldmVudC5kaXN0YW5jZS54ICogLTE7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aCA+IGRyYWdNaW5XaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtLnVwZGF0ZURhdGUodGhpcy5nYW50dFVwcGVyLnZpZXcuZ2V0RGF0ZUJ5WFBvaW50KHRoaXMuaXRlbS5yZWZzLnggKyBldmVudC5kaXN0YW5jZS54KSwgdGhpcy5pdGVtLmVuZCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW0udXBkYXRlRGF0ZSh0aGlzLml0ZW0uZW5kLnN0YXJ0T2ZEYXkoKSwgdGhpcy5pdGVtLmVuZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMuaXRlbS5yZWZzLndpZHRoICsgZXZlbnQuZGlzdGFuY2UueDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gZHJhZ01pbldpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW0udXBkYXRlRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW0uc3RhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nYW50dFVwcGVyLnZpZXcuZ2V0RGF0ZUJ5WFBvaW50KHRoaXMuaXRlbS5yZWZzLnggKyB0aGlzLml0ZW0ucmVmcy53aWR0aCArIGV2ZW50LmRpc3RhbmNlLngpXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtLnVwZGF0ZURhdGUodGhpcy5pdGVtLnN0YXJ0LCB0aGlzLml0ZW0uc3RhcnQuZW5kT2ZEYXkoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhckRyYWdnaW5nU3R5bGVzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZURyYWdCYWNrZHJvcCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ0NvbnRhaW5lci5kcmFnRW5kZWQuZW1pdCh7IGl0ZW06IHRoaXMuaXRlbS5vcmlnaW4gfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGRyYWdSZWZzLnB1c2goZHJhZ1JlZik7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZHJhZ1JlZnM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVMaW5rSGFuZGxlRHJhZ3MoKSB7XG4gICAgICAgIGNvbnN0IGRyYWdSZWZzID0gW107XG4gICAgICAgIGNvbnN0IGhhbmRsZXMgPSB0aGlzLmJhckVsZW1lbnQucXVlcnlTZWxlY3RvckFsbDxIVE1MRWxlbWVudD4oJy5saW5rLWhhbmRsZXMgLmhhbmRsZScpO1xuICAgICAgICBoYW5kbGVzLmZvckVhY2goKGhhbmRsZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlzQmVnaW4gPSBpbmRleCA9PT0gMDtcbiAgICAgICAgICAgIGNvbnN0IGRyYWdSZWYgPSB0aGlzLmRyYWdEcm9wLmNyZWF0ZURyYWcoaGFuZGxlKTtcbiAgICAgICAgICAgIGRyYWdSZWYud2l0aEJvdW5kYXJ5RWxlbWVudCh0aGlzLmRvbS5yb290IGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgICAgIGRyYWdSZWYuYmVmb3JlU3RhcnRlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGhhbmRsZS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmJhckRyYWdSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iYXJEcmFnUmVmLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVMaW5rRHJhZ2dpbmdMaW5lKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmFnQ29udGFpbmVyLmVtaXRMaW5rRHJhZ1N0YXJ0ZWQoe1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB0aGlzLmJhckVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW06IHRoaXMuaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgcG9zOiBpc0JlZ2luID8gSW5CYXJQb3NpdGlvbi5zdGFydCA6IEluQmFyUG9zaXRpb24uZmluaXNoXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZHJhZ1JlZi5tb3ZlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IHRoaXMuY2FsY0xpbmtMaW5lUG9zaXRpb25zKGhhbmRsZSwgaXNCZWdpbik7XG4gICAgICAgICAgICAgICAgdGhpcy5saW5rRHJhZ2dpbmdMaW5lLnNldEF0dHJpYnV0ZSgneDEnLCBwb3NpdGlvbnMueDEudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5saW5rRHJhZ2dpbmdMaW5lLnNldEF0dHJpYnV0ZSgneTEnLCBwb3NpdGlvbnMueTEudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5saW5rRHJhZ2dpbmdMaW5lLnNldEF0dHJpYnV0ZSgneDInLCBwb3NpdGlvbnMueDIudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5saW5rRHJhZ2dpbmdMaW5lLnNldEF0dHJpYnV0ZSgneTInLCBwb3NpdGlvbnMueTIudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZHJhZ1JlZi5lbmRlZC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgaGFuZGxlLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnJztcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5iYXJEcmFnUmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYmFyRHJhZ1JlZi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyDorqHnrpdsaW5l5ouW5Yqo55qE6JC954K55L2N5LqO55uu5qCHQmFy55qE5YC877yM5aaC5p6c5YC85aSn5LqOQmFy5a695bqm55qE5LiA5Y2K77yM6K+05piO5piv5ouW5Yqo5YiwQmVnaW7kvY3nva7vvIzlkKbliJnliJnkuLrmi5bliqjliLBFbmTkvY3nva5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kcmFnQ29udGFpbmVyLmxpbmtEcmFnUGF0aC50bykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwbGFjZVBvaW50WCA9XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5zb3VyY2UuZ2V0Um9vdEVsZW1lbnQoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS54IC1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhZ0NvbnRhaW5lci5saW5rRHJhZ1BhdGgudG8uZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS54O1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhZ0NvbnRhaW5lci5lbWl0TGlua0RyYWdFbmRlZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmRyYWdDb250YWluZXIubGlua0RyYWdQYXRoLnRvLFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlUG9pbnRYIDwgdGhpcy5kcmFnQ29udGFpbmVyLmxpbmtEcmFnUGF0aC50by5pdGVtLnJlZnMud2lkdGggLyAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gSW5CYXJQb3NpdGlvbi5zdGFydFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEluQmFyUG9zaXRpb24uZmluaXNoXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBldmVudC5zb3VyY2UucmVzZXQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJhckVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShhY3RpdmVDbGFzcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95TGlua0RyYWdnaW5nTGluZSgpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGRyYWdSZWZzLnB1c2goZHJhZ1JlZik7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZHJhZ1JlZnM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvcGVuRHJhZ0JhY2tkcm9wKGRyYWdFbGVtZW50OiBIVE1MRWxlbWVudCwgc3RhcnQ6IEdhbnR0RGF0ZSwgZW5kOiBHYW50dERhdGUpIHtcbiAgICAgICAgY29uc3QgZHJhZ01hc2tFbGVtZW50ID0gdGhpcy5kb20ucm9vdC5xdWVyeVNlbGVjdG9yKCcuZ2FudHQtZHJhZy1tYXNrJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGRyYWdCYWNrZHJvcEVsZW1lbnQgPSB0aGlzLmRvbS5yb290LnF1ZXJ5U2VsZWN0b3IoJy5nYW50dC1kcmFnLWJhY2tkcm9wJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHJvb3RSZWN0ID0gdGhpcy5kb20ucm9vdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgZHJhZ1JlY3QgPSBkcmFnRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgbGVmdCA9IGRyYWdSZWN0LmxlZnQgLSByb290UmVjdC5sZWZ0IC0gdGhpcy5kb20uc2lkZS5jbGllbnRXaWR0aDtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBkcmFnUmVjdC5yaWdodCAtIGRyYWdSZWN0LmxlZnQ7XG4gICAgICAgIGRyYWdNYXNrRWxlbWVudC5zdHlsZS5sZWZ0ID0gbGVmdCArICdweCc7XG4gICAgICAgIGRyYWdNYXNrRWxlbWVudC5zdHlsZS53aWR0aCA9IHdpZHRoICsgJ3B4JztcbiAgICAgICAgZHJhZ01hc2tFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zdGFydCcpLmlubmVySFRNTCA9IHN0YXJ0LmZvcm1hdCgnTU0tZGQnKTtcbiAgICAgICAgZHJhZ01hc2tFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5lbmQnKS5pbm5lckhUTUwgPSBlbmQuZm9ybWF0KCdNTS1kZCcpO1xuICAgICAgICBkcmFnTWFza0VsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgIGRyYWdCYWNrZHJvcEVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbG9zZURyYWdCYWNrZHJvcCgpIHtcbiAgICAgICAgY29uc3QgZHJhZ01hc2tFbGVtZW50ID0gdGhpcy5kb20ucm9vdC5xdWVyeVNlbGVjdG9yKCcuZ2FudHQtZHJhZy1tYXNrJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGRyYWdCYWNrZHJvcEVsZW1lbnQgPSB0aGlzLmRvbS5yb290LnF1ZXJ5U2VsZWN0b3IoJy5nYW50dC1kcmFnLWJhY2tkcm9wJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGRyYWdNYXNrRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICBkcmFnQmFja2Ryb3BFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXREcmFnZ2luZ1N0eWxlcygpIHtcbiAgICAgICAgdGhpcy5iYXJFbGVtZW50LnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG4gICAgICAgIHRoaXMuYmFyRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdnYW50dC1iYXItZHJhZ2dhYmxlLWRyYWcnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFyRHJhZ2dpbmdTdHlsZXMoKSB7XG4gICAgICAgIHRoaXMuYmFyRWxlbWVudC5zdHlsZS5wb2ludGVyRXZlbnRzID0gJyc7XG4gICAgICAgIHRoaXMuYmFyRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdnYW50dC1iYXItZHJhZ2dhYmxlLWRyYWcnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbGNMaW5rTGluZVBvc2l0aW9ucyh0YXJnZXQ6IEhUTUxFbGVtZW50LCBpc0JlZm9yZTogYm9vbGVhbikge1xuICAgICAgICBjb25zdCByb290UmVjdCA9IHRoaXMuZG9tLnJvb3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHRhcmdldFJlY3QgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IGxheWVyUmVjdCA9IHRhcmdldC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4MTogbGF5ZXJSZWN0LmxlZnQgKyAoaXNCZWZvcmUgPyAwIDogbGF5ZXJSZWN0LndpZHRoKSAtIHJvb3RSZWN0LmxlZnQsXG4gICAgICAgICAgICB5MTogbGF5ZXJSZWN0LnRvcCArIGxheWVyUmVjdC5oZWlnaHQgLyAyIC0gcm9vdFJlY3QudG9wLFxuICAgICAgICAgICAgeDI6IHRhcmdldFJlY3QubGVmdCAtIHJvb3RSZWN0LmxlZnQgKyB0YXJnZXRSZWN0LndpZHRoIC8gMixcbiAgICAgICAgICAgIHkyOiB0YXJnZXRSZWN0LnRvcCAtIHJvb3RSZWN0LnRvcCArIHRhcmdldFJlY3QuaGVpZ2h0IC8gMlxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlTGlua0RyYWdnaW5nTGluZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxpbmtEcmFnZ2luZ0xpbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IHN2Z0VsZW1lbnQgPSBjcmVhdGVTdmdFbGVtZW50KCdzdmcnLCAnZ2FudHQtbGluay1kcmFnLWNvbnRhaW5lcicpO1xuICAgICAgICAgICAgY29uc3QgbGluRWxlbWVudCA9IGNyZWF0ZVN2Z0VsZW1lbnQoJ2xpbmUnLCAnbGluay1kcmFnZ2luZy1saW5lJyk7XG4gICAgICAgICAgICBsaW5FbGVtZW50LnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG4gICAgICAgICAgICBzdmdFbGVtZW50LmFwcGVuZENoaWxkKGxpbkVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5kb20ucm9vdC5hcHBlbmRDaGlsZChzdmdFbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMubGlua0RyYWdnaW5nTGluZSA9IGxpbkVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGRlc3Ryb3lMaW5rRHJhZ2dpbmdMaW5lKCkge1xuICAgICAgICBpZiAodGhpcy5saW5rRHJhZ2dpbmdMaW5lKSB7XG4gICAgICAgICAgICB0aGlzLmxpbmtEcmFnZ2luZ0xpbmUucGFyZW50RWxlbWVudC5yZW1vdmUoKTtcbiAgICAgICAgICAgIHRoaXMubGlua0RyYWdnaW5nTGluZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjcmVhdGVEcmFncyhlbGVtZW50UmVmOiBFbGVtZW50UmVmLCBpdGVtOiBHYW50dEl0ZW1JbnRlcm5hbCwgZ2FudHRVcHBlcjogR2FudHRVcHBlcikge1xuICAgICAgICB0aGlzLml0ZW0gPSBpdGVtO1xuICAgICAgICB0aGlzLmJhckVsZW1lbnQgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMuZ2FudHRVcHBlciA9IGdhbnR0VXBwZXI7XG5cbiAgICAgICAgaWYgKCFpdGVtLmRyYWdnYWJsZSB8fCAodGhpcy5kcmFnRGlzYWJsZWQgJiYgdGhpcy5saW5rRHJhZ0Rpc2FibGVkKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVNb3VzZUV2ZW50cygpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRyYWdEaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRyYWdSZWYgPSB0aGlzLmNyZWF0ZUJhckRyYWcoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkcmFnSGFuZGxlc1JlZnMgPSB0aGlzLmNyZWF0ZUJhckhhbmRsZURyYWdzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmFnUmVmcy5wdXNoKGRyYWdSZWYsIC4uLmRyYWdIYW5kbGVzUmVmcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMubGlua0RyYWdEaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmtEcmFnUmVmcyA9IHRoaXMuY3JlYXRlTGlua0hhbmRsZURyYWdzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmFnUmVmcy5wdXNoKC4uLmxpbmtEcmFnUmVmcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5jbG9zZURyYWdCYWNrZHJvcCgpO1xuICAgICAgICB0aGlzLmRyYWdSZWZzLmZvckVhY2goKGRyYWdSZWYpID0+IGRyYWdSZWYuZGlzcG9zZSgpKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG59XG4iXX0=
299
+ }], ctorParameters: function () { return [{ type: i1.DragDrop }, { type: i2.GanttDomService }, { type: i3.GanttDragContainer }, { type: i4.NgxGanttRootComponent, decorators: [{
300
+ type: SkipSelf
301
+ }] }]; } });
302
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyLWRyYWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nYW50dC9zcmMvY29tcG9uZW50cy9iYXIvYmFyLWRyYWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBeUIsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzVFLE9BQU8sRUFBc0IsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFL0UsT0FBTyxFQUFhLHdCQUF3QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkUsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVqRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7Ozs7O0FBRXZFLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUN4QixNQUFNLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQztBQUN2QyxNQUFNLGVBQWUsR0FBRyx1QkFBdUIsQ0FBQztBQUNoRCxNQUFNLHFCQUFxQixHQUFHLDhCQUE4QixDQUFDO0FBRTdELFNBQVMsZ0JBQWdCLENBQUMsYUFBcUIsRUFBRSxTQUFpQjtJQUM5RCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDLDRCQUE0QixFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ3RGLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2pDLE9BQU8sT0FBTyxDQUFDO0FBQ25CLENBQUM7QUFHRCxNQUFNLE9BQU8sWUFBWTtJQXVCckIsWUFDWSxRQUFrQixFQUNsQixHQUFvQixFQUNwQixhQUFpQyxFQUNyQixJQUEyQjtRQUh2QyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FB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QkFDckMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7Z0JBQ3BELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDO2FBQ25EO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDeEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUM7YUFDdkM7U0FDSjtJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM3QixDQUFDOzt5R0F6VFEsWUFBWTs2R0FBWixZQUFZOzJGQUFaLFlBQVk7a0JBRHhCLFVBQVU7OzBCQTRCRixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgRWxlbWVudFJlZiwgT25EZXN0cm95LCBTa2lwU2VsZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRHJhZ1JlZiwgRHJhZ0Ryb3AgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IEdhbnR0RG9tU2VydmljZSB9IGZyb20gJy4uLy4uL2dhbnR0LWRvbS5zZXJ2aWNlJztcbmltcG9ydCB7IEdhbnR0RHJhZ0NvbnRhaW5lciwgSW5CYXJQb3NpdGlvbiB9IGZyb20gJy4uLy4uL2dhbnR0LWRyYWctY29udGFpbmVyJztcbmltcG9ydCB7IEdhbnR0SXRlbUludGVybmFsIH0gZnJvbSAnLi4vLi4vY2xhc3MvaXRlbSc7XG5pbXBvcnQgeyBHYW50dERhdGUsIGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyB9IGZyb20gJy4uLy4uL3V0aWxzL2RhdGUnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBHYW50dFVwcGVyIH0gZnJvbSAnLi4vLi4vZ2FudHQtdXBwZXInO1xuaW1wb3J0IHsgR2FudHRMaW5rVHlwZSB9IGZyb20gJy4uLy4uL2NsYXNzL2xpbmsnO1xuaW1wb3J0IHsgTmd4R2FudHRSb290Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcm9vdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgcGFzc2l2ZUxpc3RlbmVyT3B0aW9ucyB9IGZyb20gJy4uLy4uL3V0aWxzL3Bhc3NpdmUtbGlzdGVuZXJzJztcblxuY29uc3QgZHJhZ01pbldpZHRoID0gMTA7XG5jb25zdCBhY3RpdmVDbGFzcyA9ICdnYW50dC1iYXItYWN0aXZlJztcbmNvbnN0IGRyb3BBY3RpdmVDbGFzcyA9ICdnYW50dC1iYXItZHJvcC1hY3RpdmUnO1xuY29uc3Qgc2luZ2xlRHJvcEFjdGl2ZUNsYXNzID0gJ2dhbnR0LWJhci1zaW5nbGUtZHJvcC1hY3RpdmUnO1xuXG5mdW5jdGlvbiBjcmVhdGVTdmdFbGVtZW50KHF1YWxpZmllZE5hbWU6IHN0cmluZywgY2xhc3NOYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsIHF1YWxpZmllZE5hbWUpO1xuICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpO1xuICAgIHJldHVybiBlbGVtZW50O1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgR2FudHRCYXJEcmFnIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIGdhbnR0VXBwZXI6IEdhbnR0VXBwZXI7XG5cbiAgICBwcml2YXRlIGJhckVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuXG4gICAgcHJpdmF0ZSBpdGVtOiBHYW50dEl0ZW1JbnRlcm5hbDtcblxuICAgIHByaXZhdGUgZ2V0IGRyYWdEaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLml0ZW0uZHJhZ2dhYmxlIHx8ICF0aGlzLmdhbnR0VXBwZXIuZHJhZ2dhYmxlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGxpbmtEcmFnRGlzYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pdGVtLmxpbmthYmxlIHx8ICF0aGlzLmdhbnR0VXBwZXIubGlua2FibGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsaW5rRHJhZ2dpbmdMaW5lOiBTVkdFbGVtZW50O1xuXG4gICAgcHJpdmF0ZSBiYXJEcmFnUmVmOiBEcmFnUmVmO1xuXG4gICAgcHJpdmF0ZSBkcmFnUmVmczogRHJhZ1JlZltdID0gW107XG5cbiAgICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGRyYWdEcm9wOiBEcmFnRHJvcCxcbiAgICAgICAgcHJpdmF0ZSBkb206IEdhbnR0RG9tU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBkcmFnQ29udGFpbmVyOiBHYW50dERyYWdDb250YWluZXIsXG4gICAgICAgIEBTa2lwU2VsZigpIHByaXZhdGUgcm9vdDogTmd4R2FudHRSb290Q29tcG9uZW50XG4gICAgKSB7fVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVNb3VzZUV2ZW50cygpIHtcbiAgICAgICAgY29uc3QgZHJvcENsYXNzID1cbiAgICAgICAgICAgIHRoaXMuZ2FudHRVcHBlci5jb25maWcubGlua09wdGlvbnM/LmRlcGVuZGVuY3lUeXBlcz8ubGVuZ3RoID09PSAxICYmXG4gICAgICAgICAgICB0aGlzLmdhbnR0VXBwZXIuY29uZmlnLmxpbmtPcHRpb25zPy5kZXBlbmRlbmN5VHlwZXNbMF0gPT09IEdhbnR0TGlua1R5cGUuZnNcbiAgICAgICAgICAgICAgICA/IHNpbmdsZURyb3BBY3RpdmVDbGFzc1xuICAgICAgICAgICAgICAgIDogZHJvcEFjdGl2ZUNsYXNzO1xuXG4gICAgICAgIGZyb21FdmVudCh0aGlzLmJhckVsZW1lbnQsICdtb3VzZWVudGVyJywgcGFzc2l2ZUxpc3RlbmVyT3B0aW9ucylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRyYWdDb250YWluZXIubGlua0RyYWdnaW5nSWQgJiYgdGhpcy5kcmFnQ29udGFpbmVyLmxpbmtEcmFnZ2luZ0lkICE9PSB0aGlzLml0ZW0uaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXRlbS5saW5rYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iYXJFbGVtZW50LmNsYXNzTGlzdC5hZGQoZHJvcENsYXNzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhZ0NvbnRhaW5lci5lbWl0TGlua0RyYWdFbnRlcmVkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtOiB0aGlzLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogdGhpcy5iYXJFbGVtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYmFyRWxlbWVudC5jbGFzc0xpc3QuYWRkKGFjdGl2ZUNsYXNzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQodGhpcy5iYXJFbGVtZW50LCAnbW91c2VsZWF2ZScsIHBhc3NpdmVMaXN0ZW5lck9wdGlvbnMpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZHJhZ0NvbnRhaW5lci5saW5rRHJhZ2dpbmdJZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJhckVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShhY3RpdmVDbGFzcyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmFnQ29udGFpbmVyLmVtaXRMaW5rRHJhZ0xlYXZlZCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmJhckVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShkcm9wQ2xhc3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVCYXJEcmFnKCkge1xuICAgICAgICBjb25zdCBkcmFnUmVmID0gdGhpcy5kcmFnRHJvcC5jcmVhdGVEcmFnKHRoaXMuYmFyRWxlbWVudCk7XG4gICAgICAgIGRyYWdSZWYubG9ja0F4aXMgPSAneCc7XG4gICAgICAgIGRyYWdSZWYuc3RhcnRlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXREcmFnZ2luZ1N0eWxlcygpO1xuICAgICAgICAgICAgdGhpcy5kcmFnQ29udGFpbmVyLmRyYWdTdGFydGVkLmVtaXQoeyBpdGVtOiB0aGlzLml0ZW0ub3JpZ2luIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgZHJhZ1JlZi5tb3ZlZC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50WCA9IHRoaXMuaXRlbS5yZWZzLnggKyBldmVudC5kaXN0YW5jZS54O1xuICAgICAgICAgICAgY29uc3QgY3VycmVudERhdGUgPSB0aGlzLmdhbnR0VXBwZXIudmlldy5nZXREYXRlQnlYUG9pbnQoY3VycmVudFgpO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFN0YXJ0WCA9IHRoaXMuZ2FudHRVcHBlci52aWV3LmdldFhQb2ludEJ5RGF0ZShjdXJyZW50RGF0ZSk7XG4gICAgICAgICAgICBjb25zdCBkYXlXaWR0aCA9IHRoaXMuZ2FudHRVcHBlci52aWV3LmdldERheU9jY3VwYW5jeVdpZHRoKGN1cnJlbnREYXRlKTtcbiAgICAgICAgICAgIGNvbnN0IGRpZmZEYXlzID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKHRoaXMuaXRlbS5lbmQudmFsdWUsIHRoaXMuaXRlbS5zdGFydC52YWx1ZSk7XG4gICAgICAgICAgICBsZXQgc3RhcnQgPSBjdXJyZW50RGF0ZTtcbiAgICAgICAgICAgIGxldCBlbmQgPSBjdXJyZW50RGF0ZS5hZGREYXlzKGRpZmZEYXlzKTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50WCA+IGN1cnJlbnRTdGFydFggKyBkYXlXaWR0aCAvIDIpIHtcbiAgICAgICAgICAgICAgICBzdGFydCA9IHN0YXJ0LmFkZERheXMoMSk7XG4gICAgICAgICAgICAgICAgZW5kID0gZW5kLmFkZERheXMoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm9wZW5EcmFnQmFja2Ryb3AodGhpcy5iYXJFbGVtZW50LCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgIHRoaXMuaXRlbS51cGRhdGVEYXRlKHN0YXJ0LCBlbmQpO1xuICAgICAgICAgICAgdGhpcy5kcmFnQ29udGFpbmVyLmRyYWdNb3ZlZC5lbWl0KHsgaXRlbTogdGhpcy5pdGVtLm9yaWdpbiB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGRyYWdSZWYuZW5kZWQuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jbGVhckRyYWdnaW5nU3R5bGVzKCk7XG4gICAgICAgICAgICB0aGlzLmNsb3NlRHJhZ0JhY2tkcm9wKCk7XG4gICAgICAgICAgICBldmVudC5zb3VyY2UucmVzZXQoKTtcbiAgICAgICAgICAgIHRoaXMuZHJhZ0NvbnRhaW5lci5kcmFnRW5kZWQuZW1pdCh7IGl0ZW06IHRoaXMuaXRlbS5vcmlnaW4gfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmJhckRyYWdSZWYgPSBkcmFnUmVmO1xuICAgICAgICByZXR1cm4gZHJhZ1JlZjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUJhckhhbmRsZURyYWdzKCkge1xuICAgICAgICBjb25zdCBkcmFnUmVmcyA9IFtdO1xuICAgICAgICBjb25zdCBoYW5kbGVzID0gdGhpcy5iYXJFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KCcuZHJhZy1oYW5kbGVzIC5oYW5kbGUnKTtcbiAgICAgICAgaGFuZGxlcy5mb3JFYWNoKChoYW5kbGUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpc0JlZm9yZSA9IGluZGV4ID09PSAwO1xuICAgICAgICAgICAgY29uc3QgZHJhZ1JlZiA9IHRoaXMuZHJhZ0Ryb3AuY3JlYXRlRHJhZyhoYW5kbGUpO1xuICAgICAgICAgICAgZHJhZ1JlZi5sb2NrQXhpcyA9ICd4JztcbiAgICAgICAgICAgIGRyYWdSZWYud2l0aEJvdW5kYXJ5RWxlbWVudCh0aGlzLmRvbS5yb290IGFzIEhUTUxFbGVtZW50KTtcblxuICAgICAgICAgICAgZHJhZ1JlZi5zdGFydGVkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREcmFnZ2luZ1N0eWxlcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ0NvbnRhaW5lci5kcmFnU3RhcnRlZC5lbWl0KHsgaXRlbTogdGhpcy5pdGVtLm9yaWdpbiB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBkcmFnUmVmLm1vdmVkLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNCZWZvcmUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeCA9IHRoaXMuaXRlbS5yZWZzLnggKyBldmVudC5kaXN0YW5jZS54O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMuaXRlbS5yZWZzLndpZHRoICsgZXZlbnQuZGlzdGFuY2UueCAqIC0xO1xuICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGggPiBkcmFnTWluV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmFyRWxlbWVudC5zdHlsZS53aWR0aCA9IHdpZHRoICsgJ3B4JztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmFyRWxlbWVudC5zdHlsZS5sZWZ0ID0geCArICdweCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5EcmFnQmFja2Ryb3AodGhpcy5iYXJFbGVtZW50LCB0aGlzLmdhbnR0VXBwZXIudmlldy5nZXREYXRlQnlYUG9pbnQoeCksIHRoaXMuaXRlbS5lbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtLnVwZGF0ZURhdGUodGhpcy5nYW50dFVwcGVyLnZpZXcuZ2V0RGF0ZUJ5WFBvaW50KHgpLCB0aGlzLml0ZW0uZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5pdGVtLnJlZnMud2lkdGggKyBldmVudC5kaXN0YW5jZS54O1xuICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGggPiBkcmFnTWluV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmFyRWxlbWVudC5zdHlsZS53aWR0aCA9IHdpZHRoICsgJ3B4JztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbkRyYWdCYWNrZHJvcChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJhckVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtLnN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2FudHRVcHBlci52aWV3LmdldERhdGVCeVhQb2ludCh0aGlzLml0ZW0ucmVmcy54ICsgd2lkdGgpXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbS51cGRhdGVEYXRlKHRoaXMuaXRlbS5zdGFydCwgdGhpcy5nYW50dFVwcGVyLnZpZXcuZ2V0RGF0ZUJ5WFBvaW50KHRoaXMuaXRlbS5yZWZzLnggKyB3aWR0aCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdDb250YWluZXIuZHJhZ01vdmVkLmVtaXQoeyBpdGVtOiB0aGlzLml0ZW0ub3JpZ2luIH0pO1xuICAgICAgICAgICAgICAgIGV2ZW50LnNvdXJjZS5yZXNldCgpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGRyYWdSZWYuZW5kZWQuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpc0JlZm9yZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMuaXRlbS5yZWZzLndpZHRoICsgZXZlbnQuZGlzdGFuY2UueCAqIC0xO1xuICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGggPiBkcmFnTWluV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbS51cGRhdGVEYXRlKHRoaXMuZ2FudHRVcHBlci52aWV3LmdldERhdGVCeVhQb2ludCh0aGlzLml0ZW0ucmVmcy54ICsgZXZlbnQuZGlzdGFuY2UueCksIHRoaXMuaXRlbS5lbmQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtLnVwZGF0ZURhdGUodGhpcy5pdGVtLmVuZC5zdGFydE9mRGF5KCksIHRoaXMuaXRlbS5lbmQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLml0ZW0ucmVmcy53aWR0aCArIGV2ZW50LmRpc3RhbmNlLng7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aCA+IGRyYWdNaW5XaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtLnVwZGF0ZURhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtLnN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2FudHRVcHBlci52aWV3LmdldERhdGVCeVhQb2ludCh0aGlzLml0ZW0ucmVmcy54ICsgdGhpcy5pdGVtLnJlZnMud2lkdGggKyBldmVudC5kaXN0YW5jZS54KVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbS51cGRhdGVEYXRlKHRoaXMuaXRlbS5zdGFydCwgdGhpcy5pdGVtLnN0YXJ0LmVuZE9mRGF5KCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJEcmFnZ2luZ1N0eWxlcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VEcmFnQmFja2Ryb3AoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdDb250YWluZXIuZHJhZ0VuZGVkLmVtaXQoeyBpdGVtOiB0aGlzLml0ZW0ub3JpZ2luIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkcmFnUmVmcy5wdXNoKGRyYWdSZWYpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGRyYWdSZWZzO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlTGlua0hhbmRsZURyYWdzKCkge1xuICAgICAgICBjb25zdCBkcmFnUmVmcyA9IFtdO1xuICAgICAgICBjb25zdCBoYW5kbGVzID0gdGhpcy5iYXJFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KCcubGluay1oYW5kbGVzIC5oYW5kbGUnKTtcbiAgICAgICAgaGFuZGxlcy5mb3JFYWNoKChoYW5kbGUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpc0JlZ2luID0gaW5kZXggPT09IDA7XG4gICAgICAgICAgICBjb25zdCBkcmFnUmVmID0gdGhpcy5kcmFnRHJvcC5jcmVhdGVEcmFnKGhhbmRsZSk7XG4gICAgICAgICAgICBkcmFnUmVmLndpdGhCb3VuZGFyeUVsZW1lbnQodGhpcy5kb20ucm9vdCBhcyBIVE1MRWxlbWVudCk7XG4gICAgICAgICAgICBkcmFnUmVmLmJlZm9yZVN0YXJ0ZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBoYW5kbGUuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5iYXJEcmFnUmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYmFyRHJhZ1JlZi5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlTGlua0RyYWdnaW5nTGluZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ0NvbnRhaW5lci5lbWl0TGlua0RyYWdTdGFydGVkKHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogdGhpcy5iYXJFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICBpdGVtOiB0aGlzLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgIHBvczogaXNCZWdpbiA/IEluQmFyUG9zaXRpb24uc3RhcnQgOiBJbkJhclBvc2l0aW9uLmZpbmlzaFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGRyYWdSZWYubW92ZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwb3NpdGlvbnMgPSB0aGlzLmNhbGNMaW5rTGluZVBvc2l0aW9ucyhoYW5kbGUsIGlzQmVnaW4pO1xuICAgICAgICAgICAgICAgIHRoaXMubGlua0RyYWdnaW5nTGluZS5zZXRBdHRyaWJ1dGUoJ3gxJywgcG9zaXRpb25zLngxLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIHRoaXMubGlua0RyYWdnaW5nTGluZS5zZXRBdHRyaWJ1dGUoJ3kxJywgcG9zaXRpb25zLnkxLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIHRoaXMubGlua0RyYWdnaW5nTGluZS5zZXRBdHRyaWJ1dGUoJ3gyJywgcG9zaXRpb25zLngyLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIHRoaXMubGlua0RyYWdnaW5nTGluZS5zZXRBdHRyaWJ1dGUoJ3kyJywgcG9zaXRpb25zLnkyLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGRyYWdSZWYuZW5kZWQuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGhhbmRsZS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJyc7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYmFyRHJhZ1JlZikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJhckRyYWdSZWYuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8g6K6h566XbGluZeaLluWKqOeahOiQveeCueS9jeS6juebruagh0JhcueahOWAvO+8jOWmguaenOWAvOWkp+S6jkJhcuWuveW6pueahOS4gOWNiu+8jOivtOaYjuaYr+aLluWKqOWIsEJlZ2lu5L2N572u77yM5ZCm5YiZ5YiZ5Li65ouW5Yqo5YiwRW5k5L2N572uXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZHJhZ0NvbnRhaW5lci5saW5rRHJhZ1BhdGgudG8pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGxhY2VQb2ludFggPVxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc291cmNlLmdldFJvb3RFbGVtZW50KCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkueCAtXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYWdDb250YWluZXIubGlua0RyYWdQYXRoLnRvLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkueDtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYWdDb250YWluZXIuZW1pdExpbmtEcmFnRW5kZWQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5kcmFnQ29udGFpbmVyLmxpbmtEcmFnUGF0aC50byxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZVBvaW50WCA8IHRoaXMuZHJhZ0NvbnRhaW5lci5saW5rRHJhZ1BhdGgudG8uaXRlbS5yZWZzLndpZHRoIC8gMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IEluQmFyUG9zaXRpb24uc3RhcnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBJbkJhclBvc2l0aW9uLmZpbmlzaFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZXZlbnQuc291cmNlLnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5iYXJFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoYWN0aXZlQ2xhc3MpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveUxpbmtEcmFnZ2luZ0xpbmUoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBkcmFnUmVmcy5wdXNoKGRyYWdSZWYpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGRyYWdSZWZzO1xuICAgIH1cblxuICAgIHByaXZhdGUgb3BlbkRyYWdCYWNrZHJvcChkcmFnRWxlbWVudDogSFRNTEVsZW1lbnQsIHN0YXJ0OiBHYW50dERhdGUsIGVuZDogR2FudHREYXRlKSB7XG4gICAgICAgIGNvbnN0IGRyYWdCYWNrZHJvcEVsZW1lbnQgPSB0aGlzLnJvb3QuYmFja2Ryb3AubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgZHJhZ01hc2tFbGVtZW50ID0gZHJhZ0JhY2tkcm9wRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZ2FudHQtZHJhZy1tYXNrJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHJvb3RSZWN0ID0gdGhpcy5kb20ucm9vdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgZHJhZ1JlY3QgPSBkcmFnRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgbGVmdCA9IGRyYWdSZWN0LmxlZnQgLSByb290UmVjdC5sZWZ0IC0gdGhpcy5kb20uc2lkZS5jbGllbnRXaWR0aDtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBkcmFnUmVjdC5yaWdodCAtIGRyYWdSZWN0LmxlZnQ7XG4gICAgICAgIC8vIE5vdGU6IHVwZGF0aW5nIHN0eWxlcyB3aWxsIGNhdXNlIHJlLWxheW91dCBzbyB3ZSBoYXZlIHRvIHBsYWNlIHRoZW0gY29uc2lzdGVudGx5IG9uZSBieSBvbmUuXG4gICAgICAgIGRyYWdNYXNrRWxlbWVudC5zdHlsZS5sZWZ0ID0gbGVmdCArICdweCc7XG4gICAgICAgIGRyYWdNYXNrRWxlbWVudC5zdHlsZS53aWR0aCA9IHdpZHRoICsgJ3B4JztcbiAgICAgICAgZHJhZ01hc2tFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICBkcmFnQmFja2Ryb3BFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICAvLyBUaGlzIHdpbGwgaW52YWxpZGF0ZSB0aGUgbGF5b3V0LCBidXQgd2Ugd29uJ3QgbmVlZCByZS1sYXlvdXQsIGJlY2F1c2Ugd2Ugc2V0IHN0eWxlcyBwcmV2aW91c2x5LlxuICAgICAgICBkcmFnTWFza0VsZW1lbnQucXVlcnlTZWxlY3RvcignLnN0YXJ0JykuaW5uZXJIVE1MID0gc3RhcnQuZm9ybWF0KCdNTS1kZCcpO1xuICAgICAgICBkcmFnTWFza0VsZW1lbnQucXVlcnlTZWxlY3RvcignLmVuZCcpLmlubmVySFRNTCA9IGVuZC5mb3JtYXQoJ01NLWRkJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbG9zZURyYWdCYWNrZHJvcCgpIHtcbiAgICAgICAgY29uc3QgZHJhZ0JhY2tkcm9wRWxlbWVudCA9IHRoaXMucm9vdC5iYWNrZHJvcC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBkcmFnTWFza0VsZW1lbnQgPSBkcmFnQmFja2Ryb3BFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5nYW50dC1kcmFnLW1hc2snKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgZHJhZ01hc2tFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgIGRyYWdCYWNrZHJvcEVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldERyYWdnaW5nU3R5bGVzKCkge1xuICAgICAgICB0aGlzLmJhckVsZW1lbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcbiAgICAgICAgdGhpcy5iYXJFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2dhbnR0LWJhci1kcmFnZ2FibGUtZHJhZycpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xlYXJEcmFnZ2luZ1N0eWxlcygpIHtcbiAgICAgICAgdGhpcy5iYXJFbGVtZW50LnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnJztcbiAgICAgICAgdGhpcy5iYXJFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2dhbnR0LWJhci1kcmFnZ2FibGUtZHJhZycpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FsY0xpbmtMaW5lUG9zaXRpb25zKHRhcmdldDogSFRNTEVsZW1lbnQsIGlzQmVmb3JlOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IHJvb3RSZWN0ID0gdGhpcy5kb20ucm9vdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0UmVjdCA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgbGF5ZXJSZWN0ID0gdGFyZ2V0LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHgxOiBsYXllclJlY3QubGVmdCArIChpc0JlZm9yZSA/IDAgOiBsYXllclJlY3Qud2lkdGgpIC0gcm9vdFJlY3QubGVmdCxcbiAgICAgICAgICAgIHkxOiBsYXllclJlY3QudG9wICsgbGF5ZXJSZWN0LmhlaWdodCAvIDIgLSByb290UmVjdC50b3AsXG4gICAgICAgICAgICB4MjogdGFyZ2V0UmVjdC5sZWZ0IC0gcm9vdFJlY3QubGVmdCArIHRhcmdldFJlY3Qud2lkdGggLyAyLFxuICAgICAgICAgICAgeTI6IHRhcmdldFJlY3QudG9wIC0gcm9vdFJlY3QudG9wICsgdGFyZ2V0UmVjdC5oZWlnaHQgLyAyXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVMaW5rRHJhZ2dpbmdMaW5lKCkge1xuICAgICAgICBpZiAoIXRoaXMubGlua0RyYWdnaW5nTGluZSkge1xuICAgICAgICAgICAgY29uc3Qgc3ZnRWxlbWVudCA9IGNyZWF0ZVN2Z0VsZW1lbnQoJ3N2ZycsICdnYW50dC1saW5rLWRyYWctY29udGFpbmVyJyk7XG4gICAgICAgICAgICBjb25zdCBsaW5FbGVtZW50ID0gY3JlYXRlU3ZnRWxlbWVudCgnbGluZScsICdsaW5rLWRyYWdnaW5nLWxpbmUnKTtcbiAgICAgICAgICAgIGxpbkVsZW1lbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcbiAgICAgICAgICAgIHN2Z0VsZW1lbnQuYXBwZW5kQ2hpbGQobGluRWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLmRvbS5yb290LmFwcGVuZENoaWxkKHN2Z0VsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5saW5rRHJhZ2dpbmdMaW5lID0gbGluRWxlbWVudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZGVzdHJveUxpbmtEcmFnZ2luZ0xpbmUoKSB7XG4gICAgICAgIGlmICh0aGlzLmxpbmtEcmFnZ2luZ0xpbmUpIHtcbiAgICAgICAgICAgIHRoaXMubGlua0RyYWdnaW5nTGluZS5wYXJlbnRFbGVtZW50LnJlbW92ZSgpO1xuICAgICAgICAgICAgdGhpcy5saW5rRHJhZ2dpbmdMaW5lID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNyZWF0ZURyYWdzKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIGl0ZW06IEdhbnR0SXRlbUludGVybmFsLCBnYW50dFVwcGVyOiBHYW50dFVwcGVyKSB7XG4gICAgICAgIHRoaXMuaXRlbSA9IGl0ZW07XG4gICAgICAgIHRoaXMuYmFyRWxlbWVudCA9IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgdGhpcy5nYW50dFVwcGVyID0gZ2FudHRVcHBlcjtcblxuICAgICAgICBpZiAoIWl0ZW0uZHJhZ2dhYmxlIHx8ICh0aGlzLmRyYWdEaXNhYmxlZCAmJiB0aGlzLmxpbmtEcmFnRGlzYWJsZWQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZU1vdXNlRXZlbnRzKCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZHJhZ0Rpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZHJhZ1JlZiA9IHRoaXMuY3JlYXRlQmFyRHJhZygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRyYWdIYW5kbGVzUmVmcyA9IHRoaXMuY3JlYXRlQmFySGFuZGxlRHJhZ3MoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdSZWZzLnB1c2goZHJhZ1JlZiwgLi4uZHJhZ0hhbmRsZXNSZWZzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5saW5rRHJhZ0Rpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGlua0RyYWdSZWZzID0gdGhpcy5jcmVhdGVMaW5rSGFuZGxlRHJhZ3MoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdSZWZzLnB1c2goLi4ubGlua0RyYWdSZWZzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmNsb3NlRHJhZ0JhY2tkcm9wKCk7XG4gICAgICAgIHRoaXMuZHJhZ1JlZnMuZm9yRWFjaCgoZHJhZ1JlZikgPT4gZHJhZ1JlZi5kaXNwb3NlKCkpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,5 +1,6 @@
1
- import { Component, HostBinding, Inject, ViewChild, Output, EventEmitter } from '@angular/core';
2
- import { takeUntil } from 'rxjs/operators';
1
+ import { Component, HostBinding, Inject, ViewChild, Output, EventEmitter, ViewChildren } from '@angular/core';
2
+ import { fromEvent, merge, Observable } from 'rxjs';
3
+ import { startWith, switchMap, takeUntil } from 'rxjs/operators';
3
4
  import { GanttBarDrag } from './bar-drag';
4
5
  import { hexToRgb } from '../../utils/helpers';
5
6
  import { barBackground } from '../../gantt.styles';
@@ -14,17 +15,18 @@ function linearGradient(sideOrCorner, color, stop) {
14
15
  return `linear-gradient(${sideOrCorner},${color} 0%,${stop} 40%)`;
15
16
  }
16
17
  export class NgxGanttBarComponent extends GanttItemUpper {
17
- constructor(dragContainer, drag, elementRef, ganttUpper) {
18
+ constructor(dragContainer, drag, elementRef, ganttUpper, ngZone) {
18
19
  super(elementRef, ganttUpper);
19
20
  this.dragContainer = dragContainer;
20
21
  this.drag = drag;
21
22
  this.ganttUpper = ganttUpper;
23
+ this.ngZone = ngZone;
22
24
  this.barClick = new EventEmitter();
23
25
  this.ganttItemClass = true;
24
26
  this.color = 'red';
25
27
  }
26
28
  ngOnInit() {
27
- super.onInit();
29
+ super.ngOnInit();
28
30
  this.dragContainer.dragEnded.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {
29
31
  this.setContentBackground();
30
32
  });
@@ -32,9 +34,14 @@ export class NgxGanttBarComponent extends GanttItemUpper {
32
34
  ngAfterViewInit() {
33
35
  this.drag.createDrags(this.elementRef, this.item, this.ganttUpper);
34
36
  this.setContentBackground();
35
- }
36
- ngOnChanges() {
37
- super.onChanges();
37
+ this.handles.changes
38
+ .pipe(startWith(this.handles), switchMap(() =>
39
+ // Note: we need to explicitly subscribe outside of the Angular zone since `addEventListener`
40
+ // is called when the `fromEvent` is subscribed.
41
+ new Observable((subscriber) => this.ngZone.runOutsideAngular(() => merge(...this.handles.toArray().map((handle) => fromEvent(handle.nativeElement, 'mousedown'))).subscribe(subscriber)))), takeUntil(this.unsubscribe$))
42
+ .subscribe((event) => {
43
+ event.stopPropagation();
44
+ });
38
45
  }
39
46
  onBarClick(event) {
40
47
  this.barClick.emit({ event, item: this.item.origin });
@@ -70,12 +77,9 @@ export class NgxGanttBarComponent extends GanttItemUpper {
70
77
  stopPropagation(event) {
71
78
  event.stopPropagation();
72
79
  }
73
- ngOnDestroy() {
74
- super.onDestroy();
75
- }
76
80
  }
77
- NgxGanttBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: NgxGanttBarComponent, deps: [{ token: i1.GanttDragContainer }, { token: i2.GanttBarDrag }, { token: i0.ElementRef }, { token: GANTT_UPPER_TOKEN }], target: i0.ɵɵFactoryTarget.Component });
78
- NgxGanttBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.5", type: NgxGanttBarComponent, selector: "ngx-gantt-bar,gantt-bar", outputs: { barClick: "barClick" }, host: { properties: { "class.gantt-bar": "this.ganttItemClass" } }, providers: [GanttBarDrag], viewQueries: [{ propertyName: "contentElementRef", first: true, predicate: ["content"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"gantt-bar-layer\">\n <div *ngIf=\"item.draggable && ganttUpper.draggable\" class=\"drag-handles\">\n <ng-container>\n <span class=\"handle\" (mousedown)=\"stopPropagation($event)\"></span>\n <span class=\"handle\" (mousedown)=\"stopPropagation($event)\"></span>\n </ng-container>\n </div>\n <div *ngIf=\"item.linkable && ganttUpper.linkable\" class=\"link-handles\">\n <span class=\"handle\"><span class=\"point\"></span></span>\n <span class=\"handle\"> <span class=\"point\"></span></span>\n </div>\n</div>\n<div class=\"gantt-bar-border\"></div>\n<div #content class=\"gantt-bar-content\" (click)=\"onBarClick($event)\">\n <div class=\"gantt-bar-content-progress\" *ngIf=\"item.progress >= 0\" [style.width.%]=\"item.progress * 100\"></div>\n <ng-template [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item: item.origin, refs: item.refs }\"></ng-template>\n</div>\n", directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
81
+ NgxGanttBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: NgxGanttBarComponent, deps: [{ token: i1.GanttDragContainer }, { token: i2.GanttBarDrag }, { token: i0.ElementRef }, { token: GANTT_UPPER_TOKEN }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
82
+ NgxGanttBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.5", type: NgxGanttBarComponent, selector: "ngx-gantt-bar,gantt-bar", outputs: { barClick: "barClick" }, host: { properties: { "class.gantt-bar": "this.ganttItemClass" } }, providers: [GanttBarDrag], viewQueries: [{ propertyName: "contentElementRef", first: true, predicate: ["content"], descendants: true }, { propertyName: "handles", predicate: ["handle"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"gantt-bar-layer\">\n <div *ngIf=\"item.draggable && ganttUpper.draggable\" class=\"drag-handles\">\n <ng-container>\n <span class=\"handle\" #handle></span>\n <span class=\"handle\" #handle></span>\n </ng-container>\n </div>\n <div *ngIf=\"item.linkable && ganttUpper.linkable\" class=\"link-handles\">\n <span class=\"handle\"><span class=\"point\"></span></span>\n <span class=\"handle\"> <span class=\"point\"></span></span>\n </div>\n</div>\n<div class=\"gantt-bar-border\"></div>\n<div #content class=\"gantt-bar-content\" (click)=\"onBarClick($event)\">\n <div class=\"gantt-bar-content-progress\" *ngIf=\"item.progress >= 0\" [style.width.%]=\"item.progress * 100\"></div>\n <ng-template [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item: item.origin, refs: item.refs }\"></ng-template>\n</div>\n", directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
79
83
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: NgxGanttBarComponent, decorators: [{
80
84
  type: Component,
81
85
  args: [{
@@ -86,7 +90,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.5", ngImpor
86
90
  }], ctorParameters: function () { return [{ type: i1.GanttDragContainer }, { type: i2.GanttBarDrag }, { type: i0.ElementRef }, { type: i4.GanttUpper, decorators: [{
87
91
  type: Inject,
88
92
  args: [GANTT_UPPER_TOKEN]
89
- }] }]; }, propDecorators: { barClick: [{
93
+ }] }, { type: i0.NgZone }]; }, propDecorators: { barClick: [{
90
94
  type: Output
91
95
  }], contentElementRef: [{
92
96
  type: ViewChild,
@@ -94,5 +98,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.5", ngImpor
94
98
  }], ganttItemClass: [{
95
99
  type: HostBinding,
96
100
  args: ['class.gantt-bar']
101
+ }], handles: [{
102
+ type: ViewChildren,
103
+ args: ['handle']
97
104
  }] } });
98
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dhbnR0L3NyYy9jb21wb25lbnRzL2Jhci9iYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2FudHQvc3JjL2NvbXBvbmVudHMvYmFyL2Jhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUVULFdBQVcsRUFJWCxNQUFNLEVBQ04sU0FBUyxFQUNULE1BQU0sRUFDTixZQUFZLEVBRWYsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDMUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsaUJBQWlCLEVBQWMsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7OztBQUV4RCxTQUFTLGNBQWMsQ0FBQyxZQUFvQixFQUFFLEtBQWEsRUFBRSxJQUFZO0lBQ3JFLE9BQU8sbUJBQW1CLFlBQVksSUFBSSxLQUFLLE9BQU8sSUFBSSxPQUFPLENBQUM7QUFDdEUsQ0FBQztBQU9ELE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxjQUFjO0lBU3BELFlBQ1ksYUFBaUMsRUFDakMsSUFBa0IsRUFDMUIsVUFBc0MsRUFDSixVQUFzQjtRQUV4RCxLQUFLLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBTHRCLGtCQUFhLEdBQWIsYUFBYSxDQUFvQjtRQUNqQyxTQUFJLEdBQUosSUFBSSxDQUFjO1FBRVEsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQVps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LElBQUksS0FBSyxFQUFFO1lBQ3JCLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDM0IsY0FBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDMUM7U0FDSjtJQUNMLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBWTtRQUN4QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELFdBQVc7UUFDUCxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDdEIsQ0FBQzs7aUhBMUVRLG9CQUFvQiwwR0FhakIsaUJBQWlCO3FHQWJwQixvQkFBb0IseUpBRmxCLENBQUMsWUFBWSxDQUFDLG9MQzdCN0IsKzVCQWlCQTsyRkRjYSxvQkFBb0I7a0JBTGhDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHlCQUF5QjtvQkFDbkMsV0FBVyxFQUFFLHNCQUFzQjtvQkFDbkMsU0FBUyxFQUFFLENBQUMsWUFBWSxDQUFDO2lCQUM1Qjs7MEJBY1EsTUFBTTsyQkFBQyxpQkFBaUI7NENBWm5CLFFBQVE7c0JBQWpCLE1BQU07Z0JBRWUsaUJBQWlCO3NCQUF0QyxTQUFTO3VCQUFDLFNBQVM7Z0JBRVksY0FBYztzQkFBN0MsV0FBVzt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBPbkluaXQsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgRWxlbWVudFJlZixcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIEluamVjdCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBBZnRlclZpZXdJbml0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgR2FudHRCYXJEcmFnIH0gZnJvbSAnLi9iYXItZHJhZyc7XG5pbXBvcnQgeyBoZXhUb1JnYiB9IGZyb20gJy4uLy4uL3V0aWxzL2hlbHBlcnMnO1xuaW1wb3J0IHsgR2FudHREcmFnQ29udGFpbmVyIH0gZnJvbSAnLi4vLi4vZ2FudHQtZHJhZy1jb250YWluZXInO1xuaW1wb3J0IHsgYmFyQmFja2dyb3VuZCB9IGZyb20gJy4uLy4uL2dhbnR0LnN0eWxlcyc7XG5pbXBvcnQgeyBHYW50dEJhckNsaWNrRXZlbnQgfSBmcm9tICcuLi8uLi9jbGFzcyc7XG5pbXBvcnQgeyBHQU5UVF9VUFBFUl9UT0tFTiwgR2FudHRVcHBlciB9IGZyb20gJy4uLy4uL2dhbnR0LXVwcGVyJztcbmltcG9ydCB7IEdhbnR0SXRlbVVwcGVyIH0gZnJvbSAnLi4vLi4vZ2FudHQtaXRlbS11cHBlcic7XG5cbmZ1bmN0aW9uIGxpbmVhckdyYWRpZW50KHNpZGVPckNvcm5lcjogc3RyaW5nLCBjb2xvcjogc3RyaW5nLCBzdG9wOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYGxpbmVhci1ncmFkaWVudCgke3NpZGVPckNvcm5lcn0sJHtjb2xvcn0gMCUsJHtzdG9wfSA0MCUpYDtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3gtZ2FudHQtYmFyLGdhbnR0LWJhcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Jhci5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbR2FudHRCYXJEcmFnXVxufSlcbmV4cG9ydCBjbGFzcyBOZ3hHYW50dEJhckNvbXBvbmVudCBleHRlbmRzIEdhbnR0SXRlbVVwcGVyIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gICAgQE91dHB1dCgpIGJhckNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHYW50dEJhckNsaWNrRXZlbnQ+KCk7XG5cbiAgICBAVmlld0NoaWxkKCdjb250ZW50JykgY29udGVudEVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5nYW50dC1iYXInKSBnYW50dEl0ZW1DbGFzcyA9IHRydWU7XG5cbiAgICBjb2xvciA9ICdyZWQnO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZHJhZ0NvbnRhaW5lcjogR2FudHREcmFnQ29udGFpbmVyLFxuICAgICAgICBwcml2YXRlIGRyYWc6IEdhbnR0QmFyRHJhZyxcbiAgICAgICAgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4sXG4gICAgICAgIEBJbmplY3QoR0FOVFRfVVBQRVJfVE9LRU4pIHB1YmxpYyBnYW50dFVwcGVyOiBHYW50dFVwcGVyXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnRSZWYsIGdhbnR0VXBwZXIpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBzdXBlci5vbkluaXQoKTtcbiAgICAgICAgdGhpcy5kcmFnQ29udGFpbmVyLmRyYWdFbmRlZC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldENvbnRlbnRCYWNrZ3JvdW5kKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5kcmFnLmNyZWF0ZURyYWdzKHRoaXMuZWxlbWVudFJlZiwgdGhpcy5pdGVtLCB0aGlzLmdhbnR0VXBwZXIpO1xuICAgICAgICB0aGlzLnNldENvbnRlbnRCYWNrZ3JvdW5kKCk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm9uQ2hhbmdlcygpO1xuICAgIH1cblxuICAgIG9uQmFyQ2xpY2soZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIHRoaXMuYmFyQ2xpY2suZW1pdCh7IGV2ZW50LCBpdGVtOiB0aGlzLml0ZW0ub3JpZ2luIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Q29udGVudEJhY2tncm91bmQoKSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRFbGVtZW50ID0gdGhpcy5jb250ZW50RWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBjb2xvciA9IHRoaXMuaXRlbS5jb2xvciB8fCBiYXJCYWNrZ3JvdW5kO1xuICAgICAgICBjb25zdCBzdHlsZTogUGFydGlhbDxDU1NTdHlsZURlY2xhcmF0aW9uPiA9IHRoaXMuaXRlbS5iYXJTdHlsZSB8fCB7fTtcbiAgICAgICAgaWYgKHRoaXMuaXRlbS5vcmlnaW4uc3RhcnQgJiYgdGhpcy5pdGVtLm9yaWdpbi5lbmQpIHtcbiAgICAgICAgICAgIHN0eWxlLmJhY2tncm91bmQgPSBjb2xvcjtcbiAgICAgICAgICAgIHN0eWxlLmJvcmRlclJhZGl1cyA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLml0ZW0ub3JpZ2luLnN0YXJ0ICYmICF0aGlzLml0ZW0ub3JpZ2luLmVuZCkge1xuICAgICAgICAgICAgc3R5bGUuYmFja2dyb3VuZCA9IGxpbmVhckdyYWRpZW50KCd0byBsZWZ0JywgaGV4VG9SZ2IoY29sb3IsIDAuNTUpLCBoZXhUb1JnYihjb2xvciwgMSkpO1xuICAgICAgICAgICAgc3R5bGUuYm9yZGVyUmFkaXVzID0gJzRweCAxMi41cHggMTIuNXB4IDRweCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLml0ZW0ub3JpZ2luLnN0YXJ0ICYmIHRoaXMuaXRlbS5vcmlnaW4uZW5kKSB7XG4gICAgICAgICAgICBzdHlsZS5iYWNrZ3JvdW5kID0gbGluZWFyR3JhZGllbnQoJ3RvIHJpZ2h0JywgaGV4VG9SZ2IoY29sb3IsIDAuNTUpLCBoZXhUb1JnYihjb2xvciwgMSkpO1xuICAgICAgICAgICAgc3R5bGUuYm9yZGVyUmFkaXVzID0gJzEyLjVweCA0cHggNHB4IDEyLjVweCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXRlbS5wcm9ncmVzcyA+PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50UHJvZ3Jlc3NFbGVtZW50ID0gY29udGVudEVsZW1lbnQucXVlcnlTZWxlY3RvcignLmdhbnR0LWJhci1jb250ZW50LXByb2dyZXNzJykgYXMgSFRNTERpdkVsZW1lbnQ7XG4gICAgICAgICAgICBzdHlsZS5iYWNrZ3JvdW5kID0gaGV4VG9SZ2IoY29sb3IsIDAuMyk7XG4gICAgICAgICAgICBzdHlsZS5ib3JkZXJSYWRpdXMgPSAnJztcbiAgICAgICAgICAgIGNvbnRlbnRQcm9ncmVzc0VsZW1lbnQuc3R5bGUuYmFja2dyb3VuZCA9IGNvbG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc3R5bGUpIHtcbiAgICAgICAgICAgIGlmIChzdHlsZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgY29udGVudEVsZW1lbnQuc3R5bGVba2V5XSA9IHN0eWxlW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdG9wUHJvcGFnYXRpb24oZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBzdXBlci5vbkRlc3Ryb3koKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZ2FudHQtYmFyLWxheWVyXCI+XG4gIDxkaXYgKm5nSWY9XCJpdGVtLmRyYWdnYWJsZSAmJiBnYW50dFVwcGVyLmRyYWdnYWJsZVwiIGNsYXNzPVwiZHJhZy1oYW5kbGVzXCI+XG4gICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiaGFuZGxlXCIgKG1vdXNlZG93bik9XCJzdG9wUHJvcGFnYXRpb24oJGV2ZW50KVwiPjwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiaGFuZGxlXCIgKG1vdXNlZG93bik9XCJzdG9wUHJvcGFnYXRpb24oJGV2ZW50KVwiPjwvc3Bhbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJpdGVtLmxpbmthYmxlICYmIGdhbnR0VXBwZXIubGlua2FibGVcIiBjbGFzcz1cImxpbmstaGFuZGxlc1wiPlxuICAgIDxzcGFuIGNsYXNzPVwiaGFuZGxlXCI+PHNwYW4gY2xhc3M9XCJwb2ludFwiPjwvc3Bhbj48L3NwYW4+XG4gICAgPHNwYW4gY2xhc3M9XCJoYW5kbGVcIj4gPHNwYW4gY2xhc3M9XCJwb2ludFwiPjwvc3Bhbj48L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiZ2FudHQtYmFyLWJvcmRlclwiPjwvZGl2PlxuPGRpdiAjY29udGVudCBjbGFzcz1cImdhbnR0LWJhci1jb250ZW50XCIgKGNsaWNrKT1cIm9uQmFyQ2xpY2soJGV2ZW50KVwiPlxuICA8ZGl2IGNsYXNzPVwiZ2FudHQtYmFyLWNvbnRlbnQtcHJvZ3Jlc3NcIiAqbmdJZj1cIml0ZW0ucHJvZ3Jlc3MgPj0gMFwiIFtzdHlsZS53aWR0aC4lXT1cIml0ZW0ucHJvZ3Jlc3MgKiAxMDBcIj48L2Rpdj5cbiAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgaXRlbTogaXRlbS5vcmlnaW4sIHJlZnM6IGl0ZW0ucmVmcyB9XCI+PC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuIl19
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dhbnR0L3NyYy9jb21wb25lbnRzL2Jhci9iYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2FudHQvc3JjL2NvbXBvbmVudHMvYmFyL2Jhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUVULFdBQVcsRUFJWCxNQUFNLEVBQ04sU0FBUyxFQUNULE1BQU0sRUFDTixZQUFZLEVBRVosWUFBWSxFQUdmLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQsT0FBTyxFQUFFLGlCQUFpQixFQUFjLE1BQU0sbUJBQW1CLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7QUFFeEQsU0FBUyxjQUFjLENBQUMsWUFBb0IsRUFBRSxLQUFhLEVBQUUsSUFBWTtJQUNyRSxPQUFPLG1CQUFtQixZQUFZLElBQUksS0FBSyxPQUFPLElBQUksT0FBTyxDQUFDO0FBQ3RFLENBQUM7QUFPRCxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsY0FBYztJQVdwRCxZQUNZLGFBQWlDLEVBQ2pDLElBQWtCLEVBQzFCLFVBQXNDLEVBQ0ssVUFBc0IsRUFDekQsTUFBYztRQUV0QixLQUFLLENBQUMsVUFBVSxF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a0JhLG9CQUFvQjtrQkFMaEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUseUJBQXlCO29CQUNuQyxXQUFXLEVBQUUsc0JBQXNCO29CQUNuQyxTQUFTLEVBQUUsQ0FBQyxZQUFZLENBQUM7aUJBQzVCOzswQkFnQlEsTUFBTTsyQkFBQyxpQkFBaUI7aUVBZG5CLFFBQVE7c0JBQWpCLE1BQU07Z0JBRWUsaUJBQWlCO3NCQUF0QyxTQUFTO3VCQUFDLFNBQVM7Z0JBRVksY0FBYztzQkFBN0MsV0FBVzt1QkFBQyxpQkFBaUI7Z0JBRU4sT0FBTztzQkFBOUIsWUFBWTt1QkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgT25Jbml0LFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBJbmplY3QsXG4gICAgVmlld0NoaWxkLFxuICAgIE91dHB1dCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgUXVlcnlMaXN0LFxuICAgIE5nWm9uZVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZyb21FdmVudCwgbWVyZ2UsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBHYW50dEJhckRyYWcgfSBmcm9tICcuL2Jhci1kcmFnJztcbmltcG9ydCB7IGhleFRvUmdiIH0gZnJvbSAnLi4vLi4vdXRpbHMvaGVscGVycyc7XG5pbXBvcnQgeyBHYW50dERyYWdDb250YWluZXIgfSBmcm9tICcuLi8uLi9nYW50dC1kcmFnLWNvbnRhaW5lcic7XG5pbXBvcnQgeyBiYXJCYWNrZ3JvdW5kIH0gZnJvbSAnLi4vLi4vZ2FudHQuc3R5bGVzJztcbmltcG9ydCB7IEdhbnR0QmFyQ2xpY2tFdmVudCB9IGZyb20gJy4uLy4uL2NsYXNzJztcbmltcG9ydCB7IEdBTlRUX1VQUEVSX1RPS0VOLCBHYW50dFVwcGVyIH0gZnJvbSAnLi4vLi4vZ2FudHQtdXBwZXInO1xuaW1wb3J0IHsgR2FudHRJdGVtVXBwZXIgfSBmcm9tICcuLi8uLi9nYW50dC1pdGVtLXVwcGVyJztcblxuZnVuY3Rpb24gbGluZWFyR3JhZGllbnQoc2lkZU9yQ29ybmVyOiBzdHJpbmcsIGNvbG9yOiBzdHJpbmcsIHN0b3A6IHN0cmluZykge1xuICAgIHJldHVybiBgbGluZWFyLWdyYWRpZW50KCR7c2lkZU9yQ29ybmVyfSwke2NvbG9yfSAwJSwke3N0b3B9IDQwJSlgO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25neC1nYW50dC1iYXIsZ2FudHQtYmFyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYmFyLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtHYW50dEJhckRyYWddXG59KVxuZXhwb3J0IGNsYXNzIE5neEdhbnR0QmFyQ29tcG9uZW50IGV4dGVuZHMgR2FudHRJdGVtVXBwZXIgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgICBAT3V0cHV0KCkgYmFyQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEdhbnR0QmFyQ2xpY2tFdmVudD4oKTtcblxuICAgIEBWaWV3Q2hpbGQoJ2NvbnRlbnQnKSBjb250ZW50RWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmdhbnR0LWJhcicpIGdhbnR0SXRlbUNsYXNzID0gdHJ1ZTtcblxuICAgIEBWaWV3Q2hpbGRyZW4oJ2hhbmRsZScpIGhhbmRsZXM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj47XG5cbiAgICBjb2xvciA9ICdyZWQnO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZHJhZ0NvbnRhaW5lcjogR2FudHREcmFnQ29udGFpbmVyLFxuICAgICAgICBwcml2YXRlIGRyYWc6IEdhbnR0QmFyRHJhZyxcbiAgICAgICAgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4sXG4gICAgICAgIEBJbmplY3QoR0FOVFRfVVBQRVJfVE9LRU4pIHB1YmxpYyBvdmVycmlkZSBnYW50dFVwcGVyOiBHYW50dFVwcGVyLFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnRSZWYsIGdhbnR0VXBwZXIpO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIG5nT25Jbml0KCkge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLmRyYWdDb250YWluZXIuZHJhZ0VuZGVkLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q29udGVudEJhY2tncm91bmQoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICB0aGlzLmRyYWcuY3JlYXRlRHJhZ3ModGhpcy5lbGVtZW50UmVmLCB0aGlzLml0ZW0sIHRoaXMuZ2FudHRVcHBlcik7XG4gICAgICAgIHRoaXMuc2V0Q29udGVudEJhY2tncm91bmQoKTtcblxuICAgICAgICB0aGlzLmhhbmRsZXMuY2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc3RhcnRXaXRoKHRoaXMuaGFuZGxlcyksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKFxuICAgICAgICAgICAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90ZTogd2UgbmVlZCB0byBleHBsaWNpdGx5IHN1YnNjcmliZSBvdXRzaWRlIG9mIHRoZSBBbmd1bGFyIHpvbmUgc2luY2UgYGFkZEV2ZW50TGlzdGVuZXJgXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpcyBjYWxsZWQgd2hlbiB0aGUgYGZyb21FdmVudGAgaXMgc3Vic2NyaWJlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBPYnNlcnZhYmxlPEV2ZW50Pigoc3Vic2NyaWJlcikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZSguLi50aGlzLmhhbmRsZXMudG9BcnJheSgpLm1hcCgoaGFuZGxlKSA9PiBmcm9tRXZlbnQoaGFuZGxlLm5hdGl2ZUVsZW1lbnQsICdtb3VzZWRvd24nKSkpLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkJhckNsaWNrKGV2ZW50OiBFdmVudCkge1xuICAgICAgICB0aGlzLmJhckNsaWNrLmVtaXQoeyBldmVudCwgaXRlbTogdGhpcy5pdGVtLm9yaWdpbiB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldENvbnRlbnRCYWNrZ3JvdW5kKCkge1xuICAgICAgICBjb25zdCBjb250ZW50RWxlbWVudCA9IHRoaXMuY29udGVudEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgY29sb3IgPSB0aGlzLml0ZW0uY29sb3IgfHwgYmFyQmFja2dyb3VuZDtcbiAgICAgICAgY29uc3Qgc3R5bGU6IFBhcnRpYWw8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gPSB0aGlzLml0ZW0uYmFyU3R5bGUgfHwge307XG4gICAgICAgIGlmICh0aGlzLml0ZW0ub3JpZ2luLnN0YXJ0ICYmIHRoaXMuaXRlbS5vcmlnaW4uZW5kKSB7XG4gICAgICAgICAgICBzdHlsZS5iYWNrZ3JvdW5kID0gY29sb3I7XG4gICAgICAgICAgICBzdHlsZS5ib3JkZXJSYWRpdXMgPSAnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pdGVtLm9yaWdpbi5zdGFydCAmJiAhdGhpcy5pdGVtLm9yaWdpbi5lbmQpIHtcbiAgICAgICAgICAgIHN0eWxlLmJhY2tncm91bmQgPSBsaW5lYXJHcmFkaWVudCgndG8gbGVmdCcsIGhleFRvUmdiKGNvbG9yLCAwLjU1KSwgaGV4VG9SZ2IoY29sb3IsIDEpKTtcbiAgICAgICAgICAgIHN0eWxlLmJvcmRlclJhZGl1cyA9ICc0cHggMTIuNXB4IDEyLjVweCA0cHgnO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5pdGVtLm9yaWdpbi5zdGFydCAmJiB0aGlzLml0ZW0ub3JpZ2luLmVuZCkge1xuICAgICAgICAgICAgc3R5bGUuYmFja2dyb3VuZCA9IGxpbmVhckdyYWRpZW50KCd0byByaWdodCcsIGhleFRvUmdiKGNvbG9yLCAwLjU1KSwgaGV4VG9SZ2IoY29sb3IsIDEpKTtcbiAgICAgICAgICAgIHN0eWxlLmJvcmRlclJhZGl1cyA9ICcxMi41cHggNHB4IDRweCAxMi41cHgnO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLml0ZW0ucHJvZ3Jlc3MgPj0gMCkge1xuICAgICAgICAgICAgY29uc3QgY29udGVudFByb2dyZXNzRWxlbWVudCA9IGNvbnRlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5nYW50dC1iYXItY29udGVudC1wcm9ncmVzcycpIGFzIEhUTUxEaXZFbGVtZW50O1xuICAgICAgICAgICAgc3R5bGUuYmFja2dyb3VuZCA9IGhleFRvUmdiKGNvbG9yLCAwLjMpO1xuICAgICAgICAgICAgc3R5bGUuYm9yZGVyUmFkaXVzID0gJyc7XG4gICAgICAgICAgICBjb250ZW50UHJvZ3Jlc3NFbGVtZW50LnN0eWxlLmJhY2tncm91bmQgPSBjb2xvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHN0eWxlKSB7XG4gICAgICAgICAgICBpZiAoc3R5bGUuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgIGNvbnRlbnRFbGVtZW50LnN0eWxlW2tleV0gPSBzdHlsZVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RvcFByb3BhZ2F0aW9uKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZ2FudHQtYmFyLWxheWVyXCI+XG4gIDxkaXYgKm5nSWY9XCJpdGVtLmRyYWdnYWJsZSAmJiBnYW50dFVwcGVyLmRyYWdnYWJsZVwiIGNsYXNzPVwiZHJhZy1oYW5kbGVzXCI+XG4gICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiaGFuZGxlXCIgI2hhbmRsZT48L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cImhhbmRsZVwiICNoYW5kbGU+PC9zcGFuPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cIml0ZW0ubGlua2FibGUgJiYgZ2FudHRVcHBlci5saW5rYWJsZVwiIGNsYXNzPVwibGluay1oYW5kbGVzXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJoYW5kbGVcIj48c3BhbiBjbGFzcz1cInBvaW50XCI+PC9zcGFuPjwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz1cImhhbmRsZVwiPiA8c3BhbiBjbGFzcz1cInBvaW50XCI+PC9zcGFuPjwvc3Bhbj5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJnYW50dC1iYXItYm9yZGVyXCI+PC9kaXY+XG48ZGl2ICNjb250ZW50IGNsYXNzPVwiZ2FudHQtYmFyLWNvbnRlbnRcIiAoY2xpY2spPVwib25CYXJDbGljaygkZXZlbnQpXCI+XG4gIDxkaXYgY2xhc3M9XCJnYW50dC1iYXItY29udGVudC1wcm9ncmVzc1wiICpuZ0lmPVwiaXRlbS5wcm9ncmVzcyA+PSAwXCIgW3N0eWxlLndpZHRoLiVdPVwiaXRlbS5wcm9ncmVzcyAqIDEwMFwiPjwvZGl2PlxuICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwidGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBpdGVtOiBpdGVtLm9yaWdpbiwgcmVmczogaXRlbS5yZWZzIH1cIj48L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=