@ks89/angular-modal-gallery 11.1.2 → 13.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/CONTRIBUTING.md +20 -24
- package/LICENSE +1 -1
- package/README.md +11 -6
- package/fesm2022/ks89-angular-modal-gallery.mjs +151 -139
- package/fesm2022/ks89-angular-modal-gallery.mjs.map +1 -1
- package/lib/components/components.d.ts +1 -1
- package/lib/model/action.enum.d.ts +2 -2
- package/package.json +9 -11
- package/public-api.d.ts +23 -18
- package/esm2022/ks89-angular-modal-gallery.mjs +0 -5
- package/esm2022/lib/components/accessibility-default.mjs +0 -41
- package/esm2022/lib/components/accessible.component.mjs +0 -130
- package/esm2022/lib/components/carousel/carousel-previews/carousel-previews.component.mjs +0 -456
- package/esm2022/lib/components/carousel/carousel.component.mjs +0 -738
- package/esm2022/lib/components/components.mjs +0 -50
- package/esm2022/lib/components/current-image/current-image.component.mjs +0 -607
- package/esm2022/lib/components/current-image/loading-spinner/loading-spinner.component.mjs +0 -80
- package/esm2022/lib/components/dots/dots.component.mjs +0 -124
- package/esm2022/lib/components/modal-gallery/attach-to-overlay.service.mjs +0 -42
- package/esm2022/lib/components/modal-gallery/modal-gallery-ref.mjs +0 -103
- package/esm2022/lib/components/modal-gallery/modal-gallery.component.mjs +0 -499
- package/esm2022/lib/components/modal-gallery/modal-gallery.service.mjs +0 -168
- package/esm2022/lib/components/modal-gallery/modal-gallery.tokens.mjs +0 -26
- package/esm2022/lib/components/plain-gallery/plain-gallery.component.mjs +0 -249
- package/esm2022/lib/components/previews/previews.component.mjs +0 -263
- package/esm2022/lib/components/upper-buttons/upper-buttons-default.mjs +0 -76
- package/esm2022/lib/components/upper-buttons/upper-buttons.component.mjs +0 -243
- package/esm2022/lib/directives/a-tag-bg-image.directive.mjs +0 -78
- package/esm2022/lib/directives/click-outside.directive.mjs +0 -91
- package/esm2022/lib/directives/description.directive.mjs +0 -98
- package/esm2022/lib/directives/direction.directive.mjs +0 -73
- package/esm2022/lib/directives/directives.mjs +0 -51
- package/esm2022/lib/directives/fallback-image.directive.mjs +0 -59
- package/esm2022/lib/directives/keyboard-navigation.directive.mjs +0 -64
- package/esm2022/lib/directives/margin.directive.mjs +0 -84
- package/esm2022/lib/directives/max-size.directive.mjs +0 -75
- package/esm2022/lib/directives/size.directive.mjs +0 -76
- package/esm2022/lib/directives/swipe.directive.mjs +0 -116
- package/esm2022/lib/directives/wrap.directive.mjs +0 -74
- package/esm2022/lib/modal-gallery.module.mjs +0 -88
- package/esm2022/lib/model/accessibility.interface.mjs +0 -25
- package/esm2022/lib/model/action.enum.mjs +0 -36
- package/esm2022/lib/model/buttons-config.interface.mjs +0 -62
- package/esm2022/lib/model/carousel-config.interface.mjs +0 -25
- package/esm2022/lib/model/carousel-image-config.interface.mjs +0 -25
- package/esm2022/lib/model/carousel-preview-config.interface.mjs +0 -25
- package/esm2022/lib/model/current-image-config.interface.mjs +0 -25
- package/esm2022/lib/model/description.interface.mjs +0 -33
- package/esm2022/lib/model/dots-config.interface.mjs +0 -25
- package/esm2022/lib/model/image-internal.class.mjs +0 -35
- package/esm2022/lib/model/image.class.mjs +0 -56
- package/esm2022/lib/model/interaction-event.interface.mjs +0 -2
- package/esm2022/lib/model/keyboard-config.interface.mjs +0 -25
- package/esm2022/lib/model/keyboard.enum.mjs +0 -35
- package/esm2022/lib/model/lib-config.interface.mjs +0 -25
- package/esm2022/lib/model/loading-config.interface.mjs +0 -37
- package/esm2022/lib/model/max-size.interface.mjs +0 -25
- package/esm2022/lib/model/modal-gallery-config.interface.mjs +0 -25
- package/esm2022/lib/model/plain-gallery-config.interface.mjs +0 -55
- package/esm2022/lib/model/play-config.interface.mjs +0 -25
- package/esm2022/lib/model/preview-config.interface.mjs +0 -25
- package/esm2022/lib/model/size.interface.mjs +0 -25
- package/esm2022/lib/model/slide-config.interface.mjs +0 -25
- package/esm2022/lib/services/config.service.mjs +0 -388
- package/esm2022/lib/services/id-validator.service.mjs +0 -71
- package/esm2022/lib/utils/image.util.mjs +0 -48
- package/esm2022/lib/utils/user-input.util.mjs +0 -104
- package/esm2022/public-api.mjs +0 -42
|
@@ -1,263 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
The MIT License (MIT)
|
|
3
|
-
|
|
4
|
-
Copyright (C) 2017-2023 Stefano Cappa (Ks89)
|
|
5
|
-
|
|
6
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
8
|
-
in the Software without restriction, including without limitation the rights
|
|
9
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
11
|
-
furnished to do so, subject to the following conditions:
|
|
12
|
-
|
|
13
|
-
The above copyright notice and this permission notice shall be included in all
|
|
14
|
-
copies or substantial portions of the Software.
|
|
15
|
-
|
|
16
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
|
-
SOFTWARE.
|
|
23
|
-
*/
|
|
24
|
-
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
|
|
25
|
-
import { AccessibleComponent } from '../accessible.component';
|
|
26
|
-
import { ImageModalEvent } from '../../model/image.class';
|
|
27
|
-
import { NEXT, PREV } from '../../utils/user-input.util';
|
|
28
|
-
import { getIndex } from '../../utils/image.util';
|
|
29
|
-
import { Action } from '../../model/action.enum';
|
|
30
|
-
import { DEFAULT_PREVIEW_SIZE } from '../../services/config.service';
|
|
31
|
-
import * as i0 from "@angular/core";
|
|
32
|
-
import * as i1 from "../../services/config.service";
|
|
33
|
-
import * as i2 from "@angular/common";
|
|
34
|
-
import * as i3 from "../../directives/size.directive";
|
|
35
|
-
import * as i4 from "../../directives/fallback-image.directive";
|
|
36
|
-
/**
|
|
37
|
-
* Component with image previews
|
|
38
|
-
*/
|
|
39
|
-
export class PreviewsComponent extends AccessibleComponent {
|
|
40
|
-
constructor(configService) {
|
|
41
|
-
super();
|
|
42
|
-
this.configService = configService;
|
|
43
|
-
/**
|
|
44
|
-
* Output to emit the clicked preview. The payload contains the `ImageEvent` associated to the clicked preview.
|
|
45
|
-
*/
|
|
46
|
-
this.clickPreview = new EventEmitter();
|
|
47
|
-
/**
|
|
48
|
-
* Enum of type `Action` that represents a mouse click on a button.
|
|
49
|
-
* Declared here to be used inside the template.
|
|
50
|
-
*/
|
|
51
|
-
this.clickAction = Action.CLICK;
|
|
52
|
-
/**
|
|
53
|
-
* Enum of type `Action` that represents a keyboard action.
|
|
54
|
-
* Declared here to be used inside the template.
|
|
55
|
-
*/
|
|
56
|
-
this.keyboardAction = Action.KEYBOARD;
|
|
57
|
-
/**
|
|
58
|
-
* Array of `InternalLibImage` exposed to the template. This field is initialized
|
|
59
|
-
* applying transformations, default values and so on to the input of the same type.
|
|
60
|
-
*/
|
|
61
|
-
this.previews = [];
|
|
62
|
-
this.defaultPreviewSize = DEFAULT_PREVIEW_SIZE;
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Method ´ngOnInit´ to build `configPreview` applying a default value and also to
|
|
66
|
-
* init the `previews` array.
|
|
67
|
-
* This is an angular lifecycle hook, so its called automatically by Angular itself.
|
|
68
|
-
* In particular, it's called only one time!!!
|
|
69
|
-
*/
|
|
70
|
-
ngOnInit() {
|
|
71
|
-
const libConfig = this.configService.getConfig(this.id);
|
|
72
|
-
if (!libConfig) {
|
|
73
|
-
throw new Error('Internal library error - libConfig must be defined');
|
|
74
|
-
}
|
|
75
|
-
this.accessibilityConfig = libConfig.accessibilityConfig;
|
|
76
|
-
this.slideConfig = libConfig.slideConfig;
|
|
77
|
-
this.previewConfig = libConfig.previewConfig;
|
|
78
|
-
this.initPreviews(this.currentImage, this.images);
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Method to check if an image is active (i.e. a preview image).
|
|
82
|
-
* @param InternalLibImage preview is an image to check if it's active or not
|
|
83
|
-
* @returns boolean true if is active, false otherwise
|
|
84
|
-
*/
|
|
85
|
-
isActive(preview) {
|
|
86
|
-
if (!preview) {
|
|
87
|
-
return false;
|
|
88
|
-
}
|
|
89
|
-
return preview.id === this.currentImage.id;
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Method ´ngOnChanges´ to update `previews` array.
|
|
93
|
-
* Also, both `start` and `end` local variables will be updated accordingly.
|
|
94
|
-
* This is an angular lifecycle hook, so its called automatically by Angular itself.
|
|
95
|
-
* In particular, it's called when any data-bound property of a directive changes!!!
|
|
96
|
-
*/
|
|
97
|
-
ngOnChanges(changes) {
|
|
98
|
-
let currentImage = changes.currentImage?.currentValue ?? this.currentImage;
|
|
99
|
-
let images = changes.images?.currentValue ?? this.images;
|
|
100
|
-
if (this.previewConfig && currentImage && images) {
|
|
101
|
-
this.initPreviews(currentImage, images);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Method called by events from both keyboard and mouse on a preview.
|
|
106
|
-
* This will trigger the `clickpreview` output with the input preview as its payload.
|
|
107
|
-
* @param InternalLibImage preview that triggered this method
|
|
108
|
-
* @param KeyboardEvent | MouseEvent event payload
|
|
109
|
-
* @param Action action that triggered the source event or `Action.NORMAL` if not specified
|
|
110
|
-
*/
|
|
111
|
-
onImageEvent(preview, event, action = Action.NORMAL) {
|
|
112
|
-
// It's suggested to stop propagation of the event, so the
|
|
113
|
-
// Cdk background will not catch a click and close the modal (like it does on Windows Chrome/FF).
|
|
114
|
-
event?.stopPropagation();
|
|
115
|
-
if (!this.previewConfig || !this.previewConfig.clickable) {
|
|
116
|
-
return;
|
|
117
|
-
}
|
|
118
|
-
const result = super.handleImageEvent(event);
|
|
119
|
-
if (result === NEXT || result === PREV) {
|
|
120
|
-
this.clickPreview.emit(new ImageModalEvent(this.id, action, getIndex(preview, this.images)));
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Method called by events from both keyboard and mouse on a navigation arrow.
|
|
125
|
-
* It also emits an event to specify which arrow.
|
|
126
|
-
* @param string direction of the navigation that can be either 'next' or 'prev'
|
|
127
|
-
* @param KeyboardEvent | MouseEvent event payload
|
|
128
|
-
* @param Action action that triggered the source event or `Action.NORMAL` if not specified
|
|
129
|
-
*/
|
|
130
|
-
onNavigationEvent(direction, event, action = Action.NORMAL) {
|
|
131
|
-
const result = super.handleNavigationEvent(direction, event);
|
|
132
|
-
if (result === NEXT) {
|
|
133
|
-
this.next();
|
|
134
|
-
}
|
|
135
|
-
else if (result === PREV) {
|
|
136
|
-
this.previous();
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Method used in the template to track ids in ngFor.
|
|
141
|
-
* @param number index of the array
|
|
142
|
-
* @param Image item of the array
|
|
143
|
-
* @returns number the id of the item
|
|
144
|
-
*/
|
|
145
|
-
trackById(index, item) {
|
|
146
|
-
return item.id;
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* Indicates if the previews 'left arrow' should be displayed or not.
|
|
150
|
-
* @returns
|
|
151
|
-
*/
|
|
152
|
-
displayLeftPreviewsArrow() {
|
|
153
|
-
// Don't show arrows if requested previews number equals or is greated than total number of imgaes
|
|
154
|
-
if (this.previewConfig?.number !== undefined && this.images && this.previewConfig?.number >= this.images?.length) {
|
|
155
|
-
return false;
|
|
156
|
-
}
|
|
157
|
-
return (this.previewConfig?.arrows && this.start > 0) || !!this.slideConfig?.infinite;
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* Indicates if the previews 'right arrow' should be displayed or not.
|
|
161
|
-
* @returns
|
|
162
|
-
*/
|
|
163
|
-
displayRightPreviewsArrow() {
|
|
164
|
-
// Don't show arrows if requested previews number equals or is greated than total number of imgaes
|
|
165
|
-
if (this.previewConfig?.number !== undefined && this.images && this.previewConfig?.number >= this.images?.length) {
|
|
166
|
-
return false;
|
|
167
|
-
}
|
|
168
|
-
return (this.previewConfig?.arrows && this.images && this.end < this.images.length) || !!this.slideConfig?.infinite;
|
|
169
|
-
}
|
|
170
|
-
/**
|
|
171
|
-
* Private method to init previews based on the currentImage and the full array of images.
|
|
172
|
-
* The current image in mandatory to show always the current preview (as highlighted).
|
|
173
|
-
* @param InternalLibImage currentImage to decide how to show previews, because I always want to see the current image as highlighted
|
|
174
|
-
* @param InternalLibImage[] images is the array of all images.
|
|
175
|
-
*/
|
|
176
|
-
initPreviews(currentImage, images) {
|
|
177
|
-
this.setIndexesPreviews(currentImage, images);
|
|
178
|
-
this.previews = images.filter((img, i) => i >= this.start && i < this.end);
|
|
179
|
-
}
|
|
180
|
-
/**
|
|
181
|
-
* Private method to update both `start` and `end` based on the currentImage.
|
|
182
|
-
*/
|
|
183
|
-
setIndexesPreviews(currentImage, images) {
|
|
184
|
-
if (!this.previewConfig || !images || !currentImage) {
|
|
185
|
-
throw new Error('Internal library error - previewConfig, currentImage and images must be defined');
|
|
186
|
-
}
|
|
187
|
-
const previewsNumber = this.previewConfig.number;
|
|
188
|
-
let start = getIndex(currentImage, images) - Math.floor(previewsNumber / 2);
|
|
189
|
-
// start is, at a minimum, the first index
|
|
190
|
-
if (start < 0)
|
|
191
|
-
start = 0;
|
|
192
|
-
// end index
|
|
193
|
-
let end = start + previewsNumber;
|
|
194
|
-
// end is, at a maximum, the last index
|
|
195
|
-
if (end > images.length) {
|
|
196
|
-
start -= end - images.length;
|
|
197
|
-
if (start < 0)
|
|
198
|
-
start = 0; // start is, at a minimum, the first index
|
|
199
|
-
end = images.length;
|
|
200
|
-
}
|
|
201
|
-
this.start = start;
|
|
202
|
-
this.end = end;
|
|
203
|
-
}
|
|
204
|
-
/**
|
|
205
|
-
* Private method to update the visible previews navigating to the right (next).
|
|
206
|
-
*/
|
|
207
|
-
next() {
|
|
208
|
-
if (!this.previewConfig) {
|
|
209
|
-
throw new Error('Internal library error - previewConfig must be defined');
|
|
210
|
-
}
|
|
211
|
-
if (this.end >= this.images.length) {
|
|
212
|
-
// check if nextImage should be blocked
|
|
213
|
-
const preventSliding = !!this.slideConfig && this.slideConfig.infinite === false;
|
|
214
|
-
if (preventSliding) {
|
|
215
|
-
return;
|
|
216
|
-
}
|
|
217
|
-
this.start = 0;
|
|
218
|
-
}
|
|
219
|
-
else {
|
|
220
|
-
this.start++;
|
|
221
|
-
}
|
|
222
|
-
this.end = this.start + Math.min(this.previewConfig.number, this.images.length);
|
|
223
|
-
this.previews = this.images.filter((img, i) => i >= this.start && i < this.end);
|
|
224
|
-
}
|
|
225
|
-
/**
|
|
226
|
-
* Private method to update the visible previews navigating to the left (previous).
|
|
227
|
-
*/
|
|
228
|
-
previous() {
|
|
229
|
-
if (!this.previewConfig) {
|
|
230
|
-
throw new Error('Internal library error - previewConfig must be defined');
|
|
231
|
-
}
|
|
232
|
-
if (this.start <= 0) {
|
|
233
|
-
// check if prevImage should be blocked
|
|
234
|
-
const preventSliding = !!this.slideConfig && this.slideConfig.infinite === false;
|
|
235
|
-
if (preventSliding) {
|
|
236
|
-
return;
|
|
237
|
-
}
|
|
238
|
-
this.end = this.images.length;
|
|
239
|
-
}
|
|
240
|
-
else {
|
|
241
|
-
this.end--;
|
|
242
|
-
}
|
|
243
|
-
this.start = this.end - Math.min(this.previewConfig.number, this.images.length);
|
|
244
|
-
this.previews = this.images.filter((img, i) => i >= this.start && i < this.end);
|
|
245
|
-
}
|
|
246
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: PreviewsComponent, deps: [{ token: i1.ConfigService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
247
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.5", type: PreviewsComponent, selector: "ks-previews", inputs: { id: "id", currentImage: "currentImage", images: "images", customTemplate: "customTemplate" }, outputs: { clickPreview: "clickPreview" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<nav class=\"previews-container\"\n [class.mobile-visible]=\"previewConfig?.mobileVisible\"\n [attr.aria-label]=\"accessibilityConfig?.previewsContainerAriaLabel\"\n [title]=\"accessibilityConfig?.previewsContainerTitle\">\n\n <ng-container *ngIf=\"previewConfig?.visible\">\n <a class=\"nav-left\"\n [attr.aria-label]=\"accessibilityConfig?.previewScrollPrevAriaLabel\"\n [tabIndex]=\"displayLeftPreviewsArrow() ? 0 : -1\" role=\"button\"\n (click)=\"onNavigationEvent('left', $event)\" (keyup)=\"onNavigationEvent('left', $event)\">\n <div class=\"inside {{ displayLeftPreviewsArrow() ? 'left-arrow-preview-image' : 'empty-arrow-preview-image'}}\"\n aria-hidden=\"true\"\n [title]=\"accessibilityConfig?.previewScrollPrevTitle\"></div>\n </a>\n\n <ng-container *ngFor=\"let preview of previews; trackBy: trackById; let index = index\">\n\n <div class=\"preview-container {{!previewConfig?.clickable ? ' unclickable' : ''}}\"\n (click)=\"onImageEvent(preview, $event, clickAction)\"\n (keyup)=\"onImageEvent(preview, $event, keyboardAction)\"\n >\n <ng-container \n *ngTemplateOutlet=\"!customTemplate ? defaultTemplate : customTemplate ; context:{preview, defaultTemplate}\">\n </ng-container>\n <ng-template #defaultTemplate>\n <img *ngIf=\"preview?.modal?.img\"\n class=\"inside preview-image {{isActive(preview) ? 'active' : ''}}\"\n [loading]=\"preview.loading\"\n [attr.fetchpriority]=\"preview.fetchpriority\"\n [src]=\"preview.plain?.img ? preview.plain?.img! : preview.modal.img\"\n ksFallbackImage [fallbackImg]=\"preview.plain?.fallbackImg ? preview.plain?.fallbackImg : preview.modal.fallbackImg\"\n ksSize [sizeConfig]=\"{width: previewConfig?.size ? previewConfig?.size?.width! : defaultPreviewSize.width,\n height: previewConfig?.size ? previewConfig?.size?.height! : defaultPreviewSize.height}\"\n [attr.aria-label]=\"preview.modal.ariaLabel ? preview.modal.ariaLabel : ''\"\n [title]=\"(preview.modal.title || preview.modal.title === '') ? preview.modal.title : ''\"\n alt=\"{{preview.modal.alt ? preview.modal.alt : ''}}\"\n [tabIndex]=\"0\" role=\"img\"\n />\n </ng-template>\n </div>\n\n </ng-container>\n\n\n <a class=\"nav-right\"\n [attr.aria-label]=\"accessibilityConfig?.previewScrollNextAriaLabel\"\n [tabIndex]=\"displayRightPreviewsArrow() ? 0 : -1\" role=\"button\"\n (click)=\"onNavigationEvent('right', $event)\" (keyup)=\"onNavigationEvent('right', $event)\">\n <div class=\"inside {{ displayRightPreviewsArrow() ? 'right-arrow-preview-image' : 'empty-arrow-preview-image'}}\"\n aria-hidden=\"true\"\n [title]=\"accessibilityConfig?.previewScrollNextTitle\"></div>\n </a>\n </ng-container>\n\n</nav>\n", styles: ["@media only screen and (max-width: 767px),only screen and (max-device-width: 767px){.previews-container{display:none}.previews-container>.preview-image{display:none}.previews-container>.nav-left{display:none}.previews-container>.nav-right{display:none}.previews-container.mobile-visible{align-items:center;animation:fadein-semi-visible08 .8s;display:flex;flex-direction:row;justify-content:center;margin-bottom:15px}.previews-container.mobile-visible>.nav-left{display:flex}.previews-container.mobile-visible>.nav-right{display:flex}.previews-container.mobile-visible>.preview-image{cursor:pointer;display:flex;margin-left:2px;margin-right:2px;opacity:.7;height:50px}.previews-container.mobile-visible>.preview-image.active{opacity:1}.previews-container.mobile-visible>.preview-image.unclickable{cursor:not-allowed}.previews-container.mobile-visible>.preview-image:hover{opacity:1;transition:all .5s ease;transition-property:opacity}}@media only screen and (min-device-width: 768px){.previews-container{align-items:center;animation:fadein-semi-visible08 .8s;display:flex;flex-direction:row;justify-content:center;margin-bottom:15px}.previews-container .preview-container{margin-left:2px;margin-right:2px;cursor:pointer}.previews-container .preview-container.unclickable{cursor:not-allowed}.previews-container .preview-container .preview-image{opacity:.7;height:50px}.previews-container .preview-container .preview-image.active{opacity:1}.previews-container .preview-container .preview-image:hover{opacity:1;transition:all .5s ease;transition-property:opacity}.previews-container .nav,.previews-container>.nav-right,.previews-container>.nav-left{color:#919191;cursor:pointer;transition:all .5s}.previews-container .nav:hover,.previews-container>.nav-right:hover,.previews-container>.nav-left:hover{transform:scale(1.1)}.previews-container>.nav-left{margin-right:10px}.previews-container>.nav-right{margin-left:10px}}@keyframes fadein-visible{0%{opacity:0}to{opacity:1}}@keyframes fadein-semi-visible05{0%{opacity:0}to{opacity:.5}}@keyframes fadein-semi-visible08{0%{opacity:0}to{opacity:.8}}@keyframes fadein-semi-visible09{0%{opacity:0}to{opacity:.9}}\n", ".arrow-preview-image,.right-arrow-preview-image,.left-arrow-preview-image,.empty-arrow-preview-image{width:15px;height:15px;opacity:.5}.empty-arrow-preview-image{background:black;opacity:0}.left-arrow-preview-image{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/PjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDQ3Ny4xNzUgNDc3LjE3NSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDc3LjE3NSA0NzcuMTc1OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgd2lkdGg9IjUxMnB4IiBoZWlnaHQ9IjUxMnB4Ij48Zz48cGF0aCBkPSJNMTQ1LjE4OCwyMzguNTc1bDIxNS41LTIxNS41YzUuMy01LjMsNS4zLTEzLjgsMC0xOS4xcy0xMy44LTUuMy0xOS4xLDBsLTIyNS4xLDIyNS4xYy01LjMsNS4zLTUuMywxMy44LDAsMTkuMWwyMjUuMSwyMjUgICBjMi42LDIuNiw2LjEsNCw5LjUsNHM2LjktMS4zLDkuNS00YzUuMy01LjMsNS4zLTEzLjgsMC0xOS4xTDE0NS4xODgsMjM4LjU3NXoiIGZpbGw9IiNGRkZGRkYiLz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PC9zdmc+);background-size:15px;transition:all .5s}.left-arrow-preview-image:hover{transform:scale(1.2)}.right-arrow-preview-image{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/PjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDQ3Ny4xNzUgNDc3LjE3NSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDc3LjE3NSA0NzcuMTc1OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgd2lkdGg9IjUxMnB4IiBoZWlnaHQ9IjUxMnB4Ij48Zz48cGF0aCBkPSJNMzYwLjczMSwyMjkuMDc1bC0yMjUuMS0yMjUuMWMtNS4zLTUuMy0xMy44LTUuMy0xOS4xLDBzLTUuMywxMy44LDAsMTkuMWwyMTUuNSwyMTUuNWwtMjE1LjUsMjE1LjUgICBjLTUuMyw1LjMtNS4zLDEzLjgsMCwxOS4xYzIuNiwyLjYsNi4xLDQsOS41LDRjMy40LDAsNi45LTEuMyw5LjUtNGwyMjUuMS0yMjUuMUMzNjUuOTMxLDI0Mi44NzUsMzY1LjkzMSwyMzQuMjc1LDM2MC43MzEsMjI5LjA3NXogICAiIGZpbGw9IiNGRkZGRkYiLz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PC9zdmc+);background-size:15px;transition:all .5s}.right-arrow-preview-image:hover{transform:scale(1.2)}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.SizeDirective, selector: "[ksSize]", inputs: ["sizeConfig"] }, { kind: "directive", type: i4.FallbackImageDirective, selector: "[ksFallbackImage]", inputs: ["fallbackImg"], outputs: ["fallbackApplied"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
248
|
-
}
|
|
249
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: PreviewsComponent, decorators: [{
|
|
250
|
-
type: Component,
|
|
251
|
-
args: [{ selector: 'ks-previews', changeDetection: ChangeDetectionStrategy.OnPush, template: "<nav class=\"previews-container\"\n [class.mobile-visible]=\"previewConfig?.mobileVisible\"\n [attr.aria-label]=\"accessibilityConfig?.previewsContainerAriaLabel\"\n [title]=\"accessibilityConfig?.previewsContainerTitle\">\n\n <ng-container *ngIf=\"previewConfig?.visible\">\n <a class=\"nav-left\"\n [attr.aria-label]=\"accessibilityConfig?.previewScrollPrevAriaLabel\"\n [tabIndex]=\"displayLeftPreviewsArrow() ? 0 : -1\" role=\"button\"\n (click)=\"onNavigationEvent('left', $event)\" (keyup)=\"onNavigationEvent('left', $event)\">\n <div class=\"inside {{ displayLeftPreviewsArrow() ? 'left-arrow-preview-image' : 'empty-arrow-preview-image'}}\"\n aria-hidden=\"true\"\n [title]=\"accessibilityConfig?.previewScrollPrevTitle\"></div>\n </a>\n\n <ng-container *ngFor=\"let preview of previews; trackBy: trackById; let index = index\">\n\n <div class=\"preview-container {{!previewConfig?.clickable ? ' unclickable' : ''}}\"\n (click)=\"onImageEvent(preview, $event, clickAction)\"\n (keyup)=\"onImageEvent(preview, $event, keyboardAction)\"\n >\n <ng-container \n *ngTemplateOutlet=\"!customTemplate ? defaultTemplate : customTemplate ; context:{preview, defaultTemplate}\">\n </ng-container>\n <ng-template #defaultTemplate>\n <img *ngIf=\"preview?.modal?.img\"\n class=\"inside preview-image {{isActive(preview) ? 'active' : ''}}\"\n [loading]=\"preview.loading\"\n [attr.fetchpriority]=\"preview.fetchpriority\"\n [src]=\"preview.plain?.img ? preview.plain?.img! : preview.modal.img\"\n ksFallbackImage [fallbackImg]=\"preview.plain?.fallbackImg ? preview.plain?.fallbackImg : preview.modal.fallbackImg\"\n ksSize [sizeConfig]=\"{width: previewConfig?.size ? previewConfig?.size?.width! : defaultPreviewSize.width,\n height: previewConfig?.size ? previewConfig?.size?.height! : defaultPreviewSize.height}\"\n [attr.aria-label]=\"preview.modal.ariaLabel ? preview.modal.ariaLabel : ''\"\n [title]=\"(preview.modal.title || preview.modal.title === '') ? preview.modal.title : ''\"\n alt=\"{{preview.modal.alt ? preview.modal.alt : ''}}\"\n [tabIndex]=\"0\" role=\"img\"\n />\n </ng-template>\n </div>\n\n </ng-container>\n\n\n <a class=\"nav-right\"\n [attr.aria-label]=\"accessibilityConfig?.previewScrollNextAriaLabel\"\n [tabIndex]=\"displayRightPreviewsArrow() ? 0 : -1\" role=\"button\"\n (click)=\"onNavigationEvent('right', $event)\" (keyup)=\"onNavigationEvent('right', $event)\">\n <div class=\"inside {{ displayRightPreviewsArrow() ? 'right-arrow-preview-image' : 'empty-arrow-preview-image'}}\"\n aria-hidden=\"true\"\n [title]=\"accessibilityConfig?.previewScrollNextTitle\"></div>\n </a>\n </ng-container>\n\n</nav>\n", styles: ["@media only screen and (max-width: 767px),only screen and (max-device-width: 767px){.previews-container{display:none}.previews-container>.preview-image{display:none}.previews-container>.nav-left{display:none}.previews-container>.nav-right{display:none}.previews-container.mobile-visible{align-items:center;animation:fadein-semi-visible08 .8s;display:flex;flex-direction:row;justify-content:center;margin-bottom:15px}.previews-container.mobile-visible>.nav-left{display:flex}.previews-container.mobile-visible>.nav-right{display:flex}.previews-container.mobile-visible>.preview-image{cursor:pointer;display:flex;margin-left:2px;margin-right:2px;opacity:.7;height:50px}.previews-container.mobile-visible>.preview-image.active{opacity:1}.previews-container.mobile-visible>.preview-image.unclickable{cursor:not-allowed}.previews-container.mobile-visible>.preview-image:hover{opacity:1;transition:all .5s ease;transition-property:opacity}}@media only screen and (min-device-width: 768px){.previews-container{align-items:center;animation:fadein-semi-visible08 .8s;display:flex;flex-direction:row;justify-content:center;margin-bottom:15px}.previews-container .preview-container{margin-left:2px;margin-right:2px;cursor:pointer}.previews-container .preview-container.unclickable{cursor:not-allowed}.previews-container .preview-container .preview-image{opacity:.7;height:50px}.previews-container .preview-container .preview-image.active{opacity:1}.previews-container .preview-container .preview-image:hover{opacity:1;transition:all .5s ease;transition-property:opacity}.previews-container .nav,.previews-container>.nav-right,.previews-container>.nav-left{color:#919191;cursor:pointer;transition:all .5s}.previews-container .nav:hover,.previews-container>.nav-right:hover,.previews-container>.nav-left:hover{transform:scale(1.1)}.previews-container>.nav-left{margin-right:10px}.previews-container>.nav-right{margin-left:10px}}@keyframes fadein-visible{0%{opacity:0}to{opacity:1}}@keyframes fadein-semi-visible05{0%{opacity:0}to{opacity:.5}}@keyframes fadein-semi-visible08{0%{opacity:0}to{opacity:.8}}@keyframes fadein-semi-visible09{0%{opacity:0}to{opacity:.9}}\n", ".arrow-preview-image,.right-arrow-preview-image,.left-arrow-preview-image,.empty-arrow-preview-image{width:15px;height:15px;opacity:.5}.empty-arrow-preview-image{background:black;opacity:0}.left-arrow-preview-image{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/PjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDQ3Ny4xNzUgNDc3LjE3NSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDc3LjE3NSA0NzcuMTc1OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgd2lkdGg9IjUxMnB4IiBoZWlnaHQ9IjUxMnB4Ij48Zz48cGF0aCBkPSJNMTQ1LjE4OCwyMzguNTc1bDIxNS41LTIxNS41YzUuMy01LjMsNS4zLTEzLjgsMC0xOS4xcy0xMy44LTUuMy0xOS4xLDBsLTIyNS4xLDIyNS4xYy01LjMsNS4zLTUuMywxMy44LDAsMTkuMWwyMjUuMSwyMjUgICBjMi42LDIuNiw2LjEsNCw5LjUsNHM2LjktMS4zLDkuNS00YzUuMy01LjMsNS4zLTEzLjgsMC0xOS4xTDE0NS4xODgsMjM4LjU3NXoiIGZpbGw9IiNGRkZGRkYiLz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PC9zdmc+);background-size:15px;transition:all .5s}.left-arrow-preview-image:hover{transform:scale(1.2)}.right-arrow-preview-image{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/PjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDQ3Ny4xNzUgNDc3LjE3NSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDc3LjE3NSA0NzcuMTc1OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgd2lkdGg9IjUxMnB4IiBoZWlnaHQ9IjUxMnB4Ij48Zz48cGF0aCBkPSJNMzYwLjczMSwyMjkuMDc1bC0yMjUuMS0yMjUuMWMtNS4zLTUuMy0xMy44LTUuMy0xOS4xLDBzLTUuMywxMy44LDAsMTkuMWwyMTUuNSwyMTUuNWwtMjE1LjUsMjE1LjUgICBjLTUuMyw1LjMtNS4zLDEzLjgsMCwxOS4xYzIuNiwyLjYsNi4xLDQsOS41LDRjMy40LDAsNi45LTEuMyw5LjUtNGwyMjUuMS0yMjUuMUMzNjUuOTMxLDI0Mi44NzUsMzY1LjkzMSwyMzQuMjc1LDM2MC43MzEsMjI5LjA3NXogICAiIGZpbGw9IiNGRkZGRkYiLz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PC9zdmc+);background-size:15px;transition:all .5s}.right-arrow-preview-image:hover{transform:scale(1.2)}\n"] }]
|
|
252
|
-
}], ctorParameters: () => [{ type: i1.ConfigService }], propDecorators: { id: [{
|
|
253
|
-
type: Input
|
|
254
|
-
}], currentImage: [{
|
|
255
|
-
type: Input
|
|
256
|
-
}], images: [{
|
|
257
|
-
type: Input
|
|
258
|
-
}], customTemplate: [{
|
|
259
|
-
type: Input
|
|
260
|
-
}], clickPreview: [{
|
|
261
|
-
type: Output
|
|
262
|
-
}] } });
|
|
263
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmlld3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3M4OS9hbmd1bGFyLW1vZGFsLWdhbGxlcnkvc3JjL2xpYi9jb21wb25lbnRzL3ByZXZpZXdzL3ByZXZpZXdzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tzODkvYW5ndWxhci1tb2RhbC1nYWxsZXJ5L3NyYy9saWIvY29tcG9uZW50cy9wcmV2aWV3cy9wcmV2aWV3cy5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBRUgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBZ0IsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUE0QyxNQUFNLGVBQWUsQ0FBQztBQUUzSyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUc5RCxPQUFPLEVBQXFCLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBSzdFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRCxPQUFPLEVBQWlCLG9CQUFvQixFQUFFLE1BQU0sK0JBQStCLENBQUM7Ozs7OztBQUlwRjs7R0FFRztBQU9ILE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxtQkFBbUI7SUE0RXhELFlBQW9CLGFBQTRCO1FBQzlDLEtBQUssRUFBRSxDQUFDO1FBRFUsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFoRGhEOztXQUVHO1FBRUgsaUJBQVksR0FBNkIsSUFBSSxZQUFZLEVBQWMsQ0FBQztRQWdCeEU7OztXQUdHO1FBQ0gsZ0JBQVcsR0FBVyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ25DOzs7V0FHRztRQUNILG1CQUFjLEdBQVcsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUN6Qzs7O1dBR0c7UUFDSCxhQUFRLEdBQXVCLEVBQUUsQ0FBQztRQVlsQyx1QkFBa0IsR0FBUyxvQkFBb0IsQ0FBQztJQUloRCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxRQUFRO1FBQ04sTUFBTSxTQUFTLEdBQTBCLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvRSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1NBQ3ZFO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQztRQUN6RCxJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUM7UUFDekMsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDO1FBQzdDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxRQUFRLENBQUMsT0FBeUI7UUFDaEMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNaLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxPQUFPLE9BQU8sQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsV0FBVyxDQUFDLE9BQXNCO1FBRWhDLElBQUksWUFBWSxHQUFHLE9BQU8sQ0FBQyxZQUFZLEVBQUUsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDM0UsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxZQUFZLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUV6RCxJQUFHLElBQUksQ0FBQyxhQUFhLElBQUksWUFBWSxJQUFJLE1BQU0sRUFBRTtZQUMvQyxJQUFJLENBQUMsWUFBWSxDQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztTQUMxQztJQUNILENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxZQUFZLENBQUMsT0FBeUIsRUFBRSxLQUFpQyxFQUFFLFNBQWlCLE1BQU0sQ0FBQyxNQUFNO1FBQ3ZHLDBEQUEwRDtRQUMxRCxpR0FBaUc7UUFDakcsS0FBSyxFQUFFLGVBQWUsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUU7WUFDeEQsT0FBTztTQUNSO1FBQ0QsTUFBTSxNQUFNLEdBQVcsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JELElBQUksTUFBTSxLQUFLLElBQUksSUFBSSxNQUFNLEtBQUssSUFBSSxFQUFFO1lBQ3RDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM5RjtJQUNILENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxpQkFBaUIsQ0FBQyxTQUFpQixFQUFFLEtBQWlDLEVBQUUsU0FBaUIsTUFBTSxDQUFDLE1BQU07UUFDcEcsTUFBTSxNQUFNLEdBQVcsS0FBSyxDQUFDLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyRSxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUU7WUFDbkIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ2I7YUFBTSxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ2pCO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsU0FBUyxDQUFDLEtBQWEsRUFBRSxJQUFXO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsd0JBQXdCO1FBQ3RCLGtHQUFrRztRQUNsRyxJQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsTUFBTSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFO1lBQy9HLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUM7SUFDeEYsQ0FBQztJQUVEOzs7T0FHRztJQUNILHlCQUF5QjtRQUN2QixrR0FBa0c7UUFDbEcsSUFBRyxJQUFJLENBQUMsYUFBYSxFQUFFLE1BQU0sS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRTtZQUMvRyxPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQztJQUN0SCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxZQUFZLENBQUMsWUFBOEIsRUFBRSxNQUEwQjtRQUM3RSxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQXFCLEVBQUUsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZHLENBQUM7SUFFRDs7T0FFRztJQUNLLGtCQUFrQixDQUFDLFlBQThCLEVBQUUsTUFBMEI7UUFDbkYsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbkQsTUFBTSxJQUFJLEtBQUssQ0FBQyxpRkFBaUYsQ0FBQyxDQUFDO1NBQ3BHO1FBQ0QsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFnQixDQUFDO1FBQzNELElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDNUUsMENBQTBDO1FBQzFDLElBQUcsS0FBSyxHQUFHLENBQUM7WUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLFlBQVk7UUFDWixJQUFJLEdBQUcsR0FBRyxLQUFLLEdBQUcsY0FBYyxDQUFDO1FBQ2pDLHVDQUF1QztRQUN2QyxJQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFO1lBQ3RCLEtBQUssSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUM3QixJQUFHLEtBQUssR0FBRyxDQUFDO2dCQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQywwQ0FBMEM7WUFDbkUsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7U0FDckI7UUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNqQixDQUFDO0lBRUQ7O09BRUc7SUFDSyxJQUFJO1FBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO1NBQzNFO1FBQ0QsSUFBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO1lBQ2pDLHVDQUF1QztZQUN2QyxNQUFNLGNBQWMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsS0FBSyxLQUFLLENBQUM7WUFDakYsSUFBRyxjQUFjLEVBQUU7Z0JBQ2pCLE9BQU87YUFDUjtZQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1NBQ2hCO2FBQU07WUFDTCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDZDtRQUNELElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBaUIsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTVGLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFxQixFQUFFLENBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1RyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxRQUFRO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO1NBQzNFO1FBQ0QsSUFBRyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsRUFBRTtZQUNsQix1Q0FBdUM7WUFDdkMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEtBQUssS0FBSyxDQUFDO1lBQ2pGLElBQUcsY0FBYyxFQUFFO2dCQUNqQixPQUFPO2FBQ1I7WUFDRCxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1NBQy9CO2FBQU07WUFDTCxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDWjtRQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBaUIsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTVGLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFxQixFQUFFLENBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1RyxDQUFDOzhHQS9RVSxpQkFBaUI7a0dBQWpCLGlCQUFpQixrUENsRDlCLDI3RkF1REE7OzJGRExhLGlCQUFpQjtrQkFON0IsU0FBUzsrQkFDRSxhQUFhLG1CQUdOLHVCQUF1QixDQUFDLE1BQU07a0ZBUS9DLEVBQUU7c0JBREQsS0FBSztnQkFNTixZQUFZO3NCQURYLEtBQUs7Z0JBT04sTUFBTTtzQkFETCxLQUFLO2dCQVVOLGNBQWM7c0JBRGIsS0FBSztnQkFPTixZQUFZO3NCQURYLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuXG4gQ29weXJpZ2h0IChDKSAyMDE3LTIwMjMgU3RlZmFubyBDYXBwYSAoS3M4OSlcblxuIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OIElORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZSwgU2ltcGxlQ2hhbmdlcywgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQWNjZXNzaWJsZUNvbXBvbmVudCB9IGZyb20gJy4uL2FjY2Vzc2libGUuY29tcG9uZW50JztcblxuaW1wb3J0IHsgQWNjZXNzaWJpbGl0eUNvbmZpZyB9IGZyb20gJy4uLy4uL21vZGVsL2FjY2Vzc2liaWxpdHkuaW50ZXJmYWNlJztcbmltcG9ydCB7IEltYWdlLCBJbWFnZUV2ZW50LCBJbWFnZU1vZGFsRXZlbnQgfSBmcm9tICcuLi8uLi9tb2RlbC9pbWFnZS5jbGFzcyc7XG5pbXBvcnQgeyBJbnRlcm5hbExpYkltYWdlIH0gZnJvbSAnLi4vLi4vbW9kZWwvaW1hZ2UtaW50ZXJuYWwuY2xhc3MnO1xuaW1wb3J0IHsgUHJldmlld0NvbmZpZyB9IGZyb20gJy4uLy4uL21vZGVsL3ByZXZpZXctY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBTbGlkZUNvbmZpZyB9IGZyb20gJy4uLy4uL21vZGVsL3NsaWRlLWNvbmZpZy5pbnRlcmZhY2UnO1xuXG5pbXBvcnQgeyBORVhULCBQUkVWIH0gZnJvbSAnLi4vLi4vdXRpbHMvdXNlci1pbnB1dC51dGlsJztcbmltcG9ydCB7IGdldEluZGV4IH0gZnJvbSAnLi4vLi4vdXRpbHMvaW1hZ2UudXRpbCc7XG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbC9hY3Rpb24uZW51bSc7XG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlLCBERUZBVUxUX1BSRVZJRVdfU0laRSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IFNpemUgfSBmcm9tICcuLi8uLi9tb2RlbC9zaXplLmludGVyZmFjZSc7XG5pbXBvcnQgeyBMaWJDb25maWcgfSBmcm9tICcuLi8uLi9tb2RlbC9saWItY29uZmlnLmludGVyZmFjZSc7XG5cbi8qKlxuICogQ29tcG9uZW50IHdpdGggaW1hZ2UgcHJldmlld3NcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAna3MtcHJldmlld3MnLFxuICBzdHlsZVVybHM6IFsncHJldmlld3Muc2NzcycsICcuLi9wcmV2aWV3cy1hcnJvd3Muc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJ3ByZXZpZXdzLmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBQcmV2aWV3c0NvbXBvbmVudCBleHRlbmRzIEFjY2Vzc2libGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIC8qKlxuICAgKiBVbmlxdWUgaWQgKD49MCkgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2Ugb2YgdGhpcyBsaWJyYXJ5LiBUaGlzIGlzIHJlcXVpcmVkIHdoZW4geW91IGFyZSB1c2luZ1xuICAgKiB0aGUgc2VydmljZSB0byBjYWxsIG1vZGFsIGdhbGxlcnkuXG4gICAqL1xuICBASW5wdXQoKVxuICBpZCE6IG51bWJlcjtcbiAgLyoqXG4gICAqIE9iamVjdCBvZiB0eXBlIGBJbnRlcm5hbExpYkltYWdlYCB0aGF0IHJlcHJlc2VudCB0aGUgdmlzaWJsZSBpbWFnZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGN1cnJlbnRJbWFnZSE6IEludGVybmFsTGliSW1hZ2U7XG4gIC8qKlxuICAgKiBBcnJheSBvZiBgSW50ZXJuYWxMaWJJbWFnZWAgdGhhdCByZXByZXNlbnQgdGhlIG1vZGVsIG9mIHRoaXMgbGlicmFyeSB3aXRoIGFsbCBpbWFnZXMsXG4gICAqIHRodW1icyBhbmQgc28gb24uXG4gICAqL1xuICBASW5wdXQoKVxuICBpbWFnZXMhOiBJbnRlcm5hbExpYkltYWdlW107XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHRlbXBsYXRlIHJlZmVyZW5jZSBmb3IgdGhlIHJlbmRlcmluZyBvZiBwcmV2aWV3cy5cbiAgICogVGVtcGxhdGUgbWF5IGFjY2VzcyBmb2xsb3dpbmcgY29udGV4dCB2YXJpYWJsZXM6XG4gICAqIC0gcHJldmlldzogdGhlIGBJbWFnZWAgb2JqZWN0XG4gICAqIC0gZGVmYXVsdFRlbXBsYXRlOiB0aGUgdGVtcGxhdGUgdXNlZCBieSBkZWZhdWx0IHRvIHJlbmRlciB0aGUgcHJldmlldyAoaW4gY2FzZSB0aGUgbmVlZCBpcyB0byB3cmFwIGl0KVxuICAgKi9cbiAgQElucHV0KClcbiAgY3VzdG9tVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxIVE1MRWxlbWVudD47XG5cbiAgLyoqXG4gICAqIE91dHB1dCB0byBlbWl0IHRoZSBjbGlja2VkIHByZXZpZXcuIFRoZSBwYXlsb2FkIGNvbnRhaW5zIHRoZSBgSW1hZ2VFdmVudGAgYXNzb2NpYXRlZCB0byB0aGUgY2xpY2tlZCBwcmV2aWV3LlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIGNsaWNrUHJldmlldzogRXZlbnRFbWl0dGVyPEltYWdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxJbWFnZUV2ZW50PigpO1xuXG4gIC8qKlxuICAgKiBPYmplY3Qgb2YgdHlwZSBgQWNjZXNzaWJpbGl0eUNvbmZpZ2AgdG8gaW5pdCBjdXN0b20gYWNjZXNzaWJpbGl0eSBmZWF0dXJlcy5cbiAgICogRm9yIGluc3RhbmNlLCBpdCBjb250YWlucyB0aXRsZXMsIGFsdCB0ZXh0cywgYXJpYS1sYWJlbHMgYW5kIHNvIG9uLlxuICAgKi9cbiAgYWNjZXNzaWJpbGl0eUNvbmZpZzogQWNjZXNzaWJpbGl0eUNvbmZpZyB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIE9iamVjdCBvZiB0eXBlIGBTbGlkZUNvbmZpZ2AgdG8gZ2V0IGBpbmZpbml0ZSBzbGlkaW5nYC5cbiAgICovXG4gIHNsaWRlQ29uZmlnOiBTbGlkZUNvbmZpZyB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIE9iamVjdCBvZiB0eXBlIGBQcmV2aWV3Q29uZmlnYCB0byBpbml0IFByZXZpZXdzQ29tcG9uZW50J3MgZmVhdHVyZXMuXG4gICAqIEZvciBpbnN0YW5jZSwgaXQgY29udGFpbnMgYSBwYXJhbSB0byBzaG93L2hpZGUgdGhpcyBjb21wb25lbnQsIHNpemVzLlxuICAgKi9cbiAgcHJldmlld0NvbmZpZzogUHJldmlld0NvbmZpZyB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIEVudW0gb2YgdHlwZSBgQWN0aW9uYCB0aGF0IHJlcHJlc2VudHMgYSBtb3VzZSBjbGljayBvbiBhIGJ1dHRvbi5cbiAgICogRGVjbGFyZWQgaGVyZSB0byBiZSB1c2VkIGluc2lkZSB0aGUgdGVtcGxhdGUuXG4gICAqL1xuICBjbGlja0FjdGlvbjogQWN0aW9uID0gQWN0aW9uLkNMSUNLO1xuICAvKipcbiAgICogRW51bSBvZiB0eXBlIGBBY3Rpb25gIHRoYXQgcmVwcmVzZW50cyBhIGtleWJvYXJkIGFjdGlvbi5cbiAgICogRGVjbGFyZWQgaGVyZSB0byBiZSB1c2VkIGluc2lkZSB0aGUgdGVtcGxhdGUuXG4gICAqL1xuICBrZXlib2FyZEFjdGlvbjogQWN0aW9uID0gQWN0aW9uLktFWUJPQVJEO1xuICAvKipcbiAgICogQXJyYXkgb2YgYEludGVybmFsTGliSW1hZ2VgIGV4cG9zZWQgdG8gdGhlIHRlbXBsYXRlLiBUaGlzIGZpZWxkIGlzIGluaXRpYWxpemVkXG4gICAqIGFwcGx5aW5nIHRyYW5zZm9ybWF0aW9ucywgZGVmYXVsdCB2YWx1ZXMgYW5kIHNvIG9uIHRvIHRoZSBpbnB1dCBvZiB0aGUgc2FtZSB0eXBlLlxuICAgKi9cbiAgcHJldmlld3M6IEludGVybmFsTGliSW1hZ2VbXSA9IFtdO1xuICAvKipcbiAgICogU3RhcnQgaW5kZXggKGluY2x1ZGVkKSBvZiB0aGUgaW5wdXQgaW1hZ2VzIHVzZWQgdG8gZGlzcGxheSBwcmV2aWV3cy5cbiAgICovXG4gICAgLy8gQHRzLWlnbm9yZVxuICBzdGFydDogbnVtYmVyO1xuICAvKipcbiAgICogRW5kIGluZGV4IChleGNsdWRlZCkgb2YgdGhlIGlucHV0IGltYWdlcyB1c2VkIHRvIGRpc3BsYXkgcHJldmlld3MuXG4gICAqL1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgZW5kOiBudW1iZXI7XG5cbiAgZGVmYXVsdFByZXZpZXdTaXplOiBTaXplID0gREVGQVVMVF9QUkVWSUVXX1NJWkU7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgwrRuZ09uSW5pdMK0IHRvIGJ1aWxkIGBjb25maWdQcmV2aWV3YCBhcHBseWluZyBhIGRlZmF1bHQgdmFsdWUgYW5kIGFsc28gdG9cbiAgICogaW5pdCB0aGUgYHByZXZpZXdzYCBhcnJheS5cbiAgICogVGhpcyBpcyBhbiBhbmd1bGFyIGxpZmVjeWNsZSBob29rLCBzbyBpdHMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgQW5ndWxhciBpdHNlbGYuXG4gICAqIEluIHBhcnRpY3VsYXIsIGl0J3MgY2FsbGVkIG9ubHkgb25lIHRpbWUhISFcbiAgICovXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IGxpYkNvbmZpZzogTGliQ29uZmlnIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWdTZXJ2aWNlLmdldENvbmZpZyh0aGlzLmlkKTtcbiAgICBpZiAoIWxpYkNvbmZpZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlcm5hbCBsaWJyYXJ5IGVycm9yIC0gbGliQ29uZmlnIG11c3QgYmUgZGVmaW5lZCcpO1xuICAgIH1cbiAgICB0aGlzLmFjY2Vzc2liaWxpdHlDb25maWcgPSBsaWJDb25maWcuYWNjZXNzaWJpbGl0eUNvbmZpZztcbiAgICB0aGlzLnNsaWRlQ29uZmlnID0gbGliQ29uZmlnLnNsaWRlQ29uZmlnO1xuICAgIHRoaXMucHJldmlld0NvbmZpZyA9IGxpYkNvbmZpZy5wcmV2aWV3Q29uZmlnO1xuICAgIHRoaXMuaW5pdFByZXZpZXdzKHRoaXMuY3VycmVudEltYWdlLCB0aGlzLmltYWdlcyk7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHRvIGNoZWNrIGlmIGFuIGltYWdlIGlzIGFjdGl2ZSAoaS5lLiBhIHByZXZpZXcgaW1hZ2UpLlxuICAgKiBAcGFyYW0gSW50ZXJuYWxMaWJJbWFnZSBwcmV2aWV3IGlzIGFuIGltYWdlIHRvIGNoZWNrIGlmIGl0J3MgYWN0aXZlIG9yIG5vdFxuICAgKiBAcmV0dXJucyBib29sZWFuIHRydWUgaWYgaXMgYWN0aXZlLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIGlzQWN0aXZlKHByZXZpZXc6IEludGVybmFsTGliSW1hZ2UpOiBib29sZWFuIHtcbiAgICBpZiAoIXByZXZpZXcpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHByZXZpZXcuaWQgPT09IHRoaXMuY3VycmVudEltYWdlLmlkO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCDCtG5nT25DaGFuZ2VzwrQgdG8gdXBkYXRlIGBwcmV2aWV3c2AgYXJyYXkuXG4gICAqIEFsc28sIGJvdGggYHN0YXJ0YCBhbmQgYGVuZGAgbG9jYWwgdmFyaWFibGVzIHdpbGwgYmUgdXBkYXRlZCBhY2NvcmRpbmdseS5cbiAgICogVGhpcyBpcyBhbiBhbmd1bGFyIGxpZmVjeWNsZSBob29rLCBzbyBpdHMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgQW5ndWxhciBpdHNlbGYuXG4gICAqIEluIHBhcnRpY3VsYXIsIGl0J3MgY2FsbGVkIHdoZW4gYW55IGRhdGEtYm91bmQgcHJvcGVydHkgb2YgYSBkaXJlY3RpdmUgY2hhbmdlcyEhIVxuICAgKi9cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuXG4gICAgbGV0IGN1cnJlbnRJbWFnZSA9IGNoYW5nZXMuY3VycmVudEltYWdlPy5jdXJyZW50VmFsdWUgPz8gdGhpcy5jdXJyZW50SW1hZ2U7XG4gICAgbGV0IGltYWdlcyA9IGNoYW5nZXMuaW1hZ2VzPy5jdXJyZW50VmFsdWUgPz8gdGhpcy5pbWFnZXM7XG5cbiAgICBpZih0aGlzLnByZXZpZXdDb25maWcgJiYgY3VycmVudEltYWdlICYmIGltYWdlcykge1xuICAgICAgdGhpcy5pbml0UHJldmlld3MoIGN1cnJlbnRJbWFnZSwgaW1hZ2VzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIGNhbGxlZCBieSBldmVudHMgZnJvbSBib3RoIGtleWJvYXJkIGFuZCBtb3VzZSBvbiBhIHByZXZpZXcuXG4gICAqIFRoaXMgd2lsbCB0cmlnZ2VyIHRoZSBgY2xpY2twcmV2aWV3YCBvdXRwdXQgd2l0aCB0aGUgaW5wdXQgcHJldmlldyBhcyBpdHMgcGF5bG9hZC5cbiAgICogQHBhcmFtIEludGVybmFsTGliSW1hZ2UgcHJldmlldyB0aGF0IHRyaWdnZXJlZCB0aGlzIG1ldGhvZFxuICAgKiBAcGFyYW0gS2V5Ym9hcmRFdmVudCB8IE1vdXNlRXZlbnQgZXZlbnQgcGF5bG9hZFxuICAgKiBAcGFyYW0gQWN0aW9uIGFjdGlvbiB0aGF0IHRyaWdnZXJlZCB0aGUgc291cmNlIGV2ZW50IG9yIGBBY3Rpb24uTk9STUFMYCBpZiBub3Qgc3BlY2lmaWVkXG4gICAqL1xuICBvbkltYWdlRXZlbnQocHJldmlldzogSW50ZXJuYWxMaWJJbWFnZSwgZXZlbnQ6IEtleWJvYXJkRXZlbnQgfCBNb3VzZUV2ZW50LCBhY3Rpb246IEFjdGlvbiA9IEFjdGlvbi5OT1JNQUwpOiB2b2lkIHtcbiAgICAvLyBJdCdzIHN1Z2dlc3RlZCB0byBzdG9wIHByb3BhZ2F0aW9uIG9mIHRoZSBldmVudCwgc28gdGhlXG4gICAgLy8gQ2RrIGJhY2tncm91bmQgd2lsbCBub3QgY2F0Y2ggYSBjbGljayBhbmQgY2xvc2UgdGhlIG1vZGFsIChsaWtlIGl0IGRvZXMgb24gV2luZG93cyBDaHJvbWUvRkYpLlxuICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoIXRoaXMucHJldmlld0NvbmZpZyB8fCAhdGhpcy5wcmV2aWV3Q29uZmlnLmNsaWNrYWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQ6IG51bWJlciA9IHN1cGVyLmhhbmRsZUltYWdlRXZlbnQoZXZlbnQpO1xuICAgIGlmIChyZXN1bHQgPT09IE5FWFQgfHwgcmVzdWx0ID09PSBQUkVWKSB7XG4gICAgICB0aGlzLmNsaWNrUHJldmlldy5lbWl0KG5ldyBJbWFnZU1vZGFsRXZlbnQodGhpcy5pZCwgYWN0aW9uLCBnZXRJbmRleChwcmV2aWV3LCB0aGlzLmltYWdlcykpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIGNhbGxlZCBieSBldmVudHMgZnJvbSBib3RoIGtleWJvYXJkIGFuZCBtb3VzZSBvbiBhIG5hdmlnYXRpb24gYXJyb3cuXG4gICAqIEl0IGFsc28gZW1pdHMgYW4gZXZlbnQgdG8gc3BlY2lmeSB3aGljaCBhcnJvdy5cbiAgICogQHBhcmFtIHN0cmluZyBkaXJlY3Rpb24gb2YgdGhlIG5hdmlnYXRpb24gdGhhdCBjYW4gYmUgZWl0aGVyICduZXh0JyBvciAncHJldidcbiAgICogQHBhcmFtIEtleWJvYXJkRXZlbnQgfCBNb3VzZUV2ZW50IGV2ZW50IHBheWxvYWRcbiAgICogQHBhcmFtIEFjdGlvbiBhY3Rpb24gdGhhdCB0cmlnZ2VyZWQgdGhlIHNvdXJjZSBldmVudCBvciBgQWN0aW9uLk5PUk1BTGAgaWYgbm90IHNwZWNpZmllZFxuICAgKi9cbiAgb25OYXZpZ2F0aW9uRXZlbnQoZGlyZWN0aW9uOiBzdHJpbmcsIGV2ZW50OiBLZXlib2FyZEV2ZW50IHwgTW91c2VFdmVudCwgYWN0aW9uOiBBY3Rpb24gPSBBY3Rpb24uTk9STUFMKTogdm9pZCB7XG4gICAgY29uc3QgcmVzdWx0OiBudW1iZXIgPSBzdXBlci5oYW5kbGVOYXZpZ2F0aW9uRXZlbnQoZGlyZWN0aW9uLCBldmVudCk7XG4gICAgaWYgKHJlc3VsdCA9PT0gTkVYVCkge1xuICAgICAgdGhpcy5uZXh0KCk7XG4gICAgfSBlbHNlIGlmIChyZXN1bHQgPT09IFBSRVYpIHtcbiAgICAgIHRoaXMucHJldmlvdXMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHVzZWQgaW4gdGhlIHRlbXBsYXRlIHRvIHRyYWNrIGlkcyBpbiBuZ0Zvci5cbiAgICogQHBhcmFtIG51bWJlciBpbmRleCBvZiB0aGUgYXJyYXlcbiAgICogQHBhcmFtIEltYWdlIGl0ZW0gb2YgdGhlIGFycmF5XG4gICAqIEByZXR1cm5zIG51bWJlciB0aGUgaWQgb2YgdGhlIGl0ZW1cbiAgICovXG4gIHRyYWNrQnlJZChpbmRleDogbnVtYmVyLCBpdGVtOiBJbWFnZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIGl0ZW0uaWQ7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBwcmV2aWV3cyAnbGVmdCBhcnJvdycgc2hvdWxkIGJlIGRpc3BsYXllZCBvciBub3QuXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBkaXNwbGF5TGVmdFByZXZpZXdzQXJyb3coKTogYm9vbGVhbiB7XG4gICAgLy8gRG9uJ3Qgc2hvdyBhcnJvd3MgaWYgcmVxdWVzdGVkIHByZXZpZXdzIG51bWJlciBlcXVhbHMgb3IgaXMgZ3JlYXRlZCB0aGFuIHRvdGFsIG51bWJlciBvZiBpbWdhZXNcbiAgICBpZih0aGlzLnByZXZpZXdDb25maWc/Lm51bWJlciAhPT0gdW5kZWZpbmVkICYmIHRoaXMuaW1hZ2VzICYmIHRoaXMucHJldmlld0NvbmZpZz8ubnVtYmVyID49IHRoaXMuaW1hZ2VzPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuICh0aGlzLnByZXZpZXdDb25maWc/LmFycm93cyAmJiB0aGlzLnN0YXJ0ID4gMCkgfHwgISF0aGlzLnNsaWRlQ29uZmlnPy5pbmZpbml0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHByZXZpZXdzICdyaWdodCBhcnJvdycgc2hvdWxkIGJlIGRpc3BsYXllZCBvciBub3QuXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBkaXNwbGF5UmlnaHRQcmV2aWV3c0Fycm93KCk6IGJvb2xlYW4ge1xuICAgIC8vIERvbid0IHNob3cgYXJyb3dzIGlmIHJlcXVlc3RlZCBwcmV2aWV3cyBudW1iZXIgZXF1YWxzIG9yIGlzIGdyZWF0ZWQgdGhhbiB0b3RhbCBudW1iZXIgb2YgaW1nYWVzXG4gICAgaWYodGhpcy5wcmV2aWV3Q29uZmlnPy5udW1iZXIgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmltYWdlcyAmJiB0aGlzLnByZXZpZXdDb25maWc/Lm51bWJlciA+PSB0aGlzLmltYWdlcz8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAodGhpcy5wcmV2aWV3Q29uZmlnPy5hcnJvd3MgJiYgdGhpcy5pbWFnZXMgJiYgdGhpcy5lbmQgPCB0aGlzLmltYWdlcy5sZW5ndGgpIHx8ICEhdGhpcy5zbGlkZUNvbmZpZz8uaW5maW5pdGU7XG4gIH1cblxuICAvKipcbiAgICogUHJpdmF0ZSBtZXRob2QgdG8gaW5pdCBwcmV2aWV3cyBiYXNlZCBvbiB0aGUgY3VycmVudEltYWdlIGFuZCB0aGUgZnVsbCBhcnJheSBvZiBpbWFnZXMuXG4gICAqIFRoZSBjdXJyZW50IGltYWdlIGluIG1hbmRhdG9yeSB0byBzaG93IGFsd2F5cyB0aGUgY3VycmVudCBwcmV2aWV3IChhcyBoaWdobGlnaHRlZCkuXG4gICAqIEBwYXJhbSBJbnRlcm5hbExpYkltYWdlIGN1cnJlbnRJbWFnZSB0byBkZWNpZGUgaG93IHRvIHNob3cgcHJldmlld3MsIGJlY2F1c2UgSSBhbHdheXMgd2FudCB0byBzZWUgdGhlIGN1cnJlbnQgaW1hZ2UgYXMgaGlnaGxpZ2h0ZWRcbiAgICogQHBhcmFtIEludGVybmFsTGliSW1hZ2VbXSBpbWFnZXMgaXMgdGhlIGFycmF5IG9mIGFsbCBpbWFnZXMuXG4gICAqL1xuICBwcml2YXRlIGluaXRQcmV2aWV3cyhjdXJyZW50SW1hZ2U6IEludGVybmFsTGliSW1hZ2UsIGltYWdlczogSW50ZXJuYWxMaWJJbWFnZVtdKTogdm9pZCB7XG4gICAgdGhpcy5zZXRJbmRleGVzUHJldmlld3MoY3VycmVudEltYWdlLCBpbWFnZXMpO1xuICAgIHRoaXMucHJldmlld3MgPSBpbWFnZXMuZmlsdGVyKChpbWc6IEludGVybmFsTGliSW1hZ2UsIGk6IG51bWJlcikgPT4gaSA+PSB0aGlzLnN0YXJ0ICYmIGkgPCB0aGlzLmVuZCk7XG4gIH1cblxuICAvKipcbiAgICogUHJpdmF0ZSBtZXRob2QgdG8gdXBkYXRlIGJvdGggYHN0YXJ0YCBhbmQgYGVuZGAgYmFzZWQgb24gdGhlIGN1cnJlbnRJbWFnZS5cbiAgICovXG4gIHByaXZhdGUgc2V0SW5kZXhlc1ByZXZpZXdzKGN1cnJlbnRJbWFnZTogSW50ZXJuYWxMaWJJbWFnZSwgaW1hZ2VzOiBJbnRlcm5hbExpYkltYWdlW10pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucHJldmlld0NvbmZpZyB8fCAhaW1hZ2VzIHx8ICFjdXJyZW50SW1hZ2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW50ZXJuYWwgbGlicmFyeSBlcnJvciAtIHByZXZpZXdDb25maWcsIGN1cnJlbnRJbWFnZSBhbmQgaW1hZ2VzIG11c3QgYmUgZGVmaW5lZCcpO1xuICAgIH1cbiAgICBjb25zdCBwcmV2aWV3c051bWJlciA9IHRoaXMucHJldmlld0NvbmZpZy5udW1iZXIgYXMgbnVtYmVyO1xuICAgIGxldCBzdGFydCA9IGdldEluZGV4KGN1cnJlbnRJbWFnZSwgaW1hZ2VzKSAtIE1hdGguZmxvb3IocHJldmlld3NOdW1iZXIgLyAyKTtcbiAgICAvLyBzdGFydCBpcywgYXQgYSBtaW5pbXVtLCB0aGUgZmlyc3QgaW5kZXhcbiAgICBpZihzdGFydCA8IDApIHN0YXJ0ID0gMDtcbiAgICAvLyBlbmQgaW5kZXhcbiAgICBsZXQgZW5kID0gc3RhcnQgKyBwcmV2aWV3c051bWJlcjtcbiAgICAvLyBlbmQgaXMsIGF0IGEgbWF4aW11bSwgdGhlIGxhc3QgaW5kZXhcbiAgICBpZihlbmQgPiBpbWFnZXMubGVuZ3RoKSB7XG4gICAgICBzdGFydCAtPSBlbmQgLSBpbWFnZXMubGVuZ3RoO1xuICAgICAgaWYoc3RhcnQgPCAwKSBzdGFydCA9IDA7IC8vIHN0YXJ0IGlzLCBhdCBhIG1pbmltdW0sIHRoZSBmaXJzdCBpbmRleFxuICAgICAgZW5kID0gaW1hZ2VzLmxlbmd0aDtcbiAgICB9XG4gICAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICAgIHRoaXMuZW5kID0gZW5kO1xuICB9XG5cbiAgLyoqXG4gICAqIFByaXZhdGUgbWV0aG9kIHRvIHVwZGF0ZSB0aGUgdmlzaWJsZSBwcmV2aWV3cyBuYXZpZ2F0aW5nIHRvIHRoZSByaWdodCAobmV4dCkuXG4gICAqL1xuICBwcml2YXRlIG5leHQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnByZXZpZXdDb25maWcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW50ZXJuYWwgbGlicmFyeSBlcnJvciAtIHByZXZpZXdDb25maWcgbXVzdCBiZSBkZWZpbmVkJyk7XG4gICAgfVxuICAgIGlmKHRoaXMuZW5kID49IHRoaXMuaW1hZ2VzLmxlbmd0aCkge1xuICAgICAgLy8gY2hlY2sgaWYgbmV4dEltYWdlIHNob3VsZCBiZSBibG9ja2VkXG4gICAgICBjb25zdCBwcmV2ZW50U2xpZGluZyA9ICEhdGhpcy5zbGlkZUNvbmZpZyAmJiB0aGlzLnNsaWRlQ29uZmlnLmluZmluaXRlID09PSBmYWxzZTtcbiAgICAgIGlmKHByZXZlbnRTbGlkaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3RhcnQgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0YXJ0Kys7XG4gICAgfVxuICAgIHRoaXMuZW5kID0gdGhpcy5zdGFydCArIE1hdGgubWluKCh0aGlzLnByZXZpZXdDb25maWcubnVtYmVyIGFzIG51bWJlciksIHRoaXMuaW1hZ2VzLmxlbmd0aCk7XG5cbiAgICB0aGlzLnByZXZpZXdzID0gdGhpcy5pbWFnZXMuZmlsdGVyKChpbWc6IEludGVybmFsTGliSW1hZ2UsIGk6IG51bWJlcikgPT4gaSA+PSB0aGlzLnN0YXJ0ICYmIGkgPCB0aGlzLmVuZCk7XG4gIH1cblxuICAvKipcbiAgICogUHJpdmF0ZSBtZXRob2QgdG8gdXBkYXRlIHRoZSB2aXNpYmxlIHByZXZpZXdzIG5hdmlnYXRpbmcgdG8gdGhlIGxlZnQgKHByZXZpb3VzKS5cbiAgICovXG4gIHByaXZhdGUgcHJldmlvdXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnByZXZpZXdDb25maWcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW50ZXJuYWwgbGlicmFyeSBlcnJvciAtIHByZXZpZXdDb25maWcgbXVzdCBiZSBkZWZpbmVkJyk7XG4gICAgfVxuICAgIGlmKHRoaXMuc3RhcnQgPD0gMCkge1xuICAgICAgLy8gY2hlY2sgaWYgcHJldkltYWdlIHNob3VsZCBiZSBibG9ja2VkXG4gICAgICBjb25zdCBwcmV2ZW50U2xpZGluZyA9ICEhdGhpcy5zbGlkZUNvbmZpZyAmJiB0aGlzLnNsaWRlQ29uZmlnLmluZmluaXRlID09PSBmYWxzZTtcbiAgICAgIGlmKHByZXZlbnRTbGlkaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuZW5kID0gdGhpcy5pbWFnZXMubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVuZC0tO1xuICAgIH1cbiAgICB0aGlzLnN0YXJ0ID0gdGhpcy5lbmQgLSBNYXRoLm1pbigodGhpcy5wcmV2aWV3Q29uZmlnLm51bWJlciBhcyBudW1iZXIpLCB0aGlzLmltYWdlcy5sZW5ndGgpO1xuXG4gICAgdGhpcy5wcmV2aWV3cyA9IHRoaXMuaW1hZ2VzLmZpbHRlcigoaW1nOiBJbnRlcm5hbExpYkltYWdlLCBpOiBudW1iZXIpID0+IGkgPj0gdGhpcy5zdGFydCAmJiBpIDwgdGhpcy5lbmQpO1xuICB9XG5cbn1cbiIsIjxuYXYgY2xhc3M9XCJwcmV2aWV3cy1jb250YWluZXJcIlxuICAgICBbY2xhc3MubW9iaWxlLXZpc2libGVdPVwicHJldmlld0NvbmZpZz8ubW9iaWxlVmlzaWJsZVwiXG4gICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYWNjZXNzaWJpbGl0eUNvbmZpZz8ucHJldmlld3NDb250YWluZXJBcmlhTGFiZWxcIlxuICAgICBbdGl0bGVdPVwiYWNjZXNzaWJpbGl0eUNvbmZpZz8ucHJldmlld3NDb250YWluZXJUaXRsZVwiPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJwcmV2aWV3Q29uZmlnPy52aXNpYmxlXCI+XG4gICAgPGEgY2xhc3M9XCJuYXYtbGVmdFwiXG4gICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhY2Nlc3NpYmlsaXR5Q29uZmlnPy5wcmV2aWV3U2Nyb2xsUHJldkFyaWFMYWJlbFwiXG4gICAgICAgW3RhYkluZGV4XT1cImRpc3BsYXlMZWZ0UHJldmlld3NBcnJvdygpID8gMCA6IC0xXCIgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgKGNsaWNrKT1cIm9uTmF2aWdhdGlvbkV2ZW50KCdsZWZ0JywgJGV2ZW50KVwiIChrZXl1cCk9XCJvbk5hdmlnYXRpb25FdmVudCgnbGVmdCcsICRldmVudClcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJpbnNpZGUge3sgZGlzcGxheUxlZnRQcmV2aWV3c0Fycm93KCkgPyAnbGVmdC1hcnJvdy1wcmV2aWV3LWltYWdlJyA6ICdlbXB0eS1hcnJvdy1wcmV2aWV3LWltYWdlJ319XCJcbiAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgW3RpdGxlXT1cImFjY2Vzc2liaWxpdHlDb25maWc/LnByZXZpZXdTY3JvbGxQcmV2VGl0bGVcIj48L2Rpdj5cbiAgICA8L2E+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwcmV2aWV3IG9mIHByZXZpZXdzOyB0cmFja0J5OiB0cmFja0J5SWQ7IGxldCBpbmRleCA9IGluZGV4XCI+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LWNvbnRhaW5lciB7eyFwcmV2aWV3Q29uZmlnPy5jbGlja2FibGUgPyAnIHVuY2xpY2thYmxlJyA6ICcnfX1cIlxuICAgICAgICAoY2xpY2spPVwib25JbWFnZUV2ZW50KHByZXZpZXcsICRldmVudCwgY2xpY2tBY3Rpb24pXCJcbiAgICAgICAgKGtleXVwKT1cIm9uSW1hZ2VFdmVudChwcmV2aWV3LCAkZXZlbnQsIGtleWJvYXJkQWN0aW9uKVwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCIhY3VzdG9tVGVtcGxhdGUgPyBkZWZhdWx0VGVtcGxhdGUgOiBjdXN0b21UZW1wbGF0ZSA7IGNvbnRleHQ6e3ByZXZpZXcsIGRlZmF1bHRUZW1wbGF0ZX1cIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFRlbXBsYXRlPlxuICAgICAgICAgIDxpbWcgKm5nSWY9XCJwcmV2aWV3Py5tb2RhbD8uaW1nXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJpbnNpZGUgcHJldmlldy1pbWFnZSB7e2lzQWN0aXZlKHByZXZpZXcpID8gJ2FjdGl2ZScgOiAnJ319XCJcbiAgICAgICAgICAgICAgW2xvYWRpbmddPVwicHJldmlldy5sb2FkaW5nXCJcbiAgICAgICAgICAgICAgW2F0dHIuZmV0Y2hwcmlvcml0eV09XCJwcmV2aWV3LmZldGNocHJpb3JpdHlcIlxuICAgICAgICAgICAgICBbc3JjXT1cInByZXZpZXcucGxhaW4/LmltZyA/IHByZXZpZXcucGxhaW4/LmltZyEgOiBwcmV2aWV3Lm1vZGFsLmltZ1wiXG4gICAgICAgICAgICAgIGtzRmFsbGJhY2tJbWFnZSBbZmFsbGJhY2tJbWddPVwicHJldmlldy5wbGFpbj8uZmFsbGJhY2tJbWcgPyBwcmV2aWV3LnBsYWluPy5mYWxsYmFja0ltZyA6IHByZXZpZXcubW9kYWwuZmFsbGJhY2tJbWdcIlxuICAgICAgICAgICAgICBrc1NpemUgW3NpemVDb25maWddPVwie3dpZHRoOiBwcmV2aWV3Q29uZmlnPy5zaXplID8gcHJldmlld0NvbmZpZz8uc2l6ZT8ud2lkdGghIDogZGVmYXVsdFByZXZpZXdTaXplLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBwcmV2aWV3Q29uZmlnPy5zaXplID8gcHJldmlld0NvbmZpZz8uc2l6ZT8uaGVpZ2h0ISA6IGRlZmF1bHRQcmV2aWV3U2l6ZS5oZWlnaHR9XCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJwcmV2aWV3Lm1vZGFsLmFyaWFMYWJlbCA/IHByZXZpZXcubW9kYWwuYXJpYUxhYmVsIDogJydcIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwiKHByZXZpZXcubW9kYWwudGl0bGUgfHwgcHJldmlldy5tb2RhbC50aXRsZSA9PT0gJycpID8gcHJldmlldy5tb2RhbC50aXRsZSA6ICcnXCJcbiAgICAgICAgICAgICAgYWx0PVwie3twcmV2aWV3Lm1vZGFsLmFsdCA/IHByZXZpZXcubW9kYWwuYWx0IDogJyd9fVwiXG4gICAgICAgICAgICAgIFt0YWJJbmRleF09XCIwXCIgcm9sZT1cImltZ1wiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuXG4gICAgPC9uZy1jb250YWluZXI+XG5cblxuICAgIDxhIGNsYXNzPVwibmF2LXJpZ2h0XCJcbiAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFjY2Vzc2liaWxpdHlDb25maWc/LnByZXZpZXdTY3JvbGxOZXh0QXJpYUxhYmVsXCJcbiAgICAgICBbdGFiSW5kZXhdPVwiZGlzcGxheVJpZ2h0UHJldmlld3NBcnJvdygpID8gMCA6IC0xXCIgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgKGNsaWNrKT1cIm9uTmF2aWdhdGlvbkV2ZW50KCdyaWdodCcsICRldmVudClcIiAoa2V5dXApPVwib25OYXZpZ2F0aW9uRXZlbnQoJ3JpZ2h0JywgJGV2ZW50KVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImluc2lkZSB7eyBkaXNwbGF5UmlnaHRQcmV2aWV3c0Fycm93KCkgPyAncmlnaHQtYXJyb3ctcHJldmlldy1pbWFnZScgOiAnZW1wdHktYXJyb3ctcHJldmlldy1pbWFnZSd9fVwiXG4gICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgIFt0aXRsZV09XCJhY2Nlc3NpYmlsaXR5Q29uZmlnPy5wcmV2aWV3U2Nyb2xsTmV4dFRpdGxlXCI+PC9kaXY+XG4gICAgPC9hPlxuICA8L25nLWNvbnRhaW5lcj5cblxuPC9uYXY+XG4iXX0=
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import { ButtonType } from '../../model/buttons-config.interface';
|
|
2
|
-
/**
|
|
3
|
-
* Default button size object
|
|
4
|
-
*/
|
|
5
|
-
export const KS_DEFAULT_SIZE = { height: 'auto', width: '30px' };
|
|
6
|
-
/**
|
|
7
|
-
* Default close button object
|
|
8
|
-
*/
|
|
9
|
-
export const KS_DEFAULT_BTN_CLOSE = {
|
|
10
|
-
className: 'close-image',
|
|
11
|
-
size: KS_DEFAULT_SIZE,
|
|
12
|
-
type: ButtonType.CLOSE,
|
|
13
|
-
title: 'Close this modal image gallery',
|
|
14
|
-
ariaLabel: 'Close this modal image gallery'
|
|
15
|
-
};
|
|
16
|
-
/**
|
|
17
|
-
* Default download button object
|
|
18
|
-
*/
|
|
19
|
-
export const KS_DEFAULT_BTN_DOWNLOAD = {
|
|
20
|
-
className: 'download-image',
|
|
21
|
-
size: KS_DEFAULT_SIZE,
|
|
22
|
-
type: ButtonType.DOWNLOAD,
|
|
23
|
-
title: 'Download the current image',
|
|
24
|
-
ariaLabel: 'Download the current image'
|
|
25
|
-
};
|
|
26
|
-
/**
|
|
27
|
-
* Default exturl button object
|
|
28
|
-
*/
|
|
29
|
-
export const KS_DEFAULT_BTN_EXTURL = {
|
|
30
|
-
className: 'ext-url-image',
|
|
31
|
-
size: KS_DEFAULT_SIZE,
|
|
32
|
-
type: ButtonType.EXTURL,
|
|
33
|
-
title: 'Navigate the current image',
|
|
34
|
-
ariaLabel: 'Navigate the current image'
|
|
35
|
-
};
|
|
36
|
-
// /**
|
|
37
|
-
// * Default refresh button object
|
|
38
|
-
// */
|
|
39
|
-
// export const KS_DEFAULT_BTN_REFRESH: ButtonConfig = {
|
|
40
|
-
// className: 'refresh-image',
|
|
41
|
-
// size: KS_DEFAULT_SIZE,
|
|
42
|
-
// type: ButtonType.REFRESH,
|
|
43
|
-
// title: 'Refresh all images',
|
|
44
|
-
// ariaLabel: 'Refresh all images'
|
|
45
|
-
// };
|
|
46
|
-
/**
|
|
47
|
-
* Default delete button object
|
|
48
|
-
*/
|
|
49
|
-
export const KS_DEFAULT_BTN_DELETE = {
|
|
50
|
-
className: 'delete-image',
|
|
51
|
-
size: KS_DEFAULT_SIZE,
|
|
52
|
-
type: ButtonType.DELETE,
|
|
53
|
-
title: 'Delete the current image',
|
|
54
|
-
ariaLabel: 'Delete the current image'
|
|
55
|
-
};
|
|
56
|
-
/**
|
|
57
|
-
* Default full-screen button object
|
|
58
|
-
*/
|
|
59
|
-
export const KS_DEFAULT_BTN_FULL_SCREEN = {
|
|
60
|
-
className: 'fullscreen-image',
|
|
61
|
-
size: KS_DEFAULT_SIZE,
|
|
62
|
-
type: ButtonType.FULLSCREEN,
|
|
63
|
-
title: 'Switch to full-screen',
|
|
64
|
-
ariaLabel: 'Switch to full-screen'
|
|
65
|
-
};
|
|
66
|
-
/**
|
|
67
|
-
* Default rotate button object
|
|
68
|
-
*/
|
|
69
|
-
// export const KS_DEFAULT_BTN_ROTATE: ButtonConfig = {
|
|
70
|
-
// className: 'rotate-image',
|
|
71
|
-
// size: KS_DEFAULT_SIZE,
|
|
72
|
-
// type: ButtonType.ROTATE,
|
|
73
|
-
// title: 'Rotate clockwise of 90 degrees the current image',
|
|
74
|
-
// ariaLabel: 'Rotate clockwise of 90 degrees the current image'
|
|
75
|
-
// };
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBwZXItYnV0dG9ucy1kZWZhdWx0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3M4OS9hbmd1bGFyLW1vZGFsLWdhbGxlcnkvc3JjL2xpYi9jb21wb25lbnRzL3VwcGVyLWJ1dHRvbnMvdXBwZXItYnV0dG9ucy1kZWZhdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsVUFBVSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFHaEY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUV2RTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFpQjtJQUNoRCxTQUFTLEVBQUUsYUFBYTtJQUN4QixJQUFJLEVBQUUsZUFBZTtJQUNyQixJQUFJLEVBQUUsVUFBVSxDQUFDLEtBQUs7SUFDdEIsS0FBSyxFQUFFLGdDQUFnQztJQUN2QyxTQUFTLEVBQUUsZ0NBQWdDO0NBQzVDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFpQjtJQUNuRCxTQUFTLEVBQUUsZ0JBQWdCO0lBQzNCLElBQUksRUFBRSxlQUFlO0lBQ3JCLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUTtJQUN6QixLQUFLLEVBQUUsNEJBQTRCO0lBQ25DLFNBQVMsRUFBRSw0QkFBNEI7Q0FDeEMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQWlCO0lBQ2pELFNBQVMsRUFBRSxlQUFlO0lBQzFCLElBQUksRUFBRSxlQUFlO0lBQ3JCLElBQUksRUFBRSxVQUFVLENBQUMsTUFBTTtJQUN2QixLQUFLLEVBQUUsNEJBQTRCO0lBQ25DLFNBQVMsRUFBRSw0QkFBNEI7Q0FDeEMsQ0FBQztBQUNGLE1BQU07QUFDTixtQ0FBbUM7QUFDbkMsTUFBTTtBQUNOLHdEQUF3RDtBQUN4RCxnQ0FBZ0M7QUFDaEMsMkJBQTJCO0FBQzNCLDhCQUE4QjtBQUM5QixpQ0FBaUM7QUFDakMsb0NBQW9DO0FBQ3BDLEtBQUs7QUFFTDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFpQjtJQUNqRCxTQUFTLEVBQUUsY0FBYztJQUN6QixJQUFJLEVBQUUsZUFBZTtJQUNyQixJQUFJLEVBQUUsVUFBVSxDQUFDLE1BQU07SUFDdkIsS0FBSyxFQUFFLDBCQUEwQjtJQUNqQyxTQUFTLEVBQUUsMEJBQTBCO0NBQ3RDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFpQjtJQUN0RCxTQUFTLEVBQUUsa0JBQWtCO0lBQzdCLElBQUksRUFBRSxlQUFlO0lBQ3JCLElBQUksRUFBRSxVQUFVLENBQUMsVUFBVTtJQUMzQixLQUFLLEVBQUUsdUJBQXVCO0lBQzlCLFNBQVMsRUFBRSx1QkFBdUI7Q0FDbkMsQ0FBQztBQUNGOztHQUVHO0FBQ0gsdURBQXVEO0FBQ3ZELCtCQUErQjtBQUMvQiwyQkFBMkI7QUFDM0IsNkJBQTZCO0FBQzdCLCtEQUErRDtBQUMvRCxrRUFBa0U7QUFDbEUsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1dHRvbkNvbmZpZywgQnV0dG9uVHlwZSB9IGZyb20gJy4uLy4uL21vZGVsL2J1dHRvbnMtY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSAnLi4vLi4vbW9kZWwvc2l6ZS5pbnRlcmZhY2UnO1xuXG4vKipcbiAqIERlZmF1bHQgYnV0dG9uIHNpemUgb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBLU19ERUZBVUxUX1NJWkU6IFNpemUgPSB7IGhlaWdodDogJ2F1dG8nLCB3aWR0aDogJzMwcHgnIH07XG5cbi8qKlxuICogRGVmYXVsdCBjbG9zZSBidXR0b24gb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBLU19ERUZBVUxUX0JUTl9DTE9TRTogQnV0dG9uQ29uZmlnID0ge1xuICBjbGFzc05hbWU6ICdjbG9zZS1pbWFnZScsXG4gIHNpemU6IEtTX0RFRkFVTFRfU0laRSxcbiAgdHlwZTogQnV0dG9uVHlwZS5DTE9TRSxcbiAgdGl0bGU6ICdDbG9zZSB0aGlzIG1vZGFsIGltYWdlIGdhbGxlcnknLFxuICBhcmlhTGFiZWw6ICdDbG9zZSB0aGlzIG1vZGFsIGltYWdlIGdhbGxlcnknXG59O1xuXG4vKipcbiAqIERlZmF1bHQgZG93bmxvYWQgYnV0dG9uIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgS1NfREVGQVVMVF9CVE5fRE9XTkxPQUQ6IEJ1dHRvbkNvbmZpZyA9IHtcbiAgY2xhc3NOYW1lOiAnZG93bmxvYWQtaW1hZ2UnLFxuICBzaXplOiBLU19ERUZBVUxUX1NJWkUsXG4gIHR5cGU6IEJ1dHRvblR5cGUuRE9XTkxPQUQsXG4gIHRpdGxlOiAnRG93bmxvYWQgdGhlIGN1cnJlbnQgaW1hZ2UnLFxuICBhcmlhTGFiZWw6ICdEb3dubG9hZCB0aGUgY3VycmVudCBpbWFnZSdcbn07XG5cbi8qKlxuICogRGVmYXVsdCBleHR1cmwgYnV0dG9uIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgS1NfREVGQVVMVF9CVE5fRVhUVVJMOiBCdXR0b25Db25maWcgPSB7XG4gIGNsYXNzTmFtZTogJ2V4dC11cmwtaW1hZ2UnLFxuICBzaXplOiBLU19ERUZBVUxUX1NJWkUsXG4gIHR5cGU6IEJ1dHRvblR5cGUuRVhUVVJMLFxuICB0aXRsZTogJ05hdmlnYXRlIHRoZSBjdXJyZW50IGltYWdlJyxcbiAgYXJpYUxhYmVsOiAnTmF2aWdhdGUgdGhlIGN1cnJlbnQgaW1hZ2UnXG59O1xuLy8gLyoqXG4vLyAgKiBEZWZhdWx0IHJlZnJlc2ggYnV0dG9uIG9iamVjdFxuLy8gICovXG4vLyBleHBvcnQgY29uc3QgS1NfREVGQVVMVF9CVE5fUkVGUkVTSDogQnV0dG9uQ29uZmlnID0ge1xuLy8gICBjbGFzc05hbWU6ICdyZWZyZXNoLWltYWdlJyxcbi8vICAgc2l6ZTogS1NfREVGQVVMVF9TSVpFLFxuLy8gICB0eXBlOiBCdXR0b25UeXBlLlJFRlJFU0gsXG4vLyAgIHRpdGxlOiAnUmVmcmVzaCBhbGwgaW1hZ2VzJyxcbi8vICAgYXJpYUxhYmVsOiAnUmVmcmVzaCBhbGwgaW1hZ2VzJ1xuLy8gfTtcblxuLyoqXG4gKiBEZWZhdWx0IGRlbGV0ZSBidXR0b24gb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBLU19ERUZBVUxUX0JUTl9ERUxFVEU6IEJ1dHRvbkNvbmZpZyA9IHtcbiAgY2xhc3NOYW1lOiAnZGVsZXRlLWltYWdlJyxcbiAgc2l6ZTogS1NfREVGQVVMVF9TSVpFLFxuICB0eXBlOiBCdXR0b25UeXBlLkRFTEVURSxcbiAgdGl0bGU6ICdEZWxldGUgdGhlIGN1cnJlbnQgaW1hZ2UnLFxuICBhcmlhTGFiZWw6ICdEZWxldGUgdGhlIGN1cnJlbnQgaW1hZ2UnXG59O1xuXG4vKipcbiAqIERlZmF1bHQgZnVsbC1zY3JlZW4gYnV0dG9uIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgS1NfREVGQVVMVF9CVE5fRlVMTF9TQ1JFRU46IEJ1dHRvbkNvbmZpZyA9IHtcbiAgY2xhc3NOYW1lOiAnZnVsbHNjcmVlbi1pbWFnZScsXG4gIHNpemU6IEtTX0RFRkFVTFRfU0laRSxcbiAgdHlwZTogQnV0dG9uVHlwZS5GVUxMU0NSRUVOLFxuICB0aXRsZTogJ1N3aXRjaCB0byBmdWxsLXNjcmVlbicsXG4gIGFyaWFMYWJlbDogJ1N3aXRjaCB0byBmdWxsLXNjcmVlbidcbn07XG4vKipcbiAqIERlZmF1bHQgcm90YXRlIGJ1dHRvbiBvYmplY3RcbiAqL1xuLy8gZXhwb3J0IGNvbnN0IEtTX0RFRkFVTFRfQlROX1JPVEFURTogQnV0dG9uQ29uZmlnID0ge1xuLy8gICBjbGFzc05hbWU6ICdyb3RhdGUtaW1hZ2UnLFxuLy8gICBzaXplOiBLU19ERUZBVUxUX1NJWkUsXG4vLyAgIHR5cGU6IEJ1dHRvblR5cGUuUk9UQVRFLFxuLy8gICB0aXRsZTogJ1JvdGF0ZSBjbG9ja3dpc2Ugb2YgOTAgZGVncmVlcyB0aGUgY3VycmVudCBpbWFnZScsXG4vLyAgIGFyaWFMYWJlbDogJ1JvdGF0ZSBjbG9ja3dpc2Ugb2YgOTAgZGVncmVlcyB0aGUgY3VycmVudCBpbWFnZSdcbi8vIH07XG4iXX0=
|