@libs-ui/components-scroll-overlay 0.2.306 → 0.2.308-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/README.md +44 -41
- package/demo/scroll-overlay.demo.d.ts +1 -1
- package/esm2022/demo/scroll-overlay.demo.mjs +25 -19
- package/esm2022/index.mjs +1 -1
- package/esm2022/scroll-overlay.directive.mjs +40 -28
- package/esm2022/scroll.interface.mjs +1 -2
- package/fesm2022/libs-ui-components-scroll-overlay.mjs +61 -45
- package/fesm2022/libs-ui-components-scroll-overlay.mjs.map +1 -1
- package/package.json +2 -2
- package/scroll-overlay.directive.d.ts +2 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
-
import { Directive, ElementRef, Renderer2, computed, effect, inject, input, output, signal, untracked } from
|
|
2
|
+
import { Directive, ElementRef, Renderer2, computed, effect, inject, input, output, signal, untracked } from '@angular/core';
|
|
3
3
|
import { checkMouseOverInContainer, getDragEventByElement } from '@libs-ui/utils';
|
|
4
|
-
import { Subject, Subscription, fromEvent, interval, switchMap, takeUntil, tap } from
|
|
4
|
+
import { Subject, Subscription, fromEvent, interval, switchMap, takeUntil, tap } from 'rxjs';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
export class LibsUiComponentsScrollOverlayDirective {
|
|
7
7
|
// #region PROPERTY
|
|
@@ -80,7 +80,7 @@ export class LibsUiComponentsScrollOverlayDirective {
|
|
|
80
80
|
// #region INPUT
|
|
81
81
|
debugMode = input(false);
|
|
82
82
|
ignoreInit = input(false);
|
|
83
|
-
classContainer = input('', { transform: value => value ?? '' });
|
|
83
|
+
classContainer = input('', { transform: (value) => value ?? '' });
|
|
84
84
|
options = input(Object.assign({}));
|
|
85
85
|
elementCheckScrollX = input();
|
|
86
86
|
elementCheckScrollY = input();
|
|
@@ -101,7 +101,9 @@ export class LibsUiComponentsScrollOverlayDirective {
|
|
|
101
101
|
}
|
|
102
102
|
const options = this.options();
|
|
103
103
|
this.divContainer.className = '';
|
|
104
|
-
this.classContainer()
|
|
104
|
+
this.classContainer()
|
|
105
|
+
?.split(' ')
|
|
106
|
+
.forEach((className) => {
|
|
105
107
|
if (!className) {
|
|
106
108
|
return;
|
|
107
109
|
}
|
|
@@ -137,7 +139,7 @@ export class LibsUiComponentsScrollOverlayDirective {
|
|
|
137
139
|
return this.elementScroll() || this.element.nativeElement;
|
|
138
140
|
}
|
|
139
141
|
createScrollbar(scrollDirection, trackEl, thumbEl) {
|
|
140
|
-
const idStyleTag =
|
|
142
|
+
const idStyleTag = '#id-style-tag-custom-scroll-overlay';
|
|
141
143
|
const styleElCustomScrollOverlay = document.getElementById(idStyleTag);
|
|
142
144
|
if (!styleElCustomScrollOverlay) {
|
|
143
145
|
const styleEl = document.createElement('style');
|
|
@@ -146,14 +148,14 @@ export class LibsUiComponentsScrollOverlayDirective {
|
|
|
146
148
|
document.head.append(styleEl);
|
|
147
149
|
}
|
|
148
150
|
const stylesProperty = {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
151
|
+
'box-sizing': 'border-box',
|
|
152
|
+
'scrollbar-width': 'none',
|
|
153
|
+
'scrollbar-color': 'transparent transparent',
|
|
154
|
+
overflow: 'hidden',
|
|
155
|
+
'overflow-x': `${this.options()?.scrollX || 'scroll'}`,
|
|
156
|
+
'overflow-y': `${this.options()?.scrollY || 'scroll'}`,
|
|
155
157
|
};
|
|
156
|
-
Object.keys(stylesProperty).forEach(key => {
|
|
158
|
+
Object.keys(stylesProperty).forEach((key) => {
|
|
157
159
|
this.render2.setStyle(this.Element, key, stylesProperty[key], 1);
|
|
158
160
|
});
|
|
159
161
|
trackEl.classList.add(`scrollbar-track`);
|
|
@@ -163,7 +165,9 @@ export class LibsUiComponentsScrollOverlayDirective {
|
|
|
163
165
|
trackEl.appendChild(thumbEl);
|
|
164
166
|
if (this.Element.className) {
|
|
165
167
|
this.Element.className.split(' ').forEach((className) => {
|
|
166
|
-
if (className &&
|
|
168
|
+
if (className &&
|
|
169
|
+
(['w-full', 'w-screen', 'h-full', 'h-screen', 'shrink-0'].includes(className) || className.includes('min-h-') || className.includes('min-w-') || /^(!?)(h|w)-\[[0-9]+px\]$/.test(className)) &&
|
|
170
|
+
!this.divContainer.classList.contains(className)) {
|
|
167
171
|
this.divContainer.classList.add(className);
|
|
168
172
|
}
|
|
169
173
|
});
|
|
@@ -185,11 +189,12 @@ export class LibsUiComponentsScrollOverlayDirective {
|
|
|
185
189
|
bindEventsScrollBar(scrollDirection, trackEl) {
|
|
186
190
|
let scrollLeft = this.Element.scrollLeft;
|
|
187
191
|
let scrollTop = this.Element.scrollTop;
|
|
188
|
-
const subs = fromEvent(this.Element, 'scroll')
|
|
192
|
+
const subs = fromEvent(this.Element, 'scroll')
|
|
193
|
+
.pipe(tap((event) => {
|
|
189
194
|
const target = this.Element;
|
|
190
195
|
this.outScroll.emit(event);
|
|
191
196
|
if (scrollDirection === 'X') {
|
|
192
|
-
if (target.scrollLeft &&
|
|
197
|
+
if (target.scrollLeft && target.scrollLeft + target.offsetWidth >= target.scrollWidth) {
|
|
193
198
|
target.scrollLeft = target.scrollWidth - target.offsetWidth - (target.offsetWidth - target.clientWidth);
|
|
194
199
|
}
|
|
195
200
|
if (target.scrollLeft !== scrollLeft) {
|
|
@@ -211,24 +216,31 @@ export class LibsUiComponentsScrollOverlayDirective {
|
|
|
211
216
|
if (target.scrollHeight <= target.scrollTop + target.offsetHeight + 3) {
|
|
212
217
|
return this.outScrollBottom.emit(event);
|
|
213
218
|
}
|
|
214
|
-
}), takeUntil(this.onDestroy))
|
|
215
|
-
|
|
219
|
+
}), takeUntil(this.onDestroy))
|
|
220
|
+
.subscribe();
|
|
221
|
+
subs.add(fromEvent(document, 'resize')
|
|
222
|
+
.pipe(tap(this.updateScrollbarSize.bind(this, scrollDirection)), takeUntil(this.onDestroy))
|
|
223
|
+
.subscribe());
|
|
216
224
|
const mouseLeave = fromEvent(this.divContainer, 'mouseleave');
|
|
217
225
|
const mouseenter = fromEvent(this.divContainer, 'mouseenter');
|
|
218
|
-
subs.add(mouseenter
|
|
219
|
-
|
|
226
|
+
subs.add(mouseenter
|
|
227
|
+
.pipe(tap(() => {
|
|
228
|
+
if ((scrollDirection === 'X' && !this.options()?.scrollXOpacity0) || (scrollDirection === 'Y' && !this.options()?.scrollYOpacity0)) {
|
|
220
229
|
trackEl.style.visibility = 'visible';
|
|
221
230
|
trackEl.style.opacity = '1';
|
|
222
231
|
}
|
|
223
232
|
this.updateScrollbarSize(scrollDirection);
|
|
224
|
-
}), switchMap(() => interval(1000).pipe(takeUntil(mouseLeave))), tap(this.updateScrollbarSize.bind(this, scrollDirection)), takeUntil(this.onDestroy))
|
|
225
|
-
|
|
233
|
+
}), switchMap(() => interval(1000).pipe(takeUntil(mouseLeave))), tap(this.updateScrollbarSize.bind(this, scrollDirection)), takeUntil(this.onDestroy))
|
|
234
|
+
.subscribe());
|
|
235
|
+
subs.add(mouseLeave
|
|
236
|
+
.pipe(tap(() => {
|
|
226
237
|
if (this.keepDisplayThumb()) {
|
|
227
238
|
return;
|
|
228
239
|
}
|
|
229
240
|
trackEl.style.visibility = 'hidden';
|
|
230
241
|
trackEl.style.opacity = '0';
|
|
231
|
-
}), takeUntil(this.onDestroy))
|
|
242
|
+
}), takeUntil(this.onDestroy))
|
|
243
|
+
.subscribe());
|
|
232
244
|
if (scrollDirection === 'X') {
|
|
233
245
|
this.subsX = subs;
|
|
234
246
|
return;
|
|
@@ -242,7 +254,7 @@ export class LibsUiComponentsScrollOverlayDirective {
|
|
|
242
254
|
const elementTrack = scrollDirection === 'X' ? this.trackX : this.trackY;
|
|
243
255
|
const elementThumb = scrollDirection === 'X' ? this.thumbX : this.thumbY;
|
|
244
256
|
const subs = scrollDirection === 'X' ? this.subsX : this.subsY;
|
|
245
|
-
subs.add(fromEvent(elementTrack, 'click').subscribe(e => {
|
|
257
|
+
subs.add(fromEvent(elementTrack, 'click').subscribe((e) => {
|
|
246
258
|
if (this.isScrollThumb()) {
|
|
247
259
|
return;
|
|
248
260
|
}
|
|
@@ -284,7 +296,7 @@ export class LibsUiComponentsScrollOverlayDirective {
|
|
|
284
296
|
this.isScrollThumb.set(false);
|
|
285
297
|
}, 250);
|
|
286
298
|
},
|
|
287
|
-
onDestroy: this.onDestroy
|
|
299
|
+
onDestroy: this.onDestroy,
|
|
288
300
|
}).subscribe((mouseEvent) => {
|
|
289
301
|
this.updateScrollPositionByUserAction(scrollDirection, mouseEvent, 'auto', lengthThumbToPointClick);
|
|
290
302
|
}));
|
|
@@ -309,7 +321,7 @@ export class LibsUiComponentsScrollOverlayDirective {
|
|
|
309
321
|
if (scrollDirection === 'X') {
|
|
310
322
|
const containerWidth = this.Element.offsetWidth;
|
|
311
323
|
const contentWidth = (this.elementCheckScrollX() || this.Element).scrollWidth;
|
|
312
|
-
const thumbWidth = (containerWidth / contentWidth) *
|
|
324
|
+
const thumbWidth = (containerWidth / contentWidth) * containerWidth;
|
|
313
325
|
this.thumbX.style.width = `${Math.max(20, thumbWidth)}px`;
|
|
314
326
|
this.trackX.style.display = 'none';
|
|
315
327
|
if (contentWidth > containerWidth) {
|
|
@@ -320,7 +332,7 @@ export class LibsUiComponentsScrollOverlayDirective {
|
|
|
320
332
|
}
|
|
321
333
|
const containerHeight = this.Element.offsetHeight;
|
|
322
334
|
const contentHeight = (this.elementCheckScrollY() || this.Element).scrollHeight;
|
|
323
|
-
const thumbHeight = (containerHeight / contentHeight) *
|
|
335
|
+
const thumbHeight = (containerHeight / contentHeight) * containerHeight;
|
|
324
336
|
this.thumbY.style.height = `${Math.max(20, thumbHeight)}px`;
|
|
325
337
|
this.trackY.style.display = 'none';
|
|
326
338
|
if (contentHeight > containerHeight) {
|
|
@@ -358,7 +370,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
358
370
|
args: [{
|
|
359
371
|
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
360
372
|
selector: '[LibsUiComponentsScrollOverlayDirective]',
|
|
361
|
-
standalone: true
|
|
373
|
+
standalone: true,
|
|
362
374
|
}]
|
|
363
375
|
}], ctorParameters: () => [] });
|
|
364
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLW92ZXJsYXkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL3Njcm9sbC1vdmVybGF5L3NyYy9zY3JvbGwtb3ZlcmxheS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFhLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEksT0FBTyxFQUFFLHlCQUF5QixFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFPN0YsTUFBTSxPQUFPLHNDQUFzQztJQUNqRCxtQkFBbUI7SUFDRixNQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDOzs0QkFFZixJQUFJLENBQUMsY0FBYyxFQUFFOzs7MkJBR3RCLElBQUksQ0FBQyxtQkFBbUIsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzJCQTJCMUIsSUFBSSxDQUFDLGdCQUFnQixFQUFFOzs7MkJBR3ZCLElBQUksQ0FBQyxxQkFBcUIsRUFBRTs7Ozs4QkFJekIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQztrQkFDdkMsSUFBSSxDQUFDLGdCQUFnQixFQUFFOzs7Ozs7Ozs2QkFRWixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDO2lCQUN2QyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7Ozs7OztHQU1yQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ0UsYUFBYSxHQUFHLE1B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QUFDLElBQUksR0FBRyxHQUFHLGFBQWEsSUFBSSxDQUFDO1lBRTlDLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7UUFDbEQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDO1FBQ2hGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQ3pDLE1BQU0sYUFBYSxHQUFHLENBQUMsU0FBUyxHQUFHLENBQUMsYUFBYSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVySCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxhQUFhLElBQUksQ0FBQztJQUMvQyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO3dHQXBaVSxzQ0FBc0M7NEZBQXRDLHNDQUFzQzs7NEZBQXRDLHNDQUFzQztrQkFMbEQsU0FBUzttQkFBQztvQkFDVCw4REFBOEQ7b0JBQzlELFFBQVEsRUFBRSwwQ0FBMEM7b0JBQ3BELFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgT25EZXN0cm95LCBSZW5kZXJlcjIsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgaW5wdXQsIG91dHB1dCwgc2lnbmFsLCB1bnRyYWNrZWQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgY2hlY2tNb3VzZU92ZXJJbkNvbnRhaW5lciwgZ2V0RHJhZ0V2ZW50QnlFbGVtZW50IH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBmcm9tRXZlbnQsIGludGVydmFsLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IElTY3JvbGxPdmVybGF5T3B0aW9ucywgVFlQRV9TQ1JPTExfRElSRUNUSU9OIH0gZnJvbSBcIi4vc2Nyb2xsLmludGVyZmFjZVwiO1xuQERpcmVjdGl2ZSh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnW0xpYnNVaUNvbXBvbmVudHNTY3JvbGxPdmVybGF5RGlyZWN0aXZlXScsXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAvLyAjcmVnaW9uIFBST1BFUlRZXG4gIHByaXZhdGUgcmVhZG9ubHkgc3R5bGVzID0gY29tcHV0ZWQoKCkgPT4gYFxuICAgICAgLnNjcm9sbGJhci10cmFja3tcbiAgICAgICAgIGJhY2tncm91bmQtY29sb3I6JHt0aGlzLnNjcm9sbGJhckNvbG9yKCl9O1xuICAgICAgfVxuICAgICAgLnNjcm9sbGJhci10cmFjazpob3ZlcntcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjoke3RoaXMuc2Nyb2xsYmFySG92ZXJDb2xvcigpfTtcbiAgICAgIH1cbiAgICAgIC5zY3JvbGxiYXItdHJhY2stWCB7XG4gICAgICAgIHdpZHRoOjEwMCU7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgei1pbmRleDogMTtcbiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzIGVhc2UsIHZpc2liaWxpdHkgMC4zcyBlYXNlO1xuICAgICAgfVxuXG4gICAgICAuc2Nyb2xsYmFyLXRyYWNrLVkge1xuICAgICAgICBoZWlnaHQ6MTAwJTtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgei1pbmRleDogMTtcbiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzIGVhc2UsIHZpc2liaWxpdHkgMC4zcyBlYXNlO1xuICAgICAgfVxuXG4gICAgICAuc2Nyb2xsYmFyLXRodW1ie1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiR7dGhpcy5zY3JvbGxUaHVtYkNvbG9yKCl9O1xuICAgICAgfVxuICAgICAgLnNjcm9sbGJhci10aHVtYjpob3ZlcntcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjoke3RoaXMuc2Nyb2xsVGh1bWJIb3ZlckNvbG9yKCl9O1xuICAgICAgfVxuXG4gICAgICAuc2Nyb2xsYmFyLXRodW1iLVgge1xuICAgICAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtICR7dGhpcy5zY3JvbGxiYXJQYWRkaW5nKCkgKiAyfXB4KTtcbiAgICAgICAgYm90dG9tOiAke3RoaXMuc2Nyb2xsYmFyUGFkZGluZygpfXB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgIGN1cnNvcjogZ3JhYmJpbmc7XG4gICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4zcztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgfVxuXG4gICAgICAuc2Nyb2xsYmFyLXRodW1iLVkge1xuICAgICAgICB3aWR0aDogY2FsYygxMDAlIC0gJHt0aGlzLnNjcm9sbGJhclBhZGRpbmcoKSAqIDJ9cHgpO1xuICAgICAgICByaWdodDogJHt0aGlzLnNjcm9sbGJhclBhZGRpbmcoKX1weDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICBjdXJzb3I6IGdyYWJiaW5nO1xuICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3M7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIH1cbiAgYCwge30pXG4gIHByaXZhdGUgaXNTY3JvbGxUaHVtYiA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUga2VlcERpc3BsYXlUaHVtYiA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgc3Vic1ggPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgc3Vic1kgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgc2Nyb2xsYmFyV2lkdGggPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKT8uc2Nyb2xsYmFyV2lkdGggPz8gMTApOyAvLyBDaGnhu4F1IHLhu5luZyB0aGFuaCBjdeG7mW5cbiAgcHJpdmF0ZSBzY3JvbGxiYXJQYWRkaW5nID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcHRpb25zKCk/LnNjcm9sbGJhclBhZGRpbmcgPz8gMik7IC8vIENoaeG7gXUgcuG7mW5nIHRoYW5oIGN14buZblxuICBwcml2YXRlIHNjcm9sbGJhckNvbG9yID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcHRpb25zKCk/LnNjcm9sbGJhckNvbG9yID8/ICcnKTtcbiAgcHJpdmF0ZSBzY3JvbGxiYXJIb3ZlckNvbG9yID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcHRpb25zKCk/LnNjcm9sbGJhckNvbG9yID8/ICcjQ0REMEQ2NDAnKTtcbiAgcHJpdmF0ZSBzY3JvbGxUaHVtYkNvbG9yID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcHRpb25zKCk/LnNjcm9sbFRodW1iQ29sb3IgPz8gJyNDREQwRDYnKTtcbiAgcHJpdmF0ZSBzY3JvbGxUaHVtYkhvdmVyQ29sb3IgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKT8uc2Nyb2xsVGh1bWJIb3ZlckNvbG9yID8/ICcjOUNBMkFEJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGl2Q29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHJhY2tYOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRodW1iWDogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0cmFja1k6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGh1bWJZOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBwcml2YXRlIHJlYWRvbmx5IG9uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgLy8gI3JlZ2lvbiBJTlBVVFxuICByZWFkb25seSBkZWJ1Z01vZGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGlnbm9yZUluaXQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGNsYXNzQ29udGFpbmVyID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCcnLCB7IHRyYW5zZm9ybTogdmFsdWUgPT4gdmFsdWUgPz8gJycgfSk7XG4gIHJlYWRvbmx5IG9wdGlvbnMgPSBpbnB1dDxJU2Nyb2xsT3ZlcmxheU9wdGlvbnMgfCB1bmRlZmluZWQ+KE9iamVjdC5hc3NpZ24oe30pKTtcbiAgcmVhZG9ubHkgZWxlbWVudENoZWNrU2Nyb2xsWCA9IGlucHV0PEhUTUxFbGVtZW50PigpO1xuICByZWFkb25seSBlbGVtZW50Q2hlY2tTY3JvbGxZID0gaW5wdXQ8SFRNTEVsZW1lbnQ+KCk7XG4gIHJlYWRvbmx5IGVsZW1lbnRTY3JvbGwgPSBpbnB1dDxIVE1MRWxlbWVudD4oKTtcblxuICAvLyAjcmVnaW9uIE9VVFBVVFxuICByZWFkb25seSBvdXRTY3JvbGwgPSBvdXRwdXQ8RXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dFNjcm9sbFggPSBvdXRwdXQ8RXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dFNjcm9sbFkgPSBvdXRwdXQ8RXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dFNjcm9sbFRvcCA9IG91dHB1dDxFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0U2Nyb2xsQm90dG9tID0gb3V0cHV0PEV2ZW50PigpO1xuXG4gIC8vICNyZWdpb24gSU5KRUNUXG4gIHByaXZhdGUgZWxlbWVudCA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgcHJpdmF0ZSByZW5kZXIyID0gaW5qZWN0KFJlbmRlcmVyMik7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmlnbm9yZUluaXQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zKCk7XG4gICAgICB0aGlzLmRpdkNvbnRhaW5lci5jbGFzc05hbWUgPSAnJztcbiAgICAgIHRoaXMuY2xhc3NDb250YWluZXIoKT8uc3BsaXQoJyAnKS5mb3JFYWNoKGNsYXNzTmFtZSA9PiB7XG4gICAgICAgIGlmICghY2xhc3NOYW1lKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGl2Q29udGFpbmVyLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtcbiAgICAgIH0pO1xuXG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICB0aGlzLkVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZSgnb3ZlcmZsb3ctaGlkZGVuJywgb3B0aW9ucz8uc2Nyb2xsWCA9PT0gJ2hpZGRlbicgJiYgb3B0aW9ucz8uc2Nyb2xsWSA9PT0gJ2hpZGRlbicpO1xuICAgICAgICBpZiAob3B0aW9ucz8uc2Nyb2xsWCAhPT0gJ2hpZGRlbicpIHtcbiAgICAgICAgICB0aGlzLnN1YnNYLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgdGhpcy50cmFja1guY2xhc3NOYW1lID0gJyc7XG4gICAgICAgICAgdGhpcy50aHVtYlguY2xhc3NOYW1lID0gJyc7XG4gICAgICAgICAgdGhpcy50cmFja1guc3R5bGUuaGVpZ2h0ID0gYCR7dGhpcy5zY3JvbGxiYXJXaWR0aCgpfXB4YDtcbiAgICAgICAgICB0aGlzLmNyZWF0ZVNjcm9sbGJhcignWCcsIHRoaXMudHJhY2tYLCB0aGlzLnRodW1iWCk7XG4gICAgICAgICAgdGhpcy5iaW5kRXZlbnRzU2Nyb2xsQmFyKCdYJywgdGhpcy50cmFja1gpO1xuXG4gICAgICAgICAgdGhpcy5oYW5kbGVyRHJhZ0FuZERyb3BUaHVtYignWCcpO1xuICAgICAgICAgIHRoaXMuaGFuZGxlckNsaWNrVHJhY2soJ1gnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zPy5zY3JvbGxZICE9PSAnaGlkZGVuJykge1xuICAgICAgICAgIHRoaXMudHJhY2tZLmNsYXNzTmFtZSA9ICcnO1xuICAgICAgICAgIHRoaXMudGh1bWJZLmNsYXNzTmFtZSA9ICcnO1xuICAgICAgICAgIHRoaXMudHJhY2tZLnN0eWxlLndpZHRoID0gYCR7dGhpcy5zY3JvbGxiYXJXaWR0aCgpfXB4YDtcbiAgICAgICAgICB0aGlzLnN1YnNZLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgdGhpcy5jcmVhdGVTY3JvbGxiYXIoJ1knLCB0aGlzLnRyYWNrWSwgdGhpcy50aHVtYlkpO1xuICAgICAgICAgIHRoaXMuYmluZEV2ZW50c1Njcm9sbEJhcignWScsIHRoaXMudHJhY2tZKTtcblxuICAgICAgICAgIHRoaXMuaGFuZGxlckRyYWdBbmREcm9wVGh1bWIoJ1knKTtcbiAgICAgICAgICB0aGlzLmhhbmRsZXJDbGlja1RyYWNrKCdZJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgfSk7XG4gIH1cblxuICAvLyAjcmVnaW9uIEZVTkNUSU9OU1xuICBwcml2YXRlIGdldCBFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50U2Nyb2xsKCkgfHwgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVNjcm9sbGJhcihzY3JvbGxEaXJlY3Rpb246IFRZUEVfU0NST0xMX0RJUkVDVElPTiwgdHJhY2tFbDogSFRNTEVsZW1lbnQsIHRodW1iRWw6IEhUTUxFbGVtZW50KSB7XG4gICAgY29uc3QgaWRTdHlsZVRhZyA9IFwiI2lkLXN0eWxlLXRhZy1jdXN0b20tc2Nyb2xsLW92ZXJsYXlcIlxuICAgIGNvbnN0IHN0eWxlRWxDdXN0b21TY3JvbGxPdmVybGF5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRTdHlsZVRhZyk7XG5cbiAgICBpZiAoIXN0eWxlRWxDdXN0b21TY3JvbGxPdmVybGF5KSB7XG4gICAgICBjb25zdCBzdHlsZUVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICAgIHN0eWxlRWwuc2V0QXR0cmlidXRlKCdpZCcsIGlkU3R5bGVUYWcpO1xuICAgICAgc3R5bGVFbC5pbm5lckhUTUwgPSB0aGlzLnN0eWxlcygpO1xuICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmQoc3R5bGVFbCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3R5bGVzUHJvcGVydHkgPSB7XG4gICAgICBcImJveC1zaXppbmdcIjogXCJib3JkZXItYm94XCIsXG4gICAgICBcInNjcm9sbGJhci13aWR0aFwiOiBcIm5vbmVcIixcbiAgICAgIFwic2Nyb2xsYmFyLWNvbG9yXCI6IFwidHJhbnNwYXJlbnQgdHJhbnNwYXJlbnRcIixcbiAgICAgIFwib3ZlcmZsb3dcIjogXCJoaWRkZW5cIixcbiAgICAgIFwib3ZlcmZsb3cteFwiOiBgJHt0aGlzLm9wdGlvbnMoKT8uc2Nyb2xsWCB8fCAnc2Nyb2xsJ31gLFxuICAgICAgXCJvdmVyZmxvdy15XCI6IGAke3RoaXMub3B0aW9ucygpPy5zY3JvbGxZIHx8ICdzY3JvbGwnfWBcbiAgICB9IGFzIGFueTtcblxuICAgIE9iamVjdC5rZXlzKHN0eWxlc1Byb3BlcnR5KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICB0aGlzLnJlbmRlcjIuc2V0U3R5bGUodGhpcy5FbGVtZW50LCBrZXksIHN0eWxlc1Byb3BlcnR5W2tleV0sIDEpO1xuICAgIH0pO1xuXG4gICAgdHJhY2tFbC5jbGFzc0xpc3QuYWRkKGBzY3JvbGxiYXItdHJhY2tgKTtcbiAgICB0cmFja0VsLmNsYXNzTGlzdC5hZGQoYHNjcm9sbGJhci10cmFjay0ke3Njcm9sbERpcmVjdGlvbn1gKTtcblxuICAgIHRodW1iRWwuY2xhc3NMaXN0LmFkZChgc2Nyb2xsYmFyLXRodW1iYCk7XG4gICAgdGh1bWJFbC5jbGFzc0xpc3QuYWRkKGBzY3JvbGxiYXItdGh1bWItJHtzY3JvbGxEaXJlY3Rpb259YCk7XG4gICAgdHJhY2tFbC5hcHBlbmRDaGlsZCh0aHVtYkVsKTtcbiAgICBpZiAodGhpcy5FbGVtZW50LmNsYXNzTmFtZSkge1xuICAgICAgdGhpcy5FbGVtZW50LmNsYXNzTmFtZS5zcGxpdCgnICcpLmZvckVhY2goKGNsYXNzTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmIChjbGFzc05hbWUgJiYgKFsndy1mdWxsJywgJ3ctc2NyZWVuJywgJ2gtZnVsbCcsICdoLXNjcmVlbicsICdzaHJpbmstMCddLmluY2x1ZGVzKGNsYXNzTmFtZSkgfHwgY2xhc3NOYW1lLmluY2x1ZGVzKCdtaW4taC0nKSB8fCBjbGFzc05hbWUuaW5jbHVkZXMoJ21pbi13LScpIHx8IC9eKCE/KShofHcpLVxcW1swLTldK3B4XFxdJC8udGVzdChjbGFzc05hbWUpKSAmJiAhdGhpcy5kaXZDb250YWluZXIuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSkpIHtcbiAgICAgICAgICB0aGlzLmRpdkNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgfSk7XG4gICAgICBpZiAoIXRoaXMuRWxlbWVudC5jbGFzc05hbWUuaW5jbHVkZXMoJ21pbi1oLScpKSB7XG4gICAgICAgIHRoaXMuZGl2Q29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ21pbi1oLTAnKTtcblxuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLkVsZW1lbnQuY2xhc3NOYW1lLmluY2x1ZGVzKCdtaW4tdy0nKSkge1xuICAgICAgICB0aGlzLmRpdkNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdtaW4tdy0wJyk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZGl2Q29udGFpbmVyLmFwcGVuZENoaWxkKHRyYWNrRWwpO1xuXG4gICAgaWYgKCF0aGlzLmRpdkNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbikge1xuICAgICAgdGhpcy5FbGVtZW50LnBhcmVudEVsZW1lbnQ/Lmluc2VydEJlZm9yZSh0aGlzLmRpdkNvbnRhaW5lciwgdGhpcy5FbGVtZW50KTtcbiAgICAgIHRoaXMuZGl2Q29udGFpbmVyLnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJztcbiAgICB9XG4gICAgdGhpcy5kaXZDb250YWluZXIuYXBwZW5kKHRoaXMuRWxlbWVudCk7XG4gICAgdGhpcy51cGRhdGVTY3JvbGxiYXJTaXplKHNjcm9sbERpcmVjdGlvbik7XG4gIH1cblxuICBwcml2YXRlIGJpbmRFdmVudHNTY3JvbGxCYXIoc2Nyb2xsRGlyZWN0aW9uOiBUWVBFX1NDUk9MTF9ESVJFQ1RJT04sIHRyYWNrRWw6IEhUTUxFbGVtZW50KSB7XG4gICAgbGV0IHNjcm9sbExlZnQgPSB0aGlzLkVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICBsZXQgc2Nyb2xsVG9wID0gdGhpcy5FbGVtZW50LnNjcm9sbFRvcDtcbiAgICBjb25zdCBzdWJzOiBTdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQ8RXZlbnQ+KHRoaXMuRWxlbWVudCwgJ3Njcm9sbCcpLnBpcGUodGFwKChldmVudCkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5FbGVtZW50O1xuXG4gICAgICB0aGlzLm91dFNjcm9sbC5lbWl0KGV2ZW50KTtcbiAgICAgIGlmIChzY3JvbGxEaXJlY3Rpb24gPT09ICdYJykge1xuICAgICAgICBpZiAodGFyZ2V0LnNjcm9sbExlZnQgJiYgKHRhcmdldC5zY3JvbGxMZWZ0ICsgdGFyZ2V0Lm9mZnNldFdpZHRoID49IHRhcmdldC5zY3JvbGxXaWR0aCkpIHtcbiAgICAgICAgICB0YXJnZXQuc2Nyb2xsTGVmdCA9IHRhcmdldC5zY3JvbGxXaWR0aCAtIHRhcmdldC5vZmZzZXRXaWR0aCAtICh0YXJnZXQub2Zmc2V0V2lkdGggLSB0YXJnZXQuY2xpZW50V2lkdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRhcmdldC5zY3JvbGxMZWZ0ICE9PSBzY3JvbGxMZWZ0KSB7XG4gICAgICAgICAgdGhpcy5vdXRTY3JvbGxYLmVtaXQoZXZlbnQpO1xuXG4gICAgICAgIH1cbiAgICAgICAgc2Nyb2xsTGVmdCA9IHRhcmdldC5zY3JvbGxMZWZ0O1xuICAgICAgICB0aGlzLnVwZGF0ZVNjcm9sbGJhclBvc2l0aW9uKHNjcm9sbERpcmVjdGlvbik7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodGFyZ2V0LnNjcm9sbFRvcCA9PT0gc2Nyb2xsVG9wKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVTY3JvbGxiYXJQb3NpdGlvbihzY3JvbGxEaXJlY3Rpb24pO1xuICAgICAgc2Nyb2xsVG9wID0gdGFyZ2V0LnNjcm9sbFRvcDtcbiAgICAgIHRoaXMub3V0U2Nyb2xsWS5lbWl0KGV2ZW50KTtcblxuICAgICAgaWYgKHRhcmdldC5zY3JvbGxUb3AgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3V0U2Nyb2xsVG9wLmVtaXQoZXZlbnQpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGFyZ2V0LnNjcm9sbEhlaWdodCA8PSB0YXJnZXQuc2Nyb2xsVG9wICsgdGFyZ2V0Lm9mZnNldEhlaWdodCArIDMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3V0U2Nyb2xsQm90dG9tLmVtaXQoZXZlbnQpO1xuICAgICAgfVxuICAgIH0pLCB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKS5zdWJzY3JpYmUoKTtcblxuICAgIHN1YnMuYWRkKGZyb21FdmVudChkb2N1bWVudCwgJ3Jlc2l6ZScpLnBpcGUodGFwKHRoaXMudXBkYXRlU2Nyb2xsYmFyU2l6ZS5iaW5kKHRoaXMsIHNjcm9sbERpcmVjdGlvbikpLCB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKS5zdWJzY3JpYmUoKSk7XG5cbiAgICBjb25zdCBtb3VzZUxlYXZlID0gZnJvbUV2ZW50KHRoaXMuZGl2Q29udGFpbmVyLCAnbW91c2VsZWF2ZScpO1xuICAgIGNvbnN0IG1vdXNlZW50ZXIgPSBmcm9tRXZlbnQodGhpcy5kaXZDb250YWluZXIsICdtb3VzZWVudGVyJyk7XG5cbiAgICBzdWJzLmFkZChtb3VzZWVudGVyLnBpcGUodGFwKCgpID0+IHtcbiAgICAgIGlmIChzY3JvbGxEaXJlY3Rpb24gPT09ICdYJyAmJiAhdGhpcy5vcHRpb25zKCk/LnNjcm9sbFhPcGFjaXR5MCB8fCBzY3JvbGxEaXJlY3Rpb24gPT09ICdZJyAmJiAhdGhpcy5vcHRpb25zKCk/LnNjcm9sbFlPcGFjaXR5MCkge1xuICAgICAgICB0cmFja0VsLnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XG4gICAgICAgIHRyYWNrRWwuc3R5bGUub3BhY2l0eSA9ICcxJztcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlU2Nyb2xsYmFyU2l6ZShzY3JvbGxEaXJlY3Rpb24pO1xuICAgIH0pLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IGludGVydmFsKDEwMDApLnBpcGUodGFrZVVudGlsKG1vdXNlTGVhdmUpKSksXG4gICAgICB0YXAodGhpcy51cGRhdGVTY3JvbGxiYXJTaXplLmJpbmQodGhpcywgc2Nyb2xsRGlyZWN0aW9uKSksXG4gICAgICB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpXG4gICAgKS5zdWJzY3JpYmUoKSk7XG5cbiAgICBzdWJzLmFkZChtb3VzZUxlYXZlLnBpcGUodGFwKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmtlZXBEaXNwbGF5VGh1bWIoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0cmFja0VsLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgIHRyYWNrRWwuc3R5bGUub3BhY2l0eSA9ICcwJztcbiAgICB9KSwgdGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKCkpO1xuXG4gICAgaWYgKHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnKSB7XG4gICAgICB0aGlzLnN1YnNYID0gc3VicztcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzY3JvbGxEaXJlY3Rpb24gPT09ICdZJykge1xuICAgICAgdGhpcy5zdWJzWSA9IHN1YnM7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNsaWNrVHJhY2soc2Nyb2xsRGlyZWN0aW9uOiBUWVBFX1NDUk9MTF9ESVJFQ1RJT04pIHtcbiAgICBjb25zdCBlbGVtZW50VHJhY2sgPSBzY3JvbGxEaXJlY3Rpb24gPT09ICdYJyA/IHRoaXMudHJhY2tYIDogdGhpcy50cmFja1k7XG4gICAgY29uc3QgZWxlbWVudFRodW1iID0gc2Nyb2xsRGlyZWN0aW9uID09PSAnWCcgPyB0aGlzLnRodW1iWCA6IHRoaXMudGh1bWJZO1xuICAgIGNvbnN0IHN1YnMgPSBzY3JvbGxEaXJlY3Rpb24gPT09ICdYJyA/IHRoaXMuc3Vic1ggOiB0aGlzLnN1YnNZO1xuXG4gICAgc3Vicy5hZGQoZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGVsZW1lbnRUcmFjaywgJ2NsaWNrJykuc3Vic2NyaWJlKGUgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNTY3JvbGxUaHVtYigpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICgoc2Nyb2xsRGlyZWN0aW9uID09PSAnWCcgJiYgZS5jbGllbnRYIDwgZWxlbWVudFRodW1iLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQpIHx8IChzY3JvbGxEaXJlY3Rpb24gPT09ICdZJyAmJiBlLmNsaWVudFkgPCBlbGVtZW50VGh1bWIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wKSkge1xuICAgICAgICB0aGlzLnVwZGF0ZVNjcm9sbFBvc2l0aW9uQnlVc2VyQWN0aW9uKHNjcm9sbERpcmVjdGlvbiwgZSwgJ3Ntb290aCcsIDApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChzY3JvbGxEaXJlY3Rpb24gPT09ICdYJykge1xuICAgICAgICB0aGlzLnVwZGF0ZVNjcm9sbFBvc2l0aW9uQnlVc2VyQWN0aW9uKHNjcm9sbERpcmVjdGlvbiwgZSwgJ3Ntb290aCcsIC0xICogZWxlbWVudFRodW1iLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVTY3JvbGxQb3NpdGlvbkJ5VXNlckFjdGlvbihzY3JvbGxEaXJlY3Rpb24sIGUsICdzbW9vdGgnLCAtMSAqIGVsZW1lbnRUaHVtYi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpO1xuICAgIH0pKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRHJhZ0FuZERyb3BUaHVtYihzY3JvbGxEaXJlY3Rpb246IFRZUEVfU0NST0xMX0RJUkVDVElPTikge1xuICAgIGNvbnN0IGVsZW1lbnRUcmFjayA9IHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnID8gdGhpcy50cmFja1ggOiB0aGlzLnRyYWNrWTtcbiAgICBjb25zdCBlbGVtZW50VGh1bWIgPSBzY3JvbGxEaXJlY3Rpb24gPT09ICdYJyA/IHRoaXMudGh1bWJYIDogdGhpcy50aHVtYlk7XG4gICAgY29uc3Qgc3VicyA9IHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnID8gdGhpcy5zdWJzWCA6IHRoaXMuc3Vic1k7XG4gICAgbGV0IGxlbmd0aFRodW1iVG9Qb2ludENsaWNrID0gMDtcblxuICAgIHN1YnMuYWRkKGdldERyYWdFdmVudEJ5RWxlbWVudCh7XG4gICAgICBlbGVtZW50TW91c2VEb3duOiBlbGVtZW50VGh1bWIsXG4gICAgICBmdW5jdGlvbk1vdXNlRG93bjogKG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5pc1Njcm9sbFRodW1iLnNldCh0cnVlKTtcbiAgICAgICAgdGhpcy5rZWVwRGlzcGxheVRodW1iLnNldCh0cnVlKTtcbiAgICAgICAgaWYgKHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnKSB7XG4gICAgICAgICAgbGVuZ3RoVGh1bWJUb1BvaW50Q2xpY2sgPSBlbGVtZW50VGh1bWIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIG1vdXNlRXZlbnQuY2xpZW50WDtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGVuZ3RoVGh1bWJUb1BvaW50Q2xpY2sgPSBlbGVtZW50VGh1bWIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIC0gbW91c2VFdmVudC5jbGllbnRZO1xuICAgICAgfSxcbiAgICAgIGZ1bmN0aW9uTW91c2VVcDogKG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5rZWVwRGlzcGxheVRodW1iLnNldChmYWxzZSk7XG4gICAgICAgIGxlbmd0aFRodW1iVG9Qb2ludENsaWNrID0gMDtcbiAgICAgICAgaWYgKCFjaGVja01vdXNlT3ZlckluQ29udGFpbmVyKG1vdXNlRXZlbnQsIHRoaXMuRWxlbWVudCkpIHtcbiAgICAgICAgICBlbGVtZW50VHJhY2suc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICAgIGVsZW1lbnRUcmFjay5zdHlsZS5vcGFjaXR5ID0gJzAnO1xuICAgICAgICB9XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNTY3JvbGxUaHVtYi5zZXQoZmFsc2UpO1xuICAgICAgICB9LCAyNTApO1xuICAgICAgfSxcbiAgICAgIG9uRGVzdHJveTogdGhpcy5vbkRlc3Ryb3lcbiAgICB9KS5zdWJzY3JpYmUoKG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlU2Nyb2xsUG9zaXRpb25CeVVzZXJBY3Rpb24oc2Nyb2xsRGlyZWN0aW9uLCBtb3VzZUV2ZW50LCAnYXV0bycsIGxlbmd0aFRodW1iVG9Qb2ludENsaWNrKVxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2Nyb2xsUG9zaXRpb25CeVVzZXJBY3Rpb24oc2Nyb2xsRGlyZWN0aW9uOiBUWVBFX1NDUk9MTF9ESVJFQ1RJT04sIGU6IE1vdXNlRXZlbnQsIGJlaGF2aW9yOiAnYXV0bycgfCAnc21vb3RoJywgbGVuZ3RoVGh1bWJUb1BvaW50Q2xpY2sgPSAwKSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoc2Nyb2xsRGlyZWN0aW9uID09PSAnWCcpIHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gdGhpcy5FbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgY29uc3QgY29udGVudFdpZHRoID0gKHRoaXMuZWxlbWVudENoZWNrU2Nyb2xsWCgpIHx8IHRoaXMuRWxlbWVudCkuc2Nyb2xsV2lkdGg7XG4gICAgICBjb25zdCB0aHVtYlBvc2l0aW9uID0gZS5jbGllbnRYIC0gdGhpcy5FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgKyBsZW5ndGhUaHVtYlRvUG9pbnRDbGljaztcbiAgICAgIGNvbnN0IHNjcm9sbExlZnQgPSAodGh1bWJQb3NpdGlvbiAvIChjb250YWluZXJXaWR0aCAtIHRoaXMudGh1bWJYLm9mZnNldFdpZHRoKSkgKiAoY29udGVudFdpZHRoIC0gY29udGFpbmVyV2lkdGgpO1xuXG4gICAgICB0aGlzLkVsZW1lbnQuc2Nyb2xsKHsgbGVmdDogc2Nyb2xsTGVmdCwgYmVoYXZpb3IgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbnRhaW5lckhlaWdodCA9IHRoaXMuRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgY29uc3QgY29udGVudEhlaWdodCA9ICh0aGlzLmVsZW1lbnRDaGVja1Njcm9sbFkoKSB8fCB0aGlzLkVsZW1lbnQpLnNjcm9sbEhlaWdodDtcbiAgICBjb25zdCB0aHVtYlBvc2l0aW9uID0gZS5jbGllbnRZIC0gdGhpcy5FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArIGxlbmd0aFRodW1iVG9Qb2ludENsaWNrO1xuICAgIGNvbnN0IHNjcm9sbFRvcCA9ICh0aHVtYlBvc2l0aW9uIC8gKGNvbnRhaW5lckhlaWdodCAtIHRoaXMudGh1bWJZLm9mZnNldEhlaWdodCkpICogKGNvbnRlbnRIZWlnaHQgLSBjb250YWluZXJIZWlnaHQpO1xuXG4gICAgdGhpcy5FbGVtZW50LnNjcm9sbCh7IHRvcDogc2Nyb2xsVG9wLCBiZWhhdmlvciB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2Nyb2xsYmFyU2l6ZShzY3JvbGxEaXJlY3Rpb246IFRZUEVfU0NST0xMX0RJUkVDVElPTikge1xuICAgIGlmIChzY3JvbGxEaXJlY3Rpb24gPT09ICdYJykge1xuICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSB0aGlzLkVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICBjb25zdCBjb250ZW50V2lkdGggPSAodGhpcy5lbGVtZW50Q2hlY2tTY3JvbGxYKCkgfHwgdGhpcy5FbGVtZW50KS5zY3JvbGxXaWR0aDtcbiAgICAgIGNvbnN0IHRodW1iV2lkdGggPSAoY29udGFpbmVyV2lkdGggLyBjb250ZW50V2lkdGgpICogKGNvbnRhaW5lcldpZHRoKTtcblxuICAgICAgdGhpcy50aHVtYlguc3R5bGUud2lkdGggPSBgJHtNYXRoLm1heCgyMCwgdGh1bWJXaWR0aCl9cHhgO1xuICAgICAgdGhpcy50cmFja1guc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIGlmIChjb250ZW50V2lkdGggPiBjb250YWluZXJXaWR0aCkge1xuICAgICAgICB0aGlzLnRyYWNrWC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlU2Nyb2xsYmFyUG9zaXRpb24oc2Nyb2xsRGlyZWN0aW9uKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRhaW5lckhlaWdodCA9IHRoaXMuRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgY29uc3QgY29udGVudEhlaWdodCA9ICh0aGlzLmVsZW1lbnRDaGVja1Njcm9sbFkoKSB8fCB0aGlzLkVsZW1lbnQpLnNjcm9sbEhlaWdodDtcbiAgICBjb25zdCB0aHVtYkhlaWdodCA9IChjb250YWluZXJIZWlnaHQgLyBjb250ZW50SGVpZ2h0KSAqIChjb250YWluZXJIZWlnaHQpO1xuXG4gICAgdGhpcy50aHVtYlkuc3R5bGUuaGVpZ2h0ID0gYCR7TWF0aC5tYXgoMjAsIHRodW1iSGVpZ2h0KX1weGA7XG4gICAgdGhpcy50cmFja1kuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICBpZiAoY29udGVudEhlaWdodCA+IGNvbnRhaW5lckhlaWdodCkge1xuICAgICAgdGhpcy50cmFja1kuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVTY3JvbGxiYXJQb3NpdGlvbignWScpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTY3JvbGxiYXJQb3NpdGlvbihzY3JvbGxEaXJlY3Rpb246IFRZUEVfU0NST0xMX0RJUkVDVElPTikge1xuICAgIGlmIChzY3JvbGxEaXJlY3Rpb24gPT09ICdYJykge1xuICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSB0aGlzLkVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICBjb25zdCBjb250ZW50V2lkdGggPSAodGhpcy5lbGVtZW50Q2hlY2tTY3JvbGxYKCkgfHwgdGhpcy5FbGVtZW50KS5zY3JvbGxXaWR0aDtcbiAgICAgIGNvbnN0IHNjcm9sbExlZnQgPSB0aGlzLkVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICAgIGNvbnN0IHRodW1iUG9zaXRpb24gPSAoc2Nyb2xsTGVmdCAvIChjb250ZW50V2lkdGggLSBjb250YWluZXJXaWR0aCkpICogKGNvbnRhaW5lcldpZHRoIC0gdGhpcy50aHVtYlgub2Zmc2V0V2lkdGgpO1xuXG4gICAgICB0aGlzLnRodW1iWC5zdHlsZS5sZWZ0ID0gYCR7dGh1bWJQb3NpdGlvbn1weGA7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29udGFpbmVySGVpZ2h0ID0gdGhpcy5FbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICBjb25zdCBjb250ZW50SGVpZ2h0ID0gKHRoaXMuZWxlbWVudENoZWNrU2Nyb2xsWSgpIHx8IHRoaXMuRWxlbWVudCkuc2Nyb2xsSGVpZ2h0O1xuICAgIGNvbnN0IHNjcm9sbFRvcCA9IHRoaXMuRWxlbWVudC5zY3JvbGxUb3A7XG4gICAgY29uc3QgdGh1bWJQb3NpdGlvbiA9IChzY3JvbGxUb3AgLyAoY29udGVudEhlaWdodCAtIGNvbnRhaW5lckhlaWdodCkpICogKGNvbnRhaW5lckhlaWdodCAtIHRoaXMudGh1bWJZLm9mZnNldEhlaWdodCk7XG5cbiAgICB0aGlzLnRodW1iWS5zdHlsZS50b3AgPSBgJHt0aHVtYlBvc2l0aW9ufXB4YDtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGl2Q29udGFpbmVyLnJlbW92ZSgpO1xuICAgIHRoaXMuc3Vic1gudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnN1YnNZLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkRlc3Ryb3kubmV4dCgpO1xuICAgIHRoaXMub25EZXN0cm95LmNvbXBsZXRlKCk7XG4gIH1cblxufSJdfQ==
|
|
376
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLW92ZXJsYXkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL3Njcm9sbC1vdmVybGF5L3NyYy9zY3JvbGwtb3ZlcmxheS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFhLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEksT0FBTyxFQUFFLHlCQUF5QixFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFPN0YsTUFBTSxPQUFPLHNDQUFzQztJQUNqRCxtQkFBbUI7SUFDRixNQUFNLEdBQUcsUUFBUSxDQUNoQyxHQUFHLEVBQUUsQ0FBQzs7NEJBRWtCLElBQUksQ0FBQyxjQUFjLEVBQUU7OzsyQkFHdEIsSUFBSSxDQUFDLG1CQUFtQixFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MkJBMkIxQixJQUFJLENBQUMsZ0JBQWdCLEVBQUU7OzsyQkFHdkIsSUFBSSxDQUFDLHFCQUFxQixFQUFFOzs7OzhCQUl6QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDO2tCQUN2QyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7Ozs7Ozs7OzZCQVFaLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLENBQUM7aUJBQ3ZDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTs7Ozs7O0dBTXJDLEVBQ0MsRUFBRSxDQUNILENBQUM7SUFDTSxhQUFhLEdBQUcs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LENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsR0FBRyxhQUFhLElBQUksQ0FBQztZQUU5QyxPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO1FBQ2xELE1BQU0sYUFBYSxHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQztRQUNoRixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUN6QyxNQUFNLGFBQWEsR0FBRyxDQUFDLFNBQVMsR0FBRyxDQUFDLGFBQWEsR0FBRyxlQUFlLENBQUMsQ0FBQyxHQUFHLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFckgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsYUFBYSxJQUFJLENBQUM7SUFDL0MsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUIsQ0FBQzt3R0FsYlUsc0NBQXNDOzRGQUF0QyxzQ0FBc0M7OzRGQUF0QyxzQ0FBc0M7a0JBTGxELFNBQVM7bUJBQUM7b0JBQ1QsOERBQThEO29CQUM5RCxRQUFRLEVBQUUsMENBQTBDO29CQUNwRCxVQUFVLEVBQUUsSUFBSTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgUmVuZGVyZXIyLCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QsIGlucHV0LCBvdXRwdXQsIHNpZ25hbCwgdW50cmFja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjaGVja01vdXNlT3ZlckluQ29udGFpbmVyLCBnZXREcmFnRXZlbnRCeUVsZW1lbnQgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGZyb21FdmVudCwgaW50ZXJ2YWwsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElTY3JvbGxPdmVybGF5T3B0aW9ucywgVFlQRV9TQ1JPTExfRElSRUNUSU9OIH0gZnJvbSAnLi9zY3JvbGwuaW50ZXJmYWNlJztcbkBEaXJlY3RpdmUoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1zZWxlY3RvclxuICBzZWxlY3RvcjogJ1tMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZV0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIC8vICNyZWdpb24gUFJPUEVSVFlcbiAgcHJpdmF0ZSByZWFkb25seSBzdHlsZXMgPSBjb21wdXRlZChcbiAgICAoKSA9PiBgXG4gICAgICAuc2Nyb2xsYmFyLXRyYWNre1xuICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjoke3RoaXMuc2Nyb2xsYmFyQ29sb3IoKX07XG4gICAgICB9XG4gICAgICAuc2Nyb2xsYmFyLXRyYWNrOmhvdmVye1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiR7dGhpcy5zY3JvbGxiYXJIb3ZlckNvbG9yKCl9O1xuICAgICAgfVxuICAgICAgLnNjcm9sbGJhci10cmFjay1YIHtcbiAgICAgICAgd2lkdGg6MTAwJTtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBib3R0b206IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgZWFzZSwgdmlzaWJpbGl0eSAwLjNzIGVhc2U7XG4gICAgICB9XG5cbiAgICAgIC5zY3JvbGxiYXItdHJhY2stWSB7XG4gICAgICAgIGhlaWdodDoxMDAlO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgZWFzZSwgdmlzaWJpbGl0eSAwLjNzIGVhc2U7XG4gICAgICB9XG5cbiAgICAgIC5zY3JvbGxiYXItdGh1bWJ7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6JHt0aGlzLnNjcm9sbFRodW1iQ29sb3IoKX07XG4gICAgICB9XG4gICAgICAuc2Nyb2xsYmFyLXRodW1iOmhvdmVye1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiR7dGhpcy5zY3JvbGxUaHVtYkhvdmVyQ29sb3IoKX07XG4gICAgICB9XG5cbiAgICAgIC5zY3JvbGxiYXItdGh1bWItWCB7XG4gICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gJHt0aGlzLnNjcm9sbGJhclBhZGRpbmcoKSAqIDJ9cHgpO1xuICAgICAgICBib3R0b206ICR7dGhpcy5zY3JvbGxiYXJQYWRkaW5nKCl9cHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgY3Vyc29yOiBncmFiYmluZztcbiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjNzO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB9XG5cbiAgICAgIC5zY3JvbGxiYXItdGh1bWItWSB7XG4gICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAke3RoaXMuc2Nyb2xsYmFyUGFkZGluZygpICogMn1weCk7XG4gICAgICAgIHJpZ2h0OiAke3RoaXMuc2Nyb2xsYmFyUGFkZGluZygpfXB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgIGN1cnNvcjogZ3JhYmJpbmc7XG4gICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4zcztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgfVxuICBgLFxuICAgIHt9XG4gICk7XG4gIHByaXZhdGUgaXNTY3JvbGxUaHVtYiA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUga2VlcERpc3BsYXlUaHVtYiA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgc3Vic1ggPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgc3Vic1kgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgc2Nyb2xsYmFyV2lkdGggPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKT8uc2Nyb2xsYmFyV2lkdGggPz8gMTApOyAvLyBDaGnhu4F1IHLhu5luZyB0aGFuaCBjdeG7mW5cbiAgcHJpdmF0ZSBzY3JvbGxiYXJQYWRkaW5nID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcHRpb25zKCk/LnNjcm9sbGJhclBhZGRpbmcgPz8gMik7IC8vIENoaeG7gXUgcuG7mW5nIHRoYW5oIGN14buZblxuICBwcml2YXRlIHNjcm9sbGJhckNvbG9yID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcHRpb25zKCk/LnNjcm9sbGJhckNvbG9yID8/ICcnKTtcbiAgcHJpdmF0ZSBzY3JvbGxiYXJIb3ZlckNvbG9yID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcHRpb25zKCk/LnNjcm9sbGJhckNvbG9yID8/ICcjQ0REMEQ2NDAnKTtcbiAgcHJpdmF0ZSBzY3JvbGxUaHVtYkNvbG9yID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcHRpb25zKCk/LnNjcm9sbFRodW1iQ29sb3IgPz8gJyNDREQwRDYnKTtcbiAgcHJpdmF0ZSBzY3JvbGxUaHVtYkhvdmVyQ29sb3IgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKT8uc2Nyb2xsVGh1bWJIb3ZlckNvbG9yID8/ICcjOUNBMkFEJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGl2Q29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHJhY2tYOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRodW1iWDogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0cmFja1k6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGh1bWJZOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBwcml2YXRlIHJlYWRvbmx5IG9uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgLy8gI3JlZ2lvbiBJTlBVVFxuICByZWFkb25seSBkZWJ1Z01vZGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGlnbm9yZUluaXQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGNsYXNzQ29udGFpbmVyID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCcnLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyAnJyB9KTtcbiAgcmVhZG9ubHkgb3B0aW9ucyA9IGlucHV0PElTY3JvbGxPdmVybGF5T3B0aW9ucyB8IHVuZGVmaW5lZD4oT2JqZWN0LmFzc2lnbih7fSkpO1xuICByZWFkb25seSBlbGVtZW50Q2hlY2tTY3JvbGxYID0gaW5wdXQ8SFRNTEVsZW1lbnQ+KCk7XG4gIHJlYWRvbmx5IGVsZW1lbnRDaGVja1Njcm9sbFkgPSBpbnB1dDxIVE1MRWxlbWVudD4oKTtcbiAgcmVhZG9ubHkgZWxlbWVudFNjcm9sbCA9IGlucHV0PEhUTUxFbGVtZW50PigpO1xuXG4gIC8vICNyZWdpb24gT1VUUFVUXG4gIHJlYWRvbmx5IG91dFNjcm9sbCA9IG91dHB1dDxFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0U2Nyb2xsWCA9IG91dHB1dDxFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0U2Nyb2xsWSA9IG91dHB1dDxFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0U2Nyb2xsVG9wID0gb3V0cHV0PEV2ZW50PigpO1xuICByZWFkb25seSBvdXRTY3JvbGxCb3R0b20gPSBvdXRwdXQ8RXZlbnQ+KCk7XG5cbiAgLy8gI3JlZ2lvbiBJTkpFQ1RcbiAgcHJpdmF0ZSBlbGVtZW50ID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICBwcml2YXRlIHJlbmRlcjIgPSBpbmplY3QoUmVuZGVyZXIyKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaWdub3JlSW5pdCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMoKTtcbiAgICAgIHRoaXMuZGl2Q29udGFpbmVyLmNsYXNzTmFtZSA9ICcnO1xuICAgICAgdGhpcy5jbGFzc0NvbnRhaW5lcigpXG4gICAgICAgID8uc3BsaXQoJyAnKVxuICAgICAgICAuZm9yRWFjaCgoY2xhc3NOYW1lKSA9PiB7XG4gICAgICAgICAgaWYgKCFjbGFzc05hbWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5kaXZDb250YWluZXIuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpO1xuICAgICAgICB9KTtcblxuICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgdGhpcy5FbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoJ292ZXJmbG93LWhpZGRlbicsIG9wdGlvbnM/LnNjcm9sbFggPT09ICdoaWRkZW4nICYmIG9wdGlvbnM/LnNjcm9sbFkgPT09ICdoaWRkZW4nKTtcbiAgICAgICAgaWYgKG9wdGlvbnM/LnNjcm9sbFggIT09ICdoaWRkZW4nKSB7XG4gICAgICAgICAgdGhpcy5zdWJzWC51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIHRoaXMudHJhY2tYLmNsYXNzTmFtZSA9ICcnO1xuICAgICAgICAgIHRoaXMudGh1bWJYLmNsYXNzTmFtZSA9ICcnO1xuICAgICAgICAgIHRoaXMudHJhY2tYLnN0eWxlLmhlaWdodCA9IGAke3RoaXMuc2Nyb2xsYmFyV2lkdGgoKX1weGA7XG4gICAgICAgICAgdGhpcy5jcmVhdGVTY3JvbGxiYXIoJ1gnLCB0aGlzLnRyYWNrWCwgdGhpcy50aHVtYlgpO1xuICAgICAgICAgIHRoaXMuYmluZEV2ZW50c1Njcm9sbEJhcignWCcsIHRoaXMudHJhY2tYKTtcblxuICAgICAgICAgIHRoaXMuaGFuZGxlckRyYWdBbmREcm9wVGh1bWIoJ1gnKTtcbiAgICAgICAgICB0aGlzLmhhbmRsZXJDbGlja1RyYWNrKCdYJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucz8uc2Nyb2xsWSAhPT0gJ2hpZGRlbicpIHtcbiAgICAgICAgICB0aGlzLnRyYWNrWS5jbGFzc05hbWUgPSAnJztcbiAgICAgICAgICB0aGlzLnRodW1iWS5jbGFzc05hbWUgPSAnJztcbiAgICAgICAgICB0aGlzLnRyYWNrWS5zdHlsZS53aWR0aCA9IGAke3RoaXMuc2Nyb2xsYmFyV2lkdGgoKX1weGA7XG4gICAgICAgICAgdGhpcy5zdWJzWS51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIHRoaXMuY3JlYXRlU2Nyb2xsYmFyKCdZJywgdGhpcy50cmFja1ksIHRoaXMudGh1bWJZKTtcbiAgICAgICAgICB0aGlzLmJpbmRFdmVudHNTY3JvbGxCYXIoJ1knLCB0aGlzLnRyYWNrWSk7XG5cbiAgICAgICAgICB0aGlzLmhhbmRsZXJEcmFnQW5kRHJvcFRodW1iKCdZJyk7XG4gICAgICAgICAgdGhpcy5oYW5kbGVyQ2xpY2tUcmFjaygnWScpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vICNyZWdpb24gRlVOQ1RJT05TXG4gIHByaXZhdGUgZ2V0IEVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRTY3JvbGwoKSB8fCB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU2Nyb2xsYmFyKHNjcm9sbERpcmVjdGlvbjogVFlQRV9TQ1JPTExfRElSRUNUSU9OLCB0cmFja0VsOiBIVE1MRWxlbWVudCwgdGh1bWJFbDogSFRNTEVsZW1lbnQpIHtcbiAgICBjb25zdCBpZFN0eWxlVGFnID0gJyNpZC1zdHlsZS10YWctY3VzdG9tLXNjcm9sbC1vdmVybGF5JztcbiAgICBjb25zdCBzdHlsZUVsQ3VzdG9tU2Nyb2xsT3ZlcmxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkU3R5bGVUYWcpO1xuXG4gICAgaWYgKCFzdHlsZUVsQ3VzdG9tU2Nyb2xsT3ZlcmxheSkge1xuICAgICAgY29uc3Qgc3R5bGVFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICBzdHlsZUVsLnNldEF0dHJpYnV0ZSgnaWQnLCBpZFN0eWxlVGFnKTtcbiAgICAgIHN0eWxlRWwuaW5uZXJIVE1MID0gdGhpcy5zdHlsZXMoKTtcbiAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kKHN0eWxlRWwpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0eWxlc1Byb3BlcnR5ID0ge1xuICAgICAgJ2JveC1zaXppbmcnOiAnYm9yZGVyLWJveCcsXG4gICAgICAnc2Nyb2xsYmFyLXdpZHRoJzogJ25vbmUnLFxuICAgICAgJ3Njcm9sbGJhci1jb2xvcic6ICd0cmFuc3BhcmVudCB0cmFuc3BhcmVudCcsXG4gICAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgICAnb3ZlcmZsb3cteCc6IGAke3RoaXMub3B0aW9ucygpPy5zY3JvbGxYIHx8ICdzY3JvbGwnfWAsXG4gICAgICAnb3ZlcmZsb3cteSc6IGAke3RoaXMub3B0aW9ucygpPy5zY3JvbGxZIHx8ICdzY3JvbGwnfWAsXG4gICAgfSBhcyBhbnk7XG5cbiAgICBPYmplY3Qua2V5cyhzdHlsZXNQcm9wZXJ0eSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICB0aGlzLnJlbmRlcjIuc2V0U3R5bGUodGhpcy5FbGVtZW50LCBrZXksIHN0eWxlc1Byb3BlcnR5W2tleV0sIDEpO1xuICAgIH0pO1xuXG4gICAgdHJhY2tFbC5jbGFzc0xpc3QuYWRkKGBzY3JvbGxiYXItdHJhY2tgKTtcbiAgICB0cmFja0VsLmNsYXNzTGlzdC5hZGQoYHNjcm9sbGJhci10cmFjay0ke3Njcm9sbERpcmVjdGlvbn1gKTtcblxuICAgIHRodW1iRWwuY2xhc3NMaXN0LmFkZChgc2Nyb2xsYmFyLXRodW1iYCk7XG4gICAgdGh1bWJFbC5jbGFzc0xpc3QuYWRkKGBzY3JvbGxiYXItdGh1bWItJHtzY3JvbGxEaXJlY3Rpb259YCk7XG4gICAgdHJhY2tFbC5hcHBlbmRDaGlsZCh0aHVtYkVsKTtcbiAgICBpZiAodGhpcy5FbGVtZW50LmNsYXNzTmFtZSkge1xuICAgICAgdGhpcy5FbGVtZW50LmNsYXNzTmFtZS5zcGxpdCgnICcpLmZvckVhY2goKGNsYXNzTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjbGFzc05hbWUgJiZcbiAgICAgICAgICAoWyd3LWZ1bGwnLCAndy1zY3JlZW4nLCAnaC1mdWxsJywgJ2gtc2NyZWVuJywgJ3Nocmluay0wJ10uaW5jbHVkZXMoY2xhc3NOYW1lKSB8fCBjbGFzc05hbWUuaW5jbHVkZXMoJ21pbi1oLScpIHx8IGNsYXNzTmFtZS5pbmNsdWRlcygnbWluLXctJykgfHwgL14oIT8pKGh8dyktXFxbWzAtOV0rcHhcXF0kLy50ZXN0KGNsYXNzTmFtZSkpICYmXG4gICAgICAgICAgIXRoaXMuZGl2Q29udGFpbmVyLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuZGl2Q29udGFpbmVyLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoIXRoaXMuRWxlbWVudC5jbGFzc05hbWUuaW5jbHVkZXMoJ21pbi1oLScpKSB7XG4gICAgICAgIHRoaXMuZGl2Q29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ21pbi1oLTAnKTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5FbGVtZW50LmNsYXNzTmFtZS5pbmNsdWRlcygnbWluLXctJykpIHtcbiAgICAgICAgdGhpcy5kaXZDb250YWluZXIuY2xhc3NMaXN0LmFkZCgnbWluLXctMCcpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmRpdkNvbnRhaW5lci5hcHBlbmRDaGlsZCh0cmFja0VsKTtcblxuICAgIGlmICghdGhpcy5kaXZDb250YWluZXIuc3R5bGUucG9zaXRpb24pIHtcbiAgICAgIHRoaXMuRWxlbWVudC5wYXJlbnRFbGVtZW50Py5pbnNlcnRCZWZvcmUodGhpcy5kaXZDb250YWluZXIsIHRoaXMuRWxlbWVudCk7XG4gICAgICB0aGlzLmRpdkNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XG4gICAgfVxuICAgIHRoaXMuZGl2Q29udGFpbmVyLmFwcGVuZCh0aGlzLkVsZW1lbnQpO1xuICAgIHRoaXMudXBkYXRlU2Nyb2xsYmFyU2l6ZShzY3JvbGxEaXJlY3Rpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBiaW5kRXZlbnRzU2Nyb2xsQmFyKHNjcm9sbERpcmVjdGlvbjogVFlQRV9TQ1JPTExfRElSRUNUSU9OLCB0cmFja0VsOiBIVE1MRWxlbWVudCkge1xuICAgIGxldCBzY3JvbGxMZWZ0ID0gdGhpcy5FbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgbGV0IHNjcm9sbFRvcCA9IHRoaXMuRWxlbWVudC5zY3JvbGxUb3A7XG4gICAgY29uc3Qgc3ViczogU3Vic2NyaXB0aW9uID0gZnJvbUV2ZW50PEV2ZW50Pih0aGlzLkVsZW1lbnQsICdzY3JvbGwnKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLkVsZW1lbnQ7XG5cbiAgICAgICAgICB0aGlzLm91dFNjcm9sbC5lbWl0KGV2ZW50KTtcbiAgICAgICAgICBpZiAoc2Nyb2xsRGlyZWN0aW9uID09PSAnWCcpIHtcbiAgICAgICAgICAgIGlmICh0YXJnZXQuc2Nyb2xsTGVmdCAmJiB0YXJnZXQuc2Nyb2xsTGVmdCArIHRhcmdldC5vZmZzZXRXaWR0aCA+PSB0YXJnZXQuc2Nyb2xsV2lkdGgpIHtcbiAgICAgICAgICAgICAgdGFyZ2V0LnNjcm9sbExlZnQgPSB0YXJnZXQuc2Nyb2xsV2lkdGggLSB0YXJnZXQub2Zmc2V0V2lkdGggLSAodGFyZ2V0Lm9mZnNldFdpZHRoIC0gdGFyZ2V0LmNsaWVudFdpZHRoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRhcmdldC5zY3JvbGxMZWZ0ICE9PSBzY3JvbGxMZWZ0KSB7XG4gICAgICAgICAgICAgIHRoaXMub3V0U2Nyb2xsWC5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNjcm9sbExlZnQgPSB0YXJnZXQuc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsYmFyUG9zaXRpb24oc2Nyb2xsRGlyZWN0aW9uKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0YXJnZXQuc2Nyb2xsVG9wID09PSBzY3JvbGxUb3ApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxiYXJQb3NpdGlvbihzY3JvbGxEaXJlY3Rpb24pO1xuICAgICAgICAgIHNjcm9sbFRvcCA9IHRhcmdldC5zY3JvbGxUb3A7XG4gICAgICAgICAgdGhpcy5vdXRTY3JvbGxZLmVtaXQoZXZlbnQpO1xuXG4gICAgICAgICAgaWYgKHRhcmdldC5zY3JvbGxUb3AgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm91dFNjcm9sbFRvcC5lbWl0KGV2ZW50KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGFyZ2V0LnNjcm9sbEhlaWdodCA8PSB0YXJnZXQuc2Nyb2xsVG9wICsgdGFyZ2V0Lm9mZnNldEhlaWdodCArIDMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm91dFNjcm9sbEJvdHRvbS5lbWl0KGV2ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICBzdWJzLmFkZChcbiAgICAgIGZyb21FdmVudChkb2N1bWVudCwgJ3Jlc2l6ZScpXG4gICAgICAgIC5waXBlKHRhcCh0aGlzLnVwZGF0ZVNjcm9sbGJhclNpemUuYmluZCh0aGlzLCBzY3JvbGxEaXJlY3Rpb24pKSwgdGFrZVVudGlsKHRoaXMub25EZXN0cm95KSlcbiAgICAgICAgLnN1YnNjcmliZSgpXG4gICAgKTtcblxuICAgIGNvbnN0IG1vdXNlTGVhdmUgPSBmcm9tRXZlbnQodGhpcy5kaXZDb250YWluZXIsICdtb3VzZWxlYXZlJyk7XG4gICAgY29uc3QgbW91c2VlbnRlciA9IGZyb21FdmVudCh0aGlzLmRpdkNvbnRhaW5lciwgJ21vdXNlZW50ZXInKTtcblxuICAgIHN1YnMuYWRkKFxuICAgICAgbW91c2VlbnRlclxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKChzY3JvbGxEaXJlY3Rpb24gPT09ICdYJyAmJiAhdGhpcy5vcHRpb25zKCk/LnNjcm9sbFhPcGFjaXR5MCkgfHwgKHNjcm9sbERpcmVjdGlvbiA9PT0gJ1knICYmICF0aGlzLm9wdGlvbnMoKT8uc2Nyb2xsWU9wYWNpdHkwKSkge1xuICAgICAgICAgICAgICB0cmFja0VsLnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XG4gICAgICAgICAgICAgIHRyYWNrRWwuc3R5bGUub3BhY2l0eSA9ICcxJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsYmFyU2l6ZShzY3JvbGxEaXJlY3Rpb24pO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiBpbnRlcnZhbCgxMDAwKS5waXBlKHRha2VVbnRpbChtb3VzZUxlYXZlKSkpLFxuICAgICAgICAgIHRhcCh0aGlzLnVwZGF0ZVNjcm9sbGJhclNpemUuYmluZCh0aGlzLCBzY3JvbGxEaXJlY3Rpb24pKSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpXG4gICAgKTtcblxuICAgIHN1YnMuYWRkKFxuICAgICAgbW91c2VMZWF2ZVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMua2VlcERpc3BsYXlUaHVtYigpKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyYWNrRWwuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICAgICAgdHJhY2tFbC5zdHlsZS5vcGFjaXR5ID0gJzAnO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKClcbiAgICApO1xuXG4gICAgaWYgKHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnKSB7XG4gICAgICB0aGlzLnN1YnNYID0gc3VicztcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzY3JvbGxEaXJlY3Rpb24gPT09ICdZJykge1xuICAgICAgdGhpcy5zdWJzWSA9IHN1YnM7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNsaWNrVHJhY2soc2Nyb2xsRGlyZWN0aW9uOiBUWVBFX1NDUk9MTF9ESVJFQ1RJT04pIHtcbiAgICBjb25zdCBlbGVtZW50VHJhY2sgPSBzY3JvbGxEaXJlY3Rpb24gPT09ICdYJyA/IHRoaXMudHJhY2tYIDogdGhpcy50cmFja1k7XG4gICAgY29uc3QgZWxlbWVudFRodW1iID0gc2Nyb2xsRGlyZWN0aW9uID09PSAnWCcgPyB0aGlzLnRodW1iWCA6IHRoaXMudGh1bWJZO1xuICAgIGNvbnN0IHN1YnMgPSBzY3JvbGxEaXJlY3Rpb24gPT09ICdYJyA/IHRoaXMuc3Vic1ggOiB0aGlzLnN1YnNZO1xuXG4gICAgc3Vicy5hZGQoXG4gICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZWxlbWVudFRyYWNrLCAnY2xpY2snKS5zdWJzY3JpYmUoKGUpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNTY3JvbGxUaHVtYigpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoc2Nyb2xsRGlyZWN0aW9uID09PSAnWCcgJiYgZS5jbGllbnRYIDwgZWxlbWVudFRodW1iLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQpIHx8IChzY3JvbGxEaXJlY3Rpb24gPT09ICdZJyAmJiBlLmNsaWVudFkgPCBlbGVtZW50VGh1bWIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wKSkge1xuICAgICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsUG9zaXRpb25CeVVzZXJBY3Rpb24oc2Nyb2xsRGlyZWN0aW9uLCBlLCAnc21vb3RoJywgMCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxQb3NpdGlvbkJ5VXNlckFjdGlvbihzY3JvbGxEaXJlY3Rpb24sIGUsICdzbW9vdGgnLCAtMSAqIGVsZW1lbnRUaHVtYi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsUG9zaXRpb25CeVVzZXJBY3Rpb24oc2Nyb2xsRGlyZWN0aW9uLCBlLCAnc21vb3RoJywgLTEgKiBlbGVtZW50VGh1bWIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRHJhZ0FuZERyb3BUaHVtYihzY3JvbGxEaXJlY3Rpb246IFRZUEVfU0NST0xMX0RJUkVDVElPTikge1xuICAgIGNvbnN0IGVsZW1lbnRUcmFjayA9IHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnID8gdGhpcy50cmFja1ggOiB0aGlzLnRyYWNrWTtcbiAgICBjb25zdCBlbGVtZW50VGh1bWIgPSBzY3JvbGxEaXJlY3Rpb24gPT09ICdYJyA/IHRoaXMudGh1bWJYIDogdGhpcy50aHVtYlk7XG4gICAgY29uc3Qgc3VicyA9IHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnID8gdGhpcy5zdWJzWCA6IHRoaXMuc3Vic1k7XG4gICAgbGV0IGxlbmd0aFRodW1iVG9Qb2ludENsaWNrID0gMDtcblxuICAgIHN1YnMuYWRkKFxuICAgICAgZ2V0RHJhZ0V2ZW50QnlFbGVtZW50KHtcbiAgICAgICAgZWxlbWVudE1vdXNlRG93bjogZWxlbWVudFRodW1iLFxuICAgICAgICBmdW5jdGlvbk1vdXNlRG93bjogKG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICB0aGlzLmlzU2Nyb2xsVGh1bWIuc2V0KHRydWUpO1xuICAgICAgICAgIHRoaXMua2VlcERpc3BsYXlUaHVtYi5zZXQodHJ1ZSk7XG4gICAgICAgICAgaWYgKHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnKSB7XG4gICAgICAgICAgICBsZW5ndGhUaHVtYlRvUG9pbnRDbGljayA9IGVsZW1lbnRUaHVtYi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gbW91c2VFdmVudC5jbGllbnRYO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZW5ndGhUaHVtYlRvUG9pbnRDbGljayA9IGVsZW1lbnRUaHVtYi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSBtb3VzZUV2ZW50LmNsaWVudFk7XG4gICAgICAgIH0sXG4gICAgICAgIGZ1bmN0aW9uTW91c2VVcDogKG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICB0aGlzLmtlZXBEaXNwbGF5VGh1bWIuc2V0KGZhbHNlKTtcbiAgICAgICAgICBsZW5ndGhUaHVtYlRvUG9pbnRDbGljayA9IDA7XG4gICAgICAgICAgaWYgKCFjaGVja01vdXNlT3ZlckluQ29udGFpbmVyKG1vdXNlRXZlbnQsIHRoaXMuRWxlbWVudCkpIHtcbiAgICAgICAgICAgIGVsZW1lbnRUcmFjay5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICAgICAgICBlbGVtZW50VHJhY2suc3R5bGUub3BhY2l0eSA9ICcwJztcbiAgICAgICAgICB9XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzU2Nyb2xsVGh1bWIuc2V0KGZhbHNlKTtcbiAgICAgICAgICB9LCAyNTApO1xuICAgICAgICB9LFxuICAgICAgICBvbkRlc3Ryb3k6IHRoaXMub25EZXN0cm95LFxuICAgICAgfSkuc3Vic2NyaWJlKChtb3VzZUV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsUG9zaXRpb25CeVVzZXJBY3Rpb24oc2Nyb2xsRGlyZWN0aW9uLCBtb3VzZUV2ZW50LCAnYXV0bycsIGxlbmd0aFRodW1iVG9Qb2ludENsaWNrKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2Nyb2xsUG9zaXRpb25CeVVzZXJBY3Rpb24oc2Nyb2xsRGlyZWN0aW9uOiBUWVBFX1NDUk9MTF9ESVJFQ1RJT04sIGU6IE1vdXNlRXZlbnQsIGJlaGF2aW9yOiAnYXV0bycgfCAnc21vb3RoJywgbGVuZ3RoVGh1bWJUb1BvaW50Q2xpY2sgPSAwKSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoc2Nyb2xsRGlyZWN0aW9uID09PSAnWCcpIHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gdGhpcy5FbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgY29uc3QgY29udGVudFdpZHRoID0gKHRoaXMuZWxlbWVudENoZWNrU2Nyb2xsWCgpIHx8IHRoaXMuRWxlbWVudCkuc2Nyb2xsV2lkdGg7XG4gICAgICBjb25zdCB0aHVtYlBvc2l0aW9uID0gZS5jbGllbnRYIC0gdGhpcy5FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgKyBsZW5ndGhUaHVtYlRvUG9pbnRDbGljaztcbiAgICAgIGNvbnN0IHNjcm9sbExlZnQgPSAodGh1bWJQb3NpdGlvbiAvIChjb250YWluZXJXaWR0aCAtIHRoaXMudGh1bWJYLm9mZnNldFdpZHRoKSkgKiAoY29udGVudFdpZHRoIC0gY29udGFpbmVyV2lkdGgpO1xuXG4gICAgICB0aGlzLkVsZW1lbnQuc2Nyb2xsKHsgbGVmdDogc2Nyb2xsTGVmdCwgYmVoYXZpb3IgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbnRhaW5lckhlaWdodCA9IHRoaXMuRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgY29uc3QgY29udGVudEhlaWdodCA9ICh0aGlzLmVsZW1lbnRDaGVja1Njcm9sbFkoKSB8fCB0aGlzLkVsZW1lbnQpLnNjcm9sbEhlaWdodDtcbiAgICBjb25zdCB0aHVtYlBvc2l0aW9uID0gZS5jbGllbnRZIC0gdGhpcy5FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArIGxlbmd0aFRodW1iVG9Qb2ludENsaWNrO1xuICAgIGNvbnN0IHNjcm9sbFRvcCA9ICh0aHVtYlBvc2l0aW9uIC8gKGNvbnRhaW5lckhlaWdodCAtIHRoaXMudGh1bWJZLm9mZnNldEhlaWdodCkpICogKGNvbnRlbnRIZWlnaHQgLSBjb250YWluZXJIZWlnaHQpO1xuXG4gICAgdGhpcy5FbGVtZW50LnNjcm9sbCh7IHRvcDogc2Nyb2xsVG9wLCBiZWhhdmlvciB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2Nyb2xsYmFyU2l6ZShzY3JvbGxEaXJlY3Rpb246IFRZUEVfU0NST0xMX0RJUkVDVElPTikge1xuICAgIGlmIChzY3JvbGxEaXJlY3Rpb24gPT09ICdYJykge1xuICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSB0aGlzLkVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICBjb25zdCBjb250ZW50V2lkdGggPSAodGhpcy5lbGVtZW50Q2hlY2tTY3JvbGxYKCkgfHwgdGhpcy5FbGVtZW50KS5zY3JvbGxXaWR0aDtcbiAgICAgIGNvbnN0IHRodW1iV2lkdGggPSAoY29udGFpbmVyV2lkdGggLyBjb250ZW50V2lkdGgpICogY29udGFpbmVyV2lkdGg7XG5cbiAgICAgIHRoaXMudGh1bWJYLnN0eWxlLndpZHRoID0gYCR7TWF0aC5tYXgoMjAsIHRodW1iV2lkdGgpfXB4YDtcbiAgICAgIHRoaXMudHJhY2tYLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICBpZiAoY29udGVudFdpZHRoID4gY29udGFpbmVyV2lkdGgpIHtcbiAgICAgICAgdGhpcy50cmFja1guc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVNjcm9sbGJhclBvc2l0aW9uKHNjcm9sbERpcmVjdGlvbik7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb250YWluZXJIZWlnaHQgPSB0aGlzLkVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgIGNvbnN0IGNvbnRlbnRIZWlnaHQgPSAodGhpcy5lbGVtZW50Q2hlY2tTY3JvbGxZKCkgfHwgdGhpcy5FbGVtZW50KS5zY3JvbGxIZWlnaHQ7XG4gICAgY29uc3QgdGh1bWJIZWlnaHQgPSAoY29udGFpbmVySGVpZ2h0IC8gY29udGVudEhlaWdodCkgKiBjb250YWluZXJIZWlnaHQ7XG5cbiAgICB0aGlzLnRodW1iWS5zdHlsZS5oZWlnaHQgPSBgJHtNYXRoLm1heCgyMCwgdGh1bWJIZWlnaHQpfXB4YDtcbiAgICB0aGlzLnRyYWNrWS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIGlmIChjb250ZW50SGVpZ2h0ID4gY29udGFpbmVySGVpZ2h0KSB7XG4gICAgICB0aGlzLnRyYWNrWS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVNjcm9sbGJhclBvc2l0aW9uKCdZJyk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNjcm9sbGJhclBvc2l0aW9uKHNjcm9sbERpcmVjdGlvbjogVFlQRV9TQ1JPTExfRElSRUNUSU9OKSB7XG4gICAgaWYgKHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnKSB7XG4gICAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IHRoaXMuRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgIGNvbnN0IGNvbnRlbnRXaWR0aCA9ICh0aGlzLmVsZW1lbnRDaGVja1Njcm9sbFgoKSB8fCB0aGlzLkVsZW1lbnQpLnNjcm9sbFdpZHRoO1xuICAgICAgY29uc3Qgc2Nyb2xsTGVmdCA9IHRoaXMuRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgICAgY29uc3QgdGh1bWJQb3NpdGlvbiA9IChzY3JvbGxMZWZ0IC8gKGNvbnRlbnRXaWR0aCAtIGNvbnRhaW5lcldpZHRoKSkgKiAoY29udGFpbmVyV2lkdGggLSB0aGlzLnRodW1iWC5vZmZzZXRXaWR0aCk7XG5cbiAgICAgIHRoaXMudGh1bWJYLnN0eWxlLmxlZnQgPSBgJHt0aHVtYlBvc2l0aW9ufXB4YDtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb250YWluZXJIZWlnaHQgPSB0aGlzLkVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgIGNvbnN0IGNvbnRlbnRIZWlnaHQgPSAodGhpcy5lbGVtZW50Q2hlY2tTY3JvbGxZKCkgfHwgdGhpcy5FbGVtZW50KS5zY3JvbGxIZWlnaHQ7XG4gICAgY29uc3Qgc2Nyb2xsVG9wID0gdGhpcy5FbGVtZW50LnNjcm9sbFRvcDtcbiAgICBjb25zdCB0aHVtYlBvc2l0aW9uID0gKHNjcm9sbFRvcCAvIChjb250ZW50SGVpZ2h0IC0gY29udGFpbmVySGVpZ2h0KSkgKiAoY29udGFpbmVySGVpZ2h0IC0gdGhpcy50aHVtYlkub2Zmc2V0SGVpZ2h0KTtcblxuICAgIHRoaXMudGh1bWJZLnN0eWxlLnRvcCA9IGAke3RodW1iUG9zaXRpb259cHhgO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kaXZDb250YWluZXIucmVtb3ZlKCk7XG4gICAgdGhpcy5zdWJzWC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuc3Vic1kudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uRGVzdHJveS5uZXh0KCk7XG4gICAgdGhpcy5vbkRlc3Ryb3kuY29tcGxldGUoKTtcbiAgfVxufVxuIl19
|
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
;
|
|
2
1
|
export {};
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9zY3JvbGwtb3ZlcmxheS9zcmMvc2Nyb2xsLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgVFlQRV9TQ1JPTExfRElSRUNUSU9OID0gJ1gnIHwgJ1knO1xuZXhwb3J0IHR5cGUgVFlQRV9TQ1JPTExfT1ZFUkZMT1cgPSAnaGlkZGVuJyB8ICdzY3JvbGwnO1xuZXhwb3J0IGludGVyZmFjZSBJU2Nyb2xsT3ZlcmxheU9wdGlvbnMge1xuICBzY3JvbGxiYXJXaWR0aD86IG51bWJlcjtcbiAgc2Nyb2xsYmFyQ29sb3I/OiBzdHJpbmc7XG4gIHNjcm9sbGJhckhvdmVyQ29sb3I/OiBzdHJpbmc7XG4gIHNjcm9sbFRodW1iQ29sb3I/OiBzdHJpbmc7XG4gIHNjcm9sbFRodW1iSG92ZXJDb2xvcj86IHN0cmluZztcbiAgc2Nyb2xsYmFyUGFkZGluZz86IG51bWJlcjtcbiAgc2Nyb2xsWD86IFRZUEVfU0NST0xMX09WRVJGTE9XO1xuICBzY3JvbGxYT3BhY2l0eTA/OiBib29sZWFuO1xuICBzY3JvbGxZPzogVFlQRV9TQ1JPTExfT1ZFUkZMT1c7XG4gIHNjcm9sbFlPcGFjaXR5MD86IGJvb2xlYW47XG59XG4iXX0=
|