@skyux/flyout 5.9.4 → 6.0.0-beta.10
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/documentation.json +141 -141
- package/esm2020/index.mjs +14 -0
- package/esm2020/lib/modules/flyout/flyout-adapter.service.mjs +64 -0
- package/esm2020/lib/modules/flyout/flyout-instance.mjs +109 -0
- package/esm2020/lib/modules/flyout/flyout-iterator.component.mjs +55 -0
- package/esm2020/lib/modules/flyout/flyout-media-query.service.mjs +72 -0
- package/esm2020/lib/modules/flyout/flyout.component.mjs +486 -0
- package/esm2020/lib/modules/flyout/flyout.module.mjs +55 -0
- package/esm2020/lib/modules/flyout/flyout.service.mjs +173 -0
- package/esm2020/lib/modules/flyout/types/flyout-action.mjs +2 -0
- package/esm2020/lib/modules/flyout/types/flyout-before-close-handler.mjs +9 -0
- package/esm2020/lib/modules/flyout/types/flyout-close-args.mjs +2 -0
- package/esm2020/lib/modules/flyout/types/flyout-config.mjs +2 -0
- package/esm2020/lib/modules/flyout/types/flyout-message-type.mjs +13 -0
- package/esm2020/lib/modules/flyout/types/flyout-message.mjs +2 -0
- package/esm2020/lib/modules/flyout/types/flyout-permalink.mjs +2 -0
- package/esm2020/lib/modules/shared/sky-flyout-resources.module.mjs +54 -0
- package/esm2020/skyux-flyout.mjs +5 -0
- package/fesm2015/skyux-flyout.mjs +1056 -0
- package/fesm2015/skyux-flyout.mjs.map +1 -0
- package/{fesm2015/skyux-flyout.js → fesm2020/skyux-flyout.mjs} +36 -59
- package/fesm2020/skyux-flyout.mjs.map +1 -0
- package/lib/modules/flyout/flyout.component.d.ts +0 -2
- package/lib/modules/flyout/flyout.service.d.ts +2 -2
- package/package.json +33 -17
- package/bundles/skyux-flyout.umd.js +0 -1179
- package/esm2015/index.js +0 -14
- package/esm2015/index.js.map +0 -1
- package/esm2015/lib/modules/flyout/flyout-adapter.service.js +0 -64
- package/esm2015/lib/modules/flyout/flyout-adapter.service.js.map +0 -1
- package/esm2015/lib/modules/flyout/flyout-instance.js +0 -109
- package/esm2015/lib/modules/flyout/flyout-instance.js.map +0 -1
- package/esm2015/lib/modules/flyout/flyout-iterator.component.js +0 -59
- package/esm2015/lib/modules/flyout/flyout-iterator.component.js.map +0 -1
- package/esm2015/lib/modules/flyout/flyout-media-query.service.js +0 -72
- package/esm2015/lib/modules/flyout/flyout-media-query.service.js.map +0 -1
- package/esm2015/lib/modules/flyout/flyout.component.js +0 -508
- package/esm2015/lib/modules/flyout/flyout.component.js.map +0 -1
- package/esm2015/lib/modules/flyout/flyout.module.js +0 -56
- package/esm2015/lib/modules/flyout/flyout.module.js.map +0 -1
- package/esm2015/lib/modules/flyout/flyout.service.js +0 -169
- package/esm2015/lib/modules/flyout/flyout.service.js.map +0 -1
- package/esm2015/lib/modules/flyout/types/flyout-action.js +0 -2
- package/esm2015/lib/modules/flyout/types/flyout-action.js.map +0 -1
- package/esm2015/lib/modules/flyout/types/flyout-before-close-handler.js +0 -9
- package/esm2015/lib/modules/flyout/types/flyout-before-close-handler.js.map +0 -1
- package/esm2015/lib/modules/flyout/types/flyout-close-args.js +0 -2
- package/esm2015/lib/modules/flyout/types/flyout-close-args.js.map +0 -1
- package/esm2015/lib/modules/flyout/types/flyout-config.js +0 -2
- package/esm2015/lib/modules/flyout/types/flyout-config.js.map +0 -1
- package/esm2015/lib/modules/flyout/types/flyout-message-type.js +0 -13
- package/esm2015/lib/modules/flyout/types/flyout-message-type.js.map +0 -1
- package/esm2015/lib/modules/flyout/types/flyout-message.js +0 -2
- package/esm2015/lib/modules/flyout/types/flyout-message.js.map +0 -1
- package/esm2015/lib/modules/flyout/types/flyout-permalink.js +0 -2
- package/esm2015/lib/modules/flyout/types/flyout-permalink.js.map +0 -1
- package/esm2015/lib/modules/shared/sky-flyout-resources.module.js +0 -54
- package/esm2015/lib/modules/shared/sky-flyout-resources.module.js.map +0 -1
- package/esm2015/skyux-flyout.js +0 -5
- package/esm2015/skyux-flyout.js.map +0 -1
- package/fesm2015/skyux-flyout.js.map +0 -1
|
@@ -0,0 +1,486 @@
|
|
|
1
|
+
import { animate, state, style, transition, trigger, } from '@angular/animations';
|
|
2
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ComponentFactoryResolver, ElementRef, HostListener, Injector, NgZone, ViewChild, ViewContainerRef, } from '@angular/core';
|
|
3
|
+
import { SkyMediaBreakpoints, SkyMediaQueryService, SkyUIConfigService, } from '@skyux/core';
|
|
4
|
+
import { SkyLibResourcesService } from '@skyux/i18n';
|
|
5
|
+
import { Subject, fromEvent } from 'rxjs';
|
|
6
|
+
import { take, takeUntil, takeWhile } from 'rxjs/operators';
|
|
7
|
+
import { SkyFlyoutAdapterService } from './flyout-adapter.service';
|
|
8
|
+
import { SkyFlyoutInstance } from './flyout-instance';
|
|
9
|
+
import { SkyFlyoutMediaQueryService } from './flyout-media-query.service';
|
|
10
|
+
import { SkyFlyoutBeforeCloseHandler } from './types/flyout-before-close-handler';
|
|
11
|
+
import { SkyFlyoutMessageType } from './types/flyout-message-type';
|
|
12
|
+
import * as i0 from "@angular/core";
|
|
13
|
+
import * as i1 from "./flyout-adapter.service";
|
|
14
|
+
import * as i2 from "@skyux/i18n";
|
|
15
|
+
import * as i3 from "./flyout-media-query.service";
|
|
16
|
+
import * as i4 from "@skyux/core";
|
|
17
|
+
import * as i5 from "@skyux/indicators";
|
|
18
|
+
import * as i6 from "./flyout-iterator.component";
|
|
19
|
+
import * as i7 from "@angular/common";
|
|
20
|
+
import * as i8 from "@skyux/theme";
|
|
21
|
+
import * as i9 from "@angular/cdk/a11y";
|
|
22
|
+
import * as i10 from "@skyux/router";
|
|
23
|
+
import * as i11 from "@angular/router";
|
|
24
|
+
const FLYOUT_OPEN_STATE = 'flyoutOpen';
|
|
25
|
+
const FLYOUT_CLOSED_STATE = 'flyoutClosed';
|
|
26
|
+
let nextId = 0;
|
|
27
|
+
/**
|
|
28
|
+
* @internal
|
|
29
|
+
*/
|
|
30
|
+
export class SkyFlyoutComponent {
|
|
31
|
+
constructor(adapter, changeDetector, injector, resolver, resourcesService, flyoutMediaQueryService, elementRef, uiConfigService, _ngZone) {
|
|
32
|
+
this.adapter = adapter;
|
|
33
|
+
this.changeDetector = changeDetector;
|
|
34
|
+
this.injector = injector;
|
|
35
|
+
this.resolver = resolver;
|
|
36
|
+
this.resourcesService = resourcesService;
|
|
37
|
+
this.flyoutMediaQueryService = flyoutMediaQueryService;
|
|
38
|
+
this.elementRef = elementRef;
|
|
39
|
+
this.uiConfigService = uiConfigService;
|
|
40
|
+
this._ngZone = _ngZone;
|
|
41
|
+
this.flyoutId = `sky-flyout-${++nextId}`;
|
|
42
|
+
this.flyoutState = FLYOUT_CLOSED_STATE;
|
|
43
|
+
this.isOpen = false;
|
|
44
|
+
this.isOpening = false;
|
|
45
|
+
this.flyoutWidth = 0;
|
|
46
|
+
this.instanceReady = false;
|
|
47
|
+
this.isDragging = false;
|
|
48
|
+
this.isFullscreen = false;
|
|
49
|
+
this.resizeKeyControlActive = false;
|
|
50
|
+
this.xCoord = 0;
|
|
51
|
+
this.windowBufferSize = 20;
|
|
52
|
+
/**
|
|
53
|
+
* @internal
|
|
54
|
+
*/
|
|
55
|
+
this.widthStep = 10;
|
|
56
|
+
this.ngUnsubscribe = new Subject();
|
|
57
|
+
this._messageStream = new Subject();
|
|
58
|
+
// All commands flow through the message stream.
|
|
59
|
+
this.messageStream
|
|
60
|
+
.pipe(takeUntil(this.ngUnsubscribe))
|
|
61
|
+
.subscribe((message) => {
|
|
62
|
+
this.handleIncomingMessages(message);
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
get messageStream() {
|
|
66
|
+
return this._messageStream;
|
|
67
|
+
}
|
|
68
|
+
get permalink() {
|
|
69
|
+
const permalink = this.config.permalink;
|
|
70
|
+
if (permalink) {
|
|
71
|
+
return permalink;
|
|
72
|
+
}
|
|
73
|
+
return {};
|
|
74
|
+
}
|
|
75
|
+
get permalinkLabel() {
|
|
76
|
+
if (this.permalink.label) {
|
|
77
|
+
return this.permalink.label;
|
|
78
|
+
}
|
|
79
|
+
return this.getString('skyux_flyout_permalink_button');
|
|
80
|
+
}
|
|
81
|
+
get primaryAction() {
|
|
82
|
+
const primaryAction = this.config.primaryAction;
|
|
83
|
+
if (primaryAction) {
|
|
84
|
+
return primaryAction;
|
|
85
|
+
}
|
|
86
|
+
return {};
|
|
87
|
+
}
|
|
88
|
+
get primaryActionLabel() {
|
|
89
|
+
if (this.config.primaryAction && this.config.primaryAction.label) {
|
|
90
|
+
return this.config.primaryAction.label;
|
|
91
|
+
}
|
|
92
|
+
return this.getString('skyux_flyout_primary_action_button');
|
|
93
|
+
}
|
|
94
|
+
ngOnInit() {
|
|
95
|
+
this.adapter.adjustHeaderForHelp(this.flyoutHeader);
|
|
96
|
+
}
|
|
97
|
+
ngOnDestroy() {
|
|
98
|
+
this.ngUnsubscribe.next();
|
|
99
|
+
this.ngUnsubscribe.complete();
|
|
100
|
+
}
|
|
101
|
+
onWindowResize(event) {
|
|
102
|
+
if (this.flyoutMediaQueryService.isWidthWithinBreakpiont(event.target.innerWidth, SkyMediaBreakpoints.xs)) {
|
|
103
|
+
this.updateBreakpointAndResponsiveClass(event.target.innerWidth);
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
this.updateBreakpointAndResponsiveClass(this.flyoutWidth);
|
|
107
|
+
}
|
|
108
|
+
this.setFullscreen();
|
|
109
|
+
if (event.target.innerWidth - this.flyoutWidth < this.windowBufferSize) {
|
|
110
|
+
this.flyoutWidth = event.target.innerWidth - this.windowBufferSize;
|
|
111
|
+
this.xCoord = this.windowBufferSize;
|
|
112
|
+
this.setUserData();
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
attach(component, config) {
|
|
116
|
+
this.cleanTemplate();
|
|
117
|
+
// Emit the closed event on any previously opened flyout instance
|
|
118
|
+
if (this.flyoutInstance) {
|
|
119
|
+
this.notifyClosed();
|
|
120
|
+
}
|
|
121
|
+
this.config = Object.assign({ providers: [] }, config);
|
|
122
|
+
this.config.defaultWidth =
|
|
123
|
+
this.config.defaultWidth || window.innerWidth / 2;
|
|
124
|
+
this.config.minWidth = this.config.minWidth || 320;
|
|
125
|
+
this.config.maxWidth = this.config.maxWidth || this.config.defaultWidth;
|
|
126
|
+
this.config.showIterator = this.config.showIterator || false;
|
|
127
|
+
this.config.iteratorNextButtonDisabled =
|
|
128
|
+
this.config.iteratorNextButtonDisabled || false;
|
|
129
|
+
this.config.iteratorPreviousButtonDisabled =
|
|
130
|
+
this.config.iteratorPreviousButtonDisabled || false;
|
|
131
|
+
const factory = this.resolver.resolveComponentFactory(component);
|
|
132
|
+
const injector = Injector.create({
|
|
133
|
+
parent: this.injector,
|
|
134
|
+
providers: this.config.providers,
|
|
135
|
+
});
|
|
136
|
+
const componentRef = this.target.createComponent(factory, undefined, injector);
|
|
137
|
+
this.flyoutInstance = this.createFlyoutInstance(componentRef.instance);
|
|
138
|
+
// This is used to ensure we do not render the flyout until we have attached the component.
|
|
139
|
+
// This allows the aria-labelledby to function correctly.
|
|
140
|
+
this.instanceReady = true;
|
|
141
|
+
this.changeDetector.markForCheck();
|
|
142
|
+
// Open the flyout immediately.
|
|
143
|
+
this.messageStream.next({
|
|
144
|
+
type: SkyFlyoutMessageType.Open,
|
|
145
|
+
});
|
|
146
|
+
if (this.config.settingsKey) {
|
|
147
|
+
this.uiConfigService
|
|
148
|
+
.getConfig(this.config.settingsKey)
|
|
149
|
+
.pipe(take(1))
|
|
150
|
+
.subscribe((value) => {
|
|
151
|
+
if (value && value.flyoutWidth) {
|
|
152
|
+
this.flyoutWidth = value.flyoutWidth;
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
// Bad data, or config is the default config.
|
|
156
|
+
this.flyoutWidth = this.config.defaultWidth;
|
|
157
|
+
}
|
|
158
|
+
this.checkInitialSize();
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
this.flyoutWidth = this.config.defaultWidth;
|
|
163
|
+
this.checkInitialSize();
|
|
164
|
+
}
|
|
165
|
+
return this.flyoutInstance;
|
|
166
|
+
}
|
|
167
|
+
close() {
|
|
168
|
+
this.messageStream.next({
|
|
169
|
+
type: SkyFlyoutMessageType.Close,
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
invokePrimaryAction() {
|
|
173
|
+
this.primaryAction.callback();
|
|
174
|
+
if (this.primaryAction.closeAfterInvoking) {
|
|
175
|
+
this.close();
|
|
176
|
+
}
|
|
177
|
+
return false;
|
|
178
|
+
}
|
|
179
|
+
getAnimationState() {
|
|
180
|
+
return this.instanceReady && this.isOpening
|
|
181
|
+
? FLYOUT_OPEN_STATE
|
|
182
|
+
: FLYOUT_CLOSED_STATE;
|
|
183
|
+
}
|
|
184
|
+
animationDone(event) {
|
|
185
|
+
if (event.toState === FLYOUT_OPEN_STATE) {
|
|
186
|
+
this.isOpen = true;
|
|
187
|
+
}
|
|
188
|
+
if (event.toState === FLYOUT_CLOSED_STATE) {
|
|
189
|
+
this.isOpen = false;
|
|
190
|
+
this.notifyClosed();
|
|
191
|
+
this.cleanTemplate();
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
onHeaderGrabHandleMouseDown(event) {
|
|
195
|
+
this.onResizeHandleMouseDown(event);
|
|
196
|
+
}
|
|
197
|
+
onHeaderGrabHandleKeyDown(event) {
|
|
198
|
+
this.handleResizeKeyDown(event);
|
|
199
|
+
}
|
|
200
|
+
onResizeHandleKeyDown(event) {
|
|
201
|
+
this.handleResizeKeyDown(event);
|
|
202
|
+
}
|
|
203
|
+
onResizeHandleMouseDown(event) {
|
|
204
|
+
event.preventDefault();
|
|
205
|
+
event.stopPropagation();
|
|
206
|
+
if (this.isFullscreen) {
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
this.isDragging = true;
|
|
210
|
+
this.xCoord = event.clientX;
|
|
211
|
+
this.adapter.toggleIframePointerEvents(false);
|
|
212
|
+
fromEvent(document, 'mousemove')
|
|
213
|
+
.pipe(takeWhile(() => {
|
|
214
|
+
return this.isDragging;
|
|
215
|
+
}))
|
|
216
|
+
.subscribe((moveEvent) => {
|
|
217
|
+
this.onMouseMove(moveEvent);
|
|
218
|
+
});
|
|
219
|
+
fromEvent(document, 'mouseup')
|
|
220
|
+
.pipe(takeWhile(() => {
|
|
221
|
+
return this.isDragging;
|
|
222
|
+
}))
|
|
223
|
+
.subscribe((mouseUpEvent) => {
|
|
224
|
+
this.onHandleRelease(mouseUpEvent);
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
onMouseMove(event) {
|
|
228
|
+
/* Sanity check */
|
|
229
|
+
/* istanbul ignore if */
|
|
230
|
+
if (!this.isDragging) {
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
const offsetX = event.clientX - this.xCoord;
|
|
234
|
+
let width = this.flyoutWidth;
|
|
235
|
+
width -= offsetX;
|
|
236
|
+
if (width < this.config.minWidth || width > this.config.maxWidth) {
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
if (window.innerWidth - width < this.windowBufferSize) {
|
|
240
|
+
width = window.innerWidth - this.windowBufferSize;
|
|
241
|
+
this.xCoord = this.windowBufferSize;
|
|
242
|
+
}
|
|
243
|
+
else {
|
|
244
|
+
this.xCoord = event.clientX;
|
|
245
|
+
}
|
|
246
|
+
this.flyoutWidth = width;
|
|
247
|
+
this.updateBreakpointAndResponsiveClass(this.flyoutWidth);
|
|
248
|
+
this.changeDetector.markForCheck();
|
|
249
|
+
}
|
|
250
|
+
onHandleRelease(event) {
|
|
251
|
+
fromEvent(document, 'click')
|
|
252
|
+
.pipe(take(1))
|
|
253
|
+
.subscribe(() => {
|
|
254
|
+
this.isDragging = false;
|
|
255
|
+
this.adapter.toggleIframePointerEvents(true);
|
|
256
|
+
this.setUserData();
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
onIteratorPreviousButtonClick() {
|
|
260
|
+
this.flyoutInstance.iteratorPreviousButtonClick.emit();
|
|
261
|
+
}
|
|
262
|
+
onIteratorNextButtonClick() {
|
|
263
|
+
this.flyoutInstance.iteratorNextButtonClick.emit();
|
|
264
|
+
}
|
|
265
|
+
createFlyoutInstance(component) {
|
|
266
|
+
const instance = new SkyFlyoutInstance();
|
|
267
|
+
instance.componentInstance = component;
|
|
268
|
+
instance.hostController
|
|
269
|
+
.pipe(takeUntil(this.ngUnsubscribe))
|
|
270
|
+
.subscribe((message) => {
|
|
271
|
+
this.messageStream.next(message);
|
|
272
|
+
});
|
|
273
|
+
return instance;
|
|
274
|
+
}
|
|
275
|
+
handleIncomingMessages(message) {
|
|
276
|
+
switch (message.type) {
|
|
277
|
+
case SkyFlyoutMessageType.Open:
|
|
278
|
+
if (!this.isOpen) {
|
|
279
|
+
this.isOpen = false;
|
|
280
|
+
this.isOpening = true;
|
|
281
|
+
}
|
|
282
|
+
this.initFocusTrap();
|
|
283
|
+
break;
|
|
284
|
+
case SkyFlyoutMessageType.Close:
|
|
285
|
+
if (this.flyoutInstance.beforeClose.observers.length ===
|
|
286
|
+
0 ||
|
|
287
|
+
message.data?.ignoreBeforeClose) {
|
|
288
|
+
this.isOpen = true;
|
|
289
|
+
this.isOpening = false;
|
|
290
|
+
}
|
|
291
|
+
else {
|
|
292
|
+
this.flyoutInstance.beforeClose.next(new SkyFlyoutBeforeCloseHandler(() => {
|
|
293
|
+
this.isOpen = true;
|
|
294
|
+
this.isOpening = false;
|
|
295
|
+
}));
|
|
296
|
+
}
|
|
297
|
+
break;
|
|
298
|
+
case SkyFlyoutMessageType.EnableIteratorNextButton:
|
|
299
|
+
this.config.iteratorNextButtonDisabled = false;
|
|
300
|
+
break;
|
|
301
|
+
case SkyFlyoutMessageType.EnableIteratorPreviousButton:
|
|
302
|
+
this.config.iteratorPreviousButtonDisabled = false;
|
|
303
|
+
break;
|
|
304
|
+
case SkyFlyoutMessageType.DisableIteratorNextButton:
|
|
305
|
+
this.config.iteratorNextButtonDisabled = true;
|
|
306
|
+
break;
|
|
307
|
+
case SkyFlyoutMessageType.DisableIteratorPreviousButton:
|
|
308
|
+
this.config.iteratorPreviousButtonDisabled = true;
|
|
309
|
+
break;
|
|
310
|
+
}
|
|
311
|
+
this.changeDetector.markForCheck();
|
|
312
|
+
}
|
|
313
|
+
notifyClosed() {
|
|
314
|
+
this.flyoutInstance.closed.emit();
|
|
315
|
+
this.flyoutInstance.closed.complete();
|
|
316
|
+
}
|
|
317
|
+
cleanTemplate() {
|
|
318
|
+
this.target.clear();
|
|
319
|
+
}
|
|
320
|
+
updateBreakpointAndResponsiveClass(width) {
|
|
321
|
+
this.flyoutMediaQueryService.setBreakpointForWidth(width);
|
|
322
|
+
const newBreakpiont = this.flyoutMediaQueryService.current;
|
|
323
|
+
this.adapter.setResponsiveClass(this.elementRef, newBreakpiont);
|
|
324
|
+
}
|
|
325
|
+
setFullscreen() {
|
|
326
|
+
if (window.innerWidth - this.windowBufferSize < this.config.minWidth) {
|
|
327
|
+
this.isFullscreen = true;
|
|
328
|
+
}
|
|
329
|
+
else {
|
|
330
|
+
this.isFullscreen = false;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
setUserData() {
|
|
334
|
+
if (this.config.settingsKey) {
|
|
335
|
+
this.uiConfigService
|
|
336
|
+
.setConfig(this.config.settingsKey, {
|
|
337
|
+
flyoutWidth: this.flyoutWidth,
|
|
338
|
+
})
|
|
339
|
+
.pipe(take(1))
|
|
340
|
+
.subscribe(
|
|
341
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
342
|
+
() => { }, (err) => {
|
|
343
|
+
console.warn('Could not save flyout data.');
|
|
344
|
+
console.warn(err);
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
checkInitialSize() {
|
|
349
|
+
if (this.flyoutWidth < this.config.minWidth) {
|
|
350
|
+
this.flyoutWidth = this.config.minWidth;
|
|
351
|
+
this.setUserData();
|
|
352
|
+
}
|
|
353
|
+
else if (this.flyoutWidth > this.config.maxWidth) {
|
|
354
|
+
this.flyoutWidth = this.config.maxWidth;
|
|
355
|
+
this.setUserData();
|
|
356
|
+
}
|
|
357
|
+
// Ensure flyout does not load larger than the window and its buffer
|
|
358
|
+
if (window.innerWidth - this.flyoutWidth < this.windowBufferSize) {
|
|
359
|
+
this.flyoutWidth = window.innerWidth - this.windowBufferSize;
|
|
360
|
+
this.xCoord = this.windowBufferSize;
|
|
361
|
+
this.setUserData();
|
|
362
|
+
}
|
|
363
|
+
if (this.flyoutMediaQueryService.isWidthWithinBreakpiont(window.innerWidth, SkyMediaBreakpoints.xs)) {
|
|
364
|
+
this.updateBreakpointAndResponsiveClass(window.innerWidth);
|
|
365
|
+
}
|
|
366
|
+
else {
|
|
367
|
+
this.updateBreakpointAndResponsiveClass(this.flyoutWidth);
|
|
368
|
+
}
|
|
369
|
+
this.setFullscreen();
|
|
370
|
+
}
|
|
371
|
+
getString(key) {
|
|
372
|
+
// TODO: Need to implement the async `getString` method in a breaking change.
|
|
373
|
+
return this.resourcesService.getStringForLocale({ locale: 'en-US' }, key);
|
|
374
|
+
}
|
|
375
|
+
handleResizeKeyDown(event) {
|
|
376
|
+
/* istanbul ignore else */
|
|
377
|
+
if (event.key) {
|
|
378
|
+
const keyPressed = event.key.toLowerCase().replace('arrow', '');
|
|
379
|
+
switch (keyPressed) {
|
|
380
|
+
case 'enter':
|
|
381
|
+
case ' ':
|
|
382
|
+
this.resizeKeyControlActive = !this.resizeKeyControlActive;
|
|
383
|
+
break;
|
|
384
|
+
case 'tab':
|
|
385
|
+
/* istanbul ignore else */
|
|
386
|
+
if (this.resizeKeyControlActive) {
|
|
387
|
+
this.resizeKeyControlActive = false;
|
|
388
|
+
}
|
|
389
|
+
break;
|
|
390
|
+
case 'left':
|
|
391
|
+
if (this.resizeKeyControlActive) {
|
|
392
|
+
/* istanbul ignore else */
|
|
393
|
+
if (this.flyoutWidth < this.config.maxWidth) {
|
|
394
|
+
this.flyoutWidth = Math.min(this.flyoutWidth + this.widthStep, this.config.maxWidth);
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
break;
|
|
398
|
+
case 'right':
|
|
399
|
+
if (this.resizeKeyControlActive) {
|
|
400
|
+
/* istanbul ignore else */
|
|
401
|
+
if (this.flyoutWidth > this.config.minWidth) {
|
|
402
|
+
this.flyoutWidth = Math.max(this.flyoutWidth - this.widthStep, this.config.minWidth);
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
break;
|
|
406
|
+
/* istanbul ignore next */
|
|
407
|
+
default:
|
|
408
|
+
break;
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
/** Executes a function when the zone is stable. */
|
|
413
|
+
_executeOnStable(fn) {
|
|
414
|
+
if (this._ngZone.isStable) {
|
|
415
|
+
fn();
|
|
416
|
+
}
|
|
417
|
+
else {
|
|
418
|
+
this._ngZone.onStable.pipe(take(1)).subscribe(fn);
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
initFocusTrap() {
|
|
422
|
+
this.enableTrapFocusAutoCapture = false;
|
|
423
|
+
this.enableTrapFocus = false;
|
|
424
|
+
// Waiting for zone to be stable will avoid ExpressionChangeAfterCheckedError.
|
|
425
|
+
this._executeOnStable(() => {
|
|
426
|
+
this.enableTrapFocusAutoCapture = true;
|
|
427
|
+
this.enableTrapFocus = true;
|
|
428
|
+
});
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
SkyFlyoutComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: SkyFlyoutComponent, deps: [{ token: i1.SkyFlyoutAdapterService }, { token: i0.ChangeDetectorRef }, { token: i0.Injector }, { token: i0.ComponentFactoryResolver }, { token: i2.SkyLibResourcesService }, { token: i3.SkyFlyoutMediaQueryService }, { token: i0.ElementRef }, { token: i4.SkyUIConfigService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
|
|
432
|
+
SkyFlyoutComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.2", type: SkyFlyoutComponent, selector: "sky-flyout", host: { listeners: { "window:resize": "onWindowResize($event)" } }, providers: [
|
|
433
|
+
SkyFlyoutAdapterService,
|
|
434
|
+
SkyFlyoutMediaQueryService,
|
|
435
|
+
{ provide: SkyMediaQueryService, useExisting: SkyFlyoutMediaQueryService },
|
|
436
|
+
], viewQueries: [{ propertyName: "flyoutRef", first: true, predicate: ["flyoutRef"], descendants: true, read: ElementRef, static: true }, { propertyName: "target", first: true, predicate: ["target"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "flyoutHeader", first: true, predicate: ["flyoutHeader"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<div\n class=\"sky-flyout\"\n tabindex=\"-1\"\n [attr.role]=\"config?.ariaRole ? config.ariaRole : 'dialog'\"\n [attr.aria-describedby]=\"config?.ariaDescribedBy\"\n [attr.aria-label]=\"config?.ariaLabel\"\n [attr.aria-labelledby]=\"config?.ariaLabelledBy\"\n [attr.aria-modal]=\"\n config?.ariaRole === 'dialog' || !config?.ariaRole ? true : false\n \"\n [attr.hidden]=\"!instanceReady ? true : undefined\"\n [id]=\"flyoutId\"\n [ngClass]=\"{\n 'sky-flyout-hidden': !isOpen && !isOpening,\n 'sky-flyout-fullscreen': isFullscreen\n }\"\n [skyThemeClass]=\"{\n 'sky-shadow': 'default',\n 'sky-elevation-8': 'modern'\n }\"\n (@flyoutState.done)=\"animationDone($event)\"\n [@flyoutState]=\"getAnimationState()\"\n [style.width.px]=\"flyoutWidth\"\n #flyoutRef\n [cdkTrapFocus]=\"enableTrapFocus\"\n [cdkTrapFocusAutoCapture]=\"enableTrapFocusAutoCapture\"\n>\n <div\n class=\"sky-flyout-header\"\n [skyThemeClass]=\"{\n 'sky-padding-squish-large': 'default'\n }\"\n #flyoutHeader\n >\n <div class=\"sky-flyout-header-content\">\n <button\n *skyThemeIf=\"'modern'\"\n class=\"sky-btn sky-btn-icon-borderless sky-margin-inline-sm sky-flyout-header-grab-handle\"\n [attr.aria-label]=\"'skyux_flyout_resize_handle' | skyLibResources\"\n (keydown)=\"onHeaderGrabHandleKeyDown($event)\"\n (mousedown)=\"onHeaderGrabHandleMouseDown($event)\"\n >\n <sky-icon icon=\"tile-drag\" iconType=\"skyux\" size=\"lg\"> </sky-icon>\n </button>\n\n <sky-flyout-iterator\n *ngIf=\"config.showIterator\"\n [nextButtonDisabled]=\"config.iteratorNextButtonDisabled\"\n [previousButtonDisabled]=\"config.iteratorPreviousButtonDisabled\"\n (nextButtonClick)=\"onIteratorNextButtonClick()\"\n (previousButtonClick)=\"onIteratorPreviousButtonClick()\"\n >\n </sky-flyout-iterator>\n </div>\n <div class=\"sky-flyout-header-buttons\">\n <ng-container *ngTemplateOutlet=\"permalinkTemplate\"> </ng-container>\n <ng-container *ngTemplateOutlet=\"primaryActionTemplate\"> </ng-container>\n <button\n class=\"sky-btn sky-flyout-btn-close sky-label-icon-theme-default\"\n type=\"button\"\n [attr.aria-label]=\"'skyux_flyout_close' | skyLibResources\"\n [skyThemeClass]=\"{\n 'sky-btn-default': 'default',\n 'sky-btn-icon-borderless': 'modern'\n }\"\n (click)=\"close()\"\n >\n <sky-icon *skyThemeIf=\"'default'\" icon=\"close\"> </sky-icon>\n <sky-icon\n *skyThemeIf=\"'modern'\"\n icon=\"close\"\n iconType=\"skyux\"\n size=\"lg\"\n >\n </sky-icon>\n </button>\n </div>\n </div>\n <div class=\"sky-flyout-content\">\n <div #target></div>\n </div>\n <div\n class=\"sky-flyout-resize-handle\"\n role=\"separator\"\n tabindex=\"0\"\n type=\"range\"\n [attr.aria-controls]=\"flyoutId\"\n [attr.aria-label]=\"'skyux_flyout_resize_handle' | skyLibResources\"\n [attr.aria-valuemax]=\"config.maxWidth\"\n [attr.aria-valuemin]=\"config.minWidth\"\n [attr.aria-valuenow]=\"flyoutWidth\"\n (keydown)=\"onResizeHandleKeyDown($event)\"\n (mousedown)=\"onResizeHandleMouseDown($event)\"\n ></div>\n</div>\n\n<ng-template #permalinkTemplate>\n <ng-template [ngIf]=\"permalink\">\n <ng-template [ngIf]=\"permalink.url\">\n <a\n class=\"sky-btn sky-flyout-btn-permalink sky-margin-inline-default\"\n [skyHref]=\"permalink.url\"\n [skyThemeClass]=\"{\n 'sky-btn-default': 'default',\n 'sky-btn-borderless': 'modern'\n }\"\n (click)=\"close()\"\n >\n {{ permalinkLabel }}\n </a>\n </ng-template>\n <ng-template [ngIf]=\"permalink.route\">\n <a\n class=\"sky-btn sky-flyout-btn-permalink sky-margin-inline-default\"\n [routerLink]=\"permalink.route.commands\"\n [fragment]=\"permalink.route.extras?.fragment\"\n [skyThemeClass]=\"{\n 'sky-btn-default': 'default',\n 'sky-btn-borderless': 'modern'\n }\"\n [queryParams]=\"permalink.route.extras?.queryParams\"\n [queryParamsHandling]=\"permalink.route.extras?.queryParamsHandling\"\n [state]=\"permalink.route.extras?.state\"\n (click)=\"close()\"\n >\n {{ permalinkLabel }}\n </a>\n </ng-template>\n </ng-template>\n</ng-template>\n\n<ng-template #primaryActionTemplate>\n <ng-template [ngIf]=\"primaryAction && primaryAction.callback\">\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-default sky-flyout-btn-primary-action sky-margin-inline-default\"\n (click)=\"invokePrimaryAction()\"\n >\n {{ primaryActionLabel }}\n </button>\n </ng-template>\n</ng-template>\n", styles: [".sky-flyout{position:fixed;right:0;top:0;bottom:0;height:100%;background-color:#fff;border-left:6px solid #0974a1;z-index:1001}.sky-flyout:focus{outline:none}.sky-flyout.sky-flyout-fullscreen{min-width:100%;max-width:100%}.sky-flyout.sky-flyout-fullscreen .sky-flyout-resize-handle{cursor:initial}.sky-flyout.sky-flyout-hidden{visibility:hidden}.sky-flyout .sky-flyout-input-aria-only{width:0;height:0;padding:0;opacity:0;position:absolute;margin:-1px;border:0;overflow:hidden;clip:rect(0 0 0 0);outline:none}.sky-flyout-resize-handle{-webkit-appearance:none;-moz-appearance:none;height:100%;width:14px;position:absolute;left:-10px;cursor:ew-resize;padding:0;border:0;background:transparent;display:block;top:0;bottom:0;direction:rtl}.sky-flyout-resize-handle::-moz-range-thumb,.sky-flyout-resize-handle::-moz-range-track{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-flyout-resize-handle::-ms-thumb,.sky-flyout-resize-handle::-ms-track{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-flyout-resize-handle::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-flyout-header{border-bottom:1px solid #cdcfd2;width:100%;background:#eeeeef;height:50px;display:flex;align-items:flex-start}.sky-flyout-header-content{flex-grow:1}.sky-flyout-btn-permalink:hover{text-decoration:none}.sky-flyout-help-shim{padding-right:8px}@media (min-width: 768px){.sky-flyout-help-shim{padding-right:50px}}.sky-flyout-content{overflow-y:auto;height:calc(100% - 50px)}:host-context(.sky-theme-modern) .sky-flyout{border-left:0}:host-context(.sky-theme-modern) .sky-flyout-header{border-bottom:none;background:#fff;padding:15px 10px}:host-context(.sky-theme-modern) .sky-flyout-header-grab-handle{cursor:move;cursor:-moz-grab}.sky-theme-modern .sky-flyout{border-left:0}.sky-theme-modern .sky-flyout-header{border-bottom:none;background:#fff;padding:15px 10px}.sky-theme-modern .sky-flyout-header-grab-handle{cursor:move;cursor:-moz-grab}:host-context(.sky-theme-modern.sky-theme-mode-dark) .sky-flyout{background:#000}:host-context(.sky-theme-modern.sky-theme-mode-dark) .sky-flyout-header{background:#000}.sky-theme-modern.sky-theme-mode-dark .sky-flyout,.sky-theme-modern.sky-theme-mode-dark .sky-flyout-header{background:#000}\n"], components: [{ type: i5.λ4, selector: "sky-icon", inputs: ["icon", "iconType", "size", "fixedWidth", "variant"] }, { type: i6.SkyFlyoutIteratorComponent, selector: "sky-flyout-iterator", inputs: ["nextButtonDisabled", "previousButtonDisabled"], outputs: ["previousButtonClick", "nextButtonClick"] }], directives: [{ type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i8.λ2, selector: "[skyThemeClass]", inputs: ["class", "skyThemeClass"] }, { type: i9.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { type: i8.λ3, selector: "[skyThemeIf]", inputs: ["skyThemeIf"] }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i10.λ1, selector: "[skyHref]", inputs: ["skyHref", "skyHrefElse"] }, { type: i11.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }], pipes: { "skyLibResources": i2.SkyLibResourcesPipe }, animations: [
|
|
437
|
+
trigger('flyoutState', [
|
|
438
|
+
state(FLYOUT_OPEN_STATE, style({ transform: 'initial' })),
|
|
439
|
+
state(FLYOUT_CLOSED_STATE, style({ transform: 'translateX(100%)' })),
|
|
440
|
+
transition('void => *', [
|
|
441
|
+
style({ transform: 'translateX(100%)' }),
|
|
442
|
+
animate(250),
|
|
443
|
+
]),
|
|
444
|
+
transition(`* <=> *`, animate('250ms ease-in')),
|
|
445
|
+
]),
|
|
446
|
+
], changeDetection: i0.ChangeDetectionStrategy.Default });
|
|
447
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: SkyFlyoutComponent, decorators: [{
|
|
448
|
+
type: Component,
|
|
449
|
+
args: [{ selector: 'sky-flyout', providers: [
|
|
450
|
+
SkyFlyoutAdapterService,
|
|
451
|
+
SkyFlyoutMediaQueryService,
|
|
452
|
+
{ provide: SkyMediaQueryService, useExisting: SkyFlyoutMediaQueryService },
|
|
453
|
+
], animations: [
|
|
454
|
+
trigger('flyoutState', [
|
|
455
|
+
state(FLYOUT_OPEN_STATE, style({ transform: 'initial' })),
|
|
456
|
+
state(FLYOUT_CLOSED_STATE, style({ transform: 'translateX(100%)' })),
|
|
457
|
+
transition('void => *', [
|
|
458
|
+
style({ transform: 'translateX(100%)' }),
|
|
459
|
+
animate(250),
|
|
460
|
+
]),
|
|
461
|
+
transition(`* <=> *`, animate('250ms ease-in')),
|
|
462
|
+
]),
|
|
463
|
+
], changeDetection: ChangeDetectionStrategy.Default, template: "<div\n class=\"sky-flyout\"\n tabindex=\"-1\"\n [attr.role]=\"config?.ariaRole ? config.ariaRole : 'dialog'\"\n [attr.aria-describedby]=\"config?.ariaDescribedBy\"\n [attr.aria-label]=\"config?.ariaLabel\"\n [attr.aria-labelledby]=\"config?.ariaLabelledBy\"\n [attr.aria-modal]=\"\n config?.ariaRole === 'dialog' || !config?.ariaRole ? true : false\n \"\n [attr.hidden]=\"!instanceReady ? true : undefined\"\n [id]=\"flyoutId\"\n [ngClass]=\"{\n 'sky-flyout-hidden': !isOpen && !isOpening,\n 'sky-flyout-fullscreen': isFullscreen\n }\"\n [skyThemeClass]=\"{\n 'sky-shadow': 'default',\n 'sky-elevation-8': 'modern'\n }\"\n (@flyoutState.done)=\"animationDone($event)\"\n [@flyoutState]=\"getAnimationState()\"\n [style.width.px]=\"flyoutWidth\"\n #flyoutRef\n [cdkTrapFocus]=\"enableTrapFocus\"\n [cdkTrapFocusAutoCapture]=\"enableTrapFocusAutoCapture\"\n>\n <div\n class=\"sky-flyout-header\"\n [skyThemeClass]=\"{\n 'sky-padding-squish-large': 'default'\n }\"\n #flyoutHeader\n >\n <div class=\"sky-flyout-header-content\">\n <button\n *skyThemeIf=\"'modern'\"\n class=\"sky-btn sky-btn-icon-borderless sky-margin-inline-sm sky-flyout-header-grab-handle\"\n [attr.aria-label]=\"'skyux_flyout_resize_handle' | skyLibResources\"\n (keydown)=\"onHeaderGrabHandleKeyDown($event)\"\n (mousedown)=\"onHeaderGrabHandleMouseDown($event)\"\n >\n <sky-icon icon=\"tile-drag\" iconType=\"skyux\" size=\"lg\"> </sky-icon>\n </button>\n\n <sky-flyout-iterator\n *ngIf=\"config.showIterator\"\n [nextButtonDisabled]=\"config.iteratorNextButtonDisabled\"\n [previousButtonDisabled]=\"config.iteratorPreviousButtonDisabled\"\n (nextButtonClick)=\"onIteratorNextButtonClick()\"\n (previousButtonClick)=\"onIteratorPreviousButtonClick()\"\n >\n </sky-flyout-iterator>\n </div>\n <div class=\"sky-flyout-header-buttons\">\n <ng-container *ngTemplateOutlet=\"permalinkTemplate\"> </ng-container>\n <ng-container *ngTemplateOutlet=\"primaryActionTemplate\"> </ng-container>\n <button\n class=\"sky-btn sky-flyout-btn-close sky-label-icon-theme-default\"\n type=\"button\"\n [attr.aria-label]=\"'skyux_flyout_close' | skyLibResources\"\n [skyThemeClass]=\"{\n 'sky-btn-default': 'default',\n 'sky-btn-icon-borderless': 'modern'\n }\"\n (click)=\"close()\"\n >\n <sky-icon *skyThemeIf=\"'default'\" icon=\"close\"> </sky-icon>\n <sky-icon\n *skyThemeIf=\"'modern'\"\n icon=\"close\"\n iconType=\"skyux\"\n size=\"lg\"\n >\n </sky-icon>\n </button>\n </div>\n </div>\n <div class=\"sky-flyout-content\">\n <div #target></div>\n </div>\n <div\n class=\"sky-flyout-resize-handle\"\n role=\"separator\"\n tabindex=\"0\"\n type=\"range\"\n [attr.aria-controls]=\"flyoutId\"\n [attr.aria-label]=\"'skyux_flyout_resize_handle' | skyLibResources\"\n [attr.aria-valuemax]=\"config.maxWidth\"\n [attr.aria-valuemin]=\"config.minWidth\"\n [attr.aria-valuenow]=\"flyoutWidth\"\n (keydown)=\"onResizeHandleKeyDown($event)\"\n (mousedown)=\"onResizeHandleMouseDown($event)\"\n ></div>\n</div>\n\n<ng-template #permalinkTemplate>\n <ng-template [ngIf]=\"permalink\">\n <ng-template [ngIf]=\"permalink.url\">\n <a\n class=\"sky-btn sky-flyout-btn-permalink sky-margin-inline-default\"\n [skyHref]=\"permalink.url\"\n [skyThemeClass]=\"{\n 'sky-btn-default': 'default',\n 'sky-btn-borderless': 'modern'\n }\"\n (click)=\"close()\"\n >\n {{ permalinkLabel }}\n </a>\n </ng-template>\n <ng-template [ngIf]=\"permalink.route\">\n <a\n class=\"sky-btn sky-flyout-btn-permalink sky-margin-inline-default\"\n [routerLink]=\"permalink.route.commands\"\n [fragment]=\"permalink.route.extras?.fragment\"\n [skyThemeClass]=\"{\n 'sky-btn-default': 'default',\n 'sky-btn-borderless': 'modern'\n }\"\n [queryParams]=\"permalink.route.extras?.queryParams\"\n [queryParamsHandling]=\"permalink.route.extras?.queryParamsHandling\"\n [state]=\"permalink.route.extras?.state\"\n (click)=\"close()\"\n >\n {{ permalinkLabel }}\n </a>\n </ng-template>\n </ng-template>\n</ng-template>\n\n<ng-template #primaryActionTemplate>\n <ng-template [ngIf]=\"primaryAction && primaryAction.callback\">\n <button\n type=\"button\"\n class=\"sky-btn sky-btn-default sky-flyout-btn-primary-action sky-margin-inline-default\"\n (click)=\"invokePrimaryAction()\"\n >\n {{ primaryActionLabel }}\n </button>\n </ng-template>\n</ng-template>\n", styles: [".sky-flyout{position:fixed;right:0;top:0;bottom:0;height:100%;background-color:#fff;border-left:6px solid #0974a1;z-index:1001}.sky-flyout:focus{outline:none}.sky-flyout.sky-flyout-fullscreen{min-width:100%;max-width:100%}.sky-flyout.sky-flyout-fullscreen .sky-flyout-resize-handle{cursor:initial}.sky-flyout.sky-flyout-hidden{visibility:hidden}.sky-flyout .sky-flyout-input-aria-only{width:0;height:0;padding:0;opacity:0;position:absolute;margin:-1px;border:0;overflow:hidden;clip:rect(0 0 0 0);outline:none}.sky-flyout-resize-handle{-webkit-appearance:none;-moz-appearance:none;height:100%;width:14px;position:absolute;left:-10px;cursor:ew-resize;padding:0;border:0;background:transparent;display:block;top:0;bottom:0;direction:rtl}.sky-flyout-resize-handle::-moz-range-thumb,.sky-flyout-resize-handle::-moz-range-track{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-flyout-resize-handle::-ms-thumb,.sky-flyout-resize-handle::-ms-track{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-flyout-resize-handle::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-flyout-header{border-bottom:1px solid #cdcfd2;width:100%;background:#eeeeef;height:50px;display:flex;align-items:flex-start}.sky-flyout-header-content{flex-grow:1}.sky-flyout-btn-permalink:hover{text-decoration:none}.sky-flyout-help-shim{padding-right:8px}@media (min-width: 768px){.sky-flyout-help-shim{padding-right:50px}}.sky-flyout-content{overflow-y:auto;height:calc(100% - 50px)}:host-context(.sky-theme-modern) .sky-flyout{border-left:0}:host-context(.sky-theme-modern) .sky-flyout-header{border-bottom:none;background:#fff;padding:15px 10px}:host-context(.sky-theme-modern) .sky-flyout-header-grab-handle{cursor:move;cursor:-moz-grab}.sky-theme-modern .sky-flyout{border-left:0}.sky-theme-modern .sky-flyout-header{border-bottom:none;background:#fff;padding:15px 10px}.sky-theme-modern .sky-flyout-header-grab-handle{cursor:move;cursor:-moz-grab}:host-context(.sky-theme-modern.sky-theme-mode-dark) .sky-flyout{background:#000}:host-context(.sky-theme-modern.sky-theme-mode-dark) .sky-flyout-header{background:#000}.sky-theme-modern.sky-theme-mode-dark .sky-flyout,.sky-theme-modern.sky-theme-mode-dark .sky-flyout-header{background:#000}\n"] }]
|
|
464
|
+
}], ctorParameters: function () { return [{ type: i1.SkyFlyoutAdapterService }, { type: i0.ChangeDetectorRef }, { type: i0.Injector }, { type: i0.ComponentFactoryResolver }, { type: i2.SkyLibResourcesService }, { type: i3.SkyFlyoutMediaQueryService }, { type: i0.ElementRef }, { type: i4.SkyUIConfigService }, { type: i0.NgZone }]; }, propDecorators: { flyoutRef: [{
|
|
465
|
+
type: ViewChild,
|
|
466
|
+
args: ['flyoutRef', {
|
|
467
|
+
read: ElementRef,
|
|
468
|
+
static: true,
|
|
469
|
+
}]
|
|
470
|
+
}], target: [{
|
|
471
|
+
type: ViewChild,
|
|
472
|
+
args: ['target', {
|
|
473
|
+
read: ViewContainerRef,
|
|
474
|
+
static: true,
|
|
475
|
+
}]
|
|
476
|
+
}], flyoutHeader: [{
|
|
477
|
+
type: ViewChild,
|
|
478
|
+
args: ['flyoutHeader', {
|
|
479
|
+
read: ElementRef,
|
|
480
|
+
static: true,
|
|
481
|
+
}]
|
|
482
|
+
}], onWindowResize: [{
|
|
483
|
+
type: HostListener,
|
|
484
|
+
args: ['window:resize', ['$event']]
|
|
485
|
+
}] } });
|
|
486
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmx5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9mbHlvdXQvc3JjL2xpYi9tb2R1bGVzL2ZseW91dC9mbHlvdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2ZseW91dC9zcmMvbGliL21vZHVsZXMvZmx5b3V0L2ZseW91dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsT0FBTyxFQUNQLEtBQUssRUFDTCxLQUFLLEVBQ0wsVUFBVSxFQUNWLE9BQU8sR0FDUixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCx3QkFBd0IsRUFDeEIsVUFBVSxFQUNWLFlBQVksRUFDWixRQUFRLEVBQ1IsTUFBTSxFQUlOLFNBQVMsRUFDVCxnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixvQkFBb0IsRUFDcEIsa0JBQWtCLEdBQ25CLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVyRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU1RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUxRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxx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QiwwQkFBMEI7d0JBQzFCLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFdBQVcsRUFBRSwwQkFBMEIsRUFBRTtxQkFDM0UsY0FDVzt3QkFDVixPQUFPLENBQUMsYUFBYSxFQUFFOzRCQUNyQixLQUFLLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7NEJBQ3pELEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDOzRCQUNwRSxVQUFVLENBQUMsV0FBVyxFQUFFO2dDQUN0QixLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQztnQ0FDeEMsT0FBTyxDQUFDLEdBQUcsQ0FBQzs2QkFDYixDQUFDOzRCQUNGLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO3lCQUNoRCxDQUFDO3FCQUNILG1CQUVnQix1QkFBdUIsQ0FBQyxPQUFPO3lXQXdFekMsU0FBUztzQkFKZixTQUFTO3VCQUFDLFdBQVcsRUFBRTt3QkFDdEIsSUFBSSxFQUFFLFVBQVU7d0JBQ2hCLE1BQU0sRUFBRSxJQUFJO3FCQUNiO2dCQU9PLE1BQU07c0JBSmIsU0FBUzt1QkFBQyxRQUFRLEVBQUU7d0JBQ25CLElBQUksRUFBRSxnQkFBZ0I7d0JBQ3RCLE1BQU0sRUFBRSxJQUFJO3FCQUNiO2dCQU9PLFlBQVk7c0JBSm5CLFNBQVM7dUJBQUMsY0FBYyxFQUFFO3dCQUN6QixJQUFJLEVBQUUsVUFBVTt3QkFDaEIsTUFBTSxFQUFFLElBQUk7cUJBQ2I7Z0JBc0NNLGNBQWM7c0JBRHBCLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQW5pbWF0aW9uRXZlbnQsXG4gIGFuaW1hdGUsXG4gIHN0YXRlLFxuICBzdHlsZSxcbiAgdHJhbnNpdGlvbixcbiAgdHJpZ2dlcixcbn0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdG9yLFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBUeXBlLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgU2t5TWVkaWFCcmVha3BvaW50cyxcbiAgU2t5TWVkaWFRdWVyeVNlcnZpY2UsXG4gIFNreVVJQ29uZmlnU2VydmljZSxcbn0gZnJvbSAnQHNreXV4L2NvcmUnO1xuaW1wb3J0IHsgU2t5TGliUmVzb3VyY2VzU2VydmljZSB9IGZyb20gJ0Bza3l1eC9pMThuJztcblxuaW1wb3J0IHsgU3ViamVjdCwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlLCB0YWtlVW50aWwsIHRha2VXaGlsZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgU2t5Rmx5b3V0QWRhcHRlclNlcnZpY2UgfSBmcm9tICcuL2ZseW91dC1hZGFwdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2t5Rmx5b3V0SW5zdGFuY2UgfSBmcm9tICcuL2ZseW91dC1pbnN0YW5jZSc7XG5pbXBvcnQgeyBTa3lGbHlvdXRNZWRpYVF1ZXJ5U2VydmljZSB9IGZyb20gJy4vZmx5b3V0LW1lZGlhLXF1ZXJ5LnNlcnZpY2UnO1xuaW1wb3J0IHsgU2t5Rmx5b3V0QWN0aW9uIH0gZnJvbSAnLi90eXBlcy9mbHlvdXQtYWN0aW9uJztcbmltcG9ydCB7IFNreUZseW91dEJlZm9yZUNsb3NlSGFuZGxlciB9IGZyb20gJy4vdHlwZXMvZmx5b3V0LWJlZm9yZS1jbG9zZS1oYW5kbGVyJztcbmltcG9ydCB7IFNreUZseW91dENvbmZpZyB9IGZyb20gJy4vdHlwZXMvZmx5b3V0LWNvbmZpZyc7XG5pbXBvcnQgeyBTa3lGbHlvdXRNZXNzYWdlIH0gZnJvbSAnLi90eXBlcy9mbHlvdXQtbWVzc2FnZSc7XG5pbXBvcnQgeyBTa3lGbHlvdXRNZXNzYWdlVHlwZSB9IGZyb20gJy4vdHlwZXMvZmx5b3V0LW1lc3NhZ2UtdHlwZSc7XG5pbXBvcnQgeyBTa3lGbHlvdXRQZXJtYWxpbmsgfSBmcm9tICcuL3R5cGVzL2ZseW91dC1wZXJtYWxpbmsnO1xuXG5jb25zdCBGTFlPVVRfT1BFTl9TVEFURSA9ICdmbHlvdXRPcGVuJztcbmNvbnN0IEZMWU9VVF9DTE9TRURfU1RBVEUgPSAnZmx5b3V0Q2xvc2VkJztcblxubGV0IG5leHRJZCA9IDA7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS1mbHlvdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZmx5b3V0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmx5b3V0LmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIFNreUZseW91dEFkYXB0ZXJTZXJ2aWNlLFxuICAgIFNreUZseW91dE1lZGlhUXVlcnlTZXJ2aWNlLFxuICAgIHsgcHJvdmlkZTogU2t5TWVkaWFRdWVyeVNlcnZpY2UsIHVzZUV4aXN0aW5nOiBTa3lGbHlvdXRNZWRpYVF1ZXJ5U2VydmljZSB9LFxuICBdLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcignZmx5b3V0U3RhdGUnLCBbXG4gICAgICBzdGF0ZShGTFlPVVRfT1BFTl9TVEFURSwgc3R5bGUoeyB0cmFuc2Zvcm06ICdpbml0aWFsJyB9KSksXG4gICAgICBzdGF0ZShGTFlPVVRfQ0xPU0VEX1NUQVRFLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoMTAwJSknIH0pKSxcbiAgICAgIHRyYW5zaXRpb24oJ3ZvaWQgPT4gKicsIFtcbiAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKDEwMCUpJyB9KSxcbiAgICAgICAgYW5pbWF0ZSgyNTApLFxuICAgICAgXSksXG4gICAgICB0cmFuc2l0aW9uKGAqIDw9PiAqYCwgYW5pbWF0ZSgnMjUwbXMgZWFzZS1pbicpKSxcbiAgICBdKSxcbiAgXSxcbiAgLy8gQWxsb3cgYXV0b21hdGljIGNoYW5nZSBkZXRlY3Rpb24gZm9yIGNoaWxkIGNvbXBvbmVudHMuXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuRGVmYXVsdCxcbn0pXG5leHBvcnQgY2xhc3MgU2t5Rmx5b3V0Q29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQge1xuICBwdWJsaWMgY29uZmlnOiBTa3lGbHlvdXRDb25maWc7XG4gIHB1YmxpYyBlbmFibGVUcmFwRm9jdXM6IGJvb2xlYW47XG4gIHB1YmxpYyBlbmFibGVUcmFwRm9jdXNBdXRvQ2FwdHVyZTogYm9vbGVhbjtcbiAgcHVibGljIGZseW91dElkID0gYHNreS1mbHlvdXQtJHsrK25leHRJZH1gO1xuICBwdWJsaWMgZmx5b3V0U3RhdGUgPSBGTFlPVVRfQ0xPU0VEX1NUQVRFO1xuICBwdWJsaWMgaXNPcGVuID0gZmFsc2U7XG4gIHB1YmxpYyBpc09wZW5pbmcgPSBmYWxzZTtcblxuICBwdWJsaWMgZmx5b3V0V2lkdGggPSAwO1xuICBwdWJsaWMgaW5zdGFuY2VSZWFkeSA9IGZhbHNlO1xuICBwdWJsaWMgaXNEcmFnZ2luZyA9IGZhbHNlO1xuICBwdWJsaWMgaXNGdWxsc2NyZWVuID0gZmFsc2U7XG4gIHB1YmxpYyByZXNpemVLZXlDb250cm9sQWN0aXZlID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSB4Q29vcmQgPSAwO1xuICBwcml2YXRlIHdpbmRvd0J1ZmZlclNpemUgPSAyMDtcblxuICBwdWJsaWMgZ2V0IG1lc3NhZ2VTdHJlYW0oKTogU3ViamVjdDxTa3lGbHlvdXRNZXNzYWdlPiB7XG4gICAgcmV0dXJuIHRoaXMuX21lc3NhZ2VTdHJlYW07XG4gIH1cblxuICBwdWJsaWMgZ2V0IHBlcm1hbGluaygpOiBTa3lGbHlvdXRQZXJtYWxpbmsge1xuICAgIGNvbnN0IHBlcm1hbGluayA9IHRoaXMuY29uZmlnLnBlcm1hbGluaztcbiAgICBpZiAocGVybWFsaW5rKSB7XG4gICAgICByZXR1cm4gcGVybWFsaW5rO1xuICAgIH1cblxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcGVybWFsaW5rTGFiZWwoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5wZXJtYWxpbmsubGFiZWwpIHtcbiAgICAgIHJldHVybiB0aGlzLnBlcm1hbGluay5sYWJlbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmcoJ3NreXV4X2ZseW91dF9wZXJtYWxpbmtfYnV0dG9uJyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHByaW1hcnlBY3Rpb24oKTogU2t5Rmx5b3V0QWN0aW9uIHtcbiAgICBjb25zdCBwcmltYXJ5QWN0aW9uID0gdGhpcy5jb25maWcucHJpbWFyeUFjdGlvbjtcbiAgICBpZiAocHJpbWFyeUFjdGlvbikge1xuICAgICAgcmV0dXJuIHByaW1hcnlBY3Rpb247XG4gICAgfVxuXG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcHVibGljIGdldCBwcmltYXJ5QWN0aW9uTGFiZWwoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5jb25maWcucHJpbWFyeUFjdGlvbiAmJiB0aGlzLmNvbmZpZy5wcmltYXJ5QWN0aW9uLmxhYmVsKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb25maWcucHJpbWFyeUFjdGlvbi5sYWJlbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmcoJ3NreXV4X2ZseW91dF9wcmltYXJ5X2FjdGlvbl9idXR0b24nKTtcbiAgfVxuXG4gIHB1YmxpYyB0aGVtZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgd2lkdGhTdGVwID0gMTA7XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgQFZpZXdDaGlsZCgnZmx5b3V0UmVmJywge1xuICAgIHJlYWQ6IEVsZW1lbnRSZWYsXG4gICAgc3RhdGljOiB0cnVlLFxuICB9KVxuICBwdWJsaWMgZmx5b3V0UmVmOiBFbGVtZW50UmVmO1xuXG4gIEBWaWV3Q2hpbGQoJ3RhcmdldCcsIHtcbiAgICByZWFkOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHN0YXRpYzogdHJ1ZSxcbiAgfSlcbiAgcHJpdmF0ZSB0YXJnZXQ6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgQFZpZXdDaGlsZCgnZmx5b3V0SGVhZGVyJywge1xuICAgIHJlYWQ6IEVsZW1lbnRSZWYsXG4gICAgc3RhdGljOiB0cnVlLFxuICB9KVxuICBwcml2YXRlIGZseW91dEhlYWRlcjogRWxlbWVudFJlZjtcblxuICBwcml2YXRlIGZseW91dEluc3RhbmNlOiBTa3lGbHlvdXRJbnN0YW5jZTxhbnk+O1xuXG4gIHByaXZhdGUgbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSBfbWVzc2FnZVN0cmVhbSA9IG5ldyBTdWJqZWN0PFNreUZseW91dE1lc3NhZ2U+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhZGFwdGVyOiBTa3lGbHlvdXRBZGFwdGVyU2VydmljZSxcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIHJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgcHJpdmF0ZSByZXNvdXJjZXNTZXJ2aWNlOiBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmx5b3V0TWVkaWFRdWVyeVNlcnZpY2U6IFNreUZseW91dE1lZGlhUXVlcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHVpQ29uZmlnU2VydmljZTogU2t5VUlDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX25nWm9uZTogTmdab25lXG4gICkge1xuICAgIC8vIEFsbCBjb21tYW5kcyBmbG93IHRocm91Z2ggdGhlIG1lc3NhZ2Ugc3RyZWFtLlxuICAgIHRoaXMubWVzc2FnZVN0cmVhbVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChtZXNzYWdlOiBTa3lGbHlvdXRNZXNzYWdlKSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhtZXNzYWdlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuYWRhcHRlci5hZGp1c3RIZWFkZXJGb3JIZWxwKHRoaXMuZmx5b3V0SGVhZGVyKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXG4gIHB1YmxpYyBvbldpbmRvd1Jlc2l6ZShldmVudDogYW55KTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5mbHlvdXRNZWRpYVF1ZXJ5U2VydmljZS5pc1dpZHRoV2l0aGluQnJlYWtwaW9udChcbiAgICAgICAgZXZlbnQudGFyZ2V0LmlubmVyV2lkdGgsXG4gICAgICAgIFNreU1lZGlhQnJlYWtwb2ludHMueHNcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHRoaXMudXBkYXRlQnJlYWtwb2ludEFuZFJlc3BvbnNpdmVDbGFzcyhldmVudC50YXJnZXQuaW5uZXJXaWR0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXBkYXRlQnJlYWtwb2ludEFuZFJlc3BvbnNpdmVDbGFzcyh0aGlzLmZseW91dFdpZHRoKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldEZ1bGxzY3JlZW4oKTtcblxuICAgIGlmIChldmVudC50YXJnZXQuaW5uZXJXaWR0aCAtIHRoaXMuZmx5b3V0V2lkdGggPCB0aGlzLndpbmRvd0J1ZmZlclNpemUpIHtcbiAgICAgIHRoaXMuZmx5b3V0V2lkdGggPSBldmVudC50YXJnZXQuaW5uZXJXaWR0aCAtIHRoaXMud2luZG93QnVmZmVyU2l6ZTtcbiAgICAgIHRoaXMueENvb3JkID0gdGhpcy53aW5kb3dCdWZmZXJTaXplO1xuICAgICAgdGhpcy5zZXRVc2VyRGF0YSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhdHRhY2g8VD4oXG4gICAgY29tcG9uZW50OiBUeXBlPFQ+LFxuICAgIGNvbmZpZzogU2t5Rmx5b3V0Q29uZmlnXG4gICk6IFNreUZseW91dEluc3RhbmNlPFQ+IHtcbiAgICB0aGlzLmNsZWFuVGVtcGxhdGUoKTtcblxuICAgIC8vIEVtaXQgdGhlIGNsb3NlZCBldmVudCBvbiBhbnkgcHJldmlvdXNseSBvcGVuZWQgZmx5b3V0IGluc3RhbmNlXG4gICAgaWYgKHRoaXMuZmx5b3V0SW5zdGFuY2UpIHtcbiAgICAgIHRoaXMubm90aWZ5Q2xvc2VkKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb25maWcgPSBPYmplY3QuYXNzaWduKHsgcHJvdmlkZXJzOiBbXSB9LCBjb25maWcpO1xuICAgIHRoaXMuY29uZmlnLmRlZmF1bHRXaWR0aCA9XG4gICAgICB0aGlzLmNvbmZpZy5kZWZhdWx0V2lkdGggfHwgd2luZG93LmlubmVyV2lkdGggLyAyO1xuICAgIHRoaXMuY29uZmlnLm1pbldpZHRoID0gdGhpcy5jb25maWcubWluV2lkdGggfHwgMzIwO1xuICAgIHRoaXMuY29uZmlnLm1heFdpZHRoID0gdGhpcy5jb25maWcubWF4V2lkdGggfHwgdGhpcy5jb25maWcuZGVmYXVsdFdpZHRoO1xuXG4gICAgdGhpcy5jb25maWcuc2hvd0l0ZXJhdG9yID0gdGhpcy5jb25maWcuc2hvd0l0ZXJhdG9yIHx8IGZhbHNlO1xuICAgIHRoaXMuY29uZmlnLml0ZXJhdG9yTmV4dEJ1dHRvbkRpc2FibGVkID1cbiAgICAgIHRoaXMuY29uZmlnLml0ZXJhdG9yTmV4dEJ1dHRvbkRpc2FibGVkIHx8IGZhbHNlO1xuICAgIHRoaXMuY29uZmlnLml0ZXJhdG9yUHJldmlvdXNCdXR0b25EaXNhYmxlZCA9XG4gICAgICB0aGlzLmNvbmZpZy5pdGVyYXRvclByZXZpb3VzQnV0dG9uRGlzYWJsZWQgfHwgZmFsc2U7XG5cbiAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5yZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShjb21wb25lbnQpO1xuXG4gICAgY29uc3QgaW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgcGFyZW50OiB0aGlzLmluamVjdG9yLFxuICAgICAgcHJvdmlkZXJzOiB0aGlzLmNvbmZpZy5wcm92aWRlcnMsXG4gICAgfSk7XG5cbiAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLnRhcmdldC5jcmVhdGVDb21wb25lbnQoXG4gICAgICBmYWN0b3J5LFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgaW5qZWN0b3JcbiAgICApO1xuXG4gICAgdGhpcy5mbHlvdXRJbnN0YW5jZSA9IHRoaXMuY3JlYXRlRmx5b3V0SW5zdGFuY2U8VD4oY29tcG9uZW50UmVmLmluc3RhbmNlKTtcblxuICAgIC8vIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgd2UgZG8gbm90IHJlbmRlciB0aGUgZmx5b3V0IHVudGlsIHdlIGhhdmUgYXR0YWNoZWQgdGhlIGNvbXBvbmVudC5cbiAgICAvLyBUaGlzIGFsbG93cyB0aGUgYXJpYS1sYWJlbGxlZGJ5IHRvIGZ1bmN0aW9uIGNvcnJlY3RseS5cbiAgICB0aGlzLmluc3RhbmNlUmVhZHkgPSB0cnVlO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG5cbiAgICAvLyBPcGVuIHRoZSBmbHlvdXQgaW1tZWRpYXRlbHkuXG4gICAgdGhpcy5tZXNzYWdlU3RyZWFtLm5leHQoe1xuICAgICAgdHlwZTogU2t5Rmx5b3V0TWVzc2FnZVR5cGUuT3BlbixcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmNvbmZpZy5zZXR0aW5nc0tleSkge1xuICAgICAgdGhpcy51aUNvbmZpZ1NlcnZpY2VcbiAgICAgICAgLmdldENvbmZpZyh0aGlzLmNvbmZpZy5zZXR0aW5nc0tleSlcbiAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgLnN1YnNjcmliZSgodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5mbHlvdXRXaWR0aCkge1xuICAgICAgICAgICAgdGhpcy5mbHlvdXRXaWR0aCA9IHZhbHVlLmZseW91dFdpZHRoO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBCYWQgZGF0YSwgb3IgY29uZmlnIGlzIHRoZSBkZWZhdWx0IGNvbmZpZy5cbiAgICAgICAgICAgIHRoaXMuZmx5b3V0V2lkdGggPSB0aGlzLmNvbmZpZy5kZWZhdWx0V2lkdGg7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY2hlY2tJbml0aWFsU2l6ZSgpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mbHlvdXRXaWR0aCA9IHRoaXMuY29uZmlnLmRlZmF1bHRXaWR0aDtcbiAgICAgIHRoaXMuY2hlY2tJbml0aWFsU2l6ZSgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmZseW91dEluc3RhbmNlO1xuICB9XG5cbiAgcHVibGljIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMubWVzc2FnZVN0cmVhbS5uZXh0KHtcbiAgICAgIHR5cGU6IFNreUZseW91dE1lc3NhZ2VUeXBlLkNsb3NlLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGludm9rZVByaW1hcnlBY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgdGhpcy5wcmltYXJ5QWN0aW9uLmNhbGxiYWNrKCk7XG5cbiAgICBpZiAodGhpcy5wcmltYXJ5QWN0aW9uLmNsb3NlQWZ0ZXJJbnZva2luZykge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBbmltYXRpb25TdGF0ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmluc3RhbmNlUmVhZHkgJiYgdGhpcy5pc09wZW5pbmdcbiAgICAgID8gRkxZT1VUX09QRU5fU1RBVEVcbiAgICAgIDogRkxZT1VUX0NMT1NFRF9TVEFURTtcbiAgfVxuXG4gIHB1YmxpYyBhbmltYXRpb25Eb25lKGV2ZW50OiBBbmltYXRpb25FdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC50b1N0YXRlID09PSBGTFlPVVRfT1BFTl9TVEFURSkge1xuICAgICAgdGhpcy5pc09wZW4gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChldmVudC50b1N0YXRlID09PSBGTFlPVVRfQ0xPU0VEX1NUQVRFKSB7XG4gICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5ub3RpZnlDbG9zZWQoKTtcbiAgICAgIHRoaXMuY2xlYW5UZW1wbGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbkhlYWRlckdyYWJIYW5kbGVNb3VzZURvd24oZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLm9uUmVzaXplSGFuZGxlTW91c2VEb3duKGV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBvbkhlYWRlckdyYWJIYW5kbGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5oYW5kbGVSZXNpemVLZXlEb3duKGV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBvblJlc2l6ZUhhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmhhbmRsZVJlc2l6ZUtleURvd24oZXZlbnQpO1xuICB9XG5cbiAgcHVibGljIG9uUmVzaXplSGFuZGxlTW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGlmICh0aGlzLmlzRnVsbHNjcmVlbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNEcmFnZ2luZyA9IHRydWU7XG4gICAgdGhpcy54Q29vcmQgPSBldmVudC5jbGllbnRYO1xuXG4gICAgdGhpcy5hZGFwdGVyLnRvZ2dsZUlmcmFtZVBvaW50ZXJFdmVudHMoZmFsc2UpO1xuXG4gICAgZnJvbUV2ZW50KGRvY3VtZW50LCAnbW91c2Vtb3ZlJylcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlV2hpbGUoKCkgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlzRHJhZ2dpbmc7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChtb3ZlRXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLm9uTW91c2VNb3ZlKG1vdmVFdmVudCk7XG4gICAgICB9KTtcblxuICAgIGZyb21FdmVudChkb2N1bWVudCwgJ21vdXNldXAnKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VXaGlsZSgoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaXNEcmFnZ2luZztcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKG1vdXNlVXBFdmVudDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMub25IYW5kbGVSZWxlYXNlKG1vdXNlVXBFdmVudCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvbk1vdXNlTW92ZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIC8qIFNhbml0eSBjaGVjayAqL1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghdGhpcy5pc0RyYWdnaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb2Zmc2V0WCA9IGV2ZW50LmNsaWVudFggLSB0aGlzLnhDb29yZDtcbiAgICBsZXQgd2lkdGggPSB0aGlzLmZseW91dFdpZHRoO1xuXG4gICAgd2lkdGggLT0gb2Zmc2V0WDtcblxuICAgIGlmICh3aWR0aCA8IHRoaXMuY29uZmlnLm1pbldpZHRoIHx8IHdpZHRoID4gdGhpcy5jb25maWcubWF4V2lkdGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAod2luZG93LmlubmVyV2lkdGggLSB3aWR0aCA8IHRoaXMud2luZG93QnVmZmVyU2l6ZSkge1xuICAgICAgd2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aCAtIHRoaXMud2luZG93QnVmZmVyU2l6ZTtcbiAgICAgIHRoaXMueENvb3JkID0gdGhpcy53aW5kb3dCdWZmZXJTaXplO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnhDb29yZCA9IGV2ZW50LmNsaWVudFg7XG4gICAgfVxuXG4gICAgdGhpcy5mbHlvdXRXaWR0aCA9IHdpZHRoO1xuXG4gICAgdGhpcy51cGRhdGVCcmVha3BvaW50QW5kUmVzcG9uc2l2ZUNsYXNzKHRoaXMuZmx5b3V0V2lkdGgpO1xuXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkhhbmRsZVJlbGVhc2UoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBmcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFkYXB0ZXIudG9nZ2xlSWZyYW1lUG9pbnRlckV2ZW50cyh0cnVlKTtcbiAgICAgICAgdGhpcy5zZXRVc2VyRGF0YSgpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25JdGVyYXRvclByZXZpb3VzQnV0dG9uQ2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5mbHlvdXRJbnN0YW5jZS5pdGVyYXRvclByZXZpb3VzQnV0dG9uQ2xpY2suZW1pdCgpO1xuICB9XG5cbiAgcHVibGljIG9uSXRlcmF0b3JOZXh0QnV0dG9uQ2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5mbHlvdXRJbnN0YW5jZS5pdGVyYXRvck5leHRCdXR0b25DbGljay5lbWl0KCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZseW91dEluc3RhbmNlPFQ+KGNvbXBvbmVudDogVCk6IFNreUZseW91dEluc3RhbmNlPFQ+IHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBTa3lGbHlvdXRJbnN0YW5jZTxUPigpO1xuXG4gICAgaW5zdGFuY2UuY29tcG9uZW50SW5zdGFuY2UgPSBjb21wb25lbnQ7XG4gICAgaW5zdGFuY2UuaG9zdENvbnRyb2xsZXJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgobWVzc2FnZTogU2t5Rmx5b3V0TWVzc2FnZSkgPT4ge1xuICAgICAgICB0aGlzLm1lc3NhZ2VTdHJlYW0ubmV4dChtZXNzYWdlKTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVJbmNvbWluZ01lc3NhZ2VzKG1lc3NhZ2U6IFNreUZseW91dE1lc3NhZ2UpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKG1lc3NhZ2UudHlwZSkge1xuICAgICAgY2FzZSBTa3lGbHlvdXRNZXNzYWdlVHlwZS5PcGVuOlxuICAgICAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmlzT3BlbmluZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbml0Rm9jdXNUcmFwKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFNreUZseW91dE1lc3NhZ2VUeXBlLkNsb3NlOlxuICAgICAgICBpZiAoXG4gICAgICAgICAgKHRoaXMuZmx5b3V0SW5zdGFuY2UuYmVmb3JlQ2xvc2UgYXMgU3ViamVjdDxhbnk+KS5vYnNlcnZlcnMubGVuZ3RoID09PVxuICAgICAgICAgICAgMCB8fFxuICAgICAgICAgIG1lc3NhZ2UuZGF0YT8uaWdub3JlQmVmb3JlQ2xvc2VcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5pc09wZW4gPSB0cnVlO1xuICAgICAgICAgIHRoaXMuaXNPcGVuaW5nID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgKHRoaXMuZmx5b3V0SW5zdGFuY2UuYmVmb3JlQ2xvc2UgYXMgU3ViamVjdDxhbnk+KS5uZXh0KFxuICAgICAgICAgICAgbmV3IFNreUZseW91dEJlZm9yZUNsb3NlSGFuZGxlcigoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdGhpcy5pc09wZW5pbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBTa3lGbHlvdXRNZXNzYWdlVHlwZS5FbmFibGVJdGVyYXRvck5leHRCdXR0b246XG4gICAgICAgIHRoaXMuY29uZmlnLml0ZXJhdG9yTmV4dEJ1dHRvbkRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFNreUZseW91dE1lc3NhZ2VUeXBlLkVuYWJsZUl0ZXJhdG9yUHJldmlvdXNCdXR0b246XG4gICAgICAgIHRoaXMuY29uZmlnLml0ZXJhdG9yUHJldmlvdXNCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBTa3lGbHlvdXRNZXNzYWdlVHlwZS5EaXNhYmxlSXRlcmF0b3JOZXh0QnV0dG9uOlxuICAgICAgICB0aGlzLmNvbmZpZy5pdGVyYXRvck5leHRCdXR0b25EaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFNreUZseW91dE1lc3NhZ2VUeXBlLkRpc2FibGVJdGVyYXRvclByZXZpb3VzQnV0dG9uOlxuICAgICAgICB0aGlzLmNvbmZpZy5pdGVyYXRvclByZXZpb3VzQnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBub3RpZnlDbG9zZWQoKTogdm9pZCB7XG4gICAgdGhpcy5mbHlvdXRJbnN0YW5jZS5jbG9zZWQuZW1pdCgpO1xuICAgIHRoaXMuZmx5b3V0SW5zdGFuY2UuY2xvc2VkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFuVGVtcGxhdGUoKTogdm9pZCB7XG4gICAgdGhpcy50YXJnZXQuY2xlYXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQnJlYWtwb2ludEFuZFJlc3BvbnNpdmVDbGFzcyh3aWR0aDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5mbHlvdXRNZWRpYVF1ZXJ5U2VydmljZS5zZXRCcmVha3BvaW50Rm9yV2lkdGgod2lkdGgpO1xuXG4gICAgY29uc3QgbmV3QnJlYWtwaW9udCA9IHRoaXMuZmx5b3V0TWVkaWFRdWVyeVNlcnZpY2UuY3VycmVudDtcblxuICAgIHRoaXMuYWRhcHRlci5zZXRSZXNwb25zaXZlQ2xhc3ModGhpcy5lbGVtZW50UmVmLCBuZXdCcmVha3Bpb250KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0RnVsbHNjcmVlbigpOiB2b2lkIHtcbiAgICBpZiAod2luZG93LmlubmVyV2lkdGggLSB0aGlzLndpbmRvd0J1ZmZlclNpemUgPCB0aGlzLmNvbmZpZy5taW5XaWR0aCkge1xuICAgICAgdGhpcy5pc0Z1bGxzY3JlZW4gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzRnVsbHNjcmVlbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0VXNlckRhdGEoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29uZmlnLnNldHRpbmdzS2V5KSB7XG4gICAgICB0aGlzLnVpQ29uZmlnU2VydmljZVxuICAgICAgICAuc2V0Q29uZmlnKHRoaXMuY29uZmlnLnNldHRpbmdzS2V5LCB7XG4gICAgICAgICAgZmx5b3V0V2lkdGg6IHRoaXMuZmx5b3V0V2lkdGgsXG4gICAgICAgIH0pXG4gICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAgICAgICAgICgpID0+IHt9LFxuICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignQ291bGQgbm90IHNhdmUgZmx5b3V0IGRhdGEuJyk7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0luaXRpYWxTaXplKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZseW91dFdpZHRoIDwgdGhpcy5jb25maWcubWluV2lkdGgpIHtcbiAgICAgIHRoaXMuZmx5b3V0V2lkdGggPSB0aGlzLmNvbmZpZy5taW5XaWR0aDtcbiAgICAgIHRoaXMuc2V0VXNlckRhdGEoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZmx5b3V0V2lkdGggPiB0aGlzLmNvbmZpZy5tYXhXaWR0aCkge1xuICAgICAgdGhpcy5mbHlvdXRXaWR0aCA9IHRoaXMuY29uZmlnLm1heFdpZHRoO1xuICAgICAgdGhpcy5zZXRVc2VyRGF0YSgpO1xuICAgIH1cblxuICAgIC8vIEVuc3VyZSBmbHlvdXQgZG9lcyBub3QgbG9hZCBsYXJnZXIgdGhhbiB0aGUgd2luZG93IGFuZCBpdHMgYnVmZmVyXG4gICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIC0gdGhpcy5mbHlvdXRXaWR0aCA8IHRoaXMud2luZG93QnVmZmVyU2l6ZSkge1xuICAgICAgdGhpcy5mbHlvdXRXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoIC0gdGhpcy53aW5kb3dCdWZmZXJTaXplO1xuICAgICAgdGhpcy54Q29vcmQgPSB0aGlzLndpbmRvd0J1ZmZlclNpemU7XG4gICAgICB0aGlzLnNldFVzZXJEYXRhKCk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5mbHlvdXRNZWRpYVF1ZXJ5U2VydmljZS5pc1dpZHRoV2l0aGluQnJlYWtwaW9udChcbiAgICAgICAgd2luZG93LmlubmVyV2lkdGgsXG4gICAgICAgIFNreU1lZGlhQnJlYWtwb2ludHMueHNcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHRoaXMudXBkYXRlQnJlYWtwb2ludEFuZFJlc3BvbnNpdmVDbGFzcyh3aW5kb3cuaW5uZXJXaWR0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXBkYXRlQnJlYWtwb2ludEFuZFJlc3BvbnNpdmVDbGFzcyh0aGlzLmZseW91dFdpZHRoKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldEZ1bGxzY3JlZW4oKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3RyaW5nKGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBUT0RPOiBOZWVkIHRvIGltcGxlbWVudCB0aGUgYXN5bmMgYGdldFN0cmluZ2AgbWV0aG9kIGluIGEgYnJlYWtpbmcgY2hhbmdlLlxuICAgIHJldHVybiB0aGlzLnJlc291cmNlc1NlcnZpY2UuZ2V0U3RyaW5nRm9yTG9jYWxlKHsgbG9jYWxlOiAnZW4tVVMnIH0sIGtleSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVJlc2l6ZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChldmVudC5rZXkpIHtcbiAgICAgIGNvbnN0IGtleVByZXNzZWQgPSBldmVudC5rZXkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCdhcnJvdycsICcnKTtcbiAgICAgIHN3aXRjaCAoa2V5UHJlc3NlZCkge1xuICAgICAgICBjYXNlICdlbnRlcic6XG4gICAgICAgIGNhc2UgJyAnOlxuICAgICAgICAgIHRoaXMucmVzaXplS2V5Q29udHJvbEFjdGl2ZSA9ICF0aGlzLnJlc2l6ZUtleUNvbnRyb2xBY3RpdmU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3RhYic6XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICBpZiAodGhpcy5yZXNpemVLZXlDb250cm9sQWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZUtleUNvbnRyb2xBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICAgIGlmICh0aGlzLnJlc2l6ZUtleUNvbnRyb2xBY3RpdmUpIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICBpZiAodGhpcy5mbHlvdXRXaWR0aCA8IHRoaXMuY29uZmlnLm1heFdpZHRoKSB7XG4gICAgICAgICAgICAgIHRoaXMuZmx5b3V0V2lkdGggPSBNYXRoLm1pbihcbiAgICAgICAgICAgICAgICB0aGlzLmZseW91dFdpZHRoICsgdGhpcy53aWR0aFN0ZXAsXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcubWF4V2lkdGhcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICAgIGlmICh0aGlzLnJlc2l6ZUtleUNvbnRyb2xBY3RpdmUpIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICBpZiAodGhpcy5mbHlvdXRXaWR0aCA+IHRoaXMuY29uZmlnLm1pbldpZHRoKSB7XG4gICAgICAgICAgICAgIHRoaXMuZmx5b3V0V2lkdGggPSBNYXRoLm1heChcbiAgICAgICAgICAgICAgICB0aGlzLmZseW91dFdpZHRoIC0gdGhpcy53aWR0aFN0ZXAsXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcubWluV2lkdGhcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogRXhlY3V0ZXMgYSBmdW5jdGlvbiB3aGVuIHRoZSB6b25lIGlzIHN0YWJsZS4gKi9cbiAgcHJpdmF0ZSBfZXhlY3V0ZU9uU3RhYmxlKGZuOiAoKSA9PiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fbmdab25lLmlzU3RhYmxlKSB7XG4gICAgICBmbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoZm4pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdEZvY3VzVHJhcCgpOiB2b2lkIHtcbiAgICB0aGlzLmVuYWJsZVRyYXBGb2N1c0F1dG9DYXB0dXJlID0gZmFsc2U7XG4gICAgdGhpcy5lbmFibGVUcmFwRm9jdXMgPSBmYWxzZTtcbiAgICAvLyBXYWl0aW5nIGZvciB6b25lIHRvIGJlIHN0YWJsZSB3aWxsIGF2b2lkIEV4cHJlc3Npb25DaGFuZ2VBZnRlckNoZWNrZWRFcnJvci5cbiAgICB0aGlzLl9leGVjdXRlT25TdGFibGUoKCkgPT4ge1xuICAgICAgdGhpcy5lbmFibGVUcmFwRm9jdXNBdXRvQ2FwdHVyZSA9IHRydWU7XG4gICAgICB0aGlzLmVuYWJsZVRyYXBGb2N1cyA9IHRydWU7XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJza3ktZmx5b3V0XCJcbiAgdGFiaW5kZXg9XCItMVwiXG4gIFthdHRyLnJvbGVdPVwiY29uZmlnPy5hcmlhUm9sZSA/IGNvbmZpZy5hcmlhUm9sZSA6ICdkaWFsb2cnXCJcbiAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJjb25maWc/LmFyaWFEZXNjcmliZWRCeVwiXG4gIFthdHRyLmFyaWEtbGFiZWxdPVwiY29uZmlnPy5hcmlhTGFiZWxcIlxuICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiY29uZmlnPy5hcmlhTGFiZWxsZWRCeVwiXG4gIFthdHRyLmFyaWEtbW9kYWxdPVwiXG4gICAgY29uZmlnPy5hcmlhUm9sZSA9PT0gJ2RpYWxvZycgfHwgIWNvbmZpZz8uYXJpYVJvbGUgPyB0cnVlIDogZmFsc2VcbiAgXCJcbiAgW2F0dHIuaGlkZGVuXT1cIiFpbnN0YW5jZVJlYWR5ID8gdHJ1ZSA6IHVuZGVmaW5lZFwiXG4gIFtpZF09XCJmbHlvdXRJZFwiXG4gIFtuZ0NsYXNzXT1cIntcbiAgICAnc2t5LWZseW91dC1oaWRkZW4nOiAhaXNPcGVuICYmICFpc09wZW5pbmcsXG4gICAgJ3NreS1mbHlvdXQtZnVsbHNjcmVlbic6IGlzRnVsbHNjcmVlblxuICB9XCJcbiAgW3NreVRoZW1lQ2xhc3NdPVwie1xuICAgICdza3ktc2hhZG93JzogJ2RlZmF1bHQnLFxuICAgICdza3ktZWxldmF0aW9uLTgnOiAnbW9kZXJuJ1xuICB9XCJcbiAgKEBmbHlvdXRTdGF0ZS5kb25lKT1cImFuaW1hdGlvbkRvbmUoJGV2ZW50KVwiXG4gIFtAZmx5b3V0U3RhdGVdPVwiZ2V0QW5pbWF0aW9uU3RhdGUoKVwiXG4gIFtzdHlsZS53aWR0aC5weF09XCJmbHlvdXRXaWR0aFwiXG4gICNmbHlvdXRSZWZcbiAgW2Nka1RyYXBGb2N1c109XCJlbmFibGVUcmFwRm9jdXNcIlxuICBbY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmVdPVwiZW5hYmxlVHJhcEZvY3VzQXV0b0NhcHR1cmVcIlxuPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJza3ktZmx5b3V0LWhlYWRlclwiXG4gICAgW3NreVRoZW1lQ2xhc3NdPVwie1xuICAgICAgJ3NreS1wYWRkaW5nLXNxdWlzaC1sYXJnZSc6ICdkZWZhdWx0J1xuICAgIH1cIlxuICAgICNmbHlvdXRIZWFkZXJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJza3ktZmx5b3V0LWhlYWRlci1jb250ZW50XCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgICpza3lUaGVtZUlmPVwiJ21vZGVybidcIlxuICAgICAgICBjbGFzcz1cInNreS1idG4gc2t5LWJ0bi1pY29uLWJvcmRlcmxlc3Mgc2t5LW1hcmdpbi1pbmxpbmUtc20gc2t5LWZseW91dC1oZWFkZXItZ3JhYi1oYW5kbGVcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidza3l1eF9mbHlvdXRfcmVzaXplX2hhbmRsZScgfCBza3lMaWJSZXNvdXJjZXNcIlxuICAgICAgICAoa2V5ZG93bik9XCJvbkhlYWRlckdyYWJIYW5kbGVLZXlEb3duKCRldmVudClcIlxuICAgICAgICAobW91c2Vkb3duKT1cIm9uSGVhZGVyR3JhYkhhbmRsZU1vdXNlRG93bigkZXZlbnQpXCJcbiAgICAgID5cbiAgICAgICAgPHNreS1pY29uIGljb249XCJ0aWxlLWRyYWdcIiBpY29uVHlwZT1cInNreXV4XCIgc2l6ZT1cImxnXCI+IDwvc2t5LWljb24+XG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPHNreS1mbHlvdXQtaXRlcmF0b3JcbiAgICAgICAgKm5nSWY9XCJjb25maWcuc2hvd0l0ZXJhdG9yXCJcbiAgICAgICAgW25leHRCdXR0b25EaXNhYmxlZF09XCJjb25maWcuaXRlcmF0b3JOZXh0QnV0dG9uRGlzYWJsZWRcIlxuICAgICAgICBbcHJldmlvdXNCdXR0b25EaXNhYmxlZF09XCJjb25maWcuaXRlcmF0b3JQcmV2aW91c0J1dHRvbkRpc2FibGVkXCJcbiAgICAgICAgKG5leHRCdXR0b25DbGljayk9XCJvbkl0ZXJhdG9yTmV4dEJ1dHRvbkNsaWNrKClcIlxuICAgICAgICAocHJldmlvdXNCdXR0b25DbGljayk9XCJvbkl0ZXJhdG9yUHJldmlvdXNCdXR0b25DbGljaygpXCJcbiAgICAgID5cbiAgICAgIDwvc2t5LWZseW91dC1pdGVyYXRvcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwic2t5LWZseW91dC1oZWFkZXItYnV0dG9uc1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBlcm1hbGlua1RlbXBsYXRlXCI+IDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInByaW1hcnlBY3Rpb25UZW1wbGF0ZVwiPiA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJza3ktYnRuIHNreS1mbHlvdXQtYnRuLWNsb3NlIHNreS1sYWJlbC1pY29uLXRoZW1lLWRlZmF1bHRcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInc2t5dXhfZmx5b3V0X2Nsb3NlJyB8IHNreUxpYlJlc291cmNlc1wiXG4gICAgICAgIFtza3lUaGVtZUNsYXNzXT1cIntcbiAgICAgICAgICAnc2t5LWJ0bi1kZWZhdWx0JzogJ2RlZmF1bHQnLFxuICAgICAgICAgICdza3ktYnRuLWljb24tYm9yZGVybGVzcyc6ICdtb2Rlcm4nXG4gICAgICAgIH1cIlxuICAgICAgICAoY2xpY2spPVwiY2xvc2UoKVwiXG4gICAgICA+XG4gICAgICAgIDxza3ktaWNvbiAqc2t5VGhlbWVJZj1cIidkZWZhdWx0J1wiIGljb249XCJjbG9zZVwiPiA8L3NreS1pY29uPlxuICAgICAgICA8c2t5LWljb25cbiAgICAgICAgICAqc2t5VGhlbWVJZj1cIidtb2Rlcm4nXCJcbiAgICAgICAgICBpY29uPVwiY2xvc2VcIlxuICAgICAgICAgIGljb25UeXBlPVwic2t5dXhcIlxuICAgICAgICAgIHNpemU9XCJsZ1wiXG4gICAgICAgID5cbiAgICAgICAgPC9za3ktaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInNreS1mbHlvdXQtY29udGVudFwiPlxuICAgIDxkaXYgI3RhcmdldD48L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICBjbGFzcz1cInNreS1mbHlvdXQtcmVzaXplLWhhbmRsZVwiXG4gICAgcm9sZT1cInNlcGFyYXRvclwiXG4gICAgdGFiaW5kZXg9XCIwXCJcbiAgICB0eXBlPVwicmFuZ2VcIlxuICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwiZmx5b3V0SWRcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3NreXV4X2ZseW91dF9yZXNpemVfaGFuZGxlJyB8IHNreUxpYlJlc291cmNlc1wiXG4gICAgW2F0dHIuYXJpYS12YWx1ZW1heF09XCJjb25maWcubWF4V2lkdGhcIlxuICAgIFthdHRyLmFyaWEtdmFsdWVtaW5dPVwiY29uZmlnLm1pbldpZHRoXCJcbiAgICBbYXR0ci5hcmlhLXZhbHVlbm93XT1cImZseW91dFdpZHRoXCJcbiAgICAoa2V5ZG93bik9XCJvblJlc2l6ZUhhbmRsZUtleURvd24oJGV2ZW50KVwiXG4gICAgKG1vdXNlZG93bik9XCJvblJlc2l6ZUhhbmRsZU1vdXNlRG93bigkZXZlbnQpXCJcbiAgPjwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjcGVybWFsaW5rVGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJwZXJtYWxpbmtcIj5cbiAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwicGVybWFsaW5rLnVybFwiPlxuICAgICAgPGFcbiAgICAgICAgY2xhc3M9XCJza3ktYnRuIHNreS1mbHlvdXQtYnRuLXBlcm1hbGluayBza3ktbWFyZ2luLWlubGluZS1kZWZhdWx0XCJcbiAgICAgICAgW3NreUhyZWZdPVwicGVybWFsaW5rLnVybFwiXG4gICAgICAgIFtza3lUaGVtZUNsYXNzXT1cIntcbiAgICAgICAgICAnc2t5LWJ0bi1kZWZhdWx0JzogJ2RlZmF1bHQnLFxuICAgICAgICAgICdza3ktYnRuLWJvcmRlcmxlc3MnOiAnbW9kZXJuJ1xuICAgICAgICB9XCJcbiAgICAgICAgKGNsaWNrKT1cImNsb3NlKClcIlxuICAgICAgPlxuICAgICAgICB7eyBwZXJtYWxpbmtMYWJlbCB9fVxuICAgICAgPC9hPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cInBlcm1hbGluay5yb3V0ZVwiPlxuICAgICAgPGFcbiAgICAgICAgY2xhc3M9XCJza3ktYnRuIHNreS1mbHlvdXQtYnRuLXBlcm1hbGluayBza3ktbWFyZ2luLWlubGluZS1kZWZhdWx0XCJcbiAgICAgICAgW3JvdXRlckxpbmtdPVwicGVybWFsaW5rLnJvdXRlLmNvbW1hbmRzXCJcbiAgICAgICAgW2ZyYWdtZW50XT1cInBlcm1hbGluay5yb3V0ZS5leHRyYXM/LmZyYWdtZW50XCJcbiAgICAgICAgW3NreVRoZW1lQ2xhc3NdPVwie1xuICAgICAgICAgICdza3ktYnRuLWRlZmF1bHQnOiAnZGVmYXVsdCcsXG4gICAgICAgICAgJ3NreS1idG4tYm9yZGVybGVzcyc6ICdtb2Rlcm4nXG4gICAgICAgIH1cIlxuICAgICAgICBbcXVlcnlQYXJhbXNdPVwicGVybWFsaW5rLnJvdXRlLmV4dHJhcz8ucXVlcnlQYXJhbXNcIlxuICAgICAgICBbcXVlcnlQYXJhbXNIYW5kbGluZ109XCJwZXJtYWxpbmsucm91dGUuZXh0cmFzPy5xdWVyeVBhcmFtc0hhbmRsaW5nXCJcbiAgICAgICAgW3N0YXRlXT1cInBlcm1hbGluay5yb3V0ZS5leHRyYXM/LnN0YXRlXCJcbiAgICAgICAgKGNsaWNrKT1cImNsb3NlKClcIlxuICAgICAgPlxuICAgICAgICB7eyBwZXJtYWxpbmtMYWJlbCB9fVxuICAgICAgPC9hPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbmctdGVtcGxhdGU+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3ByaW1hcnlBY3Rpb25UZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cInByaW1hcnlBY3Rpb24gJiYgcHJpbWFyeUFjdGlvbi5jYWxsYmFja1wiPlxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJza3ktYnRuIHNreS1idG4tZGVmYXVsdCBza3ktZmx5b3V0LWJ0bi1wcmltYXJ5LWFjdGlvbiBza3ktbWFyZ2luLWlubGluZS1kZWZhdWx0XCJcbiAgICAgIChjbGljayk9XCJpbnZva2VQcmltYXJ5QWN0aW9uKClcIlxuICAgID5cbiAgICAgIHt7IHByaW1hcnlBY3Rpb25MYWJlbCB9fVxuICAgIDwvYnV0dG9uPlxuICA8L25nLXRlbXBsYXRlPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|