ngx-tethys 18.2.15 → 18.2.17

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.
@@ -14,6 +14,7 @@ import { ThyTooltipDirective } from 'ngx-tethys/tooltip';
14
14
  import { getClientSize, getFitContentPosition, getOffset, helpers, humanizeBytes, isNumber, isUndefinedOrNull } from 'ngx-tethys/util';
15
15
  import { Observable, fromEvent } from 'rxjs';
16
16
  import { fetchImageBlob } from '../utils';
17
+ import { injectLocale } from 'ngx-tethys/i18n';
17
18
  import * as i0 from "@angular/core";
18
19
  const initialPosition = {
19
20
  x: 0,
@@ -37,6 +38,7 @@ export class ThyImagePreview {
37
38
  this.notifyService = inject(ThyNotifyService);
38
39
  this.host = inject(ElementRef);
39
40
  this.sanitizer = inject(DomSanitizer);
41
+ this.locale = injectLocale('image');
40
42
  this.downloadClicked = new EventEmitter();
41
43
  this.destroyRef = inject(DestroyRef);
42
44
  this.images = [];
@@ -54,7 +56,7 @@ export class ThyImagePreview {
54
56
  this.defaultPreviewOperations = [
55
57
  {
56
58
  icon: 'zoom-out',
57
- name: '缩小',
59
+ name: this.locale().zoomOut,
58
60
  action: (image) => {
59
61
  this.zoomOut();
60
62
  },
@@ -62,7 +64,7 @@ export class ThyImagePreview {
62
64
  },
63
65
  {
64
66
  icon: 'zoom-in',
65
- name: '放大',
67
+ name: this.locale().zoomIn,
66
68
  action: (image) => {
67
69
  this.zoomIn();
68
70
  },
@@ -70,7 +72,7 @@ export class ThyImagePreview {
70
72
  },
71
73
  {
72
74
  icon: 'one-to-one',
73
- name: '原始比例',
75
+ name: this.locale().originalSize,
74
76
  action: (image) => {
75
77
  this.setOriginalSize();
76
78
  },
@@ -78,7 +80,7 @@ export class ThyImagePreview {
78
80
  },
79
81
  {
80
82
  icon: 'max-view',
81
- name: '适应屏幕',
83
+ name: this.locale().fitToScreen,
82
84
  action: () => {
83
85
  this.setFitScreen();
84
86
  },
@@ -86,7 +88,7 @@ export class ThyImagePreview {
86
88
  },
87
89
  {
88
90
  icon: 'expand-arrows',
89
- name: '全屏显示',
91
+ name: this.locale().fullScreen,
90
92
  action: () => {
91
93
  this.fullScreen();
92
94
  },
@@ -94,7 +96,7 @@ export class ThyImagePreview {
94
96
  },
95
97
  {
96
98
  icon: 'rotate-right',
97
- name: '旋转',
99
+ name: this.locale().spin,
98
100
  action: (image) => {
99
101
  this.rotateRight();
100
102
  },
@@ -102,7 +104,7 @@ export class ThyImagePreview {
102
104
  },
103
105
  {
104
106
  icon: 'download',
105
- name: '下载',
107
+ name: this.locale().download,
106
108
  action: (image) => {
107
109
  this.download(image);
108
110
  },
@@ -110,7 +112,7 @@ export class ThyImagePreview {
110
112
  },
111
113
  {
112
114
  icon: 'preview',
113
- name: '查看原图',
115
+ name: this.locale().viewOriginal,
114
116
  action: () => {
115
117
  this.viewOriginal();
116
118
  },
@@ -118,7 +120,7 @@ export class ThyImagePreview {
118
120
  },
119
121
  {
120
122
  icon: 'link-insert',
121
- name: '复制链接',
123
+ name: this.locale().copyLink,
122
124
  type: 'copyLink'
123
125
  }
124
126
  ];
@@ -338,10 +340,10 @@ export class ThyImagePreview {
338
340
  }
339
341
  copyLink(event) {
340
342
  if (event.isSuccess) {
341
- this.notifyService.success('复制图片地址成功');
343
+ this.notifyService.success(this.locale().copySuccess);
342
344
  }
343
345
  else {
344
- this.notifyService.error('复制图片地址失败');
346
+ this.notifyService.error(this.locale().copyError);
345
347
  }
346
348
  }
347
349
  prev() {
@@ -393,14 +395,14 @@ export class ThyImagePreview {
393
395
  this.previewImageWrapperTransform = `translate3d(${this.position.x}px, ${this.position.y}px, 0)`;
394
396
  }
395
397
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ThyImagePreview, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
396
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", 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 @if (!isFullScreen) {\n <div class=\"thy-image-preview-header pl-10 pr-8\">\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 }\n @if (isFullScreen) {\n <a\n class=\"thy-image-preview-exit-fullscreen\"\n thyAction\n thyIcon=\"close\"\n thyTooltip=\"\u9000\u51FA\u9884\u89C8\"\n href=\"javascript:;\"\n (click)=\"thyFullscreen.exit()\"\n thyTooltip=\"\u9000\u51FA\u5168\u5C4F\"></a>\n }\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 @for (image of images; track $index; let imageIndex = $index) {\n @if (previewIndex === imageIndex && isLoadingDone) {\n <img #imgRef class=\"thy-image-preview-img\" [src]=\"image.objectURL || image.src\" [style.transform]=\"previewImageTransform\" />\n }\n }\n <thy-loading [thyDone]=\"isLoadingDone\"></thy-loading>\n </div>\n\n @if (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 <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 <thy-icon thyIconName=\"angle-right-bold\"> </thy-icon>\n </div>\n }\n @if (!isFullScreen) {\n <thy-actions thySize=\"xs\" class=\"thy-image-preview-operations py-3 px-4\">\n @for (option of previewOperations; track $index; let i = $index) {\n @if (!['original-scale', 'fit-screen', 'copyLink'].includes(option.type) || currentImageMode === option.type) {\n <a\n href=\"javascript:;\"\n thyAction\n [thyActionIcon]=\"option.icon\"\n [thyTooltip]=\"option.name\"\n [thyTooltipOffset]=\"13\"\n (click)=\"option.action(previewImage)\"></a>\n }\n @if (option?.type === 'zoom-out') {\n <span class=\"mr-2\"> {{ (zoom * 100).toFixed(0) + '%' }} </span>\n }\n @if (option?.type === 'rotate-right') {\n <thy-divider class=\"ml-2\" [thyVertical]=\"true\"></thy-divider>\n }\n @if (option.type === 'copyLink') {\n <a\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\"></a>\n }\n }\n <thy-divider [thyVertical]=\"true\"></thy-divider>\n <span class=\"thy-image-preview-operations-text\"> {{ previewIndex + 1 }} / {{ images.length }} </span>\n </thy-actions>\n }\n</div>\n", dependencies: [{ 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", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { 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
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", 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 @if (!isFullScreen) {\n <div class=\"thy-image-preview-header pl-10 pr-8\">\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]=\"locale().exitPreview\" href=\"javascript:;\" (click)=\"thyDialog.close()\"></a>\n </div>\n }\n @if (isFullScreen) {\n <a\n class=\"thy-image-preview-exit-fullscreen\"\n thyAction\n thyIcon=\"close\"\n href=\"javascript:;\"\n (click)=\"thyFullscreen.exit()\"\n [thyTooltip]=\"locale().exitFullScreen\"></a>\n }\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 @for (image of images; track $index; let imageIndex = $index) {\n @if (previewIndex === imageIndex && isLoadingDone) {\n <img #imgRef class=\"thy-image-preview-img\" [src]=\"image.objectURL || image.src\" [style.transform]=\"previewImageTransform\" />\n }\n }\n <thy-loading [thyDone]=\"isLoadingDone\"></thy-loading>\n </div>\n\n @if (images.length > 1 && !isFullScreen) {\n <div\n class=\"thy-image-preview-switch-left\"\n [thyTooltipDisabled]=\"previewIndex <= 0\"\n [thyTooltip]=\"locale().prev\"\n [class.thy-image-preview-switch-left-disabled]=\"previewIndex <= 0\"\n (click)=\"prev()\">\n <thy-icon thyIconName=\"angle-left-bold\"></thy-icon>\n </div>\n <div\n class=\"thy-image-preview-switch-right\"\n [thyTooltip]=\"locale().next\"\n [thyTooltipDisabled]=\"previewIndex >= images.length - 1\"\n [class.thy-image-preview-switch-right-disabled]=\"previewIndex >= images.length - 1\"\n (click)=\"next()\">\n <thy-icon thyIconName=\"angle-right-bold\"> </thy-icon>\n </div>\n }\n @if (!isFullScreen) {\n <thy-actions thySize=\"xs\" class=\"thy-image-preview-operations py-3 px-4\">\n @for (option of previewOperations; track $index; let i = $index) {\n @if (!['original-scale', 'fit-screen', 'copyLink'].includes(option.type) || currentImageMode === option.type) {\n <a\n href=\"javascript:;\"\n thyAction\n [thyActionIcon]=\"option.icon\"\n [thyTooltip]=\"option.name\"\n [thyTooltipOffset]=\"13\"\n (click)=\"option.action(previewImage)\"></a>\n }\n @if (option?.type === 'zoom-out') {\n <span class=\"mr-2\"> {{ (zoom * 100).toFixed(0) + '%' }} </span>\n }\n @if (option?.type === 'rotate-right') {\n <thy-divider class=\"ml-2\" [thyVertical]=\"true\"></thy-divider>\n }\n @if (option.type === 'copyLink') {\n <a\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\"></a>\n }\n }\n <thy-divider [thyVertical]=\"true\"></thy-divider>\n <span class=\"thy-image-preview-operations-text\"> {{ previewIndex + 1 }} / {{ images.length }} </span>\n </thy-actions>\n }\n</div>\n", dependencies: [{ 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", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { 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 }); }
397
399
  }
398
400
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ThyImagePreview, decorators: [{
399
401
  type: Component,
400
402
  args: [{ selector: 'thy-image-preview', exportAs: 'thyImagePreview', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
401
403
  class: 'thy-image-preview-wrap',
402
404
  '[class.thy-image-preview-moving]': 'isDragging'
403
- }, standalone: true, imports: [ThyTooltipDirective, ThyAction, CdkDrag, ThyLoading, ThyIcon, ThyActions, ThyDivider, ThyCopyDirective], template: "<div class=\"thy-image-preview\" [class.thy-image-preview-fullscreen]=\"isFullScreen\">\n @if (!isFullScreen) {\n <div class=\"thy-image-preview-header pl-10 pr-8\">\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 }\n @if (isFullScreen) {\n <a\n class=\"thy-image-preview-exit-fullscreen\"\n thyAction\n thyIcon=\"close\"\n thyTooltip=\"\u9000\u51FA\u9884\u89C8\"\n href=\"javascript:;\"\n (click)=\"thyFullscreen.exit()\"\n thyTooltip=\"\u9000\u51FA\u5168\u5C4F\"></a>\n }\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 @for (image of images; track $index; let imageIndex = $index) {\n @if (previewIndex === imageIndex && isLoadingDone) {\n <img #imgRef class=\"thy-image-preview-img\" [src]=\"image.objectURL || image.src\" [style.transform]=\"previewImageTransform\" />\n }\n }\n <thy-loading [thyDone]=\"isLoadingDone\"></thy-loading>\n </div>\n\n @if (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 <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 <thy-icon thyIconName=\"angle-right-bold\"> </thy-icon>\n </div>\n }\n @if (!isFullScreen) {\n <thy-actions thySize=\"xs\" class=\"thy-image-preview-operations py-3 px-4\">\n @for (option of previewOperations; track $index; let i = $index) {\n @if (!['original-scale', 'fit-screen', 'copyLink'].includes(option.type) || currentImageMode === option.type) {\n <a\n href=\"javascript:;\"\n thyAction\n [thyActionIcon]=\"option.icon\"\n [thyTooltip]=\"option.name\"\n [thyTooltipOffset]=\"13\"\n (click)=\"option.action(previewImage)\"></a>\n }\n @if (option?.type === 'zoom-out') {\n <span class=\"mr-2\"> {{ (zoom * 100).toFixed(0) + '%' }} </span>\n }\n @if (option?.type === 'rotate-right') {\n <thy-divider class=\"ml-2\" [thyVertical]=\"true\"></thy-divider>\n }\n @if (option.type === 'copyLink') {\n <a\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\"></a>\n }\n }\n <thy-divider [thyVertical]=\"true\"></thy-divider>\n <span class=\"thy-image-preview-operations-text\"> {{ previewIndex + 1 }} / {{ images.length }} </span>\n </thy-actions>\n }\n</div>\n" }]
405
+ }, standalone: true, imports: [ThyTooltipDirective, ThyAction, CdkDrag, ThyLoading, ThyIcon, ThyActions, ThyDivider, ThyCopyDirective], template: "<div class=\"thy-image-preview\" [class.thy-image-preview-fullscreen]=\"isFullScreen\">\n @if (!isFullScreen) {\n <div class=\"thy-image-preview-header pl-10 pr-8\">\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]=\"locale().exitPreview\" href=\"javascript:;\" (click)=\"thyDialog.close()\"></a>\n </div>\n }\n @if (isFullScreen) {\n <a\n class=\"thy-image-preview-exit-fullscreen\"\n thyAction\n thyIcon=\"close\"\n href=\"javascript:;\"\n (click)=\"thyFullscreen.exit()\"\n [thyTooltip]=\"locale().exitFullScreen\"></a>\n }\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 @for (image of images; track $index; let imageIndex = $index) {\n @if (previewIndex === imageIndex && isLoadingDone) {\n <img #imgRef class=\"thy-image-preview-img\" [src]=\"image.objectURL || image.src\" [style.transform]=\"previewImageTransform\" />\n }\n }\n <thy-loading [thyDone]=\"isLoadingDone\"></thy-loading>\n </div>\n\n @if (images.length > 1 && !isFullScreen) {\n <div\n class=\"thy-image-preview-switch-left\"\n [thyTooltipDisabled]=\"previewIndex <= 0\"\n [thyTooltip]=\"locale().prev\"\n [class.thy-image-preview-switch-left-disabled]=\"previewIndex <= 0\"\n (click)=\"prev()\">\n <thy-icon thyIconName=\"angle-left-bold\"></thy-icon>\n </div>\n <div\n class=\"thy-image-preview-switch-right\"\n [thyTooltip]=\"locale().next\"\n [thyTooltipDisabled]=\"previewIndex >= images.length - 1\"\n [class.thy-image-preview-switch-right-disabled]=\"previewIndex >= images.length - 1\"\n (click)=\"next()\">\n <thy-icon thyIconName=\"angle-right-bold\"> </thy-icon>\n </div>\n }\n @if (!isFullScreen) {\n <thy-actions thySize=\"xs\" class=\"thy-image-preview-operations py-3 px-4\">\n @for (option of previewOperations; track $index; let i = $index) {\n @if (!['original-scale', 'fit-screen', 'copyLink'].includes(option.type) || currentImageMode === option.type) {\n <a\n href=\"javascript:;\"\n thyAction\n [thyActionIcon]=\"option.icon\"\n [thyTooltip]=\"option.name\"\n [thyTooltipOffset]=\"13\"\n (click)=\"option.action(previewImage)\"></a>\n }\n @if (option?.type === 'zoom-out') {\n <span class=\"mr-2\"> {{ (zoom * 100).toFixed(0) + '%' }} </span>\n }\n @if (option?.type === 'rotate-right') {\n <thy-divider class=\"ml-2\" [thyVertical]=\"true\"></thy-divider>\n }\n @if (option.type === 'copyLink') {\n <a\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\"></a>\n }\n }\n <thy-divider [thyVertical]=\"true\"></thy-divider>\n <span class=\"thy-image-preview-operations-text\"> {{ previewIndex + 1 }} / {{ images.length }} </span>\n </thy-actions>\n }\n</div>\n" }]
404
406
  }], propDecorators: { downloadClicked: [{
405
407
  type: Output
406
408
  }], imageRef: [{
@@ -410,4 +412,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
410
412
  type: ViewChild,
411
413
  args: ['imagePreviewWrapper', { static: true }]
412
414
  }] } });
413
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtcHJldmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvaW1hZ2UvcHJldmlldy9pbWFnZS1wcmV2aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9pbWFnZS9wcmV2aWV3L2ltYWdlLXByZXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRWpELE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBRU4sTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsTUFBTSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFELE9BQU8sRUFBRSxnQkFBZ0IsRUFBZ0IsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9C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QkFBeEIsTUFBTTtnQkFzSGlDLFFBQVE7c0JBQS9DLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDYyxtQkFBbUI7c0JBQXRFLFNBQVM7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrRHJhZyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuXG5pbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBEZXN0cm95UmVmLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIE5nWm9uZSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBpbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IFRoeUFjdGlvbiwgVGh5QWN0aW9ucyB9IGZyb20gJ25neC10ZXRoeXMvYWN0aW9uJztcbmltcG9ydCB7IFRoeUNvcHlEaXJlY3RpdmUsIFRoeUNvcHlFdmVudCB9IGZyb20gJ25neC10ZXRoeXMvY29weSc7XG5pbXBvcnQgeyBUaHlEaWFsb2cgfSBmcm9tICduZ3gtdGV0aHlzL2RpYWxvZyc7XG5pbXBvcnQgeyBUaHlEaXZpZGVyIH0gZnJvbSAnbmd4LXRldGh5cy9kaXZpZGVyJztcbmltcG9ydCB7IFRoeUZ1bGxzY3JlZW4gfSBmcm9tICduZ3gtdGV0aHlzL2Z1bGxzY3JlZW4nO1xuaW1wb3J0IHsgVGh5SWNvbiB9IGZyb20gJ25neC10ZXRoeXMvaWNvbic7XG5pbXBvcnQgeyBUaHlMb2FkaW5nIH0gZnJvbSAnbmd4LXRldGh5cy9sb2FkaW5nJztcbmltcG9ydCB7IFRoeU5vdGlmeVNlcnZpY2UgfSBmcm9tICduZ3gtdGV0aHlzL25vdGlmeSc7XG5pbXBvcnQgeyBUaHlUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnbmd4LXRldGh5cy90b29sdGlwJztcbmltcG9ydCB7IGdldENsaWVudFNpemUsIGdldEZpdENvbnRlbnRQb3NpdGlvbiwgZ2V0T2Zmc2V0LCBoZWxwZXJzLCBodW1hbml6ZUJ5dGVzLCBpc051bWJlciwgaXNVbmRlZmluZWRPck51bGwgfSBmcm9tICduZ3gtdGV0aHlzL3V0aWwnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJbnRlcm5hbEltYWdlSW5mbywgVGh5SW1hZ2VJbmZvLCBUaHlJbWFnZVByZXZpZXdNb2RlLCBUaHlJbWFnZVByZXZpZXdPcGVyYXRpb24sIFRoeUltYWdlUHJldmlld09wdGlvbnMgfSBmcm9tICcuLi9pbWFnZS5jbGFzcyc7XG5pbXBvcnQgeyBmZXRjaEltYWdlQmxvYiB9IGZyb20gJy4uL3V0aWxzJztcblxuY29uc3QgaW5pdGlhbFBvc2l0aW9uID0ge1xuICAgIHg6IDAsXG4gICAgeTogMFxufTtcbmNvbnN0IElNQUdFX01BWF9aT09NID0gMztcbmNvbnN0IElNQUdFX01JTl9aT09NID0gMC4xO1xuY29uc3QgSE9SSVpPTlRBTF9TUEFDRSA9IDEwMCAqIDI7IC8vIGxlZnQ6IDEwMHB4OyByaWdodDogMTAwcHhcbmNvbnN0IFZFUlRJQ0FMX1NQQUNFID0gOTYgKyAxMDY7IC8vIHRvcDogOTZweDsgYm90dG9tOiAxMDZweFxuXG4vKipcbiAqIOWbvueJh+mihOiniOe7hOS7tlxuICogQG5hbWUgdGh5LWltYWdlLXByZXZpZXdcbiAqIEBvcmRlciAyMFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3RoeS1pbWFnZS1wcmV2aWV3JyxcbiAgICBleHBvcnRBczogJ3RoeUltYWdlUHJldmlldycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ltYWdlLXByZXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ3RoeS1pbWFnZS1wcmV2aWV3LXdyYXAnLFxuICAgICAgICAnW2NsYXNzLnRoeS1pbWFnZS1wcmV2aWV3LW1vdmluZ10nOiAnaXNEcmFnZ2luZydcbiAgICB9LFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1RoeVRvb2x0aXBEaXJlY3RpdmUsIFRoeUFjdGlvbiwgQ2RrRHJhZywgVGh5TG9hZGluZywgVGh5SWNvbiwgVGh5QWN0aW9ucywgVGh5RGl2aWRlciwgVGh5Q29weURpcmVjdGl2ZV1cbn0pXG5leHBvcnQgY2xhc3MgVGh5SW1hZ2VQcmV2aWV3IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICB0aHlEaWFsb2cgPSBpbmplY3QoVGh5RGlhbG9nKTtcbiAgICB0aHlGdWxsc2NyZWVuID0gaW5qZWN0KFRoeUZ1bGxzY3JlZW4pO1xuICAgIHByaXZhdGUgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgICBwcml2YXRlIG5nWm9uZSA9IGluamVjdChOZ1pvbmUpO1xuICAgIHByaXZhdGUgbm90aWZ5U2VydmljZSA9IGluamVjdChUaHlOb3RpZnlTZXJ2aWNlKTtcbiAgICBwcml2YXRlIGhvc3QgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpO1xuICAgIHByaXZhdGUgc2FuaXRpemVyID0gaW5qZWN0KERvbVNhbml0aXplcik7XG5cbiAgICBAT3V0cHV0KCkgZG93bmxvYWRDbGlja2VkOiBFdmVudEVtaXR0ZXI8VGh5SW1hZ2VJbmZvPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIGltYWdlczogSW50ZXJuYWxJbWFnZUluZm9bXSA9IFtdO1xuICAgIHByZXZpZXdJbmRleDogbnVtYmVyID0gMDtcbiAgICBwcmV2aWV3Q29uZmlnOiBUaHlJbWFnZVByZXZpZXdPcHRpb25zO1xuICAgIHByZXZpZXdJbWFnZVRyYW5zZm9ybSA9ICcnO1xuICAgIHByZXZpZXdJbWFnZVdyYXBwZXJUcmFuc2Zvcm0gPSAnJztcbiAgICB6b29tRGlzYWJsZWQgPSBmYWxzZTtcbiAgICB6b29tOiBudW1iZXIgPSAxO1xuICAgIHBvc2l0aW9uID0geyAuLi5pbml0aWFsUG9zaXRpb24gfTtcbiAgICBpc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgaXNMb2FkaW5nRG9uZSA9IGZhbHNlO1xuICAgIGlzRnVsbFNjcmVlbiA9IGZhbHNlO1xuICAgIGlzSW5zaWRlU2NyZWVuID0gdHJ1ZTtcbiAgICBjdXJyZW50SW1hZ2VNb2RlOiBUaHlJbWFnZVByZXZpZXdNb2RlID0gJ29yaWdpbmFsLXNjYWxlJztcbiAgICBwcmV2aWV3T3BlcmF0aW9uczogVGh5SW1hZ2VQcmV2aWV3T3BlcmF0aW9uW107XG4gICAgZGVmYXVsdFByZXZpZXdPcGVyYXRpb25zOiBUaHlJbWFnZVByZXZpZXdPcGVyYXRpb25bXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgICAgaWNvbjogJ3pvb20tb3V0JyxcbiAgICAgICAgICAgIG5hbWU6ICfnvKnlsI8nLFxuICAgICAgICAgICAgYWN0aW9uOiAoaW1hZ2U6IFRoeUltYWdlSW5mbykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuem9vbU91dCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHR5cGU6ICd6b29tLW91dCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgaWNvbjogJ3pvb20taW4nLFxuICAgICAgICAgICAgbmFtZTogJ+aUvuWkpycsXG4gICAgICAgICAgICBhY3Rpb246IChpbWFnZTogVGh5SW1hZ2VJbmZvKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy56b29tSW4oKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eXBlOiAnem9vbS1pbidcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgaWNvbjogJ29uZS10by1vbmUnLFxuICAgICAgICAgICAgbmFtZTogJ+WOn+Wni+avlOS+iycsXG4gICAgICAgICAgICBhY3Rpb246IChpbWFnZTogVGh5SW1hZ2VJbmZvKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRPcmlnaW5hbFNpemUoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eXBlOiAnb3JpZ2luYWwtc2NhbGUnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGljb246ICdtYXgtdmlldycsXG4gICAgICAgICAgICBuYW1lOiAn6YCC5bqU5bGP5bmVJyxcbiAgICAgICAgICAgIGFjdGlvbjogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Rml0U2NyZWVuKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHlwZTogJ2ZpdC1zY3JlZW4nXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGljb246ICdleHBhbmQtYXJyb3dzJyxcbiAgICAgICAgICAgIG5hbWU6ICflhajlsY/mmL7npLonLFxuICAgICAgICAgICAgYWN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5mdWxsU2NyZWVuKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHlwZTogJ2Z1bGwtc2NyZWVuJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBpY29uOiAncm90YXRlLXJpZ2h0JyxcbiAgICAgICAgICAgIG5hbWU6ICfml4vovawnLFxuICAgICAgICAgICAgYWN0aW9uOiAoaW1hZ2U6IFRoeUltYWdlSW5mbykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucm90YXRlUmlnaHQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eXBlOiAncm90YXRlLXJpZ2h0J1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBpY29uOiAnZG93bmxvYWQnLFxuICAgICAgICAgICAgbmFtZTogJ+S4i+i9vScsXG4gICAgICAgICAgICBhY3Rpb246IChpbWFnZTogVGh5SW1hZ2VJbmZvKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kb3dubG9hZChpbWFnZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHlwZTogJ2Rvd25sb2FkJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBpY29uOiAncHJldmlldycsXG4gICAgICAgICAgICBuYW1lOiAn5p+l55yL5Y6f5Zu+JyxcbiAgICAgICAgICAgIGFjdGlvbjogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudmlld09yaWdpbmFsKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHlwZTogJ3ZpZXctb3JpZ2luYWwnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGljb246ICdsaW5rLWluc2VydCcsXG4gICAgICAgICAgICBuYW1lOiAn5aSN5Yi26ZO+5o6lJyxcbiAgICAgICAgICAgIHR5cGU6ICdjb3B5TGluaydcbiAgICAgICAgfVxuICAgIF07XG5cbiAgICBwcml2YXRlIHJvdGF0ZTogbnVtYmVyO1xuXG4gICAgZ2V0IHByZXZpZXdJbWFnZSgpOiBJbnRlcm5hbEltYWdlSW5mbyB7XG4gICAgICAgIGNvbnN0IGltYWdlID0gdGhpcy5pbWFnZXNbdGhpcy5wcmV2aWV3SW5kZXhdO1xuICAgICAgICBpZiAoaW1hZ2Uuc2l6ZSkge1xuICAgICAgICAgICAgaW1hZ2Uuc2l6ZSA9IGlzTnVtYmVyKGltYWdlLnNpemUpID8gaHVtYW5pemVCeXRlcyhpbWFnZS5zaXplKSA6IGltYWdlLnNpemU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGltYWdlO1xuICAgIH1cblxuICAgIGdldCBwcmV2aWV3SW1hZ2VPcmlnaW5TcmMoKSB7XG4gICAgICAgIGxldCBpbWFnZVNyYyA9IHRoaXMucHJldmlld0ltYWdlLm9yaWdpbj8uc3JjIHx8IHRoaXMucHJldmlld0ltYWdlLnNyYztcbiAgICAgICAgaWYgKGltYWdlU3JjLnN0YXJ0c1dpdGgoJy4vJykpIHtcbiAgICAgICAgICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24uaG9zdCArICcvJyArIGltYWdlU3JjLnNwbGl0KCcuLycpWzFdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbWFnZVNyYztcbiAgICB9XG5cbiAgICBnZXQgZGVmYXVsdFpvb20oKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMucHJldmlld0NvbmZpZz8uem9vbSAmJiB0aGlzLnByZXZpZXdDb25maWc/Lnpvb20gPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcmV2aWV3Q29uZmlnLnpvb20gPj0gSU1BR0VfTUFYX1pPT01cbiAgICAgICAgICAgICAgICA/IElNQUdFX01BWF9aT09NXG4gICAgICAgICAgICAgICAgOiB0aGlzLnByZXZpZXdDb25maWcuem9vbSA8PSBJTUFHRV9NSU5fWk9PTVxuICAgICAgICAgICAgICAgICAgPyBJTUFHRV9NSU5fWk9PTVxuICAgICAgICAgICAgICAgICAgOiB0aGlzLnByZXZpZXdDb25maWcuem9vbTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBWaWV3Q2hpbGQoJ2ltZ1JlZicsIHsgc3RhdGljOiBmYWxzZSB9KSBpbWFnZVJlZiE6IEVsZW1lbnRSZWY8SFRNTEltYWdlRWxlbWVudD47XG4gICAgQFZpZXdDaGlsZCgnaW1hZ2VQcmV2aWV3V3JhcHBlcicsIHsgc3RhdGljOiB0cnVlIH0pIGltYWdlUHJldmlld1dyYXBwZXIhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluaXRQcmV2aWV3KCk7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIGZyb21FdmVudCh0aGlzLmhvc3QubmF0aXZlRWxlbWVudCwgJ2NsaWNrJylcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgKGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmlzSW5zaWRlU2NyZWVuICYmIHRoaXMuaW1hZ2VQcmV2aWV3V3JhcHBlci5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMucHJldmlld0NvbmZpZz8uZGlzYWJsZUNsb3NlXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+ICF0aGlzLmlzRnVsbFNjcmVlbiAmJiB0aGlzLnRoeURpYWxvZy5jbG9zZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBmcm9tRXZlbnQodGhpcy5pbWFnZVByZXZpZXdXcmFwcGVyLm5hdGl2ZUVsZW1lbnQsICdtb3VzZWRvd24nKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRHJhZ2dpbmcgPSAhdGhpcy5pc0luc2lkZVNjcmVlbiAmJiB0cnVlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXRPcmlnaW5hbFNpemUoKSB7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgdGhpcy5jdXJyZW50SW1hZ2VNb2RlID0gJ2ZpdC1zY3JlZW4nO1xuICAgICAgICB0aGlzLnpvb20gPSAxO1xuICAgICAgICB0aGlzLnVwZGF0ZVByZXZpZXdJbWFnZVRyYW5zZm9ybSgpO1xuICAgICAgICB0aGlzLmNhbGN1bGF0ZUluc2lkZVNjcmVlbigpO1xuICAgICAgICB0aGlzLmlzTG9hZGluZ0RvbmUgPSB0cnVlO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgc2V0Rml0U2NyZWVuKCkge1xuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgIHRoaXMuaXNJbnNpZGVTY3JlZW4gPSB0cnVlO1xuICAgICAgICB0aGlzLnVwZGF0ZVByZXZpZXdJbWFnZSgpO1xuICAgIH1cblxuICAgIHVzZURlZmF1bHRab29tVXBkYXRlKGlzVXBkYXRlSW1hZ2VXcmFwcGVyOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuem9vbSA9IHRoaXMuZGVmYXVsdFpvb207XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nRG9uZSA9IHRydWU7XG4gICAgICAgIHRoaXMudXBkYXRlUHJldmlld0ltYWdlVHJhbnNmb3JtKCk7XG4gICAgICAgIGlmIChpc1VwZGF0ZUltYWdlV3JhcHBlcikge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQcmV2aWV3SW1hZ2VXcmFwcGVyVHJhbnNmb3JtKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHVzZUNhbGN1bGF0ZVpvb21VcGRhdGUoaXNVcGRhdGVJbWFnZVdyYXBwZXI/OiBib29sZWFuKSB7XG4gICAgICAgIGxldCBpbWcgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgaW1nLnNyYyA9IHRoaXMucHJldmlld0ltYWdlLnNyYztcbiAgICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgd2lkdGg6IG9mZnNldFdpZHRoLCBoZWlnaHQ6IG9mZnNldEhlaWdodCB9ID0gZ2V0Q2xpZW50U2l6ZSgpO1xuICAgICAgICAgICAgY29uc3QgaW5uZXJXaWR0aCA9IG9mZnNldFdpZHRoIC0gSE9SSVpPTlRBTF9TUEFDRTtcbiAgICAgICAgICAgIGNvbnN0IGlubmVySGVpZ2h0ID0gb2Zmc2V0SGVpZ2h0IC0gVkVSVElDQUxfU1BBQ0U7XG4gICAgICAgICAgICBjb25zdCB7IG5hdHVyYWxXaWR0aCwgbmF0dXJhbEhlaWdodCB9ID0gaW1nO1xuICAgICAgICAgICAgY29uc3QgeFJhdGlvID0gaW5uZXJXaWR0aCAvIG5hdHVyYWxXaWR0aDtcbiAgICAgICAgICAgIGNvbnN0IHlSYXRpbyA9IGlubmVySGVpZ2h0IC8gbmF0dXJhbEhlaWdodDtcbiAgICAgICAgICAgIGNvbnN0IHpvb20gPSBNYXRoLm1pbih4UmF0aW8sIHlSYXRpbyk7XG4gICAgICAgICAgICBpZiAoem9vbSA+IDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnpvb20gPSAxO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnpvb20gPSB6b29tO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmdEb25lID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUHJldmlld0ltYWdlVHJhbnNmb3JtKCk7XG4gICAgICAgICAgICBpZiAoaXNVcGRhdGVJbWFnZVdyYXBwZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVByZXZpZXdJbWFnZVdyYXBwZXJUcmFuc2Zvcm0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB1cGRhdGVQcmV2aWV3SW1hZ2UoKSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZVByZXZpZXdJbWFnZSgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAvLyBlcnJvclxuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nRG9uZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaW1hZ2Ugc2l6ZVxuICAgICAgICAgICAgaWYgKCF0aGlzLnByZXZpZXdJbWFnZS5zaXplICYmIHRoaXMucHJldmlld0ltYWdlLmJsb2IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpZXdJbWFnZS5zaXplID0gaHVtYW5pemVCeXRlcyh0aGlzLnByZXZpZXdJbWFnZS5ibG9iLnNpemUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuZGVmYXVsdFpvb20pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZURlZmF1bHRab29tVXBkYXRlKHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZUNhbGN1bGF0ZVpvb21VcGRhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVzb2x2ZVByZXZpZXdJbWFnZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPEJvb2xlYW4+KHN1YnNjcmliZXIgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldmlld0ltYWdlLnNyYy5zdGFydHNXaXRoKCdibG9iOicpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2aWV3SW1hZ2Uub2JqZWN0VVJMID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFVybCh0aGlzLnByZXZpZXdJbWFnZS5zcmMpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh0cnVlKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMucHJldmlld0ltYWdlLm9iamVjdFVSTCB8fCAhdGhpcy5wcmV2aWV3Q29uZmlnLnJlc29sdmVTaXplKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHRydWUpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmV0Y2hJbWFnZUJsb2IodGhpcy5wcmV2aWV3SW1hZ2Uuc3JjKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAgIGJsb2IgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsQ3JlYXRvciA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9iamVjdFVSTCA9IHVybENyZWF0b3IuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmV2aWV3SW1hZ2Uub2JqZWN0VVJMID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFVybChvYmplY3RVUkwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmV2aWV3SW1hZ2UuYmxvYiA9IGJsb2I7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbml0UHJldmlldygpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5wcmV2aWV3Q29uZmlnPy5vcGVyYXRpb25zKSAmJiB0aGlzLnByZXZpZXdDb25maWc/Lm9wZXJhdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0T3BlcmF0aW9uc01hcCA9IGhlbHBlcnMua2V5QnkodGhpcy5kZWZhdWx0UHJldmlld09wZXJhdGlvbnMsICd0eXBlJyk7XG4gICAgICAgICAgICB0aGlzLnByZXZpZXdPcGVyYXRpb25zID0gdGhpcy5wcmV2aWV3Q29uZmlnPy5vcGVyYXRpb25zLm1hcChvcGVyYXRpb24gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChoZWxwZXJzLmlzU3RyaW5nKG9wZXJhdGlvbikgJiYgZGVmYXVsdE9wZXJhdGlvbnNNYXBbb3BlcmF0aW9uXSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdE9wZXJhdGlvbnNNYXBbb3BlcmF0aW9uXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uIGFzIFRoeUltYWdlUHJldmlld09wZXJhdGlvbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJldmlld09wZXJhdGlvbnMgPSB0aGlzLmRlZmF1bHRQcmV2aWV3T3BlcmF0aW9ucztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJvdGF0ZSA9IHRoaXMucHJldmlld0NvbmZpZz8ucm90YXRlID8/IDA7XG4gICAgICAgIHRoaXMudXBkYXRlUHJldmlld0ltYWdlKCk7XG4gICAgfVxuXG4gICAgZG93bmxvYWQoaW1hZ2U6IFRoeUltYWdlSW5mbykge1xuICAgICAgICB0aGlzLmRvd25sb2FkQ2xpY2tlZC5lbWl0KGltYWdlKTtcbiAgICAgICAgY29uc3Qgc3JjID0gaW1hZ2Uub3JpZ2luPy5zcmMgfHwgaW1hZ2Uuc3JjO1xuICAgICAgICBmZXRjaEltYWdlQmxvYihzcmMpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoYmxvYiA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdXJsQ3JlYXRvciA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTDtcbiAgICAgICAgICAgICAgICBjb25zdCBvYmplY3RVUkwgPSB1cmxDcmVhdG9yLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgICAgICAgICBsZXQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgICAgICAgICAgICBhLmRvd25sb2FkID0gaW1hZ2UubmFtZSB8fCAnZGVmYXVsdC5wbmcnO1xuICAgICAgICAgICAgICAgIGEuaHJlZiA9IG9iamVjdFVSTDtcbiAgICAgICAgICAgICAgICBhLmNsaWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB6b29tSW4oKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnpvb20gPCBJTUFHRV9NQVhfWk9PTSkge1xuICAgICAgICAgICAgdGhpcy56b29tID0gTWF0aC5taW4odGhpcy56b29tICsgMC4xLCBJTUFHRV9NQVhfWk9PTSk7XG4gICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUluc2lkZVNjcmVlbigpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQcmV2aWV3SW1hZ2VUcmFuc2Zvcm0oKTtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24gPSB7IC4uLmluaXRpYWxQb3NpdGlvbiB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgem9vbU91dCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuem9vbSA+IElNQUdFX01JTl9aT09NKSB7XG4gICAgICAgICAgICB0aGlzLnpvb20gPSBNYXRoLm1heCh0aGlzLnpvb20gLSAwLjEsIElNQUdFX01JTl9aT09NKTtcbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlSW5zaWRlU2NyZWVuKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVByZXZpZXdJbWFnZVRyYW5zZm9ybSgpO1xuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHsgLi4uaW5pdGlhbFBvc2l0aW9uIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjYWxjdWxhdGVJbnNpZGVTY3JlZW4oKSB7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5pbWFnZVJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoICogdGhpcy56b29tO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmltYWdlUmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0ICogdGhpcy56b29tO1xuICAgICAgICBjb25zdCB7IHdpZHRoOiBjbGllbnRXaWR0aCwgaGVpZ2h0OiBjbGllbnRIZWlnaHQgfSA9IGdldENsaWVudFNpemUoKTtcbiAgICAgICAgaWYgKHdpZHRoID49IGNsaWVudFdpZHRoIHx8IGhlaWdodCA+PSBjbGllbnRIZWlnaHQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNJbnNpZGVTY3JlZW4gPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNJbnNpZGVTY3JlZW4gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmlld09yaWdpbmFsKCkge1xuICAgICAgICB3aW5kb3cub3Blbih0aGlzLnByZXZpZXdJbWFnZT8ub3JpZ2luPy5zcmMgfHwgdGhpcy5wcmV2aWV3SW1hZ2Uuc3JjLCAnX2JsYW5rJyk7XG4gICAgfVxuXG4gICAgcm90YXRlUmlnaHQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucm90YXRlICs9IDkwO1xuICAgICAgICB0aGlzLnVwZGF0ZVByZXZpZXdJbWFnZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIGZ1bGxTY3JlZW4oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSB0aGlzLmhvc3QubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcudGh5LWltYWdlLXByZXZpZXcnKTtcbiAgICAgICAgdGhpcy5pc0Z1bGxTY3JlZW4gPSB0cnVlO1xuICAgICAgICBjb25zdCBmdWxsc2NyZWVuUmVmID0gdGhpcy50aHlGdWxsc2NyZWVuLmxhdW5jaCh7XG4gICAgICAgICAgICB0YXJnZXQ6IHRhcmdldEVsZW1lbnRcbiAgICAgICAgfSk7XG4gICAgICAgIGZ1bGxzY3JlZW5SZWYuYWZ0ZXJFeGl0ZWQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc0Z1bGxTY3JlZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjb3B5TGluayhldmVudDogVGh5Q29weUV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5U2VydmljZS5zdWNjZXNzKCflpI3liLblm77niYflnLDlnYDmiJDlip8nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5U2VydmljZS5lcnJvcign5aSN5Yi25Zu+54mH5Zyw5Z2A5aSx6LSlJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcmV2KCkge1xuICAgICAgICBpZiAodGhpcy5wcmV2aWV3SW5kZXggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnByZXZpZXdJbmRleC0tO1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmdEb25lID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVByZXZpZXdJbWFnZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmV4dCgpIHtcbiAgICAgICAgaWYgKHRoaXMucHJldmlld0luZGV4IDwgdGhpcy5pbWFnZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgdGhpcy5wcmV2aWV3SW5kZXgrKztcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nRG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQcmV2aWV3SW1hZ2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRyYWdSZWxlYXNlZCgpIHtcbiAgICAgICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5pbWFnZVJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoICogdGhpcy56b29tO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmltYWdlUmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0ICogdGhpcy56b29tO1xuICAgICAgICBjb25zdCB7IGxlZnQsIHRvcCB9ID0gZ2V0T2Zmc2V0KHRoaXMuaW1hZ2VSZWYubmF0aXZlRWxlbWVudCwgd2luZG93KTtcbiAgICAgICAgY29uc3QgeyB3aWR0aDogY2xpZW50V2lkdGgsIGhlaWdodDogY2xpZW50SGVpZ2h0IH0gPSBnZXRDbGllbnRTaXplKCk7XG4gICAgICAgIGNvbnN0IGlzUm90YXRlID0gdGhpcy5yb3RhdGUgJSAxODAgIT09IDA7XG4gICAgICAgIGNvbnN0IGZpdENvbnRlbnRQYXJhbXMgPSB7XG4gICAgICAgICAgICB3aWR0aDogaXNSb3RhdGUgPyBoZWlnaHQgOiB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogaXNSb3RhdGUgPyB3aWR0aCA6IGhlaWdodCxcbiAgICAgICAgICAgIGxlZnQsXG4gICAgICAgICAgICB0b3AsXG4gICAgICAgICAgICBjbGllbnRXaWR0aCxcbiAgICAgICAgICAgIGNsaWVudEhlaWdodFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBmaXRDb250ZW50UG9zID0gZ2V0Rml0Q29udGVudFBvc2l0aW9uKGZpdENvbnRlbnRQYXJhbXMpO1xuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkT3JOdWxsKGZpdENvbnRlbnRQb3MueCkgfHwgIWlzVW5kZWZpbmVkT3JOdWxsKGZpdENvbnRlbnRQb3MueSkpIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24gPSB7IC4uLnRoaXMucG9zaXRpb24sIC4uLmZpdENvbnRlbnRQb3MgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3VycmVudEltYWdlTW9kZSA9ICdvcmlnaW5hbC1zY2FsZSc7XG4gICAgICAgIHRoaXMucm90YXRlID0gdGhpcy5wcmV2aWV3Q29uZmlnPy5yb3RhdGUgPz8gMDtcbiAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHsgLi4uaW5pdGlhbFBvc2l0aW9uIH07XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVByZXZpZXdJbWFnZVRyYW5zZm9ybSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcmV2aWV3SW1hZ2VUcmFuc2Zvcm0gPSBgc2NhbGUzZCgke3RoaXMuem9vbX0sICR7dGhpcy56b29tfSwgMSkgcm90YXRlKCR7dGhpcy5yb3RhdGV9ZGVnKWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVQcmV2aWV3SW1hZ2VXcmFwcGVyVHJhbnNmb3JtKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByZXZpZXdJbWFnZVdyYXBwZXJUcmFuc2Zvcm0gPSBgdHJhbnNsYXRlM2QoJHt0aGlzLnBvc2l0aW9uLnh9cHgsICR7dGhpcy5wb3NpdGlvbi55fXB4LCAwKWA7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInRoeS1pbWFnZS1wcmV2aWV3XCIgW2NsYXNzLnRoeS1pbWFnZS1wcmV2aWV3LWZ1bGxzY3JlZW5dPVwiaXNGdWxsU2NyZWVuXCI+XG4gIEBpZiAoIWlzRnVsbFNjcmVlbikge1xuICAgIDxkaXYgY2xhc3M9XCJ0aHktaW1hZ2UtcHJldmlldy1oZWFkZXIgcGwtMTAgcHItOFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInRoeS1pbWFnZS1wcmV2aWV3LWhlYWRlci1pbmZvXCI+XG4gICAgICAgIDxwIGNsYXNzPVwidGh5LWltYWdlLW5hbWUgdGV4dC10cnVuY2F0ZVwiIFt0aHlUb29sdGlwRGlzYWJsZWRdPVwicHJldmlld0ltYWdlPy5uYW1lPy5sZW5ndGggPCAzMlwiIFt0aHlUb29sdGlwXT1cInByZXZpZXdJbWFnZT8ubmFtZVwiPlxuICAgICAgICAgIHt7IHByZXZpZXdJbWFnZT8ubmFtZSB9fVxuICAgICAgICA8L3A+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGh5LWltYWdlLXNpemVcIj4ge3sgcHJldmlld0ltYWdlPy5zaXplIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8YSB0aHlBY3Rpb24gdGh5SWNvbj1cImNsb3NlXCIgdGh5VG9vbHRpcD1cIumAgOWHuumihOiniFwiIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiAoY2xpY2spPVwidGh5RGlhbG9nLmNsb3NlKClcIj48L2E+XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChpc0Z1bGxTY3JlZW4pIHtcbiAgICA8YVxuICAgICAgY2xhc3M9XCJ0aHktaW1hZ2UtcHJldmlldy1leGl0LWZ1bGxzY3JlZW5cIlxuICAgICAgdGh5QWN0aW9uXG4gICAgICB0aHlJY29uPVwiY2xvc2VcIlxuICAgICAgdGh5VG9vbHRpcD1cIumAgOWHuumihOiniFwiXG4gICAgICBocmVmPVwiamF2YXNjcmlwdDo7XCJcbiAgICAgIChjbGljayk9XCJ0aHlGdWxsc2NyZWVuLmV4aXQoKVwiXG4gICAgICB0aHlUb29sdGlwPVwi6YCA5Ye65YWo5bGPXCI+PC9hPlxuICB9XG4gIDxkaXZcbiAgICBjbGFzcz1cInRoeS1pbWFnZS1wcmV2aWV3LWltZy13cmFwcGVyXCJcbiAgICAjaW1hZ2VQcmV2aWV3V3JhcHBlclxuICAgIGNka0RyYWdcbiAgICBbY2xhc3MudGh5LWltYWdlLXByZXZpZXctaW5zaWRlXT1cImlzSW5zaWRlU2NyZWVuXCJcbiAgICBbc3R5bGUudHJhbnNmb3JtXT1cInByZXZpZXdJbWFnZVdyYXBwZXJUcmFuc2Zvcm1cIlxuICAgIFtjZGtEcmFnRnJlZURyYWdQb3NpdGlvbl09XCJwb3NpdGlvblwiXG4gICAgKGNka0RyYWdSZWxlYXNlZCk9XCJkcmFnUmVsZWFzZWQoKVwiPlxuICAgIEBmb3IgKGltYWdlIG9mIGltYWdlczsgdHJhY2sgJGluZGV4OyBsZXQgaW1hZ2VJbmRleCA9ICRpbmRleCkge1xuICAgICAgQGlmIChwcmV2aWV3SW5kZXggPT09IGltYWdlSW5kZXggJiYgaXNMb2FkaW5nRG9uZSkge1xuICAgICAgICA8aW1nICNpbWdSZWYgY2xhc3M9XCJ0aHktaW1hZ2UtcHJldmlldy1pbWdcIiBbc3JjXT1cImltYWdlLm9iamVjdFVSTCB8fCBpbWFnZS5zcmNcIiBbc3R5bGUudHJhbnNmb3JtXT1cInByZXZpZXdJbWFnZVRyYW5zZm9ybVwiIC8+XG4gICAgICB9XG4gICAgfVxuICAgIDx0aHktbG9hZGluZyBbdGh5RG9uZV09XCJpc0xvYWRpbmdEb25lXCI+PC90aHktbG9hZGluZz5cbiAgPC9kaXY+XG5cbiAgQGlmIChpbWFnZXMubGVuZ3RoID4gMSAmJiAhaXNGdWxsU2NyZWVuKSB7XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJ0aHktaW1hZ2UtcHJldmlldy1zd2l0Y2gtbGVmdFwiXG4gICAgICBbdGh5VG9vbHRpcERpc2FibGVkXT1cInByZXZpZXdJbmRleCA8PSAwXCJcbiAgICAgIHRoeVRvb2x0aXA9XCLkuIrkuIDlvKBcIlxuICAgICAgW2NsYXNzLnRoeS1pbWFnZS1wcmV2aWV3LXN3aXRjaC1sZWZ0LWRpc2FibGVkXT1cInByZXZpZXdJbmRleCA8PSAwXCJcbiAgICAgIChjbGljayk9XCJwcmV2KClcIj5cbiAgICAgIDx0aHktaWNvbiB0aHlJY29uTmFtZT1cImFuZ2xlLWxlZnQtYm9sZFwiPjwvdGh5LWljb24+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJ0aHktaW1hZ2UtcHJldmlldy1zd2l0Y2gtcmlnaHRcIlxuICAgICAgdGh5VG9vbHRpcD1cIuS4i+S4gOW8oFwiXG4gICAgICBbdGh5VG9vbHRpcERpc2FibGVkXT1cInByZXZpZXdJbmRleCA+PSBpbWFnZXMubGVuZ3RoIC0gMVwiXG4gICAgICBbY2xhc3MudGh5LWltYWdlLXByZXZpZXctc3dpdGNoLXJpZ2h0LWRpc2FibGVkXT1cInByZXZpZXdJbmRleCA+PSBpbWFnZXMubGVuZ3RoIC0gMVwiXG4gICAgICAoY2xpY2spPVwibmV4dCgpXCI+XG4gICAgICA8dGh5LWljb24gdGh5SWNvbk5hbWU9XCJhbmdsZS1yaWdodC1ib2xkXCI+IDwvdGh5LWljb24+XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmICghaXNGdWxsU2NyZWVuKSB7XG4gICAgPHRoeS1hY3Rpb25zIHRoeVNpemU9XCJ4c1wiIGNsYXNzPVwidGh5LWltYWdlLXByZXZpZXctb3BlcmF0aW9ucyBweS0zIHB4LTRcIj5cbiAgICAgIEBmb3IgKG9wdGlvbiBvZiBwcmV2aWV3T3BlcmF0aW9uczsgdHJhY2sgJGluZGV4OyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICBAaWYgKCFbJ29yaWdpbmFsLXNjYWxlJywgJ2ZpdC1zY3JlZW4nLCAnY29weUxpbmsnXS5pbmNsdWRlcyhvcHRpb24udHlwZSkgfHwgY3VycmVudEltYWdlTW9kZSA9PT0gb3B0aW9uLnR5cGUpIHtcbiAgICAgICAgICA8YVxuICAgICAgICAgICAgaHJlZj1cImphdmFzY3JpcHQ6O1wiXG4gICAgICAgICAgICB0aHlBY3Rpb25cbiAgICAgICAgICAgIFt0aHlBY3Rpb25JY29uXT1cIm9wdGlvbi5pY29uXCJcbiAgICAgICAgICAgIFt0aHlUb29sdGlwXT1cIm9wdGlvbi5uYW1lXCJcbiAgICAgICAgICAgIFt0aHlUb29sdGlwT2Zmc2V0XT1cIjEzXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvcHRpb24uYWN0aW9uKHByZXZpZXdJbWFnZSlcIj48L2E+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChvcHRpb24/LnR5cGUgPT09ICd6b29tLW91dCcpIHtcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1yLTJcIj4ge3sgKHpvb20gKiAxMDApLnRvRml4ZWQoMCkgKyAnJScgfX0gPC9zcGFuPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAob3B0aW9uPy50eXBlID09PSAncm90YXRlLXJpZ2h0Jykge1xuICAgICAgICAgIDx0aHktZGl2aWRlciBjbGFzcz1cIm1sLTJcIiBbdGh5VmVydGljYWxdPVwidHJ1ZVwiPjwvdGh5LWRpdmlkZXI+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChvcHRpb24udHlwZSA9PT0gJ2NvcHlMaW5rJykge1xuICAgICAgICAgIDxhXG4gICAgICAgICAgICBocmVmPVwiamF2YXNjcmlwdDo7XCJcbiAgICAgICAgICAgIHRoeUFjdGlvblxuICAgICAgICAgICAgW3RoeUNvcHlUaXBzXT1cIm9wdGlvbi5uYW1lXCJcbiAgICAgICAgICAgIFt0aHlBY3Rpb25JY29uXT1cIm9wdGlvbi5pY29uXCJcbiAgICAgICAgICAgIFt0aHlDb3B5VGlwc09mZnNldF09XCIxM1wiXG4gICAgICAgICAgICAodGh5Q29weSk9XCJjb3B5TGluaygkZXZlbnQpXCJcbiAgICAgICAgICAgIFt0aHlDb3B5Q29udGVudF09XCJwcmV2aWV3SW1hZ2VPcmlnaW5TcmNcIlxuICAgICAgICAgICAgW3RoeVNob3dOb3RpZnldPVwiZmFsc2VcIj48L2E+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIDx0aHktZGl2aWRlciBbdGh5VmVydGljYWxdPVwidHJ1ZVwiPjwvdGh5LWRpdmlkZXI+XG4gICAgICA8c3BhbiBjbGFzcz1cInRoeS1pbWFnZS1wcmV2aWV3LW9wZXJhdGlvbnMtdGV4dFwiPiB7eyBwcmV2aWV3SW5kZXggKyAxIH19IC8ge3sgaW1hZ2VzLmxlbmd0aCB9fSA8L3NwYW4+XG4gICAgPC90aHktYWN0aW9ucz5cbiAgfVxuPC9kaXY+XG4iXX0=
415
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtcHJldmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvaW1hZ2UvcHJldmlldy9pbWFnZS1wcmV2aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9pbWFnZS9wcmV2aWV3L2ltYWdlLXByZXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRWpELE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBRU4sTUFBTSxFQUVOLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsTUFBTSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFELE9BQU8sRUFBRSxnQkFBZ0IsRUFBZ0IsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9C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QSw0Q0QvQmMsbUJBQW1CLDhUQUFFLFNBQVMsZ01BQUUsT0FBTyx3Y0FBRSxVQUFVLG9HQUFFLE9BQU8sc01BQUUsVUFBVSw2RUFBRSxVQUFVLHFKQUFFLGdCQUFnQjs7NEZBRXZHLGVBQWU7a0JBYjNCLFNBQVM7K0JBQ0ksbUJBQW1CLFlBQ25CLGlCQUFpQixtQkFFVix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLFFBQy9CO3dCQUNGLEtBQUssRUFBRSx3QkFBd0I7d0JBQy9CLGtDQUFrQyxFQUFFLFlBQVk7cUJBQ25ELGNBQ1csSUFBSSxXQUNQLENBQUMsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLENBQUM7OEJBWXZHLGVBQWU7c0JBQXhCLE1BQU07Z0JBc0hpQyxRQUFRO3NCQUEvQyxTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ2MsbUJBQW1CO3NCQUF0RSxTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENka0RyYWcgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcblxuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRGVzdHJveVJlZixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBOZ1pvbmUsXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBTaWduYWwsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIGluamVjdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgVGh5QWN0aW9uLCBUaHlBY3Rpb25zIH0gZnJvbSAnbmd4LXRldGh5cy9hY3Rpb24nO1xuaW1wb3J0IHsgVGh5Q29weURpcmVjdGl2ZSwgVGh5Q29weUV2ZW50IH0gZnJvbSAnbmd4LXRldGh5cy9jb3B5JztcbmltcG9ydCB7IFRoeURpYWxvZyB9IGZyb20gJ25neC10ZXRoeXMvZGlhbG9nJztcbmltcG9ydCB7IFRoeURpdmlkZXIgfSBmcm9tICduZ3gtdGV0aHlzL2RpdmlkZXInO1xuaW1wb3J0IHsgVGh5RnVsbHNjcmVlbiB9IGZyb20gJ25neC10ZXRoeXMvZnVsbHNjcmVlbic7XG5pbXBvcnQgeyBUaHlJY29uIH0gZnJvbSAnbmd4LXRldGh5cy9pY29uJztcbmltcG9ydCB7IFRoeUxvYWRpbmcgfSBmcm9tICduZ3gtdGV0aHlzL2xvYWRpbmcnO1xuaW1wb3J0IHsgVGh5Tm90aWZ5U2VydmljZSB9IGZyb20gJ25neC10ZXRoeXMvbm90aWZ5JztcbmltcG9ydCB7IFRoeVRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICduZ3gtdGV0aHlzL3Rvb2x0aXAnO1xuaW1wb3J0IHsgZ2V0Q2xpZW50U2l6ZSwgZ2V0Rml0Q29udGVudFBvc2l0aW9uLCBnZXRPZmZzZXQsIGhlbHBlcnMsIGh1bWFuaXplQnl0ZXMsIGlzTnVtYmVyLCBpc1VuZGVmaW5lZE9yTnVsbCB9IGZyb20gJ25neC10ZXRoeXMvdXRpbCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEludGVybmFsSW1hZ2VJbmZvLCBUaHlJbWFnZUluZm8sIFRoeUltYWdlUHJldmlld01vZGUsIFRoeUltYWdlUHJldmlld09wZXJhdGlvbiwgVGh5SW1hZ2VQcmV2aWV3T3B0aW9ucyB9IGZyb20gJy4uL2ltYWdlLmNsYXNzJztcbmltcG9ydCB7IGZldGNoSW1hZ2VCbG9iIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgaW5qZWN0TG9jYWxlLCBUaHlJbWFnZUxvY2FsZSB9IGZyb20gJ25neC10ZXRoeXMvaTE4bic7XG5cbmNvbnN0IGluaXRpYWxQb3NpdGlvbiA9IHtcbiAgICB4OiAwLFxuICAgIHk6IDBcbn07XG5jb25zdCBJTUFHRV9NQVhfWk9PTSA9IDM7XG5jb25zdCBJTUFHRV9NSU5fWk9PTSA9IDAuMTtcbmNvbnN0IEhPUklaT05UQUxfU1BBQ0UgPSAxMDAgKiAyOyAvLyBsZWZ0OiAxMDBweDsgcmlnaHQ6IDEwMHB4XG5jb25zdCBWRVJUSUNBTF9TUEFDRSA9IDk2ICsgMTA2OyAvLyB0b3A6IDk2cHg7IGJvdHRvbTogMTA2cHhcblxuLyoqXG4gKiDlm77niYfpooTop4jnu4Tku7ZcbiAqIEBuYW1lIHRoeS1pbWFnZS1wcmV2aWV3XG4gKiBAb3JkZXIgMjBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0aHktaW1hZ2UtcHJldmlldycsXG4gICAgZXhwb3J0QXM6ICd0aHlJbWFnZVByZXZpZXcnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9pbWFnZS1wcmV2aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICd0aHktaW1hZ2UtcHJldmlldy13cmFwJyxcbiAgICAgICAgJ1tjbGFzcy50aHktaW1hZ2UtcHJldmlldy1tb3ZpbmddJzogJ2lzRHJhZ2dpbmcnXG4gICAgfSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtUaHlUb29sdGlwRGlyZWN0aXZlLCBUaHlBY3Rpb24sIENka0RyYWcsIFRoeUxvYWRpbmcsIFRoeUljb24sIFRoeUFjdGlvbnMsIFRoeURpdmlkZXIsIFRoeUNvcHlEaXJlY3RpdmVdXG59KVxuZXhwb3J0IGNsYXNzIFRoeUltYWdlUHJldmlldyBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgdGh5RGlhbG9nID0gaW5qZWN0KFRoeURpYWxvZyk7XG4gICAgdGh5RnVsbHNjcmVlbiA9IGluamVjdChUaHlGdWxsc2NyZWVuKTtcbiAgICBwcml2YXRlIGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gICAgcHJpdmF0ZSBuZ1pvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgICBwcml2YXRlIG5vdGlmeVNlcnZpY2UgPSBpbmplY3QoVGh5Tm90aWZ5U2VydmljZSk7XG4gICAgcHJpdmF0ZSBob3N0ID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcbiAgICBwcml2YXRlIHNhbml0aXplciA9IGluamVjdChEb21TYW5pdGl6ZXIpO1xuICAgIHB1YmxpYyBsb2NhbGU6IFNpZ25hbDxUaHlJbWFnZUxvY2FsZT4gPSBpbmplY3RMb2NhbGUoJ2ltYWdlJyk7XG5cbiAgICBAT3V0cHV0KCkgZG93bmxvYWRDbGlja2VkOiBFdmVudEVtaXR0ZXI8VGh5SW1hZ2VJbmZvPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIGltYWdlczogSW50ZXJuYWxJbWFnZUluZm9bXSA9IFtdO1xuICAgIHByZXZpZXdJbmRleDogbnVtYmVyID0gMDtcbiAgICBwcmV2aWV3Q29uZmlnOiBUaHlJbWFnZVByZXZpZXdPcHRpb25zO1xuICAgIHByZXZpZXdJbWFnZVRyYW5zZm9ybSA9ICcnO1xuICAgIHByZXZpZXdJbWFnZVdyYXBwZXJUcmFuc2Zvcm0gPSAnJztcbiAgICB6b29tRGlzYWJsZWQgPSBmYWxzZTtcbiAgICB6b29tOiBudW1iZXIgPSAxO1xuICAgIHBvc2l0aW9uID0geyAuLi5pbml0aWFsUG9zaXRpb24gfTtcbiAgICBpc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgaXNMb2FkaW5nRG9uZSA9IGZhbHNlO1xuICAgIGlzRnVsbFNjcmVlbiA9IGZhbHNlO1xuICAgIGlzSW5zaWRlU2NyZWVuID0gdHJ1ZTtcbiAgICBjdXJyZW50SW1hZ2VNb2RlOiBUaHlJbWFnZVByZXZpZXdNb2RlID0gJ29yaWdpbmFsLXNjYWxlJztcbiAgICBwcmV2aWV3T3BlcmF0aW9uczogVGh5SW1hZ2VQcmV2aWV3T3BlcmF0aW9uW107XG4gICAgZGVmYXVsdFByZXZpZXdPcGVyYXRpb25zOiBUaHlJbWFnZVByZXZpZXdPcGVyYXRpb25bXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgICAgaWNvbjogJ3pvb20tb3V0JyxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubG9jYWxlKCkuem9vbU91dCxcbiAgICAgICAgICAgIGFjdGlvbjogKGltYWdlOiBUaHlJbWFnZUluZm8pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnpvb21PdXQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eXBlOiAnem9vbS1vdXQnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGljb246ICd6b29tLWluJyxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubG9jYWxlKCkuem9vbUluLFxuICAgICAgICAgICAgYWN0aW9uOiAoaW1hZ2U6IFRoeUltYWdlSW5mbykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuem9vbUluKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHlwZTogJ3pvb20taW4nXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGljb246ICdvbmUtdG8tb25lJyxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubG9jYWxlKCkub3JpZ2luYWxTaXplLFxuICAgICAgICAgICAgYWN0aW9uOiAoaW1hZ2U6IFRoeUltYWdlSW5mbykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0T3JpZ2luYWxTaXplKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHlwZTogJ29yaWdpbmFsLXNjYWxlJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBpY29uOiAnbWF4LXZpZXcnLFxuICAgICAgICAgICAgbmFtZTogdGhpcy5sb2NhbGUoKS5maXRUb1NjcmVlbixcbiAgICAgICAgICAgIGFjdGlvbjogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Rml0U2NyZWVuKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHlwZTogJ2ZpdC1zY3JlZW4nXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGljb246ICdleHBhbmQtYXJyb3dzJyxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubG9jYWxlKCkuZnVsbFNjcmVlbixcbiAgICAgICAgICAgIGFjdGlvbjogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZnVsbFNjcmVlbigpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHR5cGU6ICdmdWxsLXNjcmVlbidcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgaWNvbjogJ3JvdGF0ZS1yaWdodCcsXG4gICAgICAgICAgICBuYW1lOiB0aGlzLmxvY2FsZSgpLnNwaW4sXG4gICAgICAgICAgICBhY3Rpb246IChpbWFnZTogVGh5SW1hZ2VJbmZvKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3RhdGVSaWdodCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHR5cGU6ICdyb3RhdGUtcmlnaHQnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGljb246ICdkb3dubG9hZCcsXG4gICAgICAgICAgICBuYW1lOiB0aGlzLmxvY2FsZSgpLmRvd25sb2FkLFxuICAgICAgICAgICAgYWN0aW9uOiAoaW1hZ2U6IFRoeUltYWdlSW5mbykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZG93bmxvYWQoaW1hZ2UpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHR5cGU6ICdkb3dubG9hZCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgaWNvbjogJ3ByZXZpZXcnLFxuICAgICAgICAgICAgbmFtZTogdGhpcy5sb2NhbGUoKS52aWV3T3JpZ2luYWwsXG4gICAgICAgICAgICBhY3Rpb246ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdPcmlnaW5hbCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHR5cGU6ICd2aWV3LW9yaWdpbmFsJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBpY29uOiAnbGluay1pbnNlcnQnLFxuICAgICAgICAgICAgbmFtZTogdGhpcy5sb2NhbGUoKS5jb3B5TGluayxcbiAgICAgICAgICAgIHR5cGU6ICdjb3B5TGluaydcbiAgICAgICAgfVxuICAgIF07XG5cbiAgICBwcml2YXRlIHJvdGF0ZTogbnVtYmVyO1xuXG4gICAgZ2V0IHByZXZpZXdJbWFnZSgpOiBJbnRlcm5hbEltYWdlSW5mbyB7XG4gICAgICAgIGNvbnN0IGltYWdlID0gdGhpcy5pbWFnZXNbdGhpcy5wcmV2aWV3SW5kZXhdO1xuICAgICAgICBpZiAoaW1hZ2Uuc2l6ZSkge1xuICAgICAgICAgICAgaW1hZ2Uuc2l6ZSA9IGlzTnVtYmVyKGltYWdlLnNpemUpID8gaHVtYW5pemVCeXRlcyhpbWFnZS5zaXplKSA6IGltYWdlLnNpemU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGltYWdlO1xuICAgIH1cblxuICAgIGdldCBwcmV2aWV3SW1hZ2VPcmlnaW5TcmMoKSB7XG4gICAgICAgIGxldCBpbWFnZVNyYyA9IHRoaXMucHJldmlld0ltYWdlLm9yaWdpbj8uc3JjIHx8IHRoaXMucHJldmlld0ltYWdlLnNyYztcbiAgICAgICAgaWYgKGltYWdlU3JjLnN0YXJ0c1dpdGgoJy4vJykpIHtcbiAgICAgICAgICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24uaG9zdCArICcvJyArIGltYWdlU3JjLnNwbGl0KCcuLycpWzFdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbWFnZVNyYztcbiAgICB9XG5cbiAgICBnZXQgZGVmYXVsdFpvb20oKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMucHJldmlld0NvbmZpZz8uem9vbSAmJiB0aGlzLnByZXZpZXdDb25maWc/Lnpvb20gPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcmV2aWV3Q29uZmlnLnpvb20gPj0gSU1BR0VfTUFYX1pPT01cbiAgICAgICAgICAgICAgICA/IElNQUdFX01BWF9aT09NXG4gICAgICAgICAgICAgICAgOiB0aGlzLnByZXZpZXdDb25maWcuem9vbSA8PSBJTUFHRV9NSU5fWk9PTVxuICAgICAgICAgICAgICAgICAgPyBJTUFHRV9NSU5fWk9PTVxuICAgICAgICAgICAgICAgICAgOiB0aGlzLnByZXZpZXdDb25maWcuem9vbTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBWaWV3Q2hpbGQoJ2ltZ1JlZicsIHsgc3RhdGljOiBmYWxzZSB9KSBpbWFnZVJlZiE6IEVsZW1lbnRSZWY8SFRNTEltYWdlRWxlbWVudD47XG4gICAgQFZpZXdDaGlsZCgnaW1hZ2VQcmV2aWV3V3JhcHBlcicsIHsgc3RhdGljOiB0cnVlIH0pIGltYWdlUHJldmlld1dyYXBwZXIhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluaXRQcmV2aWV3KCk7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIGZyb21FdmVudCh0aGlzLmhvc3QubmF0aXZlRWxlbWVudCwgJ2NsaWNrJylcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgKGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmlzSW5zaWRlU2NyZWVuICYmIHRoaXMuaW1hZ2VQcmV2aWV3V3JhcHBlci5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMucHJldmlld0NvbmZpZz8uZGlzYWJsZUNsb3NlXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+ICF0aGlzLmlzRnVsbFNjcmVlbiAmJiB0aGlzLnRoeURpYWxvZy5jbG9zZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBmcm9tRXZlbnQodGhpcy5pbWFnZVByZXZpZXdXcmFwcGVyLm5hdGl2ZUVsZW1lbnQsICdtb3VzZWRvd24nKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRHJhZ2dpbmcgPSAhdGhpcy5pc0luc2lkZVNjcmVlbiAmJiB0cnVlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXRPcmlnaW5hbFNpemUoKSB7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgdGhpcy5jdXJyZW50SW1hZ2VNb2RlID0gJ2ZpdC1zY3JlZW4nO1xuICAgICAgICB0aGlzLnpvb20gPSAxO1xuICAgICAgICB0aGlzLnVwZGF0ZVByZXZpZXdJbWFnZVRyYW5zZm9ybSgpO1xuICAgICAgICB0aGlzLmNhbGN1bGF0ZUluc2lkZVNjcmVlbigpO1xuICAgICAgICB0aGlzLmlzTG9hZGluZ0RvbmUgPSB0cnVlO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgc2V0Rml0U2NyZWVuKCkge1xuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgIHRoaXMuaXNJbnNpZGVTY3JlZW4gPSB0cnVlO1xuICAgICAgICB0aGlzLnVwZGF0ZVByZXZpZXdJbWFnZSgpO1xuICAgIH1cblxuICAgIHVzZURlZmF1bHRab29tVXBkYXRlKGlzVXBkYXRlSW1hZ2VXcmFwcGVyOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuem9vbSA9IHRoaXMuZGVmYXVsdFpvb207XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nRG9uZSA9IHRydWU7XG4gICAgICAgIHRoaXMudXBkYXRlUHJldmlld0ltYWdlVHJhbnNmb3JtKCk7XG4gICAgICAgIGlmIChpc1VwZGF0ZUltYWdlV3JhcHBlcikge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQcmV2aWV3SW1hZ2VXcmFwcGVyVHJhbnNmb3JtKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHVzZUNhbGN1bGF0ZVpvb21VcGRhdGUoaXNVcGRhdGVJbWFnZVdyYXBwZXI/OiBib29sZWFuKSB7XG4gICAgICAgIGxldCBpbWcgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgaW1nLnNyYyA9IHRoaXMucHJldmlld0ltYWdlLnNyYztcbiAgICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgd2lkdGg6IG9mZnNldFdpZHRoLCBoZWlnaHQ6IG9mZnNldEhlaWdodCB9ID0gZ2V0Q2xpZW50U2l6ZSgpO1xuICAgICAgICAgICAgY29uc3QgaW5uZXJXaWR0aCA9IG9mZnNldFdpZHRoIC0gSE9SSVpPTlRBTF9TUEFDRTtcbiAgICAgICAgICAgIGNvbnN0IGlubmVySGVpZ2h0ID0gb2Zmc2V0SGVpZ2h0IC0gVkVSVElDQUxfU1BBQ0U7XG4gICAgICAgICAgICBjb25zdCB7IG5hdHVyYWxXaWR0aCwgbmF0dXJhbEhlaWdodCB9ID0gaW1nO1xuICAgICAgICAgICAgY29uc3QgeFJhdGlvID0gaW5uZXJXaWR0aCAvIG5hdHVyYWxXaWR0aDtcbiAgICAgICAgICAgIGNvbnN0IHlSYXRpbyA9IGlubmVySGVpZ2h0IC8gbmF0dXJhbEhlaWdodDtcbiAgICAgICAgICAgIGNvbnN0IHpvb20gPSBNYXRoLm1pbih4UmF0aW8sIHlSYXRpbyk7XG4gICAgICAgICAgICBpZiAoem9vbSA+IDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnpvb20gPSAxO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnpvb20gPSB6b29tO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmdEb25lID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUHJldmlld0ltYWdlVHJhbnNmb3JtKCk7XG4gICAgICAgICAgICBpZiAoaXNVcGRhdGVJbWFnZVdyYXBwZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVByZXZpZXdJbWFnZVdyYXBwZXJUcmFuc2Zvcm0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB1cGRhdGVQcmV2aWV3SW1hZ2UoKSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZVByZXZpZXdJbWFnZSgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAvLyBlcnJvclxuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nRG9uZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaW1hZ2Ugc2l6ZVxuICAgICAgICAgICAgaWYgKCF0aGlzLnByZXZpZXdJbWFnZS5zaXplICYmIHRoaXMucHJldmlld0ltYWdlLmJsb2IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpZXdJbWFnZS5zaXplID0gaHVtYW5pemVCeXRlcyh0aGlzLnByZXZpZXdJbWFnZS5ibG9iLnNpemUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuZGVmYXVsdFpvb20pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZURlZmF1bHRab29tVXBkYXRlKHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZUNhbGN1bGF0ZVpvb21VcGRhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVzb2x2ZVByZXZpZXdJbWFnZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPEJvb2xlYW4+KHN1YnNjcmliZXIgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldmlld0ltYWdlLnNyYy5zdGFydHNXaXRoKCdibG9iOicpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2aWV3SW1hZ2Uub2JqZWN0VVJMID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFVybCh0aGlzLnByZXZpZXdJbWFnZS5zcmMpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh0cnVlKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMucHJldmlld0ltYWdlLm9iamVjdFVSTCB8fCAhdGhpcy5wcmV2aWV3Q29uZmlnLnJlc29sdmVTaXplKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHRydWUpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmV0Y2hJbWFnZUJsb2IodGhpcy5wcmV2aWV3SW1hZ2Uuc3JjKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAgIGJsb2IgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsQ3JlYXRvciA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9iamVjdFVSTCA9IHVybENyZWF0b3IuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmV2aWV3SW1hZ2Uub2JqZWN0VVJMID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFVybChvYmplY3RVUkwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmV2aWV3SW1hZ2UuYmxvYiA9IGJsb2I7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbml0UHJldmlldygpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5wcmV2aWV3Q29uZmlnPy5vcGVyYXRpb25zKSAmJiB0aGlzLnByZXZpZXdDb25maWc/Lm9wZXJhdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0T3BlcmF0aW9uc01hcCA9IGhlbHBlcnMua2V5QnkodGhpcy5kZWZhdWx0UHJldmlld09wZXJhdGlvbnMsICd0eXBlJyk7XG4gICAgICAgICAgICB0aGlzLnByZXZpZXdPcGVyYXRpb25zID0gdGhpcy5wcmV2aWV3Q29uZmlnPy5vcGVyYXRpb25zLm1hcChvcGVyYXRpb24gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChoZWxwZXJzLmlzU3RyaW5nKG9wZXJhdGlvbikgJiYgZGVmYXVsdE9wZXJhdGlvbnNNYXBbb3BlcmF0aW9uXSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdE9wZXJhdGlvbnNNYXBbb3BlcmF0aW9uXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uIGFzIFRoeUltYWdlUHJldmlld09wZXJhdGlvbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJldmlld09wZXJhdGlvbnMgPSB0aGlzLmRlZmF1bHRQcmV2aWV3T3BlcmF0aW9ucztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJvdGF0ZSA9IHRoaXMucHJldmlld0NvbmZpZz8ucm90YXRlID8/IDA7XG4gICAgICAgIHRoaXMudXBkYXRlUHJldmlld0ltYWdlKCk7XG4gICAgfVxuXG4gICAgZG93bmxvYWQoaW1hZ2U6IFRoeUltYWdlSW5mbykge1xuICAgICAgICB0aGlzLmRvd25sb2FkQ2xpY2tlZC5lbWl0KGltYWdlKTtcbiAgICAgICAgY29uc3Qgc3JjID0gaW1hZ2Uub3JpZ2luPy5zcmMgfHwgaW1hZ2Uuc3JjO1xuICAgICAgICBmZXRjaEltYWdlQmxvYihzcmMpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoYmxvYiA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdXJsQ3JlYXRvciA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTDtcbiAgICAgICAgICAgICAgICBjb25zdCBvYmplY3RVUkwgPSB1cmxDcmVhdG9yLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgICAgICAgICBsZXQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgICAgICAgICAgICBhLmRvd25sb2FkID0gaW1hZ2UubmFtZSB8fCAnZGVmYXVsdC5wbmcnO1xuICAgICAgICAgICAgICAgIGEuaHJlZiA9IG9iamVjdFVSTDtcbiAgICAgICAgICAgICAgICBhLmNsaWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB6b29tSW4oKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnpvb20gPCBJTUFHRV9NQVhfWk9PTSkge1xuICAgICAgICAgICAgdGhpcy56b29tID0gTWF0aC5taW4odGhpcy56b29tICsgMC4xLCBJTUFHRV9NQVhfWk9PTSk7XG4gICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUluc2lkZVNjcmVlbigpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQcmV2aWV3SW1hZ2VUcmFuc2Zvcm0oKTtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24gPSB7IC4uLmluaXRpYWxQb3NpdGlvbiB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgem9vbU91dCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuem9vbSA+IElNQUdFX01JTl9aT09NKSB7XG4gICAgICAgICAgICB0aGlzLnpvb20gPSBNYXRoLm1heCh0aGlzLnpvb20gLSAwLjEsIElNQUdFX01JTl9aT09NKTtcbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlSW5zaWRlU2NyZWVuKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVByZXZpZXdJbWFnZVRyYW5zZm9ybSgpO1xuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHsgLi4uaW5pdGlhbFBvc2l0aW9uIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjYWxjdWxhdGVJbnNpZGVTY3JlZW4oKSB7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5pbWFnZVJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoICogdGhpcy56b29tO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmltYWdlUmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0ICogdGhpcy56b29tO1xuICAgICAgICBjb25zdCB7IHdpZHRoOiBjbGllbnRXaWR0aCwgaGVpZ2h0OiBjbGllbnRIZWlnaHQgfSA9IGdldENsaWVudFNpemUoKTtcbiAgICAgICAgaWYgKHdpZHRoID49IGNsaWVudFdpZHRoIHx8IGhlaWdodCA+PSBjbGllbnRIZWlnaHQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNJbnNpZGVTY3JlZW4gPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNJbnNpZGVTY3JlZW4gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmlld09yaWdpbmFsKCkge1xuICAgICAgICB3aW5kb3cub3Blbih0aGlzLnByZXZpZXdJbWFnZT8ub3JpZ2luPy5zcmMgfHwgdGhpcy5wcmV2aWV3SW1hZ2Uuc3JjLCAnX2JsYW5rJyk7XG4gICAgfVxuXG4gICAgcm90YXRlUmlnaHQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucm90YXRlICs9IDkwO1xuICAgICAgICB0aGlzLnVwZGF0ZVByZXZpZXdJbWFnZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIGZ1bGxTY3JlZW4oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSB0aGlzLmhvc3QubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcudGh5LWltYWdlLXByZXZpZXcnKTtcbiAgICAgICAgdGhpcy5pc0Z1bGxTY3JlZW4gPSB0cnVlO1xuICAgICAgICBjb25zdCBmdWxsc2NyZWVuUmVmID0gdGhpcy50aHlGdWxsc2NyZWVuLmxhdW5jaCh7XG4gICAgICAgICAgICB0YXJnZXQ6IHRhcmdldEVsZW1lbnRcbiAgICAgICAgfSk7XG4gICAgICAgIGZ1bGxzY3JlZW5SZWYuYWZ0ZXJFeGl0ZWQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc0Z1bGxTY3JlZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjb3B5TGluayhldmVudDogVGh5Q29weUV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5U2VydmljZS5zdWNjZXNzKHRoaXMubG9jYWxlKCkuY29weVN1Y2Nlc3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ub3RpZnlTZXJ2aWNlLmVycm9yKHRoaXMubG9jYWxlKCkuY29weUVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByZXYoKSB7XG4gICAgICAgIGlmICh0aGlzLnByZXZpZXdJbmRleCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMucHJldmlld0luZGV4LS07XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZ0RvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUHJldmlld0ltYWdlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZXh0KCkge1xuICAgICAgICBpZiAodGhpcy5wcmV2aWV3SW5kZXggPCB0aGlzLmltYWdlcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICB0aGlzLnByZXZpZXdJbmRleCsrO1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmdEb25lID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVByZXZpZXdJbWFnZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZHJhZ1JlbGVhc2VkKCkge1xuICAgICAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmltYWdlUmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggKiB0aGlzLnpvb207XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuaW1hZ2VSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQgKiB0aGlzLnpvb207XG4gICAgICAgIGNvbnN0IHsgbGVmdCwgdG9wIH0gPSBnZXRPZmZzZXQodGhpcy5pbWFnZVJlZi5uYXRpdmVFbGVtZW50LCB3aW5kb3cpO1xuICAgICAgICBjb25zdCB7IHdpZHRoOiBjbGllbnRXaWR0aCwgaGVpZ2h0OiBjbGllbnRIZWlnaHQgfSA9IGdldENsaWVudFNpemUoKTtcbiAgICAgICAgY29uc3QgaXNSb3RhdGUgPSB0aGlzLnJvdGF0ZSAlIDE4MCAhPT0gMDtcbiAgICAgICAgY29uc3QgZml0Q29udGVudFBhcmFtcyA9IHtcbiAgICAgICAgICAgIHdpZHRoOiBpc1JvdGF0ZSA/IGhlaWdodCA6IHdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiBpc1JvdGF0ZSA/IHdpZHRoIDogaGVpZ2h0LFxuICAgICAgICAgICAgbGVmdCxcbiAgICAgICAgICAgIHRvcCxcbiAgICAgICAgICAgIGNsaWVudFdpZHRoLFxuICAgICAgICAgICAgY2xpZW50SGVpZ2h0XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGZpdENvbnRlbnRQb3MgPSBnZXRGaXRDb250ZW50UG9zaXRpb24oZml0Q29udGVudFBhcmFtcyk7XG4gICAgICAgIGlmICghaXNVbmRlZmluZWRPck51bGwoZml0Q29udGVudFBvcy54KSB8fCAhaXNVbmRlZmluZWRPck51bGwoZml0Q29udGVudFBvcy55KSkge1xuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHsgLi4udGhpcy5wb3NpdGlvbiwgLi4uZml0Q29udGVudFBvcyB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdXJyZW50SW1hZ2VNb2RlID0gJ29yaWdpbmFsLXNjYWxlJztcbiAgICAgICAgdGhpcy5yb3RhdGUgPSB0aGlzLnByZXZpZXdDb25maWc/LnJvdGF0ZSA/PyAwO1xuICAgICAgICB0aGlzLnBvc2l0aW9uID0geyAuLi5pbml0aWFsUG9zaXRpb24gfTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlUHJldmlld0ltYWdlVHJhbnNmb3JtKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByZXZpZXdJbWFnZVRyYW5zZm9ybSA9IGBzY2FsZTNkKCR7dGhpcy56b29tfSwgJHt0aGlzLnpvb219LCAxKSByb3RhdGUoJHt0aGlzLnJvdGF0ZX1kZWcpYDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVByZXZpZXdJbWFnZVdyYXBwZXJUcmFuc2Zvcm0oKTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJldmlld0ltYWdlV3JhcHBlclRyYW5zZm9ybSA9IGB0cmFuc2xhdGUzZCgke3RoaXMucG9zaXRpb24ueH1weCwgJHt0aGlzLnBvc2l0aW9uLnl9cHgsIDApYDtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidGh5LWltYWdlLXByZXZpZXdcIiBbY2xhc3MudGh5LWltYWdlLXByZXZpZXctZnVsbHNjcmVlbl09XCJpc0Z1bGxTY3JlZW5cIj5cbiAgQGlmICghaXNGdWxsU2NyZWVuKSB7XG4gICAgPGRpdiBjbGFzcz1cInRoeS1pbWFnZS1wcmV2aWV3LWhlYWRlciBwbC0xMCBwci04XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGh5LWltYWdlLXByZXZpZXctaGVhZGVyLWluZm9cIj5cbiAgICAgICAgPHAgY2xhc3M9XCJ0aHktaW1hZ2UtbmFtZSB0ZXh0LXRydW5jYXRlXCIgW3RoeVRvb2x0aXBEaXNhYmxlZF09XCJwcmV2aWV3SW1hZ2U/Lm5hbWU/Lmxlbmd0aCA8IDMyXCIgW3RoeVRvb2x0aXBdPVwicHJldmlld0ltYWdlPy5uYW1lXCI+XG4gICAgICAgICAge3sgcHJldmlld0ltYWdlPy5uYW1lIH19XG4gICAgICAgIDwvcD5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aHktaW1hZ2Utc2l6ZVwiPiB7eyBwcmV2aWV3SW1hZ2U/LnNpemUgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxhIHRoeUFjdGlvbiB0aHlJY29uPVwiY2xvc2VcIiBbdGh5VG9vbHRpcF09XCJsb2NhbGUoKS5leGl0UHJldmlld1wiIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiAoY2xpY2spPVwidGh5RGlhbG9nLmNsb3NlKClcIj48L2E+XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChpc0Z1bGxTY3JlZW4pIHtcbiAgICA8YVxuICAgICAgY2xhc3M9XCJ0aHktaW1hZ2UtcHJldmlldy1leGl0LWZ1bGxzY3JlZW5cIlxuICAgICAgdGh5QWN0aW9uXG4gICAgICB0aHlJY29uPVwiY2xvc2VcIlxuICAgICAgaHJlZj1cImphdmFzY3JpcHQ6O1wiXG4gICAgICAoY2xpY2spPVwidGh5RnVsbHNjcmVlbi5leGl0KClcIlxuICAgICAgW3RoeVRvb2x0aXBdPVwibG9jYWxlKCkuZXhpdEZ1bGxTY3JlZW5cIj48L2E+XG4gIH1cbiAgPGRpdlxuICAgIGNsYXNzPVwidGh5LWltYWdlLXByZXZpZXctaW1nLXdyYXBwZXJcIlxuICAgICNpbWFnZVByZXZpZXdXcmFwcGVyXG4gICAgY2RrRHJhZ1xuICAgIFtjbGFzcy50aHktaW1hZ2UtcHJldmlldy1pbnNpZGVdPVwiaXNJbnNpZGVTY3JlZW5cIlxuICAgIFtzdHlsZS50cmFuc2Zvcm1dPVwicHJldmlld0ltYWdlV3JhcHBlclRyYW5zZm9ybVwiXG4gICAgW2Nka0RyYWdGcmVlRHJhZ1Bvc2l0aW9uXT1cInBvc2l0aW9uXCJcbiAgICAoY2RrRHJhZ1JlbGVhc2VkKT1cImRyYWdSZWxlYXNlZCgpXCI+XG4gICAgQGZvciAoaW1hZ2Ugb2YgaW1hZ2VzOyB0cmFjayAkaW5kZXg7IGxldCBpbWFnZUluZGV4ID0gJGluZGV4KSB7XG4gICAgICBAaWYgKHByZXZpZXdJbmRleCA9PT0gaW1hZ2VJbmRleCAmJiBpc0xvYWRpbmdEb25lKSB7XG4gICAgICAgIDxpbWcgI2ltZ1JlZiBjbGFzcz1cInRoeS1pbWFnZS1wcmV2aWV3LWltZ1wiIFtzcmNdPVwiaW1hZ2Uub2JqZWN0VVJMIHx8IGltYWdlLnNyY1wiIFtzdHlsZS50cmFuc2Zvcm1dPVwicHJldmlld0ltYWdlVHJhbnNmb3JtXCIgLz5cbiAgICAgIH1cbiAgICB9XG4gICAgPHRoeS1sb2FkaW5nIFt0aHlEb25lXT1cImlzTG9hZGluZ0RvbmVcIj48L3RoeS1sb2FkaW5nPlxuICA8L2Rpdj5cblxuICBAaWYgKGltYWdlcy5sZW5ndGggPiAxICYmICFpc0Z1bGxTY3JlZW4pIHtcbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInRoeS1pbWFnZS1wcmV2aWV3LXN3aXRjaC1sZWZ0XCJcbiAgICAgIFt0aHlUb29sdGlwRGlzYWJsZWRdPVwicHJldmlld0luZGV4IDw9IDBcIlxuICAgICAgW3RoeVRvb2x0aXBdPVwibG9jYWxlKCkucHJldlwiXG4gICAgICBbY2xhc3MudGh5LWltYWdlLXByZXZpZXctc3dpdGNoLWxlZnQtZGlzYWJsZWRdPVwicHJldmlld0luZGV4IDw9IDBcIlxuICAgICAgKGNsaWNrKT1cInByZXYoKVwiPlxuICAgICAgPHRoeS1pY29uIHRoeUljb25OYW1lPVwiYW5nbGUtbGVmdC1ib2xkXCI+PC90aHktaWNvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInRoeS1pbWFnZS1wcmV2aWV3LXN3aXRjaC1yaWdodFwiXG4gICAgICBbdGh5VG9vbHRpcF09XCJsb2NhbGUoKS5uZXh0XCJcbiAgICAgIFt0aHlUb29sdGlwRGlzYWJsZWRdPVwicHJldmlld0luZGV4ID49IGltYWdlcy5sZW5ndGggLSAxXCJcbiAgICAgIFtjbGFzcy50aHktaW1hZ2UtcHJldmlldy1zd2l0Y2gtcmlnaHQtZGlzYWJsZWRdPVwicHJldmlld0luZGV4ID49IGltYWdlcy5sZW5ndGggLSAxXCJcbiAgICAgIChjbGljayk9XCJuZXh0KClcIj5cbiAgICAgIDx0aHktaWNvbiB0aHlJY29uTmFtZT1cImFuZ2xlLXJpZ2h0LWJvbGRcIj4gPC90aHktaWNvbj5cbiAgICA8L2Rpdj5cbiAgfVxuICBAaWYgKCFpc0Z1bGxTY3JlZW4pIHtcbiAgICA8dGh5LWFjdGlvbnMgdGh5U2l6ZT1cInhzXCIgY2xhc3M9XCJ0aHktaW1hZ2UtcHJldmlldy1vcGVyYXRpb25zIHB5LTMgcHgtNFwiPlxuICAgICAgQGZvciAob3B0aW9uIG9mIHByZXZpZXdPcGVyYXRpb25zOyB0cmFjayAkaW5kZXg7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgIEBpZiAoIVsnb3JpZ2luYWwtc2NhbGUnLCAnZml0LXNjcmVlbicsICdjb3B5TGluayddLmluY2x1ZGVzKG9wdGlvbi50eXBlKSB8fCBjdXJyZW50SW1hZ2VNb2RlID09PSBvcHRpb24udHlwZSkge1xuICAgICAgICAgIDxhXG4gICAgICAgICAgICBocmVmPVwiamF2YXNjcmlwdDo7XCJcbiAgICAgICAgICAgIHRoeUFjdGlvblxuICAgICAgICAgICAgW3RoeUFjdGlvbkljb25dPVwib3B0aW9uLmljb25cIlxuICAgICAgICAgICAgW3RoeVRvb2x0aXBdPVwib3B0aW9uLm5hbWVcIlxuICAgICAgICAgICAgW3RoeVRvb2x0aXBPZmZzZXRdPVwiMTNcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9wdGlvbi5hY3Rpb24ocHJldmlld0ltYWdlKVwiPjwvYT5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKG9wdGlvbj8udHlwZSA9PT0gJ3pvb20tb3V0Jykge1xuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXItMlwiPiB7eyAoem9vbSAqIDEwMCkudG9GaXhlZCgwKSArICclJyB9fSA8L3NwYW4+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChvcHRpb24/LnR5cGUgPT09ICdyb3RhdGUtcmlnaHQnKSB7XG4gICAgICAgICAgPHRoeS1kaXZpZGVyIGNsYXNzPVwibWwtMlwiIFt0aHlWZXJ0aWNhbF09XCJ0cnVlXCI+PC90aHktZGl2aWRlcj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKG9wdGlvbi50eXBlID09PSAnY29weUxpbmsnKSB7XG4gICAgICAgICAgPGFcbiAgICAgICAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OjtcIlxuICAgICAgICAgICAgdGh5QWN0aW9uXG4gICAgICAgICAgICBbdGh5Q29weVRpcHNdPVwib3B0aW9uLm5hbWVcIlxuICAgICAgICAgICAgW3RoeUFjdGlvbkljb25dPVwib3B0aW9uLmljb25cIlxuICAgICAgICAgICAgW3RoeUNvcHlUaXBzT2Zmc2V0XT1cIjEzXCJcbiAgICAgICAgICAgICh0aHlDb3B5KT1cImNvcHlMaW5rKCRldmVudClcIlxuICAgICAgICAgICAgW3RoeUNvcHlDb250ZW50XT1cInByZXZpZXdJbWFnZU9yaWdpblNyY1wiXG4gICAgICAgICAgICBbdGh5U2hvd05vdGlmeV09XCJmYWxzZVwiPjwvYT5cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgPHRoeS1kaXZpZGVyIFt0aHlWZXJ0aWNhbF09XCJ0cnVlXCI+PC90aHktZGl2aWRlcj5cbiAgICAgIDxzcGFuIGNsYXNzPVwidGh5LWltYWdlLXByZXZpZXctb3BlcmF0aW9ucy10ZXh0XCI+IHt7IHByZXZpZXdJbmRleCArIDEgfX0gLyB7eyBpbWFnZXMubGVuZ3RoIH19IDwvc3Bhbj5cbiAgICA8L3RoeS1hY3Rpb25zPlxuICB9XG48L2Rpdj5cbiJdfQ==
@@ -1,3 +1,3 @@
1
1
  import { Version } from '@angular/core';
2
- export const VERSION = new Version('18.2.15');
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEMsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmVyc2lvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IG5ldyBWZXJzaW9uKCcxOC4yLjE1Jyk7XG4iXX0=
2
+ export const VERSION = new Version('18.2.17');
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEMsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmVyc2lvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IG5ldyBWZXJzaW9uKCcxOC4yLjE3Jyk7XG4iXX0=
@@ -214,6 +214,23 @@ var zhHansLocale = {
214
214
  },
215
215
  empty: {
216
216
  noDataText: '暂无数据'
217
+ },
218
+ image: {
219
+ zoomOut: '缩小',
220
+ zoomIn: '放大',
221
+ originalSize: '原始比例',
222
+ fitToScreen: '适应屏幕',
223
+ fullScreen: '全屏显示',
224
+ spin: '旋转',
225
+ download: '下载',
226
+ viewOriginal: '查看原图',
227
+ copyLink: '复制链接',
228
+ exitPreview: '退出预览',
229
+ exitFullScreen: '退出全屏',
230
+ copySuccess: '复制图片地址成功',
231
+ copyError: '复制图片地址失败',
232
+ prev: '上一张',
233
+ next: '下一张'
217
234
  }
218
235
  };
219
236
 
@@ -347,6 +364,23 @@ var zhHantLocale = {
347
364
  },
348
365
  empty: {
349
366
  noDataText: '暫無資料'
367
+ },
368
+ image: {
369
+ zoomOut: '縮小',
370
+ zoomIn: '放大',
371
+ originalSize: '原始比例',
372
+ fitToScreen: '適應屏幕',
373
+ fullScreen: '全屏顯示',
374
+ spin: '旋轉',
375
+ download: '下載',
376
+ viewOriginal: '查看原圖',
377
+ copyLink: '複製連結',
378
+ exitPreview: '退出預覽',
379
+ exitFullScreen: '退出全屏',
380
+ copySuccess: '複製圖片地址成功',
381
+ copyError: '複製圖片地址失敗',
382
+ prev: '上一張',
383
+ next: '下一張'
350
384
  }
351
385
  };
352
386
 
@@ -376,8 +410,8 @@ var enUsLocale = {
376
410
  today: 'Today',
377
411
  tomorrow: 'Tomorrow',
378
412
  nextWeek: 'Next week',
379
- lastSevenDays: 'Recent 7 days',
380
- lastThirtyDays: 'Recent 30 days',
413
+ lastSevenDays: '7 days',
414
+ lastThirtyDays: '30 days',
381
415
  currentMonth: 'This month',
382
416
  currentWeek: 'This week',
383
417
  advance: 'Advance',
@@ -480,6 +514,23 @@ var enUsLocale = {
480
514
  },
481
515
  empty: {
482
516
  noDataText: 'No data available'
517
+ },
518
+ image: {
519
+ zoomOut: 'Zoom out',
520
+ zoomIn: 'Zoom in',
521
+ originalSize: 'Original size',
522
+ fitToScreen: 'Fit to screen',
523
+ fullScreen: 'Full screen',
524
+ spin: 'Spin',
525
+ download: 'Download',
526
+ viewOriginal: 'View original',
527
+ copyLink: 'Copy link',
528
+ exitPreview: 'Exit preview',
529
+ exitFullScreen: 'Exit full screen',
530
+ copySuccess: 'Copied successfully',
531
+ copyError: 'Copy failed',
532
+ prev: 'Previous',
533
+ next: 'Next'
483
534
  }
484
535
  };
485
536
  /**
@@ -634,6 +685,23 @@ var jaJpLocale = {
634
685
  },
635
686
  empty: {
636
687
  noDataText: 'データはありません'
688
+ },
689
+ image: {
690
+ zoomOut: '縮小',
691
+ zoomIn: '拡大',
692
+ originalSize: '元のサイズ',
693
+ fitToScreen: '画面に合わせる',
694
+ fullScreen: '全画面表示',
695
+ spin: '回転',
696
+ download: 'ダウンロード',
697
+ viewOriginal: '元の画像を表示',
698
+ copyLink: 'リンクをコピー',
699
+ exitPreview: 'プレビューを終了',
700
+ exitFullScreen: '全画面表示を終了',
701
+ copySuccess: '画像のURLをコピーしました',
702
+ copyError: '画像のURLをコピーできませんでした',
703
+ prev: '前の画像',
704
+ next: '次の画像'
637
705
  }
638
706
  };
639
707
 
@@ -767,6 +835,23 @@ var deDeLocale = {
767
835
  },
768
836
  empty: {
769
837
  noDataText: 'Keine Daten vorhanden'
838
+ },
839
+ image: {
840
+ zoomOut: 'Verkleinern',
841
+ zoomIn: 'Vergrößern',
842
+ originalSize: 'Originalgröße',
843
+ fitToScreen: 'An den Bildschirm anpassen',
844
+ fullScreen: 'Vollbild anzeigen',
845
+ spin: 'Drehen',
846
+ download: 'Herunterladen',
847
+ viewOriginal: 'Original anzeigen',
848
+ copyLink: 'Link kopieren',
849
+ exitPreview: 'Vorschau beenden',
850
+ exitFullScreen: 'Vollbildmodus beenden',
851
+ copySuccess: 'Link erfolgreich kopiert',
852
+ copyError: 'Link kopieren fehlgeschlagen',
853
+ prev: 'Vorherige',
854
+ next: 'Nächste'
770
855
  }
771
856
  };
772
857