ngx-tethys 17.0.2 → 17.0.4

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 (99) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/autocomplete/autocomplete.component.d.ts +2 -5
  3. package/cascader/cascader.component.d.ts +9 -1
  4. package/cascader/cascader.service.d.ts +3 -0
  5. package/drag-drop/drag.directive.d.ts +1 -4
  6. package/drag-drop/drop-container.directive.d.ts +4 -5
  7. package/dropdown/dropdown-submenu.component.d.ts +3 -6
  8. package/esm2022/autocomplete/autocomplete.component.mjs +7 -14
  9. package/esm2022/button/button-group.component.mjs +2 -2
  10. package/esm2022/cascader/cascader.component.mjs +27 -5
  11. package/esm2022/cascader/cascader.service.mjs +33 -3
  12. package/esm2022/core/behaviors/disabled.mjs +2 -2
  13. package/esm2022/date-picker/abstract-picker.directive.mjs +3 -3
  14. package/esm2022/date-picker/base-picker.component.mjs +3 -2
  15. package/esm2022/drag-drop/drag.directive.mjs +3 -7
  16. package/esm2022/drag-drop/drop-container.directive.mjs +9 -7
  17. package/esm2022/dropdown/dropdown-submenu.component.mjs +7 -12
  18. package/esm2022/form/form.directive.mjs +3 -2
  19. package/esm2022/grid/thy-grid-item.component.mjs +7 -11
  20. package/esm2022/image/preview/image-preview.component.mjs +9 -13
  21. package/esm2022/input/input-count.component.mjs +9 -10
  22. package/esm2022/input/input-group.component.mjs +9 -9
  23. package/esm2022/nav/nav-item.directive.mjs +7 -13
  24. package/esm2022/nav/nav.component.mjs +8 -13
  25. package/esm2022/radio/button/radio-button.component.mjs +2 -2
  26. package/esm2022/radio/group/radio-group.component.mjs +6 -1
  27. package/esm2022/radio/radio.component.mjs +2 -2
  28. package/esm2022/resizable/resizable.directive.mjs +11 -14
  29. package/esm2022/resizable/resize-handle.component.mjs +8 -13
  30. package/esm2022/shared/directives/thy-drag-drop.directive.mjs +8 -8
  31. package/esm2022/space/space.component.mjs +7 -9
  32. package/esm2022/table/table-column.component.mjs +3 -2
  33. package/esm2022/table/table.component.mjs +11 -12
  34. package/esm2022/tabs/tabs.component.mjs +8 -10
  35. package/esm2022/time-picker/time-picker.utils.mjs +8 -8
  36. package/esm2022/util/helpers/helpers.mjs +10 -1
  37. package/esm2022/version.mjs +2 -2
  38. package/esm2022/watermark/watermark.directive.mjs +9 -14
  39. package/fesm2022/ngx-tethys-autocomplete.mjs +8 -14
  40. package/fesm2022/ngx-tethys-autocomplete.mjs.map +1 -1
  41. package/fesm2022/ngx-tethys-button.mjs +2 -1
  42. package/fesm2022/ngx-tethys-button.mjs.map +1 -1
  43. package/fesm2022/ngx-tethys-cascader.mjs +58 -6
  44. package/fesm2022/ngx-tethys-cascader.mjs.map +1 -1
  45. package/fesm2022/ngx-tethys-core.mjs +2 -2
  46. package/fesm2022/ngx-tethys-core.mjs.map +1 -1
  47. package/fesm2022/ngx-tethys-date-picker.mjs +2 -2
  48. package/fesm2022/ngx-tethys-date-picker.mjs.map +1 -1
  49. package/fesm2022/ngx-tethys-drag-drop.mjs +9 -10
  50. package/fesm2022/ngx-tethys-drag-drop.mjs.map +1 -1
  51. package/fesm2022/ngx-tethys-dropdown.mjs +8 -11
  52. package/fesm2022/ngx-tethys-dropdown.mjs.map +1 -1
  53. package/fesm2022/ngx-tethys-form.mjs +2 -1
  54. package/fesm2022/ngx-tethys-form.mjs.map +1 -1
  55. package/fesm2022/ngx-tethys-grid.mjs +6 -10
  56. package/fesm2022/ngx-tethys-grid.mjs.map +1 -1
  57. package/fesm2022/ngx-tethys-image.mjs +10 -12
  58. package/fesm2022/ngx-tethys-image.mjs.map +1 -1
  59. package/fesm2022/ngx-tethys-input.mjs +13 -14
  60. package/fesm2022/ngx-tethys-input.mjs.map +1 -1
  61. package/fesm2022/ngx-tethys-nav.mjs +11 -21
  62. package/fesm2022/ngx-tethys-nav.mjs.map +1 -1
  63. package/fesm2022/ngx-tethys-radio.mjs +6 -1
  64. package/fesm2022/ngx-tethys-radio.mjs.map +1 -1
  65. package/fesm2022/ngx-tethys-resizable.mjs +15 -22
  66. package/fesm2022/ngx-tethys-resizable.mjs.map +1 -1
  67. package/fesm2022/ngx-tethys-shared.mjs +8 -7
  68. package/fesm2022/ngx-tethys-shared.mjs.map +1 -1
  69. package/fesm2022/ngx-tethys-space.mjs +7 -8
  70. package/fesm2022/ngx-tethys-space.mjs.map +1 -1
  71. package/fesm2022/ngx-tethys-table.mjs +12 -12
  72. package/fesm2022/ngx-tethys-table.mjs.map +1 -1
  73. package/fesm2022/ngx-tethys-tabs.mjs +7 -9
  74. package/fesm2022/ngx-tethys-tabs.mjs.map +1 -1
  75. package/fesm2022/ngx-tethys-time-picker.mjs +8 -7
  76. package/fesm2022/ngx-tethys-time-picker.mjs.map +1 -1
  77. package/fesm2022/ngx-tethys-util.mjs +9 -0
  78. package/fesm2022/ngx-tethys-util.mjs.map +1 -1
  79. package/fesm2022/ngx-tethys-watermark.mjs +8 -13
  80. package/fesm2022/ngx-tethys-watermark.mjs.map +1 -1
  81. package/fesm2022/ngx-tethys.mjs +1 -1
  82. package/fesm2022/ngx-tethys.mjs.map +1 -1
  83. package/grid/thy-grid-item.component.d.ts +3 -6
  84. package/image/preview/image-preview.component.d.ts +3 -6
  85. package/input/input-count.component.d.ts +2 -4
  86. package/input/input-group.component.d.ts +3 -4
  87. package/nav/nav-item.directive.d.ts +3 -6
  88. package/nav/nav.component.d.ts +3 -6
  89. package/package.json +1 -1
  90. package/resizable/resizable.directive.d.ts +2 -4
  91. package/resizable/resize-handle.component.d.ts +3 -6
  92. package/schematics/version.d.ts +1 -1
  93. package/schematics/version.js +1 -1
  94. package/shared/directives/thy-drag-drop.directive.d.ts +2 -4
  95. package/space/space.component.d.ts +2 -4
  96. package/table/table.component.d.ts +3 -3
  97. package/tabs/tabs.component.d.ts +2 -4
  98. package/util/helpers/helpers.d.ts +12 -0
  99. package/watermark/watermark.directive.d.ts +3 -6
@@ -1,7 +1,6 @@
1
- import { ChangeDetectionStrategy, Component, ViewEncapsulation, ChangeDetectorRef, ElementRef, ViewChild, NgZone, Output, EventEmitter } from '@angular/core';
2
- import { MixinBase, mixinUnsubscribe } from 'ngx-tethys/core';
1
+ import { ChangeDetectionStrategy, Component, ViewEncapsulation, ChangeDetectorRef, ElementRef, ViewChild, NgZone, Output, EventEmitter, inject, DestroyRef } from '@angular/core';
3
2
  import { fromEvent, Observable } from 'rxjs';
4
- import { takeUntil } from 'rxjs/operators';
3
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
5
4
  import { ThyDialog } from 'ngx-tethys/dialog';
6
5
  import { getClientSize, getFitContentPosition, getOffset, humanizeBytes, isNumber, isUndefinedOrNull } from 'ngx-tethys/util';
7
6
  import { ThyFullscreen } from 'ngx-tethys/fullscreen';
@@ -34,7 +33,7 @@ const VERTICAL_SPACE = 96 + 106; // top: 96px; bottom: 106px
34
33
  * @name thy-image-preview
35
34
  * @order 20
36
35
  */
