@ethlete/cdk 4.10.0 → 4.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# @ethlete/cdk
|
|
2
2
|
|
|
3
|
+
## 4.10.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`6086268`](https://github.com/ethlete-io/ethdk/commit/60862685820a08524ea9a641c9144ad1f821a19b) Thanks [@TomTomB](https://github.com/TomTomB)! - Dont render scrollable navigation until we have more than one item inside
|
|
8
|
+
|
|
3
9
|
## 4.10.0
|
|
4
10
|
|
|
5
11
|
### Minor Changes
|
|
@@ -518,7 +518,7 @@ export class ScrollableComponent {
|
|
|
518
518
|
this._disableSnapping$.next();
|
|
519
519
|
}
|
|
520
520
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: ScrollableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
521
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.0", type: ScrollableComponent, isStandalone: true, selector: "et-scrollable", inputs: { _itemSize: ["itemSize", "_itemSize"], _direction: ["direction", "_direction"], _scrollableRole: ["scrollableRole", "_scrollableRole"], _scrollableClass: ["scrollableClass", "_scrollableClass"], _renderNavigation: ["renderNavigation", "_renderNavigation", booleanAttribute], _renderMasks: ["renderMasks", "_renderMasks", booleanAttribute], _renderButtons: ["renderButtons", "_renderButtons", booleanAttribute], _renderScrollbars: ["renderScrollbars", "_renderScrollbars", booleanAttribute], _stickyButtons: ["stickyButtons", "_stickyButtons", booleanAttribute], _cursorDragScroll: ["cursorDragScroll", "_cursorDragScroll", booleanAttribute], _disableActiveElementScrolling: ["disableActiveElementScrolling", "_disableActiveElementScrolling", booleanAttribute], _scrollMode: ["scrollMode", "_scrollMode"], _snap: ["snap", "_snap", booleanAttribute], _scrollMargin: ["scrollMargin", "_scrollMargin", numberAttribute] }, outputs: { scrollStateChange: "scrollStateChange", intersectionChange: "intersectionChange" }, host: { classAttribute: "et-scrollable" }, queries: [{ propertyName: "_activeElementList", predicate: SCROLLABLE_IS_ACTIVE_CHILD_TOKEN, descendants: true }], viewQueries: [{ propertyName: "_scrollable", first: true, predicate: ["scrollable"], descendants: true, static: true }, { propertyName: "_scrollableContainer", first: true, predicate: ["scrollableContainer"], descendants: true, static: true }, { propertyName: "_firstElement", first: true, predicate: ["firstElement"], descendants: true, static: true }, { propertyName: "_lastElement", first: true, predicate: ["lastElement"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"et-scrollable-wrapper\">\n <div\n #scrollable\n [attr.role]=\"scrollableRole() ?? undefined\"\n [etCursorDragScroll]=\"cursorDragScroll()\"\n [allowedDirection]=\"direction()\"\n (cursorDragStart)=\"setIsCursorDragging(true)\"\n (cursorDragEnd)=\"setIsCursorDragging(false)\"\n class=\"et-scrollable-container-outer\"\n >\n <div #scrollableContainer [ngClass]=\"scrollableClass()\" class=\"et-scrollable-container\">\n <div #firstElement class=\"et-scroll-observer-first-element\" etScrollableIgnoreChild></div>\n <ng-content />\n <div #lastElement class=\"et-scroll-observer-last-element\" etScrollableIgnoreChild></div>\n </div>\n </div>\n\n @if (renderMasks()) {\n <div class=\"et-scrollable-masks\">\n <div class=\"et-scrollable-mask et-scrollable-mask--start\"></div>\n <div class=\"et-scrollable-mask et-scrollable-mask--end\"></div>\n </div>\n }\n\n @if (renderButtons()) {\n <div class=\"et-scrollable-buttons\">\n <button\n (click)=\"scrollToStartDirection()\"\n class=\"et-scrollable-button et-scrollable-button--start\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n <button\n (click)=\"scrollToEndDirection()\"\n class=\"et-scrollable-button et-scrollable-button--end\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n </div>\n }\n</div>\n\n@if (renderNavigation()) {\n <div class=\"et-scrollable-navigation\" aria-hidden=\"true\">\n @for (item of scrollableNavigation(); track i; let i = $index) {\n <button\n [class.et-scrollable-navigation-item--active]=\"item.isActive\"\n (click)=\"scrollToElementViaNavigation(i, item.element)\"\n class=\"et-scrollable-navigation-item\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n ></button>\n }\n </div>\n}\n", styles: [".et-scrollable{--mask: #121212 0, transparent 100%;--mask-size: 25px;--_auto-size: min-content;--_flow: column;display:block}.et-scrollable .et-scrollable-wrapper{display:grid;position:relative}.et-scrollable[item-size=same]{--_auto-size: 1fr}.et-scrollable[item-size=full]{--_auto-size: var(--actual-item-size)}.et-scrollable[render-scrollbars=false] .et-scrollable-container-outer{scrollbar-width:none}.et-scrollable[render-scrollbars=false] .et-scrollable-container-outer::-webkit-scrollbar{display:none}.et-scrollable[direction=horizontal] .et-scrollable-container-outer{overflow-x:auto;overflow-y:hidden}.et-scrollable[direction=horizontal] .et-scrollable-container{grid-auto-columns:var(--_auto-size)}.et-scrollable[direction=horizontal] .et-scrollable-mask,.et-scrollable[direction=horizontal] .et-scrollable-button{inline-size:var(--mask-size);block-size:100%}.et-scrollable[direction=horizontal] .et-scrollable-mask--start,.et-scrollable[direction=horizontal] .et-scrollable-button--start{inset-block-start:0;inset-inline:0 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--end,.et-scrollable[direction=horizontal] .et-scrollable-button--end{inset-block-start:0;inset-inline:calc(100% - 40px) 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--start{background:linear-gradient(to right,var(--mask))}.et-scrollable[direction=horizontal] .et-scrollable-mask--end{background:linear-gradient(to left,var(--mask));inset-inline:calc(100% - var(--mask-size)) 100%}.et-scrollable[direction=horizontal] .et-scrollable-button--start{inset-block-start:calc(50% - 20px);transform:rotate(-90deg)}.et-scrollable[direction=horizontal] .et-scrollable-button--end{inset-block-start:calc(50% - 20px);transform:rotate(90deg)}.et-scrollable[direction=horizontal] .et-scroll-observer-first-element,.et-scrollable[direction=horizontal] .et-scroll-observer-last-element{block-size:100%;inline-size:1px}.et-scrollable[direction=horizontal] .et-scroll-observer-first-element{inset-inline-start:1px}.et-scrollable[direction=horizontal] .et-scroll-observer-last-element{inset-inline-end:1px}.et-scrollable[direction=vertical]{--_flow: row}.et-scrollable[direction=vertical] .et-scrollable-container-outer{overflow-x:hidden;overflow-y:auto}.et-scrollable[direction=vertical] .et-scrollable-container{grid-auto-rows:var(--_auto-size)}.et-scrollable[direction=vertical] .et-scrollable-mask,.et-scrollable[direction=vertical] .et-scrollable-button{block-size:var(--mask-size);inline-size:100%}.et-scrollable[direction=vertical] .et-scrollable-mask--start,.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-block-start:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--end,.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-block-end:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--start{background:linear-gradient(to bottom,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-mask--end{background:linear-gradient(to top,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-inline-start:calc(50% - 20px);transform:rotate(0)}.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-inline-start:calc(50% - 20px);transform:rotate(180deg)}.et-scrollable[direction=vertical] .et-scroll-observer-first-element,.et-scrollable[direction=vertical] .et-scroll-observer-last-element{inline-size:100%;block-size:1px}.et-scrollable[direction=vertical] .et-scroll-observer-first-element{inset-block-start:1px}.et-scrollable[direction=vertical] .et-scroll-observer-last-element{inset-block-end:1px}.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-masks .et-scrollable-mask--start,.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{opacity:1}.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{pointer-events:all}.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-masks .et-scrollable-mask--end,.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{opacity:1}.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{pointer-events:all}.et-scrollable .et-scrollable-container-outer{overflow:auto;display:grid;position:relative;grid-row:1/1;grid-column:1/1}.et-scrollable .et-scroll-observer-first-element,.et-scrollable .et-scroll-observer-last-element{position:absolute;pointer-events:none}.et-scrollable .et-scrollable-container{display:grid;grid-auto-flow:var(--_flow);position:relative}.et-scrollable .et-scrollable-masks,.et-scrollable .et-scrollable-buttons{grid-row:1/1;grid-column:1/1;pointer-events:none}.et-scrollable .et-scrollable-masks .et-scrollable-mask,.et-scrollable .et-scrollable-masks .et-scrollable-button,.et-scrollable .et-scrollable-buttons .et-scrollable-mask,.et-scrollable .et-scrollable-buttons .et-scrollable-button{position:absolute;opacity:0}.et-scrollable.et-scrollable--can-scroll.et-scrollable--enable-overlay-animations .et-scrollable-mask,.et-scrollable.et-scrollable--can-scroll.et-scrollable--enable-overlay-animations .et-scrollable-button{transition:opacity .3s var(--ease-5)}.et-scrollable .et-scrollable-buttons .et-scrollable-button{background:transparent;border:none;padding:12px;inline-size:40px;block-size:40px;border-radius:4px;cursor:pointer}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-chevron-icon{pointer-events:none}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--start{inset-inline:0 0}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--end{inset-inline:calc(100% - 40px) 0}.et-scrollable[sticky-buttons=true]{--_sticky-margin: 10%}.et-scrollable[sticky-buttons=true] .et-scrollable-button{position:sticky}.et-scrollable[sticky-buttons=true][direction=horizontal] .et-scrollable-buttons{margin-block:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons{margin-inline:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons .et-scrollable-button--end{inset-block-start:100%}.et-scrollable .et-scrollable-navigation{display:flex;justify-content:center;gap:10px;margin-block-start:10px}.et-scrollable .et-scrollable-navigation .et-scrollable-navigation-item{all:unset;inline-size:10px;block-size:10px;display:block;background-color:#4b4b4b;border-radius:50%;cursor:pointer}.et-scrollable .et-scrollable-navigation .et-scrollable-navigation-item.et-scrollable-navigation-item--active{background-color:#c6c6c6}\n"], dependencies: [{ kind: "directive", type: CursorDragScrollDirective, selector: "[etCursorDragScroll]", inputs: ["etCursorDragScroll", "allowedDirection"], outputs: ["cursorDragStart", "cursorDragMove", "cursorDragEnd"], exportAs: ["etCursorDragScroll"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ChevronIconComponent, selector: "et-chevron-icon" }, { kind: "directive", type: ScrollableIgnoreChildDirective, selector: "[etScrollableIgnoreChild]", inputs: ["etScrollableIgnoreChild"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
521
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.0", type: ScrollableComponent, isStandalone: true, selector: "et-scrollable", inputs: { _itemSize: ["itemSize", "_itemSize"], _direction: ["direction", "_direction"], _scrollableRole: ["scrollableRole", "_scrollableRole"], _scrollableClass: ["scrollableClass", "_scrollableClass"], _renderNavigation: ["renderNavigation", "_renderNavigation", booleanAttribute], _renderMasks: ["renderMasks", "_renderMasks", booleanAttribute], _renderButtons: ["renderButtons", "_renderButtons", booleanAttribute], _renderScrollbars: ["renderScrollbars", "_renderScrollbars", booleanAttribute], _stickyButtons: ["stickyButtons", "_stickyButtons", booleanAttribute], _cursorDragScroll: ["cursorDragScroll", "_cursorDragScroll", booleanAttribute], _disableActiveElementScrolling: ["disableActiveElementScrolling", "_disableActiveElementScrolling", booleanAttribute], _scrollMode: ["scrollMode", "_scrollMode"], _snap: ["snap", "_snap", booleanAttribute], _scrollMargin: ["scrollMargin", "_scrollMargin", numberAttribute] }, outputs: { scrollStateChange: "scrollStateChange", intersectionChange: "intersectionChange" }, host: { classAttribute: "et-scrollable" }, queries: [{ propertyName: "_activeElementList", predicate: SCROLLABLE_IS_ACTIVE_CHILD_TOKEN, descendants: true }], viewQueries: [{ propertyName: "_scrollable", first: true, predicate: ["scrollable"], descendants: true, static: true }, { propertyName: "_scrollableContainer", first: true, predicate: ["scrollableContainer"], descendants: true, static: true }, { propertyName: "_firstElement", first: true, predicate: ["firstElement"], descendants: true, static: true }, { propertyName: "_lastElement", first: true, predicate: ["lastElement"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"et-scrollable-wrapper\">\n <div\n #scrollable\n [attr.role]=\"scrollableRole() ?? undefined\"\n [etCursorDragScroll]=\"cursorDragScroll()\"\n [allowedDirection]=\"direction()\"\n (cursorDragStart)=\"setIsCursorDragging(true)\"\n (cursorDragEnd)=\"setIsCursorDragging(false)\"\n class=\"et-scrollable-container-outer\"\n >\n <div #scrollableContainer [ngClass]=\"scrollableClass()\" class=\"et-scrollable-container\">\n <div #firstElement class=\"et-scroll-observer-first-element\" etScrollableIgnoreChild></div>\n <ng-content />\n <div #lastElement class=\"et-scroll-observer-last-element\" etScrollableIgnoreChild></div>\n </div>\n </div>\n\n @if (renderMasks()) {\n <div class=\"et-scrollable-masks\">\n <div class=\"et-scrollable-mask et-scrollable-mask--start\"></div>\n <div class=\"et-scrollable-mask et-scrollable-mask--end\"></div>\n </div>\n }\n\n @if (renderButtons()) {\n <div class=\"et-scrollable-buttons\">\n <button\n (click)=\"scrollToStartDirection()\"\n class=\"et-scrollable-button et-scrollable-button--start\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n <button\n (click)=\"scrollToEndDirection()\"\n class=\"et-scrollable-button et-scrollable-button--end\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n </div>\n }\n</div>\n\n@if (renderNavigation() && scrollableNavigation().length > 1) {\n <div class=\"et-scrollable-navigation\" aria-hidden=\"true\">\n @for (item of scrollableNavigation(); track i; let i = $index) {\n <button\n [class.et-scrollable-navigation-item--active]=\"item.isActive\"\n (click)=\"scrollToElementViaNavigation(i, item.element)\"\n class=\"et-scrollable-navigation-item\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n ></button>\n }\n </div>\n}\n", styles: [".et-scrollable{--mask: #121212 0, transparent 100%;--mask-size: 25px;--_auto-size: min-content;--_flow: column;display:block}.et-scrollable .et-scrollable-wrapper{display:grid;position:relative}.et-scrollable[item-size=same]{--_auto-size: 1fr}.et-scrollable[item-size=full]{--_auto-size: var(--actual-item-size)}.et-scrollable[render-scrollbars=false] .et-scrollable-container-outer{scrollbar-width:none}.et-scrollable[render-scrollbars=false] .et-scrollable-container-outer::-webkit-scrollbar{display:none}.et-scrollable[direction=horizontal] .et-scrollable-container-outer{overflow-x:auto;overflow-y:hidden}.et-scrollable[direction=horizontal] .et-scrollable-container{grid-auto-columns:var(--_auto-size)}.et-scrollable[direction=horizontal] .et-scrollable-mask,.et-scrollable[direction=horizontal] .et-scrollable-button{inline-size:var(--mask-size);block-size:100%}.et-scrollable[direction=horizontal] .et-scrollable-mask--start,.et-scrollable[direction=horizontal] .et-scrollable-button--start{inset-block-start:0;inset-inline:0 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--end,.et-scrollable[direction=horizontal] .et-scrollable-button--end{inset-block-start:0;inset-inline:calc(100% - 40px) 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--start{background:linear-gradient(to right,var(--mask))}.et-scrollable[direction=horizontal] .et-scrollable-mask--end{background:linear-gradient(to left,var(--mask));inset-inline:calc(100% - var(--mask-size)) 100%}.et-scrollable[direction=horizontal] .et-scrollable-button--start{inset-block-start:calc(50% - 20px);transform:rotate(-90deg)}.et-scrollable[direction=horizontal] .et-scrollable-button--end{inset-block-start:calc(50% - 20px);transform:rotate(90deg)}.et-scrollable[direction=horizontal] .et-scroll-observer-first-element,.et-scrollable[direction=horizontal] .et-scroll-observer-last-element{block-size:100%;inline-size:1px}.et-scrollable[direction=horizontal] .et-scroll-observer-first-element{inset-inline-start:1px}.et-scrollable[direction=horizontal] .et-scroll-observer-last-element{inset-inline-end:1px}.et-scrollable[direction=vertical]{--_flow: row}.et-scrollable[direction=vertical] .et-scrollable-container-outer{overflow-x:hidden;overflow-y:auto}.et-scrollable[direction=vertical] .et-scrollable-container{grid-auto-rows:var(--_auto-size)}.et-scrollable[direction=vertical] .et-scrollable-mask,.et-scrollable[direction=vertical] .et-scrollable-button{block-size:var(--mask-size);inline-size:100%}.et-scrollable[direction=vertical] .et-scrollable-mask--start,.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-block-start:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--end,.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-block-end:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--start{background:linear-gradient(to bottom,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-mask--end{background:linear-gradient(to top,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-inline-start:calc(50% - 20px);transform:rotate(0)}.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-inline-start:calc(50% - 20px);transform:rotate(180deg)}.et-scrollable[direction=vertical] .et-scroll-observer-first-element,.et-scrollable[direction=vertical] .et-scroll-observer-last-element{inline-size:100%;block-size:1px}.et-scrollable[direction=vertical] .et-scroll-observer-first-element{inset-block-start:1px}.et-scrollable[direction=vertical] .et-scroll-observer-last-element{inset-block-end:1px}.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-masks .et-scrollable-mask--start,.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{opacity:1}.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{pointer-events:all}.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-masks .et-scrollable-mask--end,.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{opacity:1}.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{pointer-events:all}.et-scrollable .et-scrollable-container-outer{overflow:auto;display:grid;position:relative;grid-row:1/1;grid-column:1/1}.et-scrollable .et-scroll-observer-first-element,.et-scrollable .et-scroll-observer-last-element{position:absolute;pointer-events:none}.et-scrollable .et-scrollable-container{display:grid;grid-auto-flow:var(--_flow);position:relative}.et-scrollable .et-scrollable-masks,.et-scrollable .et-scrollable-buttons{grid-row:1/1;grid-column:1/1;pointer-events:none}.et-scrollable .et-scrollable-masks .et-scrollable-mask,.et-scrollable .et-scrollable-masks .et-scrollable-button,.et-scrollable .et-scrollable-buttons .et-scrollable-mask,.et-scrollable .et-scrollable-buttons .et-scrollable-button{position:absolute;opacity:0}.et-scrollable.et-scrollable--can-scroll.et-scrollable--enable-overlay-animations .et-scrollable-mask,.et-scrollable.et-scrollable--can-scroll.et-scrollable--enable-overlay-animations .et-scrollable-button{transition:opacity .3s var(--ease-5)}.et-scrollable .et-scrollable-buttons .et-scrollable-button{background:transparent;border:none;padding:12px;inline-size:40px;block-size:40px;border-radius:4px;cursor:pointer}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-chevron-icon{pointer-events:none}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--start{inset-inline:0 0}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--end{inset-inline:calc(100% - 40px) 0}.et-scrollable[sticky-buttons=true]{--_sticky-margin: 10%}.et-scrollable[sticky-buttons=true] .et-scrollable-button{position:sticky}.et-scrollable[sticky-buttons=true][direction=horizontal] .et-scrollable-buttons{margin-block:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons{margin-inline:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons .et-scrollable-button--end{inset-block-start:100%}.et-scrollable .et-scrollable-navigation{display:flex;justify-content:center;gap:10px;margin-block-start:10px}.et-scrollable .et-scrollable-navigation .et-scrollable-navigation-item{all:unset;inline-size:10px;block-size:10px;display:block;background-color:#4b4b4b;border-radius:50%;cursor:pointer}.et-scrollable .et-scrollable-navigation .et-scrollable-navigation-item.et-scrollable-navigation-item--active{background-color:#c6c6c6}\n"], dependencies: [{ kind: "directive", type: CursorDragScrollDirective, selector: "[etCursorDragScroll]", inputs: ["etCursorDragScroll", "allowedDirection"], outputs: ["cursorDragStart", "cursorDragMove", "cursorDragEnd"], exportAs: ["etCursorDragScroll"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ChevronIconComponent, selector: "et-chevron-icon" }, { kind: "directive", type: ScrollableIgnoreChildDirective, selector: "[etScrollableIgnoreChild]", inputs: ["etScrollableIgnoreChild"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
522
522
|
}
|
|
523
523
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: ScrollableComponent, decorators: [{
|
|
524
524
|
type: Component,
|
|
@@ -532,7 +532,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImpor
|
|
|
532
532
|
ScrollableIgnoreChildDirective,
|
|
533
533
|
], host: {
|
|
534
534
|
class: 'et-scrollable',
|
|
535
|
-
}, template: "<div class=\"et-scrollable-wrapper\">\n <div\n #scrollable\n [attr.role]=\"scrollableRole() ?? undefined\"\n [etCursorDragScroll]=\"cursorDragScroll()\"\n [allowedDirection]=\"direction()\"\n (cursorDragStart)=\"setIsCursorDragging(true)\"\n (cursorDragEnd)=\"setIsCursorDragging(false)\"\n class=\"et-scrollable-container-outer\"\n >\n <div #scrollableContainer [ngClass]=\"scrollableClass()\" class=\"et-scrollable-container\">\n <div #firstElement class=\"et-scroll-observer-first-element\" etScrollableIgnoreChild></div>\n <ng-content />\n <div #lastElement class=\"et-scroll-observer-last-element\" etScrollableIgnoreChild></div>\n </div>\n </div>\n\n @if (renderMasks()) {\n <div class=\"et-scrollable-masks\">\n <div class=\"et-scrollable-mask et-scrollable-mask--start\"></div>\n <div class=\"et-scrollable-mask et-scrollable-mask--end\"></div>\n </div>\n }\n\n @if (renderButtons()) {\n <div class=\"et-scrollable-buttons\">\n <button\n (click)=\"scrollToStartDirection()\"\n class=\"et-scrollable-button et-scrollable-button--start\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n <button\n (click)=\"scrollToEndDirection()\"\n class=\"et-scrollable-button et-scrollable-button--end\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n </div>\n }\n</div>\n\n@if (renderNavigation()) {\n <div class=\"et-scrollable-navigation\" aria-hidden=\"true\">\n @for (item of scrollableNavigation(); track i; let i = $index) {\n <button\n [class.et-scrollable-navigation-item--active]=\"item.isActive\"\n (click)=\"scrollToElementViaNavigation(i, item.element)\"\n class=\"et-scrollable-navigation-item\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n ></button>\n }\n </div>\n}\n", styles: [".et-scrollable{--mask: #121212 0, transparent 100%;--mask-size: 25px;--_auto-size: min-content;--_flow: column;display:block}.et-scrollable .et-scrollable-wrapper{display:grid;position:relative}.et-scrollable[item-size=same]{--_auto-size: 1fr}.et-scrollable[item-size=full]{--_auto-size: var(--actual-item-size)}.et-scrollable[render-scrollbars=false] .et-scrollable-container-outer{scrollbar-width:none}.et-scrollable[render-scrollbars=false] .et-scrollable-container-outer::-webkit-scrollbar{display:none}.et-scrollable[direction=horizontal] .et-scrollable-container-outer{overflow-x:auto;overflow-y:hidden}.et-scrollable[direction=horizontal] .et-scrollable-container{grid-auto-columns:var(--_auto-size)}.et-scrollable[direction=horizontal] .et-scrollable-mask,.et-scrollable[direction=horizontal] .et-scrollable-button{inline-size:var(--mask-size);block-size:100%}.et-scrollable[direction=horizontal] .et-scrollable-mask--start,.et-scrollable[direction=horizontal] .et-scrollable-button--start{inset-block-start:0;inset-inline:0 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--end,.et-scrollable[direction=horizontal] .et-scrollable-button--end{inset-block-start:0;inset-inline:calc(100% - 40px) 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--start{background:linear-gradient(to right,var(--mask))}.et-scrollable[direction=horizontal] .et-scrollable-mask--end{background:linear-gradient(to left,var(--mask));inset-inline:calc(100% - var(--mask-size)) 100%}.et-scrollable[direction=horizontal] .et-scrollable-button--start{inset-block-start:calc(50% - 20px);transform:rotate(-90deg)}.et-scrollable[direction=horizontal] .et-scrollable-button--end{inset-block-start:calc(50% - 20px);transform:rotate(90deg)}.et-scrollable[direction=horizontal] .et-scroll-observer-first-element,.et-scrollable[direction=horizontal] .et-scroll-observer-last-element{block-size:100%;inline-size:1px}.et-scrollable[direction=horizontal] .et-scroll-observer-first-element{inset-inline-start:1px}.et-scrollable[direction=horizontal] .et-scroll-observer-last-element{inset-inline-end:1px}.et-scrollable[direction=vertical]{--_flow: row}.et-scrollable[direction=vertical] .et-scrollable-container-outer{overflow-x:hidden;overflow-y:auto}.et-scrollable[direction=vertical] .et-scrollable-container{grid-auto-rows:var(--_auto-size)}.et-scrollable[direction=vertical] .et-scrollable-mask,.et-scrollable[direction=vertical] .et-scrollable-button{block-size:var(--mask-size);inline-size:100%}.et-scrollable[direction=vertical] .et-scrollable-mask--start,.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-block-start:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--end,.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-block-end:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--start{background:linear-gradient(to bottom,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-mask--end{background:linear-gradient(to top,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-inline-start:calc(50% - 20px);transform:rotate(0)}.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-inline-start:calc(50% - 20px);transform:rotate(180deg)}.et-scrollable[direction=vertical] .et-scroll-observer-first-element,.et-scrollable[direction=vertical] .et-scroll-observer-last-element{inline-size:100%;block-size:1px}.et-scrollable[direction=vertical] .et-scroll-observer-first-element{inset-block-start:1px}.et-scrollable[direction=vertical] .et-scroll-observer-last-element{inset-block-end:1px}.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-masks .et-scrollable-mask--start,.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{opacity:1}.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{pointer-events:all}.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-masks .et-scrollable-mask--end,.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{opacity:1}.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{pointer-events:all}.et-scrollable .et-scrollable-container-outer{overflow:auto;display:grid;position:relative;grid-row:1/1;grid-column:1/1}.et-scrollable .et-scroll-observer-first-element,.et-scrollable .et-scroll-observer-last-element{position:absolute;pointer-events:none}.et-scrollable .et-scrollable-container{display:grid;grid-auto-flow:var(--_flow);position:relative}.et-scrollable .et-scrollable-masks,.et-scrollable .et-scrollable-buttons{grid-row:1/1;grid-column:1/1;pointer-events:none}.et-scrollable .et-scrollable-masks .et-scrollable-mask,.et-scrollable .et-scrollable-masks .et-scrollable-button,.et-scrollable .et-scrollable-buttons .et-scrollable-mask,.et-scrollable .et-scrollable-buttons .et-scrollable-button{position:absolute;opacity:0}.et-scrollable.et-scrollable--can-scroll.et-scrollable--enable-overlay-animations .et-scrollable-mask,.et-scrollable.et-scrollable--can-scroll.et-scrollable--enable-overlay-animations .et-scrollable-button{transition:opacity .3s var(--ease-5)}.et-scrollable .et-scrollable-buttons .et-scrollable-button{background:transparent;border:none;padding:12px;inline-size:40px;block-size:40px;border-radius:4px;cursor:pointer}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-chevron-icon{pointer-events:none}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--start{inset-inline:0 0}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--end{inset-inline:calc(100% - 40px) 0}.et-scrollable[sticky-buttons=true]{--_sticky-margin: 10%}.et-scrollable[sticky-buttons=true] .et-scrollable-button{position:sticky}.et-scrollable[sticky-buttons=true][direction=horizontal] .et-scrollable-buttons{margin-block:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons{margin-inline:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons .et-scrollable-button--end{inset-block-start:100%}.et-scrollable .et-scrollable-navigation{display:flex;justify-content:center;gap:10px;margin-block-start:10px}.et-scrollable .et-scrollable-navigation .et-scrollable-navigation-item{all:unset;inline-size:10px;block-size:10px;display:block;background-color:#4b4b4b;border-radius:50%;cursor:pointer}.et-scrollable .et-scrollable-navigation .et-scrollable-navigation-item.et-scrollable-navigation-item--active{background-color:#c6c6c6}\n"] }]
|
|
535
|
+
}, template: "<div class=\"et-scrollable-wrapper\">\n <div\n #scrollable\n [attr.role]=\"scrollableRole() ?? undefined\"\n [etCursorDragScroll]=\"cursorDragScroll()\"\n [allowedDirection]=\"direction()\"\n (cursorDragStart)=\"setIsCursorDragging(true)\"\n (cursorDragEnd)=\"setIsCursorDragging(false)\"\n class=\"et-scrollable-container-outer\"\n >\n <div #scrollableContainer [ngClass]=\"scrollableClass()\" class=\"et-scrollable-container\">\n <div #firstElement class=\"et-scroll-observer-first-element\" etScrollableIgnoreChild></div>\n <ng-content />\n <div #lastElement class=\"et-scroll-observer-last-element\" etScrollableIgnoreChild></div>\n </div>\n </div>\n\n @if (renderMasks()) {\n <div class=\"et-scrollable-masks\">\n <div class=\"et-scrollable-mask et-scrollable-mask--start\"></div>\n <div class=\"et-scrollable-mask et-scrollable-mask--end\"></div>\n </div>\n }\n\n @if (renderButtons()) {\n <div class=\"et-scrollable-buttons\">\n <button\n (click)=\"scrollToStartDirection()\"\n class=\"et-scrollable-button et-scrollable-button--start\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n <button\n (click)=\"scrollToEndDirection()\"\n class=\"et-scrollable-button et-scrollable-button--end\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n </div>\n }\n</div>\n\n@if (renderNavigation() && scrollableNavigation().length > 1) {\n <div class=\"et-scrollable-navigation\" aria-hidden=\"true\">\n @for (item of scrollableNavigation(); track i; let i = $index) {\n <button\n [class.et-scrollable-navigation-item--active]=\"item.isActive\"\n (click)=\"scrollToElementViaNavigation(i, item.element)\"\n class=\"et-scrollable-navigation-item\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n ></button>\n }\n </div>\n}\n", styles: [".et-scrollable{--mask: #121212 0, transparent 100%;--mask-size: 25px;--_auto-size: min-content;--_flow: column;display:block}.et-scrollable .et-scrollable-wrapper{display:grid;position:relative}.et-scrollable[item-size=same]{--_auto-size: 1fr}.et-scrollable[item-size=full]{--_auto-size: var(--actual-item-size)}.et-scrollable[render-scrollbars=false] .et-scrollable-container-outer{scrollbar-width:none}.et-scrollable[render-scrollbars=false] .et-scrollable-container-outer::-webkit-scrollbar{display:none}.et-scrollable[direction=horizontal] .et-scrollable-container-outer{overflow-x:auto;overflow-y:hidden}.et-scrollable[direction=horizontal] .et-scrollable-container{grid-auto-columns:var(--_auto-size)}.et-scrollable[direction=horizontal] .et-scrollable-mask,.et-scrollable[direction=horizontal] .et-scrollable-button{inline-size:var(--mask-size);block-size:100%}.et-scrollable[direction=horizontal] .et-scrollable-mask--start,.et-scrollable[direction=horizontal] .et-scrollable-button--start{inset-block-start:0;inset-inline:0 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--end,.et-scrollable[direction=horizontal] .et-scrollable-button--end{inset-block-start:0;inset-inline:calc(100% - 40px) 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--start{background:linear-gradient(to right,var(--mask))}.et-scrollable[direction=horizontal] .et-scrollable-mask--end{background:linear-gradient(to left,var(--mask));inset-inline:calc(100% - var(--mask-size)) 100%}.et-scrollable[direction=horizontal] .et-scrollable-button--start{inset-block-start:calc(50% - 20px);transform:rotate(-90deg)}.et-scrollable[direction=horizontal] .et-scrollable-button--end{inset-block-start:calc(50% - 20px);transform:rotate(90deg)}.et-scrollable[direction=horizontal] .et-scroll-observer-first-element,.et-scrollable[direction=horizontal] .et-scroll-observer-last-element{block-size:100%;inline-size:1px}.et-scrollable[direction=horizontal] .et-scroll-observer-first-element{inset-inline-start:1px}.et-scrollable[direction=horizontal] .et-scroll-observer-last-element{inset-inline-end:1px}.et-scrollable[direction=vertical]{--_flow: row}.et-scrollable[direction=vertical] .et-scrollable-container-outer{overflow-x:hidden;overflow-y:auto}.et-scrollable[direction=vertical] .et-scrollable-container{grid-auto-rows:var(--_auto-size)}.et-scrollable[direction=vertical] .et-scrollable-mask,.et-scrollable[direction=vertical] .et-scrollable-button{block-size:var(--mask-size);inline-size:100%}.et-scrollable[direction=vertical] .et-scrollable-mask--start,.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-block-start:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--end,.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-block-end:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--start{background:linear-gradient(to bottom,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-mask--end{background:linear-gradient(to top,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-inline-start:calc(50% - 20px);transform:rotate(0)}.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-inline-start:calc(50% - 20px);transform:rotate(180deg)}.et-scrollable[direction=vertical] .et-scroll-observer-first-element,.et-scrollable[direction=vertical] .et-scroll-observer-last-element{inline-size:100%;block-size:1px}.et-scrollable[direction=vertical] .et-scroll-observer-first-element{inset-block-start:1px}.et-scrollable[direction=vertical] .et-scroll-observer-last-element{inset-block-end:1px}.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-masks .et-scrollable-mask--start,.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{opacity:1}.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{pointer-events:all}.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-masks .et-scrollable-mask--end,.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{opacity:1}.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{pointer-events:all}.et-scrollable .et-scrollable-container-outer{overflow:auto;display:grid;position:relative;grid-row:1/1;grid-column:1/1}.et-scrollable .et-scroll-observer-first-element,.et-scrollable .et-scroll-observer-last-element{position:absolute;pointer-events:none}.et-scrollable .et-scrollable-container{display:grid;grid-auto-flow:var(--_flow);position:relative}.et-scrollable .et-scrollable-masks,.et-scrollable .et-scrollable-buttons{grid-row:1/1;grid-column:1/1;pointer-events:none}.et-scrollable .et-scrollable-masks .et-scrollable-mask,.et-scrollable .et-scrollable-masks .et-scrollable-button,.et-scrollable .et-scrollable-buttons .et-scrollable-mask,.et-scrollable .et-scrollable-buttons .et-scrollable-button{position:absolute;opacity:0}.et-scrollable.et-scrollable--can-scroll.et-scrollable--enable-overlay-animations .et-scrollable-mask,.et-scrollable.et-scrollable--can-scroll.et-scrollable--enable-overlay-animations .et-scrollable-button{transition:opacity .3s var(--ease-5)}.et-scrollable .et-scrollable-buttons .et-scrollable-button{background:transparent;border:none;padding:12px;inline-size:40px;block-size:40px;border-radius:4px;cursor:pointer}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-chevron-icon{pointer-events:none}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--start{inset-inline:0 0}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--end{inset-inline:calc(100% - 40px) 0}.et-scrollable[sticky-buttons=true]{--_sticky-margin: 10%}.et-scrollable[sticky-buttons=true] .et-scrollable-button{position:sticky}.et-scrollable[sticky-buttons=true][direction=horizontal] .et-scrollable-buttons{margin-block:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons{margin-inline:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons .et-scrollable-button--end{inset-block-start:100%}.et-scrollable .et-scrollable-navigation{display:flex;justify-content:center;gap:10px;margin-block-start:10px}.et-scrollable .et-scrollable-navigation .et-scrollable-navigation-item{all:unset;inline-size:10px;block-size:10px;display:block;background-color:#4b4b4b;border-radius:50%;cursor:pointer}.et-scrollable .et-scrollable-navigation .et-scrollable-navigation-item.et-scrollable-navigation-item--active{background-color:#c6c6c6}\n"] }]
|
|
536
536
|
}], ctorParameters: () => [], propDecorators: { _itemSize: [{
|
|
537
537
|
type: Input,
|
|
538
538
|
args: [{ alias: 'itemSize' }]
|
|
@@ -595,4 +595,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImpor
|
|
|
595
595
|
type: ContentChildren,
|
|
596
596
|
args: [SCROLLABLE_IS_ACTIVE_CHILD_TOKEN, { descendants: true }]
|
|
597
597
|
}] } });
|
|
598
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsYWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvc2Nyb2xsYWJsZS9jb21wb25lbnRzL3Njcm9sbGFibGUvc2Nyb2xsYWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvc2Nyb2xsYWJsZS9jb21wb25lbnRzL3Njcm9sbGFibGUvc2Nyb2xsYWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEVBQ1QsZUFBZSxFQUNmLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUUsT0FBTyxFQUVMLHlCQUF5QixFQUN6QixZQUFZLEVBRVosMkJBQTJCLEVBRzNCLGNBQWMsRUFDZCxrQ0FBa0MsRUFDbEMsZ0JBQWdCLEVBQ2hCLFNBQVMsRUFDVCxlQUFlLEVBQ2YscUJBQXFCLEVBQ3JCLHlCQUF5QixFQUN6Qix3QkFBd0IsRUFDeEIsb0JBQW9CLEVBQ3BCLGlCQUFpQixFQUNqQiwyQkFBMkIsRUFDM0IsZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxlQUFlLEVBQ2YsT0FBTyxFQUNQLGFBQWEsRUFDYixZQUFZLEVBQ1osTUFBTSxF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dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFPN0Isb0JBQW9CO3NCQUQvQixTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFPdEMsYUFBYTtzQkFEeEIsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQU8vQixZQUFZO3NCQUR2QixTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBTzlCLGtCQUFrQjtzQkFEN0IsZUFBZTt1QkFBQyxnQ0FBZ0MsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBib29sZWFuQXR0cmlidXRlLFxuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBpbmplY3QsXG4gIGlzRGV2TW9kZSxcbiAgbnVtYmVyQXR0cmlidXRlLFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkLCB0b09ic2VydmFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge1xuICBDdXJyZW50RWxlbWVudFZpc2liaWxpdHksXG4gIEN1cnNvckRyYWdTY3JvbGxEaXJlY3RpdmUsXG4gIExldERpcmVjdGl2ZSxcbiAgTmdDbGFzc1R5cGUsXG4gIE9ic2VydmVTY3JvbGxTdGF0ZURpcmVjdGl2ZSxcbiAgU2Nyb2xsT2JzZXJ2ZXJTY3JvbGxTdGF0ZSxcbiAgU2Nyb2xsVG9FbGVtZW50T3B0aW9ucyxcbiAgVHlwZWRRdWVyeUxpc3QsXG4gIGdldEZpcnN0QW5kTGFzdFBhcnRpYWxJbnRlcnNlY3Rpb24sXG4gIGlzRWxlbWVudFZpc2libGUsXG4gIG5leHRGcmFtZSxcbiAgc2Nyb2xsVG9FbGVtZW50LFxuICBzaWduYWxFbGVtZW50Q2hpbGRyZW4sXG4gIHNpZ25hbEVsZW1lbnRJbnRlcnNlY3Rpb24sXG4gIHNpZ25hbEVsZW1lbnRTY3JvbGxTdGF0ZSxcbiAgc2lnbmFsSG9zdEF0dHJpYnV0ZXMsXG4gIHNpZ25hbEhvc3RDbGFzc2VzLFxuICBzaWduYWxIb3N0RWxlbWVudERpbWVuc2lvbnMsXG4gIHNpZ25hbEhvc3RTdHlsZXMsXG59IGZyb20gJ0BldGhsZXRlL2NvcmUnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBkZWJvdW5jZVRpbWUsXG4gIGZpbHRlcixcbiAgZnJvbUV2ZW50LFxuICBtYXAsXG4gIHRha2UsXG4gIHRha2VVbnRpbCxcbiAgdGFwLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENoZXZyb25JY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vaWNvbnMvY2hldnJvbi1pY29uJztcbmltcG9ydCB7IFNjcm9sbGFibGVJZ25vcmVDaGlsZERpcmVjdGl2ZSwgaXNTY3JvbGxhYmxlQ2hpbGRJZ25vcmVkIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9zY3JvbGxhYmxlLWlnbm9yZS1jaGlsZCc7XG5pbXBvcnQge1xuICBTQ1JPTExBQkxFX0lTX0FDVElWRV9DSElMRF9UT0tFTixcbiAgU2Nyb2xsYWJsZUlzQWN0aXZlQ2hpbGREaXJlY3RpdmUsXG59IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvc2Nyb2xsYWJsZS1pcy1hY3RpdmUtY2hpbGQnO1xuaW1wb3J0IHsgU2Nyb2xsYWJsZUludGVyc2VjdGlvbkNoYW5nZSwgU2Nyb2xsYWJsZVNjcm9sbE1vZGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbi8vIFRocmVzaG9sZHMgZm9yIHRoZSBpbnRlcnNlY3Rpb24gb2JzZXJ2ZXIuXG5jb25zdCBFTEVNRU5UX0lOVEVSU0VDVElPTl9USFJFU0hPTEQgPSBbXG4gIC8vIFdlIHVzZSA1MSBzdGVwcyB0byBnZXQgYSAyJSBzdGVwIHNpemUuXG4gIC4uLkFycmF5LmZyb20oeyBsZW5ndGg6IDUxIH0sIChfLCBpKSA9PiBpIC8gNTApLFxuXG4gIC8vIEFkZGl0aW9uYWwgc3RlcHMgbmVlZGVkIHNpbmNlIGRpc3BsYXkgc2NhbGluZyBjYW4gY2F1c2UgdGhlIGludGVyc2VjdGlvbiByYXRpbyB0byBiZSBzbGlnaHRseSBvZmYuXG4gIDAuMDEsXG4gIDAuMDA1LFxuICAwLjAwMSxcbiAgMC45OSxcbiAgMC45OTUsXG4gIDAuOTk5LFxuXTtcblxuaW50ZXJmYWNlIFNjcm9sbGFibGVOYXZpZ2F0aW9uSXRlbSB7XG4gIGlzQWN0aXZlOiBib29sZWFuO1xuICBlbGVtZW50OiBIVE1MRWxlbWVudDtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZXQtc2Nyb2xsYWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zY3JvbGxhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2Nyb2xsYWJsZS5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIEN1cnNvckRyYWdTY3JvbGxEaXJlY3RpdmUsXG4gICAgT2JzZXJ2ZVNjcm9sbFN0YXRlRGlyZWN0aXZlLFxuICAgIE5nQ2xhc3MsXG4gICAgTGV0RGlyZWN0aXZlLFxuICAgIENoZXZyb25JY29uQ29tcG9uZW50LFxuICAgIFNjcm9sbGFibGVJc0FjdGl2ZUNoaWxkRGlyZWN0aXZlLFxuICAgIFNjcm9sbGFibGVJZ25vcmVDaGlsZERpcmVjdGl2ZSxcbiAgXSxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnZXQtc2Nyb2xsYWJsZScsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIFNjcm9sbGFibGVDb21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IF9lbGVtZW50UmVmID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNDdXJzb3JEcmFnZ2luZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBASW5wdXQoeyBhbGlhczogJ2l0ZW1TaXplJyB9KVxuICBzZXQgX2l0ZW1TaXplKHY6ICdhdXRvJyB8ICdzYW1lJyB8ICdmdWxsJykge1xuICAgIHRoaXMuaXRlbVNpemUuc2V0KHYpO1xuICB9XG4gIHJlYWRvbmx5IGl0ZW1TaXplID0gc2lnbmFsPCdhdXRvJyB8ICdzYW1lJyB8ICdmdWxsJz4oJ2F1dG8nKTtcblxuICBASW5wdXQoeyBhbGlhczogJ2RpcmVjdGlvbicgfSlcbiAgc2V0IF9kaXJlY3Rpb24odjogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJykge1xuICAgIHRoaXMuZGlyZWN0aW9uLnNldCh2KTtcbiAgfVxuICByZWFkb25seSBkaXJlY3Rpb24gPSBzaWduYWw8J2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJz4oJ2hvcml6b250YWwnKTtcblxuICBASW5wdXQoeyBhbGlhczogJ3Njcm9sbGFibGVSb2xlJyB9KVxuICBzZXQgX3Njcm9sbGFibGVSb2xlKHY6IHN0cmluZyB8IG51bGwpIHtcbiAgICB0aGlzLnNjcm9sbGFibGVSb2xlLnNldCh2KTtcbiAgfVxuICByZWFkb25seSBzY3JvbGxhYmxlUm9sZSA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICBASW5wdXQoeyBhbGlhczogJ3Njcm9sbGFibGVDbGFzcycgfSlcbiAgc2V0IF9zY3JvbGxhYmxlQ2xhc3ModjogTmdDbGFzc1R5cGUgfCBudWxsKSB7XG4gICAgdGhpcy5zY3JvbGxhYmxlQ2xhc3Muc2V0KHYpO1xuICB9XG4gIHJlYWRvbmx5IHNjcm9sbGFibGVDbGFzcyA9IHNpZ25hbDxOZ0NsYXNzVHlwZSB8IG51bGw+KG51bGwpO1xuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSwgYWxpYXM6ICdyZW5kZXJOYXZpZ2F0aW9uJyB9KVxuICBzZXQgX3JlbmRlck5hdmlnYXRpb24odjogYm9vbGVhbikge1xuICAgIHRoaXMucmVuZGVyTmF2aWdhdGlvbi5zZXQodik7XG4gIH1cbiAgcmVhZG9ubHkgcmVuZGVyTmF2aWdhdGlvbiA9IHNpZ25hbChmYWxzZSk7XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlLCBhbGlhczogJ3JlbmRlck1hc2tzJyB9KVxuICBzZXQgX3JlbmRlck1hc2tzKHY6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnJlbmRlck1hc2tzLnNldCh2KTtcbiAgfVxuICByZWFkb25seSByZW5kZXJNYXNrcyA9IHNpZ25hbCh0cnVlKTtcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUsIGFsaWFzOiAncmVuZGVyQnV0dG9ucycgfSlcbiAgc2V0IF9yZW5kZXJCdXR0b25zKHY6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnJlbmRlckJ1dHRvbnMuc2V0KHYpO1xuICB9XG4gIHJlYWRvbmx5IHJlbmRlckJ1dHRvbnMgPSBzaWduYWwodHJ1ZSk7XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlLCBhbGlhczogJ3JlbmRlclNjcm9sbGJhcnMnIH0pXG4gIHNldCBfcmVuZGVyU2Nyb2xsYmFycyh2OiBib29sZWFuKSB7XG4gICAgdGhpcy5yZW5kZXJTY3JvbGxiYXJzLnNldCh2KTtcbiAgfVxuICByZWFkb25seSByZW5kZXJTY3JvbGxiYXJzID0gc2lnbmFsKGZhbHNlKTtcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUsIGFsaWFzOiAnc3RpY2t5QnV0dG9ucycgfSlcbiAgc2V0IF9zdGlja3lCdXR0b25zKHY6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnN0aWNreUJ1dHRvbnMuc2V0KHYpO1xuICB9XG4gIHJlYWRvbmx5IHN0aWNreUJ1dHRvbnMgPSBzaWduYWwoZmFsc2UpO1xuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSwgYWxpYXM6ICdjdXJzb3JEcmFnU2Nyb2xsJyB9KVxuICBzZXQgX2N1cnNvckRyYWdTY3JvbGwodjogYm9vbGVhbikge1xuICAgIHRoaXMuY3Vyc29yRHJhZ1Njcm9sbC5zZXQodik7XG4gIH1cbiAgcmVhZG9ubHkgY3Vyc29yRHJhZ1Njcm9sbCA9IHNpZ25hbCh0cnVlKTtcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUsIGFsaWFzOiAnZGlzYWJsZUFjdGl2ZUVsZW1lbnRTY3JvbGxpbmcnIH0pXG4gIHNldCBfZGlzYWJsZUFjdGl2ZUVsZW1lbnRTY3JvbGxpbmcodjogYm9vbGVhbikge1xuICAgIHRoaXMuZGlzYWJsZUFjdGl2ZUVsZW1lbnRTY3JvbGxpbmcuc2V0KHYpO1xuICB9XG4gIHJlYWRvbmx5IGRpc2FibGVBY3RpdmVFbGVtZW50U2Nyb2xsaW5nID0gc2lnbmFsKGZhbHNlKTtcblxuICBASW5wdXQoeyBhbGlhczogJ3Njcm9sbE1vZGUnIH0pXG4gIHNldCBfc2Nyb2xsTW9kZSh2OiBTY3JvbGxhYmxlU2Nyb2xsTW9kZSkge1xuICAgIHRoaXMuc2Nyb2xsTW9kZS5zZXQodik7XG4gIH1cbiAgcmVhZG9ubHkgc2Nyb2xsTW9kZSA9IHNpZ25hbDxTY3JvbGxhYmxlU2Nyb2xsTW9kZT4oJ2NvbnRhaW5lcicpO1xuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSwgYWxpYXM6ICdzbmFwJyB9KVxuICBzZXQgX3NuYXAodjogYm9vbGVhbikge1xuICAgIHRoaXMuc25hcC5zZXQodik7XG4gIH1cbiAgcmVhZG9ubHkgc25hcCA9IHNpZ25hbChmYWxzZSk7XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUsIGFsaWFzOiAnc2Nyb2xsTWFyZ2luJyB9KVxuICBzZXQgX3Njcm9sbE1hcmdpbih2OiBudW1iZXIpIHtcbiAgICB0aGlzLnNjcm9sbE1hcmdpbi5zZXQodik7XG4gIH1cbiAgcmVhZG9ubHkgc2Nyb2xsTWFyZ2luID0gc2lnbmFsKDApO1xuXG4gIEBPdXRwdXQoKVxuICByZWFkb25seSBzY3JvbGxTdGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8U2Nyb2xsT2JzZXJ2ZXJTY3JvbGxTdGF0ZT4oKTtcblxuICBAT3V0cHV0KClcbiAgcmVhZG9ubHkgaW50ZXJzZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxTY3JvbGxhYmxlSW50ZXJzZWN0aW9uQ2hhbmdlW10+KCk7XG5cbiAgQFZpZXdDaGlsZCgnc2Nyb2xsYWJsZScsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHByaXZhdGUgc2V0IF9zY3JvbGxhYmxlKGU6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KSB7XG4gICAgdGhpcy5zY3JvbGxhYmxlLnNldChlKTtcbiAgfVxuICByZWFkb25seSBzY3JvbGxhYmxlID0gc2lnbmFsPEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHwgbnVsbD4obnVsbCk7XG5cbiAgQFZpZXdDaGlsZCgnc2Nyb2xsYWJsZUNvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHByaXZhdGUgc2V0IF9zY3JvbGxhYmxlQ29udGFpbmVyKGU6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KSB7XG4gICAgdGhpcy5zY3JvbGxhYmxlQ29udGFpbmVyLnNldChlKTtcbiAgfVxuICByZWFkb25seSBzY3JvbGxhYmxlQ29udGFpbmVyID0gc2lnbmFsPEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHwgbnVsbD4obnVsbCk7XG5cbiAgQFZpZXdDaGlsZCgnZmlyc3RFbGVtZW50JywgeyBzdGF0aWM6IHRydWUgfSlcbiAgcHJpdmF0ZSBzZXQgX2ZpcnN0RWxlbWVudChlOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50Pikge1xuICAgIHRoaXMuZmlyc3RFbGVtZW50LnNldChlKTtcbiAgfVxuICByZWFkb25seSBmaXJzdEVsZW1lbnQgPSBzaWduYWw8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4gfCBudWxsPihudWxsKTtcblxuICBAVmlld0NoaWxkKCdsYXN0RWxlbWVudCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHByaXZhdGUgc2V0IF9sYXN0RWxlbWVudChlOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50Pikge1xuICAgIHRoaXMubGFzdEVsZW1lbnQuc2V0KGUpO1xuICB9XG4gIHJlYWRvbmx5IGxhc3RFbGVtZW50ID0gc2lnbmFsPEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHwgbnVsbD4obnVsbCk7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihTQ1JPTExBQkxFX0lTX0FDVElWRV9DSElMRF9UT0tFTiwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICBwcml2YXRlIHNldCBfYWN0aXZlRWxlbWVudExpc3QoZTogVHlwZWRRdWVyeUxpc3Q8U2Nyb2xsYWJsZUlzQWN0aXZlQ2hpbGREaXJlY3RpdmU+KSB7XG4gICAgdGhpcy5hY3RpdmVFbGVtZW50TGlzdC5zZXQoZSk7XG4gIH1cbiAgcmVhZG9ubHkgYWN0aXZlRWxlbWVudExpc3QgPSBzaWduYWw8VHlwZWRRdWVyeUxpc3Q8U2Nyb2xsYWJsZUlzQWN0aXZlQ2hpbGREaXJlY3RpdmU+IHwgbnVsbD4obnVsbCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjb250YWluZXJTY3JvbGxTdGF0ZSA9IHNpZ25hbEVsZW1lbnRTY3JvbGxTdGF0ZSh0aGlzLnNjcm9sbGFibGUpO1xuICBwcml2YXRlIHJlYWRvbmx5IGZpcnN0RWxlbWVudEludGVyc2VjdGlvbiA9IHNpZ25hbEVsZW1lbnRJbnRlcnNlY3Rpb24odGhpcy5maXJzdEVsZW1lbnQsIHsgcm9vdDogdGhpcy5zY3JvbGxhYmxlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGZpcnN0RWxlbWVudFZpc2liaWxpdHkgPSBzaWduYWw8Q3VycmVudEVsZW1lbnRWaXNpYmlsaXR5IHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbGFzdEVsZW1lbnRJbnRlcnNlY3Rpb24gPSBzaWduYWxFbGVtZW50SW50ZXJzZWN0aW9uKHRoaXMubGFzdEVsZW1lbnQsIHsgcm9vdDogdGhpcy5zY3JvbGxhYmxlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGxhc3RFbGVtZW50VmlzaWJpbGl0eSA9IHNpZ25hbDxDdXJyZW50RWxlbWVudFZpc2liaWxpdHkgfCBudWxsPihudWxsKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGFsbFNjcm9sbGFibGVDaGlsZHJlbiA9IHNpZ25hbEVsZW1lbnRDaGlsZHJlbih0aGlzLnNjcm9sbGFibGVDb250YWluZXIpO1xuICBwcml2YXRlIHJlYWRvbmx5IHNjcm9sbGFibGVEaW1lbnNpb25zID0gc2lnbmFsSG9zdEVsZW1lbnREaW1lbnNpb25zKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Nyb2xsYWJsZUNoaWxkcmVuID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLmFsbFNjcm9sbGFibGVDaGlsZHJlbigpLmZpbHRlcigoYykgPT4gIWlzU2Nyb2xsYWJsZUNoaWxkSWdub3JlZChjKSksXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzYWJsZVNuYXBwaW5nJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzY3JvbGxhYmxlQ29udGVudEludGVyc2VjdGlvbnMgPSBzaWduYWxFbGVtZW50SW50ZXJzZWN0aW9uKHRoaXMuc2Nyb2xsYWJsZUNoaWxkcmVuLCB7XG4gICAgcm9vdDogdGhpcy5zY3JvbGxhYmxlLFxuICAgIHRocmVzaG9sZDogRUxFTUVOVF9JTlRFUlNFQ1RJT05fVEhSRVNIT0xELFxuICB9KTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHNjcm9sbGFibGVDb250ZW50SW50ZXJzZWN0aW9ucyQgPSB0b09ic2VydmFibGUodGhpcy5zY3JvbGxhYmxlQ29udGVudEludGVyc2VjdGlvbnMpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbWFudWFsQWN0aXZlTmF2aWdhdGlvbkluZGV4ID0gc2lnbmFsPG51bWJlciB8IG51bGw+KG51bGwpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY2FuU2Nyb2xsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGRpciA9IHRoaXMuZGlyZWN0aW9uKCk7XG5cbiAgICBpZiAoZGlyID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lclNjcm9sbFN0YXRlKCkuY2FuU2Nyb2xsSG9yaXpvbnRhbGx5O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lclNjcm9sbFN0YXRlKCkuY2FuU2Nyb2xsVmVydGljYWxseTtcbiAgfSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBpc0F0U3RhcnQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKCF0aGlzLmNhblNjcm9sbCgpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnRlcnNlY3Rpb24gPSB0aGlzLmZpcnN0RWxlbWVudEludGVyc2VjdGlvbigpWzBdO1xuXG4gICAgaWYgKCFpbnRlcnNlY3Rpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLmZpcnN0RWxlbWVudFZpc2liaWxpdHkoKT8uaW5saW5lID8/IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGludGVyc2VjdGlvbi5pc0ludGVyc2VjdGluZztcbiAgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaXNBdEVuZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAoIXRoaXMuY2FuU2Nyb2xsKCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGludGVyc2VjdGlvbiA9IHRoaXMubGFzdEVsZW1lbnRJbnRlcnNlY3Rpb24oKVswXTtcblxuICAgIGlmICghaW50ZXJzZWN0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy5sYXN0RWxlbWVudFZpc2liaWxpdHkoKT8uaW5saW5lID8/IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGludGVyc2VjdGlvbi5pc0ludGVyc2VjdGluZztcbiAgfSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfYWN0dWFsSXRlbVNpemUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKHRoaXMuaXRlbVNpemUoKSAhPT0gJ2Z1bGwnKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGRpbWVuc2lvbnMgPSB0aGlzLnNjcm9sbGFibGVEaW1lbnNpb25zKCk7XG5cbiAgICBpZiAodGhpcy5kaXJlY3Rpb24oKSA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICByZXR1cm4gZGltZW5zaW9ucy5yZWN0Py53aWR0aCA/PyBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZGltZW5zaW9ucy5yZWN0Py5oZWlnaHQgPz8gbnVsbDtcbiAgICB9XG4gIH0pO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZW5hYmxlT3ZlcmxheUFuaW1hdGlvbnMgPSBzaWduYWwoZmFsc2UpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2luaXRpYWxTY3JvbGxhYmxlTmF2aWdhdGlvbiA9IHNpZ25hbDxTY3JvbGxhYmxlTmF2aWdhdGlvbkl0ZW1bXT4oW10pO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBzY3JvbGxhYmxlTmF2aWdhdGlvbiA9IGNvbXB1dGVkPFNjcm9sbGFibGVOYXZpZ2F0aW9uSXRlbVtdPigoKSA9PiB7XG4gICAgY29uc3QgYWxsSW50ZXJzZWN0aW9ucyA9IHRoaXMuc2Nyb2xsYWJsZUNvbnRlbnRJbnRlcnNlY3Rpb25zKCk7XG4gICAgY29uc3QgbWFudWFsQWN0aXZlTmF2aWdhdGlvbkluZGV4ID0gdGhpcy5tYW51YWxBY3RpdmVOYXZpZ2F0aW9uSW5kZXgoKTtcbiAgICBjb25zdCBpbml0aWFsU2Nyb2xsYWJsZU5hdmlnYXRpb24gPSB0aGlzLl9pbml0aWFsU2Nyb2xsYWJsZU5hdmlnYXRpb24oKTtcblxuICAgIGlmICghYWxsSW50ZXJzZWN0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBpbml0aWFsU2Nyb2xsYWJsZU5hdmlnYXRpb247XG4gICAgfVxuXG4gICAgY29uc3QgaGlnaGVzdEludGVyc2VjdGlvbiA9IGFsbEludGVyc2VjdGlvbnMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiB7XG4gICAgICBpZiAocHJldiAmJiBwcmV2LmludGVyc2VjdGlvblJhdGlvID4gY3Vyci5pbnRlcnNlY3Rpb25SYXRpbykge1xuICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGN1cnI7XG4gICAgfSwgYWxsSW50ZXJzZWN0aW9uc1swXSk7XG5cbiAgICBpZiAoIWhpZ2hlc3RJbnRlcnNlY3Rpb24pIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWxsSW50ZXJzZWN0aW9ucy5tYXAoKGksIGluZGV4KSA9PiAoe1xuICAgICAgaXNBY3RpdmU6XG4gICAgICAgIG1hbnVhbEFjdGl2ZU5hdmlnYXRpb25JbmRleCAhPT0gbnVsbFxuICAgICAgICAgID8gbWFudWFsQWN0aXZlTmF2aWdhdGlvbkluZGV4ID09PSBpbmRleFxuICAgICAgICAgIDogaSA9PT0gaGlnaGVzdEludGVyc2VjdGlvbiAmJiBoaWdoZXN0SW50ZXJzZWN0aW9uLmludGVyc2VjdGlvblJhdGlvID4gMCxcbiAgICAgIGVsZW1lbnQ6IGkudGFyZ2V0IGFzIEhUTUxFbGVtZW50LFxuICAgIH0pKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgaG9zdEF0dHJpYnV0ZUJpbmRpbmdzID0gc2lnbmFsSG9zdEF0dHJpYnV0ZXMoe1xuICAgICdpdGVtLXNpemUnOiB0aGlzLml0ZW1TaXplLFxuICAgICdhY3R1YWwtaXRlbS1zaXplJzogdGhpcy5fYWN0dWFsSXRlbVNpemUsXG4gICAgZGlyZWN0aW9uOiB0aGlzLmRpcmVjdGlvbixcbiAgICAncmVuZGVyLXNjcm9sbGJhcnMnOiB0aGlzLnJlbmRlclNjcm9sbGJhcnMsXG4gICAgJ3N0aWNreS1idXR0b25zJzogdGhpcy5zdGlja3lCdXR0b25zLFxuICB9KTtcblxuICByZWFkb25seSBob3N0Q2xhc3NCaW5kaW5ncyA9IHNpZ25hbEhvc3RDbGFzc2VzKHtcbiAgICAnZXQtc2Nyb2xsYWJsZS0tY2FuLXNjcm9sbCc6IHRoaXMuY2FuU2Nyb2xsLFxuICAgICdldC1zY3JvbGxhYmxlLS1pcy1hdC1zdGFydCc6IHRoaXMuaXNBdFN0YXJ0LFxuICAgICdldC1zY3JvbGxhYmxlLS1pcy1hdC1lbmQnOiB0aGlzLmlzQXRFbmQsXG4gICAgJ2V0LXNjcm9sbGFibGUtLWVuYWJsZS1vdmVybGF5LWFuaW1hdGlvbnMnOiB0aGlzLmVuYWJsZU92ZXJsYXlBbmltYXRpb25zLFxuICB9KTtcblxuICByZWFkb25seSBob3N0U3R5bGVCaW5kaW5ncyA9IHNpZ25hbEhvc3RTdHlsZXMoe1xuICAgICctLWFjdHVhbC1pdGVtLXNpemUnOiBjb21wdXRlZCgoKSA9PiAodGhpcy5fYWN0dWFsSXRlbVNpemUoKSAhPT0gbnVsbCA/IGAke3RoaXMuX2FjdHVhbEl0ZW1TaXplKCl9cHhgIDogbnVsbCkpLFxuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNjcm9sbGFibGUgPSB0aGlzLnNjcm9sbGFibGUoKT8ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgZmlyc3RFbGVtZW50ID0gdGhpcy5maXJzdEVsZW1lbnQoKT8ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgbGFzdEVsZW1lbnQgPSB0aGlzLmxhc3RFbGVtZW50KCk/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGFjdGl2ZUVsZW1lbnRMaXN0ID0gdGhpcy5hY3RpdmVFbGVtZW50TGlzdCgpPy50b0FycmF5KCk7XG5cbiAgICAgICAgaWYgKCFzY3JvbGxhYmxlIHx8ICFmaXJzdEVsZW1lbnQgfHwgIWxhc3RFbGVtZW50IHx8ICFhY3RpdmVFbGVtZW50TGlzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpcnN0QWN0aXZlID0gYWN0aXZlRWxlbWVudExpc3QuZmluZCgoYSkgPT4gYS5pc0FjdGl2ZUNoaWxkRW5hYmxlZCgpKTtcblxuICAgICAgICBpZiAoZmlyc3RBY3RpdmUgJiYgIXRoaXMuZGlzYWJsZUFjdGl2ZUVsZW1lbnRTY3JvbGxpbmcoKSkge1xuICAgICAgICAgIGNvbnN0IG9mZnNldFRvcCA9IGZpcnN0QWN0aXZlLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRUb3AgLSBzY3JvbGxhYmxlLm9mZnNldFRvcDtcbiAgICAgICAgICBjb25zdCBvZmZzZXRMZWZ0ID0gZmlyc3RBY3RpdmUuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldExlZnQgLSBzY3JvbGxhYmxlLm9mZnNldExlZnQ7XG4gICAgICAgICAgc2Nyb2xsYWJsZS5zY3JvbGxMZWZ0ID0gb2Zmc2V0TGVmdCAtIHRoaXMuc2Nyb2xsTWFyZ2luKCk7XG4gICAgICAgICAgc2Nyb2xsYWJsZS5zY3JvbGxUb3AgPSBvZmZzZXRUb3AgLSB0aGlzLnNjcm9sbE1hcmdpbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5maXJzdEVsZW1lbnRWaXNpYmlsaXR5LnNldChcbiAgICAgICAgICBpc0VsZW1lbnRWaXNpYmxlKHtcbiAgICAgICAgICAgIGNvbnRhaW5lcjogc2Nyb2xsYWJsZSxcbiAgICAgICAgICAgIGVsZW1lbnQ6IGZpcnN0RWxlbWVudCxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmxhc3RFbGVtZW50VmlzaWJpbGl0eS5zZXQoXG4gICAgICAgICAgaXNFbGVtZW50VmlzaWJsZSh7XG4gICAgICAgICAgICBjb250YWluZXI6IHNjcm9sbGFibGUsXG4gICAgICAgICAgICBlbGVtZW50OiBsYXN0RWxlbWVudCxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBXZSBuZWVkIHRvIHdhaXQgb25lIGZyYW1lIGJlZm9yZSBlbmFibGluZyBhbmltYXRpb25zIHRvIHByZXZlbnQgYSBhbmltYXRpb24gZnJvbSBwbGF5aW5nIGR1cmluZyBpbml0aWFsIHJlbmRlci5cbiAgICAgICAgbmV4dEZyYW1lKCgpID0+IHRoaXMuZW5hYmxlT3ZlcmxheUFuaW1hdGlvbnMuc2V0KHRydWUpKTtcbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG4gICAgKTtcblxuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudExpc3QgPSB0aGlzLnNjcm9sbGFibGVDaGlsZHJlbigpO1xuICAgICAgICBjb25zdCBzY3JvbGxhYmxlID0gdGhpcy5zY3JvbGxhYmxlKCk/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHJlbmRlck5hdmlnYXRpb24gPSB0aGlzLnJlbmRlck5hdmlnYXRpb24oKTtcblxuICAgICAgICBpZiAoIWVsZW1lbnRMaXN0IHx8ICFzY3JvbGxhYmxlIHx8ICFyZW5kZXJOYXZpZ2F0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlyc3RWaXNpYmxlRWxlbWVudCA9IGVsZW1lbnRMaXN0LmZpbmQoKGUpID0+IGlzRWxlbWVudFZpc2libGUoeyBjb250YWluZXI6IHNjcm9sbGFibGUsIGVsZW1lbnQ6IGUgfSkpO1xuXG4gICAgICAgIGlmICghZmlyc3RWaXNpYmxlRWxlbWVudCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluaXRpYWxOYXZpZ2F0aW9uSXRlbXM6IFNjcm9sbGFibGVOYXZpZ2F0aW9uSXRlbVtdID0gZWxlbWVudExpc3QubWFwKChlKSA9PiAoe1xuICAgICAgICAgIGlzQWN0aXZlOiBlID09PSBmaXJzdFZpc2libGVFbGVtZW50LFxuICAgICAgICAgIGVsZW1lbnQ6IGUsXG4gICAgICAgIH0pKTtcblxuICAgICAgICB0aGlzLl9pbml0aWFsU2Nyb2xsYWJsZU5hdmlnYXRpb24uc2V0KGluaXRpYWxOYXZpZ2F0aW9uSXRlbXMpO1xuICAgICAgfSxcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcbiAgICApO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGlzQXRTdGFydCA9IHRoaXMuaXNBdFN0YXJ0KCk7XG4gICAgICBjb25zdCBpc0F0RW5kID0gdGhpcy5pc0F0RW5kKCk7XG4gICAgICBjb25zdCBjYW5TY3JvbGwgPSB0aGlzLmNhblNjcm9sbCgpO1xuXG4gICAgICB0aGlzLnNjcm9sbFN0YXRlQ2hhbmdlLmVtaXQoe1xuICAgICAgICBjYW5TY3JvbGwsXG4gICAgICAgIGlzQXRFbmQ6ICEhaXNBdEVuZCxcbiAgICAgICAgaXNBdFN0YXJ0OiAhIWlzQXRTdGFydCxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGVuYWJsZVNuYXBwaW5nID0gdGhpcy5zbmFwKCk7XG5cbiAgICAgIGlmIChlbmFibGVTbmFwcGluZykge1xuICAgICAgICB0aGlzLl9lbmFibGVTbmFwcGluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZVNuYXBwaW5nKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnNjcm9sbGFibGVDb250ZW50SW50ZXJzZWN0aW9ucyRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcbiAgICAgICAgZGVib3VuY2VUaW1lKDEwKSxcbiAgICAgICAgdGFwKChlbnRyaWVzKSA9PiB7XG4gICAgICAgICAgdGhpcy5pbnRlcnNlY3Rpb25DaGFuZ2UuZW1pdChcbiAgICAgICAgICAgIGVudHJpZXMubWFwKChpLCBpbmRleCkgPT4gKHtcbiAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgIGVsZW1lbnQ6IGkudGFyZ2V0IGFzIEhUTUxFbGVtZW50LFxuICAgICAgICAgICAgICBpbnRlcnNlY3Rpb25SYXRpbzogaS5pbnRlcnNlY3Rpb25SYXRpbyxcbiAgICAgICAgICAgICAgaXNJbnRlcnNlY3Rpbmc6IGkuaXNJbnRlcnNlY3RpbmcsXG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBzY3JvbGxPbmVDb250YWluZXJTaXplKGRpcmVjdGlvbjogJ3N0YXJ0JyB8ICdlbmQnKSB7XG4gICAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IHRoaXMuc2Nyb2xsYWJsZSgpPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgaWYgKCFzY3JvbGxFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgY29uc3QgaXNTbmFwcGluZ0VuYWJsZWQgPSB0aGlzLnNuYXAoKTtcblxuICAgIGlmIChpc1NuYXBwaW5nRW5hYmxlZCkge1xuICAgICAgLy8gSWYgc25hcHBpbmcgaXMgZW5hYmxlZCB3ZSB3YW50IHRvIHNjcm9sbCB0byBhIHBvc2l0aW9uIHdoZXJlIG5vIGZ1cnRoZXIgc25hcHBpbmcgd2lsbCBoYXBwZW4gYWZ0ZXIgdGhlIHNjcm9sbC5cbiAgICAgIGNvbnN0IGFsbEludGVyc2VjdGlvbnMgPSB0aGlzLnNjcm9sbGFibGVDb250ZW50SW50ZXJzZWN0aW9ucygpO1xuICAgICAgY29uc3QgaW50ZXJzZWN0aW9ucyA9IGdldEZpcnN0QW5kTGFzdFBhcnRpYWxJbnRlcnNlY3Rpb24oYWxsSW50ZXJzZWN0aW9ucyk7XG4gICAgICBjb25zdCByZWxldmFudEludGVyc2VjdGlvbiA9IGRpcmVjdGlvbiA9PT0gJ3N0YXJ0JyA/IGludGVyc2VjdGlvbnM/LmZpcnN0IDogaW50ZXJzZWN0aW9ucz8ubGFzdDtcblxuICAgICAgaWYgKCFyZWxldmFudEludGVyc2VjdGlvbikgcmV0dXJuO1xuXG4gICAgICBjb25zdCBuZXh0SW5kZXggPVxuICAgICAgICByZWxldmFudEludGVyc2VjdGlvbi5pbnRlcnNlY3Rpb24uaW50ZXJzZWN0aW9uUmF0aW8gIT09IDFcbiAgICAgICAgICA/IHJlbGV2YW50SW50ZXJzZWN0aW9uLmluZGV4XG4gICAgICAgICAgOiBkaXJlY3Rpb24gPT09ICdzdGFydCdcbiAgICAgICAgICAgID8gcmVsZXZhbnRJbnRlcnNlY3Rpb24uaW5kZXggLSAxXG4gICAgICAgICAgICA6IHJlbGV2YW50SW50ZXJzZWN0aW9uLmluZGV4ICsgMTtcblxuICAgICAgY29uc3QgZWxlbWVudCA9XG4gICAgICAgIChhbGxJbnRlcnNlY3Rpb25zW25leHRJbmRleF0/LnRhcmdldCBhcyBIVE1MRWxlbWVudCkgfHxcbiAgICAgICAgKHJlbGV2YW50SW50ZXJzZWN0aW9uLmludGVyc2VjdGlvbi50YXJnZXQgYXMgSFRNTEVsZW1lbnQpO1xuXG4gICAgICB0aGlzLnNjcm9sbFRvRWxlbWVudCh7XG4gICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICAgIG9yaWdpbjogZGlyZWN0aW9uID09PSAnZW5kJyA/ICdzdGFydCcgOiAnZW5kJyxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBKdXN0IHNjcm9sbCBvbmUgc2l6ZSBvZiB0aGUgc2Nyb2xsYWJsZSBjb250YWluZXIuXG4gICAgICBjb25zdCBzY3JvbGxhYmxlU2l6ZSA9IHRoaXMuZGlyZWN0aW9uKCkgPT09ICdob3Jpem9udGFsJyA/IHBhcmVudC5jbGllbnRXaWR0aCA6IHBhcmVudC5jbGllbnRIZWlnaHQ7XG4gICAgICBjb25zdCBjdXJyZW50U2Nyb2xsID0gdGhpcy5kaXJlY3Rpb24oKSA9PT0gJ2hvcml6b250YWwnID8gc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0IDogc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3A7XG5cbiAgICAgIHNjcm9sbEVsZW1lbnQuc2Nyb2xsVG8oe1xuICAgICAgICBbdGhpcy5kaXJlY3Rpb24oKSA9PT0gJ2hvcml6b250YWwnID8gJ2xlZnQnIDogJ3RvcCddOlxuICAgICAgICAgIGN1cnJlbnRTY3JvbGwgKyAoZGlyZWN0aW9uID09PSAnc3RhcnQnID8gLXNjcm9sbGFibGVTaXplIDogc2Nyb2xsYWJsZVNpemUpLFxuICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzY3JvbGxPbmVJdGVtU2l6ZShkaXJlY3Rpb246ICdzdGFydCcgfCAnZW5kJykge1xuICAgIGNvbnN0IGFsbEludGVyc2VjdGlvbnMgPSB0aGlzLnNjcm9sbGFibGVDb250ZW50SW50ZXJzZWN0aW9ucygpO1xuICAgIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSB0aGlzLnNjcm9sbGFibGUoKT8ubmF0aXZlRWxlbWVudDtcblxuICAgIGlmICghYWxsSW50ZXJzZWN0aW9ucy5sZW5ndGgpIHtcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ05vIGVsZW1lbnRzIGZvdW5kIHRvIHNjcm9sbCB0by4gTWFrZSBzdXJlIHRvIGFwcGx5IHRoZSBpc0VsZW1lbnQgZGlyZWN0aXZlIHRvIHRoZSBlbGVtZW50cyB5b3Ugd2FudCB0byBzY3JvbGwgdG8uJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbnRlcnNlY3Rpb25zID0gZ2V0Rmlyc3RBbmRMYXN0UGFydGlhbEludGVyc2VjdGlvbihhbGxJbnRlcnNlY3Rpb25zKTtcblxuICAgIGlmICghaW50ZXJzZWN0aW9ucyB8fCAhc2Nyb2xsRWxlbWVudCkgcmV0dXJuO1xuXG4gICAgLy8gTWVhbnMgdGhlIGN1cnJlbnQgZWxlbWVudCBpcyBiaWdnZXIgdGhhbiB0aGUgc2Nyb2xsYWJsZSBjb250YWluZXIuXG4gICAgLy8gSW4gdGhpcyBjYXNlIHdlIHNob3VsZCBzY3JvbGwgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50IGVsZW1lbnQuIElmIHdlIGFyZSBhbHJlYWR5IHRoZXJlIHdlIHNob3VsZCBzY3JvbGwgdG8gdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgZWxlbWVudC5cbiAgICAvLyBUaGlzIGFwcGxpZXMgdG8gdGhlIG90aGVyIGRpcmVjdGlvbiBhcyB3ZWxsLlxuICAgIGNvbnN0IGlzRmlyc3RBbmRMYXN0SW50ZXJzZWN0aW9uRXF1YWwgPSBpbnRlcnNlY3Rpb25zLmZpcnN0LmludGVyc2VjdGlvbiA9PT0gaW50ZXJzZWN0aW9ucy5sYXN0LmludGVyc2VjdGlvbjtcbiAgICBjb25zdCBzY3JvbGxhYmxlUmVjdCA9IHNjcm9sbEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICBpZiAoaXNGaXJzdEFuZExhc3RJbnRlcnNlY3Rpb25FcXVhbCkge1xuICAgICAgY29uc3QgaW50ZXJzZWN0aW9uID0gaW50ZXJzZWN0aW9ucy5maXJzdC5pbnRlcnNlY3Rpb24udGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgaXNTdGFydE9mRWxlbWVudFZpc2libGUgPVxuICAgICAgICB0aGlzLmRpcmVjdGlvbigpID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgICA/IE1hdGgucm91bmQoaW50ZXJzZWN0aW9uLmxlZnQpID49IE1hdGgucm91bmQoc2Nyb2xsYWJsZVJlY3QubGVmdClcbiAgICAgICAgICA6IE1hdGgucm91bmQoaW50ZXJzZWN0aW9uLnRvcCkgPj0gTWF0aC5yb3VuZChzY3JvbGxhYmxlUmVjdC50b3ApO1xuXG4gICAgICBjb25zdCBpc0VuZE9mRWxlbWVudFZpc2libGUgPVxuICAgICAgICB0aGlzLmRpcmVjdGlvbigpID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgICA/IE1hdGgucm91bmQoaW50ZXJzZWN0aW9uLnJpZ2h0KSA8PSBNYXRoLnJvdW5kKHNjcm9sbGFibGVSZWN0LnJpZ2h0KVxuICAgICAgICAgIDogTWF0aC5yb3VuZChpbnRlcnNlY3Rpb24uYm90dG9tKSA8PSBNYXRoLnJvdW5kKHNjcm9sbGFibGVSZWN0LmJvdHRvbSk7XG5cbiAgICAgIGlmICghaXNTdGFydE9mRWxlbWVudFZpc2libGUgfHwgIWlzRW5kT2ZFbGVtZW50VmlzaWJsZSkge1xuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAnc3RhcnQnKSB7XG4gICAgICAgICAgaWYgKGlzU3RhcnRPZkVsZW1lbnRWaXNpYmxlKSB7XG4gICAgICAgICAgICAvLyB0byB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyBlbGVtZW50XG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c0luZGV4ID0gaW50ZXJzZWN0aW9ucy5maXJzdC5pbmRleCAtIDE7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50VG9TY3JvbGxUbyA9IGFsbEludGVyc2VjdGlvbnNbcHJldmlvdXNJbmRleF0/LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcblxuICAgICAgICAgICAgaWYgKCFlbGVtZW50VG9TY3JvbGxUbykgcmV0dXJuO1xuXG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvRWxlbWVudCh7XG4gICAgICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnRUb1Njcm9sbFRvLFxuICAgICAgICAgICAgICBvcmlnaW46ICdlbmQnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRvIHRoZSBzdGFydCBvZiB0aGUgY3VycmVudCBlbGVtZW50XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvRWxlbWVudCh7XG4gICAgICAgICAgICAgIGVsZW1lbnQ6IGludGVyc2VjdGlvbnMuZmlyc3QuaW50ZXJzZWN0aW9uLnRhcmdldCBhcyBIVE1MRWxlbWVudCxcbiAgICAgICAgICAgICAgb3JpZ2luOiAnc3RhcnQnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChpc0VuZE9mRWxlbWVudFZpc2libGUpIHtcbiAgICAgICAgICAgIC8vIHRvIHRoZSBzdGFydCBvZiB0aGUgbmV4dCBlbGVtZW50XG4gICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSBpbnRlcnNlY3Rpb25zLmxhc3QuaW5kZXggKyAxO1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudFRvU2Nyb2xsVG8gPSBhbGxJbnRlcnNlY3Rpb25zW25leHRJbmRleF0/LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcblxuICAgICAgICAgICAgaWYgKCFlbGVtZW50VG9TY3JvbGxUbykgcmV0dXJuO1xuXG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvRWxlbWVudCh7XG4gICAgICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnRUb1Njcm9sbFRvLFxuICAgICAgICAgICAgICBvcmlnaW46ICdzdGFydCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdG8gdGhlIGVuZCBvZiB0aGUgY3VycmVudCBlbGVtZW50XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvRWxlbWVudCh7XG4gICAgICAgICAgICAgIGVsZW1lbnQ6IGludGVyc2VjdGlvbnMubGFzdC5pbnRlcnNlY3Rpb24udGFyZ2V0IGFzIEhUTUxFbGVtZW50LFxuICAgICAgICAgICAgICBvcmlnaW46ICdlbmQnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGRhdGEgPSBkaXJlY3Rpb24gPT09ICdzdGFydCcgPyBpbnRlcnNlY3Rpb25zLmZpcnN0IDogaW50ZXJzZWN0aW9ucy5sYXN0O1xuICAgIGxldCBlbGVtZW50VG9TY3JvbGxUbyA9IGRhdGEuaW50ZXJzZWN0aW9uLnRhcmdldCBhcyBIVE1MRWxlbWVudDtcblxuICAgIGlmIChNYXRoLnJvdW5kKGRhdGEuaW50ZXJzZWN0aW9uLmludGVyc2VjdGlvblJhdGlvKSA9PT0gMSkge1xuICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3N0YXJ0JyAmJiBkYXRhLmluZGV4ID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ2VuZCcgJiYgZGF0YS5pbmRleCA9PT0gYWxsSW50ZXJzZWN0aW9ucy5sZW5ndGggLSAxKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV4dEluZGV4ID0gZGlyZWN0aW9uID09PSAnc3RhcnQnID8gZGF0YS5pbmRleCAtIDEgOiBkYXRhLmluZGV4ICsgMTtcblxuICAgICAgZWxlbWVudFRvU2Nyb2xsVG8gPSBhbGxJbnRlcnNlY3Rpb25zW25leHRJbmRleF0/LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICB9XG5cbiAgICBpZiAoIWVsZW1lbnRUb1Njcm9sbFRvKSByZXR1cm47XG5cbiAgICB0aGlzLnNjcm9sbFRvRWxlbWVudCh7XG4gICAgICBlbGVtZW50OiBlbGVtZW50VG9TY3JvbGxUbyxcbiAgICAgIG9yaWdpbjogZGlyZWN0aW9uLFxuICAgIH0pO1xuICB9XG5cbiAgc2Nyb2xsVG9FbGVtZW50KG9wdGlvbnM6IE9taXQ8U2Nyb2xsVG9FbGVtZW50T3B0aW9ucywgJ2NvbnRhaW5lcic+KSB7XG4gICAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IHRoaXMuc2Nyb2xsYWJsZSgpPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgc2Nyb2xsVG9FbGVtZW50KHtcbiAgICAgIGNvbnRhaW5lcjogc2Nyb2xsRWxlbWVudCxcbiAgICAgIGRpcmVjdGlvbjogdGhpcy5kaXJlY3Rpb24oKSA9PT0gJ2hvcml6b250YWwnID8gJ2lubGluZScgOiAnYmxvY2snLFxuICAgICAgLi4uKHRoaXMuZGlyZWN0aW9uKCkgPT09ICdob3Jpem9udGFsJ1xuICAgICAgICA/IHsgc2Nyb2xsSW5saW5lTWFyZ2luOiB0aGlzLnNjcm9sbE1hcmdpbigpIH1cbiAgICAgICAgOiB7IHNjcm9sbEJsb2NrTWFyZ2luOiB0aGlzLnNjcm9sbE1hcmdpbigpIH0pLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIHNjcm9sbFRvRWxlbWVudEJ5SW5kZXgob3B0aW9uczogT21pdDxTY3JvbGxUb0VsZW1lbnRPcHRpb25zLCAnY29udGFpbmVyJz4gJiB7IGluZGV4OiBudW1iZXIgfSkge1xuICAgIGNvbnN0IGVsZW1lbnRzID0gdGhpcy5zY3JvbGxhYmxlQ2hpbGRyZW4oKTtcblxuICAgIGlmICghZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdObyBlbGVtZW50cyBmb3VuZCB0byBzY3JvbGwgdG8uIE1ha2Ugc3VyZSB0byBhcHBseSB0aGUgaXNFbGVtZW50IGRpcmVjdGl2ZSB0byB0aGUgZWxlbWVudHMgeW91IHdhbnQgdG8gc2Nyb2xsIHRvLicsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IHRoaXMuc2Nyb2xsYWJsZSgpPy5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50c1tvcHRpb25zLmluZGV4XTtcblxuICAgIHNjcm9sbFRvRWxlbWVudCh7XG4gICAgICBjb250YWluZXI6IHNjcm9sbEVsZW1lbnQsXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4uKHRoaXMuZGlyZWN0aW9uKCkgPT09ICdob3Jpem9udGFsJ1xuICAgICAgICA/IHsgc2Nyb2xsSW5saW5lTWFyZ2luOiB0aGlzLnNjcm9sbE1hcmdpbigpIH1cbiAgICAgICAgOiB7IHNjcm9sbEJsb2NrTWFyZ2luOiB0aGlzLnNjcm9sbE1hcmdpbigpIH0pLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzY3JvbGxUb0VsZW1lbnRWaWFOYXZpZ2F0aW9uKGVsZW1lbnRJbmRleDogbnVtYmVyLCBlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIHRoaXMubWFudWFsQWN0aXZlTmF2aWdhdGlvbkluZGV4LnNldChlbGVtZW50SW5kZXgpO1xuXG4gICAgdGhpcy5zY3JvbGxUb0VsZW1lbnQoe1xuICAgICAgZWxlbWVudCxcbiAgICB9KTtcblxuICAgIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSB0aGlzLnNjcm9sbGFibGUoKT8ubmF0aXZlRWxlbWVudDtcblxuICAgIGlmICghc2Nyb2xsRWxlbWVudCkgcmV0dXJuO1xuXG4gICAgZnJvbUV2ZW50KHNjcm9sbEVsZW1lbnQsICdzY3JvbGwnKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSg1MCksXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLm1hbnVhbEFjdGl2ZU5hdmlnYXRpb25JbmRleC5zZXQobnVsbCkpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldElzQ3Vyc29yRHJhZ2dpbmcoaXNEcmFnZ2luZzogYm9vbGVhbikge1xuICAgIHRoaXMuX2lzQ3Vyc29yRHJhZ2dpbmckLm5leHQoaXNEcmFnZ2luZyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2Nyb2xsVG9TdGFydERpcmVjdGlvbigpIHtcbiAgICBpZiAodGhpcy5zY3JvbGxNb2RlKCkgPT09ICdjb250YWluZXInKSB7XG4gICAgICB0aGlzLnNjcm9sbE9uZUNvbnRhaW5lclNpemUoJ3N0YXJ0Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2Nyb2xsT25lSXRlbVNpemUoJ3N0YXJ0Jyk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHNjcm9sbFRvRW5kRGlyZWN0aW9uKCkge1xuICAgIGlmICh0aGlzLnNjcm9sbE1vZGUoKSA9PT0gJ2NvbnRhaW5lcicpIHtcbiAgICAgIHRoaXMuc2Nyb2xsT25lQ29udGFpbmVyU2l6ZSgnZW5kJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2Nyb2xsT25lSXRlbVNpemUoJ2VuZCcpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2VuYWJsZVNuYXBwaW5nKCkge1xuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuc2Nyb2xsYWJsZUNvbnRlbnRJbnRlcnNlY3Rpb25zJCwgdGhpcy5faXNDdXJzb3JEcmFnZ2luZyRdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoWywgaXNEcmFnZ2luZ10pID0+ICFpc0RyYWdnaW5nKSxcbiAgICAgICAgbWFwKChbaW50ZXJzZWN0aW9uc10pID0+IGludGVyc2VjdGlvbnMpLFxuICAgICAgICBkZWJvdW5jZVRpbWUoMTUwKSxcbiAgICAgICAgdGFwKChhbGxJbnRlcnNlY3Rpb25zKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IHRoaXMuc2Nyb2xsYWJsZSgpPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgICAgaWYgKCFzY3JvbGxFbGVtZW50KSByZXR1cm47XG5cbiAgICAgICAgICBjb25zdCBpbnRlcnNlY3Rpb25zID0gZ2V0Rmlyc3RBbmRMYXN0UGFydGlhbEludGVyc2VjdGlvbihhbGxJbnRlcnNlY3Rpb25zKTtcblxuICAgICAgICAgIGlmICghaW50ZXJzZWN0aW9ucykgcmV0dXJuO1xuXG4gICAgICAgICAgY29uc3QgaXNGaXJzdEFuZExhc3RJbnRlcnNlY3Rpb25FcXVhbCA9IGludGVyc2VjdGlvbnMuZmlyc3QuaW50ZXJzZWN0aW9uID09PSBpbnRlcnNlY3Rpb25zLmxhc3QuaW50ZXJzZWN0aW9uO1xuICAgICAgICAgIGNvbnN0IHNjcm9sbGFibGVSZWN0ID0gc2Nyb2xsRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICAgIGlmIChpc0ZpcnN0QW5kTGFzdEludGVyc2VjdGlvbkVxdWFsKSB7XG4gICAgICAgICAgICBjb25zdCBpbnRlcnNlY3Rpb24gPSBpbnRlcnNlY3Rpb25zLmZpcnN0LmludGVyc2VjdGlvbi50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICBjb25zdCBpc1N0YXJ0T2ZFbGVtZW50VmlzaWJsZSA9XG4gICAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uKCkgPT09ICdob3Jpem9udGFsJ1xuICAgICAgICAgICAgICAgID8gaW50ZXJzZWN0aW9uLmxlZnQgPj0gc2Nyb2xsYWJsZVJlY3QubGVmdFxuICAgICAgICAgICAgICAgIDogaW50ZXJzZWN0aW9uLnRvcCA+PSBzY3JvbGxhYmxlUmVjdC50b3A7XG5cbiAgICAgICAgICAgIGNvbnN0IGlzRW5kT2ZFbGVtZW50VmlzaWJsZSA9XG4gICAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uKCkgPT09ICdob3Jpem9udGFsJ1xuICAgICAgICAgICAgICAgID8gaW50ZXJzZWN0aW9uLnJpZ2h0IDw9IHNjcm9sbGFibGVSZWN0LnJpZ2h0XG4gICAgICAgICAgICAgICAgOiBpbnRlcnNlY3Rpb24uYm90dG9tIDw9IHNjcm9sbGFibGVSZWN0LmJvdHRvbTtcblxuICAgICAgICAgICAgLy8gRG9uJ3Qgc25hcCBpZiBuZWl0aGVyIHRoZSBzdGFydCBub3IgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBlbGVtZW50IGlzIHZpc2libGUuXG4gICAgICAgICAgICAvLyBPdGhlcndpc2UgdGhpcyB3b3VsZCByZXN1bHQgaW4gcGFydHMgb2YgdGhlIGVsZW1lbnQgYmVpbmcgaW5hY2Nlc3NpYmxlLlxuICAgICAgICAgICAgaWYgKCFpc1N0YXJ0T2ZFbGVtZW50VmlzaWJsZSAmJiAhaXNFbmRPZkVsZW1lbnRWaXNpYmxlKSByZXR1cm47XG5cbiAgICAgICAgICAgIC8vIElmIHRoZSBzdGFydCBvZiB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIHdlIHNob3VsZCBzbmFwIHRvIHRoZSBzdGFydC5cbiAgICAgICAgICAgIGlmIChpc1N0YXJ0T2ZFbGVtZW50VmlzaWJsZSkge1xuICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvRWxlbWVudCh7XG4gICAgICAgICAgICAgICAgZWxlbWVudDogaW50ZXJzZWN0aW9ucy5maXJzdC5pbnRlcnNlY3Rpb24udGFyZ2V0IGFzIEhUTUxFbGVtZW50LFxuICAgICAgICAgICAgICAgIG9yaWdpbjogJ3N0YXJ0JyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgdGhlIGVuZCBvZiB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIHdlIHNob3VsZCBzbmFwIHRvIHRoZSBlbmQuXG4gICAgICAgICAgICBpZiAoaXNFbmRPZkVsZW1lbnRWaXNpYmxlKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9FbGVtZW50KHtcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBpbnRlcnNlY3Rpb25zLmxhc3QuaW50ZXJzZWN0aW9uLnRhcmdldCBhcyBIVE1MRWxlbWVudCxcbiAgICAgICAgICAgICAgICBvcmlnaW46ICdlbmQnLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAodGhpcy5kaXJlY3Rpb24oKSA9PT0gJ2hvcml6b250YWwnICYmXG4gICAgICAgICAgICAgIGludGVyc2VjdGlvbnMuYmlnZ2VzdC5pbnRlcnNlY3Rpb24uYm91bmRpbmdDbGllbnRSZWN0LndpZHRoID4gc2Nyb2xsYWJsZVJlY3Qud2lkdGgpIHx8XG4gICAgICAgICAgICAodGhpcy5kaXJlY3Rpb24oKSA9PT0gJ3ZlcnRpY2FsJyAmJlxuICAgICAgICAgICAgICBpbnRlcnNlY3Rpb25zLmJpZ2dlc3QuaW50ZXJzZWN0aW9uLmJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgPiBzY3JvbGxhYmxlUmVjdC5oZWlnaHQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBlbGVtZW50IGlzIGJpZ2dlciB0aGFuIHRoZSBzY3JvbGxhYmxlIGNvbnRhaW5lciB3ZSBzaG91bGQgc25hcCB0byB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgZWxlbWVudCBpZiB0aGUgc2Nyb2xsIGRpcmVjdGlvbiBpcyBmb3J3YXJkXG4gICAgICAgICAgICAvLyBhbmQgdG8gdGhlIGVuZCBvZiB0aGUgY3VycmVudCBlbGVtZW50IGlmIHRoZSBzY3JvbGwgZGlyZWN0aW9uIGlzIGJhY2t3YXJkcy5cbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbiA9IGludGVyc2VjdGlvbnMuYmlnZ2VzdC5pbmRleCA9PT0gaW50ZXJzZWN0aW9ucy5maXJzdC5pbmRleCA/ICdlbmQnIDogJ3N0YXJ0JztcblxuICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0VsZW1lbnQoe1xuICAgICAgICAgICAgICBlbGVtZW50OiBpbnRlcnNlY3Rpb25zLmJpZ2dlc3QuaW50ZXJzZWN0aW9uLnRhcmdldCBhcyBIVE1MRWxlbWVudCxcbiAgICAgICAgICAgICAgb3JpZ2luLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5vIHNwZWNpYWwgY2FzZS4gSnVzdCBzbmFwIHRvIHRoZSBiaWdnZXN0IGludGVyc2VjdGlvbi5cbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9FbGVtZW50KHtcbiAgICAgICAgICAgICAgZWxlbWVudDogaW50ZXJzZWN0aW9ucy5iaWdnZXN0LmludGVyc2VjdGlvbi50YXJnZXQgYXMgSFRNTEVsZW1lbnQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGlzYWJsZVNuYXBwaW5nJCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIF9kaXNhYmxlU25hcHBpbmcoKSB7XG4gICAgdGhpcy5fZGlzYWJsZVNuYXBwaW5nJC5uZXh0KCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJldC1zY3JvbGxhYmxlLXdyYXBwZXJcIj5cbiAgPGRpdlxuICAgICNzY3JvbGxhYmxlXG4gICAgW2F0dHIucm9sZV09XCJzY3JvbGxhYmxlUm9sZSgpID8/IHVuZGVmaW5lZFwiXG4gICAgW2V0Q3Vyc29yRHJhZ1Njcm9sbF09XCJjdXJzb3JEcmFnU2Nyb2xsKClcIlxuICAgIFthbGxvd2VkRGlyZWN0aW9uXT1cImRpcmVjdGlvbigpXCJcbiAgICAoY3Vyc29yRHJhZ1N0YXJ0KT1cInNldElzQ3Vyc29yRHJhZ2dpbmcodHJ1ZSlcIlxuICAgIChjdXJzb3JEcmFnRW5kKT1cInNldElzQ3Vyc29yRHJhZ2dpbmcoZmFsc2UpXCJcbiAgICBjbGFzcz1cImV0LXNjcm9sbGFibGUtY29udGFpbmVyLW91dGVyXCJcbiAgPlxuICAgIDxkaXYgI3Njcm9sbGFibGVDb250YWluZXIgW25nQ2xhc3NdPVwic2Nyb2xsYWJsZUNsYXNzKClcIiBjbGFzcz1cImV0LXNjcm9sbGFibGUtY29udGFpbmVyXCI+XG4gICAgICA8ZGl2ICNmaXJzdEVsZW1lbnQgY2xhc3M9XCJldC1zY3JvbGwtb2JzZXJ2ZXItZmlyc3QtZWxlbWVudFwiIGV0U2Nyb2xsYWJsZUlnbm9yZUNoaWxkPjwvZGl2PlxuICAgICAgPG5nLWNvbnRlbnQgLz5cbiAgICAgIDxkaXYgI2xhc3RFbGVtZW50IGNsYXNzPVwiZXQtc2Nyb2xsLW9ic2VydmVyLWxhc3QtZWxlbWVudFwiIGV0U2Nyb2xsYWJsZUlnbm9yZUNoaWxkPjwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICBAaWYgKHJlbmRlck1hc2tzKCkpIHtcbiAgICA8ZGl2IGNsYXNzPVwiZXQtc2Nyb2xsYWJsZS1tYXNrc1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImV0LXNjcm9sbGFibGUtbWFzayBldC1zY3JvbGxhYmxlLW1hc2stLXN0YXJ0XCI+PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZXQtc2Nyb2xsYWJsZS1tYXNrIGV0LXNjcm9sbGFibGUtbWFzay0tZW5kXCI+PC9kaXY+XG4gICAgPC9kaXY+XG4gIH1cblxuICBAaWYgKHJlbmRlckJ1dHRvbnMoKSkge1xuICAgIDxkaXYgY2xhc3M9XCJldC1zY3JvbGxhYmxlLWJ1dHRvbnNcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKGNsaWNrKT1cInNjcm9sbFRvU3RhcnREaXJlY3Rpb24oKVwiXG4gICAgICAgIGNsYXNzPVwiZXQtc2Nyb2xsYWJsZS1idXR0b24gZXQtc2Nyb2xsYWJsZS1idXR0b24tLXN0YXJ0XCJcbiAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgPlxuICAgICAgICA8ZXQtY2hldnJvbi1pY29uIC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKGNsaWNrKT1cInNjcm9sbFRvRW5kRGlyZWN0aW9uKClcIlxuICAgICAgICBjbGFzcz1cImV0LXNjcm9sbGFibGUtYnV0dG9uIGV0LXNjcm9sbGFibGUtYnV0dG9uLS1lbmRcIlxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICA+XG4gICAgICAgIDxldC1jaGV2cm9uLWljb24gLz5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cblxuQGlmIChyZW5kZXJOYXZpZ2F0aW9uKCkpIHtcbiAgPGRpdiBjbGFzcz1cImV0LXNjcm9sbGFibGUtbmF2aWdhdGlvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIEBmb3IgKGl0ZW0gb2Ygc2Nyb2xsYWJsZU5hdmlnYXRpb24oKTsgdHJhY2sgaTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgIDxidXR0b25cbiAgICAgICAgW2NsYXNzLmV0LXNjcm9sbGFibGUtbmF2aWdhdGlvbi1pdGVtLS1hY3RpdmVdPVwiaXRlbS5pc0FjdGl2ZVwiXG4gICAgICAgIChjbGljayk9XCJzY3JvbGxUb0VsZW1lbnRWaWFOYXZpZ2F0aW9uKGksIGl0ZW0uZWxlbWVudClcIlxuICAgICAgICBjbGFzcz1cImV0LXNjcm9sbGFibGUtbmF2aWdhdGlvbi1pdGVtXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICA+PC9idXR0b24+XG4gICAgfVxuICA8L2Rpdj5cbn1cbiJdfQ==
|
|
598
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsYWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvc2Nyb2xsYWJsZS9jb21wb25lbnRzL3Njcm9sbGFibGUvc2Nyb2xsYWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvc2Nyb2xsYWJsZS9jb21wb25lbnRzL3Njcm9sbGFibGUvc2Nyb2xsYWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEVBQ1QsZUFBZSxFQUNmLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUUsT0FBTyxFQUVMLHlCQUF5QixFQUN6QixZQUFZLEVBRVosMkJBQTJCLEVBRzNCLGNBQWMsRUFDZCxrQ0FBa0MsRUFDbEMsZ0JBQWdCLEVBQ2hCLFNBQVMsRUFDVCxlQUFlLEVBQ2YscUJBQXFCLEVBQ3JCLHlCQUF5QixFQUN6Qix3QkFBd0IsRUFDeEIsb0JBQW9CLEVBQ3BCLGlCQUFpQixFQUNqQiwyQkFBMkIsRUFDM0IsZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxlQUFlLEVBQ2YsT0FBTyxFQUNQLGFBQWEsRUFDYixZQUFZLEVBQ1osTUFBTSxF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dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFPN0Isb0JBQW9CO3NCQUQvQixTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFPdEMsYUFBYTtzQkFEeEIsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQU8vQixZQUFZO3NCQUR2QixTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBTzlCLGtCQUFrQjtzQkFEN0IsZUFBZTt1QkFBQyxnQ0FBZ0MsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBib29sZWFuQXR0cmlidXRlLFxuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBpbmplY3QsXG4gIGlzRGV2TW9kZSxcbiAgbnVtYmVyQXR0cmlidXRlLFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkLCB0b09ic2VydmFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge1xuICBDdXJyZW50RWxlbWVudFZpc2liaWxpdHksXG4gIEN1cnNvckRyYWdTY3JvbGxEaXJlY3RpdmUsXG4gIExldERpcmVjdGl2ZSxcbiAgTmdDbGFzc1R5cGUsXG4gIE9ic2VydmVTY3JvbGxTdGF0ZURpcmVjdGl2ZSxcbiAgU2Nyb2xsT2JzZXJ2ZXJTY3JvbGxTdGF0ZSxcbiAgU2Nyb2xsVG9FbGVtZW50T3B0aW9ucyxcbiAgVHlwZWRRdWVyeUxpc3QsXG4gIGdldEZpcnN0QW5kTGFzdFBhcnRpYWxJbnRlcnNlY3Rpb24sXG4gIGlzRWxlbWVudFZpc2libGUsXG4gIG5leHRGcmFtZSxcbiAgc2Nyb2xsVG9FbGVtZW50LFxuICBzaWduYWxFbGVtZW50Q2hpbGRyZW4sXG4gIHNpZ25hbEVsZW1lbnRJbnRlcnNlY3Rpb24sXG4gIHNpZ25hbEVsZW1lbnRTY3JvbGxTdGF0ZSxcbiAgc2lnbmFsSG9zdEF0dHJpYnV0ZXMsXG4gIHNpZ25hbEhvc3RDbGFzc2VzLFxuICBzaWduYWxIb3N0RWxlbWVudERpbWVuc2lvbnMsXG4gIHNpZ25hbEhvc3RTdHlsZXMsXG59IGZyb20gJ0BldGhsZXRlL2NvcmUnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBkZWJvdW5jZVRpbWUsXG4gIGZpbHRlcixcbiAgZnJvbUV2ZW50LFxuICBtYXAsXG4gIHRha2UsXG4gIHRha2VVbnRpbCxcbiAgdGFwLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENoZXZyb25JY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vaWNvbnMvY2hldnJvbi1pY29uJztcbmltcG9ydCB7IFNjcm9sbGFibGVJZ25vcmVDaGlsZERpcmVjdGl2ZSwgaXNTY3JvbGxhYmxlQ2hpbGRJZ25vcmVkIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9zY3JvbGxhYmxlLWlnbm9yZS1jaGlsZCc7XG5pbXBvcnQge1xuICBTQ1JPTExBQkxFX0lTX0FDVElWRV9DSElMRF9UT0tFTixcbiAgU2Nyb2xsYWJsZUlzQWN0aXZlQ2hpbGREaXJlY3RpdmUsXG59IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvc2Nyb2xsYWJsZS1pcy1hY3RpdmUtY2hpbGQnO1xuaW1wb3J0IHsgU2Nyb2xsYWJsZUludGVyc2VjdGlvbkNoYW5nZSwgU2Nyb2xsYWJsZVNjcm9sbE1vZGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbi8vIFRocmVzaG9sZHMgZm9yIHRoZSBpbnRlcnNlY3Rpb24gb2JzZXJ2ZXIuXG5jb25zdCBFTEVNRU5UX0lOVEVSU0VDVElPTl9USFJFU0hPTEQgPSBbXG4gIC8vIFdlIHVzZSA1MSBzdGVwcyB0byBnZXQgYSAyJSBzdGVwIHNpemUuXG4gIC4uLkFycmF5LmZyb20oeyBsZW5ndGg6IDUxIH0sIChfLCBpKSA9PiBpIC8gNTApLFxuXG4gIC8vIEFkZGl0aW9uYWwgc3RlcHMgbmVlZGVkIHNpbmNlIGRpc3BsYXkgc2NhbGluZyBjYW4gY2F1c2UgdGhlIGludGVyc2VjdGlvbiByYXRpbyB0byBiZSBzbGlnaHRseSBvZmYuXG4gIDAuMDEsXG4gIDAuMDA1LFxuICAwLjAwMSxcbiAgMC45OSxcbiAgMC45OTUsXG4gIDAuOTk5LFxuXTtcblxuaW50ZXJmYWNlIFNjcm9sbGFibGVOYXZpZ2F0aW9uSXRlbSB7XG4gIGlzQWN0aXZlOiBib29sZWFuO1xuICBlbGVtZW50OiBIVE1MRWxlbWVudDtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZXQtc2Nyb2xsYWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zY3JvbGxhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2Nyb2xsYWJsZS5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIEN1cnNvckRyYWdTY3JvbGxEaXJlY3RpdmUsXG4gICAgT2JzZXJ2ZVNjcm9sbFN0YXRlRGlyZWN0aXZlLFxuICAgIE5nQ2xhc3MsXG4gICAgTGV0RGlyZWN0aXZlLFxuICAgIENoZXZyb25JY29uQ29tcG9uZW50LFxuICAgIFNjcm9sbGFibGVJc0FjdGl2ZUNoaWxkRGlyZWN0aXZlLFxuICAgIFNjcm9sbGFibGVJZ25vcmVDaGlsZERpcmVjdGl2ZSxcbiAgXSxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnZXQtc2Nyb2xsYWJsZScsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIFNjcm9sbGFibGVDb21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IF9lbGVtZW50UmVmID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNDdXJzb3JEcmFnZ2luZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBASW5wdXQoeyBhbGlhczogJ2l0ZW1TaXplJyB9KVxuICBzZXQgX2l0ZW1TaXplKHY6ICdhdXRvJyB8ICdzYW1lJyB8ICdmdWxsJykge1xuICAgIHRoaXMuaXRlbVNpemUuc2V0KHYpO1xuICB9XG4gIHJlYWRvbmx5IGl0ZW1TaXplID0gc2lnbmFsPCdhdXRvJyB8ICdzYW1lJyB8ICdmdWxsJz4oJ2F1dG8nKTtcblxuICBASW5wdXQoeyBhbGlhczogJ2RpcmVjdGlvbicgfSlcbiAgc2V0IF9kaXJlY3Rpb24odjogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJykge1xuICAgIHRoaXMuZGlyZWN0aW9uLnNldCh2KTtcbiAgfVxuICByZWFkb25seSBkaXJlY3Rpb24gPSBzaWduYWw8J2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJz4oJ2hvcml6b250YWwnKTtcblxuICBASW5wdXQoeyBhbGlhczogJ3Njcm9sbGFibGVSb2xlJyB9KVxuICBzZXQgX3Njcm9sbGFibGVSb2xlKHY6IHN0cmluZyB8IG51bGwpIHtcbiAgICB0aGlzLnNjcm9sbGFibGVSb2xlLnNldCh2KTtcbiAgfVxuICByZWFkb25seSBzY3JvbGxhYmxlUm9sZSA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICBASW5wdXQoeyBhbGlhczogJ3Njcm9sbGFibGVDbGFzcycgfSlcbiAgc2V0IF9zY3JvbGxhYmxlQ2xhc3ModjogTmdDbGFzc1R5cGUgfCBudWxsKSB7XG4gICAgdGhpcy5zY3JvbGxhYmxlQ2xhc3Muc2V0KHYpO1xuICB9XG4gIHJlYWRvbmx5IHNjcm9sbGFibGVDbGFzcyA9IHNpZ25hbDxOZ0NsYXNzVHlwZSB8IG51bGw+KG51bGwpO1xuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSwgYWxpYXM6ICdyZW5kZXJOYXZpZ2F0aW9uJyB9KVxuICBzZXQgX3JlbmRlck5hdmlnYXRpb24odjogYm9vbGVhbikge1xuICAgIHRoaXMucmVuZGVyTmF2aWdhdGlvbi5zZXQodik7XG4gIH1cbiAgcmVhZG9ubHkgcmVuZGVyTmF2aWdhdGlvbiA9IHNpZ25hbChmYWxzZSk7XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlLCBhbGlhczogJ3JlbmRlck1hc2tzJyB9KVxuICBzZXQgX3JlbmRlck1hc2tzKHY6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnJlbmRlck1hc2tzLnNldCh2KTtcbiAgfVxuICByZWFkb25seSByZW5kZXJNYXNrcyA9IHNpZ25hbCh0cnVlKTtcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUsIGFsaWFzOiAncmVuZGVyQnV0dG9ucycgfSlcbiAgc2V0IF9yZW5kZXJCdXR0b25zKHY6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnJlbmRlckJ1dHRvbnMuc2V0KHYpO1xuICB9XG4gIHJlYWRvbmx5IHJlbmRlckJ1dHRvbnMgPSBzaWduYWwodHJ1ZSk7XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlLCBhbGlhczogJ3JlbmRlclNjcm9sbGJhcnMnIH0pXG4gIHNldCBfcmVuZGVyU2Nyb2xsYmFycyh2OiBib29sZWFuKSB7XG4gICAgdGhpcy5yZW5kZXJTY3JvbGxiYXJzLnNldCh2KTtcbiAgfVxuICByZWFkb25seSByZW5kZXJTY3JvbGxiYXJzID0gc2lnbmFsKGZhbHNlKTtcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUsIGFsaWFzOiAnc3RpY2t5QnV0dG9ucycgfSlcbiAgc2V0IF9zdGlja3lCdXR0b25zKHY6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnN0aWNreUJ1dHRvbnMuc2V0KHYpO1xuICB9XG4gIHJlYWRvbmx5IHN0aWNreUJ1dHRvbnMgPSBzaWduYWwoZmFsc2UpO1xuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSwgYWxpYXM6ICdjdXJzb3JEcmFnU2Nyb2xsJyB9KVxuICBzZXQgX2N1cnNvckRyYWdTY3JvbGwodjogYm9vbGVhbikge1xuICAgIHRoaXMuY3Vyc29yRHJhZ1Njcm9sbC5zZXQodik7XG4gIH1cbiAgcmVhZG9ubHkgY3Vyc29yRHJhZ1Njcm9sbCA9IHNpZ25hbCh0cnVlKTtcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUsIGFsaWFzOiAnZGlzYWJsZUFjdGl2ZUVsZW1lbnRTY3JvbGxpbmcnIH0pXG4gIHNldCBfZGlzYWJsZUFjdGl2ZUVsZW1lbnRTY3JvbGxpbmcodjogYm9vbGVhbikge1xuICAgIHRoaXMuZGlzYWJsZUFjdGl2ZUVsZW1lbnRTY3JvbGxpbmcuc2V0KHYpO1xuICB9XG4gIHJlYWRvbmx5IGRpc2FibGVBY3RpdmVFbGVtZW50U2Nyb2xsaW5nID0gc2lnbmFsKGZhbHNlKTtcblxuICBASW5wdXQoeyBhbGlhczogJ3Njcm9sbE1vZGUnIH0pXG4gIHNldCBfc2Nyb2xsTW9kZSh2OiBTY3JvbGxhYmxlU2Nyb2xsTW9kZSkge1xuICAgIHRoaXMuc2Nyb2xsTW9kZS5zZXQodik7XG4gIH1cbiAgcmVhZG9ubHkgc2Nyb2xsTW9kZSA9IHNpZ25hbDxTY3JvbGxhYmxlU2Nyb2xsTW9kZT4oJ2NvbnRhaW5lcicpO1xuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSwgYWxpYXM6ICdzbmFwJyB9KVxuICBzZXQgX3NuYXAodjogYm9vbGVhbikge1xuICAgIHRoaXMuc25hcC5zZXQodik7XG4gIH1cbiAgcmVhZG9ubHkgc25hcCA9IHNpZ25hbChmYWxzZSk7XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUsIGFsaWFzOiAnc2Nyb2xsTWFyZ2luJyB9KVxuICBzZXQgX3Njcm9sbE1hcmdpbih2OiBudW1iZXIpIHtcbiAgICB0aGlzLnNjcm9sbE1hcmdpbi5zZXQodik7XG4gIH1cbiAgcmVhZG9ubHkgc2Nyb2xsTWFyZ2luID0gc2lnbmFsKDApO1xuXG4gIEBPdXRwdXQoKVxuICByZWFkb25seSBzY3JvbGxTdGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8U2Nyb2xsT2JzZXJ2ZXJTY3JvbGxTdGF0ZT4oKTtcblxuICBAT3V0cHV0KClcbiAgcmVhZG9ubHkgaW50ZXJzZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxTY3JvbGxhYmxlSW50ZXJzZWN0aW9uQ2hhbmdlW10+KCk7XG5cbiAgQFZpZXdDaGlsZCgnc2Nyb2xsYWJsZScsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHByaXZhdGUgc2V0IF9zY3JvbGxhYmxlKGU6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KSB7XG4gICAgdGhpcy5zY3JvbGxhYmxlLnNldChlKTtcbiAgfVxuICByZWFkb25seSBzY3JvbGxhYmxlID0gc2lnbmFsPEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHwgbnVsbD4obnVsbCk7XG5cbiAgQFZpZXdDaGlsZCgnc2Nyb2xsYWJsZUNvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHByaXZhdGUgc2V0IF9zY3JvbGxhYmxlQ29udGFpbmVyKGU6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KSB7XG4gICAgdGhpcy5zY3JvbGxhYmxlQ29udGFpbmVyLnNldChlKTtcbiAgfVxuICByZWFkb25seSBzY3JvbGxhYmxlQ29udGFpbmVyID0gc2lnbmFsPEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHwgbnVsbD4obnVsbCk7XG5cbiAgQFZpZXdDaGlsZCgnZmlyc3RFbGVtZW50JywgeyBzdGF0aWM6IHRydWUgfSlcbiAgcHJpdmF0ZSBzZXQgX2ZpcnN0RWxlbWVudChlOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50Pikge1xuICAgIHRoaXMuZmlyc3RFbGVtZW50LnNldChlKTtcbiAgfVxuICByZWFkb25seSBmaXJzdEVsZW1lbnQgPSBzaWduYWw8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4gfCBudWxsPihudWxsKTtcblxuICBAVmlld0NoaWxkKCdsYXN0RWxlbWVudCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHByaXZhdGUgc2V0IF9sYXN0RWxlbWVudChlOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50Pikge1xuICAgIHRoaXMubGFzdEVsZW1lbnQuc2V0KGUpO1xuICB9XG4gIHJlYWRvbmx5IGxhc3RFbGVtZW50ID0gc2lnbmFsPEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHwgbnVsbD4obnVsbCk7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihTQ1JPTExBQkxFX0lTX0FDVElWRV9DSElMRF9UT0tFTiwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICBwcml2YXRlIHNldCBfYWN0aXZlRWxlbWVudExpc3QoZTogVHlwZWRRdWVyeUxpc3Q8U2Nyb2xsYWJsZUlzQWN0aXZlQ2hpbGREaXJlY3RpdmU+KSB7XG4gICAgdGhpcy5hY3RpdmVFbGVtZW50TGlzdC5zZXQoZSk7XG4gIH1cbiAgcmVhZG9ubHkgYWN0aXZlRWxlbWVudExpc3QgPSBzaWduYWw8VHlwZWRRdWVyeUxpc3Q8U2Nyb2xsYWJsZUlzQWN0aXZlQ2hpbGREaXJlY3RpdmU+IHwgbnVsbD4obnVsbCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjb250YWluZXJTY3JvbGxTdGF0ZSA9IHNpZ25hbEVsZW1lbnRTY3JvbGxTdGF0ZSh0aGlzLnNjcm9sbGFibGUpO1xuICBwcml2YXRlIHJlYWRvbmx5IGZpcnN0RWxlbWVudEludGVyc2VjdGlvbiA9IHNpZ25hbEVsZW1lbnRJbnRlcnNlY3Rpb24odGhpcy5maXJzdEVsZW1lbnQsIHsgcm9vdDogdGhpcy5zY3JvbGxhYmxlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGZpcnN0RWxlbWVudFZpc2liaWxpdHkgPSBzaWduYWw8Q3VycmVudEVsZW1lbnRWaXNpYmlsaXR5IHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbGFzdEVsZW1lbnRJbnRlcnNlY3Rpb24gPSBzaWduYWxFbGVtZW50SW50ZXJzZWN0aW9uKHRoaXMubGFzdEVsZW1lbnQsIHsgcm9vdDogdGhpcy5zY3JvbGxhYmxlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGxhc3RFbGVtZW50VmlzaWJpbGl0eSA9IHNpZ25hbDxDdXJyZW50RWxlbWVudFZpc2liaWxpdHkgfCBudWxsPihudWxsKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGFsbFNjcm9sbGFibGVDaGlsZHJlbiA9IHNpZ25hbEVsZW1lbnRDaGlsZHJlbih0aGlzLnNjcm9sbGFibGVDb250YWluZXIpO1xuICBwcml2YXRlIHJlYWRvbmx5IHNjcm9sbGFibGVEaW1lbnNpb25zID0gc2lnbmFsSG9zdEVsZW1lbnREaW1lbnNpb25zKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Nyb2xsYWJsZUNoaWxkcmVuID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLmFsbFNjcm9sbGFibGVDaGlsZHJlbigpLmZpbHRlcigoYykgPT4gIWlzU2Nyb2xsYWJsZUNoaWxkSWdub3JlZChjKSksXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzYWJsZVNuYXBwaW5nJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzY3JvbGxhYmxlQ29udGVudEludGVyc2VjdGlvbnMgPSBzaWduYWxFbGVtZW50SW50ZXJzZWN0aW9uKHRoaXMuc2Nyb2xsYWJsZUNoaWxkcmVuLCB7XG4gICAgcm9vdDogdGhpcy5zY3JvbGxhYmxlLFxuICAgIHRocmVzaG9sZDogRUxFTUVOVF9JTlRFUlNFQ1RJT05fVEhSRVNIT0xELFxuICB9KTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHNjcm9sbGFibGVDb250ZW50SW50ZXJzZWN0aW9ucyQgPSB0b09ic2VydmFibGUodGhpcy5zY3JvbGxhYmxlQ29udGVudEludGVyc2VjdGlvbnMpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbWFudWFsQWN0aXZlTmF2aWdhdGlvbkluZGV4ID0gc2lnbmFsPG51bWJlciB8IG51bGw+KG51bGwpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY2FuU2Nyb2xsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGRpciA9IHRoaXMuZGlyZWN0aW9uKCk7XG5cbiAgICBpZiAoZGlyID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lclNjcm9sbFN0YXRlKCkuY2FuU2Nyb2xsSG9yaXpvbnRhbGx5O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lclNjcm9sbFN0YXRlKCkuY2FuU2Nyb2xsVmVydGljYWxseTtcbiAgfSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBpc0F0U3RhcnQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKCF0aGlzLmNhblNjcm9sbCgpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnRlcnNlY3Rpb24gPSB0aGlzLmZpcnN0RWxlbWVudEludGVyc2VjdGlvbigpWzBdO1xuXG4gICAgaWYgKCFpbnRlcnNlY3Rpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLmZpcnN0RWxlbWVudFZpc2liaWxpdHkoKT8uaW5saW5lID8/IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGludGVyc2VjdGlvbi5pc0ludGVyc2VjdGluZztcbiAgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaXNBdEVuZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAoIXRoaXMuY2FuU2Nyb2xsKCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGludGVyc2VjdGlvbiA9IHRoaXMubGFzdEVsZW1lbnRJbnRlcnNlY3Rpb24oKVswXTtcblxuICAgIGlmICghaW50ZXJzZWN0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy5sYXN0RWxlbWVudFZpc2liaWxpdHkoKT8uaW5saW5lID8/IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGludGVyc2VjdGlvbi5pc0ludGVyc2VjdGluZztcbiAgfSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfYWN0dWFsSXRlbVNpemUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKHRoaXMuaXRlbVNpemUoKSAhPT0gJ2Z1bGwnKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGRpbWVuc2lvbnMgPSB0aGlzLnNjcm9sbGFibGVEaW1lbnNpb25zKCk7XG5cbiAgICBpZiAodGhpcy5kaXJlY3Rpb24oKSA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICByZXR1cm4gZGltZW5zaW9ucy5yZWN0Py53aWR0aCA/PyBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZGltZW5zaW9ucy5yZWN0Py5oZWlnaHQgPz8gbnVsbDtcbiAgICB9XG4gIH0pO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZW5hYmxlT3ZlcmxheUFuaW1hdGlvbnMgPSBzaWduYWwoZmFsc2UpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2luaXRpYWxTY3JvbGxhYmxlTmF2aWdhdGlvbiA9IHNpZ25hbDxTY3JvbGxhYmxlTmF2aWdhdGlvbkl0ZW1bXT4oW10pO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBzY3JvbGxhYmxlTmF2aWdhdGlvbiA9IGNvbXB1dGVkPFNjcm9sbGFibGVOYXZpZ2F0aW9uSXRlbVtdPigoKSA9PiB7XG4gICAgY29uc3QgYWxsSW50ZXJzZWN0aW9ucyA9IHRoaXMuc2Nyb2xsYWJsZUNvbnRlbnRJbnRlcnNlY3Rpb25zKCk7XG4gICAgY29uc3QgbWFudWFsQWN0aXZlTmF2aWdhdGlvbkluZGV4ID0gdGhpcy5tYW51YWxBY3RpdmVOYXZpZ2F0aW9uSW5kZXgoKTtcbiAgICBjb25zdCBpbml0aWFsU2Nyb2xsYWJsZU5hdmlnYXRpb24gPSB0aGlzLl9pbml0aWFsU2Nyb2xsYWJsZU5hdmlnYXRpb24oKTtcblxuICAgIGlmICghYWxsSW50ZXJzZWN0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBpbml0aWFsU2Nyb2xsYWJsZU5hdmlnYXRpb247XG4gICAgfVxuXG4gICAgY29uc3QgaGlnaGVzdEludGVyc2VjdGlvbiA9IGFsbEludGVyc2VjdGlvbnMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiB7XG4gICAgICBpZiAocHJldiAmJiBwcmV2LmludGVyc2VjdGlvblJhdGlvID4gY3Vyci5pbnRlcnNlY3Rpb25SYXRpbykge1xuICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGN1cnI7XG4gICAgfSwgYWxsSW50ZXJzZWN0aW9uc1swXSk7XG5cbiAgICBpZiAoIWhpZ2hlc3RJbnRlcnNlY3Rpb24pIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWxsSW50ZXJzZWN0aW9ucy5tYXAoKGksIGluZGV4KSA9PiAoe1xuICAgICAgaXNBY3RpdmU6XG4gICAgICAgIG1hbnVhbEFjdGl2ZU5hdmlnYXRpb25JbmRleCAhPT0gbnVsbFxuICAgICAgICAgID8gbWFudWFsQWN0aXZlTmF2aWdhdGlvbkluZGV4ID09PSBpbmRleFxuICAgICAgICAgIDogaSA9PT0gaGlnaGVzdEludGVyc2VjdGlvbiAmJiBoaWdoZXN0SW50ZXJzZWN0aW9uLmludGVyc2VjdGlvblJhdGlvID4gMCxcbiAgICAgIGVsZW1lbnQ6IGkudGFyZ2V0IGFzIEhUTUxFbGVtZW50LFxuICAgIH0pKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgaG9zdEF0dHJpYnV0ZUJpbmRpbmdzID0gc2lnbmFsSG9zdEF0dHJpYnV0ZXMoe1xuICAgICdpdGVtLXNpemUnOiB0aGlzLml0ZW1TaXplLFxuICAgICdhY3R1YWwtaXRlbS1zaXplJzogdGhpcy5fYWN0dWFsSXRlbVNpemUsXG4gICAgZGlyZWN0aW9uOiB0aGlzLmRpcmVjdGlvbixcbiAgICAncmVuZGVyLXNjcm9sbGJhcnMnOiB0aGlzLnJlbmRlclNjcm9sbGJhcnMsXG4gICAgJ3N0aWNreS1idXR0b25zJzogdGhpcy5zdGlja3lCdXR0b25zLFxuICB9KTtcblxuICByZWFkb25seSBob3N0Q2xhc3NCaW5kaW5ncyA9IHNpZ25hbEhvc3RDbGFzc2VzKHtcbiAgICAnZXQtc2Nyb2xsYWJsZS0tY2FuLXNjcm9sbCc6IHRoaXMuY2FuU2Nyb2xsLFxuICAgICdldC1zY3JvbGxhYmxlLS1pcy1hdC1zdGFydCc6IHRoaXMuaXNBdFN0YXJ0LFxuICAgICdldC1zY3JvbGxhYmxlLS1pcy1hdC1lbmQnOiB0aGlzLmlzQXRFbmQsXG4gICAgJ2V0LXNjcm9sbGFibGUtLWVuYWJsZS1vdmVybGF5LWFuaW1hdGlvbnMnOiB0aGlzLmVuYWJsZU92ZXJsYXlBbmltYXRpb25zLFxuICB9KTtcblxuICByZWFkb25seSBob3N0U3R5bGVCaW5kaW5ncyA9IHNpZ25hbEhvc3RTdHlsZXMoe1xuICAgICctLWFjdHVhbC1pdGVtLXNpemUnOiBjb21wdXRlZCgoKSA9PiAodGhpcy5fYWN0dWFsSXRlbVNpemUoKSAhPT0gbnVsbCA/IGAke3RoaXMuX2FjdHVhbEl0ZW1TaXplKCl9cHhgIDogbnVsbCkpLFxuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNjcm9sbGFibGUgPSB0aGlzLnNjcm9sbGFibGUoKT8ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgZmlyc3RFbGVtZW50ID0gdGhpcy5maXJzdEVsZW1lbnQoKT8ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgbGFzdEVsZW1lbnQgPSB0aGlzLmxhc3RFbGVtZW50KCk/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGFjdGl2ZUVsZW1lbnRMaXN0ID0gdGhpcy5hY3RpdmVFbGVtZW50TGlzdCgpPy50b0FycmF5KCk7XG5cbiAgICAgICAgaWYgKCFzY3JvbGxhYmxlIHx8ICFmaXJzdEVsZW1lbnQgfHwgIWxhc3RFbGVtZW50IHx8ICFhY3RpdmVFbGVtZW50TGlzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpcnN0QWN0aXZlID0gYWN0aXZlRWxlbWVudExpc3QuZmluZCgoYSkgPT4gYS5pc0FjdGl2ZUNoaWxkRW5hYmxlZCgpKTtcblxuICAgICAgICBpZiAoZmlyc3RBY3RpdmUgJiYgIXRoaXMuZGlzYWJsZUFjdGl2ZUVsZW1lbnRTY3JvbGxpbmcoKSkge1xuICAgICAgICAgIGNvbnN0IG9mZnNldFRvcCA9IGZpcnN0QWN0aXZlLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRUb3AgLSBzY3JvbGxhYmxlLm9mZnNldFRvcDtcbiAgICAgICAgICBjb25zdCBvZmZzZXRMZWZ0ID0gZmlyc3RBY3RpdmUuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldExlZnQgLSBzY3JvbGxhYmxlLm9mZnNldExlZnQ7XG4gICAgICAgICAgc2Nyb2xsYWJsZS5zY3JvbGxMZWZ0ID0gb2Zmc2V0TGVmdCAtIHRoaXMuc2Nyb2xsTWFyZ2luKCk7XG4gICAgICAgICAgc2Nyb2xsYWJsZS5zY3JvbGxUb3AgPSBvZmZzZXRUb3AgLSB0aGlzLnNjcm9sbE1hcmdpbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5maXJzdEVsZW1lbnRWaXNpYmlsaXR5LnNldChcbiAgICAgICAgICBpc0VsZW1lbnRWaXNpYmxlKHtcbiAgICAgICAgICAgIGNvbnRhaW5lcjogc2Nyb2xsYWJsZSxcbiAgICAgICAgICAgIGVsZW1lbnQ6IGZpcnN0RWxlbWVudCxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmxhc3RFbGVtZW50VmlzaWJpbGl0eS5zZXQoXG4gICAgICAgICAgaXNFbGVtZW50VmlzaWJsZSh7XG4gICAgICAgICAgICBjb250YWluZXI6IHNjcm9sbGFibGUsXG4gICAgICAgICAgICBlbGVtZW50OiBsYXN0RWxlbWVudCxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBXZSBuZWVkIHRvIHdhaXQgb25lIGZyYW1lIGJlZm9yZSBlbmFibGluZyBhbmltYXRpb25zIHRvIHByZXZlbnQgYSBhbmltYXRpb24gZnJvbSBwbGF5aW5nIGR1cmluZyBpbml0aWFsIHJlbmRlci5cbiAgICAgICAgbmV4dEZyYW1lKCgpID0+IHRoaXMuZW5hYmxlT3ZlcmxheUFuaW1hdGlvbnMuc2V0KHRydWUpKTtcbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG4gICAgKTtcblxuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudExpc3QgPSB0aGlzLnNjcm9sbGFibGVDaGlsZHJlbigpO1xuICAgICAgICBjb25zdCBzY3JvbGxhYmxlID0gdGhpcy5zY3JvbGxhYmxlKCk/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHJlbmRlck5hdmlnYXRpb24gPSB0aGlzLnJlbmRlck5hdmlnYXRpb24oKTtcblxuICAgICAgICBpZiAoIWVsZW1lbnRMaXN0IHx8ICFzY3JvbGxhYmxlIHx8ICFyZW5kZXJOYXZpZ2F0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlyc3RWaXNpYmxlRWxlbWVudCA9IGVsZW1lbnRMaXN0LmZpbmQoKGUpID0+IGlzRWxlbWVudFZpc2libGUoeyBjb250YWluZXI6IHNjcm9sbGFibGUsIGVsZW1lbnQ6IGUgfSkpO1xuXG4gICAgICAgIGlmICghZmlyc3RWaXNpYmxlRWxlbWVudCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluaXRpYWxOYXZpZ2F0aW9uSXRlbXM6IFNjcm9sbGFibGVOYXZpZ2F0aW9uSXRlbVtdID0gZWxlbWVudExpc3QubWFwKChlKSA9PiAoe1xuICAgICAgICAgIGlzQWN0aXZlOiBlID09PSBmaXJzdFZpc2libGVFbGVtZW50LFxuICAgICAgICAgIGVsZW1lbnQ6IGUsXG4gICAgICAgIH0pKTtcblxuICAgICAgICB0aGlzLl9pbml0aWFsU2Nyb2xsYWJsZU5hdmlnYXRpb24uc2V0KGluaXRpYWxOYXZpZ2F0aW9uSXRlbXMpO1xuICAgICAgfSxcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcbiAgICApO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGlzQXRTdGFydCA9IHRoaXMuaXNBdFN0YXJ0KCk7XG4gICAgICBjb25zdCBpc0F0RW5kID0gdGhpcy5pc0F0RW5kKCk7XG4gICAgICBjb25zdCBjYW5TY3JvbGwgPSB0aGlzLmNhblNjcm9sbCgpO1xuXG4gICAgICB0aGlzLnNjcm9sbFN0YXRlQ2hhbmdlLmVtaXQoe1xuICAgICAgICBjYW5TY3JvbGwsXG4gICAgICAgIGlzQXRFbmQ6ICEhaXNBdEVuZCxcbiAgICAgICAgaXNBdFN0YXJ0OiAhIWlzQXRTdGFydCxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGVuYWJsZVNuYXBwaW5nID0gdGhpcy5zbmFwKCk7XG5cbiAgICAgIGlmIChlbmFibGVTbmFwcGluZykge1xuICAgICAgICB0aGlzLl9lbmFibGVTbmFwcGluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZVNuYXBwaW5nKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnNjcm9sbGFibGVDb250ZW50SW50ZXJzZWN0aW9ucyRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcbiAgICAgICAgZGVib3VuY2VUaW1lKDEwKSxcbiAgICAgICAgdGFwKChlbnRyaWVzKSA9PiB7XG4gICAgICAgICAgdGhpcy5pbnRlcnNlY3Rpb25DaGFuZ2UuZW1pdChcbiAgICAgICAgICAgIGVudHJpZXMubWFwKChpLCBpbmRleCkgPT4gKHtcbiAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgIGVsZW1lbnQ6IGkudGFyZ2V0IGFzIEhUTUxFbGVtZW50LFxuICAgICAgICAgICAgICBpbnRlcnNlY3Rpb25SYXRpbzogaS5pbnRlcnNlY3Rpb25SYXRpbyxcbiAgICAgICAgICAgICAgaXNJbnRlcnNlY3Rpbmc6IGkuaXNJbnRlcnNlY3RpbmcsXG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBzY3JvbGxPbmVDb250YWluZXJTaXplKGRpcmVjdGlvbjogJ3N0YXJ0JyB8ICdlbmQnKSB7XG4gICAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IHRoaXMuc2Nyb2xsYWJsZSgpPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgaWYgKCFzY3JvbGxFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgY29uc3QgaXNTbmFwcGluZ0VuYWJsZWQgPSB0aGlzLnNuYXAoKTtcblxuICAgIGlmIChpc1NuYXBwaW5nRW5hYmxlZCkge1xuICAgICAgLy8gSWYgc25hcHBpbmcgaXMgZW5hYmxlZCB3ZSB3YW50IHRvIHNjcm9sbCB0byBhIHBvc2l0aW9uIHdoZXJlIG5vIGZ1cnRoZXIgc25hcHBpbmcgd2lsbCBoYXBwZW4gYWZ0ZXIgdGhlIHNjcm9sbC5cbiAgICAgIGNvbnN0IGFsbEludGVyc2VjdGlvbnMgPSB0aGlzLnNjcm9sbGFibGVDb250ZW50SW50ZXJzZWN0aW9ucygpO1xuICAgICAgY29uc3QgaW50ZXJzZWN0aW9ucyA9IGdldEZpcnN0QW5kTGFzdFBhcnRpYWxJbnRlcnNlY3Rpb24oYWxsSW50ZXJzZWN0aW9ucyk7XG4gICAgICBjb25zdCByZWxldmFudEludGVyc2VjdGlvbiA9IGRpcmVjdGlvbiA9PT0gJ3N0YXJ0JyA/IGludGVyc2VjdGlvbnM/LmZpcnN0IDogaW50ZXJzZWN0aW9ucz8ubGFzdDtcblxuICAgICAgaWYgKCFyZWxldmFudEludGVyc2VjdGlvbikgcmV0dXJuO1xuXG4gICAgICBjb25zdCBuZXh0SW5kZXggPVxuICAgICAgICByZWxldmFudEludGVyc2VjdGlvbi5pbnRlcnNlY3Rpb24uaW50ZXJzZWN0aW9uUmF0aW8gIT09IDFcbiAgICAgICAgICA/IHJlbGV2YW50SW50ZXJzZWN0aW9uLmluZGV4XG4gICAgICAgICAgOiBkaXJlY3Rpb24gPT09ICdzdGFydCdcbiAgICAgICAgICAgID8gcmVsZXZhbnRJbnRlcnNlY3Rpb24uaW5kZXggLSAxXG4gICAgICAgICAgICA6IHJlbGV2YW50SW50ZXJzZWN0aW9uLmluZGV4ICsgMTtcblxuICAgICAgY29uc3QgZWxlbWVudCA9XG4gICAgICAgIChhbGxJbnRlcnNlY3Rpb25zW25leHRJbmRleF0/LnRhcmdldCBhcyBIVE1MRWxlbWVudCkgfHxcbiAgICAgICAgKHJlbGV2YW50SW50ZXJzZWN0aW9uLmludGVyc2VjdGlvbi50YXJnZXQgYXMgSFRNTEVsZW1lbnQpO1xuXG4gICAgICB0aGlzLnNjcm9sbFRvRWxlbWVudCh7XG4gICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICAgIG9yaWdpbjogZGlyZWN0aW9uID09PSAnZW5kJyA/ICdzdGFydCcgOiAnZW5kJyxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBKdXN0IHNjcm9sbCBvbmUgc2l6ZSBvZiB0aGUgc2Nyb2xsYWJsZSBjb250YWluZXIuXG4gICAgICBjb25zdCBzY3JvbGxhYmxlU2l6ZSA9IHRoaXMuZGlyZWN0aW9uKCkgPT09ICdob3Jpem9udGFsJyA/IHBhcmVudC5jbGllbnRXaWR0aCA6IHBhcmVudC5jbGllbnRIZWlnaHQ7XG4gICAgICBjb25zdCBjdXJyZW50U2Nyb2xsID0gdGhpcy5kaXJlY3Rpb24oKSA9PT0gJ2hvcml6b250YWwnID8gc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0IDogc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3A7XG5cbiAgICAgIHNjcm9sbEVsZW1lbnQuc2Nyb2xsVG8oe1xuICAgICAgICBbdGhpcy5kaXJlY3Rpb24oKSA9PT0gJ2hvcml6b250YWwnID8gJ2xlZnQnIDogJ3RvcCddOlxuICAgICAgICAgIGN1cnJlbnRTY3JvbGwgKyAoZGlyZWN0aW9uID09PSAnc3RhcnQnID8gLXNjcm9sbGFibGVTaXplIDogc2Nyb2xsYWJsZVNpemUpLFxuICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzY3JvbGxPbmVJdGVtU2l6ZShkaXJlY3Rpb246ICdzdGFydCcgfCAnZW5kJykge1xuICAgIGNvbnN0IGFsbEludGVyc2VjdGlvbnMgPSB0aGlzLnNjcm9sbGFibGVDb250ZW50SW50ZXJzZWN0aW9ucygpO1xuICAgIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSB0aGlzLnNjcm9sbGFibGUoKT8ubmF0aXZlRWxlbWVudDtcblxuICAgIGlmICghYWxsSW50ZXJzZWN0aW9ucy5sZW5ndGgpIHtcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ05vIGVsZW1lbnRzIGZvdW5kIHRvIHNjcm9sbCB0by4gTWFrZSBzdXJlIHRvIGFwcGx5IHRoZSBpc0VsZW1lbnQgZGlyZWN0aXZlIHRvIHRoZSBlbGVtZW50cyB5b3Ugd2FudCB0byBzY3JvbGwgdG8uJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbnRlcnNlY3Rpb25zID0gZ2V0Rmlyc3RBbmRMYXN0UGFydGlhbEludGVyc2VjdGlvbihhbGxJbnRlcnNlY3Rpb25zKTtcblxuICAgIGlmICghaW50ZXJzZWN0aW9ucyB8fCAhc2Nyb2xsRWxlbWVudCkgcmV0dXJuO1xuXG4gICAgLy8gTWVhbnMgdGhlIGN1cnJlbnQgZWxlbWVudCBpcyBiaWdnZXIgdGhhbiB0aGUgc2Nyb2xsYWJsZSBjb250YWluZXIuXG4gICAgLy8gSW4gdGhpcyBjYXNlIHdlIHNob3VsZCBzY3JvbGwgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50IGVsZW1lbnQuIElmIHdlIGFyZSBhbHJlYWR5IHRoZXJlIHdlIHNob3VsZCBzY3JvbGwgdG8gdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgZWxlbWVudC5cbiAgICAvLyBUaGlzIGFwcGxpZXMgdG8gdGhlIG90aGVyIGRpcmVjdGlvbiBhcyB3ZWxsLlxuICAgIGNvbnN0IGlzRmlyc3RBbmRMYXN0SW50ZXJzZWN0aW9uRXF1YWwgPSBpbnRlcnNlY3Rpb25zLmZpcnN0LmludGVyc2VjdGlvbiA9PT0gaW50ZXJzZWN0aW9ucy5sYXN0LmludGVyc2VjdGlvbjtcbiAgICBjb25zdCBzY3JvbGxhYmxlUmVjdCA9IHNjcm9sbEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICBpZiAoaXNGaXJzdEFuZExhc3RJbnRlcnNlY3Rpb25FcXVhbCkge1xuICAgICAgY29uc3QgaW50ZXJzZWN0aW9uID0gaW50ZXJzZWN0aW9ucy5maXJzdC5pbnRlcnNlY3Rpb24udGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgaXNTdGFydE9mRWxlbWVudFZpc2libGUgPVxuICAgICAgICB0aGlzLmRpcmVjdGlvbigpID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgICA/IE1hdGgucm91bmQoaW50ZXJzZWN0aW9uLmxlZnQpID49IE1hdGgucm91bmQoc2Nyb2xsYWJsZVJlY3QubGVmdClcbiAgICAgICAgICA6IE1hdGgucm91bmQoaW50ZXJzZWN0aW9uLnRvcCkgPj0gTWF0aC5yb3VuZChzY3JvbGxhYmxlUmVjdC50b3ApO1xuXG4gICAgICBjb25zdCBpc0VuZE9mRWxlbWVudFZpc2libGUgPVxuICAgICAgICB0aGlzLmRpcmVjdGlvbigpID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgICA/IE1hdGgucm91bmQoaW50ZXJzZWN0aW9uLnJpZ2h0KSA8PSBNYXRoLnJvdW5kKHNjcm9sbGFibGVSZWN0LnJpZ2h0KVxuICAgICAgICAgIDogTWF0aC5yb3VuZChpbnRlcnNlY3Rpb24uYm90dG9tKSA8PSBNYXRoLnJvdW5kKHNjcm9sbGFibGVSZWN0LmJvdHRvbSk7XG5cbiAgICAgIGlmICghaXNTdGFydE9mRWxlbWVudFZpc2libGUgfHwgIWlzRW5kT2ZFbGVtZW50VmlzaWJsZSkge1xuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAnc3RhcnQnKSB7XG4gICAgICAgICAgaWYgKGlzU3RhcnRPZkVsZW1lbnRWaXNpYmxlKSB7XG4gICAgICAgICAgICAvLyB0byB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyBlbGVtZW50XG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c0luZGV4ID0gaW50ZXJzZWN0aW9ucy5maXJzdC5pbmRleCAtIDE7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50VG9TY3JvbGxUbyA9IGFsbEludGVyc2VjdGlvbnNbcHJldmlvdXNJbmRleF0/LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcblxuICAgICAgICAgICAgaWYgKCFlbGVtZW50VG9TY3JvbGxUbykgcmV0dXJuO1xuXG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvRWxlbWVudCh7XG4gICAgICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnRUb1Njcm9sbFRvLFxuICAgICAgICAgICAgICBvcmlnaW46ICdlbmQnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRvIHRoZSBzdGFydCBvZiB0aGUgY3VycmVudCBlbGVtZW50XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvRWxlbWVudCh7XG4gICAgICAgICAgICAgIGVsZW1lbnQ6IGludGVyc2VjdGlvbnMuZmlyc3QuaW50ZXJzZWN0aW9uLnRhcmdldCBhcyBIVE1MRWxlbWVudCxcbiAgICAgICAgICAgICAgb3JpZ2luOiAnc3RhcnQnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChpc0VuZE9mRWxlbWVudFZpc2libGUpIHtcbiAgICAgICAgICAgIC8vIHRvIHRoZSBzdGFydCBvZiB0aGUgbmV4dCBlbGVtZW50XG4gICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSBpbnRlcnNlY3Rpb25zLmxhc3QuaW5kZXggKyAxO1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudFRvU2Nyb2xsVG8gPSBhbGxJbnRlcnNlY3Rpb25zW25leHRJbmRleF0/LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcblxuICAgICAgICAgICAgaWYgKCFlbGVtZW50VG9TY3JvbGxUbykgcmV0dXJuO1xuXG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvRWxlbWVudCh7XG4gICAgICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnRUb1Njcm9sbFRvLFxuICAgICAgICAgICAgICBvcmlnaW46ICdzdGFydCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdG8gdGhlIGVuZCBvZiB0aGUgY3VycmVudCBlbGVtZW50XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvRWxlbWVudCh7XG4gICAgICAgICAgICAgIGVsZW1lbnQ6IGludGVyc2VjdGlvbnMubGFzdC5pbnRlcnNlY3Rpb24udGFyZ2V0IGFzIEhUTUxFbGVtZW50LFxuICAgICAgICAgICAgICBvcmlnaW46ICdlbmQnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGRhdGEgPSBkaXJlY3Rpb24gPT09ICdzdGFydCcgPyBpbnRlcnNlY3Rpb25zLmZpcnN0IDogaW50ZXJzZWN0aW9ucy5sYXN0O1xuICAgIGxldCBlbGVtZW50VG9TY3JvbGxUbyA9IGRhdGEuaW50ZXJzZWN0aW9uLnRhcmdldCBhcyBIVE1MRWxlbWVudDtcblxuICAgIGlmIChNYXRoLnJvdW5kKGRhdGEuaW50ZXJzZWN0aW9uLmludGVyc2VjdGlvblJhdGlvKSA9PT0gMSkge1xuICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3N0YXJ0JyAmJiBkYXRhLmluZGV4ID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ2VuZCcgJiYgZGF0YS5pbmRleCA9PT0gYWxsSW50ZXJzZWN0aW9ucy5sZW5ndGggLSAxKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV4dEluZGV4ID0gZGlyZWN0aW9uID09PSAnc3RhcnQnID8gZGF0YS5pbmRleCAtIDEgOiBkYXRhLmluZGV4ICsgMTtcblxuICAgICAgZWxlbWVudFRvU2Nyb2xsVG8gPSBhbGxJbnRlcnNlY3Rpb25zW25leHRJbmRleF0/LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICB9XG5cbiAgICBpZiAoIWVsZW1lbnRUb1Njcm9sbFRvKSByZXR1cm47XG5cbiAgICB0aGlzLnNjcm9sbFRvRWxlbWVudCh7XG4gICAgICBlbGVtZW50OiBlbGVtZW50VG9TY3JvbGxUbyxcbiAgICAgIG9yaWdpbjogZGlyZWN0aW9uLFxuICAgIH0pO1xuICB9XG5cbiAgc2Nyb2xsVG9FbGVtZW50KG9wdGlvbnM6IE9taXQ8U2Nyb2xsVG9FbGVtZW50T3B0aW9ucywgJ2NvbnRhaW5lcic+KSB7XG4gICAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IHRoaXMuc2Nyb2xsYWJsZSgpPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgc2Nyb2xsVG9FbGVtZW50KHtcbiAgICAgIGNvbnRhaW5lcjogc2Nyb2xsRWxlbWVudCxcbiAgICAgIGRpcmVjdGlvbjogdGhpcy5kaXJlY3Rpb24oKSA9PT0gJ2hvcml6b250YWwnID8gJ2lubGluZScgOiAnYmxvY2snLFxuICAgICAgLi4uKHRoaXMuZGlyZWN0aW9uKCkgPT09ICdob3Jpem9udGFsJ1xuICAgICAgICA/IHsgc2Nyb2xsSW5saW5lTWFyZ2luOiB0aGlzLnNjcm9sbE1hcmdpbigpIH1cbiAgICAgICAgOiB7IHNjcm9sbEJsb2NrTWFyZ2luOiB0aGlzLnNjcm9sbE1hcmdpbigpIH0pLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIHNjcm9sbFRvRWxlbWVudEJ5SW5kZXgob3B0aW9uczogT21pdDxTY3JvbGxUb0VsZW1lbnRPcHRpb25zLCAnY29udGFpbmVyJz4gJiB7IGluZGV4OiBudW1iZXIgfSkge1xuICAgIGNvbnN0IGVsZW1lbnRzID0gdGhpcy5zY3JvbGxhYmxlQ2hpbGRyZW4oKTtcblxuICAgIGlmICghZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdObyBlbGVtZW50cyBmb3VuZCB0byBzY3JvbGwgdG8uIE1ha2Ugc3VyZSB0byBhcHBseSB0aGUgaXNFbGVtZW50IGRpcmVjdGl2ZSB0byB0aGUgZWxlbWVudHMgeW91IHdhbnQgdG8gc2Nyb2xsIHRvLicsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IHRoaXMuc2Nyb2xsYWJsZSgpPy5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50c1tvcHRpb25zLmluZGV4XTtcblxuICAgIHNjcm9sbFRvRWxlbWVudCh7XG4gICAgICBjb250YWluZXI6IHNjcm9sbEVsZW1lbnQsXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4uKHRoaXMuZGlyZWN0aW9uKCkgPT09ICdob3Jpem9udGFsJ1xuICAgICAgICA/IHsgc2Nyb2xsSW5saW5lTWFyZ2luOiB0aGlzLnNjcm9sbE1hcmdpbigpIH1cbiAgICAgICAgOiB7IHNjcm9sbEJsb2NrTWFyZ2luOiB0aGlzLnNjcm9sbE1hcmdpbigpIH0pLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzY3JvbGxUb0VsZW1lbnRWaWFOYXZpZ2F0aW9uKGVsZW1lbnRJbmRleDogbnVtYmVyLCBlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIHRoaXMubWFudWFsQWN0aXZlTmF2aWdhdGlvbkluZGV4LnNldChlbGVtZW50SW5kZXgpO1xuXG4gICAgdGhpcy5zY3JvbGxUb0VsZW1lbnQoe1xuICAgICAgZWxlbWVudCxcbiAgICB9KTtcblxuICAgIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSB0aGlzLnNjcm9sbGFibGUoKT8ubmF0aXZlRWxlbWVudDtcblxuICAgIGlmICghc2Nyb2xsRWxlbWVudCkgcmV0dXJuO1xuXG4gICAgZnJvbUV2ZW50KHNjcm9sbEVsZW1lbnQsICdzY3JvbGwnKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSg1MCksXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLm1hbnVhbEFjdGl2ZU5hdmlnYXRpb25JbmRleC5zZXQobnVsbCkpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldElzQ3Vyc29yRHJhZ2dpbmcoaXNEcmFnZ2luZzogYm9vbGVhbikge1xuICAgIHRoaXMuX2lzQ3Vyc29yRHJhZ2dpbmckLm5leHQoaXNEcmFnZ2luZyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2Nyb2xsVG9TdGFydERpcmVjdGlvbigpIHtcbiAgICBpZiAodGhpcy5zY3JvbGxNb2RlKCkgPT09ICdjb250YWluZXInKSB7XG4gICAgICB0aGlzLnNjcm9sbE9uZUNvbnRhaW5lclNpemUoJ3N0YXJ0Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2Nyb2xsT25lSXRlbVNpemUoJ3N0YXJ0Jyk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHNjcm9sbFRvRW5kRGlyZWN0aW9uKCkge1xuICAgIGlmICh0aGlzLnNjcm9sbE1vZGUoKSA9PT0gJ2NvbnRhaW5lcicpIHtcbiAgICAgIHRoaXMuc2Nyb2xsT25lQ29udGFpbmVyU2l6ZSgnZW5kJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2Nyb2xsT25lSXRlbVNpemUoJ2VuZCcpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2VuYWJsZVNuYXBwaW5nKCkge1xuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuc2Nyb2xsYWJsZUNvbnRlbnRJbnRlcnNlY3Rpb25zJCwgdGhpcy5faXNDdXJzb3JEcmFnZ2luZyRdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoWywgaXNEcmFnZ2luZ10pID0+ICFpc0RyYWdnaW5nKSxcbiAgICAgICAgbWFwKChbaW50ZXJzZWN0aW9uc10pID0+IGludGVyc2VjdGlvbnMpLFxuICAgICAgICBkZWJvdW5jZVRpbWUoMTUwKSxcbiAgICAgICAgdGFwKChhbGxJbnRlcnNlY3Rpb25zKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IHRoaXMuc2Nyb2xsYWJsZSgpPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgICAgaWYgKCFzY3JvbGxFbGVtZW50KSByZXR1cm47XG5cbiAgICAgICAgICBjb25zdCBpbnRlcnNlY3Rpb25zID0gZ2V0Rmlyc3RBbmRMYXN0UGFydGlhbEludGVyc2VjdGlvbihhbGxJbnRlcnNlY3Rpb25zKTtcblxuICAgICAgICAgIGlmICghaW50ZXJzZWN0aW9ucykgcmV0dXJuO1xuXG4gICAgICAgICAgY29uc3QgaXNGaXJzdEFuZExhc3RJbnRlcnNlY3Rpb25FcXVhbCA9IGludGVyc2VjdGlvbnMuZmlyc3QuaW50ZXJzZWN0aW9uID09PSBpbnRlcnNlY3Rpb25zLmxhc3QuaW50ZXJzZWN0aW9uO1xuICAgICAgICAgIGNvbnN0IHNjcm9sbGFibGVSZWN0ID0gc2Nyb2xsRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICAgIGlmIChpc0ZpcnN0QW5kTGFzdEludGVyc2VjdGlvbkVxdWFsKSB7XG4gICAgICAgICAgICBjb25zdCBpbnRlcnNlY3Rpb24gPSBpbnRlcnNlY3Rpb25zLmZpcnN0LmludGVyc2VjdGlvbi50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICBjb25zdCBpc1N0YXJ0T2ZFbGVtZW50VmlzaWJsZSA9XG4gICAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uKCkgPT09ICdob3Jpem9udGFsJ1xuICAgICAgICAgICAgICAgID8gaW50ZXJzZWN0aW9uLmxlZnQgPj0gc2Nyb2xsYWJsZVJlY3QubGVmdFxuICAgICAgICAgICAgICAgIDogaW50ZXJzZWN0aW9uLnRvcCA+PSBzY3JvbGxhYmxlUmVjdC50b3A7XG5cbiAgICAgICAgICAgIGNvbnN0IGlzRW5kT2ZFbGVtZW50VmlzaWJsZSA9XG4gICAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uKCkgPT09ICdob3Jpem9udGFsJ1xuICAgICAgICAgICAgICAgID8gaW50ZXJzZWN0aW9uLnJpZ2h0IDw9IHNjcm9sbGFibGVSZWN0LnJpZ2h0XG4gICAgICAgICAgICAgICAgOiBpbnRlcnNlY3Rpb24uYm90dG9tIDw9IHNjcm9sbGFibGVSZWN0LmJvdHRvbTtcblxuICAgICAgICAgICAgLy8gRG9uJ3Qgc25hcCBpZiBuZWl0aGVyIHRoZSBzdGFydCBub3IgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBlbGVtZW50IGlzIHZpc2libGUuXG4gICAgICAgICAgICAvLyBPdGhlcndpc2UgdGhpcyB3b3VsZCByZXN1bHQgaW4gcGFydHMgb2YgdGhlIGVsZW1lbnQgYmVpbmcgaW5hY2Nlc3NpYmxlLlxuICAgICAgICAgICAgaWYgKCFpc1N0YXJ0T2ZFbGVtZW50VmlzaWJsZSAmJiAhaXNFbmRPZkVsZW1lbnRWaXNpYmxlKSByZXR1cm47XG5cbiAgICAgICAgICAgIC8vIElmIHRoZSBzdGFydCBvZiB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIHdlIHNob3VsZCBzbmFwIHRvIHRoZSBzdGFydC5cbiAgICAgICAgICAgIGlmIChpc1N0YXJ0T2ZFbGVtZW50VmlzaWJsZSkge1xuICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvRWxlbWVudCh7XG4gICAgICAgICAgICAgICAgZWxlbWVudDogaW50ZXJzZWN0aW9ucy5maXJzdC5pbnRlcnNlY3Rpb24udGFyZ2V0IGFzIEhUTUxFbGVtZW50LFxuICAgICAgICAgICAgICAgIG9yaWdpbjogJ3N0YXJ0JyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgdGhlIGVuZCBvZiB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIHdlIHNob3VsZCBzbmFwIHRvIHRoZSBlbmQuXG4gICAgICAgICAgICBpZiAoaXNFbmRPZkVsZW1lbnRWaXNpYmxlKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9FbGVtZW50KHtcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBpbnRlcnNlY3Rpb25zLmxhc3QuaW50ZXJzZWN0aW9uLnRhcmdldCBhcyBIVE1MRWxlbWVudCxcbiAgICAgICAgICAgICAgICBvcmlnaW46ICdlbmQnLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAodGhpcy5kaXJlY3Rpb24oKSA9PT0gJ2hvcml6b250YWwnICYmXG4gICAgICAgICAgICAgIGludGVyc2VjdGlvbnMuYmlnZ2VzdC5pbnRlcnNlY3Rpb24uYm91bmRpbmdDbGllbnRSZWN0LndpZHRoID4gc2Nyb2xsYWJsZVJlY3Qud2lkdGgpIHx8XG4gICAgICAgICAgICAodGhpcy5kaXJlY3Rpb24oKSA9PT0gJ3ZlcnRpY2FsJyAmJlxuICAgICAgICAgICAgICBpbnRlcnNlY3Rpb25zLmJpZ2dlc3QuaW50ZXJzZWN0aW9uLmJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgPiBzY3JvbGxhYmxlUmVjdC5oZWlnaHQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBlbGVtZW50IGlzIGJpZ2dlciB0aGFuIHRoZSBzY3JvbGxhYmxlIGNvbnRhaW5lciB3ZSBzaG91bGQgc25hcCB0byB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgZWxlbWVudCBpZiB0aGUgc2Nyb2xsIGRpcmVjdGlvbiBpcyBmb3J3YXJkXG4gICAgICAgICAgICAvLyBhbmQgdG8gdGhlIGVuZCBvZiB0aGUgY3VycmVudCBlbGVtZW50IGlmIHRoZSBzY3JvbGwgZGlyZWN0aW9uIGlzIGJhY2t3YXJkcy5cbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbiA9IGludGVyc2VjdGlvbnMuYmlnZ2VzdC5pbmRleCA9PT0gaW50ZXJzZWN0aW9ucy5maXJzdC5pbmRleCA/ICdlbmQnIDogJ3N0YXJ0JztcblxuICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0VsZW1lbnQoe1xuICAgICAgICAgICAgICBlbGVtZW50OiBpbnRlcnNlY3Rpb25zLmJpZ2dlc3QuaW50ZXJzZWN0aW9uLnRhcmdldCBhcyBIVE1MRWxlbWVudCxcbiAgICAgICAgICAgICAgb3JpZ2luLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5vIHNwZWNpYWwgY2FzZS4gSnVzdCBzbmFwIHRvIHRoZSBiaWdnZXN0IGludGVyc2VjdGlvbi5cbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9FbGVtZW50KHtcbiAgICAgICAgICAgICAgZWxlbWVudDogaW50ZXJzZWN0aW9ucy5iaWdnZXN0LmludGVyc2VjdGlvbi50YXJnZXQgYXMgSFRNTEVsZW1lbnQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGlzYWJsZVNuYXBwaW5nJCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIF9kaXNhYmxlU25hcHBpbmcoKSB7XG4gICAgdGhpcy5fZGlzYWJsZVNuYXBwaW5nJC5uZXh0KCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJldC1zY3JvbGxhYmxlLXdyYXBwZXJcIj5cbiAgPGRpdlxuICAgICNzY3JvbGxhYmxlXG4gICAgW2F0dHIucm9sZV09XCJzY3JvbGxhYmxlUm9sZSgpID8/IHVuZGVmaW5lZFwiXG4gICAgW2V0Q3Vyc29yRHJhZ1Njcm9sbF09XCJjdXJzb3JEcmFnU2Nyb2xsKClcIlxuICAgIFthbGxvd2VkRGlyZWN0aW9uXT1cImRpcmVjdGlvbigpXCJcbiAgICAoY3Vyc29yRHJhZ1N0YXJ0KT1cInNldElzQ3Vyc29yRHJhZ2dpbmcodHJ1ZSlcIlxuICAgIChjdXJzb3JEcmFnRW5kKT1cInNldElzQ3Vyc29yRHJhZ2dpbmcoZmFsc2UpXCJcbiAgICBjbGFzcz1cImV0LXNjcm9sbGFibGUtY29udGFpbmVyLW91dGVyXCJcbiAgPlxuICAgIDxkaXYgI3Njcm9sbGFibGVDb250YWluZXIgW25nQ2xhc3NdPVwic2Nyb2xsYWJsZUNsYXNzKClcIiBjbGFzcz1cImV0LXNjcm9sbGFibGUtY29udGFpbmVyXCI+XG4gICAgICA8ZGl2ICNmaXJzdEVsZW1lbnQgY2xhc3M9XCJldC1zY3JvbGwtb2JzZXJ2ZXItZmlyc3QtZWxlbWVudFwiIGV0U2Nyb2xsYWJsZUlnbm9yZUNoaWxkPjwvZGl2PlxuICAgICAgPG5nLWNvbnRlbnQgLz5cbiAgICAgIDxkaXYgI2xhc3RFbGVtZW50IGNsYXNzPVwiZXQtc2Nyb2xsLW9ic2VydmVyLWxhc3QtZWxlbWVudFwiIGV0U2Nyb2xsYWJsZUlnbm9yZUNoaWxkPjwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICBAaWYgKHJlbmRlck1hc2tzKCkpIHtcbiAgICA8ZGl2IGNsYXNzPVwiZXQtc2Nyb2xsYWJsZS1tYXNrc1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImV0LXNjcm9sbGFibGUtbWFzayBldC1zY3JvbGxhYmxlLW1hc2stLXN0YXJ0XCI+PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZXQtc2Nyb2xsYWJsZS1tYXNrIGV0LXNjcm9sbGFibGUtbWFzay0tZW5kXCI+PC9kaXY+XG4gICAgPC9kaXY+XG4gIH1cblxuICBAaWYgKHJlbmRlckJ1dHRvbnMoKSkge1xuICAgIDxkaXYgY2xhc3M9XCJldC1zY3JvbGxhYmxlLWJ1dHRvbnNcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKGNsaWNrKT1cInNjcm9sbFRvU3RhcnREaXJlY3Rpb24oKVwiXG4gICAgICAgIGNsYXNzPVwiZXQtc2Nyb2xsYWJsZS1idXR0b24gZXQtc2Nyb2xsYWJsZS1idXR0b24tLXN0YXJ0XCJcbiAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgPlxuICAgICAgICA8ZXQtY2hldnJvbi1pY29uIC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKGNsaWNrKT1cInNjcm9sbFRvRW5kRGlyZWN0aW9uKClcIlxuICAgICAgICBjbGFzcz1cImV0LXNjcm9sbGFibGUtYnV0dG9uIGV0LXNjcm9sbGFibGUtYnV0dG9uLS1lbmRcIlxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICA+XG4gICAgICAgIDxldC1jaGV2cm9uLWljb24gLz5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cblxuQGlmIChyZW5kZXJOYXZpZ2F0aW9uKCkgJiYgc2Nyb2xsYWJsZU5hdmlnYXRpb24oKS5sZW5ndGggPiAxKSB7XG4gIDxkaXYgY2xhc3M9XCJldC1zY3JvbGxhYmxlLW5hdmlnYXRpb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICBAZm9yIChpdGVtIG9mIHNjcm9sbGFibGVOYXZpZ2F0aW9uKCk7IHRyYWNrIGk7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICA8YnV0dG9uXG4gICAgICAgIFtjbGFzcy5ldC1zY3JvbGxhYmxlLW5hdmlnYXRpb24taXRlbS0tYWN0aXZlXT1cIml0ZW0uaXNBY3RpdmVcIlxuICAgICAgICAoY2xpY2spPVwic2Nyb2xsVG9FbGVtZW50VmlhTmF2aWdhdGlvbihpLCBpdGVtLmVsZW1lbnQpXCJcbiAgICAgICAgY2xhc3M9XCJldC1zY3JvbGxhYmxlLW5hdmlnYXRpb24taXRlbVwiXG4gICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgPjwvYnV0dG9uPlxuICAgIH1cbiAgPC9kaXY+XG59XG4iXX0=
|
package/fesm2022/ethlete-cdk.mjs
CHANGED
|
@@ -9850,7 +9850,7 @@ class ScrollableComponent {
|
|
|
9850
9850
|
this._disableSnapping$.next();
|
|
9851
9851
|
}
|
|
9852
9852
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: ScrollableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
9853
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.0", type: ScrollableComponent, isStandalone: true, selector: "et-scrollable", inputs: { _itemSize: ["itemSize", "_itemSize"], _direction: ["direction", "_direction"], _scrollableRole: ["scrollableRole", "_scrollableRole"], _scrollableClass: ["scrollableClass", "_scrollableClass"], _renderNavigation: ["renderNavigation", "_renderNavigation", booleanAttribute], _renderMasks: ["renderMasks", "_renderMasks", booleanAttribute], _renderButtons: ["renderButtons", "_renderButtons", booleanAttribute], _renderScrollbars: ["renderScrollbars", "_renderScrollbars", booleanAttribute], _stickyButtons: ["stickyButtons", "_stickyButtons", booleanAttribute], _cursorDragScroll: ["cursorDragScroll", "_cursorDragScroll", booleanAttribute], _disableActiveElementScrolling: ["disableActiveElementScrolling", "_disableActiveElementScrolling", booleanAttribute], _scrollMode: ["scrollMode", "_scrollMode"], _snap: ["snap", "_snap", booleanAttribute], _scrollMargin: ["scrollMargin", "_scrollMargin", numberAttribute] }, outputs: { scrollStateChange: "scrollStateChange", intersectionChange: "intersectionChange" }, host: { classAttribute: "et-scrollable" }, queries: [{ propertyName: "_activeElementList", predicate: SCROLLABLE_IS_ACTIVE_CHILD_TOKEN, descendants: true }], viewQueries: [{ propertyName: "_scrollable", first: true, predicate: ["scrollable"], descendants: true, static: true }, { propertyName: "_scrollableContainer", first: true, predicate: ["scrollableContainer"], descendants: true, static: true }, { propertyName: "_firstElement", first: true, predicate: ["firstElement"], descendants: true, static: true }, { propertyName: "_lastElement", first: true, predicate: ["lastElement"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"et-scrollable-wrapper\">\n <div\n #scrollable\n [attr.role]=\"scrollableRole() ?? undefined\"\n [etCursorDragScroll]=\"cursorDragScroll()\"\n [allowedDirection]=\"direction()\"\n (cursorDragStart)=\"setIsCursorDragging(true)\"\n (cursorDragEnd)=\"setIsCursorDragging(false)\"\n class=\"et-scrollable-container-outer\"\n >\n <div #scrollableContainer [ngClass]=\"scrollableClass()\" class=\"et-scrollable-container\">\n <div #firstElement class=\"et-scroll-observer-first-element\" etScrollableIgnoreChild></div>\n <ng-content />\n <div #lastElement class=\"et-scroll-observer-last-element\" etScrollableIgnoreChild></div>\n </div>\n </div>\n\n @if (renderMasks()) {\n <div class=\"et-scrollable-masks\">\n <div class=\"et-scrollable-mask et-scrollable-mask--start\"></div>\n <div class=\"et-scrollable-mask et-scrollable-mask--end\"></div>\n </div>\n }\n\n @if (renderButtons()) {\n <div class=\"et-scrollable-buttons\">\n <button\n (click)=\"scrollToStartDirection()\"\n class=\"et-scrollable-button et-scrollable-button--start\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n <button\n (click)=\"scrollToEndDirection()\"\n class=\"et-scrollable-button et-scrollable-button--end\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n </div>\n }\n</div>\n\n@if (renderNavigation()) {\n <div class=\"et-scrollable-navigation\" aria-hidden=\"true\">\n @for (item of scrollableNavigation(); track i; let i = $index) {\n <button\n [class.et-scrollable-navigation-item--active]=\"item.isActive\"\n (click)=\"scrollToElementViaNavigation(i, item.element)\"\n class=\"et-scrollable-navigation-item\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n ></button>\n }\n </div>\n}\n", styles: [".et-scrollable{--mask: #121212 0, transparent 100%;--mask-size: 25px;--_auto-size: min-content;--_flow: column;display:block}.et-scrollable .et-scrollable-wrapper{display:grid;position:relative}.et-scrollable[item-size=same]{--_auto-size: 1fr}.et-scrollable[item-size=full]{--_auto-size: var(--actual-item-size)}.et-scrollable[render-scrollbars=false] .et-scrollable-container-outer{scrollbar-width:none}.et-scrollable[render-scrollbars=false] .et-scrollable-container-outer::-webkit-scrollbar{display:none}.et-scrollable[direction=horizontal] .et-scrollable-container-outer{overflow-x:auto;overflow-y:hidden}.et-scrollable[direction=horizontal] .et-scrollable-container{grid-auto-columns:var(--_auto-size)}.et-scrollable[direction=horizontal] .et-scrollable-mask,.et-scrollable[direction=horizontal] .et-scrollable-button{inline-size:var(--mask-size);block-size:100%}.et-scrollable[direction=horizontal] .et-scrollable-mask--start,.et-scrollable[direction=horizontal] .et-scrollable-button--start{inset-block-start:0;inset-inline:0 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--end,.et-scrollable[direction=horizontal] .et-scrollable-button--end{inset-block-start:0;inset-inline:calc(100% - 40px) 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--start{background:linear-gradient(to right,var(--mask))}.et-scrollable[direction=horizontal] .et-scrollable-mask--end{background:linear-gradient(to left,var(--mask));inset-inline:calc(100% - var(--mask-size)) 100%}.et-scrollable[direction=horizontal] .et-scrollable-button--start{inset-block-start:calc(50% - 20px);transform:rotate(-90deg)}.et-scrollable[direction=horizontal] .et-scrollable-button--end{inset-block-start:calc(50% - 20px);transform:rotate(90deg)}.et-scrollable[direction=horizontal] .et-scroll-observer-first-element,.et-scrollable[direction=horizontal] .et-scroll-observer-last-element{block-size:100%;inline-size:1px}.et-scrollable[direction=horizontal] .et-scroll-observer-first-element{inset-inline-start:1px}.et-scrollable[direction=horizontal] .et-scroll-observer-last-element{inset-inline-end:1px}.et-scrollable[direction=vertical]{--_flow: row}.et-scrollable[direction=vertical] .et-scrollable-container-outer{overflow-x:hidden;overflow-y:auto}.et-scrollable[direction=vertical] .et-scrollable-container{grid-auto-rows:var(--_auto-size)}.et-scrollable[direction=vertical] .et-scrollable-mask,.et-scrollable[direction=vertical] .et-scrollable-button{block-size:var(--mask-size);inline-size:100%}.et-scrollable[direction=vertical] .et-scrollable-mask--start,.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-block-start:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--end,.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-block-end:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--start{background:linear-gradient(to bottom,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-mask--end{background:linear-gradient(to top,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-inline-start:calc(50% - 20px);transform:rotate(0)}.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-inline-start:calc(50% - 20px);transform:rotate(180deg)}.et-scrollable[direction=vertical] .et-scroll-observer-first-element,.et-scrollable[direction=vertical] .et-scroll-observer-last-element{inline-size:100%;block-size:1px}.et-scrollable[direction=vertical] .et-scroll-observer-first-element{inset-block-start:1px}.et-scrollable[direction=vertical] .et-scroll-observer-last-element{inset-block-end:1px}.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-masks .et-scrollable-mask--start,.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{opacity:1}.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{pointer-events:all}.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-masks .et-scrollable-mask--end,.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{opacity:1}.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{pointer-events:all}.et-scrollable .et-scrollable-container-outer{overflow:auto;display:grid;position:relative;grid-row:1/1;grid-column:1/1}.et-scrollable .et-scroll-observer-first-element,.et-scrollable .et-scroll-observer-last-element{position:absolute;pointer-events:none}.et-scrollable .et-scrollable-container{display:grid;grid-auto-flow:var(--_flow);position:relative}.et-scrollable .et-scrollable-masks,.et-scrollable .et-scrollable-buttons{grid-row:1/1;grid-column:1/1;pointer-events:none}.et-scrollable .et-scrollable-masks .et-scrollable-mask,.et-scrollable .et-scrollable-masks .et-scrollable-button,.et-scrollable .et-scrollable-buttons .et-scrollable-mask,.et-scrollable .et-scrollable-buttons .et-scrollable-button{position:absolute;opacity:0}.et-scrollable.et-scrollable--can-scroll.et-scrollable--enable-overlay-animations .et-scrollable-mask,.et-scrollable.et-scrollable--can-scroll.et-scrollable--enable-overlay-animations .et-scrollable-button{transition:opacity .3s var(--ease-5)}.et-scrollable .et-scrollable-buttons .et-scrollable-button{background:transparent;border:none;padding:12px;inline-size:40px;block-size:40px;border-radius:4px;cursor:pointer}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-chevron-icon{pointer-events:none}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--start{inset-inline:0 0}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--end{inset-inline:calc(100% - 40px) 0}.et-scrollable[sticky-buttons=true]{--_sticky-margin: 10%}.et-scrollable[sticky-buttons=true] .et-scrollable-button{position:sticky}.et-scrollable[sticky-buttons=true][direction=horizontal] .et-scrollable-buttons{margin-block:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons{margin-inline:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons .et-scrollable-button--end{inset-block-start:100%}.et-scrollable .et-scrollable-navigation{display:flex;justify-content:center;gap:10px;margin-block-start:10px}.et-scrollable .et-scrollable-navigation .et-scrollable-navigation-item{all:unset;inline-size:10px;block-size:10px;display:block;background-color:#4b4b4b;border-radius:50%;cursor:pointer}.et-scrollable .et-scrollable-navigation .et-scrollable-navigation-item.et-scrollable-navigation-item--active{background-color:#c6c6c6}\n"], dependencies: [{ kind: "directive", type: CursorDragScrollDirective, selector: "[etCursorDragScroll]", inputs: ["etCursorDragScroll", "allowedDirection"], outputs: ["cursorDragStart", "cursorDragMove", "cursorDragEnd"], exportAs: ["etCursorDragScroll"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ChevronIconComponent, selector: "et-chevron-icon" }, { kind: "directive", type: ScrollableIgnoreChildDirective, selector: "[etScrollableIgnoreChild]", inputs: ["etScrollableIgnoreChild"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
9853
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.0", type: ScrollableComponent, isStandalone: true, selector: "et-scrollable", inputs: { _itemSize: ["itemSize", "_itemSize"], _direction: ["direction", "_direction"], _scrollableRole: ["scrollableRole", "_scrollableRole"], _scrollableClass: ["scrollableClass", "_scrollableClass"], _renderNavigation: ["renderNavigation", "_renderNavigation", booleanAttribute], _renderMasks: ["renderMasks", "_renderMasks", booleanAttribute], _renderButtons: ["renderButtons", "_renderButtons", booleanAttribute], _renderScrollbars: ["renderScrollbars", "_renderScrollbars", booleanAttribute], _stickyButtons: ["stickyButtons", "_stickyButtons", booleanAttribute], _cursorDragScroll: ["cursorDragScroll", "_cursorDragScroll", booleanAttribute], _disableActiveElementScrolling: ["disableActiveElementScrolling", "_disableActiveElementScrolling", booleanAttribute], _scrollMode: ["scrollMode", "_scrollMode"], _snap: ["snap", "_snap", booleanAttribute], _scrollMargin: ["scrollMargin", "_scrollMargin", numberAttribute] }, outputs: { scrollStateChange: "scrollStateChange", intersectionChange: "intersectionChange" }, host: { classAttribute: "et-scrollable" }, queries: [{ propertyName: "_activeElementList", predicate: SCROLLABLE_IS_ACTIVE_CHILD_TOKEN, descendants: true }], viewQueries: [{ propertyName: "_scrollable", first: true, predicate: ["scrollable"], descendants: true, static: true }, { propertyName: "_scrollableContainer", first: true, predicate: ["scrollableContainer"], descendants: true, static: true }, { propertyName: "_firstElement", first: true, predicate: ["firstElement"], descendants: true, static: true }, { propertyName: "_lastElement", first: true, predicate: ["lastElement"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"et-scrollable-wrapper\">\n <div\n #scrollable\n [attr.role]=\"scrollableRole() ?? undefined\"\n [etCursorDragScroll]=\"cursorDragScroll()\"\n [allowedDirection]=\"direction()\"\n (cursorDragStart)=\"setIsCursorDragging(true)\"\n (cursorDragEnd)=\"setIsCursorDragging(false)\"\n class=\"et-scrollable-container-outer\"\n >\n <div #scrollableContainer [ngClass]=\"scrollableClass()\" class=\"et-scrollable-container\">\n <div #firstElement class=\"et-scroll-observer-first-element\" etScrollableIgnoreChild></div>\n <ng-content />\n <div #lastElement class=\"et-scroll-observer-last-element\" etScrollableIgnoreChild></div>\n </div>\n </div>\n\n @if (renderMasks()) {\n <div class=\"et-scrollable-masks\">\n <div class=\"et-scrollable-mask et-scrollable-mask--start\"></div>\n <div class=\"et-scrollable-mask et-scrollable-mask--end\"></div>\n </div>\n }\n\n @if (renderButtons()) {\n <div class=\"et-scrollable-buttons\">\n <button\n (click)=\"scrollToStartDirection()\"\n class=\"et-scrollable-button et-scrollable-button--start\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n <button\n (click)=\"scrollToEndDirection()\"\n class=\"et-scrollable-button et-scrollable-button--end\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n </div>\n }\n</div>\n\n@if (renderNavigation() && scrollableNavigation().length > 1) {\n <div class=\"et-scrollable-navigation\" aria-hidden=\"true\">\n @for (item of scrollableNavigation(); track i; let i = $index) {\n <button\n [class.et-scrollable-navigation-item--active]=\"item.isActive\"\n (click)=\"scrollToElementViaNavigation(i, item.element)\"\n class=\"et-scrollable-navigation-item\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n ></button>\n }\n </div>\n}\n", styles: [".et-scrollable{--mask: #121212 0, transparent 100%;--mask-size: 25px;--_auto-size: min-content;--_flow: column;display:block}.et-scrollable .et-scrollable-wrapper{display:grid;position:relative}.et-scrollable[item-size=same]{--_auto-size: 1fr}.et-scrollable[item-size=full]{--_auto-size: var(--actual-item-size)}.et-scrollable[render-scrollbars=false] .et-scrollable-container-outer{scrollbar-width:none}.et-scrollable[render-scrollbars=false] .et-scrollable-container-outer::-webkit-scrollbar{display:none}.et-scrollable[direction=horizontal] .et-scrollable-container-outer{overflow-x:auto;overflow-y:hidden}.et-scrollable[direction=horizontal] .et-scrollable-container{grid-auto-columns:var(--_auto-size)}.et-scrollable[direction=horizontal] .et-scrollable-mask,.et-scrollable[direction=horizontal] .et-scrollable-button{inline-size:var(--mask-size);block-size:100%}.et-scrollable[direction=horizontal] .et-scrollable-mask--start,.et-scrollable[direction=horizontal] .et-scrollable-button--start{inset-block-start:0;inset-inline:0 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--end,.et-scrollable[direction=horizontal] .et-scrollable-button--end{inset-block-start:0;inset-inline:calc(100% - 40px) 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--start{background:linear-gradient(to right,var(--mask))}.et-scrollable[direction=horizontal] .et-scrollable-mask--end{background:linear-gradient(to left,var(--mask));inset-inline:calc(100% - var(--mask-size)) 100%}.et-scrollable[direction=horizontal] .et-scrollable-button--start{inset-block-start:calc(50% - 20px);transform:rotate(-90deg)}.et-scrollable[direction=horizontal] .et-scrollable-button--end{inset-block-start:calc(50% - 20px);transform:rotate(90deg)}.et-scrollable[direction=horizontal] .et-scroll-observer-first-element,.et-scrollable[direction=horizontal] .et-scroll-observer-last-element{block-size:100%;inline-size:1px}.et-scrollable[direction=horizontal] .et-scroll-observer-first-element{inset-inline-start:1px}.et-scrollable[direction=horizontal] .et-scroll-observer-last-element{inset-inline-end:1px}.et-scrollable[direction=vertical]{--_flow: row}.et-scrollable[direction=vertical] .et-scrollable-container-outer{overflow-x:hidden;overflow-y:auto}.et-scrollable[direction=vertical] .et-scrollable-container{grid-auto-rows:var(--_auto-size)}.et-scrollable[direction=vertical] .et-scrollable-mask,.et-scrollable[direction=vertical] .et-scrollable-button{block-size:var(--mask-size);inline-size:100%}.et-scrollable[direction=vertical] .et-scrollable-mask--start,.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-block-start:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--end,.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-block-end:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--start{background:linear-gradient(to bottom,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-mask--end{background:linear-gradient(to top,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-inline-start:calc(50% - 20px);transform:rotate(0)}.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-inline-start:calc(50% - 20px);transform:rotate(180deg)}.et-scrollable[direction=vertical] .et-scroll-observer-first-element,.et-scrollable[direction=vertical] .et-scroll-observer-last-element{inline-size:100%;block-size:1px}.et-scrollable[direction=vertical] .et-scroll-observer-first-element{inset-block-start:1px}.et-scrollable[direction=vertical] .et-scroll-observer-last-element{inset-block-end:1px}.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-masks .et-scrollable-mask--start,.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{opacity:1}.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{pointer-events:all}.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-masks .et-scrollable-mask--end,.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{opacity:1}.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{pointer-events:all}.et-scrollable .et-scrollable-container-outer{overflow:auto;display:grid;position:relative;grid-row:1/1;grid-column:1/1}.et-scrollable .et-scroll-observer-first-element,.et-scrollable .et-scroll-observer-last-element{position:absolute;pointer-events:none}.et-scrollable .et-scrollable-container{display:grid;grid-auto-flow:var(--_flow);position:relative}.et-scrollable .et-scrollable-masks,.et-scrollable .et-scrollable-buttons{grid-row:1/1;grid-column:1/1;pointer-events:none}.et-scrollable .et-scrollable-masks .et-scrollable-mask,.et-scrollable .et-scrollable-masks .et-scrollable-button,.et-scrollable .et-scrollable-buttons .et-scrollable-mask,.et-scrollable .et-scrollable-buttons .et-scrollable-button{position:absolute;opacity:0}.et-scrollable.et-scrollable--can-scroll.et-scrollable--enable-overlay-animations .et-scrollable-mask,.et-scrollable.et-scrollable--can-scroll.et-scrollable--enable-overlay-animations .et-scrollable-button{transition:opacity .3s var(--ease-5)}.et-scrollable .et-scrollable-buttons .et-scrollable-button{background:transparent;border:none;padding:12px;inline-size:40px;block-size:40px;border-radius:4px;cursor:pointer}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-chevron-icon{pointer-events:none}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--start{inset-inline:0 0}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--end{inset-inline:calc(100% - 40px) 0}.et-scrollable[sticky-buttons=true]{--_sticky-margin: 10%}.et-scrollable[sticky-buttons=true] .et-scrollable-button{position:sticky}.et-scrollable[sticky-buttons=true][direction=horizontal] .et-scrollable-buttons{margin-block:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons{margin-inline:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons .et-scrollable-button--end{inset-block-start:100%}.et-scrollable .et-scrollable-navigation{display:flex;justify-content:center;gap:10px;margin-block-start:10px}.et-scrollable .et-scrollable-navigation .et-scrollable-navigation-item{all:unset;inline-size:10px;block-size:10px;display:block;background-color:#4b4b4b;border-radius:50%;cursor:pointer}.et-scrollable .et-scrollable-navigation .et-scrollable-navigation-item.et-scrollable-navigation-item--active{background-color:#c6c6c6}\n"], dependencies: [{ kind: "directive", type: CursorDragScrollDirective, selector: "[etCursorDragScroll]", inputs: ["etCursorDragScroll", "allowedDirection"], outputs: ["cursorDragStart", "cursorDragMove", "cursorDragEnd"], exportAs: ["etCursorDragScroll"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ChevronIconComponent, selector: "et-chevron-icon" }, { kind: "directive", type: ScrollableIgnoreChildDirective, selector: "[etScrollableIgnoreChild]", inputs: ["etScrollableIgnoreChild"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
9854
9854
|
}
|
|
9855
9855
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: ScrollableComponent, decorators: [{
|
|
9856
9856
|
type: Component,
|
|
@@ -9864,7 +9864,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImpor
|
|
|
9864
9864
|
ScrollableIgnoreChildDirective,
|
|
9865
9865
|
], host: {
|
|
9866
9866
|
class: 'et-scrollable',
|
|
9867
|
-
}, template: "<div class=\"et-scrollable-wrapper\">\n <div\n #scrollable\n [attr.role]=\"scrollableRole() ?? undefined\"\n [etCursorDragScroll]=\"cursorDragScroll()\"\n [allowedDirection]=\"direction()\"\n (cursorDragStart)=\"setIsCursorDragging(true)\"\n (cursorDragEnd)=\"setIsCursorDragging(false)\"\n class=\"et-scrollable-container-outer\"\n >\n <div #scrollableContainer [ngClass]=\"scrollableClass()\" class=\"et-scrollable-container\">\n <div #firstElement class=\"et-scroll-observer-first-element\" etScrollableIgnoreChild></div>\n <ng-content />\n <div #lastElement class=\"et-scroll-observer-last-element\" etScrollableIgnoreChild></div>\n </div>\n </div>\n\n @if (renderMasks()) {\n <div class=\"et-scrollable-masks\">\n <div class=\"et-scrollable-mask et-scrollable-mask--start\"></div>\n <div class=\"et-scrollable-mask et-scrollable-mask--end\"></div>\n </div>\n }\n\n @if (renderButtons()) {\n <div class=\"et-scrollable-buttons\">\n <button\n (click)=\"scrollToStartDirection()\"\n class=\"et-scrollable-button et-scrollable-button--start\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n <button\n (click)=\"scrollToEndDirection()\"\n class=\"et-scrollable-button et-scrollable-button--end\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n </div>\n }\n</div>\n\n@if (renderNavigation()) {\n <div class=\"et-scrollable-navigation\" aria-hidden=\"true\">\n @for (item of scrollableNavigation(); track i; let i = $index) {\n <button\n [class.et-scrollable-navigation-item--active]=\"item.isActive\"\n (click)=\"scrollToElementViaNavigation(i, item.element)\"\n class=\"et-scrollable-navigation-item\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n ></button>\n }\n </div>\n}\n", styles: [".et-scrollable{--mask: #121212 0, transparent 100%;--mask-size: 25px;--_auto-size: min-content;--_flow: column;display:block}.et-scrollable .et-scrollable-wrapper{display:grid;position:relative}.et-scrollable[item-size=same]{--_auto-size: 1fr}.et-scrollable[item-size=full]{--_auto-size: var(--actual-item-size)}.et-scrollable[render-scrollbars=false] .et-scrollable-container-outer{scrollbar-width:none}.et-scrollable[render-scrollbars=false] .et-scrollable-container-outer::-webkit-scrollbar{display:none}.et-scrollable[direction=horizontal] .et-scrollable-container-outer{overflow-x:auto;overflow-y:hidden}.et-scrollable[direction=horizontal] .et-scrollable-container{grid-auto-columns:var(--_auto-size)}.et-scrollable[direction=horizontal] .et-scrollable-mask,.et-scrollable[direction=horizontal] .et-scrollable-button{inline-size:var(--mask-size);block-size:100%}.et-scrollable[direction=horizontal] .et-scrollable-mask--start,.et-scrollable[direction=horizontal] .et-scrollable-button--start{inset-block-start:0;inset-inline:0 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--end,.et-scrollable[direction=horizontal] .et-scrollable-button--end{inset-block-start:0;inset-inline:calc(100% - 40px) 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--start{background:linear-gradient(to right,var(--mask))}.et-scrollable[direction=horizontal] .et-scrollable-mask--end{background:linear-gradient(to left,var(--mask));inset-inline:calc(100% - var(--mask-size)) 100%}.et-scrollable[direction=horizontal] .et-scrollable-button--start{inset-block-start:calc(50% - 20px);transform:rotate(-90deg)}.et-scrollable[direction=horizontal] .et-scrollable-button--end{inset-block-start:calc(50% - 20px);transform:rotate(90deg)}.et-scrollable[direction=horizontal] .et-scroll-observer-first-element,.et-scrollable[direction=horizontal] .et-scroll-observer-last-element{block-size:100%;inline-size:1px}.et-scrollable[direction=horizontal] .et-scroll-observer-first-element{inset-inline-start:1px}.et-scrollable[direction=horizontal] .et-scroll-observer-last-element{inset-inline-end:1px}.et-scrollable[direction=vertical]{--_flow: row}.et-scrollable[direction=vertical] .et-scrollable-container-outer{overflow-x:hidden;overflow-y:auto}.et-scrollable[direction=vertical] .et-scrollable-container{grid-auto-rows:var(--_auto-size)}.et-scrollable[direction=vertical] .et-scrollable-mask,.et-scrollable[direction=vertical] .et-scrollable-button{block-size:var(--mask-size);inline-size:100%}.et-scrollable[direction=vertical] .et-scrollable-mask--start,.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-block-start:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--end,.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-block-end:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--start{background:linear-gradient(to bottom,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-mask--end{background:linear-gradient(to top,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-inline-start:calc(50% - 20px);transform:rotate(0)}.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-inline-start:calc(50% - 20px);transform:rotate(180deg)}.et-scrollable[direction=vertical] .et-scroll-observer-first-element,.et-scrollable[direction=vertical] .et-scroll-observer-last-element{inline-size:100%;block-size:1px}.et-scrollable[direction=vertical] .et-scroll-observer-first-element{inset-block-start:1px}.et-scrollable[direction=vertical] .et-scroll-observer-last-element{inset-block-end:1px}.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-masks .et-scrollable-mask--start,.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{opacity:1}.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{pointer-events:all}.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-masks .et-scrollable-mask--end,.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{opacity:1}.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{pointer-events:all}.et-scrollable .et-scrollable-container-outer{overflow:auto;display:grid;position:relative;grid-row:1/1;grid-column:1/1}.et-scrollable .et-scroll-observer-first-element,.et-scrollable .et-scroll-observer-last-element{position:absolute;pointer-events:none}.et-scrollable .et-scrollable-container{display:grid;grid-auto-flow:var(--_flow);position:relative}.et-scrollable .et-scrollable-masks,.et-scrollable .et-scrollable-buttons{grid-row:1/1;grid-column:1/1;pointer-events:none}.et-scrollable .et-scrollable-masks .et-scrollable-mask,.et-scrollable .et-scrollable-masks .et-scrollable-button,.et-scrollable .et-scrollable-buttons .et-scrollable-mask,.et-scrollable .et-scrollable-buttons .et-scrollable-button{position:absolute;opacity:0}.et-scrollable.et-scrollable--can-scroll.et-scrollable--enable-overlay-animations .et-scrollable-mask,.et-scrollable.et-scrollable--can-scroll.et-scrollable--enable-overlay-animations .et-scrollable-button{transition:opacity .3s var(--ease-5)}.et-scrollable .et-scrollable-buttons .et-scrollable-button{background:transparent;border:none;padding:12px;inline-size:40px;block-size:40px;border-radius:4px;cursor:pointer}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-chevron-icon{pointer-events:none}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--start{inset-inline:0 0}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--end{inset-inline:calc(100% - 40px) 0}.et-scrollable[sticky-buttons=true]{--_sticky-margin: 10%}.et-scrollable[sticky-buttons=true] .et-scrollable-button{position:sticky}.et-scrollable[sticky-buttons=true][direction=horizontal] .et-scrollable-buttons{margin-block:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons{margin-inline:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons .et-scrollable-button--end{inset-block-start:100%}.et-scrollable .et-scrollable-navigation{display:flex;justify-content:center;gap:10px;margin-block-start:10px}.et-scrollable .et-scrollable-navigation .et-scrollable-navigation-item{all:unset;inline-size:10px;block-size:10px;display:block;background-color:#4b4b4b;border-radius:50%;cursor:pointer}.et-scrollable .et-scrollable-navigation .et-scrollable-navigation-item.et-scrollable-navigation-item--active{background-color:#c6c6c6}\n"] }]
|
|
9867
|
+
}, template: "<div class=\"et-scrollable-wrapper\">\n <div\n #scrollable\n [attr.role]=\"scrollableRole() ?? undefined\"\n [etCursorDragScroll]=\"cursorDragScroll()\"\n [allowedDirection]=\"direction()\"\n (cursorDragStart)=\"setIsCursorDragging(true)\"\n (cursorDragEnd)=\"setIsCursorDragging(false)\"\n class=\"et-scrollable-container-outer\"\n >\n <div #scrollableContainer [ngClass]=\"scrollableClass()\" class=\"et-scrollable-container\">\n <div #firstElement class=\"et-scroll-observer-first-element\" etScrollableIgnoreChild></div>\n <ng-content />\n <div #lastElement class=\"et-scroll-observer-last-element\" etScrollableIgnoreChild></div>\n </div>\n </div>\n\n @if (renderMasks()) {\n <div class=\"et-scrollable-masks\">\n <div class=\"et-scrollable-mask et-scrollable-mask--start\"></div>\n <div class=\"et-scrollable-mask et-scrollable-mask--end\"></div>\n </div>\n }\n\n @if (renderButtons()) {\n <div class=\"et-scrollable-buttons\">\n <button\n (click)=\"scrollToStartDirection()\"\n class=\"et-scrollable-button et-scrollable-button--start\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n <button\n (click)=\"scrollToEndDirection()\"\n class=\"et-scrollable-button et-scrollable-button--end\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n </div>\n }\n</div>\n\n@if (renderNavigation() && scrollableNavigation().length > 1) {\n <div class=\"et-scrollable-navigation\" aria-hidden=\"true\">\n @for (item of scrollableNavigation(); track i; let i = $index) {\n <button\n [class.et-scrollable-navigation-item--active]=\"item.isActive\"\n (click)=\"scrollToElementViaNavigation(i, item.element)\"\n class=\"et-scrollable-navigation-item\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n ></button>\n }\n </div>\n}\n", styles: [".et-scrollable{--mask: #121212 0, transparent 100%;--mask-size: 25px;--_auto-size: min-content;--_flow: column;display:block}.et-scrollable .et-scrollable-wrapper{display:grid;position:relative}.et-scrollable[item-size=same]{--_auto-size: 1fr}.et-scrollable[item-size=full]{--_auto-size: var(--actual-item-size)}.et-scrollable[render-scrollbars=false] .et-scrollable-container-outer{scrollbar-width:none}.et-scrollable[render-scrollbars=false] .et-scrollable-container-outer::-webkit-scrollbar{display:none}.et-scrollable[direction=horizontal] .et-scrollable-container-outer{overflow-x:auto;overflow-y:hidden}.et-scrollable[direction=horizontal] .et-scrollable-container{grid-auto-columns:var(--_auto-size)}.et-scrollable[direction=horizontal] .et-scrollable-mask,.et-scrollable[direction=horizontal] .et-scrollable-button{inline-size:var(--mask-size);block-size:100%}.et-scrollable[direction=horizontal] .et-scrollable-mask--start,.et-scrollable[direction=horizontal] .et-scrollable-button--start{inset-block-start:0;inset-inline:0 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--end,.et-scrollable[direction=horizontal] .et-scrollable-button--end{inset-block-start:0;inset-inline:calc(100% - 40px) 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--start{background:linear-gradient(to right,var(--mask))}.et-scrollable[direction=horizontal] .et-scrollable-mask--end{background:linear-gradient(to left,var(--mask));inset-inline:calc(100% - var(--mask-size)) 100%}.et-scrollable[direction=horizontal] .et-scrollable-button--start{inset-block-start:calc(50% - 20px);transform:rotate(-90deg)}.et-scrollable[direction=horizontal] .et-scrollable-button--end{inset-block-start:calc(50% - 20px);transform:rotate(90deg)}.et-scrollable[direction=horizontal] .et-scroll-observer-first-element,.et-scrollable[direction=horizontal] .et-scroll-observer-last-element{block-size:100%;inline-size:1px}.et-scrollable[direction=horizontal] .et-scroll-observer-first-element{inset-inline-start:1px}.et-scrollable[direction=horizontal] .et-scroll-observer-last-element{inset-inline-end:1px}.et-scrollable[direction=vertical]{--_flow: row}.et-scrollable[direction=vertical] .et-scrollable-container-outer{overflow-x:hidden;overflow-y:auto}.et-scrollable[direction=vertical] .et-scrollable-container{grid-auto-rows:var(--_auto-size)}.et-scrollable[direction=vertical] .et-scrollable-mask,.et-scrollable[direction=vertical] .et-scrollable-button{block-size:var(--mask-size);inline-size:100%}.et-scrollable[direction=vertical] .et-scrollable-mask--start,.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-block-start:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--end,.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-block-end:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--start{background:linear-gradient(to bottom,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-mask--end{background:linear-gradient(to top,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-inline-start:calc(50% - 20px);transform:rotate(0)}.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-inline-start:calc(50% - 20px);transform:rotate(180deg)}.et-scrollable[direction=vertical] .et-scroll-observer-first-element,.et-scrollable[direction=vertical] .et-scroll-observer-last-element{inline-size:100%;block-size:1px}.et-scrollable[direction=vertical] .et-scroll-observer-first-element{inset-block-start:1px}.et-scrollable[direction=vertical] .et-scroll-observer-last-element{inset-block-end:1px}.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-masks .et-scrollable-mask--start,.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{opacity:1}.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{pointer-events:all}.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-masks .et-scrollable-mask--end,.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{opacity:1}.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{pointer-events:all}.et-scrollable .et-scrollable-container-outer{overflow:auto;display:grid;position:relative;grid-row:1/1;grid-column:1/1}.et-scrollable .et-scroll-observer-first-element,.et-scrollable .et-scroll-observer-last-element{position:absolute;pointer-events:none}.et-scrollable .et-scrollable-container{display:grid;grid-auto-flow:var(--_flow);position:relative}.et-scrollable .et-scrollable-masks,.et-scrollable .et-scrollable-buttons{grid-row:1/1;grid-column:1/1;pointer-events:none}.et-scrollable .et-scrollable-masks .et-scrollable-mask,.et-scrollable .et-scrollable-masks .et-scrollable-button,.et-scrollable .et-scrollable-buttons .et-scrollable-mask,.et-scrollable .et-scrollable-buttons .et-scrollable-button{position:absolute;opacity:0}.et-scrollable.et-scrollable--can-scroll.et-scrollable--enable-overlay-animations .et-scrollable-mask,.et-scrollable.et-scrollable--can-scroll.et-scrollable--enable-overlay-animations .et-scrollable-button{transition:opacity .3s var(--ease-5)}.et-scrollable .et-scrollable-buttons .et-scrollable-button{background:transparent;border:none;padding:12px;inline-size:40px;block-size:40px;border-radius:4px;cursor:pointer}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-chevron-icon{pointer-events:none}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--start{inset-inline:0 0}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--end{inset-inline:calc(100% - 40px) 0}.et-scrollable[sticky-buttons=true]{--_sticky-margin: 10%}.et-scrollable[sticky-buttons=true] .et-scrollable-button{position:sticky}.et-scrollable[sticky-buttons=true][direction=horizontal] .et-scrollable-buttons{margin-block:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons{margin-inline:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons .et-scrollable-button--end{inset-block-start:100%}.et-scrollable .et-scrollable-navigation{display:flex;justify-content:center;gap:10px;margin-block-start:10px}.et-scrollable .et-scrollable-navigation .et-scrollable-navigation-item{all:unset;inline-size:10px;block-size:10px;display:block;background-color:#4b4b4b;border-radius:50%;cursor:pointer}.et-scrollable .et-scrollable-navigation .et-scrollable-navigation-item.et-scrollable-navigation-item--active{background-color:#c6c6c6}\n"] }]
|
|
9868
9868
|
}], ctorParameters: () => [], propDecorators: { _itemSize: [{
|
|
9869
9869
|
type: Input,
|
|
9870
9870
|
args: [{ alias: 'itemSize' }]
|