@libs-ui/components-scroll-overlay 0.2.98 → 0.2.100
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.
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
2
|
import { Directive, ElementRef, Renderer2, computed, effect, inject, input, output, signal, untracked } from "@angular/core";
|
|
3
3
|
import { Subject, Subscription, debounceTime, filter, fromEvent, mergeMap, startWith, takeUntil, tap } from "rxjs";
|
|
4
|
+
import { checkMouseOverInContainer } from '@libs-ui/utils';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
export class LibsUiComponentsScrollOverlayDirective {
|
|
6
7
|
/* PROPERTY */
|
|
@@ -52,6 +53,8 @@ export class LibsUiComponentsScrollOverlayDirective {
|
|
|
52
53
|
background-color: #9CA2AD;
|
|
53
54
|
}
|
|
54
55
|
`, {}).asReadonly();
|
|
56
|
+
isScrollThumb = signal(false);
|
|
57
|
+
keepDisplayThumb = signal(false);
|
|
55
58
|
subsX = new Subscription();
|
|
56
59
|
subsY = new Subscription();
|
|
57
60
|
mutationObserverSubjectX = new Subject();
|
|
@@ -170,7 +173,7 @@ export class LibsUiComponentsScrollOverlayDirective {
|
|
|
170
173
|
}
|
|
171
174
|
this.divContainer.appendChild(trackEl);
|
|
172
175
|
if (!this.divContainer.style.position) {
|
|
173
|
-
this.Element.parentElement
|
|
176
|
+
this.Element.parentElement?.insertBefore(this.divContainer, this.Element);
|
|
174
177
|
this.divContainer.style.position = 'relative';
|
|
175
178
|
}
|
|
176
179
|
this.divContainer.append(this.Element);
|
|
@@ -213,6 +216,9 @@ export class LibsUiComponentsScrollOverlayDirective {
|
|
|
213
216
|
this.updateScrollbarSize(scrollDirection);
|
|
214
217
|
}), takeUntil(this.onDestroy)).subscribe());
|
|
215
218
|
subs.add(fromEvent(this.divContainer, 'mouseleave').pipe(tap(() => {
|
|
219
|
+
if (this.keepDisplayThumb()) {
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
216
222
|
trackEl.style.visibility = 'hidden';
|
|
217
223
|
trackEl.style.opacity = '0';
|
|
218
224
|
}), takeUntil(this.onDestroy)).subscribe());
|
|
@@ -229,49 +235,56 @@ export class LibsUiComponentsScrollOverlayDirective {
|
|
|
229
235
|
const elementTrack = scrollDirection === 'X' ? this.trackX : this.trackY;
|
|
230
236
|
const subs = scrollDirection === 'X' ? this.subsX : this.subsY;
|
|
231
237
|
subs.add(fromEvent(elementTrack, 'click').subscribe(e => {
|
|
232
|
-
|
|
233
|
-
if (scrollDirection === 'X') {
|
|
234
|
-
const containerWidth = this.Element.offsetWidth;
|
|
235
|
-
const contentWidth = (this.elementCheckScrollX() || this.Element).scrollWidth;
|
|
236
|
-
const thumbPosition = e.clientX - this.Element.getBoundingClientRect().left;
|
|
237
|
-
const scrollLeft = (thumbPosition / (containerWidth - this.thumbX.offsetWidth)) * (contentWidth - containerWidth);
|
|
238
|
-
this.Element.scroll({ left: scrollLeft });
|
|
238
|
+
if (this.isScrollThumb()) {
|
|
239
239
|
return;
|
|
240
240
|
}
|
|
241
|
-
|
|
242
|
-
const contentHeight = (this.elementCheckScrollY() || this.Element).scrollHeight;
|
|
243
|
-
const thumbPosition = e.clientY - this.Element.getBoundingClientRect().top;
|
|
244
|
-
const scrollTop = (thumbPosition / (containerHeight - this.thumbY.offsetHeight)) * (contentHeight - containerHeight);
|
|
245
|
-
this.Element.scroll({ top: scrollTop });
|
|
241
|
+
this.updateScrollPositionByUserAction(scrollDirection, e, 'smooth');
|
|
246
242
|
}));
|
|
247
243
|
}
|
|
248
244
|
handlerDragAndDropThumb(scrollDirection) {
|
|
245
|
+
const elementTrack = scrollDirection === 'X' ? this.trackX : this.trackY;
|
|
249
246
|
const elementThumb = scrollDirection === 'X' ? this.thumbX : this.thumbY;
|
|
250
247
|
const subs = scrollDirection === 'X' ? this.subsX : this.subsY;
|
|
251
248
|
let preEvent;
|
|
252
249
|
const elementMouseDown = fromEvent(elementThumb, 'mousedown').pipe(tap((e) => {
|
|
253
250
|
e.stopPropagation();
|
|
254
|
-
|
|
251
|
+
document.body.classList.add('!select-none');
|
|
255
252
|
preEvent = e;
|
|
253
|
+
this.isScrollThumb.set(true);
|
|
254
|
+
this.keepDisplayThumb.set(true);
|
|
256
255
|
}));
|
|
257
256
|
const elementMousemove = fromEvent(elementThumb, 'mousemove').pipe(tap((e) => e.stopPropagation()));
|
|
258
257
|
const documentMouseup = fromEvent(document, 'mouseup').pipe(tap((e) => {
|
|
259
258
|
e.stopPropagation();
|
|
260
|
-
this.
|
|
259
|
+
this.keepDisplayThumb.set(false);
|
|
260
|
+
if (!checkMouseOverInContainer(e, this.Element)) {
|
|
261
|
+
elementTrack.style.visibility = 'hidden';
|
|
262
|
+
elementTrack.style.opacity = '0';
|
|
263
|
+
}
|
|
264
|
+
setTimeout(() => {
|
|
265
|
+
document.body.classList.remove('!select-none');
|
|
266
|
+
this.isScrollThumb.set(false);
|
|
267
|
+
}, 250);
|
|
261
268
|
}));
|
|
262
269
|
const documentMousemove = fromEvent(document, 'mousemove').pipe(startWith(elementMousemove), takeUntil((documentMouseup)), takeUntil(this.onDestroy));
|
|
263
270
|
const drag = elementMouseDown.pipe(mergeMap(() => documentMousemove), takeUntil(this.onDestroy));
|
|
264
|
-
subs.add(drag.pipe(filter(e => e instanceof MouseEvent), tap((
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
this.Element.scroll({
|
|
274
|
-
|
|
271
|
+
subs.add(drag.pipe(filter(e => e instanceof MouseEvent), tap((e) => this.updateScrollPositionByUserAction(scrollDirection, e))).subscribe());
|
|
272
|
+
}
|
|
273
|
+
updateScrollPositionByUserAction(scrollDirection, e, behavior = 'auto') {
|
|
274
|
+
e.stopPropagation();
|
|
275
|
+
if (scrollDirection === 'X') {
|
|
276
|
+
const containerWidth = this.Element.offsetWidth;
|
|
277
|
+
const contentWidth = (this.elementCheckScrollX() || this.Element).scrollWidth;
|
|
278
|
+
const thumbPosition = e.clientX - this.Element.getBoundingClientRect().left;
|
|
279
|
+
const scrollLeft = (thumbPosition / (containerWidth - this.thumbX.offsetWidth)) * (contentWidth - containerWidth);
|
|
280
|
+
this.Element.scroll({ left: scrollLeft, behavior });
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
const containerHeight = this.Element.offsetHeight;
|
|
284
|
+
const contentHeight = (this.elementCheckScrollY() || this.Element).scrollHeight;
|
|
285
|
+
const thumbPosition = e.clientY - this.Element.getBoundingClientRect().top;
|
|
286
|
+
const scrollTop = (thumbPosition / (containerHeight - this.thumbY.offsetHeight)) * (contentHeight - containerHeight);
|
|
287
|
+
this.Element.scroll({ top: scrollTop, behavior });
|
|
275
288
|
}
|
|
276
289
|
updateScrollbarSize(scrollDirection) {
|
|
277
290
|
if (scrollDirection === 'X') {
|
|
@@ -331,4 +344,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
331
344
|
standalone: true
|
|
332
345
|
}]
|
|
333
346
|
}], ctorParameters: () => [] });
|
|
334
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLW92ZXJsYXkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL3Njcm9sbC1vdmVybGF5L3NyYy9zY3JvbGwtb3ZlcmxheS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFhLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEksT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQU9uSCxNQUFNLE9BQU8sc0NBQXNDO0lBQ2pELGNBQWM7SUFDRyxNQUFNLEdBQUcsTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStDaEMsRUFBRSxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNaLEtBQUssR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQzNCLEtBQUssR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQzNCLHdCQUF3QixHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFDL0Msd0JBQXdCLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUMvQyxjQUFjLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxjQUFjLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyx3QkFBd0I7SUFDOUYsY0FBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FB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U0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUIsQ0FBQzt3R0FqWFUsc0NBQXNDOzRGQUF0QyxzQ0FBc0M7OzRGQUF0QyxzQ0FBc0M7a0JBTGxELFNBQVM7bUJBQUM7b0JBQ1QsOERBQThEO29CQUM5RCxRQUFRLEVBQUUsMENBQTBDO29CQUNwRCxVQUFVLEVBQUUsSUFBSTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgUmVuZGVyZXIyLCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QsIGlucHV0LCBvdXRwdXQsIHNpZ25hbCwgdW50cmFja2VkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIGZyb21FdmVudCwgbWVyZ2VNYXAsIHN0YXJ0V2l0aCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgSVNjcm9sbE92ZXJsYXlPcHRpb25zLCBUWVBFX1NDUk9MTF9ESVJFQ1RJT04gfSBmcm9tIFwiLi9zY3JvbGwuaW50ZXJmYWNlXCI7XG5ARGlyZWN0aXZlKHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdbTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmVdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIC8qIFBST1BFUlRZICovXG4gIHByaXZhdGUgcmVhZG9ubHkgc3R5bGVzID0gc2lnbmFsKGBcbiAgICAgIC5zY3JvbGxiYXItdHJhY2stWCB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICBoZWlnaHQ6IDhweDtcbiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgIHotaW5kZXg6IDE7XG4gICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBlYXNlLCB2aXNpYmlsaXR5IDAuM3MgZWFzZTtcbiAgICAgIH1cblxuICAgICAgLnNjcm9sbGJhci10aHVtYi1YIHtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjQ0REMEQ2O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjNzO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGJhY2tncm91bmQ6I2Y0ZjVmNztcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLnNjcm9sbGJhci10cmFjay1ZIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICB3aWR0aDogOHB4O1xuICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgei1pbmRleDogMTtcbiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzIGVhc2UsIHZpc2liaWxpdHkgMC4zcyBlYXNlO1xuICAgICAgfVxuXG4gICAgICAuc2Nyb2xsYmFyLXRodW1iLVkge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0NERDBENjtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4zcztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgfVxuXG4gICAgICAuc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzlDQTJBRDtcbiAgICAgIH1cbiAgYCwge30pLmFzUmVhZG9ubHkoKTtcbiAgcHJpdmF0ZSBzdWJzWCA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBzdWJzWSA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBtdXRhdGlvbk9ic2VydmVyU3ViamVjdFggPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIG11dGF0aW9uT2JzZXJ2ZXJTdWJqZWN0WSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgc2Nyb2xsYmFyV2lkdGggPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKT8uc2Nyb2xsYmFyV2lkdGggfHwgOCk7IC8vIENoaeG7gXUgcuG7mW5nIHRoYW5oIGN14buZblxuICBwcml2YXRlIHNjcm9sbGJhckNvbG9yID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcHRpb25zKCk/LnNjcm9sbGJhckNvbG9yIHx8ICcjQ0REMEQ2Jyk7ICAvLyBNw6B1IHPhuq9jIHRoYW5oIGN14buZblxuICBwcml2YXRlIG11dGF0aW9uT2JzZXJ2ZXJYID0gc2lnbmFsPE11dGF0aW9uT2JzZXJ2ZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgbXV0YXRpb25PYnNlcnZlclkgPSBzaWduYWw8TXV0YXRpb25PYnNlcnZlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkaXZDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0cmFja1g6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGh1bWJYOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRyYWNrWTogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0aHVtYlk6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgb25EZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvKiBJTlBVVCAqL1xuICByZWFkb25seSBkZWJ1Z01vZGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGNsYXNzQ29udGFpbmVyID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCcnLCB7IHRyYW5zZm9ybTogdmFsdWUgPT4gdmFsdWUgPz8gJycgfSk7XG4gIHJlYWRvbmx5IG9wdGlvbnMgPSBpbnB1dDxJU2Nyb2xsT3ZlcmxheU9wdGlvbnMgfCB1bmRlZmluZWQ+KE9iamVjdC5hc3NpZ24oe30pKTtcbiAgcmVhZG9ubHkgZWxlbWVudENoZWNrU2Nyb2xsWCA9IGlucHV0PEhUTUxFbGVtZW50PigpO1xuICByZWFkb25seSBlbGVtZW50Q2hlY2tTY3JvbGxZID0gaW5wdXQ8SFRNTEVsZW1lbnQ+KCk7XG5cbiAgLyogT1VUUFVUICovXG4gIHJlYWRvbmx5IG91dFNjcm9sbCA9IG91dHB1dDxFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0U2Nyb2xsWCA9IG91dHB1dDxFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0U2Nyb2xsWSA9IG91dHB1dDxFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0U2Nyb2xsVG9wID0gb3V0cHV0PEV2ZW50PigpO1xuICByZWFkb25seSBvdXRTY3JvbGxCb3R0b20gPSBvdXRwdXQ8RXZlbnQ+KCk7XG5cbiAgLyogSU5KRUNUICovXG4gIHByaXZhdGUgZWxlbWVudCA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgcHJpdmF0ZSByZW5kZXIyID0gaW5qZWN0KFJlbmRlcmVyMik7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMoKTtcbiAgICAgIHRoaXMuZGl2Q29udGFpbmVyLmNsYXNzTmFtZSA9ICcnO1xuICAgICAgdGhpcy5jbGFzc0NvbnRhaW5lcigpPy5zcGxpdCgnICcpLmZvckVhY2goY2xhc3NOYW1lID0+IHtcbiAgICAgICAgaWYgKCFjbGFzc05hbWUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kaXZDb250YWluZXIuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBlbGVtZW50Q2hlY2tNdXRhdGlvblggPSB0aGlzLmVsZW1lbnRDaGVja1Njcm9sbFgoKSB8fCB0aGlzLkVsZW1lbnQ7XG4gICAgICBjb25zdCBlbGVtZW50Q2hlY2tNdXRhdGlvblkgPSB0aGlzLmVsZW1lbnRDaGVja1Njcm9sbFkoKSB8fCB0aGlzLkVsZW1lbnQ7XG5cbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIGlmIChvcHRpb25zPy5zY3JvbGxYICE9PSAnaGlkZGVuJykge1xuICAgICAgICAgIHRoaXMuc3Vic1gudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB0aGlzLmNyZWF0ZVNjcm9sbGJhcignWCcsIHRoaXMudHJhY2tYLCB0aGlzLnRodW1iWCk7XG4gICAgICAgICAgdGhpcy5iaW5kRXZlbnRzU2Nyb2xsQmFyKCdYJywgdGhpcy50cmFja1gpO1xuICAgICAgICAgIHRoaXMubXV0YXRpb25PYnNlcnZlclkoKT8uZGlzY29ubmVjdCgpO1xuICAgICAgICAgIHRoaXMuc3Vic1guYWRkKHRoaXMubXV0YXRpb25PYnNlcnZlclN1YmplY3RYLnBpcGUoZGVib3VuY2VUaW1lKDI1MCkpLnN1YnNjcmliZSh0aGlzLnVwZGF0ZVNjcm9sbGJhclNpemUuYmluZCh0aGlzLCAnWCcpKSk7XG4gICAgICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyWC5zZXQobmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4gdGhpcy5tdXRhdGlvbk9ic2VydmVyU3ViamVjdFgubmV4dCgpKSk7XG4gICAgICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyWCgpPy5vYnNlcnZlKGVsZW1lbnRDaGVja011dGF0aW9uWCwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7XG4gICAgICAgICAgdGhpcy5oYW5kbGVyRHJhZ0FuZERyb3BUaHVtYignWCcpO1xuICAgICAgICAgIHRoaXMuaGFuZGxlckNsaWNrVHJhY2soJ1gnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zPy5zY3JvbGxZICE9PSAnaGlkZGVuJykge1xuICAgICAgICAgIHRoaXMuc3Vic1kudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB0aGlzLmNyZWF0ZVNjcm9sbGJhcignWScsIHRoaXMudHJhY2tZLCB0aGlzLnRodW1iWSk7XG4gICAgICAgICAgdGhpcy5iaW5kRXZlbnRzU2Nyb2xsQmFyKCdZJywgdGhpcy50cmFja1kpO1xuICAgICAgICAgIHRoaXMubXV0YXRpb25PYnNlcnZlclkoKT8uZGlzY29ubmVjdCgpO1xuICAgICAgICAgIHRoaXMuc3Vic1kuYWRkKHRoaXMubXV0YXRpb25PYnNlcnZlclN1YmplY3RZLnBpcGUoZGVib3VuY2VUaW1lKDI1MCkpLnN1YnNjcmliZSh0aGlzLnVwZGF0ZVNjcm9sbGJhclNpemUuYmluZCh0aGlzLCAnWScpKSk7XG4gICAgICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyWS5zZXQobmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4gdGhpcy5tdXRhdGlvbk9ic2VydmVyU3ViamVjdFkubmV4dCgpKSk7XG4gICAgICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyWSgpPy5vYnNlcnZlKGVsZW1lbnRDaGVja011dGF0aW9uWSwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7XG4gICAgICAgICAgdGhpcy5oYW5kbGVyRHJhZ0FuZERyb3BUaHVtYignWScpO1xuICAgICAgICAgIHRoaXMuaGFuZGxlckNsaWNrVHJhY2soJ1knKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB9KTtcbiAgfVxuXG4gIC8qIEZVTkNUSU9OUyovXG4gIHByaXZhdGUgZ2V0IEVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTY3JvbGxiYXIoc2Nyb2xsRGlyZWN0aW9uOiBUWVBFX1NDUk9MTF9ESVJFQ1RJT04sIHRyYWNrRWw6IEhUTUxFbGVtZW50LCB0aHVtYkVsOiBIVE1MRWxlbWVudCkge1xuICAgIGNvbnN0IGlkU3R5bGVUYWcgPSBcIiNpZC1zdHlsZS10YWctY3VzdG9tLXNjcm9sbC1vdmVybGF5XCJcbiAgICBjb25zdCBzdHlsZUVsQ3VzdG9tU2Nyb2xsT3ZlcmxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkU3R5bGVUYWcpO1xuXG4gICAgaWYgKCFzdHlsZUVsQ3VzdG9tU2Nyb2xsT3ZlcmxheSkge1xuICAgICAgY29uc3Qgc3R5bGVFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICBzdHlsZUVsLnNldEF0dHJpYnV0ZSgnaWQnLCBpZFN0eWxlVGFnKTtcbiAgICAgIHN0eWxlRWwuaW5uZXJIVE1MID0gdGhpcy5zdHlsZXMoKTtcbiAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kKHN0eWxlRWwpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0eWxlc1Byb3BlcnR5ID0ge1xuICAgICAgXCJib3gtc2l6aW5nXCI6IFwiYm9yZGVyLWJveFwiLFxuICAgICAgXCJzY3JvbGxiYXItd2lkdGhcIjogXCJub25lXCIsXG4gICAgICBcInNjcm9sbGJhci1jb2xvclwiOiBcInRyYW5zcGFyZW50IHRyYW5zcGFyZW50XCIsXG4gICAgICBcIm92ZXJmbG93XCI6IFwiaGlkZGVuXCIsXG4gICAgICBcIm92ZXJmbG93LXhcIjogYCR7dGhpcy5vcHRpb25zKCk/LnNjcm9sbFggfHwgJ3Njcm9sbCd9YCxcbiAgICAgIFwib3ZlcmZsb3cteVwiOiBgJHt0aGlzLm9wdGlvbnMoKT8uc2Nyb2xsWSB8fCAnc2Nyb2xsJ31gXG4gICAgfSBhcyBhbnk7XG5cbiAgICBPYmplY3Qua2V5cyhzdHlsZXNQcm9wZXJ0eSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgdGhpcy5yZW5kZXIyLnNldFN0eWxlKHRoaXMuRWxlbWVudCwga2V5LCBzdHlsZXNQcm9wZXJ0eVtrZXldLCAxKTtcbiAgICB9KTtcblxuICAgIHRyYWNrRWwuY2xhc3NMaXN0LmFkZChgc2Nyb2xsYmFyLXRyYWNrLSR7c2Nyb2xsRGlyZWN0aW9ufWApO1xuICAgIGlmIChzY3JvbGxEaXJlY3Rpb24gPT09ICdYJykge1xuICAgICAgdHJhY2tFbC5zdHlsZS53aWR0aCA9IGAxMDAlYDtcbiAgICAgIHRyYWNrRWwuc3R5bGUuaGVpZ2h0ID0gYCR7dGhpcy5zY3JvbGxiYXJXaWR0aCgpfXB4YDtcblxuICAgIH1cblxuICAgIGlmIChzY3JvbGxEaXJlY3Rpb24gPT09ICdZJykge1xuICAgICAgdHJhY2tFbC5zdHlsZS5oZWlnaHQgPSBgMTAwJWA7XG4gICAgICB0cmFja0VsLnN0eWxlLndpZHRoID0gYCR7dGhpcy5zY3JvbGxiYXJXaWR0aCgpfXB4YDtcbiAgICB9XG5cbiAgICB0aHVtYkVsLmNsYXNzTGlzdC5hZGQoYHNjcm9sbGJhci10aHVtYi0ke3Njcm9sbERpcmVjdGlvbn1gKTtcbiAgICB0aHVtYkVsLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuc2Nyb2xsYmFyQ29sb3IoKTtcbiAgICB0cmFja0VsLmFwcGVuZENoaWxkKHRodW1iRWwpO1xuICAgIGlmICh0aGlzLkVsZW1lbnQuY2xhc3NOYW1lKSB7XG4gICAgICB0aGlzLkVsZW1lbnQuY2xhc3NOYW1lLnNwbGl0KCcgJykuZm9yRWFjaCgoY2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKGNsYXNzTmFtZSAmJiAoWyd3LWZ1bGwnLCAndy1zY3JlZW4nLCAnaC1mdWxsJywgJ2gtc2NyZWVuJ10uaW5jbHVkZXMoY2xhc3NOYW1lKSB8fCBjbGFzc05hbWUuaW5jbHVkZXMoJ21pbi1oLScpIHx8IGNsYXNzTmFtZS5pbmNsdWRlcygnbWluLXctJykgfHwgL14oIT8pKGh8dyktXFxbWzAtOV0rcHhcXF0kLy50ZXN0KGNsYXNzTmFtZSkpICYmICF0aGlzLmRpdkNvbnRhaW5lci5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKSkge1xuICAgICAgICAgIHRoaXMuZGl2Q29udGFpbmVyLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICB9KTtcbiAgICAgIGlmICghdGhpcy5FbGVtZW50LmNsYXNzTmFtZS5pbmNsdWRlcygnbWluLWgtJykpIHtcbiAgICAgICAgdGhpcy5kaXZDb250YWluZXIuY2xhc3NMaXN0LmFkZCgnbWluLWgtMCcpO1xuXG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuRWxlbWVudC5jbGFzc05hbWUuaW5jbHVkZXMoJ21pbi13LScpKSB7XG4gICAgICAgIHRoaXMuZGl2Q29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ21pbi13LTAnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5kaXZDb250YWluZXIuYXBwZW5kQ2hpbGQodHJhY2tFbCk7XG5cbiAgICBpZiAoIXRoaXMuZGl2Q29udGFpbmVyLnN0eWxlLnBvc2l0aW9uKSB7XG4gICAgICB0aGlzLkVsZW1lbnQucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5kaXZDb250YWluZXIsIHRoaXMuRWxlbWVudCk7XG4gICAgICB0aGlzLmRpdkNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XG4gICAgfVxuICAgIHRoaXMuZGl2Q29udGFpbmVyLmFwcGVuZCh0aGlzLkVsZW1lbnQpO1xuICAgIHRoaXMudXBkYXRlU2Nyb2xsYmFyU2l6ZShzY3JvbGxEaXJlY3Rpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBiaW5kRXZlbnRzU2Nyb2xsQmFyKHNjcm9sbERpcmVjdGlvbjogVFlQRV9TQ1JPTExfRElSRUNUSU9OLCB0cmFja0VsOiBIVE1MRWxlbWVudCkge1xuICAgIGxldCBzY3JvbGxMZWZ0ID0gdGhpcy5FbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgbGV0IHNjcm9sbFRvcCA9IHRoaXMuRWxlbWVudC5zY3JvbGxUb3A7XG4gICAgY29uc3Qgc3ViczogU3Vic2NyaXB0aW9uID0gZnJvbUV2ZW50PEV2ZW50Pih0aGlzLkVsZW1lbnQsICdzY3JvbGwnKS5waXBlKHRhcCgoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuRWxlbWVudDtcblxuICAgICAgdGhpcy5vdXRTY3JvbGwuZW1pdChldmVudCk7XG4gICAgICBpZiAoc2Nyb2xsRGlyZWN0aW9uID09PSAnWCcpIHtcbiAgICAgICAgaWYgKHRhcmdldC5zY3JvbGxMZWZ0ICYmICh0YXJnZXQuc2Nyb2xsTGVmdCArIHRhcmdldC5vZmZzZXRXaWR0aCA+PSB0YXJnZXQuc2Nyb2xsV2lkdGgpKSB7XG4gICAgICAgICAgdGFyZ2V0LnNjcm9sbExlZnQgPSB0YXJnZXQuc2Nyb2xsV2lkdGggLSB0YXJnZXQub2Zmc2V0V2lkdGggLSAodGFyZ2V0Lm9mZnNldFdpZHRoIC0gdGFyZ2V0LmNsaWVudFdpZHRoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0YXJnZXQuc2Nyb2xsTGVmdCAhPT0gc2Nyb2xsTGVmdCkge1xuICAgICAgICAgIHRoaXMub3V0U2Nyb2xsWC5lbWl0KGV2ZW50KTtcblxuICAgICAgICB9XG4gICAgICAgIHNjcm9sbExlZnQgPSB0YXJnZXQuc2Nyb2xsTGVmdDtcbiAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxiYXJQb3NpdGlvbihzY3JvbGxEaXJlY3Rpb24pO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRhcmdldC5zY3JvbGxUb3AgPT09IHNjcm9sbFRvcCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlU2Nyb2xsYmFyUG9zaXRpb24oc2Nyb2xsRGlyZWN0aW9uKTtcbiAgICAgIHNjcm9sbFRvcCA9IHRhcmdldC5zY3JvbGxUb3A7XG4gICAgICB0aGlzLm91dFNjcm9sbFkuZW1pdChldmVudCk7XG5cbiAgICAgIGlmICh0YXJnZXQuc2Nyb2xsVG9wID09PSAwKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm91dFNjcm9sbFRvcC5lbWl0KGV2ZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRhcmdldC5zY3JvbGxIZWlnaHQgPD0gdGFyZ2V0LnNjcm9sbFRvcCArIHRhcmdldC5vZmZzZXRIZWlnaHQgKyAzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm91dFNjcm9sbEJvdHRvbS5lbWl0KGV2ZW50KTtcbiAgICAgIH1cbiAgICB9KSwgdGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKCk7XG5cbiAgICBzdWJzLmFkZChmcm9tRXZlbnQoZG9jdW1lbnQsICdyZXNpemUnKS5waXBlKHRhcCh0aGlzLnVwZGF0ZVNjcm9sbGJhclNpemUuYmluZCh0aGlzLCBzY3JvbGxEaXJlY3Rpb24pKSwgdGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKCkpO1xuXG4gICAgc3Vicy5hZGQoZnJvbUV2ZW50KHRoaXMuZGl2Q29udGFpbmVyLCAnbW91c2VlbnRlcicpLnBpcGUodGFwKCgpID0+IHtcbiAgICAgIHRyYWNrRWwuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcbiAgICAgIHRyYWNrRWwuc3R5bGUub3BhY2l0eSA9ICcxJztcbiAgICAgIHRoaXMudXBkYXRlU2Nyb2xsYmFyU2l6ZShzY3JvbGxEaXJlY3Rpb24pO1xuICAgIH0pLCB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKS5zdWJzY3JpYmUoKSk7XG5cbiAgICBzdWJzLmFkZChmcm9tRXZlbnQodGhpcy5kaXZDb250YWluZXIsICdtb3VzZWxlYXZlJykucGlwZSh0YXAoKCkgPT4ge1xuICAgICAgdHJhY2tFbC5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICB0cmFja0VsLnN0eWxlLm9wYWNpdHkgPSAnMCc7XG4gICAgfSksIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpLnN1YnNjcmliZSgpKTtcblxuICAgIGlmIChzY3JvbGxEaXJlY3Rpb24gPT09ICdYJykge1xuICAgICAgdGhpcy5zdWJzWCA9IHN1YnM7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc2Nyb2xsRGlyZWN0aW9uID09PSAnWScpIHtcbiAgICAgIHRoaXMuc3Vic1kgPSBzdWJzO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDbGlja1RyYWNrKHNjcm9sbERpcmVjdGlvbjogVFlQRV9TQ1JPTExfRElSRUNUSU9OKSB7XG4gICAgY29uc3QgZWxlbWVudFRyYWNrID0gc2Nyb2xsRGlyZWN0aW9uID09PSAnWCcgPyB0aGlzLnRyYWNrWCA6IHRoaXMudHJhY2tZO1xuICAgIGNvbnN0IHN1YnMgPSBzY3JvbGxEaXJlY3Rpb24gPT09ICdYJyA/IHRoaXMuc3Vic1ggOiB0aGlzLnN1YnNZO1xuXG4gICAgc3Vicy5hZGQoZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGVsZW1lbnRUcmFjaywgJ2NsaWNrJykuc3Vic2NyaWJlKGUgPT4ge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGlmIChzY3JvbGxEaXJlY3Rpb24gPT09ICdYJykge1xuICAgICAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IHRoaXMuRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgICAgY29uc3QgY29udGVudFdpZHRoID0gKHRoaXMuZWxlbWVudENoZWNrU2Nyb2xsWCgpIHx8IHRoaXMuRWxlbWVudCkuc2Nyb2xsV2lkdGg7XG4gICAgICAgIGNvbnN0IHRodW1iUG9zaXRpb24gPSBlLmNsaWVudFggLSB0aGlzLkVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICAgICAgY29uc3Qgc2Nyb2xsTGVmdCA9ICh0aHVtYlBvc2l0aW9uIC8gKGNvbnRhaW5lcldpZHRoIC0gdGhpcy50aHVtYlgub2Zmc2V0V2lkdGgpKSAqIChjb250ZW50V2lkdGggLSBjb250YWluZXJXaWR0aCk7XG5cbiAgICAgICAgdGhpcy5FbGVtZW50LnNjcm9sbCh7IGxlZnQ6IHNjcm9sbExlZnQgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbnRhaW5lckhlaWdodCA9IHRoaXMuRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgICBjb25zdCBjb250ZW50SGVpZ2h0ID0gKHRoaXMuZWxlbWVudENoZWNrU2Nyb2xsWSgpIHx8IHRoaXMuRWxlbWVudCkuc2Nyb2xsSGVpZ2h0O1xuICAgICAgY29uc3QgdGh1bWJQb3NpdGlvbiA9IGUuY2xpZW50WSAtIHRoaXMuRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XG4gICAgICBjb25zdCBzY3JvbGxUb3AgPSAodGh1bWJQb3NpdGlvbiAvIChjb250YWluZXJIZWlnaHQgLSB0aGlzLnRodW1iWS5vZmZzZXRIZWlnaHQpKSAqIChjb250ZW50SGVpZ2h0IC0gY29udGFpbmVySGVpZ2h0KTtcblxuICAgICAgdGhpcy5FbGVtZW50LnNjcm9sbCh7IHRvcDogc2Nyb2xsVG9wIH0pO1xuICAgIH0pKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRHJhZ0FuZERyb3BUaHVtYihzY3JvbGxEaXJlY3Rpb246IFRZUEVfU0NST0xMX0RJUkVDVElPTikge1xuICAgIGNvbnN0IGVsZW1lbnRUaHVtYiA9IHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnID8gdGhpcy50aHVtYlggOiB0aGlzLnRodW1iWTtcbiAgICBjb25zdCBzdWJzID0gc2Nyb2xsRGlyZWN0aW9uID09PSAnWCcgPyB0aGlzLnN1YnNYIDogdGhpcy5zdWJzWTtcbiAgICBsZXQgcHJlRXZlbnQ6IE1vdXNlRXZlbnQ7XG4gICAgY29uc3QgZWxlbWVudE1vdXNlRG93biA9IGZyb21FdmVudDxNb3VzZUV2ZW50PihlbGVtZW50VGh1bWIsICdtb3VzZWRvd24nKS5waXBlKHRhcCgoZSkgPT4ge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMuRWxlbWVudC5jbGFzc0xpc3QuYWRkKCchc2VsZWN0LW5vbmUnKTtcbiAgICAgIHByZUV2ZW50ID0gZTtcbiAgICB9KSk7XG4gICAgY29uc3QgZWxlbWVudE1vdXNlbW92ZSA9IGZyb21FdmVudDxNb3VzZUV2ZW50PihlbGVtZW50VGh1bWIsICdtb3VzZW1vdmUnKS5waXBlKHRhcCgoZSkgPT4gZS5zdG9wUHJvcGFnYXRpb24oKSkpO1xuICAgIGNvbnN0IGRvY3VtZW50TW91c2V1cCA9IGZyb21FdmVudDxNb3VzZUV2ZW50Pihkb2N1bWVudCwgJ21vdXNldXAnKS5waXBlKHRhcCgoZSkgPT4ge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMuRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCchc2VsZWN0LW5vbmUnKTtcbiAgICB9KSk7XG4gICAgY29uc3QgZG9jdW1lbnRNb3VzZW1vdmUgPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZG9jdW1lbnQsICdtb3VzZW1vdmUnKS5waXBlKHN0YXJ0V2l0aChlbGVtZW50TW91c2Vtb3ZlKSwgdGFrZVVudGlsKChkb2N1bWVudE1vdXNldXApKSwgdGFrZVVudGlsKHRoaXMub25EZXN0cm95KSk7XG4gICAgY29uc3QgZHJhZyA9IGVsZW1lbnRNb3VzZURvd24ucGlwZShtZXJnZU1hcCgoKSA9PiBkb2N1bWVudE1vdXNlbW92ZSksIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpO1xuXG4gICAgc3Vicy5hZGQoZHJhZy5waXBlKGZpbHRlcihlID0+IGUgaW5zdGFuY2VvZiBNb3VzZUV2ZW50KSwgdGFwKChjdXJyZW50RXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGN1cnJlbnRFdmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBsZXQgZGlyZWN0aW9uID0gKHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnID8gY3VycmVudEV2ZW50LmNsaWVudFggLSBwcmVFdmVudC5jbGllbnRYIDogY3VycmVudEV2ZW50LmNsaWVudFkgLSBwcmVFdmVudC5jbGllbnRZKTtcblxuICAgICAgZGlyZWN0aW9uID0gZGlyZWN0aW9uID4gMCA/IGRpcmVjdGlvbiArIDE2IDogZGlyZWN0aW9uIC0gMTY7XG4gICAgICBwcmVFdmVudCA9IGN1cnJlbnRFdmVudDtcbiAgICAgIGlmIChzY3JvbGxEaXJlY3Rpb24gPT09ICdYJykge1xuICAgICAgICB0aGlzLkVsZW1lbnQuc2Nyb2xsKHsgbGVmdDogdGhpcy5FbGVtZW50LnNjcm9sbExlZnQgKyBkaXJlY3Rpb24gfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuRWxlbWVudC5zY3JvbGwoeyB0b3A6IHRoaXMuRWxlbWVudC5zY3JvbGxUb3AgKyBkaXJlY3Rpb24gfSk7XG4gICAgfSkpLnN1YnNjcmliZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2Nyb2xsYmFyU2l6ZShzY3JvbGxEaXJlY3Rpb246IFRZUEVfU0NST0xMX0RJUkVDVElPTikge1xuICAgIGlmIChzY3JvbGxEaXJlY3Rpb24gPT09ICdYJykge1xuICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSB0aGlzLkVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICBjb25zdCBjb250ZW50V2lkdGggPSAodGhpcy5lbGVtZW50Q2hlY2tTY3JvbGxYKCkgfHwgdGhpcy5FbGVtZW50KS5zY3JvbGxXaWR0aDtcbiAgICAgIGNvbnN0IHRodW1iV2lkdGggPSAoY29udGFpbmVyV2lkdGggLyBjb250ZW50V2lkdGgpICogKGNvbnRhaW5lcldpZHRoKTtcblxuICAgICAgdGhpcy50aHVtYlguc3R5bGUud2lkdGggPSBgJHt0aHVtYldpZHRofXB4YDtcbiAgICAgIHRoaXMudHJhY2tYLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICBpZiAoY29udGVudFdpZHRoID4gY29udGFpbmVyV2lkdGgpIHtcbiAgICAgICAgdGhpcy50cmFja1guc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVNjcm9sbGJhclBvc2l0aW9uKHNjcm9sbERpcmVjdGlvbik7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb250YWluZXJIZWlnaHQgPSB0aGlzLkVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgIGNvbnN0IGNvbnRlbnRIZWlnaHQgPSAodGhpcy5lbGVtZW50Q2hlY2tTY3JvbGxZKCkgfHwgdGhpcy5FbGVtZW50KS5zY3JvbGxIZWlnaHQ7XG4gICAgY29uc3QgdGh1bWJIZWlnaHQgPSAoY29udGFpbmVySGVpZ2h0IC8gY29udGVudEhlaWdodCkgKiAoY29udGFpbmVySGVpZ2h0KTtcblxuICAgIHRoaXMudGh1bWJZLnN0eWxlLmhlaWdodCA9IGAke3RodW1iSGVpZ2h0IDwgNDAgPyA0MCA6IHRodW1iSGVpZ2h0fXB4YDtcbiAgICB0aGlzLnRyYWNrWS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIGlmIChjb250ZW50SGVpZ2h0ID4gY29udGFpbmVySGVpZ2h0KSB7XG4gICAgICB0aGlzLnRyYWNrWS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVNjcm9sbGJhclBvc2l0aW9uKCdZJyk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNjcm9sbGJhclBvc2l0aW9uKHNjcm9sbERpcmVjdGlvbjogVFlQRV9TQ1JPTExfRElSRUNUSU9OKSB7XG4gICAgaWYgKHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnKSB7XG4gICAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IHRoaXMuRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgIGNvbnN0IGNvbnRlbnRXaWR0aCA9ICh0aGlzLmVsZW1lbnRDaGVja1Njcm9sbFgoKSB8fCB0aGlzLkVsZW1lbnQpLnNjcm9sbFdpZHRoO1xuICAgICAgY29uc3Qgc2Nyb2xsTGVmdCA9IHRoaXMuRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgICAgY29uc3QgdGh1bWJQb3NpdGlvbiA9IChzY3JvbGxMZWZ0IC8gKGNvbnRlbnRXaWR0aCAtIGNvbnRhaW5lcldpZHRoKSkgKiAoY29udGFpbmVyV2lkdGggLSB0aGlzLnRodW1iWC5vZmZzZXRXaWR0aCk7XG5cbiAgICAgIHRoaXMudGh1bWJYLnN0eWxlLmxlZnQgPSBgJHt0aHVtYlBvc2l0aW9ufXB4YDtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb250YWluZXJIZWlnaHQgPSB0aGlzLkVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgIGNvbnN0IGNvbnRlbnRIZWlnaHQgPSAodGhpcy5lbGVtZW50Q2hlY2tTY3JvbGxZKCkgfHwgdGhpcy5FbGVtZW50KS5zY3JvbGxIZWlnaHQ7XG4gICAgY29uc3Qgc2Nyb2xsVG9wID0gdGhpcy5FbGVtZW50LnNjcm9sbFRvcDtcbiAgICBjb25zdCB0aHVtYlBvc2l0aW9uID0gKHNjcm9sbFRvcCAvIChjb250ZW50SGVpZ2h0IC0gY29udGFpbmVySGVpZ2h0KSkgKiAoY29udGFpbmVySGVpZ2h0IC0gdGhpcy50aHVtYlkub2Zmc2V0SGVpZ2h0KTtcblxuICAgIHRoaXMudGh1bWJZLnN0eWxlLnRvcCA9IGAke3RodW1iUG9zaXRpb259cHhgO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kaXZDb250YWluZXIucmVtb3ZlKCk7XG4gICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyWCgpPy5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyWSgpPy5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5zdWJzWC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuc3Vic1kudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uRGVzdHJveS5uZXh0KCk7XG4gICAgdGhpcy5vbkRlc3Ryb3kuY29tcGxldGUoKTtcbiAgfVxuXG59Il19
|
|
347
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLW92ZXJsYXkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL3Njcm9sbC1vdmVybGF5L3NyYy9zY3JvbGwtb3ZlcmxheS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFhLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEksT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRW5ILE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDOztBQU16RCxNQUFNLE9BQU8sc0NBQXNDO0lBQ2pELGNBQWM7SUFDRyxNQUFNLEdBQUcsTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStDaEMsRUFBRSxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNaLGFBQWEsR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDdkMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQzFDLEtBQUssR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQzNCLEtBQUssR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQzNCLHdCQUF3QixHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFDL0Msd0JBQXdCLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUMvQyxjQUFjLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxjQUFjLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyx3QkFBd0I7SUFDOUYsY0FBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsY0FBYyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUUscUJBQXFCO0lBQ3BHLGlCQUFpQixHQUFHLE1BQU0sQ0FBK0IsU0FBUyxDQUFDLENBQUM7SUFDcEUsaUJBQWlCLEdBQUcsTUFBTSxDQUErQixTQUFTLENBQUMsQ0FBQztJQUMzRCxZQUFZLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QyxNQUFNLEdBQWdCLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEQsTUFBTSxHQUFnQixRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BELE1BQU0sR0FBZ0IsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRCxNQUFNLEdBQWdCLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEQsU0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFFakQsV0FBVztJQUNGLFNBQVMsR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDbEMsY0FBYyxHQUFHLEtBQUssQ0FBNkIsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDNUYsT0FBTyxHQUFHLEtBQUssQ0FBb0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLG1CQUFtQixHQUFHLEtBQUssRUFBZSxDQUFDO0lBQzNDLG1CQUFtQixHQUFHLEtBQUssRUFBZSxDQUFDO0lBRXBELFlBQVk7SUFDSCxTQUFTLEdBQUcsTUFBTSxFQUFTLENBQUM7SUFDNUIsVUFBVSxHQUFHLE1BQU0sRUFBUyxDQUFDO0lBQzdCLFVBQVUsR0FBRyxNQUFNLEVBQVMsQ0FBQztJQUM3QixZQUFZLEdBQUcsTUFBTSxFQUFTLENBQUM7SUFDL0IsZUFBZSxHQUFHLE1BQU0sRUFBUyxDQUFDO0lBRTNDLFlBQVk7SUFDSixPQUFPLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzdCLE9BQU8sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFcEM7UUFDRSxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1YsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDcEQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUNmLE9BQU87Z0JBQ1QsQ0FBQztnQkFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDN0MsQ0FBQyxDQUFDLENBQUM7WUFDSCxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDekUsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDO1lBRXpFLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2IsSUFBSSxPQUFPLEVBQUUsT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUN6QixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDcEQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQzNDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDO29CQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzFILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUM3RixJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxPQUFPLENBQUMscUJBQXFCLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7b0JBQy9HLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDbEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM5QixDQUFDO2dCQUVELElBQUksT0FBTyxFQUFFLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDbEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDekIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3BELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUMzQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQztvQkFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUMxSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksZ0JBQWdCLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDN0YsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsT0FBTyxDQUFDLHFCQUFxQixFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUMvRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ2xDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDOUIsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBRUwsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNkLElBQVksT0FBTztRQUNqQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO0lBQ3BDLENBQUM7SUFFTyxlQUFlLENBQUMsZUFBc0MsRUFBRSxPQUFvQixFQUFFLE9BQW9CO1FBQ3hHLE1BQU0sVUFBVSxHQUFHLHFDQUFxQyxDQUFBO1FBQ3hELE1BQU0sMEJBQTBCLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV2RSxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztZQUNoQyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2hELE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ3ZDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFFRCxNQUFNLGNBQWMsR0FBRztZQUNyQixZQUFZLEVBQUUsWUFBWTtZQUMxQixpQkFBaUIsRUFBRSxNQUFNO1lBQ3pCLGlCQUFpQixFQUFFLHlCQUF5QjtZQUM1QyxVQUFVLEVBQUUsUUFBUTtZQUNwQixZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsT0FBTyxJQUFJLFFBQVEsRUFBRTtZQUN0RCxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsT0FBTyxJQUFJLFFBQVEsRUFBRTtTQUNoRCxDQUFDO1FBRVQsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDeEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ25FLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFDNUQsSUFBSSxlQUFlLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDNUIsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO1lBQzdCLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUM7UUFFdEQsQ0FBQztRQUVELElBQUksZUFBZSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztZQUM5QixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDO1FBQ3JELENBQUM7UUFFRCxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUM1RCxPQUFPLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEQsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3QixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQWlCLEVBQUUsRUFBRTtnQkFDOUQsSUFBSSxTQUFTLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksMEJBQTBCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztvQkFDdFAsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUM3QyxDQUFDO1lBRUgsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQy9DLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUU3QyxDQUFDO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUMvQyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDN0MsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV2QyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzFFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7UUFDaEQsQ0FBQztRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVPLG1CQUFtQixDQUFDLGVBQXNDLEVBQUUsT0FBb0I7UUFDdEYsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDekMsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDdkMsTUFBTSxJQUFJLEdBQWlCLFNBQVMsQ0FBUSxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNyRixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBRTVCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNCLElBQUksZUFBZSxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUM1QixJQUFJLE1BQU0sQ0FBQyxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7b0JBQ3hGLE1BQU0sQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQzFHLENBQUM7Z0JBRUQsSUFBSSxNQUFNLENBQUMsVUFBVSxLQUFLLFVBQVUsRUFBRSxDQUFDO29CQUNyQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFFOUIsQ0FBQztnQkFDRCxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUU5QyxPQUFPO1lBQ1QsQ0FBQztZQUVELElBQUksTUFBTSxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDbkMsT0FBTTtZQUNSLENBQUM7WUFDRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDOUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7WUFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFNUIsSUFBSSxNQUFNLENBQUMsU0FBUyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUMzQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7WUFFRCxJQUFJLE1BQU0sQ0FBQyxZQUFZLElBQUksTUFBTSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsWUFBWSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN0RSxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFDLENBQUM7UUFDSCxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFM0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUUvSSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ2hFLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztZQUNyQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7WUFDNUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzVDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBRTVDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDaEUsSUFBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBQyxDQUFDO2dCQUMxQixPQUFPO1lBQ1QsQ0FBQztZQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQztZQUNwQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7UUFDOUIsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFFNUMsSUFBSSxlQUFlLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFFbEIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLGVBQWUsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUVsQixPQUFPO1FBQ1QsQ0FBQztJQUNILENBQUM7SUFFUyxpQkFBaUIsQ0FBQyxlQUFzQztRQUNoRSxNQUFNLFlBQVksR0FBRyxlQUFlLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3pFLE1BQU0sSUFBSSxHQUFHLGVBQWUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFFL0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQWEsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNsRSxJQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBQyxDQUFDO2dCQUN2QixPQUFPO1lBQ1QsQ0FBQztZQUNELElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxlQUFlLEVBQUMsQ0FBQyxFQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRVMsdUJBQXVCLENBQUMsZUFBc0M7UUFDdEUsTUFBTSxZQUFZLEdBQUcsZUFBZSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN6RSxNQUFNLFlBQVksR0FBRyxlQUFlLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3pFLE1BQU0sSUFBSSxHQUFHLGVBQWUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDL0QsSUFBSSxRQUFvQixDQUFDO1FBQ3pCLE1BQU0sZ0JBQWdCLEdBQUcsU0FBUyxDQUFhLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDdkYsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3BCLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUU1QyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1lBQ2IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ0osTUFBTSxnQkFBZ0IsR0FBRyxTQUFTLENBQWEsWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEgsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFhLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDaEYsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakMsSUFBRyxDQUFDLHlCQUF5QixDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUMsQ0FBQztnQkFDN0MsWUFBWSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDO2dCQUN6QyxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7WUFDbkMsQ0FBQztZQUNELFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUMvQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDVixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ0osTUFBTSxpQkFBaUIsR0FBRyxTQUFTLENBQWEsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUNsSyxNQUFNLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBRWpHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQVksVUFBVSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBYSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsZUFBZSxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQzFKLENBQUM7SUFFTyxnQ0FBZ0MsQ0FBQyxlQUFzQyxFQUFDLENBQVksRUFBQyxXQUEyQixNQUFNO1FBQzVILENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNwQixJQUFJLGVBQWUsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUM1QixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUNoRCxNQUFNLFlBQVksR0FBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUM7WUFDOUUsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUMsSUFBSSxDQUFDO1lBQzVFLE1BQU0sVUFBVSxHQUFHLENBQUMsYUFBYSxHQUFHLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxDQUFDLFlBQVksR0FBRyxjQUFjLENBQUMsQ0FBQztZQUVsSCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQztZQUNsRCxPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO1FBQ2xELE1BQU0sYUFBYSxHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQztRQUNoRixNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDM0UsTUFBTSxTQUFTLEdBQUcsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsYUFBYSxHQUFHLGVBQWUsQ0FBQyxDQUFDO1FBRXJILElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBQyxRQUFRLEVBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxlQUFzQztRQUNoRSxJQUFJLGVBQWUsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUM1QixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUNoRCxNQUFNLFlBQVksR0FBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUM7WUFDOUUsTUFBTSxVQUFVLEdBQUcsQ0FBQyxjQUFjLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUV0RSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxVQUFVLElBQUksQ0FBQztZQUM1QyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1lBQ25DLElBQUksWUFBWSxHQUFHLGNBQWMsRUFBRSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1lBQ3RDLENBQUM7WUFDRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsZUFBZSxDQUFDLENBQUM7WUFFOUMsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztRQUNsRCxNQUFNLGFBQWEsR0FBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUM7UUFDaEYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxlQUFlLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUUxRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxXQUFXLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsSUFBSSxDQUFDO1FBQ3RFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDbkMsSUFBSSxhQUFhLEdBQUcsZUFBZSxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN0QyxDQUFDO1FBRUQsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxlQUFzQztRQUNwRSxJQUFJLGVBQWUsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUM1QixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUNoRCxNQUFNLFlBQVksR0FBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUM7WUFDOUUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7WUFDM0MsTUFBTSxhQUFhLEdBQUcsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxZQUFZLEdBQUcsY0FBYyxDQUFDLENBQUMsR0FBRyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRWxILElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxHQUFHLGFBQWEsSUFBSSxDQUFDO1lBRTlDLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7UUFDbEQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDO1FBQ2hGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQ3pDLE1BQU0sYUFBYSxHQUFHLENBQUMsU0FBUyxHQUFHLENBQUMsYUFBYSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVySCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxhQUFhLElBQUksQ0FBQztJQUMvQyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO3dHQTlYVSxzQ0FBc0M7NEZBQXRDLHNDQUFzQzs7NEZBQXRDLHNDQUFzQztrQkFMbEQsU0FBUzttQkFBQztvQkFDVCw4REFBOEQ7b0JBQzlELFFBQVEsRUFBRSwwQ0FBMEM7b0JBQ3BELFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgT25EZXN0cm95LCBSZW5kZXJlcjIsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgaW5wdXQsIG91dHB1dCwgc2lnbmFsLCB1bnRyYWNrZWQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBkZWJvdW5jZVRpbWUsIGZpbHRlciwgZnJvbUV2ZW50LCBtZXJnZU1hcCwgc3RhcnRXaXRoLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBJU2Nyb2xsT3ZlcmxheU9wdGlvbnMsIFRZUEVfU0NST0xMX0RJUkVDVElPTiB9IGZyb20gXCIuL3Njcm9sbC5pbnRlcmZhY2VcIjtcbmltcG9ydCB7Y2hlY2tNb3VzZU92ZXJJbkNvbnRhaW5lcn0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuQERpcmVjdGl2ZSh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnW0xpYnNVaUNvbXBvbmVudHNTY3JvbGxPdmVybGF5RGlyZWN0aXZlXScsXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAvKiBQUk9QRVJUWSAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHN0eWxlcyA9IHNpZ25hbChgXG4gICAgICAuc2Nyb2xsYmFyLXRyYWNrLVgge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgaGVpZ2h0OiA4cHg7XG4gICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgZWFzZSwgdmlzaWJpbGl0eSAwLjNzIGVhc2U7XG4gICAgICB9XG5cbiAgICAgIC5zY3JvbGxiYXItdGh1bWItWCB7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0NERDBENjtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4zcztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBiYWNrZ3JvdW5kOiNmNGY1Zjc7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC5zY3JvbGxiYXItdHJhY2stWSB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgd2lkdGg6IDhweDtcbiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgIHotaW5kZXg6IDE7XG4gICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBlYXNlLCB2aXNpYmlsaXR5IDAuM3MgZWFzZTtcbiAgICAgIH1cblxuICAgICAgLnNjcm9sbGJhci10aHVtYi1ZIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNDREQwRDY7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3M7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIH1cblxuICAgICAgLnNjcm9sbGJhci10aHVtYjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICM5Q0EyQUQ7XG4gICAgICB9XG4gIGAsIHt9KS5hc1JlYWRvbmx5KCk7XG4gIHByaXZhdGUgaXNTY3JvbGxUaHVtYiA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUga2VlcERpc3BsYXlUaHVtYiA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgc3Vic1ggPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgc3Vic1kgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgbXV0YXRpb25PYnNlcnZlclN1YmplY3RYID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBtdXRhdGlvbk9ic2VydmVyU3ViamVjdFkgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIHNjcm9sbGJhcldpZHRoID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcHRpb25zKCk/LnNjcm9sbGJhcldpZHRoIHx8IDgpOyAvLyBDaGnhu4F1IHLhu5luZyB0aGFuaCBjdeG7mW5cbiAgcHJpdmF0ZSBzY3JvbGxiYXJDb2xvciA9IGNvbXB1dGVkKCgpID0+IHRoaXMub3B0aW9ucygpPy5zY3JvbGxiYXJDb2xvciB8fCAnI0NERDBENicpOyAgLy8gTcOgdSBz4bqvYyB0aGFuaCBjdeG7mW5cbiAgcHJpdmF0ZSBtdXRhdGlvbk9ic2VydmVyWCA9IHNpZ25hbDxNdXRhdGlvbk9ic2VydmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIG11dGF0aW9uT2JzZXJ2ZXJZID0gc2lnbmFsPE11dGF0aW9uT2JzZXJ2ZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGl2Q29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHJhY2tYOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRodW1iWDogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0cmFja1k6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGh1bWJZOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBwcml2YXRlIHJlYWRvbmx5IG9uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgLyogSU5QVVQgKi9cbiAgcmVhZG9ubHkgZGVidWdNb2RlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBjbGFzc0NvbnRhaW5lciA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignJywgeyB0cmFuc2Zvcm06IHZhbHVlID0+IHZhbHVlID8/ICcnIH0pO1xuICByZWFkb25seSBvcHRpb25zID0gaW5wdXQ8SVNjcm9sbE92ZXJsYXlPcHRpb25zIHwgdW5kZWZpbmVkPihPYmplY3QuYXNzaWduKHt9KSk7XG4gIHJlYWRvbmx5IGVsZW1lbnRDaGVja1Njcm9sbFggPSBpbnB1dDxIVE1MRWxlbWVudD4oKTtcbiAgcmVhZG9ubHkgZWxlbWVudENoZWNrU2Nyb2xsWSA9IGlucHV0PEhUTUxFbGVtZW50PigpO1xuXG4gIC8qIE9VVFBVVCAqL1xuICByZWFkb25seSBvdXRTY3JvbGwgPSBvdXRwdXQ8RXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dFNjcm9sbFggPSBvdXRwdXQ8RXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dFNjcm9sbFkgPSBvdXRwdXQ8RXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dFNjcm9sbFRvcCA9IG91dHB1dDxFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0U2Nyb2xsQm90dG9tID0gb3V0cHV0PEV2ZW50PigpO1xuXG4gIC8qIElOSkVDVCAqL1xuICBwcml2YXRlIGVsZW1lbnQgPSBpbmplY3QoRWxlbWVudFJlZik7XG4gIHByaXZhdGUgcmVuZGVyMiA9IGluamVjdChSZW5kZXJlcjIpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zKCk7XG4gICAgICB0aGlzLmRpdkNvbnRhaW5lci5jbGFzc05hbWUgPSAnJztcbiAgICAgIHRoaXMuY2xhc3NDb250YWluZXIoKT8uc3BsaXQoJyAnKS5mb3JFYWNoKGNsYXNzTmFtZSA9PiB7XG4gICAgICAgIGlmICghY2xhc3NOYW1lKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGl2Q29udGFpbmVyLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZWxlbWVudENoZWNrTXV0YXRpb25YID0gdGhpcy5lbGVtZW50Q2hlY2tTY3JvbGxYKCkgfHwgdGhpcy5FbGVtZW50O1xuICAgICAgY29uc3QgZWxlbWVudENoZWNrTXV0YXRpb25ZID0gdGhpcy5lbGVtZW50Q2hlY2tTY3JvbGxZKCkgfHwgdGhpcy5FbGVtZW50O1xuXG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICBpZiAob3B0aW9ucz8uc2Nyb2xsWCAhPT0gJ2hpZGRlbicpIHtcbiAgICAgICAgICB0aGlzLnN1YnNYLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgdGhpcy5jcmVhdGVTY3JvbGxiYXIoJ1gnLCB0aGlzLnRyYWNrWCwgdGhpcy50aHVtYlgpO1xuICAgICAgICAgIHRoaXMuYmluZEV2ZW50c1Njcm9sbEJhcignWCcsIHRoaXMudHJhY2tYKTtcbiAgICAgICAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXJZKCk/LmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICB0aGlzLnN1YnNYLmFkZCh0aGlzLm11dGF0aW9uT2JzZXJ2ZXJTdWJqZWN0WC5waXBlKGRlYm91bmNlVGltZSgyNTApKS5zdWJzY3JpYmUodGhpcy51cGRhdGVTY3JvbGxiYXJTaXplLmJpbmQodGhpcywgJ1gnKSkpO1xuICAgICAgICAgIHRoaXMubXV0YXRpb25PYnNlcnZlclguc2V0KG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHRoaXMubXV0YXRpb25PYnNlcnZlclN1YmplY3RYLm5leHQoKSkpO1xuICAgICAgICAgIHRoaXMubXV0YXRpb25PYnNlcnZlclgoKT8ub2JzZXJ2ZShlbGVtZW50Q2hlY2tNdXRhdGlvblgsIHsgYXR0cmlidXRlczogdHJ1ZSwgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlIH0pO1xuICAgICAgICAgIHRoaXMuaGFuZGxlckRyYWdBbmREcm9wVGh1bWIoJ1gnKTtcbiAgICAgICAgICB0aGlzLmhhbmRsZXJDbGlja1RyYWNrKCdYJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucz8uc2Nyb2xsWSAhPT0gJ2hpZGRlbicpIHtcbiAgICAgICAgICB0aGlzLnN1YnNZLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgdGhpcy5jcmVhdGVTY3JvbGxiYXIoJ1knLCB0aGlzLnRyYWNrWSwgdGhpcy50aHVtYlkpO1xuICAgICAgICAgIHRoaXMuYmluZEV2ZW50c1Njcm9sbEJhcignWScsIHRoaXMudHJhY2tZKTtcbiAgICAgICAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXJZKCk/LmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICB0aGlzLnN1YnNZLmFkZCh0aGlzLm11dGF0aW9uT2JzZXJ2ZXJTdWJqZWN0WS5waXBlKGRlYm91bmNlVGltZSgyNTApKS5zdWJzY3JpYmUodGhpcy51cGRhdGVTY3JvbGxiYXJTaXplLmJpbmQodGhpcywgJ1knKSkpO1xuICAgICAgICAgIHRoaXMubXV0YXRpb25PYnNlcnZlclkuc2V0KG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHRoaXMubXV0YXRpb25PYnNlcnZlclN1YmplY3RZLm5leHQoKSkpO1xuICAgICAgICAgIHRoaXMubXV0YXRpb25PYnNlcnZlclkoKT8ub2JzZXJ2ZShlbGVtZW50Q2hlY2tNdXRhdGlvblksIHsgYXR0cmlidXRlczogdHJ1ZSwgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlIH0pO1xuICAgICAgICAgIHRoaXMuaGFuZGxlckRyYWdBbmREcm9wVGh1bWIoJ1knKTtcbiAgICAgICAgICB0aGlzLmhhbmRsZXJDbGlja1RyYWNrKCdZJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgfSk7XG4gIH1cblxuICAvKiBGVU5DVElPTlMqL1xuICBwcml2YXRlIGdldCBFbGVtZW50KCk6SFRNTEVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU2Nyb2xsYmFyKHNjcm9sbERpcmVjdGlvbjogVFlQRV9TQ1JPTExfRElSRUNUSU9OLCB0cmFja0VsOiBIVE1MRWxlbWVudCwgdGh1bWJFbDogSFRNTEVsZW1lbnQpIHtcbiAgICBjb25zdCBpZFN0eWxlVGFnID0gXCIjaWQtc3R5bGUtdGFnLWN1c3RvbS1zY3JvbGwtb3ZlcmxheVwiXG4gICAgY29uc3Qgc3R5bGVFbEN1c3RvbVNjcm9sbE92ZXJsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZFN0eWxlVGFnKTtcblxuICAgIGlmICghc3R5bGVFbEN1c3RvbVNjcm9sbE92ZXJsYXkpIHtcbiAgICAgIGNvbnN0IHN0eWxlRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgICAgc3R5bGVFbC5zZXRBdHRyaWJ1dGUoJ2lkJywgaWRTdHlsZVRhZyk7XG4gICAgICBzdHlsZUVsLmlubmVySFRNTCA9IHRoaXMuc3R5bGVzKCk7XG4gICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZChzdHlsZUVsKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdHlsZXNQcm9wZXJ0eSA9IHtcbiAgICAgIFwiYm94LXNpemluZ1wiOiBcImJvcmRlci1ib3hcIixcbiAgICAgIFwic2Nyb2xsYmFyLXdpZHRoXCI6IFwibm9uZVwiLFxuICAgICAgXCJzY3JvbGxiYXItY29sb3JcIjogXCJ0cmFuc3BhcmVudCB0cmFuc3BhcmVudFwiLFxuICAgICAgXCJvdmVyZmxvd1wiOiBcImhpZGRlblwiLFxuICAgICAgXCJvdmVyZmxvdy14XCI6IGAke3RoaXMub3B0aW9ucygpPy5zY3JvbGxYIHx8ICdzY3JvbGwnfWAsXG4gICAgICBcIm92ZXJmbG93LXlcIjogYCR7dGhpcy5vcHRpb25zKCk/LnNjcm9sbFkgfHwgJ3Njcm9sbCd9YFxuICAgIH0gYXMgYW55O1xuXG4gICAgT2JqZWN0LmtleXMoc3R5bGVzUHJvcGVydHkpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIHRoaXMucmVuZGVyMi5zZXRTdHlsZSh0aGlzLkVsZW1lbnQsIGtleSwgc3R5bGVzUHJvcGVydHlba2V5XSwgMSk7XG4gICAgfSk7XG5cbiAgICB0cmFja0VsLmNsYXNzTGlzdC5hZGQoYHNjcm9sbGJhci10cmFjay0ke3Njcm9sbERpcmVjdGlvbn1gKTtcbiAgICBpZiAoc2Nyb2xsRGlyZWN0aW9uID09PSAnWCcpIHtcbiAgICAgIHRyYWNrRWwuc3R5bGUud2lkdGggPSBgMTAwJWA7XG4gICAgICB0cmFja0VsLnN0eWxlLmhlaWdodCA9IGAke3RoaXMuc2Nyb2xsYmFyV2lkdGgoKX1weGA7XG5cbiAgICB9XG5cbiAgICBpZiAoc2Nyb2xsRGlyZWN0aW9uID09PSAnWScpIHtcbiAgICAgIHRyYWNrRWwuc3R5bGUuaGVpZ2h0ID0gYDEwMCVgO1xuICAgICAgdHJhY2tFbC5zdHlsZS53aWR0aCA9IGAke3RoaXMuc2Nyb2xsYmFyV2lkdGgoKX1weGA7XG4gICAgfVxuXG4gICAgdGh1bWJFbC5jbGFzc0xpc3QuYWRkKGBzY3JvbGxiYXItdGh1bWItJHtzY3JvbGxEaXJlY3Rpb259YCk7XG4gICAgdGh1bWJFbC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLnNjcm9sbGJhckNvbG9yKCk7XG4gICAgdHJhY2tFbC5hcHBlbmRDaGlsZCh0aHVtYkVsKTtcbiAgICBpZiAodGhpcy5FbGVtZW50LmNsYXNzTmFtZSkge1xuICAgICAgdGhpcy5FbGVtZW50LmNsYXNzTmFtZS5zcGxpdCgnICcpLmZvckVhY2goKGNsYXNzTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmIChjbGFzc05hbWUgJiYgKFsndy1mdWxsJywgJ3ctc2NyZWVuJywgJ2gtZnVsbCcsICdoLXNjcmVlbiddLmluY2x1ZGVzKGNsYXNzTmFtZSkgfHwgY2xhc3NOYW1lLmluY2x1ZGVzKCdtaW4taC0nKSB8fCBjbGFzc05hbWUuaW5jbHVkZXMoJ21pbi13LScpIHx8IC9eKCE/KShofHcpLVxcW1swLTldK3B4XFxdJC8udGVzdChjbGFzc05hbWUpKSAmJiAhdGhpcy5kaXZDb250YWluZXIuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSkpIHtcbiAgICAgICAgICB0aGlzLmRpdkNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgfSk7XG4gICAgICBpZiAoIXRoaXMuRWxlbWVudC5jbGFzc05hbWUuaW5jbHVkZXMoJ21pbi1oLScpKSB7XG4gICAgICAgIHRoaXMuZGl2Q29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ21pbi1oLTAnKTtcblxuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLkVsZW1lbnQuY2xhc3NOYW1lLmluY2x1ZGVzKCdtaW4tdy0nKSkge1xuICAgICAgICB0aGlzLmRpdkNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdtaW4tdy0wJyk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZGl2Q29udGFpbmVyLmFwcGVuZENoaWxkKHRyYWNrRWwpO1xuXG4gICAgaWYgKCF0aGlzLmRpdkNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbikge1xuICAgICAgdGhpcy5FbGVtZW50LnBhcmVudEVsZW1lbnQ/Lmluc2VydEJlZm9yZSh0aGlzLmRpdkNvbnRhaW5lciwgdGhpcy5FbGVtZW50KTtcbiAgICAgIHRoaXMuZGl2Q29udGFpbmVyLnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJztcbiAgICB9XG4gICAgdGhpcy5kaXZDb250YWluZXIuYXBwZW5kKHRoaXMuRWxlbWVudCk7XG4gICAgdGhpcy51cGRhdGVTY3JvbGxiYXJTaXplKHNjcm9sbERpcmVjdGlvbik7XG4gIH1cblxuICBwcml2YXRlIGJpbmRFdmVudHNTY3JvbGxCYXIoc2Nyb2xsRGlyZWN0aW9uOiBUWVBFX1NDUk9MTF9ESVJFQ1RJT04sIHRyYWNrRWw6IEhUTUxFbGVtZW50KSB7XG4gICAgbGV0IHNjcm9sbExlZnQgPSB0aGlzLkVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICBsZXQgc2Nyb2xsVG9wID0gdGhpcy5FbGVtZW50LnNjcm9sbFRvcDtcbiAgICBjb25zdCBzdWJzOiBTdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQ8RXZlbnQ+KHRoaXMuRWxlbWVudCwgJ3Njcm9sbCcpLnBpcGUodGFwKChldmVudCkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5FbGVtZW50O1xuXG4gICAgICB0aGlzLm91dFNjcm9sbC5lbWl0KGV2ZW50KTtcbiAgICAgIGlmIChzY3JvbGxEaXJlY3Rpb24gPT09ICdYJykge1xuICAgICAgICBpZiAodGFyZ2V0LnNjcm9sbExlZnQgJiYgKHRhcmdldC5zY3JvbGxMZWZ0ICsgdGFyZ2V0Lm9mZnNldFdpZHRoID49IHRhcmdldC5zY3JvbGxXaWR0aCkpIHtcbiAgICAgICAgICB0YXJnZXQuc2Nyb2xsTGVmdCA9IHRhcmdldC5zY3JvbGxXaWR0aCAtIHRhcmdldC5vZmZzZXRXaWR0aCAtICh0YXJnZXQub2Zmc2V0V2lkdGggLSB0YXJnZXQuY2xpZW50V2lkdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRhcmdldC5zY3JvbGxMZWZ0ICE9PSBzY3JvbGxMZWZ0KSB7XG4gICAgICAgICAgdGhpcy5vdXRTY3JvbGxYLmVtaXQoZXZlbnQpO1xuXG4gICAgICAgIH1cbiAgICAgICAgc2Nyb2xsTGVmdCA9IHRhcmdldC5zY3JvbGxMZWZ0O1xuICAgICAgICB0aGlzLnVwZGF0ZVNjcm9sbGJhclBvc2l0aW9uKHNjcm9sbERpcmVjdGlvbik7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodGFyZ2V0LnNjcm9sbFRvcCA9PT0gc2Nyb2xsVG9wKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVTY3JvbGxiYXJQb3NpdGlvbihzY3JvbGxEaXJlY3Rpb24pO1xuICAgICAgc2Nyb2xsVG9wID0gdGFyZ2V0LnNjcm9sbFRvcDtcbiAgICAgIHRoaXMub3V0U2Nyb2xsWS5lbWl0KGV2ZW50KTtcblxuICAgICAgaWYgKHRhcmdldC5zY3JvbGxUb3AgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3V0U2Nyb2xsVG9wLmVtaXQoZXZlbnQpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGFyZ2V0LnNjcm9sbEhlaWdodCA8PSB0YXJnZXQuc2Nyb2xsVG9wICsgdGFyZ2V0Lm9mZnNldEhlaWdodCArIDMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3V0U2Nyb2xsQm90dG9tLmVtaXQoZXZlbnQpO1xuICAgICAgfVxuICAgIH0pLCB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKS5zdWJzY3JpYmUoKTtcblxuICAgIHN1YnMuYWRkKGZyb21FdmVudChkb2N1bWVudCwgJ3Jlc2l6ZScpLnBpcGUodGFwKHRoaXMudXBkYXRlU2Nyb2xsYmFyU2l6ZS5iaW5kKHRoaXMsIHNjcm9sbERpcmVjdGlvbikpLCB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKS5zdWJzY3JpYmUoKSk7XG5cbiAgICBzdWJzLmFkZChmcm9tRXZlbnQodGhpcy5kaXZDb250YWluZXIsICdtb3VzZWVudGVyJykucGlwZSh0YXAoKCkgPT4ge1xuICAgICAgdHJhY2tFbC5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnO1xuICAgICAgdHJhY2tFbC5zdHlsZS5vcGFjaXR5ID0gJzEnO1xuICAgICAgdGhpcy51cGRhdGVTY3JvbGxiYXJTaXplKHNjcm9sbERpcmVjdGlvbik7XG4gICAgfSksIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpLnN1YnNjcmliZSgpKTtcblxuICAgIHN1YnMuYWRkKGZyb21FdmVudCh0aGlzLmRpdkNvbnRhaW5lciwgJ21vdXNlbGVhdmUnKS5waXBlKHRhcCgoKSA9PiB7XG4gICAgICBpZih0aGlzLmtlZXBEaXNwbGF5VGh1bWIoKSl7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRyYWNrRWwuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgdHJhY2tFbC5zdHlsZS5vcGFjaXR5ID0gJzAnO1xuICAgIH0pLCB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKS5zdWJzY3JpYmUoKSk7XG5cbiAgICBpZiAoc2Nyb2xsRGlyZWN0aW9uID09PSAnWCcpIHtcbiAgICAgIHRoaXMuc3Vic1ggPSBzdWJzO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHNjcm9sbERpcmVjdGlvbiA9PT0gJ1knKSB7XG4gICAgICB0aGlzLnN1YnNZID0gc3VicztcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2xpY2tUcmFjayhzY3JvbGxEaXJlY3Rpb246IFRZUEVfU0NST0xMX0RJUkVDVElPTikge1xuICAgIGNvbnN0IGVsZW1lbnRUcmFjayA9IHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnID8gdGhpcy50cmFja1ggOiB0aGlzLnRyYWNrWTtcbiAgICBjb25zdCBzdWJzID0gc2Nyb2xsRGlyZWN0aW9uID09PSAnWCcgPyB0aGlzLnN1YnNYIDogdGhpcy5zdWJzWTtcblxuICAgIHN1YnMuYWRkKGZyb21FdmVudDxNb3VzZUV2ZW50PihlbGVtZW50VHJhY2ssICdjbGljaycpLnN1YnNjcmliZShlID0+IHtcbiAgICAgIGlmKHRoaXMuaXNTY3JvbGxUaHVtYigpKXtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVTY3JvbGxQb3NpdGlvbkJ5VXNlckFjdGlvbihzY3JvbGxEaXJlY3Rpb24sZSwnc21vb3RoJyk7XG4gICAgfSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJEcmFnQW5kRHJvcFRodW1iKHNjcm9sbERpcmVjdGlvbjogVFlQRV9TQ1JPTExfRElSRUNUSU9OKSB7XG4gICAgY29uc3QgZWxlbWVudFRyYWNrID0gc2Nyb2xsRGlyZWN0aW9uID09PSAnWCcgPyB0aGlzLnRyYWNrWCA6IHRoaXMudHJhY2tZO1xuICAgIGNvbnN0IGVsZW1lbnRUaHVtYiA9IHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnID8gdGhpcy50aHVtYlggOiB0aGlzLnRodW1iWTtcbiAgICBjb25zdCBzdWJzID0gc2Nyb2xsRGlyZWN0aW9uID09PSAnWCcgPyB0aGlzLnN1YnNYIDogdGhpcy5zdWJzWTtcbiAgICBsZXQgcHJlRXZlbnQ6IE1vdXNlRXZlbnQ7XG4gICAgY29uc3QgZWxlbWVudE1vdXNlRG93biA9IGZyb21FdmVudDxNb3VzZUV2ZW50PihlbGVtZW50VGh1bWIsICdtb3VzZWRvd24nKS5waXBlKHRhcCgoZSkgPT4ge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnIXNlbGVjdC1ub25lJyk7XG5cbiAgICAgIHByZUV2ZW50ID0gZTtcbiAgICAgIHRoaXMuaXNTY3JvbGxUaHVtYi5zZXQodHJ1ZSk7XG4gICAgICB0aGlzLmtlZXBEaXNwbGF5VGh1bWIuc2V0KHRydWUpO1xuICAgIH0pKTtcbiAgICBjb25zdCBlbGVtZW50TW91c2Vtb3ZlID0gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGVsZW1lbnRUaHVtYiwgJ21vdXNlbW92ZScpLnBpcGUodGFwKChlKSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpKSk7XG4gICAgY29uc3QgZG9jdW1lbnRNb3VzZXVwID0gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGRvY3VtZW50LCAnbW91c2V1cCcpLnBpcGUodGFwKChlKSA9PiB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy5rZWVwRGlzcGxheVRodW1iLnNldChmYWxzZSk7XG4gICAgICBpZighY2hlY2tNb3VzZU92ZXJJbkNvbnRhaW5lcihlLHRoaXMuRWxlbWVudCkpe1xuICAgICAgICBlbGVtZW50VHJhY2suc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICBlbGVtZW50VHJhY2suc3R5bGUub3BhY2l0eSA9ICcwJztcbiAgICAgIH1cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJyFzZWxlY3Qtbm9uZScpO1xuICAgICAgICB0aGlzLmlzU2Nyb2xsVGh1bWIuc2V0KGZhbHNlKTtcbiAgICAgIH0sIDI1MCk7XG4gICAgfSkpO1xuICAgIGNvbnN0IGRvY3VtZW50TW91c2Vtb3ZlID0gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGRvY3VtZW50LCAnbW91c2Vtb3ZlJykucGlwZShzdGFydFdpdGgoZWxlbWVudE1vdXNlbW92ZSksIHRha2VVbnRpbCgoZG9jdW1lbnRNb3VzZXVwKSksIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpO1xuICAgIGNvbnN0IGRyYWcgPSBlbGVtZW50TW91c2VEb3duLnBpcGUobWVyZ2VNYXAoKCkgPT4gZG9jdW1lbnRNb3VzZW1vdmUpLCB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKTtcblxuICAgIHN1YnMuYWRkKGRyYWcucGlwZShmaWx0ZXIoZSA9PiBlIGluc3RhbmNlb2YgTW91c2VFdmVudCksIHRhcCgoZTogTW91c2VFdmVudCkgPT4gdGhpcy51cGRhdGVTY3JvbGxQb3NpdGlvbkJ5VXNlckFjdGlvbihzY3JvbGxEaXJlY3Rpb24sZSkpKS5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNjcm9sbFBvc2l0aW9uQnlVc2VyQWN0aW9uKHNjcm9sbERpcmVjdGlvbjogVFlQRV9TQ1JPTExfRElSRUNUSU9OLGU6TW91c2VFdmVudCxiZWhhdmlvcjonYXV0byd8J3Ntb290aCcgPSAnYXV0bycpe1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnKSB7XG4gICAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IHRoaXMuRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgIGNvbnN0IGNvbnRlbnRXaWR0aCA9ICh0aGlzLmVsZW1lbnRDaGVja1Njcm9sbFgoKSB8fCB0aGlzLkVsZW1lbnQpLnNjcm9sbFdpZHRoO1xuICAgICAgY29uc3QgdGh1bWJQb3NpdGlvbiA9IGUuY2xpZW50WCAtIHRoaXMuRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuICAgICAgY29uc3Qgc2Nyb2xsTGVmdCA9ICh0aHVtYlBvc2l0aW9uIC8gKGNvbnRhaW5lcldpZHRoIC0gdGhpcy50aHVtYlgub2Zmc2V0V2lkdGgpKSAqIChjb250ZW50V2lkdGggLSBjb250YWluZXJXaWR0aCk7XG5cbiAgICAgIHRoaXMuRWxlbWVudC5zY3JvbGwoeyBsZWZ0OiBzY3JvbGxMZWZ0LGJlaGF2aW9yfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbnRhaW5lckhlaWdodCA9IHRoaXMuRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgY29uc3QgY29udGVudEhlaWdodCA9ICh0aGlzLmVsZW1lbnRDaGVja1Njcm9sbFkoKSB8fCB0aGlzLkVsZW1lbnQpLnNjcm9sbEhlaWdodDtcbiAgICBjb25zdCB0aHVtYlBvc2l0aW9uID0gZS5jbGllbnRZIC0gdGhpcy5FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcbiAgICBjb25zdCBzY3JvbGxUb3AgPSAodGh1bWJQb3NpdGlvbiAvIChjb250YWluZXJIZWlnaHQgLSB0aGlzLnRodW1iWS5vZmZzZXRIZWlnaHQpKSAqIChjb250ZW50SGVpZ2h0IC0gY29udGFpbmVySGVpZ2h0KTtcblxuICAgIHRoaXMuRWxlbWVudC5zY3JvbGwoeyB0b3A6IHNjcm9sbFRvcCxiZWhhdmlvcn0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTY3JvbGxiYXJTaXplKHNjcm9sbERpcmVjdGlvbjogVFlQRV9TQ1JPTExfRElSRUNUSU9OKSB7XG4gICAgaWYgKHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnKSB7XG4gICAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IHRoaXMuRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgIGNvbnN0IGNvbnRlbnRXaWR0aCA9ICh0aGlzLmVsZW1lbnRDaGVja1Njcm9sbFgoKSB8fCB0aGlzLkVsZW1lbnQpLnNjcm9sbFdpZHRoO1xuICAgICAgY29uc3QgdGh1bWJXaWR0aCA9IChjb250YWluZXJXaWR0aCAvIGNvbnRlbnRXaWR0aCkgKiAoY29udGFpbmVyV2lkdGgpO1xuXG4gICAgICB0aGlzLnRodW1iWC5zdHlsZS53aWR0aCA9IGAke3RodW1iV2lkdGh9cHhgO1xuICAgICAgdGhpcy50cmFja1guc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIGlmIChjb250ZW50V2lkdGggPiBjb250YWluZXJXaWR0aCkge1xuICAgICAgICB0aGlzLnRyYWNrWC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlU2Nyb2xsYmFyUG9zaXRpb24oc2Nyb2xsRGlyZWN0aW9uKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRhaW5lckhlaWdodCA9IHRoaXMuRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgY29uc3QgY29udGVudEhlaWdodCA9ICh0aGlzLmVsZW1lbnRDaGVja1Njcm9sbFkoKSB8fCB0aGlzLkVsZW1lbnQpLnNjcm9sbEhlaWdodDtcbiAgICBjb25zdCB0aHVtYkhlaWdodCA9IChjb250YWluZXJIZWlnaHQgLyBjb250ZW50SGVpZ2h0KSAqIChjb250YWluZXJIZWlnaHQpO1xuXG4gICAgdGhpcy50aHVtYlkuc3R5bGUuaGVpZ2h0ID0gYCR7dGh1bWJIZWlnaHQgPCA0MCA/IDQwIDogdGh1bWJIZWlnaHR9cHhgO1xuICAgIHRoaXMudHJhY2tZLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgaWYgKGNvbnRlbnRIZWlnaHQgPiBjb250YWluZXJIZWlnaHQpIHtcbiAgICAgIHRoaXMudHJhY2tZLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlU2Nyb2xsYmFyUG9zaXRpb24oJ1knKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2Nyb2xsYmFyUG9zaXRpb24oc2Nyb2xsRGlyZWN0aW9uOiBUWVBFX1NDUk9MTF9ESVJFQ1RJT04pIHtcbiAgICBpZiAoc2Nyb2xsRGlyZWN0aW9uID09PSAnWCcpIHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gdGhpcy5FbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgY29uc3QgY29udGVudFdpZHRoID0gKHRoaXMuZWxlbWVudENoZWNrU2Nyb2xsWCgpIHx8IHRoaXMuRWxlbWVudCkuc2Nyb2xsV2lkdGg7XG4gICAgICBjb25zdCBzY3JvbGxMZWZ0ID0gdGhpcy5FbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgICBjb25zdCB0aHVtYlBvc2l0aW9uID0gKHNjcm9sbExlZnQgLyAoY29udGVudFdpZHRoIC0gY29udGFpbmVyV2lkdGgpKSAqIChjb250YWluZXJXaWR0aCAtIHRoaXMudGh1bWJYLm9mZnNldFdpZHRoKTtcblxuICAgICAgdGhpcy50aHVtYlguc3R5bGUubGVmdCA9IGAke3RodW1iUG9zaXRpb259cHhgO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbnRhaW5lckhlaWdodCA9IHRoaXMuRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgY29uc3QgY29udGVudEhlaWdodCA9ICh0aGlzLmVsZW1lbnRDaGVja1Njcm9sbFkoKSB8fCB0aGlzLkVsZW1lbnQpLnNjcm9sbEhlaWdodDtcbiAgICBjb25zdCBzY3JvbGxUb3AgPSB0aGlzLkVsZW1lbnQuc2Nyb2xsVG9wO1xuICAgIGNvbnN0IHRodW1iUG9zaXRpb24gPSAoc2Nyb2xsVG9wIC8gKGNvbnRlbnRIZWlnaHQgLSBjb250YWluZXJIZWlnaHQpKSAqIChjb250YWluZXJIZWlnaHQgLSB0aGlzLnRodW1iWS5vZmZzZXRIZWlnaHQpO1xuXG4gICAgdGhpcy50aHVtYlkuc3R5bGUudG9wID0gYCR7dGh1bWJQb3NpdGlvbn1weGA7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRpdkNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXJYKCk/LmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXJZKCk/LmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLnN1YnNYLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zdWJzWS51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25EZXN0cm95Lm5leHQoKTtcbiAgICB0aGlzLm9uRGVzdHJveS5jb21wbGV0ZSgpO1xuICB9XG5cbn0iXX0=
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { signal, computed, input, output, inject, ElementRef, Renderer2, effect, untracked, Directive } from '@angular/core';
|
|
3
3
|
import { Subscription, Subject, debounceTime, fromEvent, tap, takeUntil, startWith, mergeMap, filter } from 'rxjs';
|
|
4
|
+
import { checkMouseOverInContainer } from '@libs-ui/utils';
|
|
4
5
|
|
|
5
6
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
6
7
|
class LibsUiComponentsScrollOverlayDirective {
|
|
@@ -53,6 +54,8 @@ class LibsUiComponentsScrollOverlayDirective {
|
|
|
53
54
|
background-color: #9CA2AD;
|
|
54
55
|
}
|
|
55
56
|
`, {}).asReadonly();
|
|
57
|
+
isScrollThumb = signal(false);
|
|
58
|
+
keepDisplayThumb = signal(false);
|
|
56
59
|
subsX = new Subscription();
|
|
57
60
|
subsY = new Subscription();
|
|
58
61
|
mutationObserverSubjectX = new Subject();
|
|
@@ -171,7 +174,7 @@ class LibsUiComponentsScrollOverlayDirective {
|
|
|
171
174
|
}
|
|
172
175
|
this.divContainer.appendChild(trackEl);
|
|
173
176
|
if (!this.divContainer.style.position) {
|
|
174
|
-
this.Element.parentElement
|
|
177
|
+
this.Element.parentElement?.insertBefore(this.divContainer, this.Element);
|
|
175
178
|
this.divContainer.style.position = 'relative';
|
|
176
179
|
}
|
|
177
180
|
this.divContainer.append(this.Element);
|
|
@@ -214,6 +217,9 @@ class LibsUiComponentsScrollOverlayDirective {
|
|
|
214
217
|
this.updateScrollbarSize(scrollDirection);
|
|
215
218
|
}), takeUntil(this.onDestroy)).subscribe());
|
|
216
219
|
subs.add(fromEvent(this.divContainer, 'mouseleave').pipe(tap(() => {
|
|
220
|
+
if (this.keepDisplayThumb()) {
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
217
223
|
trackEl.style.visibility = 'hidden';
|
|
218
224
|
trackEl.style.opacity = '0';
|
|
219
225
|
}), takeUntil(this.onDestroy)).subscribe());
|
|
@@ -230,49 +236,56 @@ class LibsUiComponentsScrollOverlayDirective {
|
|
|
230
236
|
const elementTrack = scrollDirection === 'X' ? this.trackX : this.trackY;
|
|
231
237
|
const subs = scrollDirection === 'X' ? this.subsX : this.subsY;
|
|
232
238
|
subs.add(fromEvent(elementTrack, 'click').subscribe(e => {
|
|
233
|
-
|
|
234
|
-
if (scrollDirection === 'X') {
|
|
235
|
-
const containerWidth = this.Element.offsetWidth;
|
|
236
|
-
const contentWidth = (this.elementCheckScrollX() || this.Element).scrollWidth;
|
|
237
|
-
const thumbPosition = e.clientX - this.Element.getBoundingClientRect().left;
|
|
238
|
-
const scrollLeft = (thumbPosition / (containerWidth - this.thumbX.offsetWidth)) * (contentWidth - containerWidth);
|
|
239
|
-
this.Element.scroll({ left: scrollLeft });
|
|
239
|
+
if (this.isScrollThumb()) {
|
|
240
240
|
return;
|
|
241
241
|
}
|
|
242
|
-
|
|
243
|
-
const contentHeight = (this.elementCheckScrollY() || this.Element).scrollHeight;
|
|
244
|
-
const thumbPosition = e.clientY - this.Element.getBoundingClientRect().top;
|
|
245
|
-
const scrollTop = (thumbPosition / (containerHeight - this.thumbY.offsetHeight)) * (contentHeight - containerHeight);
|
|
246
|
-
this.Element.scroll({ top: scrollTop });
|
|
242
|
+
this.updateScrollPositionByUserAction(scrollDirection, e, 'smooth');
|
|
247
243
|
}));
|
|
248
244
|
}
|
|
249
245
|
handlerDragAndDropThumb(scrollDirection) {
|
|
246
|
+
const elementTrack = scrollDirection === 'X' ? this.trackX : this.trackY;
|
|
250
247
|
const elementThumb = scrollDirection === 'X' ? this.thumbX : this.thumbY;
|
|
251
248
|
const subs = scrollDirection === 'X' ? this.subsX : this.subsY;
|
|
252
249
|
let preEvent;
|
|
253
250
|
const elementMouseDown = fromEvent(elementThumb, 'mousedown').pipe(tap((e) => {
|
|
254
251
|
e.stopPropagation();
|
|
255
|
-
|
|
252
|
+
document.body.classList.add('!select-none');
|
|
256
253
|
preEvent = e;
|
|
254
|
+
this.isScrollThumb.set(true);
|
|
255
|
+
this.keepDisplayThumb.set(true);
|
|
257
256
|
}));
|
|
258
257
|
const elementMousemove = fromEvent(elementThumb, 'mousemove').pipe(tap((e) => e.stopPropagation()));
|
|
259
258
|
const documentMouseup = fromEvent(document, 'mouseup').pipe(tap((e) => {
|
|
260
259
|
e.stopPropagation();
|
|
261
|
-
this.
|
|
260
|
+
this.keepDisplayThumb.set(false);
|
|
261
|
+
if (!checkMouseOverInContainer(e, this.Element)) {
|
|
262
|
+
elementTrack.style.visibility = 'hidden';
|
|
263
|
+
elementTrack.style.opacity = '0';
|
|
264
|
+
}
|
|
265
|
+
setTimeout(() => {
|
|
266
|
+
document.body.classList.remove('!select-none');
|
|
267
|
+
this.isScrollThumb.set(false);
|
|
268
|
+
}, 250);
|
|
262
269
|
}));
|
|
263
270
|
const documentMousemove = fromEvent(document, 'mousemove').pipe(startWith(elementMousemove), takeUntil((documentMouseup)), takeUntil(this.onDestroy));
|
|
264
271
|
const drag = elementMouseDown.pipe(mergeMap(() => documentMousemove), takeUntil(this.onDestroy));
|
|
265
|
-
subs.add(drag.pipe(filter(e => e instanceof MouseEvent), tap((
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
this.Element.scroll({
|
|
275
|
-
|
|
272
|
+
subs.add(drag.pipe(filter(e => e instanceof MouseEvent), tap((e) => this.updateScrollPositionByUserAction(scrollDirection, e))).subscribe());
|
|
273
|
+
}
|
|
274
|
+
updateScrollPositionByUserAction(scrollDirection, e, behavior = 'auto') {
|
|
275
|
+
e.stopPropagation();
|
|
276
|
+
if (scrollDirection === 'X') {
|
|
277
|
+
const containerWidth = this.Element.offsetWidth;
|
|
278
|
+
const contentWidth = (this.elementCheckScrollX() || this.Element).scrollWidth;
|
|
279
|
+
const thumbPosition = e.clientX - this.Element.getBoundingClientRect().left;
|
|
280
|
+
const scrollLeft = (thumbPosition / (containerWidth - this.thumbX.offsetWidth)) * (contentWidth - containerWidth);
|
|
281
|
+
this.Element.scroll({ left: scrollLeft, behavior });
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
284
|
+
const containerHeight = this.Element.offsetHeight;
|
|
285
|
+
const contentHeight = (this.elementCheckScrollY() || this.Element).scrollHeight;
|
|
286
|
+
const thumbPosition = e.clientY - this.Element.getBoundingClientRect().top;
|
|
287
|
+
const scrollTop = (thumbPosition / (containerHeight - this.thumbY.offsetHeight)) * (contentHeight - containerHeight);
|
|
288
|
+
this.Element.scroll({ top: scrollTop, behavior });
|
|
276
289
|
}
|
|
277
290
|
updateScrollbarSize(scrollDirection) {
|
|
278
291
|
if (scrollDirection === 'X') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"libs-ui-components-scroll-overlay.mjs","sources":["../../../../../libs-ui/components/scroll-overlay/src/scroll-overlay.directive.ts","../../../../../libs-ui/components/scroll-overlay/src/scroll.interface.ts","../../../../../libs-ui/components/scroll-overlay/src/libs-ui-components-scroll-overlay.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Directive, ElementRef, OnDestroy, Renderer2, computed, effect, inject, input, output, signal, untracked } from \"@angular/core\";\nimport { Subject, Subscription, debounceTime, filter, fromEvent, mergeMap, startWith, takeUntil, tap } from \"rxjs\";\nimport { IScrollOverlayOptions, TYPE_SCROLL_DIRECTION } from \"./scroll.interface\";\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[LibsUiComponentsScrollOverlayDirective]',\n standalone: true\n})\nexport class LibsUiComponentsScrollOverlayDirective implements OnDestroy {\n /* PROPERTY */\n private readonly styles = signal(`\n .scrollbar-track-X {\n position: absolute;\n bottom: 0;\n left: 0;\n height: 8px;\n visibility: hidden;\n cursor: pointer;\n opacity: 0;\n z-index: 1;\n transition: opacity 0.3s ease, visibility 0.3s ease;\n }\n\n .scrollbar-thumb-X {\n height: 100%;\n background-color: #CDD0D6;\n border-radius: 4px;\n cursor: pointer;\n transition: background-color 0.3s;\n position: absolute;\n background:#f4f5f7;\n }\n \n .scrollbar-track-Y {\n position: absolute;\n top: 0;\n right: 0;\n width: 8px;\n visibility: hidden;\n cursor: pointer;\n opacity: 0;\n z-index: 1;\n transition: opacity 0.3s ease, visibility 0.3s ease;\n }\n\n .scrollbar-thumb-Y {\n width: 100%;\n background-color: #CDD0D6;\n border-radius: 4px;\n cursor: pointer;\n transition: background-color 0.3s;\n position: absolute;\n }\n\n .scrollbar-thumb:hover {\n background-color: #9CA2AD;\n }\n `, {}).asReadonly();\n private subsX = new Subscription();\n private subsY = new Subscription();\n private mutationObserverSubjectX = new Subject<void>();\n private mutationObserverSubjectY = new Subject<void>();\n private scrollbarWidth = computed(() => this.options()?.scrollbarWidth || 8); // Chiều rộng thanh cuộn\n private scrollbarColor = computed(() => this.options()?.scrollbarColor || '#CDD0D6'); // Màu sắc thanh cuộn\n private mutationObserverX = signal<MutationObserver | undefined>(undefined);\n private mutationObserverY = signal<MutationObserver | undefined>(undefined);\n private readonly divContainer = document.createElement('div');\n private readonly trackX: HTMLElement = document.createElement('div');\n private readonly thumbX: HTMLElement = document.createElement('div');\n private readonly trackY: HTMLElement = document.createElement('div');\n private readonly thumbY: HTMLElement = document.createElement('div');\n private readonly onDestroy = new Subject<void>();\n\n /* INPUT */\n readonly debugMode = input<boolean>(false);\n readonly classContainer = input<string, string | undefined>('', { transform: value => value ?? '' });\n readonly options = input<IScrollOverlayOptions | undefined>(Object.assign({}));\n readonly elementCheckScrollX = input<HTMLElement>();\n readonly elementCheckScrollY = input<HTMLElement>();\n\n /* OUTPUT */\n readonly outScroll = output<Event>();\n readonly outScrollX = output<Event>();\n readonly outScrollY = output<Event>();\n readonly outScrollTop = output<Event>();\n readonly outScrollBottom = output<Event>();\n\n /* INJECT */\n private element = inject(ElementRef);\n private render2 = inject(Renderer2);\n\n constructor() {\n effect(() => {\n const options = this.options();\n this.divContainer.className = '';\n this.classContainer()?.split(' ').forEach(className => {\n if (!className) {\n return;\n }\n this.divContainer.classList.add(className);\n });\n const elementCheckMutationX = this.elementCheckScrollX() || this.Element;\n const elementCheckMutationY = this.elementCheckScrollY() || this.Element;\n\n untracked(() => {\n if (options?.scrollX !== 'hidden') {\n this.subsX.unsubscribe();\n this.createScrollbar('X', this.trackX, this.thumbX);\n this.bindEventsScrollBar('X', this.trackX);\n this.mutationObserverY()?.disconnect();\n this.subsX.add(this.mutationObserverSubjectX.pipe(debounceTime(250)).subscribe(this.updateScrollbarSize.bind(this, 'X')));\n this.mutationObserverX.set(new MutationObserver(() => this.mutationObserverSubjectX.next()));\n this.mutationObserverX()?.observe(elementCheckMutationX, { attributes: true, childList: true, subtree: true });\n this.handlerDragAndDropThumb('X');\n this.handlerClickTrack('X');\n }\n\n if (options?.scrollY !== 'hidden') {\n this.subsY.unsubscribe();\n this.createScrollbar('Y', this.trackY, this.thumbY);\n this.bindEventsScrollBar('Y', this.trackY);\n this.mutationObserverY()?.disconnect();\n this.subsY.add(this.mutationObserverSubjectY.pipe(debounceTime(250)).subscribe(this.updateScrollbarSize.bind(this, 'Y')));\n this.mutationObserverY.set(new MutationObserver(() => this.mutationObserverSubjectY.next()));\n this.mutationObserverY()?.observe(elementCheckMutationY, { attributes: true, childList: true, subtree: true });\n this.handlerDragAndDropThumb('Y');\n this.handlerClickTrack('Y');\n }\n });\n\n });\n }\n\n /* FUNCTIONS*/\n private get Element() {\n return this.element.nativeElement;\n }\n\n private createScrollbar(scrollDirection: TYPE_SCROLL_DIRECTION, trackEl: HTMLElement, thumbEl: HTMLElement) {\n const idStyleTag = \"#id-style-tag-custom-scroll-overlay\"\n const styleElCustomScrollOverlay = document.getElementById(idStyleTag);\n\n if (!styleElCustomScrollOverlay) {\n const styleEl = document.createElement('style');\n styleEl.setAttribute('id', idStyleTag);\n styleEl.innerHTML = this.styles();\n document.head.append(styleEl);\n }\n\n const stylesProperty = {\n \"box-sizing\": \"border-box\",\n \"scrollbar-width\": \"none\",\n \"scrollbar-color\": \"transparent transparent\",\n \"overflow\": \"hidden\",\n \"overflow-x\": `${this.options()?.scrollX || 'scroll'}`,\n \"overflow-y\": `${this.options()?.scrollY || 'scroll'}`\n } as any;\n\n Object.keys(stylesProperty).forEach(key => {\n this.render2.setStyle(this.Element, key, stylesProperty[key], 1);\n });\n\n trackEl.classList.add(`scrollbar-track-${scrollDirection}`);\n if (scrollDirection === 'X') {\n trackEl.style.width = `100%`;\n trackEl.style.height = `${this.scrollbarWidth()}px`;\n\n }\n\n if (scrollDirection === 'Y') {\n trackEl.style.height = `100%`;\n trackEl.style.width = `${this.scrollbarWidth()}px`;\n }\n\n thumbEl.classList.add(`scrollbar-thumb-${scrollDirection}`);\n thumbEl.style.backgroundColor = this.scrollbarColor();\n trackEl.appendChild(thumbEl);\n if (this.Element.className) {\n this.Element.className.split(' ').forEach((className: string) => {\n if (className && (['w-full', 'w-screen', 'h-full', 'h-screen'].includes(className) || className.includes('min-h-') || className.includes('min-w-') || /^(!?)(h|w)-\\[[0-9]+px\\]$/.test(className)) && !this.divContainer.classList.contains(className)) {\n this.divContainer.classList.add(className);\n }\n\n });\n if (!this.Element.className.includes('min-h-')) {\n this.divContainer.classList.add('min-h-0');\n\n }\n if (!this.Element.className.includes('min-w-')) {\n this.divContainer.classList.add('min-w-0');\n }\n }\n this.divContainer.appendChild(trackEl);\n\n if (!this.divContainer.style.position) {\n this.Element.parentElement.insertBefore(this.divContainer, this.Element);\n this.divContainer.style.position = 'relative';\n }\n this.divContainer.append(this.Element);\n this.updateScrollbarSize(scrollDirection);\n }\n\n private bindEventsScrollBar(scrollDirection: TYPE_SCROLL_DIRECTION, trackEl: HTMLElement) {\n let scrollLeft = this.Element.scrollLeft;\n let scrollTop = this.Element.scrollTop;\n const subs: Subscription = fromEvent<Event>(this.Element, 'scroll').pipe(tap((event) => {\n const target = this.Element;\n\n this.outScroll.emit(event);\n if (scrollDirection === 'X') {\n if (target.scrollLeft && (target.scrollLeft + target.offsetWidth >= target.scrollWidth)) {\n target.scrollLeft = target.scrollWidth - target.offsetWidth - (target.offsetWidth - target.clientWidth);\n }\n\n if (target.scrollLeft !== scrollLeft) {\n this.outScrollX.emit(event);\n\n }\n scrollLeft = target.scrollLeft;\n this.updateScrollbarPosition(scrollDirection);\n\n return;\n }\n\n if (target.scrollTop === scrollTop) {\n return\n }\n this.updateScrollbarPosition(scrollDirection);\n scrollTop = target.scrollTop;\n this.outScrollY.emit(event);\n\n if (target.scrollTop === 0) {\n return this.outScrollTop.emit(event);\n }\n\n if (target.scrollHeight <= target.scrollTop + target.offsetHeight + 3) {\n return this.outScrollBottom.emit(event);\n }\n }), takeUntil(this.onDestroy)).subscribe();\n\n subs.add(fromEvent(document, 'resize').pipe(tap(this.updateScrollbarSize.bind(this, scrollDirection)), takeUntil(this.onDestroy)).subscribe());\n\n subs.add(fromEvent(this.divContainer, 'mouseenter').pipe(tap(() => {\n trackEl.style.visibility = 'visible';\n trackEl.style.opacity = '1';\n this.updateScrollbarSize(scrollDirection);\n }), takeUntil(this.onDestroy)).subscribe());\n\n subs.add(fromEvent(this.divContainer, 'mouseleave').pipe(tap(() => {\n trackEl.style.visibility = 'hidden';\n trackEl.style.opacity = '0';\n }), takeUntil(this.onDestroy)).subscribe());\n\n if (scrollDirection === 'X') {\n this.subsX = subs;\n\n return;\n }\n\n if (scrollDirection === 'Y') {\n this.subsY = subs;\n\n return;\n }\n }\n\n protected handlerClickTrack(scrollDirection: TYPE_SCROLL_DIRECTION) {\n const elementTrack = scrollDirection === 'X' ? this.trackX : this.trackY;\n const subs = scrollDirection === 'X' ? this.subsX : this.subsY;\n\n subs.add(fromEvent<MouseEvent>(elementTrack, 'click').subscribe(e => {\n e.stopPropagation();\n if (scrollDirection === 'X') {\n const containerWidth = this.Element.offsetWidth;\n const contentWidth = (this.elementCheckScrollX() || this.Element).scrollWidth;\n const thumbPosition = e.clientX - this.Element.getBoundingClientRect().left;\n const scrollLeft = (thumbPosition / (containerWidth - this.thumbX.offsetWidth)) * (contentWidth - containerWidth);\n\n this.Element.scroll({ left: scrollLeft });\n return;\n }\n const containerHeight = this.Element.offsetHeight;\n const contentHeight = (this.elementCheckScrollY() || this.Element).scrollHeight;\n const thumbPosition = e.clientY - this.Element.getBoundingClientRect().top;\n const scrollTop = (thumbPosition / (containerHeight - this.thumbY.offsetHeight)) * (contentHeight - containerHeight);\n\n this.Element.scroll({ top: scrollTop });\n }));\n }\n\n protected handlerDragAndDropThumb(scrollDirection: TYPE_SCROLL_DIRECTION) {\n const elementThumb = scrollDirection === 'X' ? this.thumbX : this.thumbY;\n const subs = scrollDirection === 'X' ? this.subsX : this.subsY;\n let preEvent: MouseEvent;\n const elementMouseDown = fromEvent<MouseEvent>(elementThumb, 'mousedown').pipe(tap((e) => {\n e.stopPropagation();\n this.Element.classList.add('!select-none');\n preEvent = e;\n }));\n const elementMousemove = fromEvent<MouseEvent>(elementThumb, 'mousemove').pipe(tap((e) => e.stopPropagation()));\n const documentMouseup = fromEvent<MouseEvent>(document, 'mouseup').pipe(tap((e) => {\n e.stopPropagation();\n this.Element.classList.remove('!select-none');\n }));\n const documentMousemove = fromEvent<MouseEvent>(document, 'mousemove').pipe(startWith(elementMousemove), takeUntil((documentMouseup)), takeUntil(this.onDestroy));\n const drag = elementMouseDown.pipe(mergeMap(() => documentMousemove), takeUntil(this.onDestroy));\n\n subs.add(drag.pipe(filter(e => e instanceof MouseEvent), tap((currentEvent: MouseEvent) => {\n currentEvent?.stopPropagation();\n let direction = (scrollDirection === 'X' ? currentEvent.clientX - preEvent.clientX : currentEvent.clientY - preEvent.clientY);\n\n direction = direction > 0 ? direction + 16 : direction - 16;\n preEvent = currentEvent;\n if (scrollDirection === 'X') {\n this.Element.scroll({ left: this.Element.scrollLeft + direction });\n return;\n }\n this.Element.scroll({ top: this.Element.scrollTop + direction });\n })).subscribe());\n }\n\n private updateScrollbarSize(scrollDirection: TYPE_SCROLL_DIRECTION) {\n if (scrollDirection === 'X') {\n const containerWidth = this.Element.offsetWidth;\n const contentWidth = (this.elementCheckScrollX() || this.Element).scrollWidth;\n const thumbWidth = (containerWidth / contentWidth) * (containerWidth);\n\n this.thumbX.style.width = `${thumbWidth}px`;\n this.trackX.style.display = 'none';\n if (contentWidth > containerWidth) {\n this.trackX.style.display = 'block';\n }\n this.updateScrollbarPosition(scrollDirection);\n\n return;\n }\n\n const containerHeight = this.Element.offsetHeight;\n const contentHeight = (this.elementCheckScrollY() || this.Element).scrollHeight;\n const thumbHeight = (containerHeight / contentHeight) * (containerHeight);\n\n this.thumbY.style.height = `${thumbHeight < 40 ? 40 : thumbHeight}px`;\n this.trackY.style.display = 'none';\n if (contentHeight > containerHeight) {\n this.trackY.style.display = 'block';\n }\n\n this.updateScrollbarPosition('Y');\n }\n\n private updateScrollbarPosition(scrollDirection: TYPE_SCROLL_DIRECTION) {\n if (scrollDirection === 'X') {\n const containerWidth = this.Element.offsetWidth;\n const contentWidth = (this.elementCheckScrollX() || this.Element).scrollWidth;\n const scrollLeft = this.Element.scrollLeft;\n const thumbPosition = (scrollLeft / (contentWidth - containerWidth)) * (containerWidth - this.thumbX.offsetWidth);\n\n this.thumbX.style.left = `${thumbPosition}px`;\n\n return;\n }\n const containerHeight = this.Element.offsetHeight;\n const contentHeight = (this.elementCheckScrollY() || this.Element).scrollHeight;\n const scrollTop = this.Element.scrollTop;\n const thumbPosition = (scrollTop / (contentHeight - containerHeight)) * (containerHeight - this.thumbY.offsetHeight);\n\n this.thumbY.style.top = `${thumbPosition}px`;\n }\n\n ngOnDestroy(): void {\n this.divContainer.remove();\n this.mutationObserverX()?.disconnect();\n this.mutationObserverY()?.disconnect();\n this.subsX.unsubscribe();\n this.subsY.unsubscribe();\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n\n}","export type TYPE_SCROLL_DIRECTION = 'X' | 'Y';\nexport type TYPE_SCROLL_OVERFLOW = 'hidden' | 'scroll';\nexport interface IScrollOverlayOptions {\n scrollbarWidth?: number;\n scrollbarColor?: string;\n scrollX?: TYPE_SCROLL_OVERFLOW,\n scrollY?: TYPE_SCROLL_OVERFLOW\n};","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"libs-ui-components-scroll-overlay.mjs","sources":["../../../../../libs-ui/components/scroll-overlay/src/scroll-overlay.directive.ts","../../../../../libs-ui/components/scroll-overlay/src/scroll.interface.ts","../../../../../libs-ui/components/scroll-overlay/src/libs-ui-components-scroll-overlay.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Directive, ElementRef, OnDestroy, Renderer2, computed, effect, inject, input, output, signal, untracked } from \"@angular/core\";\nimport { Subject, Subscription, debounceTime, filter, fromEvent, mergeMap, startWith, takeUntil, tap } from \"rxjs\";\nimport { IScrollOverlayOptions, TYPE_SCROLL_DIRECTION } from \"./scroll.interface\";\nimport {checkMouseOverInContainer} from '@libs-ui/utils';\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[LibsUiComponentsScrollOverlayDirective]',\n standalone: true\n})\nexport class LibsUiComponentsScrollOverlayDirective implements OnDestroy {\n /* PROPERTY */\n private readonly styles = signal(`\n .scrollbar-track-X {\n position: absolute;\n bottom: 0;\n left: 0;\n height: 8px;\n visibility: hidden;\n cursor: pointer;\n opacity: 0;\n z-index: 1;\n transition: opacity 0.3s ease, visibility 0.3s ease;\n }\n\n .scrollbar-thumb-X {\n height: 100%;\n background-color: #CDD0D6;\n border-radius: 4px;\n cursor: pointer;\n transition: background-color 0.3s;\n position: absolute;\n background:#f4f5f7;\n }\n \n .scrollbar-track-Y {\n position: absolute;\n top: 0;\n right: 0;\n width: 8px;\n visibility: hidden;\n cursor: pointer;\n opacity: 0;\n z-index: 1;\n transition: opacity 0.3s ease, visibility 0.3s ease;\n }\n\n .scrollbar-thumb-Y {\n width: 100%;\n background-color: #CDD0D6;\n border-radius: 4px;\n cursor: pointer;\n transition: background-color 0.3s;\n position: absolute;\n }\n\n .scrollbar-thumb:hover {\n background-color: #9CA2AD;\n }\n `, {}).asReadonly();\n private isScrollThumb = signal<boolean>(false);\n private keepDisplayThumb = signal<boolean>(false);\n private subsX = new Subscription();\n private subsY = new Subscription();\n private mutationObserverSubjectX = new Subject<void>();\n private mutationObserverSubjectY = new Subject<void>();\n private scrollbarWidth = computed(() => this.options()?.scrollbarWidth || 8); // Chiều rộng thanh cuộn\n private scrollbarColor = computed(() => this.options()?.scrollbarColor || '#CDD0D6'); // Màu sắc thanh cuộn\n private mutationObserverX = signal<MutationObserver | undefined>(undefined);\n private mutationObserverY = signal<MutationObserver | undefined>(undefined);\n private readonly divContainer = document.createElement('div');\n private readonly trackX: HTMLElement = document.createElement('div');\n private readonly thumbX: HTMLElement = document.createElement('div');\n private readonly trackY: HTMLElement = document.createElement('div');\n private readonly thumbY: HTMLElement = document.createElement('div');\n private readonly onDestroy = new Subject<void>();\n\n /* INPUT */\n readonly debugMode = input<boolean>(false);\n readonly classContainer = input<string, string | undefined>('', { transform: value => value ?? '' });\n readonly options = input<IScrollOverlayOptions | undefined>(Object.assign({}));\n readonly elementCheckScrollX = input<HTMLElement>();\n readonly elementCheckScrollY = input<HTMLElement>();\n\n /* OUTPUT */\n readonly outScroll = output<Event>();\n readonly outScrollX = output<Event>();\n readonly outScrollY = output<Event>();\n readonly outScrollTop = output<Event>();\n readonly outScrollBottom = output<Event>();\n\n /* INJECT */\n private element = inject(ElementRef);\n private render2 = inject(Renderer2);\n\n constructor() {\n effect(() => {\n const options = this.options();\n this.divContainer.className = '';\n this.classContainer()?.split(' ').forEach(className => {\n if (!className) {\n return;\n }\n this.divContainer.classList.add(className);\n });\n const elementCheckMutationX = this.elementCheckScrollX() || this.Element;\n const elementCheckMutationY = this.elementCheckScrollY() || this.Element;\n\n untracked(() => {\n if (options?.scrollX !== 'hidden') {\n this.subsX.unsubscribe();\n this.createScrollbar('X', this.trackX, this.thumbX);\n this.bindEventsScrollBar('X', this.trackX);\n this.mutationObserverY()?.disconnect();\n this.subsX.add(this.mutationObserverSubjectX.pipe(debounceTime(250)).subscribe(this.updateScrollbarSize.bind(this, 'X')));\n this.mutationObserverX.set(new MutationObserver(() => this.mutationObserverSubjectX.next()));\n this.mutationObserverX()?.observe(elementCheckMutationX, { attributes: true, childList: true, subtree: true });\n this.handlerDragAndDropThumb('X');\n this.handlerClickTrack('X');\n }\n\n if (options?.scrollY !== 'hidden') {\n this.subsY.unsubscribe();\n this.createScrollbar('Y', this.trackY, this.thumbY);\n this.bindEventsScrollBar('Y', this.trackY);\n this.mutationObserverY()?.disconnect();\n this.subsY.add(this.mutationObserverSubjectY.pipe(debounceTime(250)).subscribe(this.updateScrollbarSize.bind(this, 'Y')));\n this.mutationObserverY.set(new MutationObserver(() => this.mutationObserverSubjectY.next()));\n this.mutationObserverY()?.observe(elementCheckMutationY, { attributes: true, childList: true, subtree: true });\n this.handlerDragAndDropThumb('Y');\n this.handlerClickTrack('Y');\n }\n });\n\n });\n }\n\n /* FUNCTIONS*/\n private get Element():HTMLElement {\n return this.element.nativeElement;\n }\n\n private createScrollbar(scrollDirection: TYPE_SCROLL_DIRECTION, trackEl: HTMLElement, thumbEl: HTMLElement) {\n const idStyleTag = \"#id-style-tag-custom-scroll-overlay\"\n const styleElCustomScrollOverlay = document.getElementById(idStyleTag);\n\n if (!styleElCustomScrollOverlay) {\n const styleEl = document.createElement('style');\n styleEl.setAttribute('id', idStyleTag);\n styleEl.innerHTML = this.styles();\n document.head.append(styleEl);\n }\n\n const stylesProperty = {\n \"box-sizing\": \"border-box\",\n \"scrollbar-width\": \"none\",\n \"scrollbar-color\": \"transparent transparent\",\n \"overflow\": \"hidden\",\n \"overflow-x\": `${this.options()?.scrollX || 'scroll'}`,\n \"overflow-y\": `${this.options()?.scrollY || 'scroll'}`\n } as any;\n\n Object.keys(stylesProperty).forEach(key => {\n this.render2.setStyle(this.Element, key, stylesProperty[key], 1);\n });\n\n trackEl.classList.add(`scrollbar-track-${scrollDirection}`);\n if (scrollDirection === 'X') {\n trackEl.style.width = `100%`;\n trackEl.style.height = `${this.scrollbarWidth()}px`;\n\n }\n\n if (scrollDirection === 'Y') {\n trackEl.style.height = `100%`;\n trackEl.style.width = `${this.scrollbarWidth()}px`;\n }\n\n thumbEl.classList.add(`scrollbar-thumb-${scrollDirection}`);\n thumbEl.style.backgroundColor = this.scrollbarColor();\n trackEl.appendChild(thumbEl);\n if (this.Element.className) {\n this.Element.className.split(' ').forEach((className: string) => {\n if (className && (['w-full', 'w-screen', 'h-full', 'h-screen'].includes(className) || className.includes('min-h-') || className.includes('min-w-') || /^(!?)(h|w)-\\[[0-9]+px\\]$/.test(className)) && !this.divContainer.classList.contains(className)) {\n this.divContainer.classList.add(className);\n }\n\n });\n if (!this.Element.className.includes('min-h-')) {\n this.divContainer.classList.add('min-h-0');\n\n }\n if (!this.Element.className.includes('min-w-')) {\n this.divContainer.classList.add('min-w-0');\n }\n }\n this.divContainer.appendChild(trackEl);\n\n if (!this.divContainer.style.position) {\n this.Element.parentElement?.insertBefore(this.divContainer, this.Element);\n this.divContainer.style.position = 'relative';\n }\n this.divContainer.append(this.Element);\n this.updateScrollbarSize(scrollDirection);\n }\n\n private bindEventsScrollBar(scrollDirection: TYPE_SCROLL_DIRECTION, trackEl: HTMLElement) {\n let scrollLeft = this.Element.scrollLeft;\n let scrollTop = this.Element.scrollTop;\n const subs: Subscription = fromEvent<Event>(this.Element, 'scroll').pipe(tap((event) => {\n const target = this.Element;\n\n this.outScroll.emit(event);\n if (scrollDirection === 'X') {\n if (target.scrollLeft && (target.scrollLeft + target.offsetWidth >= target.scrollWidth)) {\n target.scrollLeft = target.scrollWidth - target.offsetWidth - (target.offsetWidth - target.clientWidth);\n }\n\n if (target.scrollLeft !== scrollLeft) {\n this.outScrollX.emit(event);\n\n }\n scrollLeft = target.scrollLeft;\n this.updateScrollbarPosition(scrollDirection);\n\n return;\n }\n\n if (target.scrollTop === scrollTop) {\n return\n }\n this.updateScrollbarPosition(scrollDirection);\n scrollTop = target.scrollTop;\n this.outScrollY.emit(event);\n\n if (target.scrollTop === 0) {\n return this.outScrollTop.emit(event);\n }\n\n if (target.scrollHeight <= target.scrollTop + target.offsetHeight + 3) {\n return this.outScrollBottom.emit(event);\n }\n }), takeUntil(this.onDestroy)).subscribe();\n\n subs.add(fromEvent(document, 'resize').pipe(tap(this.updateScrollbarSize.bind(this, scrollDirection)), takeUntil(this.onDestroy)).subscribe());\n\n subs.add(fromEvent(this.divContainer, 'mouseenter').pipe(tap(() => {\n trackEl.style.visibility = 'visible';\n trackEl.style.opacity = '1';\n this.updateScrollbarSize(scrollDirection);\n }), takeUntil(this.onDestroy)).subscribe());\n\n subs.add(fromEvent(this.divContainer, 'mouseleave').pipe(tap(() => {\n if(this.keepDisplayThumb()){\n return;\n }\n trackEl.style.visibility = 'hidden';\n trackEl.style.opacity = '0';\n }), takeUntil(this.onDestroy)).subscribe());\n\n if (scrollDirection === 'X') {\n this.subsX = subs;\n\n return;\n }\n\n if (scrollDirection === 'Y') {\n this.subsY = subs;\n\n return;\n }\n }\n\n protected handlerClickTrack(scrollDirection: TYPE_SCROLL_DIRECTION) {\n const elementTrack = scrollDirection === 'X' ? this.trackX : this.trackY;\n const subs = scrollDirection === 'X' ? this.subsX : this.subsY;\n\n subs.add(fromEvent<MouseEvent>(elementTrack, 'click').subscribe(e => {\n if(this.isScrollThumb()){\n return;\n }\n this.updateScrollPositionByUserAction(scrollDirection,e,'smooth');\n }));\n }\n\n protected handlerDragAndDropThumb(scrollDirection: TYPE_SCROLL_DIRECTION) {\n const elementTrack = scrollDirection === 'X' ? this.trackX : this.trackY;\n const elementThumb = scrollDirection === 'X' ? this.thumbX : this.thumbY;\n const subs = scrollDirection === 'X' ? this.subsX : this.subsY;\n let preEvent: MouseEvent;\n const elementMouseDown = fromEvent<MouseEvent>(elementThumb, 'mousedown').pipe(tap((e) => {\n e.stopPropagation();\n document.body.classList.add('!select-none');\n\n preEvent = e;\n this.isScrollThumb.set(true);\n this.keepDisplayThumb.set(true);\n }));\n const elementMousemove = fromEvent<MouseEvent>(elementThumb, 'mousemove').pipe(tap((e) => e.stopPropagation()));\n const documentMouseup = fromEvent<MouseEvent>(document, 'mouseup').pipe(tap((e) => {\n e.stopPropagation();\n this.keepDisplayThumb.set(false);\n if(!checkMouseOverInContainer(e,this.Element)){\n elementTrack.style.visibility = 'hidden';\n elementTrack.style.opacity = '0';\n }\n setTimeout(() => {\n document.body.classList.remove('!select-none');\n this.isScrollThumb.set(false);\n }, 250);\n }));\n const documentMousemove = fromEvent<MouseEvent>(document, 'mousemove').pipe(startWith(elementMousemove), takeUntil((documentMouseup)), takeUntil(this.onDestroy));\n const drag = elementMouseDown.pipe(mergeMap(() => documentMousemove), takeUntil(this.onDestroy));\n\n subs.add(drag.pipe(filter(e => e instanceof MouseEvent), tap((e: MouseEvent) => this.updateScrollPositionByUserAction(scrollDirection,e))).subscribe());\n }\n\n private updateScrollPositionByUserAction(scrollDirection: TYPE_SCROLL_DIRECTION,e:MouseEvent,behavior:'auto'|'smooth' = 'auto'){\n e.stopPropagation();\n if (scrollDirection === 'X') {\n const containerWidth = this.Element.offsetWidth;\n const contentWidth = (this.elementCheckScrollX() || this.Element).scrollWidth;\n const thumbPosition = e.clientX - this.Element.getBoundingClientRect().left;\n const scrollLeft = (thumbPosition / (containerWidth - this.thumbX.offsetWidth)) * (contentWidth - containerWidth);\n\n this.Element.scroll({ left: scrollLeft,behavior});\n return;\n }\n const containerHeight = this.Element.offsetHeight;\n const contentHeight = (this.elementCheckScrollY() || this.Element).scrollHeight;\n const thumbPosition = e.clientY - this.Element.getBoundingClientRect().top;\n const scrollTop = (thumbPosition / (containerHeight - this.thumbY.offsetHeight)) * (contentHeight - containerHeight);\n\n this.Element.scroll({ top: scrollTop,behavior});\n }\n\n private updateScrollbarSize(scrollDirection: TYPE_SCROLL_DIRECTION) {\n if (scrollDirection === 'X') {\n const containerWidth = this.Element.offsetWidth;\n const contentWidth = (this.elementCheckScrollX() || this.Element).scrollWidth;\n const thumbWidth = (containerWidth / contentWidth) * (containerWidth);\n\n this.thumbX.style.width = `${thumbWidth}px`;\n this.trackX.style.display = 'none';\n if (contentWidth > containerWidth) {\n this.trackX.style.display = 'block';\n }\n this.updateScrollbarPosition(scrollDirection);\n\n return;\n }\n\n const containerHeight = this.Element.offsetHeight;\n const contentHeight = (this.elementCheckScrollY() || this.Element).scrollHeight;\n const thumbHeight = (containerHeight / contentHeight) * (containerHeight);\n\n this.thumbY.style.height = `${thumbHeight < 40 ? 40 : thumbHeight}px`;\n this.trackY.style.display = 'none';\n if (contentHeight > containerHeight) {\n this.trackY.style.display = 'block';\n }\n\n this.updateScrollbarPosition('Y');\n }\n\n private updateScrollbarPosition(scrollDirection: TYPE_SCROLL_DIRECTION) {\n if (scrollDirection === 'X') {\n const containerWidth = this.Element.offsetWidth;\n const contentWidth = (this.elementCheckScrollX() || this.Element).scrollWidth;\n const scrollLeft = this.Element.scrollLeft;\n const thumbPosition = (scrollLeft / (contentWidth - containerWidth)) * (containerWidth - this.thumbX.offsetWidth);\n\n this.thumbX.style.left = `${thumbPosition}px`;\n\n return;\n }\n const containerHeight = this.Element.offsetHeight;\n const contentHeight = (this.elementCheckScrollY() || this.Element).scrollHeight;\n const scrollTop = this.Element.scrollTop;\n const thumbPosition = (scrollTop / (contentHeight - containerHeight)) * (containerHeight - this.thumbY.offsetHeight);\n\n this.thumbY.style.top = `${thumbPosition}px`;\n }\n\n ngOnDestroy(): void {\n this.divContainer.remove();\n this.mutationObserverX()?.disconnect();\n this.mutationObserverY()?.disconnect();\n this.subsX.unsubscribe();\n this.subsY.unsubscribe();\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n\n}","export type TYPE_SCROLL_DIRECTION = 'X' | 'Y';\nexport type TYPE_SCROLL_OVERFLOW = 'hidden' | 'scroll';\nexport interface IScrollOverlayOptions {\n scrollbarWidth?: number;\n scrollbarColor?: string;\n scrollX?: TYPE_SCROLL_OVERFLOW,\n scrollY?: TYPE_SCROLL_OVERFLOW\n};","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -3,6 +3,8 @@ import { IScrollOverlayOptions, TYPE_SCROLL_DIRECTION } from "./scroll.interface
|
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
export declare class LibsUiComponentsScrollOverlayDirective implements OnDestroy {
|
|
5
5
|
private readonly styles;
|
|
6
|
+
private isScrollThumb;
|
|
7
|
+
private keepDisplayThumb;
|
|
6
8
|
private subsX;
|
|
7
9
|
private subsY;
|
|
8
10
|
private mutationObserverSubjectX;
|
|
@@ -35,6 +37,7 @@ export declare class LibsUiComponentsScrollOverlayDirective implements OnDestroy
|
|
|
35
37
|
private bindEventsScrollBar;
|
|
36
38
|
protected handlerClickTrack(scrollDirection: TYPE_SCROLL_DIRECTION): void;
|
|
37
39
|
protected handlerDragAndDropThumb(scrollDirection: TYPE_SCROLL_DIRECTION): void;
|
|
40
|
+
private updateScrollPositionByUserAction;
|
|
38
41
|
private updateScrollbarSize;
|
|
39
42
|
private updateScrollbarPosition;
|
|
40
43
|
ngOnDestroy(): void;
|