37
- export class ThyImagePreview extends mixinUnsubscribe(MixinBase) {
36
+ export class ThyImagePreview {
38
37
  get previewImage() {
39
38
  const image = this.images[this.previewIndex];
40
39
  if (image.size) {
@@ -59,7 +58,6 @@ export class ThyImagePreview extends mixinUnsubscribe(MixinBase) {
59
58
  }
60
59
  }
61
60
  constructor(thyDialog, thyFullscreen, cdr, ngZone, notifyService, host, sanitizer) {
62
- super();
63
61
  this.thyDialog = thyDialog;
64
62
  this.thyFullscreen = thyFullscreen;
65
63
  this.cdr = cdr;
@@ -68,6 +66,7 @@ export class ThyImagePreview extends mixinUnsubscribe(MixinBase) {
68
66
  this.host = host;
69
67
  this.sanitizer = sanitizer;
70
68
  this.downloadClicked = new EventEmitter();
69
+ this.destroyRef = inject(DestroyRef);
71
70
  this.images = [];
72
71
  this.previewIndex = 0;
73
72
  this.previewImageTransform = '';
@@ -156,7 +155,7 @@ export class ThyImagePreview extends mixinUnsubscribe(MixinBase) {
156
155
  this.initPreview();
157
156
  this.ngZone.runOutsideAngular(() => {
158
157
  fromEvent(this.host.nativeElement, 'click')
159
- .pipe(takeUntil(this.ngUnsubscribe$))
158
+ .pipe(takeUntilDestroyed(this.destroyRef))
160
159
  .subscribe(event => {
161
160
  if ((event.target === event.currentTarget ||
162
161
  (this.isInsideScreen && this.imagePreviewWrapper.nativeElement.contains(event.target))) &&
@@ -165,7 +164,7 @@ export class ThyImagePreview extends mixinUnsubscribe(MixinBase) {
165
164
  }
166
165
  });
167
166
  fromEvent(this.imagePreviewWrapper.nativeElement, 'mousedown')
168
- .pipe(takeUntil(this.ngUnsubscribe$))
167
+ .pipe(takeUntilDestroyed(this.destroyRef))
169
168
  .subscribe(() => {
170
169
  this.isDragging = !this.isInsideScreen && true;
171
170
  });
@@ -279,7 +278,7 @@ export class ThyImagePreview extends mixinUnsubscribe(MixinBase) {
279
278
  this.downloadClicked.emit(image);
280
279
  const src = image.origin?.src || image.src;
281
280
  fetchImageBlob(src)
282
- .pipe(takeUntil(this.ngUnsubscribe$))
281
+ .pipe(takeUntilDestroyed(this.destroyRef))
283
282
  .subscribe(blob => {
284
283
  const urlCreator = window.URL || window.webkitURL;
285
284
  const objectURL = urlCreator.createObjectURL(blob);
@@ -390,11 +389,8 @@ export class ThyImagePreview extends mixinUnsubscribe(MixinBase) {
390
389
  updatePreviewImageWrapperTransform() {
391
390
  this.previewImageWrapperTransform = `translate3d(${this.position.x}px, ${this.position.y}px, 0)`;
392
391
  }
393
- ngOnDestroy() {
394
- super.ngOnDestroy();
395
- }
396
392
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: ThyImagePreview, deps: [{ token: i1.ThyDialog }, { token: i2.ThyFullscreen }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i3.ThyNotifyService }, { token: i0.ElementRef }, { token: i4.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); }
397
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.3", type: ThyImagePreview, isStandalone: true, selector: "thy-image-preview", outputs: { downloadClicked: "downloadClicked" }, host: { properties: { "class.thy-image-preview-moving": "isDragging" }, classAttribute: "thy-image-preview-wrap" }, viewQueries: [{ propertyName: "imageRef", first: true, predicate: ["imgRef"], descendants: true }, { propertyName: "imagePreviewWrapper", first: true, predicate: ["imagePreviewWrapper"], descendants: true, static: true }], exportAs: ["thyImagePreview"], usesInheritance: true, ngImport: i0, template: "<div class=\"thy-image-preview\" [class.thy-image-preview-fullscreen]=\"isFullScreen\">\n <div class=\"thy-image-preview-header pl-10 pr-8\" *ngIf=\"!isFullScreen\">\n <div class=\"thy-image-preview-header-info\">\n <p class=\"thy-image-name text-truncate\" [thyTooltipDisabled]=\"previewImage?.name?.length < 32\" [thyTooltip]=\"previewImage?.name\">\n {{ previewImage?.name }}\n </p>\n <span class=\"thy-image-size\"> {{ previewImage?.size }}</span>\n </div>\n <a thyAction thyIcon=\"close\" thyTooltip=\"\u9000\u51FA\u9884\u89C8\" href=\"javascript:;\" (click)=\"thyDialog.close()\"></a>\n </div>\n <a\n class=\"thy-image-preview-exit-fullscreen\"\n *ngIf=\"isFullScreen\"\n thyAction\n thyIcon=\"close\"\n thyTooltip=\"\u9000\u51FA\u9884\u89C8\"\n href=\"javascript:;\"\n (click)=\"thyFullscreen.exit()\"\n thyTooltip=\"\u9000\u51FA\u5168\u5C4F\"\n ></a>\n <div\n class=\"thy-image-preview-img-wrapper\"\n #imagePreviewWrapper\n cdkDrag\n [class.thy-image-preview-inside]=\"isInsideScreen\"\n [style.transform]=\"previewImageWrapperTransform\"\n [cdkDragFreeDragPosition]=\"position\"\n (cdkDragReleased)=\"dragReleased()\"\n >\n <ng-container *ngFor=\"let image of images; index as imageIndex\">\n <img\n #imgRef\n *ngIf=\"previewIndex === imageIndex && isLoadingDone\"\n class=\"thy-image-preview-img\"\n [src]=\"image.objectURL || image.src\"\n [style.transform]=\"previewImageTransform\"\n />\n </ng-container>\n <thy-loading [thyDone]=\"isLoadingDone\"></thy-loading>\n </div>\n\n <ng-container *ngIf=\"images.length > 1 && !isFullScreen\">\n <div\n class=\"thy-image-preview-switch-left\"\n [thyTooltipDisabled]=\"previewIndex <= 0\"\n thyTooltip=\"\u4E0A\u4E00\u5F20\"\n [class.thy-image-preview-switch-left-disabled]=\"previewIndex <= 0\"\n (click)=\"prev()\"\n >\n <thy-icon thyIconName=\"angle-left-bold\"></thy-icon>\n </div>\n <div\n class=\"thy-image-preview-switch-right\"\n thyTooltip=\"\u4E0B\u4E00\u5F20\"\n [thyTooltipDisabled]=\"previewIndex >= images.length - 1\"\n [class.thy-image-preview-switch-right-disabled]=\"previewIndex >= images.length - 1\"\n (click)=\"next()\"\n >\n <thy-icon thyIconName=\"angle-right-bold\"> </thy-icon>\n </div>\n </ng-container>\n <thy-actions thySize=\"xs\" class=\"thy-image-preview-operations py-3 px-4\" *ngIf=\"!isFullScreen\">\n <ng-container *ngFor=\"let option of previewOperations; let i = index\">\n <a\n *ngIf=\"!['original-scale', 'fit-screen', 'copyLink'].includes(option.type) || currentImageMode === option.type\"\n href=\"javascript:;\"\n thyAction\n [thyActionIcon]=\"option.icon\"\n [thyTooltip]=\"option.name\"\n [thyTooltipOffset]=\"13\"\n (click)=\"option.action(previewImage)\"\n ></a>\n <span class=\"mr-2\" *ngIf=\"option?.type === 'zoom-out'\"> {{ (zoom * 100).toFixed(0) + '%' }} </span>\n <thy-divider class=\"ml-2\" [thyVertical]=\"true\" *ngIf=\"option?.type === 'rotate-right'\"></thy-divider>\n <a\n *ngIf=\"option.type === 'copyLink'\"\n href=\"javascript:;\"\n thyAction\n [thyCopyTips]=\"option.name\"\n [thyActionIcon]=\"option.icon\"\n [thyCopyTipsOffset]=\"13\"\n (thyCopy)=\"copyLink($event)\"\n [thyCopyContent]=\"previewImageOriginSrc\"\n [thyShowNotify]=\"false\"\n ></a>\n </ng-container>\n <thy-divider [thyVertical]=\"true\"></thy-divider>\n <span class=\"thy-image-preview-operations-text\"> {{ previewIndex + 1 }} / {{ images.length }} </span>\n </thy-actions>\n</div>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: ThyTooltipDirective, selector: "[thyTooltip],[thy-tooltip]", inputs: ["thyTooltip", "thyTooltipPlacement", "thyTooltipClass", "thyTooltipShowDelay", "thyTooltipHideDelay", "thyTooltipTrigger", "thyTooltipDisabled", "thyTooltipTemplateContext", "thyTooltipOffset", "thyTooltipPin"], exportAs: ["thyTooltip"] }, { kind: "component", type: ThyAction, selector: "thy-action, [thyAction]", inputs: ["thyType", "thyIcon", "thyActionIcon", "thyActive", "thyActionActive", "thyTheme", "thyHoverIcon", "thyDisabled"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ThyLoading, selector: "thy-loading", inputs: ["thyDone", "thyTip", "thyIsMask"] }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "component", type: ThyActions, selector: "thy-actions", inputs: ["thySize"] }, { kind: "component", type: ThyDivider, selector: "thy-divider", inputs: ["thyVertical", "thyStyle", "thyColor", "thyText", "thyTextDirection", "thyDeeper"] }, { kind: "directive", type: ThyCopyDirective, selector: "[thyCopy]", inputs: ["thyCopySuccessText", "thyCopyTips", "thyCopyTipsOffset", "thyCopyContent", "thyShowNotify"], outputs: ["thyCopy"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
393
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.3", type: ThyImagePreview, isStandalone: true, selector: "thy-image-preview", outputs: { downloadClicked: "downloadClicked" }, host: { properties: { "class.thy-image-preview-moving": "isDragging" }, classAttribute: "thy-image-preview-wrap" }, viewQueries: [{ propertyName: "imageRef", first: true, predicate: ["imgRef"], descendants: true }, { propertyName: "imagePreviewWrapper", first: true, predicate: ["imagePreviewWrapper"], descendants: true, static: true }], exportAs: ["thyImagePreview"], ngImport: i0, template: "<div class=\"thy-image-preview\" [class.thy-image-preview-fullscreen]=\"isFullScreen\">\n <div class=\"thy-image-preview-header pl-10 pr-8\" *ngIf=\"!isFullScreen\">\n <div class=\"thy-image-preview-header-info\">\n <p class=\"thy-image-name text-truncate\" [thyTooltipDisabled]=\"previewImage?.name?.length < 32\" [thyTooltip]=\"previewImage?.name\">\n {{ previewImage?.name }}\n </p>\n <span class=\"thy-image-size\"> {{ previewImage?.size }}</span>\n </div>\n <a thyAction thyIcon=\"close\" thyTooltip=\"\u9000\u51FA\u9884\u89C8\" href=\"javascript:;\" (click)=\"thyDialog.close()\"></a>\n </div>\n <a\n class=\"thy-image-preview-exit-fullscreen\"\n *ngIf=\"isFullScreen\"\n thyAction\n thyIcon=\"close\"\n thyTooltip=\"\u9000\u51FA\u9884\u89C8\"\n href=\"javascript:;\"\n (click)=\"thyFullscreen.exit()\"\n thyTooltip=\"\u9000\u51FA\u5168\u5C4F\"\n ></a>\n <div\n class=\"thy-image-preview-img-wrapper\"\n #imagePreviewWrapper\n cdkDrag\n [class.thy-image-preview-inside]=\"isInsideScreen\"\n [style.transform]=\"previewImageWrapperTransform\"\n [cdkDragFreeDragPosition]=\"position\"\n (cdkDragReleased)=\"dragReleased()\"\n >\n <ng-container *ngFor=\"let image of images; index as imageIndex\">\n <img\n #imgRef\n *ngIf=\"previewIndex === imageIndex && isLoadingDone\"\n class=\"thy-image-preview-img\"\n [src]=\"image.objectURL || image.src\"\n [style.transform]=\"previewImageTransform\"\n />\n </ng-container>\n <thy-loading [thyDone]=\"isLoadingDone\"></thy-loading>\n </div>\n\n <ng-container *ngIf=\"images.length > 1 && !isFullScreen\">\n <div\n class=\"thy-image-preview-switch-left\"\n [thyTooltipDisabled]=\"previewIndex <= 0\"\n thyTooltip=\"\u4E0A\u4E00\u5F20\"\n [class.thy-image-preview-switch-left-disabled]=\"previewIndex <= 0\"\n (click)=\"prev()\"\n >\n <thy-icon thyIconName=\"angle-left-bold\"></thy-icon>\n </div>\n <div\n class=\"thy-image-preview-switch-right\"\n thyTooltip=\"\u4E0B\u4E00\u5F20\"\n [thyTooltipDisabled]=\"previewIndex >= images.length - 1\"\n [class.thy-image-preview-switch-right-disabled]=\"previewIndex >= images.length - 1\"\n (click)=\"next()\"\n >\n <thy-icon thyIconName=\"angle-right-bold\"> </thy-icon>\n </div>\n </ng-container>\n <thy-actions thySize=\"xs\" class=\"thy-image-preview-operations py-3 px-4\" *ngIf=\"!isFullScreen\">\n <ng-container *ngFor=\"let option of previewOperations; let i = index\">\n <a\n *ngIf=\"!['original-scale', 'fit-screen', 'copyLink'].includes(option.type) || currentImageMode === option.type\"\n href=\"javascript:;\"\n thyAction\n [thyActionIcon]=\"option.icon\"\n [thyTooltip]=\"option.name\"\n [thyTooltipOffset]=\"13\"\n (click)=\"option.action(previewImage)\"\n ></a>\n <span class=\"mr-2\" *ngIf=\"option?.type === 'zoom-out'\"> {{ (zoom * 100).toFixed(0) + '%' }} </span>\n <thy-divider class=\"ml-2\" [thyVertical]=\"true\" *ngIf=\"option?.type === 'rotate-right'\"></thy-divider>\n <a\n *ngIf=\"option.type === 'copyLink'\"\n href=\"javascript:;\"\n thyAction\n [thyCopyTips]=\"option.name\"\n [thyActionIcon]=\"option.icon\"\n [thyCopyTipsOffset]=\"13\"\n (thyCopy)=\"copyLink($event)\"\n [thyCopyContent]=\"previewImageOriginSrc\"\n [thyShowNotify]=\"false\"\n ></a>\n </ng-container>\n <thy-divider [thyVertical]=\"true\"></thy-divider>\n <span class=\"thy-image-preview-operations-text\"> {{ previewIndex + 1 }} / {{ images.length }} </span>\n </thy-actions>\n</div>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: ThyTooltipDirective, selector: "[thyTooltip],[thy-tooltip]", inputs: ["thyTooltip", "thyTooltipPlacement", "thyTooltipClass", "thyTooltipShowDelay", "thyTooltipHideDelay", "thyTooltipTrigger", "thyTooltipDisabled", "thyTooltipTemplateContext", "thyTooltipOffset", "thyTooltipPin"], exportAs: ["thyTooltip"] }, { kind: "component", type: ThyAction, selector: "thy-action, [thyAction]", inputs: ["thyType", "thyIcon", "thyActionIcon", "thyActive", "thyActionActive", "thyTheme", "thyHoverIcon", "thyDisabled"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ThyLoading, selector: "thy-loading", inputs: ["thyDone", "thyTip", "thyIsMask"] }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "component", type: ThyActions, selector: "thy-actions", inputs: ["thySize"] }, { kind: "component", type: ThyDivider, selector: "thy-divider", inputs: ["thyVertical", "thyStyle", "thyColor", "thyText", "thyTextDirection", "thyDeeper"] }, { kind: "directive", type: ThyCopyDirective, selector: "[thyCopy]", inputs: ["thyCopySuccessText", "thyCopyTips", "thyCopyTipsOffset", "thyCopyContent", "thyShowNotify"], outputs: ["thyCopy"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
398
394
  }
399
395
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: ThyImagePreview, decorators: [{
400
396
  type: Component,
@@ -411,4 +407,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
411
407
  type: ViewChild,
412
408
  args: ['imagePreviewWrapper', { static: true }]
413
409
  }] } });
414
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtcHJldmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvaW1hZ2UvcHJldmlldy9pbWFnZS1wcmV2aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9pbWFnZS9wcmV2aWV3L2ltYWdlLXByZXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBRVQsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixVQUFVLEVBQ1YsU0FBUyxFQUNULE1BQU0sRUFFTixNQUFNLEVBQ04sWUFBWSxFQUNmLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxhQUFhLEVBQUUscUJBQXFCLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5SCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFnQixnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0Is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RUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUNjLG1CQUFtQjtzQkFBdEUsU0FBUzt1QkFBQyxxQkFBcUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBPbkluaXQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgTmdab25lLFxuICAgIE9uRGVzdHJveSxcbiAgICBPdXRwdXQsXG4gICAgRXZlbnRFbWl0dGVyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSW50ZXJuYWxJbWFnZUluZm8sIFRoeUltYWdlSW5mbywgVGh5SW1hZ2VQcmV2aWV3TW9kZSwgVGh5SW1hZ2VQcmV2aWV3T3BlcmF0aW9uLCBUaHlJbWFnZVByZXZpZXdPcHRpb25zIH0gZnJvbSAnLi4vaW1hZ2UuY2xhc3MnO1xuaW1wb3J0IHsgTWl4aW5CYXNlLCBtaXhpblVuc3Vic2NyaWJlIH0gZnJvbSAnbmd4LXRldGh5cy9jb3JlJztcbmltcG9ydCB7IGZyb21FdmVudCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVGh5RGlhbG9nIH0gZnJvbSAnbmd4LXRldGh5cy9kaWFsb2cnO1xuaW1wb3J0IHsgZ2V0Q2xpZW50U2l6ZSwgZ2V0Rml0Q29udGVudFBvc2l0aW9uLCBnZXRPZmZzZXQsIGh1bWFuaXplQnl0ZXMsIGlzTnVtYmVyLCBpc1VuZGVmaW5lZE9yTnVsbCB9IGZyb20gJ25neC10ZXRoeXMvdXRpbCc7XG5pbXBvcnQgeyBUaHlGdWxsc2NyZWVuIH0gZnJvbSAnbmd4LXRldGh5cy9mdWxsc2NyZWVuJztcbmltcG9ydCB7IFRoeUNvcHlFdmVudCwgVGh5Q29weURpcmVjdGl2ZSB9IGZyb20gJ25neC10ZXRoeXMvY29weSc7XG5pbXBvcnQgeyBUaHlOb3RpZnlTZXJ2aWNlIH0gZnJvbSAnbmd4LXRldGh5cy9ub3RpZnknO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBmZXRjaEltYWdlQmxvYiB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IFRoeURpdmlkZXIgfSBmcm9tICduZ3gtdGV0aHlzL2RpdmlkZXInO1xuaW1wb3J0IHsgVGh5SWNvbiB9IGZyb20gJ25neC10ZXRoeXMvaWNvbic7XG5pbXBvcnQgeyBUaHlMb2FkaW5nIH0gZnJvbSAnbmd4LXRldGh5cy9sb2FkaW5nJztcbmltcG9ydCB7IENka0RyYWcgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IFRoeUFjdGlvbiwgVGh5QWN0aW9ucyB9IGZyb20gJ25neC10ZXRoeXMvYWN0aW9uJztcbmltcG9ydCB7IFRoeVRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICduZ3gtdGV0aHlzL3Rvb2x0aXAnO1xuaW1wb3J0IHsgTmdJZiwgTmdGb3IgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5jb25zdCBpbml0aWFsUG9zaXRpb24gPSB7XG4gICAgeDogMCxcbiAgICB5OiAwXG59O1xuY29uc3QgSU1BR0VfTUFYX1pPT00gPSAzO1xuY29uc3QgSU1BR0VfTUlOX1pPT00gPSAwLjE7XG5jb25zdCBIT1JJWk9OVEFMX1NQQUNFID0gMTAwICogMjsgLy8gbGVmdDogMTAwcHg7IHJpZ2h0OiAxMDBweFxuY29uc3QgVkVSVElDQUxfU1BBQ0UgPSA5NiArIDEwNjsgLy8gdG9wOiA5NnB4OyBib3R0b206IDEwNnB4XG5cbi8qKlxuICog5Zu+54mH6aKE6KeI57uE5Lu2XG4gKiBAbmFtZSB0aHktaW1hZ2UtcHJldmlld1xuICogQG9yZGVyIDIwXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndGh5LWltYWdlLXByZXZpZXcnLFxuICAgIGV4cG9ydEFzOiAndGh5SW1hZ2VQcmV2aWV3JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vaW1hZ2UtcHJldmlldy5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAndGh5LWltYWdlLXByZXZpZXctd3JhcCcsXG4gICAgICAgICdbY2xhc3MudGh5LWltYWdlLXByZXZpZXctbW92aW5nXSc6ICdpc0RyYWdnaW5nJ1xuICAgIH0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTmdJZiwgVGh5VG9vbHRpcERpcmVjdGl2ZSwgVGh5QWN0aW9uLCBDZGtEcmFnLCBOZ0ZvciwgVGh5TG9hZGluZywgVGh5SWNvbiwgVGh5QWN0aW9ucywgVGh5RGl2aWRlciwgVGh5Q29weURpcmVjdGl2ZV1cbn0pXG5leHBvcnQgY2xhc3MgVGh5SW1hZ2VQcmV2aWV3IGV4dGVuZHMgbWl4aW5VbnN1YnNjcmliZShNaXhpbkJhc2UpIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIEBPdXRwdXQoKSBkb3dubG9hZENsaWNrZWQ6IEV2ZW50RW1pdHRlcjxUaHlJbWFnZUluZm8+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIGltYWdlczogSW50ZXJuYWxJbWFnZUluZm9bXSA9IFtdO1xuICAgIHByZXZpZXdJbmRleDogbnVtYmVyID0gMDtcbiAgICBwcmV2aWV3Q29uZmlnOiBUaHlJbWFnZVByZXZpZXdPcHRpb25zO1xuICAgIHByZXZpZXdJbWFnZVRyYW5zZm9ybSA9ICcnO1xuICAgIHByZXZpZXdJbWFnZVdyYXBwZXJUcmFuc2Zvcm0gPSAnJztcbiAgICB6b29tRGlzYWJsZWQgPSBmYWxzZTtcbiAgICB6b29tOiBudW1iZXIgPSAxO1xuICAgIHBvc2l0aW9uID0geyAuLi5pbml0aWFsUG9zaXRpb24gfTtcbiAgICBpc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgaXNMb2FkaW5nRG9uZSA9IGZhbHNlO1xuICAgIGlzRnVsbFNjcmVlbiA9IGZhbHNlO1xuICAgIGlzSW5zaWRlU2NyZWVuID0gdHJ1ZTtcbiAgICBjdXJyZW50SW1hZ2VNb2RlOiBUaHlJbWFnZVByZXZpZXdNb2RlID0gJ29yaWdpbmFsLXNjYWxlJztcbiAgICBwcmV2aWV3T3BlcmF0aW9uczogVGh5SW1hZ2VQcmV2aWV3T3BlcmF0aW9uW107XG4gICAgZGVmYXVsdFByZXZpZXdPcGVyYXRpb25zOiBUaHlJbWFnZVByZXZpZXdPcGVyYXRpb25bXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgICAgaWNvbjogJ3pvb20tb3V0JyxcbiAgICAgICAgICAgIG5hbWU6ICfnvKnlsI8nLFxuICAgICAgICAgICAgYWN0aW9uOiAoaW1hZ2U6IFRoeUltYWdlSW5mbykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuem9vbU91dCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHR5cGU6ICd6b29tLW91dCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgaWNvbjogJ3pvb20taW4nLFxuICAgICAgICAgICAgbmFtZTogJ+aUvuWkpycsXG4gICAgICAgICAgICBhY3Rpb246IChpbWFnZTogVGh5SW1hZ2VJbmZvKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy56b29tSW4oKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eXBlOiAnem9vbS1pbidcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgaWNvbjogJ29uZS10by1vbmUnLFxuICAgICAgICAgICAgbmFtZTogJ+WOn+Wni+avlOS+iycsXG4gICAgICAgICAgICBhY3Rpb246IChpbWFnZTogVGh5SW1hZ2VJbmZvKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRPcmlnaW5hbFNpemUoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eXBlOiAnb3JpZ2luYWwtc2NhbGUnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGljb246ICdtYXgtdmlldycsXG4gICAgICAgICAgICBuYW1lOiAn6YCC5bqU5bGP5bmVJyxcbiAgICAgICAgICAgIGFjdGlvbjogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Rml0U2NyZWVuKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHlwZTogJ2ZpdC1zY3JlZW4nXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGljb246ICdleHBhbmQtYXJyb3dzJyxcbiAgICAgICAgICAgIG5hbWU6ICflhajlsY/mmL7npLonLFxuICAgICAgICAgICAgYWN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5mdWxsU2NyZWVuKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHlwZTogJ2Z1bGwtc2NyZWVuJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBpY29uOiAncm90YXRlLXJpZ2h0JyxcbiAgICAgICAgICAgIG5hbWU6ICfml4vovawnLFxuICAgICAgICAgICAgYWN0aW9uOiAoaW1hZ2U6IFRoeUltYWdlSW5mbykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucm90YXRlUmlnaHQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eXBlOiAncm90YXRlLXJpZ2h0J1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBpY29uOiAnZG93bmxvYWQnLFxuICAgICAgICAgICAgbmFtZTogJ+S4i+i9vScsXG4gICAgICAgICAgICBhY3Rpb246IChpbWFnZTogVGh5SW1hZ2VJbmZvKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kb3dubG9hZChpbWFnZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHlwZTogJ2Rvd25sb2FkJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBpY29uOiAncHJldmlldycsXG4gICAgICAgICAgICBuYW1lOiAn5p+l55yL5Y6f5Zu+JyxcbiAgICAgICAgICAgIGFjdGlvbjogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudmlld09yaWdpbmFsKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHlwZTogJ3ZpZXctb3JpZ2luYWwnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGljb246ICdsaW5rLWluc2VydCcsXG4gICAgICAgICAgICBuYW1lOiAn5aSN5Yi26ZO+5o6lJyxcbiAgICAgICAgICAgIHR5cGU6ICdjb3B5TGluaydcbiAgICAgICAgfVxuICAgIF07XG5cbiAgICBwcml2YXRlIHJvdGF0ZTogbnVtYmVyO1xuXG4gICAgZ2V0IHByZXZpZXdJbWFnZSgpOiBJbnRlcm5hbEltYWdlSW5mbyB7XG4gICAgICAgIGNvbnN0IGltYWdlID0gdGhpcy5pbWFnZXNbdGhpcy5wcmV2aWV3SW5kZXhdO1xuICAgICAgICBpZiAoaW1hZ2Uuc2l6ZSkge1xuICAgICAgICAgICAgaW1hZ2Uuc2l6ZSA9IGlzTnVtYmVyKGltYWdlLnNpemUpID8gaHVtYW5pemVCeXRlcyhpbWFnZS5zaXplKSA6IGltYWdlLnNpemU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGltYWdlO1xuICAgIH1cblxuICAgIGdldCBwcmV2aWV3SW1hZ2VPcmlnaW5TcmMoKSB7XG4gICAgICAgIGxldCBpbWFnZVNyYyA9IHRoaXMucHJldmlld0ltYWdlLm9yaWdpbj8uc3JjIHx8IHRoaXMucHJldmlld0ltYWdlLnNyYztcbiAgICAgICAgaWYgKGltYWdlU3JjLnN0YXJ0c1dpdGgoJy4vJykpIHtcbiAgICAgICAgICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24uaG9zdCArICcvJyArIGltYWdlU3JjLnNwbGl0KCcuLycpWzFdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbWFnZVNyYztcbiAgICB9XG5cbiAgICBnZXQgZGVmYXVsdFpvb20oKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMucHJldmlld0NvbmZpZz8uem9vbSAmJiB0aGlzLnByZXZpZXdDb25maWc/Lnpvb20gPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcmV2aWV3Q29uZmlnLnpvb20gPj0gSU1BR0VfTUFYX1pPT01cbiAgICAgICAgICAgICAgICA/IElNQUdFX01BWF9aT09NXG4gICAgICAgICAgICAgICAgOiB0aGlzLnByZXZpZXdDb25maWcuem9vbSA8PSBJTUFHRV9NSU5fWk9PTVxuICAgICAgICAgICAgICAgID8gSU1BR0VfTUlOX1pPT01cbiAgICAgICAgICAgICAgICA6IHRoaXMucHJldmlld0NvbmZpZy56b29tO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQFZpZXdDaGlsZCgnaW1nUmVmJywgeyBzdGF0aWM6IGZhbHNlIH0pIGltYWdlUmVmITogRWxlbWVudFJlZjxIVE1MSW1hZ2VFbGVtZW50PjtcbiAgICBAVmlld0NoaWxkKCdpbWFnZVByZXZpZXdXcmFwcGVyJywgeyBzdGF0aWM6IHRydWUgfSkgaW1hZ2VQcmV2aWV3V3JhcHBlciE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyB0aHlEaWFsb2c6IFRoeURpYWxvZyxcbiAgICAgICAgcHVibGljIHRoeUZ1bGxzY3JlZW46IFRoeUZ1bGxzY3JlZW4sXG4gICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgcHJpdmF0ZSBub3RpZnlTZXJ2aWNlOiBUaHlOb3RpZnlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGhvc3Q6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5pdFByZXZpZXcoKTtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgZnJvbUV2ZW50KHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LCAnY2xpY2snKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgKGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmlzSW5zaWRlU2NyZWVuICYmIHRoaXMuaW1hZ2VQcmV2aWV3V3JhcHBlci5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMucHJldmlld0NvbmZpZz8uZGlzYWJsZUNsb3NlXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+ICF0aGlzLmlzRnVsbFNjcmVlbiAmJiB0aGlzLnRoeURpYWxvZy5jbG9zZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBmcm9tRXZlbnQodGhpcy5pbWFnZVByZXZpZXdXcmFwcGVyLm5hdGl2ZUVsZW1lbnQsICdtb3VzZWRvd24nKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0RyYWdnaW5nID0gIXRoaXMuaXNJbnNpZGVTY3JlZW4gJiYgdHJ1ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2V0T3JpZ2luYWxTaXplKCkge1xuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgIHRoaXMuY3VycmVudEltYWdlTW9kZSA9ICdmaXQtc2NyZWVuJztcbiAgICAgICAgdGhpcy56b29tID0gMTtcbiAgICAgICAgdGhpcy51cGRhdGVQcmV2aWV3SW1hZ2VUcmFuc2Zvcm0oKTtcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVJbnNpZGVTY3JlZW4oKTtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmdEb25lID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHNldEZpdFNjcmVlbigpIHtcbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICB0aGlzLmlzSW5zaWRlU2NyZWVuID0gdHJ1ZTtcbiAgICAgICAgdGhpcy51cGRhdGVQcmV2aWV3SW1hZ2UoKTtcbiAgICB9XG5cbiAgICB1c2VEZWZhdWx0Wm9vbVVwZGF0ZShpc1VwZGF0ZUltYWdlV3JhcHBlcjogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnpvb20gPSB0aGlzLmRlZmF1bHRab29tO1xuICAgICAgICB0aGlzLmlzTG9hZGluZ0RvbmUgPSB0cnVlO1xuICAgICAgICB0aGlzLnVwZGF0ZVByZXZpZXdJbWFnZVRyYW5zZm9ybSgpO1xuICAgICAgICBpZiAoaXNVcGRhdGVJbWFnZVdyYXBwZXIpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUHJldmlld0ltYWdlV3JhcHBlclRyYW5zZm9ybSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICB1c2VDYWxjdWxhdGVab29tVXBkYXRlKGlzVXBkYXRlSW1hZ2VXcmFwcGVyPzogYm9vbGVhbikge1xuICAgICAgICBsZXQgaW1nID0gbmV3IEltYWdlKCk7XG4gICAgICAgIGltZy5zcmMgPSB0aGlzLnByZXZpZXdJbWFnZS5zcmM7XG4gICAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IHdpZHRoOiBvZmZzZXRXaWR0aCwgaGVpZ2h0OiBvZmZzZXRIZWlnaHQgfSA9IGdldENsaWVudFNpemUoKTtcbiAgICAgICAgICAgIGNvbnN0IGlubmVyV2lkdGggPSBvZmZzZXRXaWR0aCAtIEhPUklaT05UQUxfU1BBQ0U7XG4gICAgICAgICAgICBjb25zdCBpbm5lckhlaWdodCA9IG9mZnNldEhlaWdodCAtIFZFUlRJQ0FMX1NQQUNFO1xuICAgICAgICAgICAgY29uc3QgeyBuYXR1cmFsV2lkdGgsIG5hdHVyYWxIZWlnaHQgfSA9IGltZztcbiAgICAgICAgICAgIGNvbnN0IHhSYXRpbyA9IGlubmVyV2lkdGggLyBuYXR1cmFsV2lkdGg7XG4gICAgICAgICAgICBjb25zdCB5UmF0aW8gPSBpbm5lckhlaWdodCAvIG5hdHVyYWxIZWlnaHQ7XG4gICAgICAgICAgICBjb25zdCB6b29tID0gTWF0aC5taW4oeFJhdGlvLCB5UmF0aW8pO1xuICAgICAgICAgICAgaWYgKHpvb20gPiAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy56b29tID0gMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy56b29tID0gem9vbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nRG9uZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVByZXZpZXdJbWFnZVRyYW5zZm9ybSgpO1xuICAgICAgICAgICAgaWYgKGlzVXBkYXRlSW1hZ2VXcmFwcGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVQcmV2aWV3SW1hZ2VXcmFwcGVyVHJhbnNmb3JtKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdXBkYXRlUHJldmlld0ltYWdlKCkge1xuICAgICAgICB0aGlzLnJlc29sdmVQcmV2aWV3SW1hZ2UoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgLy8gZXJyb3JcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZ0RvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGltYWdlIHNpemVcbiAgICAgICAgICAgIGlmICghdGhpcy5wcmV2aWV3SW1hZ2Uuc2l6ZSAmJiB0aGlzLnByZXZpZXdJbWFnZS5ibG9iKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2aWV3SW1hZ2Uuc2l6ZSA9IGh1bWFuaXplQnl0ZXModGhpcy5wcmV2aWV3SW1hZ2UuYmxvYi5zaXplKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmRlZmF1bHRab29tKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51c2VEZWZhdWx0Wm9vbVVwZGF0ZSh0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy51c2VDYWxjdWxhdGVab29tVXBkYXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlc29sdmVQcmV2aWV3SW1hZ2UoKSB7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxCb29sZWFuPihzdWJzY3JpYmVyID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXZpZXdJbWFnZS5zcmMuc3RhcnRzV2l0aCgnYmxvYjonKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucHJldmlld0ltYWdlLm9iamVjdFVSTCA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwodGhpcy5wcmV2aWV3SW1hZ2Uuc3JjKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnByZXZpZXdJbWFnZS5vYmplY3RVUkwgfHwgIXRoaXMucHJldmlld0NvbmZpZy5yZXNvbHZlU2l6ZSkge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh0cnVlKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZldGNoSW1hZ2VCbG9iKHRoaXMucHJldmlld0ltYWdlLnNyYykuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICAgICBibG9iID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybENyZWF0b3IgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkw7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvYmplY3RVUkwgPSB1cmxDcmVhdG9yLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJldmlld0ltYWdlLm9iamVjdFVSTCA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwob2JqZWN0VVJMKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJldmlld0ltYWdlLmJsb2IgPSBibG9iO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaW5pdFByZXZpZXcoKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMucHJldmlld0NvbmZpZz8ub3BlcmF0aW9ucykgJiYgdGhpcy5wcmV2aWV3Q29uZmlnPy5vcGVyYXRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5wcmV2aWV3T3BlcmF0aW9ucyA9IHRoaXMuZGVmYXVsdFByZXZpZXdPcGVyYXRpb25zLmZpbHRlcihpdGVtID0+IHRoaXMucHJldmlld0NvbmZpZy5vcGVyYXRpb25zLmluY2x1ZGVzKGl0ZW0udHlwZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wcmV2aWV3T3BlcmF0aW9ucyA9IHRoaXMuZGVmYXVsdFByZXZpZXdPcGVyYXRpb25zO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucm90YXRlID0gdGhpcy5wcmV2aWV3Q29uZmlnPy5yb3RhdGUgPz8gMDtcbiAgICAgICAgdGhpcy51cGRhdGVQcmV2aWV3SW1hZ2UoKTtcbiAgICB9XG5cbiAgICBkb3dubG9hZChpbWFnZTogVGh5SW1hZ2VJbmZvKSB7XG4gICAgICAgIHRoaXMuZG93bmxvYWRDbGlja2VkLmVtaXQoaW1hZ2UpO1xuICAgICAgICBjb25zdCBzcmMgPSBpbWFnZS5vcmlnaW4/LnNyYyB8fCBpbWFnZS5zcmM7XG4gICAgICAgIGZldGNoSW1hZ2VCbG9iKHNyYylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoYmxvYiA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdXJsQ3JlYXRvciA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTDtcbiAgICAgICAgICAgICAgICBjb25zdCBvYmplY3RVUkwgPSB1cmxDcmVhdG9yLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgICAgICAgICBsZXQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgICAgICAgICAgICBhLmRvd25sb2FkID0gaW1hZ2UubmFtZSB8fCAnZGVmYXVsdC5wbmcnO1xuICAgICAgICAgICAgICAgIGEuaHJlZiA9IG9iamVjdFVSTDtcbiAgICAgICAgICAgICAgICBhLmNsaWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB6b29tSW4oKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnpvb20gPCBJTUFHRV9NQVhfWk9PTSkge1xuICAgICAgICAgICAgdGhpcy56b29tID0gTWF0aC5taW4odGhpcy56b29tICsgMC4xLCBJTUFHRV9NQVhfWk9PTSk7XG4gICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUluc2lkZVNjcmVlbigpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQcmV2aWV3SW1hZ2VUcmFuc2Zvcm0oKTtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24gPSB7IC4uLmluaXRpYWxQb3NpdGlvbiB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgem9vbU91dCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuem9vbSA+IElNQUdFX01JTl9aT09NKSB7XG4gICAgICAgICAgICB0aGlzLnpvb20gPSBNYXRoLm1heCh0aGlzLnpvb20gLSAwLjEsIElNQUdFX01JTl9aT09NKTtcbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlSW5zaWRlU2NyZWVuKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVByZXZpZXdJbWFnZVRyYW5zZm9ybSgpO1xuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHsgLi4uaW5pdGlhbFBvc2l0aW9uIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjYWxjdWxhdGVJbnNpZGVTY3JlZW4oKSB7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5pbWFnZVJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoICogdGhpcy56b29tO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmltYWdlUmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0ICogdGhpcy56b29tO1xuICAgICAgICBjb25zdCB7IHdpZHRoOiBjbGllbnRXaWR0aCwgaGVpZ2h0OiBjbGllbnRIZWlnaHQgfSA9IGdldENsaWVudFNpemUoKTtcbiAgICAgICAgaWYgKHdpZHRoID49IGNsaWVudFdpZHRoIHx8IGhlaWdodCA+PSBjbGllbnRIZWlnaHQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNJbnNpZGVTY3JlZW4gPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNJbnNpZGVTY3JlZW4gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmlld09yaWdpbmFsKCkge1xuICAgICAgICB3aW5kb3cub3Blbih0aGlzLnByZXZpZXdJbWFnZT8ub3JpZ2luPy5zcmMgfHwgdGhpcy5wcmV2aWV3SW1hZ2Uuc3JjLCAnX2JsYW5rJyk7XG4gICAgfVxuXG4gICAgcm90YXRlUmlnaHQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucm90YXRlICs9IDkwO1xuICAgICAgICB0aGlzLnVwZGF0ZVByZXZpZXdJbWFnZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIGZ1bGxTY3JlZW4oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSB0aGlzLmhvc3QubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcudGh5LWltYWdlLXByZXZpZXcnKTtcbiAgICAgICAgdGhpcy5pc0Z1bGxTY3JlZW4gPSB0cnVlO1xuICAgICAgICBjb25zdCBmdWxsc2NyZWVuUmVmID0gdGhpcy50aHlGdWxsc2NyZWVuLmxhdW5jaCh7XG4gICAgICAgICAgICB0YXJnZXQ6IHRhcmdldEVsZW1lbnRcbiAgICAgICAgfSk7XG4gICAgICAgIGZ1bGxzY3JlZW5SZWYuYWZ0ZXJFeGl0ZWQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc0Z1bGxTY3JlZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjb3B5TGluayhldmVudDogVGh5Q29weUV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5U2VydmljZS5zdWNjZXNzKCflpI3liLblm77niYflnLDlnYDmiJDlip8nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5U2VydmljZS5lcnJvcign5aSN5Yi25Zu+54mH5Zyw5Z2A5aSx6LSlJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcmV2KCkge1xuICAgICAgICBpZiAodGhpcy5wcmV2aWV3SW5kZXggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnByZXZpZXdJbmRleC0tO1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmdEb25lID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVByZXZpZXdJbWFnZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmV4dCgpIHtcbiAgICAgICAgaWYgKHRoaXMucHJldmlld0luZGV4IDwgdGhpcy5pbWFnZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgdGhpcy5wcmV2aWV3SW5kZXgrKztcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nRG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQcmV2aWV3SW1hZ2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRyYWdSZWxlYXNlZCgpIHtcbiAgICAgICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5pbWFnZVJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoICogdGhpcy56b29tO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmltYWdlUmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0ICogdGhpcy56b29tO1xuICAgICAgICBjb25zdCB7IGxlZnQsIHRvcCB9ID0gZ2V0T2Zmc2V0KHRoaXMuaW1hZ2VSZWYubmF0aXZlRWxlbWVudCwgd2luZG93KTtcbiAgICAgICAgY29uc3QgeyB3aWR0aDogY2xpZW50V2lkdGgsIGhlaWdodDogY2xpZW50SGVpZ2h0IH0gPSBnZXRDbGllbnRTaXplKCk7XG4gICAgICAgIGNvbnN0IGlzUm90YXRlID0gdGhpcy5yb3RhdGUgJSAxODAgIT09IDA7XG4gICAgICAgIGNvbnN0IGZpdENvbnRlbnRQYXJhbXMgPSB7XG4gICAgICAgICAgICB3aWR0aDogaXNSb3RhdGUgPyBoZWlnaHQgOiB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogaXNSb3RhdGUgPyB3aWR0aCA6IGhlaWdodCxcbiAgICAgICAgICAgIGxlZnQsXG4gICAgICAgICAgICB0b3AsXG4gICAgICAgICAgICBjbGllbnRXaWR0aCxcbiAgICAgICAgICAgIGNsaWVudEhlaWdodFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBmaXRDb250ZW50UG9zID0gZ2V0Rml0Q29udGVudFBvc2l0aW9uKGZpdENvbnRlbnRQYXJhbXMpO1xuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkT3JOdWxsKGZpdENvbnRlbnRQb3MueCkgfHwgIWlzVW5kZWZpbmVkT3JOdWxsKGZpdENvbnRlbnRQb3MueSkpIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24gPSB7IC4uLnRoaXMucG9zaXRpb24sIC4uLmZpdENvbnRlbnRQb3MgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3VycmVudEltYWdlTW9kZSA9ICdvcmlnaW5hbC1zY2FsZSc7XG4gICAgICAgIHRoaXMucm90YXRlID0gdGhpcy5wcmV2aWV3Q29uZmlnPy5yb3RhdGUgPz8gMDtcbiAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHsgLi4uaW5pdGlhbFBvc2l0aW9uIH07XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVByZXZpZXdJbWFnZVRyYW5zZm9ybSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcmV2aWV3SW1hZ2VUcmFuc2Zvcm0gPSBgc2NhbGUzZCgke3RoaXMuem9vbX0sICR7dGhpcy56b29tfSwgMSkgcm90YXRlKCR7dGhpcy5yb3RhdGV9ZGVnKWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVQcmV2aWV3SW1hZ2VXcmFwcGVyVHJhbnNmb3JtKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByZXZpZXdJbWFnZVdyYXBwZXJUcmFuc2Zvcm0gPSBgdHJhbnNsYXRlM2QoJHt0aGlzLnBvc2l0aW9uLnh9cHgsICR7dGhpcy5wb3NpdGlvbi55fXB4LCAwKWA7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInRoeS1pbWFnZS1wcmV2aWV3XCIgW2NsYXNzLnRoeS1pbWFnZS1wcmV2aWV3LWZ1bGxzY3JlZW5dPVwiaXNGdWxsU2NyZWVuXCI+XG4gIDxkaXYgY2xhc3M9XCJ0aHktaW1hZ2UtcHJldmlldy1oZWFkZXIgcGwtMTAgcHItOFwiICpuZ0lmPVwiIWlzRnVsbFNjcmVlblwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0aHktaW1hZ2UtcHJldmlldy1oZWFkZXItaW5mb1wiPlxuICAgICAgPHAgY2xhc3M9XCJ0aHktaW1hZ2UtbmFtZSB0ZXh0LXRydW5jYXRlXCIgW3RoeVRvb2x0aXBEaXNhYmxlZF09XCJwcmV2aWV3SW1hZ2U/Lm5hbWU/Lmxlbmd0aCA8IDMyXCIgW3RoeVRvb2x0aXBdPVwicHJldmlld0ltYWdlPy5uYW1lXCI+XG4gICAgICAgIHt7IHByZXZpZXdJbWFnZT8ubmFtZSB9fVxuICAgICAgPC9wPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ0aHktaW1hZ2Utc2l6ZVwiPiB7eyBwcmV2aWV3SW1hZ2U/LnNpemUgfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGEgdGh5QWN0aW9uIHRoeUljb249XCJjbG9zZVwiIHRoeVRvb2x0aXA9XCLpgIDlh7rpooTop4hcIiBocmVmPVwiamF2YXNjcmlwdDo7XCIgKGNsaWNrKT1cInRoeURpYWxvZy5jbG9zZSgpXCI+PC9hPlxuICA8L2Rpdj5cbiAgPGFcbiAgICBjbGFzcz1cInRoeS1pbWFnZS1wcmV2aWV3LWV4aXQtZnVsbHNjcmVlblwiXG4gICAgKm5nSWY9XCJpc0Z1bGxTY3JlZW5cIlxuICAgIHRoeUFjdGlvblxuICAgIHRoeUljb249XCJjbG9zZVwiXG4gICAgdGh5VG9vbHRpcD1cIumAgOWHuumihOiniFwiXG4gICAgaHJlZj1cImphdmFzY3JpcHQ6O1wiXG4gICAgKGNsaWNrKT1cInRoeUZ1bGxzY3JlZW4uZXhpdCgpXCJcbiAgICB0aHlUb29sdGlwPVwi6YCA5Ye65YWo5bGPXCJcbiAgPjwvYT5cbiAgPGRpdlxuICAgIGNsYXNzPVwidGh5LWltYWdlLXByZXZpZXctaW1nLXdyYXBwZXJcIlxuICAgICNpbWFnZVByZXZpZXdXcmFwcGVyXG4gICAgY2RrRHJhZ1xuICAgIFtjbGFzcy50aHktaW1hZ2UtcHJldmlldy1pbnNpZGVdPVwiaXNJbnNpZGVTY3JlZW5cIlxuICAgIFtzdHlsZS50cmFuc2Zvcm1dPVwicHJldmlld0ltYWdlV3JhcHBlclRyYW5zZm9ybVwiXG4gICAgW2Nka0RyYWdGcmVlRHJhZ1Bvc2l0aW9uXT1cInBvc2l0aW9uXCJcbiAgICAoY2RrRHJhZ1JlbGVhc2VkKT1cImRyYWdSZWxlYXNlZCgpXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGltYWdlIG9mIGltYWdlczsgaW5kZXggYXMgaW1hZ2VJbmRleFwiPlxuICAgICAgPGltZ1xuICAgICAgICAjaW1nUmVmXG4gICAgICAgICpuZ0lmPVwicHJldmlld0luZGV4ID09PSBpbWFnZUluZGV4ICYmIGlzTG9hZGluZ0RvbmVcIlxuICAgICAgICBjbGFzcz1cInRoeS1pbWFnZS1wcmV2aWV3LWltZ1wiXG4gICAgICAgIFtzcmNdPVwiaW1hZ2Uub2JqZWN0VVJMIHx8IGltYWdlLnNyY1wiXG4gICAgICAgIFtzdHlsZS50cmFuc2Zvcm1dPVwicHJldmlld0ltYWdlVHJhbnNmb3JtXCJcbiAgICAgIC8+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPHRoeS1sb2FkaW5nIFt0aHlEb25lXT1cImlzTG9hZGluZ0RvbmVcIj48L3RoeS1sb2FkaW5nPlxuICA8L2Rpdj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaW1hZ2VzLmxlbmd0aCA+IDEgJiYgIWlzRnVsbFNjcmVlblwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwidGh5LWltYWdlLXByZXZpZXctc3dpdGNoLWxlZnRcIlxuICAgICAgW3RoeVRvb2x0aXBEaXNhYmxlZF09XCJwcmV2aWV3SW5kZXggPD0gMFwiXG4gICAgICB0aHlUb29sdGlwPVwi5LiK5LiA5bygXCJcbiAgICAgIFtjbGFzcy50aHktaW1hZ2UtcHJldmlldy1zd2l0Y2gtbGVmdC1kaXNhYmxlZF09XCJwcmV2aWV3SW5kZXggPD0gMFwiXG4gICAgICAoY2xpY2spPVwicHJldigpXCJcbiAgICA+XG4gICAgICA8dGh5LWljb24gdGh5SWNvbk5hbWU9XCJhbmdsZS1sZWZ0LWJvbGRcIj48L3RoeS1pY29uPlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwidGh5LWltYWdlLXByZXZpZXctc3dpdGNoLXJpZ2h0XCJcbiAgICAgIHRoeVRvb2x0aXA9XCLkuIvkuIDlvKBcIlxuICAgICAgW3RoeVRvb2x0aXBEaXNhYmxlZF09XCJwcmV2aWV3SW5kZXggPj0gaW1hZ2VzLmxlbmd0aCAtIDFcIlxuICAgICAgW2NsYXNzLnRoeS1pbWFnZS1wcmV2aWV3LXN3aXRjaC1yaWdodC1kaXNhYmxlZF09XCJwcmV2aWV3SW5kZXggPj0gaW1hZ2VzLmxlbmd0aCAtIDFcIlxuICAgICAgKGNsaWNrKT1cIm5leHQoKVwiXG4gICAgPlxuICAgICAgPHRoeS1pY29uIHRoeUljb25OYW1lPVwiYW5nbGUtcmlnaHQtYm9sZFwiPiA8L3RoeS1pY29uPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPHRoeS1hY3Rpb25zIHRoeVNpemU9XCJ4c1wiIGNsYXNzPVwidGh5LWltYWdlLXByZXZpZXctb3BlcmF0aW9ucyBweS0zIHB4LTRcIiAqbmdJZj1cIiFpc0Z1bGxTY3JlZW5cIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgcHJldmlld09wZXJhdGlvbnM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgIDxhXG4gICAgICAgICpuZ0lmPVwiIVsnb3JpZ2luYWwtc2NhbGUnLCAnZml0LXNjcmVlbicsICdjb3B5TGluayddLmluY2x1ZGVzKG9wdGlvbi50eXBlKSB8fCBjdXJyZW50SW1hZ2VNb2RlID09PSBvcHRpb24udHlwZVwiXG4gICAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OjtcIlxuICAgICAgICB0aHlBY3Rpb25cbiAgICAgICAgW3RoeUFjdGlvbkljb25dPVwib3B0aW9uLmljb25cIlxuICAgICAgICBbdGh5VG9vbHRpcF09XCJvcHRpb24ubmFtZVwiXG4gICAgICAgIFt0aHlUb29sdGlwT2Zmc2V0XT1cIjEzXCJcbiAgICAgICAgKGNsaWNrKT1cIm9wdGlvbi5hY3Rpb24ocHJldmlld0ltYWdlKVwiXG4gICAgICA+PC9hPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtci0yXCIgKm5nSWY9XCJvcHRpb24/LnR5cGUgPT09ICd6b29tLW91dCdcIj4ge3sgKHpvb20gKiAxMDApLnRvRml4ZWQoMCkgKyAnJScgfX0gPC9zcGFuPlxuICAgICAgPHRoeS1kaXZpZGVyIGNsYXNzPVwibWwtMlwiIFt0aHlWZXJ0aWNhbF09XCJ0cnVlXCIgKm5nSWY9XCJvcHRpb24/LnR5cGUgPT09ICdyb3RhdGUtcmlnaHQnXCI+PC90aHktZGl2aWRlcj5cbiAgICAgIDxhXG4gICAgICAgICpuZ0lmPVwib3B0aW9uLnR5cGUgPT09ICdjb3B5TGluaydcIlxuICAgICAgICBocmVmPVwiamF2YXNjcmlwdDo7XCJcbiAgICAgICAgdGh5QWN0aW9uXG4gICAgICAgIFt0aHlDb3B5VGlwc109XCJvcHRpb24ubmFtZVwiXG4gICAgICAgIFt0aHlBY3Rpb25JY29uXT1cIm9wdGlvbi5pY29uXCJcbiAgICAgICAgW3RoeUNvcHlUaXBzT2Zmc2V0XT1cIjEzXCJcbiAgICAgICAgKHRoeUNvcHkpPVwiY29weUxpbmsoJGV2ZW50KVwiXG4gICAgICAgIFt0aHlDb3B5Q29udGVudF09XCJwcmV2aWV3SW1hZ2VPcmlnaW5TcmNcIlxuICAgICAgICBbdGh5U2hvd05vdGlmeV09XCJmYWxzZVwiXG4gICAgICA+PC9hPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDx0aHktZGl2aWRlciBbdGh5VmVydGljYWxdPVwidHJ1ZVwiPjwvdGh5LWRpdmlkZXI+XG4gICAgPHNwYW4gY2xhc3M9XCJ0aHktaW1hZ2UtcHJldmlldy1vcGVyYXRpb25zLXRleHRcIj4ge3sgcHJldmlld0luZGV4ICsgMSB9fSAvIHt7IGltYWdlcy5sZW5ndGggfX0gPC9zcGFuPlxuICA8L3RoeS1hY3Rpb25zPlxuPC9kaXY+XG4iXX0=
410
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtcHJldmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvaW1hZ2UvcHJldmlldy9pbWFnZS1wcmV2aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9pbWFnZS9wcmV2aWV3L2ltYWdlLXByZXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBRVQsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixVQUFVLEVBQ1YsU0FBUyxFQUNULE1BQU0sRUFDTixNQUFNLEVBQ04sWUFBWSxFQUNaLE1BQU0sRUFDTixVQUFVLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxhQUFhLEVBQUUscUJBQXFCLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5SCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFnQixnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1B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SSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgT25Jbml0LFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIE5nWm9uZSxcbiAgICBPdXRwdXQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGluamVjdCxcbiAgICBEZXN0cm95UmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSW50ZXJuYWxJbWFnZUluZm8sIFRoeUltYWdlSW5mbywgVGh5SW1hZ2VQcmV2aWV3TW9kZSwgVGh5SW1hZ2VQcmV2aWV3T3BlcmF0aW9uLCBUaHlJbWFnZVByZXZpZXdPcHRpb25zIH0gZnJvbSAnLi4vaW1hZ2UuY2xhc3MnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBUaHlEaWFsb2cgfSBmcm9tICduZ3gtdGV0aHlzL2RpYWxvZyc7XG5pbXBvcnQgeyBnZXRDbGllbnRTaXplLCBnZXRGaXRDb250ZW50UG9zaXRpb24sIGdldE9mZnNldCwgaHVtYW5pemVCeXRlcywgaXNOdW1iZXIsIGlzVW5kZWZpbmVkT3JOdWxsIH0gZnJvbSAnbmd4LXRldGh5cy91dGlsJztcbmltcG9ydCB7IFRoeUZ1bGxzY3JlZW4gfSBmcm9tICduZ3gtdGV0aHlzL2Z1bGxzY3JlZW4nO1xuaW1wb3J0IHsgVGh5Q29weUV2ZW50LCBUaHlDb3B5RGlyZWN0aXZlIH0gZnJvbSAnbmd4LXRldGh5cy9jb3B5JztcbmltcG9ydCB7IFRoeU5vdGlmeVNlcnZpY2UgfSBmcm9tICduZ3gtdGV0aHlzL25vdGlmeSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IGZldGNoSW1hZ2VCbG9iIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgVGh5RGl2aWRlciB9IGZyb20gJ25neC10ZXRoeXMvZGl2aWRlcic7XG5pbXBvcnQgeyBUaHlJY29uIH0gZnJvbSAnbmd4LXRldGh5cy9pY29uJztcbmltcG9ydCB7IFRoeUxvYWRpbmcgfSBmcm9tICduZ3gtdGV0aHlzL2xvYWRpbmcnO1xuaW1wb3J0IHsgQ2RrRHJhZyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgVGh5QWN0aW9uLCBUaHlBY3Rpb25zIH0gZnJvbSAnbmd4LXRldGh5cy9hY3Rpb24nO1xuaW1wb3J0IHsgVGh5VG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJ25neC10ZXRoeXMvdG9vbHRpcCc7XG5pbXBvcnQgeyBOZ0lmLCBOZ0ZvciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmNvbnN0IGluaXRpYWxQb3NpdGlvbiA9IHtcbiAgICB4OiAwLFxuICAgIHk6IDBcbn07XG5jb25zdCBJTUFHRV9NQVhfWk9PTSA9IDM7XG5jb25zdCBJTUFHRV9NSU5fWk9PTSA9IDAuMTtcbmNvbnN0IEhPUklaT05UQUxfU1BBQ0UgPSAxMDAgKiAyOyAvLyBsZWZ0OiAxMDBweDsgcmlnaHQ6IDEwMHB4XG5jb25zdCBWRVJUSUNBTF9TUEFDRSA9IDk2ICsgMTA2OyAvLyB0b3A6IDk2cHg7IGJvdHRvbTogMTA2cHhcblxuLyoqXG4gKiDlm77niYfpooTop4jnu4Tku7ZcbiAqIEBuYW1lIHRoeS1pbWFnZS1wcmV2aWV3XG4gKiBAb3JkZXIgMjBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0aHktaW1hZ2UtcHJldmlldycsXG4gICAgZXhwb3J0QXM6ICd0aHlJbWFnZVByZXZpZXcnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9pbWFnZS1wcmV2aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICd0aHktaW1hZ2UtcHJldmlldy13cmFwJyxcbiAgICAgICAgJ1tjbGFzcy50aHktaW1hZ2UtcHJldmlldy1tb3ZpbmddJzogJ2lzRHJhZ2dpbmcnXG4gICAgfSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtOZ0lmLCBUaHlUb29sdGlwRGlyZWN0aXZlLCBUaHlBY3Rpb24sIENka0RyYWcsIE5nRm9yLCBUaHlMb2FkaW5nLCBUaHlJY29uLCBUaHlBY3Rpb25zLCBUaHlEaXZpZGVyLCBUaHlDb3B5RGlyZWN0aXZlXVxufSlcbmV4cG9ydCBjbGFzcyBUaHlJbWFnZVByZXZpZXcgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBPdXRwdXQoKSBkb3dubG9hZENsaWNrZWQ6IEV2ZW50RW1pdHRlcjxUaHlJbWFnZUluZm8+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgaW1hZ2VzOiBJbnRlcm5hbEltYWdlSW5mb1tdID0gW107XG4gICAgcHJldmlld0luZGV4OiBudW1iZXIgPSAwO1xuICAgIHByZXZpZXdDb25maWc6IFRoeUltYWdlUHJldmlld09wdGlvbnM7XG4gICAgcHJldmlld0ltYWdlVHJhbnNmb3JtID0gJyc7XG4gICAgcHJldmlld0ltYWdlV3JhcHBlclRyYW5zZm9ybSA9ICcnO1xuICAgIHpvb21EaXNhYmxlZCA9IGZhbHNlO1xuICAgIHpvb206IG51bWJlciA9IDE7XG4gICAgcG9zaXRpb24gPSB7IC4uLmluaXRpYWxQb3NpdGlvbiB9O1xuICAgIGlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICBpc0xvYWRpbmdEb25lID0gZmFsc2U7XG4gICAgaXNGdWxsU2NyZWVuID0gZmFsc2U7XG4gICAgaXNJbnNpZGVTY3JlZW4gPSB0cnVlO1xuICAgIGN1cnJlbnRJbWFnZU1vZGU6IFRoeUltYWdlUHJldmlld01vZGUgPSAnb3JpZ2luYWwtc2NhbGUnO1xuICAgIHByZXZpZXdPcGVyYXRpb25zOiBUaHlJbWFnZVByZXZpZXdPcGVyYXRpb25bXTtcbiAgICBkZWZhdWx0UHJldmlld09wZXJhdGlvbnM6IFRoeUltYWdlUHJldmlld09wZXJhdGlvbltdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgICBpY29uOiAnem9vbS1vdXQnLFxuICAgICAgICAgICAgbmFtZTogJ+e8qeWwjycsXG4gICAgICAgICAgICBhY3Rpb246IChpbWFnZTogVGh5SW1hZ2VJbmZvKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy56b29tT3V0KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHlwZTogJ3pvb20tb3V0J1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBpY29uOiAnem9vbS1pbicsXG4gICAgICAgICAgICBuYW1lOiAn5pS+5aSnJyxcbiAgICAgICAgICAgIGFjdGlvbjogKGltYWdlOiBUaHlJbWFnZUluZm8pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnpvb21JbigpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHR5cGU6ICd6b29tLWluJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBpY29uOiAnb25lLXRvLW9uZScsXG4gICAgICAgICAgICBuYW1lOiAn5Y6f5aeL5q+U5L6LJyxcbiAgICAgICAgICAgIGFjdGlvbjogKGltYWdlOiBUaHlJbWFnZUluZm8pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE9yaWdpbmFsU2l6ZSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHR5cGU6ICdvcmlnaW5hbC1zY2FsZSdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgaWNvbjogJ21heC12aWV3JyxcbiAgICAgICAgICAgIG5hbWU6ICfpgILlupTlsY/luZUnLFxuICAgICAgICAgICAgYWN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRGaXRTY3JlZW4oKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eXBlOiAnZml0LXNjcmVlbidcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgaWNvbjogJ2V4cGFuZC1hcnJvd3MnLFxuICAgICAgICAgICAgbmFtZTogJ+WFqOWxj+aYvuekuicsXG4gICAgICAgICAgICBhY3Rpb246ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZ1bGxTY3JlZW4oKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eXBlOiAnZnVsbC1zY3JlZW4nXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGljb246ICdyb3RhdGUtcmlnaHQnLFxuICAgICAgICAgICAgbmFtZTogJ+aXi+i9rCcsXG4gICAgICAgICAgICBhY3Rpb246IChpbWFnZTogVGh5SW1hZ2VJbmZvKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3RhdGVSaWdodCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHR5cGU6ICdyb3RhdGUtcmlnaHQnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGljb246ICdkb3dubG9hZCcsXG4gICAgICAgICAgICBuYW1lOiAn5LiL6L29JyxcbiAgICAgICAgICAgIGFjdGlvbjogKGltYWdlOiBUaHlJbWFnZUluZm8pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRvd25sb2FkKGltYWdlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eXBlOiAnZG93bmxvYWQnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGljb246ICdwcmV2aWV3JyxcbiAgICAgICAgICAgIG5hbWU6ICfmn6XnnIvljp/lm74nLFxuICAgICAgICAgICAgYWN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3T3JpZ2luYWwoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eXBlOiAndmlldy1vcmlnaW5hbCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgaWNvbjogJ2xpbmstaW5zZXJ0JyxcbiAgICAgICAgICAgIG5hbWU6ICflpI3liLbpk77mjqUnLFxuICAgICAgICAgICAgdHlwZTogJ2NvcHlMaW5rJ1xuICAgICAgICB9XG4gICAgXTtcblxuICAgIHByaXZhdGUgcm90YXRlOiBudW1iZXI7XG5cbiAgICBnZXQgcHJldmlld0ltYWdlKCk6IEludGVybmFsSW1hZ2VJbmZvIHtcbiAgICAgICAgY29uc3QgaW1hZ2UgPSB0aGlzLmltYWdlc1t0aGlzLnByZXZpZXdJbmRleF07XG4gICAgICAgIGlmIChpbWFnZS5zaXplKSB7XG4gICAgICAgICAgICBpbWFnZS5zaXplID0gaXNOdW1iZXIoaW1hZ2Uuc2l6ZSkgPyBodW1hbml6ZUJ5dGVzKGltYWdlLnNpemUpIDogaW1hZ2Uuc2l6ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW1hZ2U7XG4gICAgfVxuXG4gICAgZ2V0IHByZXZpZXdJbWFnZU9yaWdpblNyYygpIHtcbiAgICAgICAgbGV0IGltYWdlU3JjID0gdGhpcy5wcmV2aWV3SW1hZ2Uub3JpZ2luPy5zcmMgfHwgdGhpcy5wcmV2aWV3SW1hZ2Uuc3JjO1xuICAgICAgICBpZiAoaW1hZ2VTcmMuc3RhcnRzV2l0aCgnLi8nKSkge1xuICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgJy8nICsgaW1hZ2VTcmMuc3BsaXQoJy4vJylbMV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGltYWdlU3JjO1xuICAgIH1cblxuICAgIGdldCBkZWZhdWx0Wm9vbSgpOiBudW1iZXIge1xuICAgICAgICBpZiAodGhpcy5wcmV2aWV3Q29uZmlnPy56b29tICYmIHRoaXMucHJldmlld0NvbmZpZz8uem9vbSA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByZXZpZXdDb25maWcuem9vbSA+PSBJTUFHRV9NQVhfWk9PTVxuICAgICAgICAgICAgICAgID8gSU1BR0VfTUFYX1pPT01cbiAgICAgICAgICAgICAgICA6IHRoaXMucHJldmlld0NvbmZpZy56b29tIDw9IElNQUdFX01JTl9aT09NXG4gICAgICAgICAgICAgICAgPyBJTUFHRV9NSU5fWk9PTVxuICAgICAgICAgICAgICAgIDogdGhpcy5wcmV2aWV3Q29uZmlnLnpvb207XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBAVmlld0NoaWxkKCdpbWdSZWYnLCB7IHN0YXRpYzogZmFsc2UgfSkgaW1hZ2VSZWYhOiBFbGVtZW50UmVmPEhUTUxJbWFnZUVsZW1lbnQ+O1xuICAgIEBWaWV3Q2hpbGQoJ2ltYWdlUHJldmlld1dyYXBwZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBpbWFnZVByZXZpZXdXcmFwcGVyITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHRoeURpYWxvZzogVGh5RGlhbG9nLFxuICAgICAgICBwdWJsaWMgdGh5RnVsbHNjcmVlbjogVGh5RnVsbHNjcmVlbixcbiAgICAgICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgICAgICBwcml2YXRlIG5vdGlmeVNlcnZpY2U6IFRoeU5vdGlmeVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgaG9zdDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXJcbiAgICApIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbml0UHJldmlldygpO1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICBmcm9tRXZlbnQodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsICdjbGljaycpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIChldmVudC50YXJnZXQgPT09IGV2ZW50LmN1cnJlbnRUYXJnZXQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5pc0luc2lkZVNjcmVlbiAmJiB0aGlzLmltYWdlUHJldmlld1dyYXBwZXIubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLnByZXZpZXdDb25maWc/LmRpc2FibGVDbG9zZVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiAhdGhpcy5pc0Z1bGxTY3JlZW4gJiYgdGhpcy50aHlEaWFsb2cuY2xvc2UoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZnJvbUV2ZW50KHRoaXMuaW1hZ2VQcmV2aWV3V3JhcHBlci5uYXRpdmVFbGVtZW50LCAnbW91c2Vkb3duJylcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0RyYWdnaW5nID0gIXRoaXMuaXNJbnNpZGVTY3JlZW4gJiYgdHJ1ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2V0T3JpZ2luYWxTaXplKCkge1xuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgIHRoaXMuY3VycmVudEltYWdlTW9kZSA9ICdmaXQtc2NyZWVuJztcbiAgICAgICAgdGhpcy56b29tID0gMTtcbiAgICAgICAgdGhpcy51cGRhdGVQcmV2aWV3SW1hZ2VUcmFuc2Zvcm0oKTtcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVJbnNpZGVTY3JlZW4oKTtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmdEb25lID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHNldEZpdFNjcmVlbigpIHtcbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICB0aGlzLmlzSW5zaWRlU2NyZWVuID0gdHJ1ZTtcbiAgICAgICAgdGhpcy51cGRhdGVQcmV2aWV3SW1hZ2UoKTtcbiAgICB9XG5cbiAgICB1c2VEZWZhdWx0Wm9vbVVwZGF0ZShpc1VwZGF0ZUltYWdlV3JhcHBlcjogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnpvb20gPSB0aGlzLmRlZmF1bHRab29tO1xuICAgICAgICB0aGlzLmlzTG9hZGluZ0RvbmUgPSB0cnVlO1xuICAgICAgICB0aGlzLnVwZGF0ZVByZXZpZXdJbWFnZVRyYW5zZm9ybSgpO1xuICAgICAgICBpZiAoaXNVcGRhdGVJbWFnZVdyYXBwZXIpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUHJldmlld0ltYWdlV3JhcHBlclRyYW5zZm9ybSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICB1c2VDYWxjdWxhdGVab29tVXBkYXRlKGlzVXBkYXRlSW1hZ2VXcmFwcGVyPzogYm9vbGVhbikge1xuICAgICAgICBsZXQgaW1nID0gbmV3IEltYWdlKCk7XG4gICAgICAgIGltZy5zcmMgPSB0aGlzLnByZXZpZXdJbWFnZS5zcmM7XG4gICAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IHdpZHRoOiBvZmZzZXRXaWR0aCwgaGVpZ2h0OiBvZmZzZXRIZWlnaHQgfSA9IGdldENsaWVudFNpemUoKTtcbiAgICAgICAgICAgIGNvbnN0IGlubmVyV2lkdGggPSBvZmZzZXRXaWR0aCAtIEhPUklaT05UQUxfU1BBQ0U7XG4gICAgICAgICAgICBjb25zdCBpbm5lckhlaWdodCA9IG9mZnNldEhlaWdodCAtIFZFUlRJQ0FMX1NQQUNFO1xuICAgICAgICAgICAgY29uc3QgeyBuYXR1cmFsV2lkdGgsIG5hdHVyYWxIZWlnaHQgfSA9IGltZztcbiAgICAgICAgICAgIGNvbnN0IHhSYXRpbyA9IGlubmVyV2lkdGggLyBuYXR1cmFsV2lkdGg7XG4gICAgICAgICAgICBjb25zdCB5UmF0aW8gPSBpbm5lckhlaWdodCAvIG5hdHVyYWxIZWlnaHQ7XG4gICAgICAgICAgICBjb25zdCB6b29tID0gTWF0aC5taW4oeFJhdGlvLCB5UmF0aW8pO1xuICAgICAgICAgICAgaWYgKHpvb20gPiAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy56b29tID0gMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy56b29tID0gem9vbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nRG9uZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVByZXZpZXdJbWFnZVRyYW5zZm9ybSgpO1xuICAgICAgICAgICAgaWYgKGlzVXBkYXRlSW1hZ2VXcmFwcGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVQcmV2aWV3SW1hZ2VXcmFwcGVyVHJhbnNmb3JtKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdXBkYXRlUHJldmlld0ltYWdlKCkge1xuICAgICAgICB0aGlzLnJlc29sdmVQcmV2aWV3SW1hZ2UoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgLy8gZXJyb3JcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZ0RvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGltYWdlIHNpemVcbiAgICAgICAgICAgIGlmICghdGhpcy5wcmV2aWV3SW1hZ2Uuc2l6ZSAmJiB0aGlzLnByZXZpZXdJbWFnZS5ibG9iKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2aWV3SW1hZ2Uuc2l6ZSA9IGh1bWFuaXplQnl0ZXModGhpcy5wcmV2aWV3SW1hZ2UuYmxvYi5zaXplKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmRlZmF1bHRab29tKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51c2VEZWZhdWx0Wm9vbVVwZGF0ZSh0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy51c2VDYWxjdWxhdGVab29tVXBkYXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlc29sdmVQcmV2aWV3SW1hZ2UoKSB7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxCb29sZWFuPihzdWJzY3JpYmVyID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXZpZXdJbWFnZS5zcmMuc3RhcnRzV2l0aCgnYmxvYjonKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucHJldmlld0ltYWdlLm9iamVjdFVSTCA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwodGhpcy5wcmV2aWV3SW1hZ2Uuc3JjKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnByZXZpZXdJbWFnZS5vYmplY3RVUkwgfHwgIXRoaXMucHJldmlld0NvbmZpZy5yZXNvbHZlU2l6ZSkge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh0cnVlKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZldGNoSW1hZ2VCbG9iKHRoaXMucHJldmlld0ltYWdlLnNyYykuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICAgICBibG9iID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybENyZWF0b3IgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkw7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvYmplY3RVUkwgPSB1cmxDcmVhdG9yLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJldmlld0ltYWdlLm9iamVjdFVSTCA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwob2JqZWN0VVJMKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJldmlld0ltYWdlLmJsb2IgPSBibG9iO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaW5pdFByZXZpZXcoKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMucHJldmlld0NvbmZpZz8ub3BlcmF0aW9ucykgJiYgdGhpcy5wcmV2aWV3Q29uZmlnPy5vcGVyYXRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5wcmV2aWV3T3BlcmF0aW9ucyA9IHRoaXMuZGVmYXVsdFByZXZpZXdPcGVyYXRpb25zLmZpbHRlcihpdGVtID0+IHRoaXMucHJldmlld0NvbmZpZy5vcGVyYXRpb25zLmluY2x1ZGVzKGl0ZW0udHlwZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wcmV2aWV3T3BlcmF0aW9ucyA9IHRoaXMuZGVmYXVsdFByZXZpZXdPcGVyYXRpb25zO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucm90YXRlID0gdGhpcy5wcmV2aWV3Q29uZmlnPy5yb3RhdGUgPz8gMDtcbiAgICAgICAgdGhpcy51cGRhdGVQcmV2aWV3SW1hZ2UoKTtcbiAgICB9XG5cbiAgICBkb3dubG9hZChpbWFnZTogVGh5SW1hZ2VJbmZvKSB7XG4gICAgICAgIHRoaXMuZG93bmxvYWRDbGlja2VkLmVtaXQoaW1hZ2UpO1xuICAgICAgICBjb25zdCBzcmMgPSBpbWFnZS5vcmlnaW4/LnNyYyB8fCBpbWFnZS5zcmM7XG4gICAgICAgIGZldGNoSW1hZ2VCbG9iKHNyYylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShibG9iID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1cmxDcmVhdG9yID0gd2luZG93LlVSTCB8fCB3aW5kb3cud2Via2l0VVJMO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9iamVjdFVSTCA9IHVybENyZWF0b3IuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgICAgICAgICAgIGxldCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICAgICAgICAgIGEuZG93bmxvYWQgPSBpbWFnZS5uYW1lIHx8ICdkZWZhdWx0LnBuZyc7XG4gICAgICAgICAgICAgICAgYS5ocmVmID0gb2JqZWN0VVJMO1xuICAgICAgICAgICAgICAgIGEuY2xpY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHpvb21JbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuem9vbSA8IElNQUdFX01BWF9aT09NKSB7XG4gICAgICAgICAgICB0aGlzLnpvb20gPSBNYXRoLm1pbih0aGlzLnpvb20gKyAwLjEsIElNQUdFX01BWF9aT09NKTtcbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlSW5zaWRlU2NyZWVuKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVByZXZpZXdJbWFnZVRyYW5zZm9ybSgpO1xuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHsgLi4uaW5pdGlhbFBvc2l0aW9uIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB6b29tT3V0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy56b29tID4gSU1BR0VfTUlOX1pPT00pIHtcbiAgICAgICAgICAgIHRoaXMuem9vbSA9IE1hdGgubWF4KHRoaXMuem9vbSAtIDAuMSwgSU1BR0VfTUlOX1pPT00pO1xuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVJbnNpZGVTY3JlZW4oKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUHJldmlld0ltYWdlVHJhbnNmb3JtKCk7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uID0geyAuLi5pbml0aWFsUG9zaXRpb24gfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNhbGN1bGF0ZUluc2lkZVNjcmVlbigpIHtcbiAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmltYWdlUmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggKiB0aGlzLnpvb207XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuaW1hZ2VSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQgKiB0aGlzLnpvb207XG4gICAgICAgIGNvbnN0IHsgd2lkdGg6IGNsaWVudFdpZHRoLCBoZWlnaHQ6IGNsaWVudEhlaWdodCB9ID0gZ2V0Q2xpZW50U2l6ZSgpO1xuICAgICAgICBpZiAod2lkdGggPj0gY2xpZW50V2lkdGggfHwgaGVpZ2h0ID49IGNsaWVudEhlaWdodCkge1xuICAgICAgICAgICAgdGhpcy5pc0luc2lkZVNjcmVlbiA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc0luc2lkZVNjcmVlbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2aWV3T3JpZ2luYWwoKSB7XG4gICAgICAgIHdpbmRvdy5vcGVuKHRoaXMucHJldmlld0ltYWdlPy5vcmlnaW4/LnNyYyB8fCB0aGlzLnByZXZpZXdJbWFnZS5zcmMsICdfYmxhbmsnKTtcbiAgICB9XG5cbiAgICByb3RhdGVSaWdodCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yb3RhdGUgKz0gOTA7XG4gICAgICAgIHRoaXMudXBkYXRlUHJldmlld0ltYWdlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgZnVsbFNjcmVlbigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy50aHktaW1hZ2UtcHJldmlldycpO1xuICAgICAgICB0aGlzLmlzRnVsbFNjcmVlbiA9IHRydWU7XG4gICAgICAgIGNvbnN0IGZ1bGxzY3JlZW5SZWYgPSB0aGlzLnRoeUZ1bGxzY3JlZW4ubGF1bmNoKHtcbiAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0RWxlbWVudFxuICAgICAgICB9KTtcbiAgICAgICAgZnVsbHNjcmVlblJlZi5hZnRlckV4aXRlZCgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzRnVsbFNjcmVlbiA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvcHlMaW5rKGV2ZW50OiBUaHlDb3B5RXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LmlzU3VjY2Vzcykge1xuICAgICAgICAgICAgdGhpcy5ub3RpZnlTZXJ2aWNlLnN1Y2Nlc3MoJ+WkjeWItuWbvueJh+WcsOWdgOaIkOWKnycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ub3RpZnlTZXJ2aWNlLmVycm9yKCflpI3liLblm77niYflnLDlnYDlpLHotKUnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByZXYoKSB7XG4gICAgICAgIGlmICh0aGlzLnByZXZpZXdJbmRleCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMucHJldmlld0luZGV4LS07XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZ0RvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUHJldmlld0ltYWdlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZXh0KCkge1xuICAgICAgICBpZiAodGhpcy5wcmV2aWV3SW5kZXggPCB0aGlzLmltYWdlcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICB0aGlzLnByZXZpZXdJbmRleCsrO1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmdEb25lID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVByZXZpZXdJbWFnZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZHJhZ1JlbGVhc2VkKCkge1xuICAgICAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmltYWdlUmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggKiB0aGlzLnpvb207XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuaW1hZ2VSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQgKiB0aGlzLnpvb207XG4gICAgICAgIGNvbnN0IHsgbGVmdCwgdG9wIH0gPSBnZXRPZmZzZXQodGhpcy5pbWFnZVJlZi5uYXRpdmVFbGVtZW50LCB3aW5kb3cpO1xuICAgICAgICBjb25zdCB7IHdpZHRoOiBjbGllbnRXaWR0aCwgaGVpZ2h0OiBjbGllbnRIZWlnaHQgfSA9IGdldENsaWVudFNpemUoKTtcbiAgICAgICAgY29uc3QgaXNSb3RhdGUgPSB0aGlzLnJvdGF0ZSAlIDE4MCAhPT0gMDtcbiAgICAgICAgY29uc3QgZml0Q29udGVudFBhcmFtcyA9IHtcbiAgICAgICAgICAgIHdpZHRoOiBpc1JvdGF0ZSA/IGhlaWdodCA6IHdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiBpc1JvdGF0ZSA/IHdpZHRoIDogaGVpZ2h0LFxuICAgICAgICAgICAgbGVmdCxcbiAgICAgICAgICAgIHRvcCxcbiAgICAgICAgICAgIGNsaWVudFdpZHRoLFxuICAgICAgICAgICAgY2xpZW50SGVpZ2h0XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGZpdENvbnRlbnRQb3MgPSBnZXRGaXRDb250ZW50UG9zaXRpb24oZml0Q29udGVudFBhcmFtcyk7XG4gICAgICAgIGlmICghaXNVbmRlZmluZWRPck51bGwoZml0Q29udGVudFBvcy54KSB8fCAhaXNVbmRlZmluZWRPck51bGwoZml0Q29udGVudFBvcy55KSkge1xuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHsgLi4udGhpcy5wb3NpdGlvbiwgLi4uZml0Q29udGVudFBvcyB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdXJyZW50SW1hZ2VNb2RlID0gJ29yaWdpbmFsLXNjYWxlJztcbiAgICAgICAgdGhpcy5yb3RhdGUgPSB0aGlzLnByZXZpZXdDb25maWc/LnJvdGF0ZSA/PyAwO1xuICAgICAgICB0aGlzLnBvc2l0aW9uID0geyAuLi5pbml0aWFsUG9zaXRpb24gfTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlUHJldmlld0ltYWdlVHJhbnNmb3JtKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByZXZpZXdJbWFnZVRyYW5zZm9ybSA9IGBzY2FsZTNkKCR7dGhpcy56b29tfSwgJHt0aGlzLnpvb219LCAxKSByb3RhdGUoJHt0aGlzLnJvdGF0ZX1kZWcpYDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVByZXZpZXdJbWFnZVdyYXBwZXJUcmFuc2Zvcm0oKTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJldmlld0ltYWdlV3JhcHBlclRyYW5zZm9ybSA9IGB0cmFuc2xhdGUzZCgke3RoaXMucG9zaXRpb24ueH1weCwgJHt0aGlzLnBvc2l0aW9uLnl9cHgsIDApYDtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidGh5LWltYWdlLXByZXZpZXdcIiBbY2xhc3MudGh5LWltYWdlLXByZXZpZXctZnVsbHNjcmVlbl09XCJpc0Z1bGxTY3JlZW5cIj5cbiAgPGRpdiBjbGFzcz1cInRoeS1pbWFnZS1wcmV2aWV3LWhlYWRlciBwbC0xMCBwci04XCIgKm5nSWY9XCIhaXNGdWxsU2NyZWVuXCI+XG4gICAgPGRpdiBjbGFzcz1cInRoeS1pbWFnZS1wcmV2aWV3LWhlYWRlci1pbmZvXCI+XG4gICAgICA8cCBjbGFzcz1cInRoeS1pbWFnZS1uYW1lIHRleHQtdHJ1bmNhdGVcIiBbdGh5VG9vbHRpcERpc2FibGVkXT1cInByZXZpZXdJbWFnZT8ubmFtZT8ubGVuZ3RoIDwgMzJcIiBbdGh5VG9vbHRpcF09XCJwcmV2aWV3SW1hZ2U/Lm5hbWVcIj5cbiAgICAgICAge3sgcHJldmlld0ltYWdlPy5uYW1lIH19XG4gICAgICA8L3A+XG4gICAgICA8c3BhbiBjbGFzcz1cInRoeS1pbWFnZS1zaXplXCI+IHt7IHByZXZpZXdJbWFnZT8uc2l6ZSB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8YSB0aHlBY3Rpb24gdGh5SWNvbj1cImNsb3NlXCIgdGh5VG9vbHRpcD1cIumAgOWHuumihOiniFwiIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiAoY2xpY2spPVwidGh5RGlhbG9nLmNsb3NlKClcIj48L2E+XG4gIDwvZGl2PlxuICA8YVxuICAgIGNsYXNzPVwidGh5LWltYWdlLXByZXZpZXctZXhpdC1mdWxsc2NyZWVuXCJcbiAgICAqbmdJZj1cImlzRnVsbFNjcmVlblwiXG4gICAgdGh5QWN0aW9uXG4gICAgdGh5SWNvbj1cImNsb3NlXCJcbiAgICB0aHlUb29sdGlwPVwi6YCA5Ye66aKE6KeIXCJcbiAgICBocmVmPVwiamF2YXNjcmlwdDo7XCJcbiAgICAoY2xpY2spPVwidGh5RnVsbHNjcmVlbi5leGl0KClcIlxuICAgIHRoeVRvb2x0aXA9XCLpgIDlh7rlhajlsY9cIlxuICA+PC9hPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJ0aHktaW1hZ2UtcHJldmlldy1pbWctd3JhcHBlclwiXG4gICAgI2ltYWdlUHJldmlld1dyYXBwZXJcbiAgICBjZGtEcmFnXG4gICAgW2NsYXNzLnRoeS1pbWFnZS1wcmV2aWV3LWluc2lkZV09XCJpc0luc2lkZVNjcmVlblwiXG4gICAgW3N0eWxlLnRyYW5zZm9ybV09XCJwcmV2aWV3SW1hZ2VXcmFwcGVyVHJhbnNmb3JtXCJcbiAgICBbY2RrRHJhZ0ZyZWVEcmFnUG9zaXRpb25dPVwicG9zaXRpb25cIlxuICAgIChjZGtEcmFnUmVsZWFzZWQpPVwiZHJhZ1JlbGVhc2VkKClcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaW1hZ2Ugb2YgaW1hZ2VzOyBpbmRleCBhcyBpbWFnZUluZGV4XCI+XG4gICAgICA8aW1nXG4gICAgICAgICNpbWdSZWZcbiAgICAgICAgKm5nSWY9XCJwcmV2aWV3SW5kZXggPT09IGltYWdlSW5kZXggJiYgaXNMb2FkaW5nRG9uZVwiXG4gICAgICAgIGNsYXNzPVwidGh5LWltYWdlLXByZXZpZXctaW1nXCJcbiAgICAgICAgW3NyY109XCJpbWFnZS5vYmplY3RVUkwgfHwgaW1hZ2Uuc3JjXCJcbiAgICAgICAgW3N0eWxlLnRyYW5zZm9ybV09XCJwcmV2aWV3SW1hZ2VUcmFuc2Zvcm1cIlxuICAgICAgLz5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8dGh5LWxvYWRpbmcgW3RoeURvbmVdPVwiaXNMb2FkaW5nRG9uZVwiPjwvdGh5LWxvYWRpbmc+XG4gIDwvZGl2PlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpbWFnZXMubGVuZ3RoID4gMSAmJiAhaXNGdWxsU2NyZWVuXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJ0aHktaW1hZ2UtcHJldmlldy1zd2l0Y2gtbGVmdFwiXG4gICAgICBbdGh5VG9vbHRpcERpc2FibGVkXT1cInByZXZpZXdJbmRleCA8PSAwXCJcbiAgICAgIHRoeVRvb2x0aXA9XCLkuIrkuIDlvKBcIlxuICAgICAgW2NsYXNzLnRoeS1pbWFnZS1wcmV2aWV3LXN3aXRjaC1sZWZ0LWRpc2FibGVkXT1cInByZXZpZXdJbmRleCA8PSAwXCJcbiAgICAgIChjbGljayk9XCJwcmV2KClcIlxuICAgID5cbiAgICAgIDx0aHktaWNvbiB0aHlJY29uTmFtZT1cImFuZ2xlLWxlZnQtYm9sZFwiPjwvdGh5LWljb24+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJ0aHktaW1hZ2UtcHJldmlldy1zd2l0Y2gtcmlnaHRcIlxuICAgICAgdGh5VG9vbHRpcD1cIuS4i+S4gOW8oFwiXG4gICAgICBbdGh5VG9vbHRpcERpc2FibGVkXT1cInByZXZpZXdJbmRleCA+PSBpbWFnZXMubGVuZ3RoIC0gMVwiXG4gICAgICBbY2xhc3MudGh5LWltYWdlLXByZXZpZXctc3dpdGNoLXJpZ2h0LWRpc2FibGVkXT1cInByZXZpZXdJbmRleCA+PSBpbWFnZXMubGVuZ3RoIC0gMVwiXG4gICAgICAoY2xpY2spPVwibmV4dCgpXCJcbiAgICA+XG4gICAgICA8dGh5LWljb24gdGh5SWNvbk5hbWU9XCJhbmdsZS1yaWdodC1ib2xkXCI+IDwvdGh5LWljb24+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuICA8dGh5LWFjdGlvbnMgdGh5U2l6ZT1cInhzXCIgY2xhc3M9XCJ0aHktaW1hZ2UtcHJldmlldy1vcGVyYXRpb25zIHB5LTMgcHgtNFwiICpuZ0lmPVwiIWlzRnVsbFNjcmVlblwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBwcmV2aWV3T3BlcmF0aW9uczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgPGFcbiAgICAgICAgKm5nSWY9XCIhWydvcmlnaW5hbC1zY2FsZScsICdmaXQtc2NyZWVuJywgJ2NvcHlMaW5rJ10uaW5jbHVkZXMob3B0aW9uLnR5cGUpIHx8IGN1cnJlbnRJbWFnZU1vZGUgPT09IG9wdGlvbi50eXBlXCJcbiAgICAgICAgaHJlZj1cImphdmFzY3JpcHQ6O1wiXG4gICAgICAgIHRoeUFjdGlvblxuICAgICAgICBbdGh5QWN0aW9uSWNvbl09XCJvcHRpb24uaWNvblwiXG4gICAgICAgIFt0aHlUb29sdGlwXT1cIm9wdGlvbi5uYW1lXCJcbiAgICAgICAgW3RoeVRvb2x0aXBPZmZzZXRdPVwiMTNcIlxuICAgICAgICAoY2xpY2spPVwib3B0aW9uLmFjdGlvbihwcmV2aWV3SW1hZ2UpXCJcbiAgICAgID48L2E+XG4gICAgICA8c3BhbiBjbGFzcz1cIm1yLTJcIiAqbmdJZj1cIm9wdGlvbj8udHlwZSA9PT0gJ3pvb20tb3V0J1wiPiB7eyAoem9vbSAqIDEwMCkudG9GaXhlZCgwKSArICclJyB9fSA8L3NwYW4+XG4gICAgICA8dGh5LWRpdmlkZXIgY2xhc3M9XCJtbC0yXCIgW3RoeVZlcnRpY2FsXT1cInRydWVcIiAqbmdJZj1cIm9wdGlvbj8udHlwZSA9PT0gJ3JvdGF0ZS1yaWdodCdcIj48L3RoeS1kaXZpZGVyPlxuICAgICAgPGFcbiAgICAgICAgKm5nSWY9XCJvcHRpb24udHlwZSA9PT0gJ2NvcHlMaW5rJ1wiXG4gICAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OjtcIlxuICAgICAgICB0aHlBY3Rpb25cbiAgICAgICAgW3RoeUNvcHlUaXBzXT1cIm9wdGlvbi5uYW1lXCJcbiAgICAgICAgW3RoeUFjdGlvbkljb25dPVwib3B0aW9uLmljb25cIlxuICAgICAgICBbdGh5Q29weVRpcHNPZmZzZXRdPVwiMTNcIlxuICAgICAgICAodGh5Q29weSk9XCJjb3B5TGluaygkZXZlbnQpXCJcbiAgICAgICAgW3RoeUNvcHlDb250ZW50XT1cInByZXZpZXdJbWFnZU9yaWdpblNyY1wiXG4gICAgICAgIFt0aHlTaG93Tm90aWZ5XT1cImZhbHNlXCJcbiAgICAgID48L2E+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPHRoeS1kaXZpZGVyIFt0aHlWZXJ0aWNhbF09XCJ0cnVlXCI+PC90aHktZGl2aWRlcj5cbiAgICA8c3BhbiBjbGFzcz1cInRoeS1pbWFnZS1wcmV2aWV3LW9wZXJhdGlvbnMtdGV4dFwiPiB7eyBwcmV2aWV3SW5kZXggKyAxIH19IC8ge3sgaW1hZ2VzLmxlbmd0aCB9fSA8L3NwYW4+XG4gIDwvdGh5LWFjdGlvbnM+XG48L2Rpdj5cbiJdfQ==
@@ -1,18 +1,17 @@
1
- import { Component, ChangeDetectionStrategy, Input, ChangeDetectorRef, Optional } from '@angular/core';
1
+ import { Component, ChangeDetectionStrategy, Input, ChangeDetectorRef, Optional, inject, DestroyRef } from '@angular/core';
2
2
  import { ThyInputDirective } from './input.directive';
3
- import { mixinUnsubscribe, MixinBase } from 'ngx-tethys/core';
4
- import { takeUntil, switchMap, filter, tap } from 'rxjs/operators';
3
+ import { switchMap, filter, tap } from 'rxjs/operators';
4
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
5
5
  import { Subject } from 'rxjs';
6
6
  import { ThyInputGroup } from './input-group.component';
7
7
  import * as i0 from "@angular/core";
8
8
  import * as i1 from "./input-group.component";
9
- const _Base = mixinUnsubscribe(MixinBase);
10
9
  /**
11
10
  * 输入框输入文字展示
12
11
  * @name thy-input-count
13
12
  * @order 40
14
13
  */
15
- export class ThyInputCount extends _Base {
14
+ export class ThyInputCount {
16
15
  /**
17
16
  * 输入框组件,如果不传默认会读取外层 thy-input-group 下的 thyInput 指令
18
17
  * @type ThyInputDirective
@@ -22,9 +21,9 @@ export class ThyInputCount extends _Base {
22
21
  this.thyInput$.next(value);
23
22
  }
24
23
  constructor(changeDetectorRef, inputGroup) {
25
- super();
26
24
  this.changeDetectorRef = changeDetectorRef;
27
25
  this.inputGroup = inputGroup;
26
+ this.destroyRef = inject(DestroyRef);
28
27
  this.hasInput = false;
29
28
  this.inputLength = 0;
30
29
  this.thyInput$ = new Subject();
@@ -37,12 +36,12 @@ export class ThyInputCount extends _Base {
37
36
  }), tap(input => {
38
37
  this.maxLength = input.nativeElement.getAttribute('maxlength');
39
38
  this.changeDetectorRef.markForCheck();
40
- }), takeUntil(this.ngUnsubscribe$), switchMap(input => {
39
+ }), takeUntilDestroyed(this.destroyRef), switchMap(input => {
41
40
  return input.ngControl.valueChanges;
42
41
  }), tap(value => {
43
42
  this.inputLength = value?.length || 0;
44
43
  this.changeDetectorRef.markForCheck();
45
- }), takeUntil(this.ngUnsubscribe$))
44
+ }), takeUntilDestroyed(this.destroyRef))
46
45
  .subscribe();
47
46
  }
48
47
  ngOnInit() {
@@ -51,7 +50,7 @@ export class ThyInputCount extends _Base {
51
50
  }
52
51
  }
53
52
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: ThyInputCount, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.ThyInputGroup, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
54
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.3", type: ThyInputCount, isStandalone: true, selector: "thy-input-count", inputs: { thyInput: "thyInput" }, host: { classAttribute: "thy-input-count text-muted" }, usesInheritance: true, ngImport: i0, template: '{{inputLength}} / {{maxLength}}', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
53
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.3", type: ThyInputCount, isStandalone: true, selector: "thy-input-count", inputs: { thyInput: "thyInput" }, host: { classAttribute: "thy-input-count text-muted" }, ngImport: i0, template: '{{inputLength}} / {{maxLength}}', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
55
54
  }
56
55
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: ThyInputCount, decorators: [{
57
56
  type: Component,
@@ -69,4 +68,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
69
68
  }] }], propDecorators: { thyInput: [{
70
69
  type: Input
71
70
  }] } });
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtY291bnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2lucHV0L2lucHV0LWNvdW50LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLHVCQUF1QixFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0csT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlELE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7O0FBRXhELE1BQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBRTFDOzs7O0dBSUc7QUFVSCxNQUFNLE9BQU8sYUFBYyxTQUFRLEtBQUs7SUFHcEM7OztPQUdHO0lBQ0gsSUFBYSxRQUFRLENBQUMsS0FBd0I7UUFDMUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQVFELFlBQW9CLGlCQUFvQyxFQUFzQixVQUF5QjtRQUNuRyxLQUFLLEVBQUUsQ0FBQztRQURRLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFBc0IsZUFBVSxHQUFWLFVBQVUsQ0FBZTtRQWpCL0YsYUFBUSxHQUFHLEtBQUssQ0FBQztRQWF6QixnQkFBVyxHQUFHLENBQUMsQ0FBQztRQUVoQixjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQXFCLENBQUM7UUFJekMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRCxLQUFLO1FBQ0QsSUFBSSxDQUFDLFNBQVM7YUFDVCxJQUFJLENBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1gsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ25CLENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNSLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDL0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFDLENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQzlCLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNkLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUM7UUFDeEMsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1IsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDMUMsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FDakM7YUFDQSxTQUFTLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0RSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3hELENBQUM7SUFDTCxDQUFDOzhHQWxEUSxhQUFhO2tHQUFiLGFBQWEsNExBUFosaUNBQWlDOzsyRkFPbEMsYUFBYTtrQkFUekIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixRQUFRLEVBQUUsaUNBQWlDO29CQUMzQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsSUFBSSxFQUFFO3dCQUNGLEtBQUssRUFBRSw0QkFBNEI7cUJBQ3RDO29CQUNELFVBQVUsRUFBRSxJQUFJO2lCQUNuQjs7MEJBbUI4RCxRQUFRO3lDQVh0RCxRQUFRO3NCQUFwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBJbnB1dCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUaHlJbnB1dERpcmVjdGl2ZSB9IGZyb20gJy4vaW5wdXQuZGlyZWN0aXZlJztcbmltcG9ydCB7IG1peGluVW5zdWJzY3JpYmUsIE1peGluQmFzZSB9IGZyb20gJ25neC10ZXRoeXMvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWwsIHN3aXRjaE1hcCwgZmlsdGVyLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUaHlJbnB1dEdyb3VwIH0gZnJvbSAnLi9pbnB1dC1ncm91cC5jb21wb25lbnQnO1xuXG5jb25zdCBfQmFzZSA9IG1peGluVW5zdWJzY3JpYmUoTWl4aW5CYXNlKTtcblxuLyoqXG4gKiDovpPlhaXmoYbovpPlhaXmloflrZflsZXnpLpcbiAqIEBuYW1lIHRoeS1pbnB1dC1jb3VudFxuICogQG9yZGVyIDQwXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndGh5LWlucHV0LWNvdW50JyxcbiAgICB0ZW1wbGF0ZTogJ3t7aW5wdXRMZW5ndGh9fSAvIHt7bWF4TGVuZ3RofX0nLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICd0aHktaW5wdXQtY291bnQgdGV4dC1tdXRlZCdcbiAgICB9LFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgVGh5SW5wdXRDb3VudCBleHRlbmRzIF9CYXNlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBwcml2YXRlIGhhc0lucHV0ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDovpPlhaXmoYbnu4Tku7bvvIzlpoLmnpzkuI3kvKDpu5jorqTkvJror7vlj5blpJblsYIgdGh5LWlucHV0LWdyb3VwIOS4i+eahCB0aHlJbnB1dCDmjIfku6RcbiAgICAgKiBAdHlwZSBUaHlJbnB1dERpcmVjdGl2ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHNldCB0aHlJbnB1dCh2YWx1ZTogVGh5SW5wdXREaXJlY3RpdmUpIHtcbiAgICAgICAgdGhpcy5oYXNJbnB1dCA9IHRydWU7XG4gICAgICAgIHRoaXMudGh5SW5wdXQkLm5leHQodmFsdWUpO1xuICAgIH1cblxuICAgIG1heExlbmd0aDogbnVtYmVyIHwgc3RyaW5nO1xuXG4gICAgaW5wdXRMZW5ndGggPSAwO1xuXG4gICAgdGh5SW5wdXQkID0gbmV3IFN1YmplY3Q8VGh5SW5wdXREaXJlY3RpdmU+KCk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZiwgQE9wdGlvbmFsKCkgcHJpdmF0ZSBpbnB1dEdyb3VwOiBUaHlJbnB1dEdyb3VwKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc2V0dXAoKTtcbiAgICB9XG5cbiAgICBzZXR1cCgpIHtcbiAgICAgICAgdGhpcy50aHlJbnB1dCRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcihpbnB1dCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhIWlucHV0O1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRhcChpbnB1dCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF4TGVuZ3RoID0gaW5wdXQubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ21heGxlbmd0aCcpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUkKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoaW5wdXQgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXQubmdDb250cm9sLnZhbHVlQ2hhbmdlcztcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0YXAodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0TGVuZ3RoID0gdmFsdWU/Lmxlbmd0aCB8fCAwO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUkKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaGFzSW5wdXQgJiYgdGhpcy5pbnB1dEdyb3VwICYmIHRoaXMuaW5wdXRHcm91cC5pbnB1dERpcmVjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy50aHlJbnB1dCQubmV4dCh0aGlzLmlucHV0R3JvdXAuaW5wdXREaXJlY3RpdmUpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtY291bnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2lucHV0L2lucHV0LWNvdW50LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLHVCQUF1QixFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuSSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7O0FBRXhEOzs7O0dBSUc7QUFVSCxNQUFNLE9BQU8sYUFBYTtJQUt0Qjs7O09BR0c7SUFDSCxJQUFhLFFBQVEsQ0FBQyxLQUF3QjtRQUMxQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBUUQsWUFBb0IsaUJBQW9DLEVBQXNCLFVBQXlCO1FBQW5GLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFBc0IsZUFBVSxHQUFWLFVBQVUsQ0FBZTtRQW5CdEYsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV6QyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBYXpCLGdCQUFXLEdBQUcsQ0FBQyxDQUFDO1FBRWhCLGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBcUIsQ0FBQztRQUd6QyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELEtBQUs7UUFDRCxJQUFJLENBQUMsU0FBUzthQUNULElBQUksQ0FDRCxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDWCxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDbkIsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1IsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMvRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDMUMsQ0FBQyxDQUFDLEVBQ0Ysa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUNuQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDZCxPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNSLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFDLENBQUMsQ0FBQyxFQUNGLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FDdEM7YUFDQSxTQUFTLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0RSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3hELENBQUM7SUFDTCxDQUFDOzhHQW5EUSxhQUFhO2tHQUFiLGFBQWEscUtBUFosaUNBQWlDOzsyRkFPbEMsYUFBYTtrQkFUekIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixRQUFRLEVBQUUsaUNBQWlDO29CQUMzQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsSUFBSSxFQUFFO3dCQUNGLEtBQUssRUFBRSw0QkFBNEI7cUJBQ3RDO29CQUNELFVBQVUsRUFBRSxJQUFJO2lCQUNuQjs7MEJBcUI4RCxRQUFRO3lDQVh0RCxRQUFRO3NCQUFwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBJbnB1dCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIE9wdGlvbmFsLCBpbmplY3QsIERlc3Ryb3lSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRoeUlucHV0RGlyZWN0aXZlIH0gZnJvbSAnLi9pbnB1dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgc3dpdGNoTWFwLCBmaWx0ZXIsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRoeUlucHV0R3JvdXAgfSBmcm9tICcuL2lucHV0LWdyb3VwLmNvbXBvbmVudCc7XG5cbi8qKlxuICog6L6T5YWl5qGG6L6T5YWl5paH5a2X5bGV56S6XG4gKiBAbmFtZSB0aHktaW5wdXQtY291bnRcbiAqIEBvcmRlciA0MFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3RoeS1pbnB1dC1jb3VudCcsXG4gICAgdGVtcGxhdGU6ICd7e2lucHV0TGVuZ3RofX0gLyB7e21heExlbmd0aH19JyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAndGh5LWlucHV0LWNvdW50IHRleHQtbXV0ZWQnXG4gICAgfSxcbiAgICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIFRoeUlucHV0Q291bnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIHByaXZhdGUgaGFzSW5wdXQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOi+k+WFpeahhue7hOS7tu+8jOWmguaenOS4jeS8oOm7mOiupOS8muivu+WPluWkluWxgiB0aHktaW5wdXQtZ3JvdXAg5LiL55qEIHRoeUlucHV0IOaMh+S7pFxuICAgICAqIEB0eXBlIFRoeUlucHV0RGlyZWN0aXZlXG4gICAgICovXG4gICAgQElucHV0KCkgc2V0IHRoeUlucHV0KHZhbHVlOiBUaHlJbnB1dERpcmVjdGl2ZSkge1xuICAgICAgICB0aGlzLmhhc0lucHV0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50aHlJbnB1dCQubmV4dCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgbWF4TGVuZ3RoOiBudW1iZXIgfCBzdHJpbmc7XG5cbiAgICBpbnB1dExlbmd0aCA9IDA7XG5cbiAgICB0aHlJbnB1dCQgPSBuZXcgU3ViamVjdDxUaHlJbnB1dERpcmVjdGl2ZT4oKTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLCBAT3B0aW9uYWwoKSBwcml2YXRlIGlucHV0R3JvdXA6IFRoeUlucHV0R3JvdXApIHtcbiAgICAgICAgdGhpcy5zZXR1cCgpO1xuICAgIH1cblxuICAgIHNldHVwKCkge1xuICAgICAgICB0aGlzLnRoeUlucHV0JFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKGlucHV0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEhaW5wdXQ7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFwKGlucHV0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXhMZW5ndGggPSBpbnB1dC5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnbWF4bGVuZ3RoJyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZiksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKGlucHV0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0Lm5nQ29udHJvbC52YWx1ZUNoYW5nZXM7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFwKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dExlbmd0aCA9IHZhbHVlPy5sZW5ndGggfHwgMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaGFzSW5wdXQgJiYgdGhpcy5pbnB1dEdyb3VwICYmIHRoaXMuaW5wdXRHcm91cC5pbnB1dERpcmVjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy50aHlJbnB1dCQubmV4dCh0aGlzLmlucHV0R3JvdXAuaW5wdXREaXJlY3RpdmUpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
@@ -1,9 +1,10 @@
1
- import { Component, HostBinding, Input, ContentChild, TemplateRef, ViewEncapsulation, ChangeDetectionStrategy, ChangeDetectorRef, NgZone } from '@angular/core';
2
- import { MixinBase, ThyTranslate, mixinUnsubscribe, useHostFocusControl } from 'ngx-tethys/core';
1
+ import { Component, HostBinding, Input, ContentChild, TemplateRef, ViewEncapsulation, ChangeDetectionStrategy, ChangeDetectorRef, NgZone, inject, DestroyRef } from '@angular/core';
2
+ import { ThyTranslate, useHostFocusControl } from 'ngx-tethys/core';
3
3
  import { useHostRenderer } from '@tethys/cdk/dom';
4
4
  import { ThyInputDirective } from './input.directive';
5
5
  import { NgIf, NgTemplateOutlet } from '@angular/common';
6
- import { takeUntil, throttleTime } from 'rxjs/operators';
6
+ import { throttleTime } from 'rxjs/operators';
7
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
7
8
  import { Observable, of } from 'rxjs';
8
9
  import * as i0 from "@angular/core";
9
10
  import * as i1 from "ngx-tethys/core";
@@ -17,7 +18,7 @@ const inputGroupSizeMap = {
17
18
  * @name thy-input-group
18
19
  * @order 20
19
20
  */
20
- export class ThyInputGroup extends mixinUnsubscribe(MixinBase) {
21
+ export class ThyInputGroup {
21
22
  /**
22
23
  * 输入框上添加的后置文本
23
24
  */
@@ -60,12 +61,12 @@ export class ThyInputGroup extends mixinUnsubscribe(MixinBase) {
60
61
  }
61
62
  }
62
63
  constructor(thyTranslate, ngZone, cdr) {
63
- super();
64
64
  this.thyTranslate = thyTranslate;
65
65
  this.ngZone = ngZone;
66
66
  this.cdr = cdr;
67
67
  this.hostRenderer = useHostRenderer();
68
68
  this.hostFocusControl = useHostFocusControl();
69
+ this.destroyRef = inject(DestroyRef);
69
70
  this.disabled = false;
70
71
  }
71
72
  ngOnInit() {
@@ -88,7 +89,7 @@ export class ThyInputGroup extends mixinUnsubscribe(MixinBase) {
88
89
  determineHasScrollbar() {
89
90
  this.ngZone.runOutsideAngular(() => {
90
91
  this.resizeObserver(this.inputDirective.nativeElement)
91
- .pipe(throttleTime(100), takeUntil(this.ngUnsubscribe$))
92
+ .pipe(throttleTime(100), takeUntilDestroyed(this.destroyRef))
92
93
  .subscribe(() => {
93
94
  const hasScrollbar = this.inputDirective.nativeElement.scrollHeight > this.inputDirective.nativeElement.clientHeight;
94
95
  if (this.hasScrollbar !== hasScrollbar) {
@@ -114,11 +115,10 @@ export class ThyInputGroup extends mixinUnsubscribe(MixinBase) {
114
115
  });
115
116
  }
116
117
  ngOnDestroy() {
117
- super.ngOnDestroy();
118
118
  this.hostFocusControl.destroy();
119
119
  }
120
120
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: ThyInputGroup, deps: [{ token: i1.ThyTranslate }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
121
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.3", type: ThyInputGroup, isStandalone: true, selector: "thy-input-group", inputs: { thyAppendText: "thyAppendText", thyAppendTextTranslateKey: "thyAppendTextTranslateKey", thyPrependText: "thyPrependText", thyPrependTextTranslateKey: "thyPrependTextTranslateKey", thySize: "thySize" }, host: { properties: { "class.form-control": "prefixTemplate || suffixTemplate", "class.thy-input-group-with-prefix": "prefixTemplate", "class.thy-input-group-with-suffix": "suffixTemplate", "class.thy-input-group-with-textarea-suffix": "isTextareaSuffix", "class.thy-input-group-with-scroll-bar": "isTextareaSuffix && hasScrollbar", "class.disabled": "this.disabled" }, classAttribute: "thy-input-group" }, queries: [{ propertyName: "appendTemplate", first: true, predicate: ["append"], descendants: true }, { propertyName: "prependTemplate", first: true, predicate: ["prepend"], descendants: true }, { propertyName: "prefixTemplate", first: true, predicate: ["prefix"], descendants: true }, { propertyName: "suffixTemplate", first: true, predicate: ["suffix"], descendants: true }, { propertyName: "inputDirective", first: true, predicate: ThyInputDirective, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"input-group-prepend\" *ngIf=\"prependText\">\n <span class=\"input-group-text\">{{ prependText }}</span>\n</div>\n<div class=\"input-group-prepend\" *ngIf=\"prependTemplate\">\n <ng-template *ngTemplateOutlet=\"prependTemplate\"></ng-template>\n</div>\n\n<div class=\"input-group-prefix\" *ngIf=\"prefixTemplate\">\n <ng-template *ngTemplateOutlet=\"prefixTemplate\"></ng-template>\n</div>\n\n<ng-content></ng-content>\n\n<div class=\"input-group-append\" *ngIf=\"appendText\">\n <span class=\"input-group-text\">{{ appendText }}</span>\n</div>\n<div class=\"input-group-append\" *ngIf=\"appendTemplate\">\n <ng-template *ngTemplateOutlet=\"appendTemplate\"></ng-template>\n</div>\n\n<div class=\"input-group-suffix\" *ngIf=\"suffixTemplate\">\n <ng-template *ngTemplateOutlet=\"suffixTemplate\"></ng-template>\n</div>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
121
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.3", type: ThyInputGroup, isStandalone: true, selector: "thy-input-group", inputs: { thyAppendText: "thyAppendText", thyAppendTextTranslateKey: "thyAppendTextTranslateKey", thyPrependText: "thyPrependText", thyPrependTextTranslateKey: "thyPrependTextTranslateKey", thySize: "thySize" }, host: { properties: { "class.form-control": "prefixTemplate || suffixTemplate", "class.thy-input-group-with-prefix": "prefixTemplate", "class.thy-input-group-with-suffix": "suffixTemplate", "class.thy-input-group-with-textarea-suffix": "isTextareaSuffix", "class.thy-input-group-with-scroll-bar": "isTextareaSuffix && hasScrollbar", "class.disabled": "this.disabled" }, classAttribute: "thy-input-group" }, queries: [{ propertyName: "appendTemplate", first: true, predicate: ["append"], descendants: true }, { propertyName: "prependTemplate", first: true, predicate: ["prepend"], descendants: true }, { propertyName: "prefixTemplate", first: true, predicate: ["prefix"], descendants: true }, { propertyName: "suffixTemplate", first: true, predicate: ["suffix"], descendants: true }, { propertyName: "inputDirective", first: true, predicate: ThyInputDirective, descendants: true }], ngImport: i0, template: "<div class=\"input-group-prepend\" *ngIf=\"prependText\">\n <span class=\"input-group-text\">{{ prependText }}</span>\n</div>\n<div class=\"input-group-prepend\" *ngIf=\"prependTemplate\">\n <ng-template *ngTemplateOutlet=\"prependTemplate\"></ng-template>\n</div>\n\n<div class=\"input-group-prefix\" *ngIf=\"prefixTemplate\">\n <ng-template *ngTemplateOutlet=\"prefixTemplate\"></ng-template>\n</div>\n\n<ng-content></ng-content>\n\n<div class=\"input-group-append\" *ngIf=\"appendText\">\n <span class=\"input-group-text\">{{ appendText }}</span>\n</div>\n<div class=\"input-group-append\" *ngIf=\"appendTemplate\">\n <ng-template *ngTemplateOutlet=\"appendTemplate\"></ng-template>\n</div>\n\n<div class=\"input-group-suffix\" *ngIf=\"suffixTemplate\">\n <ng-template *ngTemplateOutlet=\"suffixTemplate\"></ng-template>\n</div>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
122
122
  }
123
123
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: ThyInputGroup, decorators: [{
124
124
  type: Component,
@@ -159,4 +159,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
159
159
  type: ContentChild,
160
160
  args: [ThyInputDirective]
161
161
  }] } });
162
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2lucHV0L2lucHV0LWdyb3VwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9pbnB1dC9pbnB1dC1ncm91cC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFdBQVcsRUFDWCxLQUFLLEVBQ0wsWUFBWSxFQUNaLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsdUJBQXVCLEVBSXZCLGlCQUFpQixFQUNqQixNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEQsT0FBTyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7OztBQUt0QyxNQUFNLGlCQUFpQixHQUFHO0lBQ3RCLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDO0lBQ3RCLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDO0lBQ3RCLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDO0NBQ3pCLENBQUM7QUFFRjs7OztHQUlHO0FBaUJILE1BQU0sT0FBTyxhQUFjLFNBQVEsZ0JBQWdCLENBQUMsU0FBUyxDQUFDO0lBZTFEOztPQUVHO0lBQ0gsSUFDSSxhQUFhLENBQUMsS0FBYTtRQUMzQixJQUFJLENBQUMs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L0I7d0JBQ0YsS0FBSyxFQUFFLGlCQUFpQjt3QkFDeEIsc0JBQXNCLEVBQUUsa0NBQWtDO3dCQUMxRCxxQ0FBcUMsRUFBRSxnQkFBZ0I7d0JBQ3ZELHFDQUFxQyxFQUFFLGdCQUFnQjt3QkFDdkQsOENBQThDLEVBQUUsa0JBQWtCO3dCQUNsRSx5Q0FBeUMsRUFBRSxrQ0FBa0M7cUJBQ2hGLGNBQ1csSUFBSSxXQUNQLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDO3NJQWVGLFFBQVE7c0JBQXRDLFdBQVc7dUJBQUMsZ0JBQWdCO2dCQU16QixhQUFhO3NCQURoQixLQUFLO2dCQVNGLHlCQUF5QjtzQkFENUIsS0FBSztnQkFXRixjQUFjO3NCQURqQixLQUFLO2dCQVNGLDBCQUEwQjtzQkFEN0IsS0FBSztnQkFhRixPQUFPO3NCQURWLEtBQUs7Z0JBWWtCLGNBQWM7c0JBQXJDLFlBQVk7dUJBQUMsUUFBUTtnQkFLRyxlQUFlO3NCQUF2QyxZQUFZO3VCQUFDLFNBQVM7Z0JBS0MsY0FBYztzQkFBckMsWUFBWTt1QkFBQyxRQUFRO2dCQUtFLGNBQWM7c0JBQXJDLFlBQVk7dUJBQUMsUUFBUTtnQkFLVyxjQUFjO3NCQUE5QyxZQUFZO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBBZnRlckNvbnRlbnRDaGVja2VkLFxuICAgIE9uSW5pdCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgTmdab25lXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWl4aW5CYXNlLCBUaHlUcmFuc2xhdGUsIG1peGluVW5zdWJzY3JpYmUsIHVzZUhvc3RGb2N1c0NvbnRyb2wgfSBmcm9tICduZ3gtdGV0aHlzL2NvcmUnO1xuaW1wb3J0IHsgdXNlSG9zdFJlbmRlcmVyIH0gZnJvbSAnQHRldGh5cy9jZGsvZG9tJztcbmltcG9ydCB7IFRoeUlucHV0RGlyZWN0aXZlIH0gZnJvbSAnLi9pbnB1dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyB0YWtlVW50aWwsIHRocm90dGxlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGb2N1c09yaWdpbiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcblxuZXhwb3J0IHR5cGUgSW5wdXRHcm91cFNpemUgPSAnc20nIHwgJ2xnJyB8ICdtZCcgfCAnJztcblxuY29uc3QgaW5wdXRHcm91cFNpemVNYXAgPSB7XG4gICAgc206IFsnaW5wdXQtZ3JvdXAtc20nXSxcbiAgICBsZzogWydpbnB1dC1ncm91cC1sZyddLFxuICAgIG1kOiBbJ2lucHV0LWdyb3VwLW1kJ11cbn07XG5cbi8qKlxuICog6L6T5YWl5qGG5YiG57uEXG4gKiBAbmFtZSB0aHktaW5wdXQtZ3JvdXBcbiAqIEBvcmRlciAyMFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3RoeS1pbnB1dC1ncm91cCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2lucHV0LWdyb3VwLmNvbXBvbmVudC5odG1sJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICd0aHktaW5wdXQtZ3JvdXAnLFxuICAgICAgICAnW2NsYXNzLmZvcm0tY29udHJvbF0nOiAncHJlZml4VGVtcGxhdGUgfHwgc3VmZml4VGVtcGxhdGUnLFxuICAgICAgICAnW2NsYXNzLnRoeS1pbnB1dC1ncm91cC13aXRoLXByZWZpeF0nOiAncHJlZml4VGVtcGxhdGUnLFxuICAgICAgICAnW2NsYXNzLnRoeS1pbnB1dC1ncm91cC13aXRoLXN1ZmZpeF0nOiAnc3VmZml4VGVtcGxhdGUnLFxuICAgICAgICAnW2NsYXNzLnRoeS1pbnB1dC1ncm91cC13aXRoLXRleHRhcmVhLXN1ZmZpeF0nOiAnaXNUZXh0YXJlYVN1ZmZpeCcsXG4gICAgICAgICdbY2xhc3MudGh5LWlucHV0LWdyb3VwLXdpdGgtc2Nyb2xsLWJhcl0nOiAnaXNUZXh0YXJlYVN1ZmZpeCAmJiBoYXNTY3JvbGxiYXInXG4gICAgfSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0XVxufSlcbmV4cG9ydCBjbGFzcyBUaHlJbnB1dEdyb3VwIGV4dGVuZHMgbWl4aW5VbnN1YnNjcmliZShNaXhpbkJhc2UpIGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRDaGVja2VkLCBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgaG9zdFJlbmRlcmVyID0gdXNlSG9zdFJlbmRlcmVyKCk7XG5cbiAgICBwcml2YXRlIGhvc3RGb2N1c0NvbnRyb2wgPSB1c2VIb3N0Rm9jdXNDb250cm9sKCk7XG5cbiAgICBwdWJsaWMgYXBwZW5kVGV4dDogc3RyaW5nO1xuXG4gICAgcHVibGljIHByZXBlbmRUZXh0OiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgaXNUZXh0YXJlYVN1ZmZpeDogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBoYXNTY3JvbGxiYXI6IGJvb2xlYW47XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmRpc2FibGVkJykgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOi+k+WFpeahhuS4iua3u+WKoOeahOWQjue9ruaWh+acrFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeUFwcGVuZFRleHQodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLmFwcGVuZFRleHQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDovpPlhaXmoYbkuIrmt7vliqDnmoTlkI7nva7mlofmnKzlpJror63oqIAgS2V5XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5QXBwZW5kVGV4dFRyYW5zbGF0ZUtleSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmRUZXh0ID0gdGhpcy50aHlUcmFuc2xhdGUuaW5zdGFudCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDovpPlhaXmoYbkuIrmt7vliqDnmoTliY3nva7mlofmnKxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlQcmVwZW5kVGV4dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMucHJlcGVuZFRleHQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDovpPlhaXmoYbkuIrmt7vliqDnmoTliY3nva7mlofmnKzlpJror63oqIAgS2V5XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5UHJlcGVuZFRleHRUcmFuc2xhdGVLZXkodmFsdWU6IHN0cmluZykge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMucHJlcGVuZFRleHQgPSB0aGlzLnRoeVRyYW5zbGF0ZS5pbnN0YW50KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOi+k+WFpeahhuWIhue7hOWkp+Wwj1xuICAgICAqIEB0eXBlICdzbScgfCAnbGcnIHwgJ21kJyB8ICcnXG4gICAgICogQGRlZmF1bHQgJydcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlTaXplKHNpemU6IElucHV0R3JvdXBTaXplKSB7XG4gICAgICAgIGlmIChzaXplICYmIGlucHV0R3JvdXBTaXplTWFwW3NpemVdKSB7XG4gICAgICAgICAgICB0aGlzLmhvc3RSZW5kZXJlci51cGRhdGVDbGFzcyhpbnB1dEdyb3VwU2l6ZU1hcFtzaXplXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhvc3RSZW5kZXJlci51cGRhdGVDbGFzcyhbXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlkI7nva7mqKHmnb9cbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKCdhcHBlbmQnKSBhcHBlbmRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgICAvKipcbiAgICAgKiDliY3nva7mqKHmnb9cbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKCdwcmVwZW5kJykgcHJlcGVuZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICAgIC8qKlxuICAgICAqIOWJjee8gFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoJ3ByZWZpeCcpIHByZWZpeFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICAgIC8qKlxuICAgICAqIOWQjue8gFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoJ3N1ZmZpeCcpIHN1ZmZpeFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChUaHlJbnB1dERpcmVjdGl2ZSkgaW5wdXREaXJlY3RpdmU6IFRoeUlucHV0RGlyZWN0aXZlO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSB0aHlUcmFuc2xhdGU6IFRoeVRyYW5zbGF0ZSwgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSwgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuaG9zdEZvY3VzQ29udHJvbC5mb2N1c0NoYW5nZWQgPSAob3JpZ2luOiBGb2N1c09yaWdpbikgPT4ge1xuICAgICAgICAgICAgaWYgKG9yaWdpbikge1xuICAgICAgICAgICAgICAgIHRoaXMuaG9zdFJlbmRlcmVyLmFkZENsYXNzKCdmb3JtLWNvbnRyb2wtYWN0aXZlJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaG9zdFJlbmRlcmVyLnJlbW92ZUNsYXNzKCdmb3JtLWNvbnRyb2wtYWN0aXZlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gISF0aGlzLmlucHV0RGlyZWN0aXZlPy5uYXRpdmVFbGVtZW50Py5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG5cbiAgICAgICAgdGhpcy5pc1RleHRhcmVhU3VmZml4ID0gdGhpcy5pbnB1dERpcmVjdGl2ZT8ubmF0aXZlRWxlbWVudD8udGFnTmFtZSA9PT0gJ1RFWFRBUkVBJztcbiAgICAgICAgaWYgKHRoaXMuaXNUZXh0YXJlYVN1ZmZpeCkge1xuICAgICAgICAgICAgdGhpcy5kZXRlcm1pbmVIYXNTY3JvbGxiYXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZGV0ZXJtaW5lSGFzU2Nyb2xsYmFyKCkge1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyKHRoaXMuaW5wdXREaXJlY3RpdmUubmF0aXZlRWxlbWVudClcbiAgICAgICAgICAgICAgICAucGlwZSh0aHJvdHRsZVRpbWUoMTAwKSwgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSQpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNTY3JvbGxiYXIgPSB0aGlzLmlucHV0RGlyZWN0aXZlLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gdGhpcy5pbnB1dERpcmVjdGl2ZS5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzU2Nyb2xsYmFyICE9PSBoYXNTY3JvbGxiYXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNTY3JvbGxiYXIgPSBoYXNTY3JvbGxiYXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNpemVPYnNlcnZlcihlbGVtZW50OiBIVE1MRWxlbWVudCk6IE9ic2VydmFibGU8UmVzaXplT2JzZXJ2ZXJFbnRyeVtdPiB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgPT09ICd1bmRlZmluZWQnIHx8ICFSZXNpemVPYnNlcnZlclxuICAgICAgICAgICAgPyBvZihudWxsKVxuICAgICAgICAgICAgOiBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXNpemUgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXM6IFJlc2l6ZU9ic2VydmVyRW50cnlbXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoZW50cmllcyk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIHJlc2l6ZS5vYnNlcnZlKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICByZXNpemUuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgICAgIHRoaXMuaG9zdEZvY3VzQ29udHJvbC5kZXN0cm95KCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLXByZXBlbmRcIiAqbmdJZj1cInByZXBlbmRUZXh0XCI+XG4gIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dFwiPnt7IHByZXBlbmRUZXh0IH19PC9zcGFuPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtcHJlcGVuZFwiICpuZ0lmPVwicHJlcGVuZFRlbXBsYXRlXCI+XG4gIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInByZXBlbmRUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLXByZWZpeFwiICpuZ0lmPVwicHJlZml4VGVtcGxhdGVcIj5cbiAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwicHJlZml4VGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuPC9kaXY+XG5cbjxuZy1jb250ZW50PjwvbmctY29udGVudD5cblxuPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWFwcGVuZFwiICpuZ0lmPVwiYXBwZW5kVGV4dFwiPlxuICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHRcIj57eyBhcHBlbmRUZXh0IH19PC9zcGFuPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kXCIgKm5nSWY9XCJhcHBlbmRUZW1wbGF0ZVwiPlxuICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhcHBlbmRUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLXN1ZmZpeFwiICpuZ0lmPVwic3VmZml4VGVtcGxhdGVcIj5cbiAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwic3VmZml4VGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=
162
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2lucHV0L2lucHV0LWdyb3VwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9pbnB1dC9pbnB1dC1ncm91cC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFdBQVcsRUFDWCxLQUFLLEVBQ0wsWUFBWSxFQUNaLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsdUJBQXVCLEVBSXZCLGlCQUFpQixFQUNqQixNQUFNLEVBQ04sTUFBTSxFQUNOLFVBQVUsRUFDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7OztBQUt0QyxNQUFNLGlCQUFpQixHQUFHO0lBQ3RCLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDO0lBQ3RCLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDO0lBQ3RCLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDO0NBQ3pCLENBQUM7QUFFRjs7OztHQUlHO0FBaUJILE1BQU0sT0FBTyxhQUFhO0lBaUJ0Qjs7T0FFRztJQUNILElBQ0ksYUFBYSxDQUFDLEtBQWE7UUFDM0IsSUFB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L0I7d0JBQ0YsS0FBSyxFQUFFLGlCQUFpQjt3QkFDeEIsc0JBQXNCLEVBQUUsa0NBQWtDO3dCQUMxRCxxQ0FBcUMsRUFBRSxnQkFBZ0I7d0JBQ3ZELHFDQUFxQyxFQUFFLGdCQUFnQjt3QkFDdkQsOENBQThDLEVBQUUsa0JBQWtCO3dCQUNsRSx5Q0FBeUMsRUFBRSxrQ0FBa0M7cUJBQ2hGLGNBQ1csSUFBSSxXQUNQLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDO3NJQWlCRixRQUFRO3NCQUF0QyxXQUFXO3VCQUFDLGdCQUFnQjtnQkFNekIsYUFBYTtzQkFEaEIsS0FBSztnQkFTRix5QkFBeUI7c0JBRDVCLEtBQUs7Z0JBV0YsY0FBYztzQkFEakIsS0FBSztnQkFTRiwwQkFBMEI7c0JBRDdCLEtBQUs7Z0JBYUYsT0FBTztzQkFEVixLQUFLO2dCQVlrQixjQUFjO3NCQUFyQyxZQUFZO3VCQUFDLFFBQVE7Z0JBS0csZUFBZTtzQkFBdkMsWUFBWTt1QkFBQyxTQUFTO2dCQUtDLGNBQWM7c0JBQXJDLFlBQVk7dUJBQUMsUUFBUTtnQkFLRSxjQUFjO3NCQUFyQyxZQUFZO3VCQUFDLFFBQVE7Z0JBS1csY0FBYztzQkFBOUMsWUFBWTt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbnB1dCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQWZ0ZXJDb250ZW50Q2hlY2tlZCxcbiAgICBPbkluaXQsXG4gICAgT25EZXN0cm95LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIE5nWm9uZSxcbiAgICBpbmplY3QsXG4gICAgRGVzdHJveVJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRoeVRyYW5zbGF0ZSwgdXNlSG9zdEZvY3VzQ29udHJvbCB9IGZyb20gJ25neC10ZXRoeXMvY29yZSc7XG5pbXBvcnQgeyB1c2VIb3N0UmVuZGVyZXIgfSBmcm9tICdAdGV0aHlzL2Nkay9kb20nO1xuaW1wb3J0IHsgVGh5SW5wdXREaXJlY3RpdmUgfSBmcm9tICcuL2lucHV0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IHRocm90dGxlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGb2N1c09yaWdpbiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcblxuZXhwb3J0IHR5cGUgSW5wdXRHcm91cFNpemUgPSAnc20nIHwgJ2xnJyB8ICdtZCcgfCAnJztcblxuY29uc3QgaW5wdXRHcm91cFNpemVNYXAgPSB7XG4gICAgc206IFsnaW5wdXQtZ3JvdXAtc20nXSxcbiAgICBsZzogWydpbnB1dC1ncm91cC1sZyddLFxuICAgIG1kOiBbJ2lucHV0LWdyb3VwLW1kJ11cbn07XG5cbi8qKlxuICog6L6T5YWl5qGG5YiG57uEXG4gKiBAbmFtZSB0aHktaW5wdXQtZ3JvdXBcbiAqIEBvcmRlciAyMFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3RoeS1pbnB1dC1ncm91cCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2lucHV0LWdyb3VwLmNvbXBvbmVudC5odG1sJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICd0aHktaW5wdXQtZ3JvdXAnLFxuICAgICAgICAnW2NsYXNzLmZvcm0tY29udHJvbF0nOiAncHJlZml4VGVtcGxhdGUgfHwgc3VmZml4VGVtcGxhdGUnLFxuICAgICAgICAnW2NsYXNzLnRoeS1pbnB1dC1ncm91cC13aXRoLXByZWZpeF0nOiAncHJlZml4VGVtcGxhdGUnLFxuICAgICAgICAnW2NsYXNzLnRoeS1pbnB1dC1ncm91cC13aXRoLXN1ZmZpeF0nOiAnc3VmZml4VGVtcGxhdGUnLFxuICAgICAgICAnW2NsYXNzLnRoeS1pbnB1dC1ncm91cC13aXRoLXRleHRhcmVhLXN1ZmZpeF0nOiAnaXNUZXh0YXJlYVN1ZmZpeCcsXG4gICAgICAgICdbY2xhc3MudGh5LWlucHV0LWdyb3VwLXdpdGgtc2Nyb2xsLWJhcl0nOiAnaXNUZXh0YXJlYVN1ZmZpeCAmJiBoYXNTY3JvbGxiYXInXG4gICAgfSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0XVxufSlcbmV4cG9ydCBjbGFzcyBUaHlJbnB1dEdyb3VwIGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRDaGVja2VkLCBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgaG9zdFJlbmRlcmVyID0gdXNlSG9zdFJlbmRlcmVyKCk7XG5cbiAgICBwcml2YXRlIGhvc3RGb2N1c0NvbnRyb2wgPSB1c2VIb3N0Rm9jdXNDb250cm9sKCk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICBwdWJsaWMgYXBwZW5kVGV4dDogc3RyaW5nO1xuXG4gICAgcHVibGljIHByZXBlbmRUZXh0OiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgaXNUZXh0YXJlYVN1ZmZpeDogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBoYXNTY3JvbGxiYXI6IGJvb2xlYW47XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmRpc2FibGVkJykgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOi+k+WFpeahhuS4iua3u+WKoOeahOWQjue9ruaWh+acrFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeUFwcGVuZFRleHQodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLmFwcGVuZFRleHQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDovpPlhaXmoYbkuIrmt7vliqDnmoTlkI7nva7mlofmnKzlpJror63oqIAgS2V5XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5QXBwZW5kVGV4dFRyYW5zbGF0ZUtleSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmRUZXh0ID0gdGhpcy50aHlUcmFuc2xhdGUuaW5zdGFudCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDovpPlhaXmoYbkuIrmt7vliqDnmoTliY3nva7mlofmnKxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlQcmVwZW5kVGV4dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMucHJlcGVuZFRleHQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDovpPlhaXmoYbkuIrmt7vliqDnmoTliY3nva7mlofmnKzlpJror63oqIAgS2V5XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5UHJlcGVuZFRleHRUcmFuc2xhdGVLZXkodmFsdWU6IHN0cmluZykge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMucHJlcGVuZFRleHQgPSB0aGlzLnRoeVRyYW5zbGF0ZS5pbnN0YW50KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOi+k+WFpeahhuWIhue7hOWkp+Wwj1xuICAgICAqIEB0eXBlICdzbScgfCAnbGcnIHwgJ21kJyB8ICcnXG4gICAgICogQGRlZmF1bHQgJydcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlTaXplKHNpemU6IElucHV0R3JvdXBTaXplKSB7XG4gICAgICAgIGlmIChzaXplICYmIGlucHV0R3JvdXBTaXplTWFwW3NpemVdKSB7XG4gICAgICAgICAgICB0aGlzLmhvc3RSZW5kZXJlci51cGRhdGVDbGFzcyhpbnB1dEdyb3VwU2l6ZU1hcFtzaXplXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhvc3RSZW5kZXJlci51cGRhdGVDbGFzcyhbXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlkI7nva7mqKHmnb9cbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKCdhcHBlbmQnKSBhcHBlbmRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgICAvKipcbiAgICAgKiDliY3nva7mqKHmnb9cbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKCdwcmVwZW5kJykgcHJlcGVuZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICAgIC8qKlxuICAgICAqIOWJjee8gFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoJ3ByZWZpeCcpIHByZWZpeFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICAgIC8qKlxuICAgICAqIOWQjue8gFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoJ3N1ZmZpeCcpIHN1ZmZpeFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChUaHlJbnB1dERpcmVjdGl2ZSkgaW5wdXREaXJlY3RpdmU6IFRoeUlucHV0RGlyZWN0aXZlO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSB0aHlUcmFuc2xhdGU6IFRoeVRyYW5zbGF0ZSwgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSwgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuaG9zdEZvY3VzQ29udHJvbC5mb2N1c0NoYW5nZWQgPSAob3JpZ2luOiBGb2N1c09yaWdpbikgPT4ge1xuICAgICAgICAgICAgaWYgKG9yaWdpbikge1xuICAgICAgICAgICAgICAgIHRoaXMuaG9zdFJlbmRlcmVyLmFkZENsYXNzKCdmb3JtLWNvbnRyb2wtYWN0aXZlJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaG9zdFJlbmRlcmVyLnJlbW92ZUNsYXNzKCdmb3JtLWNvbnRyb2wtYWN0aXZlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gISF0aGlzLmlucHV0RGlyZWN0aXZlPy5uYXRpdmVFbGVtZW50Py5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG5cbiAgICAgICAgdGhpcy5pc1RleHRhcmVhU3VmZml4ID0gdGhpcy5pbnB1dERpcmVjdGl2ZT8ubmF0aXZlRWxlbWVudD8udGFnTmFtZSA9PT0gJ1RFWFRBUkVBJztcbiAgICAgICAgaWYgKHRoaXMuaXNUZXh0YXJlYVN1ZmZpeCkge1xuICAgICAgICAgICAgdGhpcy5kZXRlcm1pbmVIYXNTY3JvbGxiYXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZGV0ZXJtaW5lSGFzU2Nyb2xsYmFyKCkge1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyKHRoaXMuaW5wdXREaXJlY3RpdmUubmF0aXZlRWxlbWVudClcbiAgICAgICAgICAgICAgICAucGlwZSh0aHJvdHRsZVRpbWUoMTAwKSwgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc1Njcm9sbGJhciA9IHRoaXMuaW5wdXREaXJlY3RpdmUubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQgPiB0aGlzLmlucHV0RGlyZWN0aXZlLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNTY3JvbGxiYXIgIT09IGhhc1Njcm9sbGJhcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc1Njcm9sbGJhciA9IGhhc1Njcm9sbGJhcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2l6ZU9ic2VydmVyKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogT2JzZXJ2YWJsZTxSZXNpemVPYnNlcnZlckVudHJ5W10+IHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBSZXNpemVPYnNlcnZlciA9PT0gJ3VuZGVmaW5lZCcgfHwgIVJlc2l6ZU9ic2VydmVyXG4gICAgICAgICAgICA/IG9mKG51bGwpXG4gICAgICAgICAgICA6IG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc2l6ZSA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllczogUmVzaXplT2JzZXJ2ZXJFbnRyeVtdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChlbnRyaWVzKTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgcmVzaXplLm9ic2VydmUoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHJlc2l6ZS5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5ob3N0Rm9jdXNDb250cm9sLmRlc3Ryb3koKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtcHJlcGVuZFwiICpuZ0lmPVwicHJlcGVuZFRleHRcIj5cbiAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC10ZXh0XCI+e3sgcHJlcGVuZFRleHQgfX08L3NwYW4+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1wcmVwZW5kXCIgKm5nSWY9XCJwcmVwZW5kVGVtcGxhdGVcIj5cbiAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwicHJlcGVuZFRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtcHJlZml4XCIgKm5nSWY9XCJwcmVmaXhUZW1wbGF0ZVwiPlxuICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwcmVmaXhUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG48L2Rpdj5cblxuPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuXG48ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kXCIgKm5nSWY9XCJhcHBlbmRUZXh0XCI+XG4gIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dFwiPnt7IGFwcGVuZFRleHQgfX08L3NwYW4+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1hcHBlbmRcIiAqbmdJZj1cImFwcGVuZFRlbXBsYXRlXCI+XG4gIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cImFwcGVuZFRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtc3VmZml4XCIgKm5nSWY9XCJzdWZmaXhUZW1wbGF0ZVwiPlxuICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdWZmaXhUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbiJdfQ==