@ethlete/query 5.0.5 → 5.1.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/esm2022/lib/devtools/components/query-devtools/query-devtools.component.mjs +7 -7
- package/esm2022/lib/devtools/pipes/query-short-name.pipe.mjs +4 -4
- package/esm2022/lib/directives/infinity-query-trigger.directive.mjs +4 -4
- package/esm2022/lib/directives/infinity-query.directive.mjs +4 -4
- package/esm2022/lib/directives/query.directive.mjs +4 -4
- package/esm2022/lib/query/query.types.mjs +1 -1
- package/esm2022/lib/query-creator/query-creator.types.mjs +1 -1
- package/esm2022/lib/utils/data.utils.mjs +1 -1
- package/fesm2022/ethlete-query.mjs +20 -20
- package/fesm2022/ethlete-query.mjs.map +1 -1
- package/lib/utils/data.utils.d.ts +11 -5
- package/package.json +5 -5
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AsyncPipe, JsonPipe, NgClass
|
|
1
|
+
import { AsyncPipe, JsonPipe, NgClass } from '@angular/common';
|
|
2
2
|
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ViewEncapsulation, computed, effect, inject, signal, untracked, } from '@angular/core';
|
|
3
3
|
import { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';
|
|
4
4
|
import { FormControl, ReactiveFormsModule } from '@angular/forms';
|
|
@@ -211,13 +211,13 @@ export class QueryDevtoolsComponent {
|
|
|
211
211
|
clearQueryHistory() {
|
|
212
212
|
this.queryHistory$.next([]);
|
|
213
213
|
}
|
|
214
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
215
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: QueryDevtoolsComponent, isStandalone: true, selector: "et-query-devtools", host: { classAttribute: "et-query-devtools" }, ngImport: i0, template: "<button *ngIf=\"!isOpen()\" (click)=\"toggleOpen()\" class=\"et-query-devtools-open-btn et-qd-chip\">Open Devtools</button>\n\n<div\n *ngIf=\"isOpen()\"\n [class.et-query-devtools-container--transparent]=\"isTranslucent()\"\n class=\"et-query-devtools-container et-query-devtools-container--snap-{{ snapLayout() }}\"\n>\n <header class=\"et-qd-header\">\n <h3 class=\"et-qd-header__title\">Query Devtools</h3>\n\n <div class=\"et-qd-header__select\">\n <label for=\"et-query-client-instance\">Client instance</label>\n <select [formControl]=\"selectedClientIdCtrl\" id=\"et-query-client-instance\">\n <option *ngFor=\"let clientConfig of queryClientConfigs; index as i; trackBy: trackByClient\" [value]=\"i\">\n {{ clientConfig.displayName ?? clientConfig.client.config.baseRoute }}\n </option>\n </select>\n </div>\n\n <button (click)=\"toggleOpen()\" class=\"et-qd-btn et-qd-btn-secondary\">Close</button>\n </header>\n\n <div class=\"et-qd-sub-header\">\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !isTranslucent() }\"\n (click)=\"toggleTranslucent()\"\n class=\"et-qd-chip et-qd-translucent-clickable\"\n >\n Translucent\n </button>\n <div class=\"et-qd-sub-header__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'full' }\"\n (click)=\"selectSnapLayout('full')\"\n class=\"et-qd-chip\"\n >\n Fullscreen\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'top' }\"\n (click)=\"selectSnapLayout('top')\"\n class=\"et-qd-chip\"\n >\n Top\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'bottom' }\"\n (click)=\"selectSnapLayout('bottom')\"\n class=\"et-qd-chip\"\n >\n Bottom\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'left' }\"\n (click)=\"selectSnapLayout('left')\"\n class=\"et-qd-chip\"\n >\n Left\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'right' }\"\n (click)=\"selectSnapLayout('right')\"\n class=\"et-qd-chip\"\n >\n Right\n </button>\n </div>\n\n <div *ngIf=\"selectedClientConfig() as cfg\" class=\"et-qd-client\">\n <p class=\"et-qd-client__title\">{{ cfg.displayName ?? cfg.client.config.baseRoute }}</p>\n\n <div class=\"et-qd-client__actions\">\n <button (click)=\"cfg.client._store.refreshQueriesInUse()\" class=\"et-qd-chip\">Refresh all</button>\n <button (click)=\"cfg.client._store.refreshQueriesInUse({ ignoreCacheValidity: true })\" class=\"et-qd-chip\">\n Refresh all (ignore caches)\n </button>\n <button\n (click)=\"cfg.client._store.refreshQueriesInUse({ ignoreCacheValidity: true, purgeUnused: true })\"\n class=\"et-qd-chip\"\n >\n Refresh all (ignore caches & purge unused)\n </button>\n </div>\n </div>\n\n <div *ngIf=\"selectedClientConfig() as cfg\" class=\"et-qd-queries\">\n <p class=\"et-qd-queries__title\">Query browser</p>\n <div class=\"et-qd-queries__actions\">\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': queryListMode() !== 'live' }\"\n (click)=\"selectQueryListMode('live')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Live ({{ queries()?.length ?? 0 }})\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': queryListMode() !== 'history' }\"\n (click)=\"selectQueryListMode('history')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n History ({{ (queryHistory$ | async)?.length ?? 0 }}/50)\n </button>\n <ng-container *ngIf=\"queryListMode() === 'history'\">\n <div class=\"et-qd-queries__divider\"></div>\n <button (click)=\"clearQueryHistory()\" class=\"et-qd-chip et-qd-chip-bordered\">Clear history</button>\n </ng-container>\n </div>\n\n <div class=\"et-qd-queries__browser\">\n <ul *ngIf=\"queryListMode() === 'live'\" class=\"et-qd-queries__browser-list\">\n <li *ngFor=\"let query of queries(); trackBy: trackByQuery\">\n <button [class.et-qd-query--active]=\"selectedQuery()?._id === query._id\" (click)=\"selectQuery(query)\">\n <span> {{ query._queryConfig.method }}</span>\n <span> {{ query | queryShortName }}</span>\n </button>\n </li>\n </ul>\n <ul *ngIf=\"queryListMode() === 'history'\" class=\"et-qd-queries__browser-list\">\n <li *ngFor=\"let query of queryHistory$ | async; trackBy: trackByQuery\">\n <button [class.et-qd-query--active]=\"selectedQuery()?._id === query._id\" (click)=\"selectQuery(query)\">\n <span> {{ query._queryConfig.method }}</span>\n <span> {{ query | queryShortName }}</span>\n </button>\n </li>\n </ul>\n <div class=\"et-qd-queries__browser-detail\">\n <ng-container *ngIf=\"selectedQuery() as query\">\n <p class=\"et-qd-queries__browser-detail__title\">\n {{ query._queryConfig.method }} {{ query._routeWithParams }}\n </p>\n\n <div class=\"et-qd-queries__actions\">\n <button (click)=\"query.execute()\" class=\"et-qd-chip et-qd-chip-bordered\">Execute</button>\n <button (click)=\"query.execute({ skipCache: true })\" class=\"et-qd-chip et-qd-chip-bordered\">\n Execute (ignore cache)\n </button>\n\n <button (click)=\"query.abort()\" class=\"et-qd-chip et-qd-chip-bordered\">Abort</button>\n <div class=\"et-qd-queries__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !query.isPolling }\"\n (click)=\"query.poll({ interval: 5000, takeUntil: _destroy$ })\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Poll\n </button>\n\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': query.isPolling }\"\n (click)=\"query.stopPolling()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Stop polling\n </button>\n <ng-container *ngIf=\"query.isPolling || query._isPollingPaused\">\n <button (click)=\"query.pausePolling()\" class=\"et-qd-chip et-qd-chip-secondary et-qd-chip-bordered\">\n Pause polling\n </button>\n <button (click)=\"query.resumePolling()\" class=\"et-qd-chip et-qd-chip-secondary et-qd-chip-bordered\">\n Resume polling\n </button>\n </ng-container>\n </div>\n\n <div class=\"et-qd-list\">\n <div class=\"et-qd-list-item\">\n <p>State type</p>\n <pre>{{ query.rawState.type }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Dependents</p>\n <pre>{{ query._dependents | json }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is expired</p>\n <pre>{{ query.isExpired }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is in use</p>\n <pre>{{ query.isInUse }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Subscriber count</p>\n <pre>{{ query._subscriberCount }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is polling</p>\n <pre>{{ query.isPolling }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is polling paused</p>\n <pre>{{ query._isPollingPaused }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Enable smart polling</p>\n <pre>{{ query._enableSmartPolling }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Query store key</p>\n <pre>{{ query._queryStoreKey }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Arguments</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showArguments() }\"\n (click)=\"toggleShowArguments()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n <pre *ngIf=\"showArguments()\">{{ query._arguments | json }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>State</p>\n <p><i> Warning, this will cause a subscription if shown!</i></p>\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showResponse() }\"\n (click)=\"toggleShowResponse()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n <pre *ngIf=\"showResponse()\">{{ query.state$ | async | json }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Raw state</p>\n <p><i> The query state unaffected by entity stores</i></p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showRawResponse() }\"\n (click)=\"toggleShowRawResponse()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n <pre *ngIf=\"showRawResponse()\">{{ query.rawState | json }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Query config</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showQueryConfig() }\"\n (click)=\"toggleShowQueryConfig()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n <pre *ngIf=\"showQueryConfig()\">{{ stringifiedQueryConfig() | json }}</pre>\n </div>\n\n <div *ngIf=\"!!query._queryConfig.entity\" class=\"et-qd-list-item\">\n <p>Entity store value</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showEntityStoreValue() }\"\n (click)=\"toggleShowEntityStoreValue()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n <pre *ngIf=\"showEntityStoreValue()\">{{ selectedQueryEntityStoreValue$ | async | json }}</pre>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n</div>\n", styles: [":host{position:fixed;top:0;z-index:1000000;font-size:14px;color:#fff}.et-query-devtools-container{position:fixed;inset:0;background-color:#25292e;z-index:10000;overflow:auto;font-family:monospace;display:grid;grid-template-rows:auto auto auto minmax(0,1fr)}.et-query-devtools-container.et-query-devtools-container--transparent{opacity:.25;pointer-events:none}.et-query-devtools-container.et-query-devtools-container--transparent .et-query-devtools-translucent-btn{pointer-events:all}.et-query-devtools-container.et-query-devtools-container--snap-left{inset-inline-start:0;inset-block-start:0;inset-block-end:0;width:50%;border-right:1px solid rgb(37,41,46)}.et-query-devtools-container.et-query-devtools-container--snap-right{inset-inline-start:unset;inset-inline-end:0;inset-block-start:0;inset-block-end:0;width:50%;border-left:1px solid rgb(37,41,46)}.et-query-devtools-container.et-query-devtools-container--snap-top{inset-inline-start:0;inset-block-start:0;inset-inline-end:0;height:50%;border-bottom:1px solid rgb(37,41,46)}.et-query-devtools-container.et-query-devtools-container--snap-bottom{inset-inline-start:0;inset-block-start:unset;inset-block-end:0;inset-inline-end:0;height:50%;border-top:1px solid rgb(37,41,46)}.et-query-devtools-open-btn{position:fixed;inset-inline-start:0;inset-block-start:0;z-index:9999;all:unset;font-family:monospace}.et-qd-header{background-color:#00ffa1;padding:12px;display:grid;grid-template-columns:1fr auto auto;gap:12px;align-items:center}.et-qd-header__title{color:#25292e;margin:0;font-size:22px}.et-qd-header__select{display:grid;background-color:#25292e;border-radius:10px;overflow:hidden}.et-qd-header__select select{width:250px;color:#fff;padding:3px 10px 2px;border:none;background-color:#25292e;font-family:monospace}.et-qd-header__select label{padding:3px 10px;color:#25292e;font-size:12px;font-weight:700;color:#fff;border-bottom:1px solid gray}.et-qd-sub-header{background-color:#00b371;padding:12px;display:flex;gap:12px;flex-wrap:wrap}.et-qd-sub-header__divider{width:1px;background-color:#25292e}.et-qd-btn{background-color:#00ffa1;color:#25292e;border:none;padding:12px;cursor:pointer;font-size:14px;font-weight:700;text-align:center;text-decoration:none;display:inline-block;width:100%;transition:all .3s ease-in-out;font-family:monospace;border-radius:10px}.et-qd-btn:hover{background-color:#00cc81}.et-qd-btn.et-qd-btn-secondary{background-color:#25292e;color:#00ffa1}.et-qd-btn.et-qd-btn-secondary:hover{background-color:#3c424a}.et-qd-chip{background-color:#00ffa1;color:#25292e;border:none;padding:4px 9px;cursor:pointer;font-size:12px;font-weight:700;text-align:center;text-decoration:none;display:inline-block;transition:all .3s ease-in-out;font-family:monospace;border-radius:10px}.et-qd-chip:hover{background-color:#00cc81}.et-qd-chip.et-qd-chip-secondary{background-color:#25292e;color:#00ffa1}.et-qd-chip.et-qd-chip-secondary:hover{background-color:#3c424a}.et-qd-chip.et-qd-chip-bordered{border:1px solid rgb(0,255,161)}.et-qd-translucent-clickable{pointer-events:all}.et-qd-client{border-bottom:1px solid #3c424a;padding:12px}.et-qd-client__title{margin:0;font-size:14px;color:#fff;font-weight:700}.et-qd-client__actions{display:flex;gap:12px;margin-top:12px}.et-qd-queries{padding:12px;display:grid;grid-template-rows:auto auto minmax(0,1fr)}.et-qd-queries__actions{display:flex;gap:12px;margin-top:12px;margin-bottom:16px}.et-qd-queries__title{margin:0;font-size:14px;color:#fff;font-weight:700}.et-qd-queries__divider{width:1px;background-color:#3c424a}.et-qd-queries__browser{display:grid;grid-template-columns:1fr minmax(0,3fr);margin-left:-12px;margin-right:-12px;border-top:1px solid #3c424a;margin-bottom:-12px}.et-qd-queries__browser-list{border-right:1px solid #3c424a;list-style:none;padding:0;margin:0;display:grid;grid-auto-flow:row;grid-auto-rows:55px;overflow-y:auto;overflow-x:hidden}.et-qd-queries__browser-list li{margin:0}.et-qd-queries__browser-list li button{all:unset;font-family:monospace;box-sizing:border-box;width:100%;border:none;border-bottom:1px solid #3c424a;background-color:#25292e;color:#fff;text-align:left;padding:12px;height:100%;transition:all .3s ease-in-out;cursor:pointer;display:grid;gap:2px}.et-qd-queries__browser-list li button span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.et-qd-queries__browser-list li button span:first-of-type{font-weight:700}.et-qd-queries__browser-list li button:hover,.et-qd-queries__browser-list li button.et-qd-query--active{background-color:#30363c}.et-qd-queries__browser-detail{padding:12px;overflow-y:auto;overflow-x:hidden}.et-qd-queries__browser-detail__title{margin:0;font-size:14px;color:#fff;font-weight:700}.et-qd-list{display:grid;gap:12px}.et-qd-list-item{display:grid}.et-qd-list-item p{font-weight:700;margin:0;padding-bottom:8px}.et-qd-list-item p+p{margin-top:-8px}.et-qd-list-item div+pre{margin-top:8px}.et-qd-list-item pre{margin:0;padding:4px;background-color:#0e1012;border-radius:4px;max-height:450px;overflow:auto}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: JsonPipe, name: "json" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: QueryShortNamePipe, name: "queryShortName" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.ShadowDom }); }
|
|
214
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: QueryDevtoolsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
215
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.2", type: QueryDevtoolsComponent, isStandalone: true, selector: "et-query-devtools", host: { classAttribute: "et-query-devtools" }, ngImport: i0, template: "@if (!isOpen()) {\n <button (click)=\"toggleOpen()\" class=\"et-query-devtools-open-btn et-qd-chip\">Open Devtools</button>\n}\n\n@if (isOpen()) {\n <div\n [class.et-query-devtools-container--transparent]=\"isTranslucent()\"\n class=\"et-query-devtools-container et-query-devtools-container--snap-{{ snapLayout() }}\"\n >\n <header class=\"et-qd-header\">\n <h3 class=\"et-qd-header__title\">Query Devtools</h3>\n\n <div class=\"et-qd-header__select\">\n <label for=\"et-query-client-instance\">Client instance</label>\n <select [formControl]=\"selectedClientIdCtrl\" id=\"et-query-client-instance\">\n @for (clientConfig of queryClientConfigs; track trackByClient(i, clientConfig); let i = $index) {\n <option [value]=\"i\">\n {{ clientConfig.displayName ?? clientConfig.client.config.baseRoute }}\n </option>\n }\n </select>\n </div>\n\n <button (click)=\"toggleOpen()\" class=\"et-qd-btn et-qd-btn-secondary\">Close</button>\n </header>\n\n <div class=\"et-qd-sub-header\">\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !isTranslucent() }\"\n (click)=\"toggleTranslucent()\"\n class=\"et-qd-chip et-qd-translucent-clickable\"\n >\n Translucent\n </button>\n <div class=\"et-qd-sub-header__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'full' }\"\n (click)=\"selectSnapLayout('full')\"\n class=\"et-qd-chip\"\n >\n Fullscreen\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'top' }\"\n (click)=\"selectSnapLayout('top')\"\n class=\"et-qd-chip\"\n >\n Top\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'bottom' }\"\n (click)=\"selectSnapLayout('bottom')\"\n class=\"et-qd-chip\"\n >\n Bottom\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'left' }\"\n (click)=\"selectSnapLayout('left')\"\n class=\"et-qd-chip\"\n >\n Left\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'right' }\"\n (click)=\"selectSnapLayout('right')\"\n class=\"et-qd-chip\"\n >\n Right\n </button>\n </div>\n\n @if (selectedClientConfig(); as cfg) {\n <div class=\"et-qd-client\">\n <p class=\"et-qd-client__title\">{{ cfg.displayName ?? cfg.client.config.baseRoute }}</p>\n\n <div class=\"et-qd-client__actions\">\n <button (click)=\"cfg.client._store.refreshQueriesInUse()\" class=\"et-qd-chip\">Refresh all</button>\n <button (click)=\"cfg.client._store.refreshQueriesInUse({ ignoreCacheValidity: true })\" class=\"et-qd-chip\">\n Refresh all (ignore caches)\n </button>\n <button\n (click)=\"cfg.client._store.refreshQueriesInUse({ ignoreCacheValidity: true, purgeUnused: true })\"\n class=\"et-qd-chip\"\n >\n Refresh all (ignore caches & purge unused)\n </button>\n </div>\n </div>\n }\n\n @if (selectedClientConfig(); as cfg) {\n <div class=\"et-qd-queries\">\n <p class=\"et-qd-queries__title\">Query browser</p>\n <div class=\"et-qd-queries__actions\">\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': queryListMode() !== 'live' }\"\n (click)=\"selectQueryListMode('live')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Live ({{ queries()?.length ?? 0 }})\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': queryListMode() !== 'history' }\"\n (click)=\"selectQueryListMode('history')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n History ({{ (queryHistory$ | async)?.length ?? 0 }}/50)\n </button>\n @if (queryListMode() === 'history') {\n <div class=\"et-qd-queries__divider\"></div>\n <button (click)=\"clearQueryHistory()\" class=\"et-qd-chip et-qd-chip-bordered\">Clear history</button>\n }\n </div>\n\n <div class=\"et-qd-queries__browser\">\n @if (queryListMode() === 'live') {\n <ul class=\"et-qd-queries__browser-list\">\n @for (query of queries(); track trackByQuery($index, query)) {\n <li>\n <button [class.et-qd-query--active]=\"selectedQuery()?._id === query._id\" (click)=\"selectQuery(query)\">\n <span> {{ query._queryConfig.method }}</span>\n <span> {{ query | queryShortName }}</span>\n </button>\n </li>\n }\n </ul>\n }\n @if (queryListMode() === 'history') {\n <ul class=\"et-qd-queries__browser-list\">\n @for (query of queryHistory$ | async; track trackByQuery($index, query)) {\n <li>\n <button [class.et-qd-query--active]=\"selectedQuery()?._id === query._id\" (click)=\"selectQuery(query)\">\n <span> {{ query._queryConfig.method }}</span>\n <span> {{ query | queryShortName }}</span>\n </button>\n </li>\n }\n </ul>\n }\n <div class=\"et-qd-queries__browser-detail\">\n @if (selectedQuery(); as query) {\n <p class=\"et-qd-queries__browser-detail__title\">\n {{ query._queryConfig.method }} {{ query._routeWithParams }}\n </p>\n\n <div class=\"et-qd-queries__actions\">\n <button (click)=\"query.execute()\" class=\"et-qd-chip et-qd-chip-bordered\">Execute</button>\n <button (click)=\"query.execute({ skipCache: true })\" class=\"et-qd-chip et-qd-chip-bordered\">\n Execute (ignore cache)\n </button>\n\n <button (click)=\"query.abort()\" class=\"et-qd-chip et-qd-chip-bordered\">Abort</button>\n <div class=\"et-qd-queries__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !query.isPolling }\"\n (click)=\"query.poll({ interval: 5000, takeUntil: _destroy$ })\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Poll\n </button>\n\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': query.isPolling }\"\n (click)=\"query.stopPolling()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Stop polling\n </button>\n @if (query.isPolling || query._isPollingPaused) {\n <button (click)=\"query.pausePolling()\" class=\"et-qd-chip et-qd-chip-secondary et-qd-chip-bordered\">\n Pause polling\n </button>\n <button (click)=\"query.resumePolling()\" class=\"et-qd-chip et-qd-chip-secondary et-qd-chip-bordered\">\n Resume polling\n </button>\n }\n </div>\n\n <div class=\"et-qd-list\">\n <div class=\"et-qd-list-item\">\n <p>State type</p>\n <pre>{{ query.rawState.type }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Dependents</p>\n <pre>{{ query._dependents | json }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is expired</p>\n <pre>{{ query.isExpired }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is in use</p>\n <pre>{{ query.isInUse }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Subscriber count</p>\n <pre>{{ query._subscriberCount }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is polling</p>\n <pre>{{ query.isPolling }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is polling paused</p>\n <pre>{{ query._isPollingPaused }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Enable smart polling</p>\n <pre>{{ query._enableSmartPolling }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Query store key</p>\n <pre>{{ query._queryStoreKey }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Arguments</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showArguments() }\"\n (click)=\"toggleShowArguments()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showArguments()) {\n <pre>{{ query._arguments | json }}</pre>\n }\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>State</p>\n <p><i> Warning, this will cause a subscription if shown!</i></p>\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showResponse() }\"\n (click)=\"toggleShowResponse()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showResponse()) {\n <pre>{{ query.state$ | async | json }}</pre>\n }\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Raw state</p>\n <p><i> The query state unaffected by entity stores</i></p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showRawResponse() }\"\n (click)=\"toggleShowRawResponse()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showRawResponse()) {\n <pre>{{ query.rawState | json }}</pre>\n }\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Query config</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showQueryConfig() }\"\n (click)=\"toggleShowQueryConfig()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showQueryConfig()) {\n <pre>{{ stringifiedQueryConfig() | json }}</pre>\n }\n </div>\n\n @if (!!query._queryConfig.entity) {\n <div class=\"et-qd-list-item\">\n <p>Entity store value</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showEntityStoreValue() }\"\n (click)=\"toggleShowEntityStoreValue()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showEntityStoreValue()) {\n <pre>{{ selectedQueryEntityStoreValue$ | async | json }}</pre>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n}\n", styles: [":host{position:fixed;top:0;z-index:1000000;font-size:14px;color:#fff}.et-query-devtools-container{position:fixed;inset:0;background-color:#25292e;z-index:10000;overflow:auto;font-family:monospace;display:grid;grid-template-rows:auto auto auto minmax(0,1fr)}.et-query-devtools-container.et-query-devtools-container--transparent{opacity:.25;pointer-events:none}.et-query-devtools-container.et-query-devtools-container--transparent .et-query-devtools-translucent-btn{pointer-events:all}.et-query-devtools-container.et-query-devtools-container--snap-left{inset-inline-start:0;inset-block-start:0;inset-block-end:0;width:50%;border-right:1px solid rgb(37,41,46)}.et-query-devtools-container.et-query-devtools-container--snap-right{inset-inline-start:unset;inset-inline-end:0;inset-block-start:0;inset-block-end:0;width:50%;border-left:1px solid rgb(37,41,46)}.et-query-devtools-container.et-query-devtools-container--snap-top{inset-inline-start:0;inset-block-start:0;inset-inline-end:0;height:50%;border-bottom:1px solid rgb(37,41,46)}.et-query-devtools-container.et-query-devtools-container--snap-bottom{inset-inline-start:0;inset-block-start:unset;inset-block-end:0;inset-inline-end:0;height:50%;border-top:1px solid rgb(37,41,46)}.et-query-devtools-open-btn{position:fixed;inset-inline-start:0;inset-block-start:0;z-index:9999;all:unset;font-family:monospace}.et-qd-header{background-color:#00ffa1;padding:12px;display:grid;grid-template-columns:1fr auto auto;gap:12px;align-items:center}.et-qd-header__title{color:#25292e;margin:0;font-size:22px}.et-qd-header__select{display:grid;background-color:#25292e;border-radius:10px;overflow:hidden}.et-qd-header__select select{width:250px;color:#fff;padding:3px 10px 2px;border:none;background-color:#25292e;font-family:monospace}.et-qd-header__select label{padding:3px 10px;color:#25292e;font-size:12px;font-weight:700;color:#fff;border-bottom:1px solid gray}.et-qd-sub-header{background-color:#00b371;padding:12px;display:flex;gap:12px;flex-wrap:wrap}.et-qd-sub-header__divider{width:1px;background-color:#25292e}.et-qd-btn{background-color:#00ffa1;color:#25292e;border:none;padding:12px;cursor:pointer;font-size:14px;font-weight:700;text-align:center;text-decoration:none;display:inline-block;width:100%;transition:all .3s ease-in-out;font-family:monospace;border-radius:10px}.et-qd-btn:hover{background-color:#00cc81}.et-qd-btn.et-qd-btn-secondary{background-color:#25292e;color:#00ffa1}.et-qd-btn.et-qd-btn-secondary:hover{background-color:#3c424a}.et-qd-chip{background-color:#00ffa1;color:#25292e;border:none;padding:4px 9px;cursor:pointer;font-size:12px;font-weight:700;text-align:center;text-decoration:none;display:inline-block;transition:all .3s ease-in-out;font-family:monospace;border-radius:10px}.et-qd-chip:hover{background-color:#00cc81}.et-qd-chip.et-qd-chip-secondary{background-color:#25292e;color:#00ffa1}.et-qd-chip.et-qd-chip-secondary:hover{background-color:#3c424a}.et-qd-chip.et-qd-chip-bordered{border:1px solid rgb(0,255,161)}.et-qd-translucent-clickable{pointer-events:all}.et-qd-client{border-bottom:1px solid #3c424a;padding:12px}.et-qd-client__title{margin:0;font-size:14px;color:#fff;font-weight:700}.et-qd-client__actions{display:flex;gap:12px;margin-top:12px}.et-qd-queries{padding:12px;display:grid;grid-template-rows:auto auto minmax(0,1fr)}.et-qd-queries__actions{display:flex;gap:12px;margin-top:12px;margin-bottom:16px}.et-qd-queries__title{margin:0;font-size:14px;color:#fff;font-weight:700}.et-qd-queries__divider{width:1px;background-color:#3c424a}.et-qd-queries__browser{display:grid;grid-template-columns:1fr minmax(0,3fr);margin-left:-12px;margin-right:-12px;border-top:1px solid #3c424a;margin-bottom:-12px}.et-qd-queries__browser-list{border-right:1px solid #3c424a;list-style:none;padding:0;margin:0;display:grid;grid-auto-flow:row;grid-auto-rows:55px;overflow-y:auto;overflow-x:hidden}.et-qd-queries__browser-list li{margin:0}.et-qd-queries__browser-list li button{all:unset;font-family:monospace;box-sizing:border-box;width:100%;border:none;border-bottom:1px solid #3c424a;background-color:#25292e;color:#fff;text-align:left;padding:12px;height:100%;transition:all .3s ease-in-out;cursor:pointer;display:grid;gap:2px}.et-qd-queries__browser-list li button span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.et-qd-queries__browser-list li button span:first-of-type{font-weight:700}.et-qd-queries__browser-list li button:hover,.et-qd-queries__browser-list li button.et-qd-query--active{background-color:#30363c}.et-qd-queries__browser-detail{padding:12px;overflow-y:auto;overflow-x:hidden}.et-qd-queries__browser-detail__title{margin:0;font-size:14px;color:#fff;font-weight:700}.et-qd-list{display:grid;gap:12px}.et-qd-list-item{display:grid}.et-qd-list-item p{font-weight:700;margin:0;padding-bottom:8px}.et-qd-list-item p+p{margin-top:-8px}.et-qd-list-item div+pre{margin-top:8px}.et-qd-list-item pre{margin:0;padding:4px;background-color:#0e1012;border-radius:4px;max-height:450px;overflow:auto}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: JsonPipe, name: "json" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: QueryShortNamePipe, name: "queryShortName" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.ShadowDom }); }
|
|
216
216
|
}
|
|
217
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
217
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: QueryDevtoolsComponent, decorators: [{
|
|
218
218
|
type: Component,
|
|
219
219
|
args: [{ selector: 'et-query-devtools', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.ShadowDom, host: {
|
|
220
220
|
class: 'et-query-devtools',
|
|
221
|
-
}, imports: [NgIf, NgFor, AsyncPipe, JsonPipe, ReactiveFormsModule, NgClass, QueryShortNamePipe], hostDirectives: [], template: "<button *ngIf=\"!isOpen()\" (click)=\"toggleOpen()\" class=\"et-query-devtools-open-btn et-qd-chip\">Open Devtools</button>\n\n<div\n *ngIf=\"isOpen()\"\n [class.et-query-devtools-container--transparent]=\"isTranslucent()\"\n class=\"et-query-devtools-container et-query-devtools-container--snap-{{ snapLayout() }}\"\n>\n <header class=\"et-qd-header\">\n <h3 class=\"et-qd-header__title\">Query Devtools</h3>\n\n <div class=\"et-qd-header__select\">\n <label for=\"et-query-client-instance\">Client instance</label>\n <select [formControl]=\"selectedClientIdCtrl\" id=\"et-query-client-instance\">\n <option *ngFor=\"let clientConfig of queryClientConfigs; index as i; trackBy: trackByClient\" [value]=\"i\">\n {{ clientConfig.displayName ?? clientConfig.client.config.baseRoute }}\n </option>\n </select>\n </div>\n\n <button (click)=\"toggleOpen()\" class=\"et-qd-btn et-qd-btn-secondary\">Close</button>\n </header>\n\n <div class=\"et-qd-sub-header\">\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !isTranslucent() }\"\n (click)=\"toggleTranslucent()\"\n class=\"et-qd-chip et-qd-translucent-clickable\"\n >\n Translucent\n </button>\n <div class=\"et-qd-sub-header__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'full' }\"\n (click)=\"selectSnapLayout('full')\"\n class=\"et-qd-chip\"\n >\n Fullscreen\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'top' }\"\n (click)=\"selectSnapLayout('top')\"\n class=\"et-qd-chip\"\n >\n Top\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'bottom' }\"\n (click)=\"selectSnapLayout('bottom')\"\n class=\"et-qd-chip\"\n >\n Bottom\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'left' }\"\n (click)=\"selectSnapLayout('left')\"\n class=\"et-qd-chip\"\n >\n Left\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'right' }\"\n (click)=\"selectSnapLayout('right')\"\n class=\"et-qd-chip\"\n >\n Right\n </button>\n </div>\n\n <div *ngIf=\"selectedClientConfig() as cfg\" class=\"et-qd-client\">\n <p class=\"et-qd-client__title\">{{ cfg.displayName ?? cfg.client.config.baseRoute }}</p>\n\n <div class=\"et-qd-client__actions\">\n <button (click)=\"cfg.client._store.refreshQueriesInUse()\" class=\"et-qd-chip\">Refresh all</button>\n <button (click)=\"cfg.client._store.refreshQueriesInUse({ ignoreCacheValidity: true })\" class=\"et-qd-chip\">\n Refresh all (ignore caches)\n </button>\n <button\n (click)=\"cfg.client._store.refreshQueriesInUse({ ignoreCacheValidity: true, purgeUnused: true })\"\n class=\"et-qd-chip\"\n >\n Refresh all (ignore caches & purge unused)\n </button>\n </div>\n </div>\n\n <div *ngIf=\"selectedClientConfig() as cfg\" class=\"et-qd-queries\">\n <p class=\"et-qd-queries__title\">Query browser</p>\n <div class=\"et-qd-queries__actions\">\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': queryListMode() !== 'live' }\"\n (click)=\"selectQueryListMode('live')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Live ({{ queries()?.length ?? 0 }})\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': queryListMode() !== 'history' }\"\n (click)=\"selectQueryListMode('history')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n History ({{ (queryHistory$ | async)?.length ?? 0 }}/50)\n </button>\n <ng-container *ngIf=\"queryListMode() === 'history'\">\n <div class=\"et-qd-queries__divider\"></div>\n <button (click)=\"clearQueryHistory()\" class=\"et-qd-chip et-qd-chip-bordered\">Clear history</button>\n </ng-container>\n </div>\n\n <div class=\"et-qd-queries__browser\">\n <ul *ngIf=\"queryListMode() === 'live'\" class=\"et-qd-queries__browser-list\">\n <li *ngFor=\"let query of queries(); trackBy: trackByQuery\">\n <button [class.et-qd-query--active]=\"selectedQuery()?._id === query._id\" (click)=\"selectQuery(query)\">\n <span> {{ query._queryConfig.method }}</span>\n <span> {{ query | queryShortName }}</span>\n </button>\n </li>\n </ul>\n <ul *ngIf=\"queryListMode() === 'history'\" class=\"et-qd-queries__browser-list\">\n <li *ngFor=\"let query of queryHistory$ | async; trackBy: trackByQuery\">\n <button [class.et-qd-query--active]=\"selectedQuery()?._id === query._id\" (click)=\"selectQuery(query)\">\n <span> {{ query._queryConfig.method }}</span>\n <span> {{ query | queryShortName }}</span>\n </button>\n </li>\n </ul>\n <div class=\"et-qd-queries__browser-detail\">\n <ng-container *ngIf=\"selectedQuery() as query\">\n <p class=\"et-qd-queries__browser-detail__title\">\n {{ query._queryConfig.method }} {{ query._routeWithParams }}\n </p>\n\n <div class=\"et-qd-queries__actions\">\n <button (click)=\"query.execute()\" class=\"et-qd-chip et-qd-chip-bordered\">Execute</button>\n <button (click)=\"query.execute({ skipCache: true })\" class=\"et-qd-chip et-qd-chip-bordered\">\n Execute (ignore cache)\n </button>\n\n <button (click)=\"query.abort()\" class=\"et-qd-chip et-qd-chip-bordered\">Abort</button>\n <div class=\"et-qd-queries__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !query.isPolling }\"\n (click)=\"query.poll({ interval: 5000, takeUntil: _destroy$ })\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Poll\n </button>\n\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': query.isPolling }\"\n (click)=\"query.stopPolling()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Stop polling\n </button>\n <ng-container *ngIf=\"query.isPolling || query._isPollingPaused\">\n <button (click)=\"query.pausePolling()\" class=\"et-qd-chip et-qd-chip-secondary et-qd-chip-bordered\">\n Pause polling\n </button>\n <button (click)=\"query.resumePolling()\" class=\"et-qd-chip et-qd-chip-secondary et-qd-chip-bordered\">\n Resume polling\n </button>\n </ng-container>\n </div>\n\n <div class=\"et-qd-list\">\n <div class=\"et-qd-list-item\">\n <p>State type</p>\n <pre>{{ query.rawState.type }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Dependents</p>\n <pre>{{ query._dependents | json }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is expired</p>\n <pre>{{ query.isExpired }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is in use</p>\n <pre>{{ query.isInUse }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Subscriber count</p>\n <pre>{{ query._subscriberCount }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is polling</p>\n <pre>{{ query.isPolling }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is polling paused</p>\n <pre>{{ query._isPollingPaused }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Enable smart polling</p>\n <pre>{{ query._enableSmartPolling }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Query store key</p>\n <pre>{{ query._queryStoreKey }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Arguments</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showArguments() }\"\n (click)=\"toggleShowArguments()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n <pre *ngIf=\"showArguments()\">{{ query._arguments | json }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>State</p>\n <p><i> Warning, this will cause a subscription if shown!</i></p>\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showResponse() }\"\n (click)=\"toggleShowResponse()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n <pre *ngIf=\"showResponse()\">{{ query.state$ | async | json }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Raw state</p>\n <p><i> The query state unaffected by entity stores</i></p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showRawResponse() }\"\n (click)=\"toggleShowRawResponse()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n <pre *ngIf=\"showRawResponse()\">{{ query.rawState | json }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Query config</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showQueryConfig() }\"\n (click)=\"toggleShowQueryConfig()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n <pre *ngIf=\"showQueryConfig()\">{{ stringifiedQueryConfig() | json }}</pre>\n </div>\n\n <div *ngIf=\"!!query._queryConfig.entity\" class=\"et-qd-list-item\">\n <p>Entity store value</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showEntityStoreValue() }\"\n (click)=\"toggleShowEntityStoreValue()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n <pre *ngIf=\"showEntityStoreValue()\">{{ selectedQueryEntityStoreValue$ | async | json }}</pre>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n</div>\n", styles: [":host{position:fixed;top:0;z-index:1000000;font-size:14px;color:#fff}.et-query-devtools-container{position:fixed;inset:0;background-color:#25292e;z-index:10000;overflow:auto;font-family:monospace;display:grid;grid-template-rows:auto auto auto minmax(0,1fr)}.et-query-devtools-container.et-query-devtools-container--transparent{opacity:.25;pointer-events:none}.et-query-devtools-container.et-query-devtools-container--transparent .et-query-devtools-translucent-btn{pointer-events:all}.et-query-devtools-container.et-query-devtools-container--snap-left{inset-inline-start:0;inset-block-start:0;inset-block-end:0;width:50%;border-right:1px solid rgb(37,41,46)}.et-query-devtools-container.et-query-devtools-container--snap-right{inset-inline-start:unset;inset-inline-end:0;inset-block-start:0;inset-block-end:0;width:50%;border-left:1px solid rgb(37,41,46)}.et-query-devtools-container.et-query-devtools-container--snap-top{inset-inline-start:0;inset-block-start:0;inset-inline-end:0;height:50%;border-bottom:1px solid rgb(37,41,46)}.et-query-devtools-container.et-query-devtools-container--snap-bottom{inset-inline-start:0;inset-block-start:unset;inset-block-end:0;inset-inline-end:0;height:50%;border-top:1px solid rgb(37,41,46)}.et-query-devtools-open-btn{position:fixed;inset-inline-start:0;inset-block-start:0;z-index:9999;all:unset;font-family:monospace}.et-qd-header{background-color:#00ffa1;padding:12px;display:grid;grid-template-columns:1fr auto auto;gap:12px;align-items:center}.et-qd-header__title{color:#25292e;margin:0;font-size:22px}.et-qd-header__select{display:grid;background-color:#25292e;border-radius:10px;overflow:hidden}.et-qd-header__select select{width:250px;color:#fff;padding:3px 10px 2px;border:none;background-color:#25292e;font-family:monospace}.et-qd-header__select label{padding:3px 10px;color:#25292e;font-size:12px;font-weight:700;color:#fff;border-bottom:1px solid gray}.et-qd-sub-header{background-color:#00b371;padding:12px;display:flex;gap:12px;flex-wrap:wrap}.et-qd-sub-header__divider{width:1px;background-color:#25292e}.et-qd-btn{background-color:#00ffa1;color:#25292e;border:none;padding:12px;cursor:pointer;font-size:14px;font-weight:700;text-align:center;text-decoration:none;display:inline-block;width:100%;transition:all .3s ease-in-out;font-family:monospace;border-radius:10px}.et-qd-btn:hover{background-color:#00cc81}.et-qd-btn.et-qd-btn-secondary{background-color:#25292e;color:#00ffa1}.et-qd-btn.et-qd-btn-secondary:hover{background-color:#3c424a}.et-qd-chip{background-color:#00ffa1;color:#25292e;border:none;padding:4px 9px;cursor:pointer;font-size:12px;font-weight:700;text-align:center;text-decoration:none;display:inline-block;transition:all .3s ease-in-out;font-family:monospace;border-radius:10px}.et-qd-chip:hover{background-color:#00cc81}.et-qd-chip.et-qd-chip-secondary{background-color:#25292e;color:#00ffa1}.et-qd-chip.et-qd-chip-secondary:hover{background-color:#3c424a}.et-qd-chip.et-qd-chip-bordered{border:1px solid rgb(0,255,161)}.et-qd-translucent-clickable{pointer-events:all}.et-qd-client{border-bottom:1px solid #3c424a;padding:12px}.et-qd-client__title{margin:0;font-size:14px;color:#fff;font-weight:700}.et-qd-client__actions{display:flex;gap:12px;margin-top:12px}.et-qd-queries{padding:12px;display:grid;grid-template-rows:auto auto minmax(0,1fr)}.et-qd-queries__actions{display:flex;gap:12px;margin-top:12px;margin-bottom:16px}.et-qd-queries__title{margin:0;font-size:14px;color:#fff;font-weight:700}.et-qd-queries__divider{width:1px;background-color:#3c424a}.et-qd-queries__browser{display:grid;grid-template-columns:1fr minmax(0,3fr);margin-left:-12px;margin-right:-12px;border-top:1px solid #3c424a;margin-bottom:-12px}.et-qd-queries__browser-list{border-right:1px solid #3c424a;list-style:none;padding:0;margin:0;display:grid;grid-auto-flow:row;grid-auto-rows:55px;overflow-y:auto;overflow-x:hidden}.et-qd-queries__browser-list li{margin:0}.et-qd-queries__browser-list li button{all:unset;font-family:monospace;box-sizing:border-box;width:100%;border:none;border-bottom:1px solid #3c424a;background-color:#25292e;color:#fff;text-align:left;padding:12px;height:100%;transition:all .3s ease-in-out;cursor:pointer;display:grid;gap:2px}.et-qd-queries__browser-list li button span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.et-qd-queries__browser-list li button span:first-of-type{font-weight:700}.et-qd-queries__browser-list li button:hover,.et-qd-queries__browser-list li button.et-qd-query--active{background-color:#30363c}.et-qd-queries__browser-detail{padding:12px;overflow-y:auto;overflow-x:hidden}.et-qd-queries__browser-detail__title{margin:0;font-size:14px;color:#fff;font-weight:700}.et-qd-list{display:grid;gap:12px}.et-qd-list-item{display:grid}.et-qd-list-item p{font-weight:700;margin:0;padding-bottom:8px}.et-qd-list-item p+p{margin-top:-8px}.et-qd-list-item div+pre{margin-top:8px}.et-qd-list-item pre{margin:0;padding:4px;background-color:#0e1012;border-radius:4px;max-height:450px;overflow:auto}\n"] }]
|
|
222
|
-
}], ctorParameters:
|
|
223
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZGV2dG9vbHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2RldnRvb2xzL2NvbXBvbmVudHMvcXVlcnktZGV2dG9vbHMvcXVlcnktZGV2dG9vbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2RldnRvb2xzL2NvbXBvbmVudHMvcXVlcnktZGV2dG9vbHMvcXVlcnktZGV2dG9vbHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBRVQsaUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RixPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV0RixPQUFPLEVBQVksZ0JBQWdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakQsT0FB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Q0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVTLGdCQUFnQixDQUFDLE1BQStCO1FBQ3hELElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFUyxtQkFBbUIsQ0FBQyxJQUFtQjtRQUMvQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRVMsV0FBVyxDQUFDLEtBQWU7UUFDbkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFUyxpQkFBaUI7UUFDekIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUIsQ0FBQzsrR0FoVFUsc0JBQXNCO21HQUF0QixzQkFBc0IsNEhDdkNuQyxvMVZBbVNBLHE4SkQvUFksSUFBSSw2RkFBRSxLQUFLLDhHQUFFLFNBQVMseUNBQUUsUUFBUSw0Q0FBRSxtQkFBbUIscXRCQUFFLE9BQU8sK0VBQUUsa0JBQWtCOzs0RkFHakYsc0JBQXNCO2tCQWRsQyxTQUFTOytCQUNFLG1CQUFtQixjQUdqQixJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLFNBQVMsUUFFcEM7d0JBQ0osS0FBSyxFQUFFLG1CQUFtQjtxQkFDM0IsV0FDUSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxtQkFBbUIsRUFBRSxPQUFPLEVBQUUsa0JBQWtCLENBQUMsa0JBQzdFLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3luY1BpcGUsIEpzb25QaXBlLCBOZ0NsYXNzLCBOZ0ZvciwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgVHJhY2tCeUZ1bmN0aW9uLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBzaWduYWwsXG4gIHVudHJhY2tlZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQsIHRvT2JzZXJ2YWJsZSwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGNyZWF0ZURlc3Ryb3ksIG5leHRGcmFtZSB9IGZyb20gJ0BldGhsZXRlL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtYXAsIG9mLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVudGl0eVN0b3JlIH0gZnJvbSAnLi4vLi4vLi4vZW50aXR5JztcbmltcG9ydCB7IEFueVF1ZXJ5LCBpc0dxbFF1ZXJ5Q29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vcXVlcnknO1xuaW1wb3J0IHsgUXVlcnlTaG9ydE5hbWVQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMnO1xuaW1wb3J0IHsgUVVFUllfQ0xJRU5UX0RFVlRPT0xTX1RPS0VOLCBRdWVyeUNsaWVudERldnRvb2xzT3B0aW9ucyB9IGZyb20gJy4uLy4uL3V0aWxzJztcblxudHlwZSBRdWVyeURldnRvb2xzU25hcExheW91dCA9ICdmdWxsJyB8ICdsZWZ0JyB8ICdyaWdodCcgfCAnYm90dG9tJyB8ICd0b3AnO1xudHlwZSBRdWVyeUxpc3RNb2RlID0gJ2xpdmUnIHwgJ2hpc3RvcnknO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdldC1xdWVyeS1kZXZ0b29scycsXG4gIHRlbXBsYXRlVXJsOiAnLi9xdWVyeS1kZXZ0b29scy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3F1ZXJ5LWRldnRvb2xzLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5TaGFkb3dEb20sXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8taG9zdC1tZXRhZGF0YS1wcm9wZXJ0eVxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdldC1xdWVyeS1kZXZ0b29scycsXG4gIH0sXG4gIGltcG9ydHM6IFtOZ0lmLCBOZ0ZvciwgQXN5bmNQaXBlLCBKc29uUGlwZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgTmdDbGFzcywgUXVlcnlTaG9ydE5hbWVQaXBlXSxcbiAgaG9zdERpcmVjdGl2ZXM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBRdWVyeURldnRvb2xzQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9kZXN0cm95JCA9IGNyZWF0ZURlc3Ryb3koKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcXVlcnlDbGllbnRDb25maWdzID0gaW5qZWN0KFFVRVJZX0NMSUVOVF9ERVZUT09MU19UT0tFTik7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzT3BlbiA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBpc1RyYW5zbHVjZW50ID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNuYXBMYXlvdXQgPSBzaWduYWw8UXVlcnlEZXZ0b29sc1NuYXBMYXlvdXQ+KCdmdWxsJyk7XG4gIHByb3RlY3RlZCByZWFkb25seSBxdWVyeUxpc3RNb2RlID0gc2lnbmFsPFF1ZXJ5TGlzdE1vZGU+KCdsaXZlJyk7XG5cbiAgcHJvdGVjdGVkIHNob3dSZXNwb25zZSA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCBzaG93UmF3UmVzcG9uc2UgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgc2hvd1F1ZXJ5Q29uZmlnID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvdGVjdGVkIHNob3dFbnRpdHlTdG9yZVZhbHVlID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvdGVjdGVkIHNob3dBcmd1bWVudHMgPSBzaWduYWwoZmFsc2UpO1xuXG4gIHByb3RlY3RlZCBzZWxlY3RlZENsaWVudElkQ3RybCA9IG5ldyBGb3JtQ29udHJvbCgwKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0ZWRDbGllbnRJZCA9IHRvU2lnbmFsKFxuICAgIHRoaXMuc2VsZWN0ZWRDbGllbnRJZEN0cmwudmFsdWVDaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKHRoaXMuc2VsZWN0ZWRDbGllbnRJZEN0cmwudmFsdWUpKSxcbiAgKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdGVkUXVlcnlJZCA9IHNpZ25hbDxudW1iZXIgfCBudWxsPihudWxsKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0ZWRDbGllbnRDb25maWcgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKHRoaXMucXVlcnlDbGllbnRDb25maWdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIHRoaXMucXVlcnlDbGllbnRDb25maWdzWzBdITtcbiAgICB9XG5cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRDbGllbnRJZCgpID8/IDA7XG5cbiAgICBjb25zdCBjZmcgPSB0aGlzLnF1ZXJ5Q2xpZW50Q29uZmlnc1tpbmRleF07XG5cbiAgICBpZiAoIWNmZykge1xuICAgICAgcmV0dXJuIHRoaXMucXVlcnlDbGllbnRDb25maWdzWzBdITtcbiAgICB9XG5cbiAgICByZXR1cm4gY2ZnO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcXVlcnlTdG9yZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLnNlbGVjdGVkQ2xpZW50Q29uZmlnKCk7XG5cbiAgICByZXR1cm4gY29uZmlnLmNsaWVudC5fc3RvcmU7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBxdWVyeVN0b3JlJCA9IHRvT2JzZXJ2YWJsZSh0aGlzLnF1ZXJ5U3RvcmUpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3F1ZXJpZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBbnlRdWVyeVtdPihbXSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBxdWVyaWVzID0gdG9TaWduYWwodGhpcy5fcXVlcmllcyQpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBzZWxlY3RlZFF1ZXJ5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGlkID0gdGhpcy5zZWxlY3RlZFF1ZXJ5SWQoKTtcbiAgICBjb25zdCBtb2RlID0gdGhpcy5xdWVyeUxpc3RNb2RlKCk7XG5cbiAgICBpZiAoaWQgPT09IG51bGwgfHwgIW1vZGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChtb2RlID09PSAnbGl2ZScpIHtcbiAgICAgIHJldHVybiB0aGlzLnF1ZXJpZXMoKT8uZmluZCgocSkgPT4gcS5faWQgPT09IGlkKSA/PyBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnF1ZXJ5SGlzdG9yeSQuZ2V0VmFsdWUoKT8uZmluZCgocSkgPT4gcS5faWQgPT09IGlkKSA/PyBudWxsO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0ZWRRdWVyeSQgPSB0b09ic2VydmFibGUodGhpcy5zZWxlY3RlZFF1ZXJ5KTtcblxuICBwcm90ZWN0ZWQgc2VsZWN0ZWRRdWVyeUVudGl0eVN0b3JlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5zZWxlY3RlZFF1ZXJ5KCk7XG5cbiAgICBpZiAoIXF1ZXJ5KSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiBxdWVyeS5zdG9yZSBhcyBFbnRpdHlTdG9yZTx1bmtub3duPiB8IG51bGw7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBzZWxlY3RlZFF1ZXJ5RW50aXR5U3RvcmUkID0gdG9PYnNlcnZhYmxlKHRoaXMuc2VsZWN0ZWRRdWVyeUVudGl0eVN0b3JlKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0ZWRRdWVyeUVudGl0eVN0b3JlVmFsdWUkID0gdGhpcy5zZWxlY3RlZFF1ZXJ5RW50aXR5U3RvcmUkLnBpcGUoXG4gICAgc3dpdGNoTWFwKFxuICAgICAgKHMpID0+XG4gICAgICAgIHM/Ll9jaGFuZ2UkLnBpcGUoXG4gICAgICAgICAgc3RhcnRXaXRoKCcnKSxcbiAgICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFzLl9kaWN0aW9uYXJ5KSByZXR1cm4gbnVsbDtcblxuICAgICAgICAgICAgcmV0dXJuIEFycmF5LmZyb20ocy5fZGljdGlvbmFyeSkucmVkdWNlKFxuICAgICAgICAgICAgICAob2JqLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgICBvYmpba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHt9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKSA/PyBvZihudWxsKSxcbiAgICApLFxuICApO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBxdWVyeUhpc3RvcnkkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBbnlRdWVyeVtdPihbXSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHN0cmluZ2lmaWVkUXVlcnlDb25maWcgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLnNlbGVjdGVkUXVlcnkoKTtcblxuICAgIGlmICghcXVlcnkpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgY2ZnID0gcXVlcnkuX3F1ZXJ5Q29uZmlnO1xuICAgIGNvbnN0IHJvdXRlID1cbiAgICAgIHR5cGVvZiBjZmcucm91dGUgPT09ICdzdHJpbmcnID8gY2ZnLnJvdXRlIDogY2ZnLnJvdXRlID8gY2ZnLnJvdXRlKHt9KS5yZXBsYWNlKC91bmRlZmluZWQvZywgJzpwYXJhbScpIDogbnVsbDtcblxuICAgIGNvbnN0IHNoYXJlZENmZyA9IHtcbiAgICAgIG1ldGhvZDogY2ZnLm1ldGhvZCxcbiAgICAgIHNlY3VyZTogY2ZnLnNlY3VyZSxcbiAgICAgIHJvdXRlLFxuICAgICAgcmVwb3J0UHJvZ3Jlc3M6IGNmZy5yZXBvcnRQcm9ncmVzcyxcbiAgICAgIHJlc3BvbnNlVHlwZTogY2ZnLnJlc3BvbnNlVHlwZSxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogY2ZnLndpdGhDcmVkZW50aWFscyxcbiAgICAgIGF1dG9SZWZyZXNoT246IGNmZy5hdXRvUmVmcmVzaE9uLFxuICAgICAgZW5hYmxlU21hcnRQb2xsaW5nOiBjZmcuZW5hYmxlU21hcnRQb2xsaW5nLFxuICAgICAgaGFzRW50aXR5U3RvcmU6ICEhY2ZnLmVudGl0eSxcbiAgICB9O1xuXG4gICAgaWYgKGlzR3FsUXVlcnlDb25maWcoY2ZnKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc2hhcmVkQ2ZnLFxuICAgICAgICBxdWVyeTogY2ZnLnF1ZXJ5LFxuICAgICAgICB0cmFuc2ZlclZpYTogY2ZnLnRyYW5zZmVyVmlhLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uc2hhcmVkQ2ZnLFxuICAgIH07XG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRDbGllbnRJZEN0cmwudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuY2xlYXJRdWVyeUhpc3RvcnkoKSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLnNlbGVjdGVkUXVlcnkkXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChxKSA9PiBxPy5fZGVwZW5kZW50c0NoYW5nZWQkID8/IG9mKG51bGwpKSxcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5xdWVyeVN0b3JlJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgocykgPT5cbiAgICAgICAgICBzLnN0b3JlQ2hhbmdlJC5waXBlKFxuICAgICAgICAgICAgc3RhcnRXaXRoKCcnKSxcbiAgICAgICAgICAgIG1hcCgoKSA9PiBzLl9zdG9yZSksXG4gICAgICAgICAgICB0YXAoKHMpID0+IHtcbiAgICAgICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9xdWVyaWVzJC5uZXh0KEFycmF5LmZyb20ocy52YWx1ZXMoKSkpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5xdWVyeVN0b3JlJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgocykgPT5cbiAgICAgICAgICBzLnF1ZXJ5Q3JlYXRlZCQucGlwZShcbiAgICAgICAgICAgIHRhcCgocXVlcnkpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgY3VycmVudEhpc3RvcnkgPSB0aGlzLnF1ZXJ5SGlzdG9yeSQuZ2V0VmFsdWUoKTtcblxuICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRIaXN0b3J5KSByZXR1cm47XG5cbiAgICAgICAgICAgICAgY29uc3QgY3VycmVudEhpc3RvcnlDbG9uZSA9IFsuLi5jdXJyZW50SGlzdG9yeV07XG5cbiAgICAgICAgICAgICAgaWYgKCFjdXJyZW50SGlzdG9yeS5zb21lKChxKSA9PiBxLl9pZCA9PT0gcXVlcnkuX2lkKSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRIaXN0b3J5Q2xvbmUudW5zaGlmdChxdWVyeSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjdXJyZW50SGlzdG9yeUNsb25lLnNwbGljZSg1MCk7XG5cbiAgICAgICAgICAgICAgdGhpcy5xdWVyeUhpc3RvcnkkLm5leHQoY3VycmVudEhpc3RvcnlDbG9uZSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMuX3F1ZXJpZXMkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChxdWVyaWVzKSA9PiB7XG4gICAgICAgICAgY29uc3QgY3VycmVudEhpc3RvcnkgPSB0aGlzLnF1ZXJ5SGlzdG9yeSQuZ2V0VmFsdWUoKTtcblxuICAgICAgICAgIGlmICghcXVlcmllcyB8fCAhY3VycmVudEhpc3RvcnkpIHJldHVybjtcblxuICAgICAgICAgIGNvbnN0IGN1cnJlbnRIaXN0b3J5Q2xvbmUgPSBbLi4uY3VycmVudEhpc3RvcnldO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBxdWVyeSBvZiBxdWVyaWVzKSB7XG4gICAgICAgICAgICBpZiAoIWN1cnJlbnRIaXN0b3J5Q2xvbmUuc29tZSgocSkgPT4gcS5faWQgPT09IHF1ZXJ5Ll9pZCkpIHtcbiAgICAgICAgICAgICAgY3VycmVudEhpc3RvcnlDbG9uZS51bnNoaWZ0KHF1ZXJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjdXJyZW50SGlzdG9yeUNsb25lLnNwbGljZSg1MCk7XG5cbiAgICAgICAgICB0aGlzLnF1ZXJ5SGlzdG9yeSQubmV4dChjdXJyZW50SGlzdG9yeUNsb25lKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRldnRvb2xDb25maWcgPSB7XG4gICAgICAgICAgaXNPcGVuOiB0aGlzLmlzT3BlbigpLFxuICAgICAgICAgIGlzVHJhbnNsdWNlbnQ6IHRoaXMuaXNUcmFuc2x1Y2VudCgpLFxuICAgICAgICAgIHNuYXBMYXlvdXQ6IHRoaXMuc25hcExheW91dCgpLFxuICAgICAgICAgIHNob3dSZXNwb25zZTogdGhpcy5zaG93UmVzcG9uc2UoKSxcbiAgICAgICAgICBzaG93UmF3UmVzcG9uc2U6IHRoaXMuc2hvd1Jhd1Jlc3BvbnNlKCksXG4gICAgICAgICAgc2hvd1F1ZXJ5Q29uZmlnOiB0aGlzLnNob3dRdWVyeUNvbmZpZygpLFxuICAgICAgICAgIHNob3dFbnRpdHlTdG9yZVZhbHVlOiB0aGlzLnNob3dFbnRpdHlTdG9yZVZhbHVlKCksXG4gICAgICAgICAgc2hvd0FyZ3VtZW50czogdGhpcy5zaG93QXJndW1lbnRzKCksXG4gICAgICAgICAgc2VsZWN0ZWRDbGllbnRJZDogdGhpcy5zZWxlY3RlZENsaWVudElkKCksXG4gICAgICAgICAgc2VsZWN0ZWRRdWVyeVBhdGg6IHRoaXMuc2VsZWN0ZWRRdWVyeUlkKCksXG4gICAgICAgICAgcXVlcnlMaXN0TW9kZTogdGhpcy5xdWVyeUxpc3RNb2RlKCksXG4gICAgICAgIH07XG5cbiAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdldGhsZXRlOnF1ZXJ5OmRldnRvb2xzJywgSlNPTi5zdHJpbmdpZnkoZGV2dG9vbENvbmZpZykpO1xuICAgICAgfSxcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcbiAgICApO1xuXG4gICAgY29uc3QgaW5pdGlhbENvbmZpZyA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXRobGV0ZTpxdWVyeTpkZXZ0b29scycpO1xuXG4gICAgaWYgKGluaXRpYWxDb25maWcpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoaW5pdGlhbENvbmZpZyk7XG5cbiAgICAgIHRoaXMuaXNPcGVuLnNldChwYXJzZWQuaXNPcGVuID8/IGZhbHNlKTtcbiAgICAgIHRoaXMuaXNUcmFuc2x1Y2VudC5zZXQocGFyc2VkLmlzVHJhbnNsdWNlbnQgPz8gZmFsc2UpO1xuICAgICAgdGhpcy5zbmFwTGF5b3V0LnNldChwYXJzZWQuc25hcExheW91dCA/PyAnZnVsbCcpO1xuICAgICAgdGhpcy5zaG93UmVzcG9uc2Uuc2V0KHBhcnNlZC5zaG93UmVzcG9uc2UgPz8gZmFsc2UpO1xuICAgICAgdGhpcy5zaG93UmF3UmVzcG9uc2Uuc2V0KHBhcnNlZC5zaG93UmF3UmVzcG9uc2UgPz8gZmFsc2UpO1xuICAgICAgdGhpcy5zaG93UXVlcnlDb25maWcuc2V0KHBhcnNlZC5zaG93UXVlcnlDb25maWcgPz8gZmFsc2UpO1xuICAgICAgdGhpcy5zaG93RW50aXR5U3RvcmVWYWx1ZS5zZXQocGFyc2VkLnNob3dFbnRpdHlTdG9yZVZhbHVlID8/IGZhbHNlKTtcbiAgICAgIHRoaXMuc2hvd0FyZ3VtZW50cy5zZXQocGFyc2VkLnNob3dBcmd1bWVudHMgPz8gZmFsc2UpO1xuICAgICAgdGhpcy5zZWxlY3RlZENsaWVudElkQ3RybC5zZXRWYWx1ZShwYXJzZWQuc2VsZWN0ZWRDbGllbnRJZCA/PyAwKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRRdWVyeUlkLnNldChwYXJzZWQuc2VsZWN0ZWRRdWVyeVBhdGggPz8gbnVsbCk7XG4gICAgICB0aGlzLnF1ZXJ5TGlzdE1vZGUuc2V0KHBhcnNlZC5xdWVyeUxpc3RNb2RlID8/ICdsaXZlJyk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHRyYWNrQnlDbGllbnQ6IFRyYWNrQnlGdW5jdGlvbjxRdWVyeUNsaWVudERldnRvb2xzT3B0aW9ucz4gPSAoXywgeyBjbGllbnQgfSkgPT4gY2xpZW50LmNvbmZpZy5iYXNlUm91dGU7XG4gIHByb3RlY3RlZCB0cmFja0J5UXVlcnk6IFRyYWNrQnlGdW5jdGlvbjxBbnlRdWVyeT4gPSAoXywgeyBfaWQgfSkgPT4gX2lkO1xuXG4gIHByb3RlY3RlZCB0b2dnbGVPcGVuKCkge1xuICAgIHRoaXMuaXNPcGVuLnNldCghdGhpcy5pc09wZW4oKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdG9nZ2xlVHJhbnNsdWNlbnQoKSB7XG4gICAgdGhpcy5pc1RyYW5zbHVjZW50LnNldCghdGhpcy5pc1RyYW5zbHVjZW50KCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRvZ2dsZVNob3dSZXNwb25zZSgpIHtcbiAgICB0aGlzLnNob3dSZXNwb25zZS5zZXQoIXRoaXMuc2hvd1Jlc3BvbnNlKCkpO1xuXG4gICAgbmV4dEZyYW1lKCgpID0+IHtcbiAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0b2dnbGVTaG93UXVlcnlDb25maWcoKSB7XG4gICAgdGhpcy5zaG93UXVlcnlDb25maWcuc2V0KCF0aGlzLnNob3dRdWVyeUNvbmZpZygpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0b2dnbGVTaG93UmF3UmVzcG9uc2UoKSB7XG4gICAgdGhpcy5zaG93UmF3UmVzcG9uc2Uuc2V0KCF0aGlzLnNob3dSYXdSZXNwb25zZSgpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0b2dnbGVTaG93RW50aXR5U3RvcmVWYWx1ZSgpIHtcbiAgICB0aGlzLnNob3dFbnRpdHlTdG9yZVZhbHVlLnNldCghdGhpcy5zaG93RW50aXR5U3RvcmVWYWx1ZSgpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0b2dnbGVTaG93QXJndW1lbnRzKCkge1xuICAgIHRoaXMuc2hvd0FyZ3VtZW50cy5zZXQoIXRoaXMuc2hvd0FyZ3VtZW50cygpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZWxlY3RTbmFwTGF5b3V0KGxheW91dDogUXVlcnlEZXZ0b29sc1NuYXBMYXlvdXQpIHtcbiAgICB0aGlzLnNuYXBMYXlvdXQuc2V0KGxheW91dCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2VsZWN0UXVlcnlMaXN0TW9kZShtb2RlOiBRdWVyeUxpc3RNb2RlKSB7XG4gICAgdGhpcy5xdWVyeUxpc3RNb2RlLnNldChtb2RlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZWxlY3RRdWVyeShxdWVyeTogQW55UXVlcnkpIHtcbiAgICB0aGlzLnNlbGVjdGVkUXVlcnlJZC5zZXQocXVlcnkuX2lkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjbGVhclF1ZXJ5SGlzdG9yeSgpIHtcbiAgICB0aGlzLnF1ZXJ5SGlzdG9yeSQubmV4dChbXSk7XG4gIH1cbn1cbiIsIjxidXR0b24gKm5nSWY9XCIhaXNPcGVuKClcIiAoY2xpY2spPVwidG9nZ2xlT3BlbigpXCIgY2xhc3M9XCJldC1xdWVyeS1kZXZ0b29scy1vcGVuLWJ0biBldC1xZC1jaGlwXCI+T3BlbiBEZXZ0b29sczwvYnV0dG9uPlxuXG48ZGl2XG4gICpuZ0lmPVwiaXNPcGVuKClcIlxuICBbY2xhc3MuZXQtcXVlcnktZGV2dG9vbHMtY29udGFpbmVyLS10cmFuc3BhcmVudF09XCJpc1RyYW5zbHVjZW50KClcIlxuICBjbGFzcz1cImV0LXF1ZXJ5LWRldnRvb2xzLWNvbnRhaW5lciBldC1xdWVyeS1kZXZ0b29scy1jb250YWluZXItLXNuYXAte3sgc25hcExheW91dCgpIH19XCJcbj5cbiAgPGhlYWRlciBjbGFzcz1cImV0LXFkLWhlYWRlclwiPlxuICAgIDxoMyBjbGFzcz1cImV0LXFkLWhlYWRlcl9fdGl0bGVcIj5RdWVyeSBEZXZ0b29sczwvaDM+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtaGVhZGVyX19zZWxlY3RcIj5cbiAgICAgIDxsYWJlbCBmb3I9XCJldC1xdWVyeS1jbGllbnQtaW5zdGFuY2VcIj5DbGllbnQgaW5zdGFuY2U8L2xhYmVsPlxuICAgICAgPHNlbGVjdCBbZm9ybUNvbnRyb2xdPVwic2VsZWN0ZWRDbGllbnRJZEN0cmxcIiBpZD1cImV0LXF1ZXJ5LWNsaWVudC1pbnN0YW5jZVwiPlxuICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjbGllbnRDb25maWcgb2YgcXVlcnlDbGllbnRDb25maWdzOyBpbmRleCBhcyBpOyB0cmFja0J5OiB0cmFja0J5Q2xpZW50XCIgW3ZhbHVlXT1cImlcIj5cbiAgICAgICAgICB7eyBjbGllbnRDb25maWcuZGlzcGxheU5hbWUgPz8gY2xpZW50Q29uZmlnLmNsaWVudC5jb25maWcuYmFzZVJvdXRlIH19XG4gICAgICAgIDwvb3B0aW9uPlxuICAgICAgPC9zZWxlY3Q+XG4gICAgPC9kaXY+XG5cbiAgICA8YnV0dG9uIChjbGljayk9XCJ0b2dnbGVPcGVuKClcIiBjbGFzcz1cImV0LXFkLWJ0biBldC1xZC1idG4tc2Vjb25kYXJ5XCI+Q2xvc2U8L2J1dHRvbj5cbiAgPC9oZWFkZXI+XG5cbiAgPGRpdiBjbGFzcz1cImV0LXFkLXN1Yi1oZWFkZXJcIj5cbiAgICA8YnV0dG9uXG4gICAgICBbbmdDbGFzc109XCJ7ICdldC1xZC1jaGlwLXNlY29uZGFyeSc6ICFpc1RyYW5zbHVjZW50KCkgfVwiXG4gICAgICAoY2xpY2spPVwidG9nZ2xlVHJhbnNsdWNlbnQoKVwiXG4gICAgICBjbGFzcz1cImV0LXFkLWNoaXAgZXQtcWQtdHJhbnNsdWNlbnQtY2xpY2thYmxlXCJcbiAgICA+XG4gICAgICBUcmFuc2x1Y2VudFxuICAgIDwvYnV0dG9uPlxuICAgIDxkaXYgY2xhc3M9XCJldC1xZC1zdWItaGVhZGVyX19kaXZpZGVyXCI+PC9kaXY+XG4gICAgPGJ1dHRvblxuICAgICAgW25nQ2xhc3NdPVwieyAnZXQtcWQtY2hpcC1zZWNvbmRhcnknOiBzbmFwTGF5b3V0KCkgIT09ICdmdWxsJyB9XCJcbiAgICAgIChjbGljayk9XCJzZWxlY3RTbmFwTGF5b3V0KCdmdWxsJylcIlxuICAgICAgY2xhc3M9XCJldC1xZC1jaGlwXCJcbiAgICA+XG4gICAgICBGdWxsc2NyZWVuXG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgW25nQ2xhc3NdPVwieyAnZXQtcWQtY2hpcC1zZWNvbmRhcnknOiBzbmFwTGF5b3V0KCkgIT09ICd0b3AnIH1cIlxuICAgICAgKGNsaWNrKT1cInNlbGVjdFNuYXBMYXlvdXQoJ3RvcCcpXCJcbiAgICAgIGNsYXNzPVwiZXQtcWQtY2hpcFwiXG4gICAgPlxuICAgICAgVG9wXG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgW25nQ2xhc3NdPVwieyAnZXQtcWQtY2hpcC1zZWNvbmRhcnknOiBzbmFwTGF5b3V0KCkgIT09ICdib3R0b20nIH1cIlxuICAgICAgKGNsaWNrKT1cInNlbGVjdFNuYXBMYXlvdXQoJ2JvdHRvbScpXCJcbiAgICAgIGNsYXNzPVwiZXQtcWQtY2hpcFwiXG4gICAgPlxuICAgICAgQm90dG9tXG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgW25nQ2xhc3NdPVwieyAnZXQtcWQtY2hpcC1zZWNvbmRhcnknOiBzbmFwTGF5b3V0KCkgIT09ICdsZWZ0JyB9XCJcbiAgICAgIChjbGljayk9XCJzZWxlY3RTbmFwTGF5b3V0KCdsZWZ0JylcIlxuICAgICAgY2xhc3M9XCJldC1xZC1jaGlwXCJcbiAgICA+XG4gICAgICBMZWZ0XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgW25nQ2xhc3NdPVwieyAnZXQtcWQtY2hpcC1zZWNvbmRhcnknOiBzbmFwTGF5b3V0KCkgIT09ICdyaWdodCcgfVwiXG4gICAgICAoY2xpY2spPVwic2VsZWN0U25hcExheW91dCgncmlnaHQnKVwiXG4gICAgICBjbGFzcz1cImV0LXFkLWNoaXBcIlxuICAgID5cbiAgICAgIFJpZ2h0XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9XCJzZWxlY3RlZENsaWVudENvbmZpZygpIGFzIGNmZ1wiIGNsYXNzPVwiZXQtcWQtY2xpZW50XCI+XG4gICAgPHAgY2xhc3M9XCJldC1xZC1jbGllbnRfX3RpdGxlXCI+e3sgY2ZnLmRpc3BsYXlOYW1lID8/IGNmZy5jbGllbnQuY29uZmlnLmJhc2VSb3V0ZSB9fTwvcD5cblxuICAgIDxkaXYgY2xhc3M9XCJldC1xZC1jbGllbnRfX2FjdGlvbnNcIj5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cImNmZy5jbGllbnQuX3N0b3JlLnJlZnJlc2hRdWVyaWVzSW5Vc2UoKVwiIGNsYXNzPVwiZXQtcWQtY2hpcFwiPlJlZnJlc2ggYWxsPC9idXR0b24+XG4gICAgICA8YnV0dG9uIChjbGljayk9XCJjZmcuY2xpZW50Ll9zdG9yZS5yZWZyZXNoUXVlcmllc0luVXNlKHsgaWdub3JlQ2FjaGVWYWxpZGl0eTogdHJ1ZSB9KVwiIGNsYXNzPVwiZXQtcWQtY2hpcFwiPlxuICAgICAgICBSZWZyZXNoIGFsbCAoaWdub3JlIGNhY2hlcylcbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAoY2xpY2spPVwiY2ZnLmNsaWVudC5fc3RvcmUucmVmcmVzaFF1ZXJpZXNJblVzZSh7IGlnbm9yZUNhY2hlVmFsaWRpdHk6IHRydWUsIHB1cmdlVW51c2VkOiB0cnVlIH0pXCJcbiAgICAgICAgY2xhc3M9XCJldC1xZC1jaGlwXCJcbiAgICAgID5cbiAgICAgICAgUmVmcmVzaCBhbGwgKGlnbm9yZSBjYWNoZXMgJiBwdXJnZSB1bnVzZWQpXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdJZj1cInNlbGVjdGVkQ2xpZW50Q29uZmlnKCkgYXMgY2ZnXCIgY2xhc3M9XCJldC1xZC1xdWVyaWVzXCI+XG4gICAgPHAgY2xhc3M9XCJldC1xZC1xdWVyaWVzX190aXRsZVwiPlF1ZXJ5IGJyb3dzZXI8L3A+XG4gICAgPGRpdiBjbGFzcz1cImV0LXFkLXF1ZXJpZXNfX2FjdGlvbnNcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgW25nQ2xhc3NdPVwieyAnZXQtcWQtY2hpcC1zZWNvbmRhcnknOiBxdWVyeUxpc3RNb2RlKCkgIT09ICdsaXZlJyB9XCJcbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdFF1ZXJ5TGlzdE1vZGUoJ2xpdmUnKVwiXG4gICAgICAgIGNsYXNzPVwiZXQtcWQtY2hpcCBldC1xZC1jaGlwLWJvcmRlcmVkXCJcbiAgICAgID5cbiAgICAgICAgTGl2ZSAoe3sgcXVlcmllcygpPy5sZW5ndGggPz8gMCB9fSlcbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBbbmdDbGFzc109XCJ7ICdldC1xZC1jaGlwLXNlY29uZGFyeSc6IHF1ZXJ5TGlzdE1vZGUoKSAhPT0gJ2hpc3RvcnknIH1cIlxuICAgICAgICAoY2xpY2spPVwic2VsZWN0UXVlcnlMaXN0TW9kZSgnaGlzdG9yeScpXCJcbiAgICAgICAgY2xhc3M9XCJldC1xZC1jaGlwIGV0LXFkLWNoaXAtYm9yZGVyZWRcIlxuICAgICAgPlxuICAgICAgICBIaXN0b3J5ICh7eyAocXVlcnlIaXN0b3J5JCB8IGFzeW5jKT8ubGVuZ3RoID8/IDAgfX0vNTApXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJxdWVyeUxpc3RNb2RlKCkgPT09ICdoaXN0b3J5J1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtcXVlcmllc19fZGl2aWRlclwiPjwvZGl2PlxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjbGVhclF1ZXJ5SGlzdG9yeSgpXCIgY2xhc3M9XCJldC1xZC1jaGlwIGV0LXFkLWNoaXAtYm9yZGVyZWRcIj5DbGVhciBoaXN0b3J5PC9idXR0b24+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJldC1xZC1xdWVyaWVzX19icm93c2VyXCI+XG4gICAgICA8dWwgKm5nSWY9XCJxdWVyeUxpc3RNb2RlKCkgPT09ICdsaXZlJ1wiIGNsYXNzPVwiZXQtcWQtcXVlcmllc19fYnJvd3Nlci1saXN0XCI+XG4gICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgcXVlcnkgb2YgcXVlcmllcygpOyB0cmFja0J5OiB0cmFja0J5UXVlcnlcIj5cbiAgICAgICAgICA8YnV0dG9uIFtjbGFzcy5ldC1xZC1xdWVyeS0tYWN0aXZlXT1cInNlbGVjdGVkUXVlcnkoKT8uX2lkID09PSBxdWVyeS5faWRcIiAoY2xpY2spPVwic2VsZWN0UXVlcnkocXVlcnkpXCI+XG4gICAgICAgICAgICA8c3Bhbj4ge3sgcXVlcnkuX3F1ZXJ5Q29uZmlnLm1ldGhvZCB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuPiB7eyBxdWVyeSB8IHF1ZXJ5U2hvcnROYW1lIH19PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2xpPlxuICAgICAgPC91bD5cbiAgICAgIDx1bCAqbmdJZj1cInF1ZXJ5TGlzdE1vZGUoKSA9PT0gJ2hpc3RvcnknXCIgY2xhc3M9XCJldC1xZC1xdWVyaWVzX19icm93c2VyLWxpc3RcIj5cbiAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBxdWVyeSBvZiBxdWVyeUhpc3RvcnkkIHwgYXN5bmM7IHRyYWNrQnk6IHRyYWNrQnlRdWVyeVwiPlxuICAgICAgICAgIDxidXR0b24gW2NsYXNzLmV0LXFkLXF1ZXJ5LS1hY3RpdmVdPVwic2VsZWN0ZWRRdWVyeSgpPy5faWQgPT09IHF1ZXJ5Ll9pZFwiIChjbGljayk9XCJzZWxlY3RRdWVyeShxdWVyeSlcIj5cbiAgICAgICAgICAgIDxzcGFuPiB7eyBxdWVyeS5fcXVlcnlDb25maWcubWV0aG9kIH19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+IHt7IHF1ZXJ5IHwgcXVlcnlTaG9ydE5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbGk+XG4gICAgICA8L3VsPlxuICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLXF1ZXJpZXNfX2Jyb3dzZXItZGV0YWlsXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFF1ZXJ5KCkgYXMgcXVlcnlcIj5cbiAgICAgICAgICA8cCBjbGFzcz1cImV0LXFkLXF1ZXJpZXNfX2Jyb3dzZXItZGV0YWlsX190aXRsZVwiPlxuICAgICAgICAgICAge3sgcXVlcnkuX3F1ZXJ5Q29uZmlnLm1ldGhvZCB9fSB7eyBxdWVyeS5fcm91dGVXaXRoUGFyYW1zIH19XG4gICAgICAgICAgPC9wPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLXF1ZXJpZXNfX2FjdGlvbnNcIj5cbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInF1ZXJ5LmV4ZWN1dGUoKVwiIGNsYXNzPVwiZXQtcWQtY2hpcCBldC1xZC1jaGlwLWJvcmRlcmVkXCI+RXhlY3V0ZTwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicXVlcnkuZXhlY3V0ZSh7IHNraXBDYWNoZTogdHJ1ZSB9KVwiIGNsYXNzPVwiZXQtcWQtY2hpcCBldC1xZC1jaGlwLWJvcmRlcmVkXCI+XG4gICAgICAgICAgICAgIEV4ZWN1dGUgKGlnbm9yZSBjYWNoZSlcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJxdWVyeS5hYm9ydCgpXCIgY2xhc3M9XCJldC1xZC1jaGlwIGV0LXFkLWNoaXAtYm9yZGVyZWRcIj5BYm9ydDwvYnV0dG9uPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLXF1ZXJpZXNfX2RpdmlkZXJcIj48L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZXQtcWQtY2hpcC1zZWNvbmRhcnknOiAhcXVlcnkuaXNQb2xsaW5nIH1cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwicXVlcnkucG9sbCh7IGludGVydmFsOiA1MDAwLCB0YWtlVW50aWw6IF9kZXN0cm95JCB9KVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZXQtcWQtY2hpcCBldC1xZC1jaGlwLWJvcmRlcmVkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgUG9sbFxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZXQtcWQtY2hpcC1zZWNvbmRhcnknOiBxdWVyeS5pc1BvbGxpbmcgfVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJxdWVyeS5zdG9wUG9sbGluZygpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJldC1xZC1jaGlwIGV0LXFkLWNoaXAtYm9yZGVyZWRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBTdG9wIHBvbGxpbmdcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInF1ZXJ5LmlzUG9sbGluZyB8fCBxdWVyeS5faXNQb2xsaW5nUGF1c2VkXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInF1ZXJ5LnBhdXNlUG9sbGluZygpXCIgY2xhc3M9XCJldC1xZC1jaGlwIGV0LXFkLWNoaXAtc2Vjb25kYXJ5IGV0LXFkLWNoaXAtYm9yZGVyZWRcIj5cbiAgICAgICAgICAgICAgICBQYXVzZSBwb2xsaW5nXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJxdWVyeS5yZXN1bWVQb2xsaW5nKClcIiBjbGFzcz1cImV0LXFkLWNoaXAgZXQtcWQtY2hpcC1zZWNvbmRhcnkgZXQtcWQtY2hpcC1ib3JkZXJlZFwiPlxuICAgICAgICAgICAgICAgIFJlc3VtZSBwb2xsaW5nXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICA8cD5TdGF0ZSB0eXBlPC9wPlxuICAgICAgICAgICAgICA8cHJlPnt7IHF1ZXJ5LnJhd1N0YXRlLnR5cGUgfX08L3ByZT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgIDxwPkRlcGVuZGVudHM8L3A+XG4gICAgICAgICAgICAgIDxwcmU+e3sgcXVlcnkuX2RlcGVuZGVudHMgfCBqc29uIH19PC9wcmU+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICA8cD5JcyBleHBpcmVkPC9wPlxuICAgICAgICAgICAgICA8cHJlPnt7IHF1ZXJ5LmlzRXhwaXJlZCB9fTwvcHJlPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldC1xZC1saXN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgPHA+SXMgaW4gdXNlPC9wPlxuICAgICAgICAgICAgICA8cHJlPnt7IHF1ZXJ5LmlzSW5Vc2UgfX08L3ByZT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgIDxwPlN1YnNjcmliZXIgY291bnQ8L3A+XG4gICAgICAgICAgICAgIDxwcmU+e3sgcXVlcnkuX3N1YnNjcmliZXJDb3VudCB9fTwvcHJlPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldC1xZC1saXN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgPHA+SXMgcG9sbGluZzwvcD5cbiAgICAgICAgICAgICAgPHByZT57eyBxdWVyeS5pc1BvbGxpbmcgfX08L3ByZT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgIDxwPklzIHBvbGxpbmcgcGF1c2VkPC9wPlxuICAgICAgICAgICAgICA8cHJlPnt7IHF1ZXJ5Ll9pc1BvbGxpbmdQYXVzZWQgfX08L3ByZT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgIDxwPkVuYWJsZSBzbWFydCBwb2xsaW5nPC9wPlxuICAgICAgICAgICAgICA8cHJlPnt7IHF1ZXJ5Ll9lbmFibGVTbWFydFBvbGxpbmcgfX08L3ByZT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgIDxwPlF1ZXJ5IHN0b3JlIGtleTwvcD5cbiAgICAgICAgICAgICAgPHByZT57eyBxdWVyeS5fcXVlcnlTdG9yZUtleSB9fTwvcHJlPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldC1xZC1saXN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgPHA+QXJndW1lbnRzPC9wPlxuXG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZXQtcWQtY2hpcC1zZWNvbmRhcnknOiAhc2hvd0FyZ3VtZW50cygpIH1cIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNob3dBcmd1bWVudHMoKVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImV0LXFkLWNoaXAgZXQtcWQtY2hpcC1ib3JkZXJlZFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgVG9nZ2xlXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8cHJlICpuZ0lmPVwic2hvd0FyZ3VtZW50cygpXCI+e3sgcXVlcnkuX2FyZ3VtZW50cyB8IGpzb24gfX08L3ByZT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgIDxwPlN0YXRlPC9wPlxuICAgICAgICAgICAgICA8cD48aT4gV2FybmluZywgdGhpcyB3aWxsIGNhdXNlIGEgc3Vic2NyaXB0aW9uIGlmIHNob3duITwvaT48L3A+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZXQtcWQtY2hpcC1zZWNvbmRhcnknOiAhc2hvd1Jlc3BvbnNlKCkgfVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2hvd1Jlc3BvbnNlKClcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldC1xZC1jaGlwIGV0LXFkLWNoaXAtYm9yZGVyZWRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIFRvZ2dsZVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPHByZSAqbmdJZj1cInNob3dSZXNwb25zZSgpXCI+e3sgcXVlcnkuc3RhdGUkIHwgYXN5bmMgfCBqc29uIH19PC9wcmU+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICA8cD5SYXcgc3RhdGU8L3A+XG4gICAgICAgICAgICAgIDxwPjxpPiBUaGUgcXVlcnkgc3RhdGUgdW5hZmZlY3RlZCBieSBlbnRpdHkgc3RvcmVzPC9pPjwvcD5cblxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2V0LXFkLWNoaXAtc2Vjb25kYXJ5JzogIXNob3dSYXdSZXNwb25zZSgpIH1cIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNob3dSYXdSZXNwb25zZSgpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXQtcWQtY2hpcCBldC1xZC1jaGlwLWJvcmRlcmVkXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBUb2dnbGVcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxwcmUgKm5nSWY9XCJzaG93UmF3UmVzcG9uc2UoKVwiPnt7IHF1ZXJ5LnJhd1N0YXRlIHwganNvbiB9fTwvcHJlPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldC1xZC1saXN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgPHA+UXVlcnkgY29uZmlnPC9wPlxuXG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZXQtcWQtY2hpcC1zZWNvbmRhcnknOiAhc2hvd1F1ZXJ5Q29uZmlnKCkgfVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2hvd1F1ZXJ5Q29uZmlnKClcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldC1xZC1jaGlwIGV0LXFkLWNoaXAtYm9yZGVyZWRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIFRvZ2dsZVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPHByZSAqbmdJZj1cInNob3dRdWVyeUNvbmZpZygpXCI+e3sgc3RyaW5naWZpZWRRdWVyeUNvbmZpZygpIHwganNvbiB9fTwvcHJlPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhIXF1ZXJ5Ll9xdWVyeUNvbmZpZy5lbnRpdHlcIiBjbGFzcz1cImV0LXFkLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICA8cD5FbnRpdHkgc3RvcmUgdmFsdWU8L3A+XG5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdldC1xZC1jaGlwLXNlY29uZGFyeSc6ICFzaG93RW50aXR5U3RvcmVWYWx1ZSgpIH1cIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNob3dFbnRpdHlTdG9yZVZhbHVlKClcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldC1xZC1jaGlwIGV0LXFkLWNoaXAtYm9yZGVyZWRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIFRvZ2dsZVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPHByZSAqbmdJZj1cInNob3dFbnRpdHlTdG9yZVZhbHVlKClcIj57eyBzZWxlY3RlZFF1ZXJ5RW50aXR5U3RvcmVWYWx1ZSQgfCBhc3luYyB8IGpzb24gfX08L3ByZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
221
|
+
}, imports: [AsyncPipe, JsonPipe, ReactiveFormsModule, NgClass, QueryShortNamePipe], template: "@if (!isOpen()) {\n <button (click)=\"toggleOpen()\" class=\"et-query-devtools-open-btn et-qd-chip\">Open Devtools</button>\n}\n\n@if (isOpen()) {\n <div\n [class.et-query-devtools-container--transparent]=\"isTranslucent()\"\n class=\"et-query-devtools-container et-query-devtools-container--snap-{{ snapLayout() }}\"\n >\n <header class=\"et-qd-header\">\n <h3 class=\"et-qd-header__title\">Query Devtools</h3>\n\n <div class=\"et-qd-header__select\">\n <label for=\"et-query-client-instance\">Client instance</label>\n <select [formControl]=\"selectedClientIdCtrl\" id=\"et-query-client-instance\">\n @for (clientConfig of queryClientConfigs; track trackByClient(i, clientConfig); let i = $index) {\n <option [value]=\"i\">\n {{ clientConfig.displayName ?? clientConfig.client.config.baseRoute }}\n </option>\n }\n </select>\n </div>\n\n <button (click)=\"toggleOpen()\" class=\"et-qd-btn et-qd-btn-secondary\">Close</button>\n </header>\n\n <div class=\"et-qd-sub-header\">\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !isTranslucent() }\"\n (click)=\"toggleTranslucent()\"\n class=\"et-qd-chip et-qd-translucent-clickable\"\n >\n Translucent\n </button>\n <div class=\"et-qd-sub-header__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'full' }\"\n (click)=\"selectSnapLayout('full')\"\n class=\"et-qd-chip\"\n >\n Fullscreen\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'top' }\"\n (click)=\"selectSnapLayout('top')\"\n class=\"et-qd-chip\"\n >\n Top\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'bottom' }\"\n (click)=\"selectSnapLayout('bottom')\"\n class=\"et-qd-chip\"\n >\n Bottom\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'left' }\"\n (click)=\"selectSnapLayout('left')\"\n class=\"et-qd-chip\"\n >\n Left\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': snapLayout() !== 'right' }\"\n (click)=\"selectSnapLayout('right')\"\n class=\"et-qd-chip\"\n >\n Right\n </button>\n </div>\n\n @if (selectedClientConfig(); as cfg) {\n <div class=\"et-qd-client\">\n <p class=\"et-qd-client__title\">{{ cfg.displayName ?? cfg.client.config.baseRoute }}</p>\n\n <div class=\"et-qd-client__actions\">\n <button (click)=\"cfg.client._store.refreshQueriesInUse()\" class=\"et-qd-chip\">Refresh all</button>\n <button (click)=\"cfg.client._store.refreshQueriesInUse({ ignoreCacheValidity: true })\" class=\"et-qd-chip\">\n Refresh all (ignore caches)\n </button>\n <button\n (click)=\"cfg.client._store.refreshQueriesInUse({ ignoreCacheValidity: true, purgeUnused: true })\"\n class=\"et-qd-chip\"\n >\n Refresh all (ignore caches & purge unused)\n </button>\n </div>\n </div>\n }\n\n @if (selectedClientConfig(); as cfg) {\n <div class=\"et-qd-queries\">\n <p class=\"et-qd-queries__title\">Query browser</p>\n <div class=\"et-qd-queries__actions\">\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': queryListMode() !== 'live' }\"\n (click)=\"selectQueryListMode('live')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Live ({{ queries()?.length ?? 0 }})\n </button>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': queryListMode() !== 'history' }\"\n (click)=\"selectQueryListMode('history')\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n History ({{ (queryHistory$ | async)?.length ?? 0 }}/50)\n </button>\n @if (queryListMode() === 'history') {\n <div class=\"et-qd-queries__divider\"></div>\n <button (click)=\"clearQueryHistory()\" class=\"et-qd-chip et-qd-chip-bordered\">Clear history</button>\n }\n </div>\n\n <div class=\"et-qd-queries__browser\">\n @if (queryListMode() === 'live') {\n <ul class=\"et-qd-queries__browser-list\">\n @for (query of queries(); track trackByQuery($index, query)) {\n <li>\n <button [class.et-qd-query--active]=\"selectedQuery()?._id === query._id\" (click)=\"selectQuery(query)\">\n <span> {{ query._queryConfig.method }}</span>\n <span> {{ query | queryShortName }}</span>\n </button>\n </li>\n }\n </ul>\n }\n @if (queryListMode() === 'history') {\n <ul class=\"et-qd-queries__browser-list\">\n @for (query of queryHistory$ | async; track trackByQuery($index, query)) {\n <li>\n <button [class.et-qd-query--active]=\"selectedQuery()?._id === query._id\" (click)=\"selectQuery(query)\">\n <span> {{ query._queryConfig.method }}</span>\n <span> {{ query | queryShortName }}</span>\n </button>\n </li>\n }\n </ul>\n }\n <div class=\"et-qd-queries__browser-detail\">\n @if (selectedQuery(); as query) {\n <p class=\"et-qd-queries__browser-detail__title\">\n {{ query._queryConfig.method }} {{ query._routeWithParams }}\n </p>\n\n <div class=\"et-qd-queries__actions\">\n <button (click)=\"query.execute()\" class=\"et-qd-chip et-qd-chip-bordered\">Execute</button>\n <button (click)=\"query.execute({ skipCache: true })\" class=\"et-qd-chip et-qd-chip-bordered\">\n Execute (ignore cache)\n </button>\n\n <button (click)=\"query.abort()\" class=\"et-qd-chip et-qd-chip-bordered\">Abort</button>\n <div class=\"et-qd-queries__divider\"></div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !query.isPolling }\"\n (click)=\"query.poll({ interval: 5000, takeUntil: _destroy$ })\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Poll\n </button>\n\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': query.isPolling }\"\n (click)=\"query.stopPolling()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Stop polling\n </button>\n @if (query.isPolling || query._isPollingPaused) {\n <button (click)=\"query.pausePolling()\" class=\"et-qd-chip et-qd-chip-secondary et-qd-chip-bordered\">\n Pause polling\n </button>\n <button (click)=\"query.resumePolling()\" class=\"et-qd-chip et-qd-chip-secondary et-qd-chip-bordered\">\n Resume polling\n </button>\n }\n </div>\n\n <div class=\"et-qd-list\">\n <div class=\"et-qd-list-item\">\n <p>State type</p>\n <pre>{{ query.rawState.type }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Dependents</p>\n <pre>{{ query._dependents | json }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is expired</p>\n <pre>{{ query.isExpired }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is in use</p>\n <pre>{{ query.isInUse }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Subscriber count</p>\n <pre>{{ query._subscriberCount }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is polling</p>\n <pre>{{ query.isPolling }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Is polling paused</p>\n <pre>{{ query._isPollingPaused }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Enable smart polling</p>\n <pre>{{ query._enableSmartPolling }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Query store key</p>\n <pre>{{ query._queryStoreKey }}</pre>\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Arguments</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showArguments() }\"\n (click)=\"toggleShowArguments()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showArguments()) {\n <pre>{{ query._arguments | json }}</pre>\n }\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>State</p>\n <p><i> Warning, this will cause a subscription if shown!</i></p>\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showResponse() }\"\n (click)=\"toggleShowResponse()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showResponse()) {\n <pre>{{ query.state$ | async | json }}</pre>\n }\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Raw state</p>\n <p><i> The query state unaffected by entity stores</i></p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showRawResponse() }\"\n (click)=\"toggleShowRawResponse()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showRawResponse()) {\n <pre>{{ query.rawState | json }}</pre>\n }\n </div>\n\n <div class=\"et-qd-list-item\">\n <p>Query config</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showQueryConfig() }\"\n (click)=\"toggleShowQueryConfig()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showQueryConfig()) {\n <pre>{{ stringifiedQueryConfig() | json }}</pre>\n }\n </div>\n\n @if (!!query._queryConfig.entity) {\n <div class=\"et-qd-list-item\">\n <p>Entity store value</p>\n\n <div>\n <button\n [ngClass]=\"{ 'et-qd-chip-secondary': !showEntityStoreValue() }\"\n (click)=\"toggleShowEntityStoreValue()\"\n class=\"et-qd-chip et-qd-chip-bordered\"\n >\n Toggle\n </button>\n </div>\n @if (showEntityStoreValue()) {\n <pre>{{ selectedQueryEntityStoreValue$ | async | json }}</pre>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n}\n", styles: [":host{position:fixed;top:0;z-index:1000000;font-size:14px;color:#fff}.et-query-devtools-container{position:fixed;inset:0;background-color:#25292e;z-index:10000;overflow:auto;font-family:monospace;display:grid;grid-template-rows:auto auto auto minmax(0,1fr)}.et-query-devtools-container.et-query-devtools-container--transparent{opacity:.25;pointer-events:none}.et-query-devtools-container.et-query-devtools-container--transparent .et-query-devtools-translucent-btn{pointer-events:all}.et-query-devtools-container.et-query-devtools-container--snap-left{inset-inline-start:0;inset-block-start:0;inset-block-end:0;width:50%;border-right:1px solid rgb(37,41,46)}.et-query-devtools-container.et-query-devtools-container--snap-right{inset-inline-start:unset;inset-inline-end:0;inset-block-start:0;inset-block-end:0;width:50%;border-left:1px solid rgb(37,41,46)}.et-query-devtools-container.et-query-devtools-container--snap-top{inset-inline-start:0;inset-block-start:0;inset-inline-end:0;height:50%;border-bottom:1px solid rgb(37,41,46)}.et-query-devtools-container.et-query-devtools-container--snap-bottom{inset-inline-start:0;inset-block-start:unset;inset-block-end:0;inset-inline-end:0;height:50%;border-top:1px solid rgb(37,41,46)}.et-query-devtools-open-btn{position:fixed;inset-inline-start:0;inset-block-start:0;z-index:9999;all:unset;font-family:monospace}.et-qd-header{background-color:#00ffa1;padding:12px;display:grid;grid-template-columns:1fr auto auto;gap:12px;align-items:center}.et-qd-header__title{color:#25292e;margin:0;font-size:22px}.et-qd-header__select{display:grid;background-color:#25292e;border-radius:10px;overflow:hidden}.et-qd-header__select select{width:250px;color:#fff;padding:3px 10px 2px;border:none;background-color:#25292e;font-family:monospace}.et-qd-header__select label{padding:3px 10px;color:#25292e;font-size:12px;font-weight:700;color:#fff;border-bottom:1px solid gray}.et-qd-sub-header{background-color:#00b371;padding:12px;display:flex;gap:12px;flex-wrap:wrap}.et-qd-sub-header__divider{width:1px;background-color:#25292e}.et-qd-btn{background-color:#00ffa1;color:#25292e;border:none;padding:12px;cursor:pointer;font-size:14px;font-weight:700;text-align:center;text-decoration:none;display:inline-block;width:100%;transition:all .3s ease-in-out;font-family:monospace;border-radius:10px}.et-qd-btn:hover{background-color:#00cc81}.et-qd-btn.et-qd-btn-secondary{background-color:#25292e;color:#00ffa1}.et-qd-btn.et-qd-btn-secondary:hover{background-color:#3c424a}.et-qd-chip{background-color:#00ffa1;color:#25292e;border:none;padding:4px 9px;cursor:pointer;font-size:12px;font-weight:700;text-align:center;text-decoration:none;display:inline-block;transition:all .3s ease-in-out;font-family:monospace;border-radius:10px}.et-qd-chip:hover{background-color:#00cc81}.et-qd-chip.et-qd-chip-secondary{background-color:#25292e;color:#00ffa1}.et-qd-chip.et-qd-chip-secondary:hover{background-color:#3c424a}.et-qd-chip.et-qd-chip-bordered{border:1px solid rgb(0,255,161)}.et-qd-translucent-clickable{pointer-events:all}.et-qd-client{border-bottom:1px solid #3c424a;padding:12px}.et-qd-client__title{margin:0;font-size:14px;color:#fff;font-weight:700}.et-qd-client__actions{display:flex;gap:12px;margin-top:12px}.et-qd-queries{padding:12px;display:grid;grid-template-rows:auto auto minmax(0,1fr)}.et-qd-queries__actions{display:flex;gap:12px;margin-top:12px;margin-bottom:16px}.et-qd-queries__title{margin:0;font-size:14px;color:#fff;font-weight:700}.et-qd-queries__divider{width:1px;background-color:#3c424a}.et-qd-queries__browser{display:grid;grid-template-columns:1fr minmax(0,3fr);margin-left:-12px;margin-right:-12px;border-top:1px solid #3c424a;margin-bottom:-12px}.et-qd-queries__browser-list{border-right:1px solid #3c424a;list-style:none;padding:0;margin:0;display:grid;grid-auto-flow:row;grid-auto-rows:55px;overflow-y:auto;overflow-x:hidden}.et-qd-queries__browser-list li{margin:0}.et-qd-queries__browser-list li button{all:unset;font-family:monospace;box-sizing:border-box;width:100%;border:none;border-bottom:1px solid #3c424a;background-color:#25292e;color:#fff;text-align:left;padding:12px;height:100%;transition:all .3s ease-in-out;cursor:pointer;display:grid;gap:2px}.et-qd-queries__browser-list li button span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.et-qd-queries__browser-list li button span:first-of-type{font-weight:700}.et-qd-queries__browser-list li button:hover,.et-qd-queries__browser-list li button.et-qd-query--active{background-color:#30363c}.et-qd-queries__browser-detail{padding:12px;overflow-y:auto;overflow-x:hidden}.et-qd-queries__browser-detail__title{margin:0;font-size:14px;color:#fff;font-weight:700}.et-qd-list{display:grid;gap:12px}.et-qd-list-item{display:grid}.et-qd-list-item p{font-weight:700;margin:0;padding-bottom:8px}.et-qd-list-item p+p{margin-top:-8px}.et-qd-list-item div+pre{margin-top:8px}.et-qd-list-item pre{margin:0;padding:4px;background-color:#0e1012;border-radius:4px;max-height:450px;overflow:auto}\n"] }]
|
|
222
|
+
}], ctorParameters: () => [] });
|
|
223
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZGV2dG9vbHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2RldnRvb2xzL2NvbXBvbmVudHMvcXVlcnktZGV2dG9vbHMvcXVlcnktZGV2dG9vbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2RldnRvb2xzL2NvbXBvbmVudHMvcXVlcnktZGV2dG9vbHMvcXVlcnktZGV2dG9vbHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0QsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUVULGlCQUFpQixFQUNqQixRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdEYsT0FBTyxFQUFZLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2pELE9BQU8sRUFBRSwyQkFBMkIsRUFBOEIs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Q0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFUyxnQkFBZ0IsQ0FBQyxNQUErQjtRQUN4RCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRVMsbUJBQW1CLENBQUMsSUFBbUI7UUFDL0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVTLFdBQVcsQ0FBQyxLQUFlO1FBQ25DLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRVMsaUJBQWlCO1FBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLENBQUM7OEdBaFRVLHNCQUFzQjtrR0FBdEIsc0JBQXNCLDRIQ3RDbkMsdW9ZQWdVQSxnOEpENVJZLFNBQVMseUNBQUUsUUFBUSw0Q0FBRSxtQkFBbUIscXRCQUFFLE9BQU8sK0VBQUUsa0JBQWtCOzsyRkFFcEUsc0JBQXNCO2tCQWJsQyxTQUFTOytCQUNFLG1CQUFtQixjQUdqQixJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLFNBQVMsUUFFcEM7d0JBQ0osS0FBSyxFQUFFLG1CQUFtQjtxQkFDM0IsV0FDUSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXN5bmNQaXBlLCBKc29uUGlwZSwgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgVHJhY2tCeUZ1bmN0aW9uLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBzaWduYWwsXG4gIHVudHJhY2tlZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQsIHRvT2JzZXJ2YWJsZSwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGNyZWF0ZURlc3Ryb3ksIG5leHRGcmFtZSB9IGZyb20gJ0BldGhsZXRlL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtYXAsIG9mLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVudGl0eVN0b3JlIH0gZnJvbSAnLi4vLi4vLi4vZW50aXR5JztcbmltcG9ydCB7IEFueVF1ZXJ5LCBpc0dxbFF1ZXJ5Q29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vcXVlcnknO1xuaW1wb3J0IHsgUXVlcnlTaG9ydE5hbWVQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMnO1xuaW1wb3J0IHsgUVVFUllfQ0xJRU5UX0RFVlRPT0xTX1RPS0VOLCBRdWVyeUNsaWVudERldnRvb2xzT3B0aW9ucyB9IGZyb20gJy4uLy4uL3V0aWxzJztcblxudHlwZSBRdWVyeURldnRvb2xzU25hcExheW91dCA9ICdmdWxsJyB8ICdsZWZ0JyB8ICdyaWdodCcgfCAnYm90dG9tJyB8ICd0b3AnO1xudHlwZSBRdWVyeUxpc3RNb2RlID0gJ2xpdmUnIHwgJ2hpc3RvcnknO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdldC1xdWVyeS1kZXZ0b29scycsXG4gIHRlbXBsYXRlVXJsOiAnLi9xdWVyeS1kZXZ0b29scy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3F1ZXJ5LWRldnRvb2xzLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5TaGFkb3dEb20sXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8taG9zdC1tZXRhZGF0YS1wcm9wZXJ0eVxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdldC1xdWVyeS1kZXZ0b29scycsXG4gIH0sXG4gIGltcG9ydHM6IFtBc3luY1BpcGUsIEpzb25QaXBlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBOZ0NsYXNzLCBRdWVyeVNob3J0TmFtZVBpcGVdLFxufSlcbmV4cG9ydCBjbGFzcyBRdWVyeURldnRvb2xzQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9kZXN0cm95JCA9IGNyZWF0ZURlc3Ryb3koKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcXVlcnlDbGllbnRDb25maWdzID0gaW5qZWN0KFFVRVJZX0NMSUVOVF9ERVZUT09MU19UT0tFTik7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzT3BlbiA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBpc1RyYW5zbHVjZW50ID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNuYXBMYXlvdXQgPSBzaWduYWw8UXVlcnlEZXZ0b29sc1NuYXBMYXlvdXQ+KCdmdWxsJyk7XG4gIHByb3RlY3RlZCByZWFkb25seSBxdWVyeUxpc3RNb2RlID0gc2lnbmFsPFF1ZXJ5TGlzdE1vZGU+KCdsaXZlJyk7XG5cbiAgcHJvdGVjdGVkIHNob3dSZXNwb25zZSA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCBzaG93UmF3UmVzcG9uc2UgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgc2hvd1F1ZXJ5Q29uZmlnID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvdGVjdGVkIHNob3dFbnRpdHlTdG9yZVZhbHVlID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvdGVjdGVkIHNob3dBcmd1bWVudHMgPSBzaWduYWwoZmFsc2UpO1xuXG4gIHByb3RlY3RlZCBzZWxlY3RlZENsaWVudElkQ3RybCA9IG5ldyBGb3JtQ29udHJvbCgwKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0ZWRDbGllbnRJZCA9IHRvU2lnbmFsKFxuICAgIHRoaXMuc2VsZWN0ZWRDbGllbnRJZEN0cmwudmFsdWVDaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKHRoaXMuc2VsZWN0ZWRDbGllbnRJZEN0cmwudmFsdWUpKSxcbiAgKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdGVkUXVlcnlJZCA9IHNpZ25hbDxudW1iZXIgfCBudWxsPihudWxsKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0ZWRDbGllbnRDb25maWcgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKHRoaXMucXVlcnlDbGllbnRDb25maWdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIHRoaXMucXVlcnlDbGllbnRDb25maWdzWzBdITtcbiAgICB9XG5cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRDbGllbnRJZCgpID8/IDA7XG5cbiAgICBjb25zdCBjZmcgPSB0aGlzLnF1ZXJ5Q2xpZW50Q29uZmlnc1tpbmRleF07XG5cbiAgICBpZiAoIWNmZykge1xuICAgICAgcmV0dXJuIHRoaXMucXVlcnlDbGllbnRDb25maWdzWzBdITtcbiAgICB9XG5cbiAgICByZXR1cm4gY2ZnO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcXVlcnlTdG9yZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLnNlbGVjdGVkQ2xpZW50Q29uZmlnKCk7XG5cbiAgICByZXR1cm4gY29uZmlnLmNsaWVudC5fc3RvcmU7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBxdWVyeVN0b3JlJCA9IHRvT2JzZXJ2YWJsZSh0aGlzLnF1ZXJ5U3RvcmUpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3F1ZXJpZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBbnlRdWVyeVtdPihbXSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBxdWVyaWVzID0gdG9TaWduYWwodGhpcy5fcXVlcmllcyQpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBzZWxlY3RlZFF1ZXJ5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGlkID0gdGhpcy5zZWxlY3RlZFF1ZXJ5SWQoKTtcbiAgICBjb25zdCBtb2RlID0gdGhpcy5xdWVyeUxpc3RNb2RlKCk7XG5cbiAgICBpZiAoaWQgPT09IG51bGwgfHwgIW1vZGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChtb2RlID09PSAnbGl2ZScpIHtcbiAgICAgIHJldHVybiB0aGlzLnF1ZXJpZXMoKT8uZmluZCgocSkgPT4gcS5faWQgPT09IGlkKSA/PyBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnF1ZXJ5SGlzdG9yeSQuZ2V0VmFsdWUoKT8uZmluZCgocSkgPT4gcS5faWQgPT09IGlkKSA/PyBudWxsO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0ZWRRdWVyeSQgPSB0b09ic2VydmFibGUodGhpcy5zZWxlY3RlZFF1ZXJ5KTtcblxuICBwcm90ZWN0ZWQgc2VsZWN0ZWRRdWVyeUVudGl0eVN0b3JlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5zZWxlY3RlZFF1ZXJ5KCk7XG5cbiAgICBpZiAoIXF1ZXJ5KSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiBxdWVyeS5zdG9yZSBhcyBFbnRpdHlTdG9yZTx1bmtub3duPiB8IG51bGw7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBzZWxlY3RlZFF1ZXJ5RW50aXR5U3RvcmUkID0gdG9PYnNlcnZhYmxlKHRoaXMuc2VsZWN0ZWRRdWVyeUVudGl0eVN0b3JlKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0ZWRRdWVyeUVudGl0eVN0b3JlVmFsdWUkID0gdGhpcy5zZWxlY3RlZFF1ZXJ5RW50aXR5U3RvcmUkLnBpcGUoXG4gICAgc3dpdGNoTWFwKFxuICAgICAgKHMpID0+XG4gICAgICAgIHM/Ll9jaGFuZ2UkLnBpcGUoXG4gICAgICAgICAgc3RhcnRXaXRoKCcnKSxcbiAgICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFzLl9kaWN0aW9uYXJ5KSByZXR1cm4gbnVsbDtcblxuICAgICAgICAgICAgcmV0dXJuIEFycmF5LmZyb20ocy5fZGljdGlvbmFyeSkucmVkdWNlKFxuICAgICAgICAgICAgICAob2JqLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgICBvYmpba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHt9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKSA/PyBvZihudWxsKSxcbiAgICApLFxuICApO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBxdWVyeUhpc3RvcnkkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBbnlRdWVyeVtdPihbXSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHN0cmluZ2lmaWVkUXVlcnlDb25maWcgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLnNlbGVjdGVkUXVlcnkoKTtcblxuICAgIGlmICghcXVlcnkpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgY2ZnID0gcXVlcnkuX3F1ZXJ5Q29uZmlnO1xuICAgIGNvbnN0IHJvdXRlID1cbiAgICAgIHR5cGVvZiBjZmcucm91dGUgPT09ICdzdHJpbmcnID8gY2ZnLnJvdXRlIDogY2ZnLnJvdXRlID8gY2ZnLnJvdXRlKHt9KS5yZXBsYWNlKC91bmRlZmluZWQvZywgJzpwYXJhbScpIDogbnVsbDtcblxuICAgIGNvbnN0IHNoYXJlZENmZyA9IHtcbiAgICAgIG1ldGhvZDogY2ZnLm1ldGhvZCxcbiAgICAgIHNlY3VyZTogY2ZnLnNlY3VyZSxcbiAgICAgIHJvdXRlLFxuICAgICAgcmVwb3J0UHJvZ3Jlc3M6IGNmZy5yZXBvcnRQcm9ncmVzcyxcbiAgICAgIHJlc3BvbnNlVHlwZTogY2ZnLnJlc3BvbnNlVHlwZSxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogY2ZnLndpdGhDcmVkZW50aWFscyxcbiAgICAgIGF1dG9SZWZyZXNoT246IGNmZy5hdXRvUmVmcmVzaE9uLFxuICAgICAgZW5hYmxlU21hcnRQb2xsaW5nOiBjZmcuZW5hYmxlU21hcnRQb2xsaW5nLFxuICAgICAgaGFzRW50aXR5U3RvcmU6ICEhY2ZnLmVudGl0eSxcbiAgICB9O1xuXG4gICAgaWYgKGlzR3FsUXVlcnlDb25maWcoY2ZnKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc2hhcmVkQ2ZnLFxuICAgICAgICBxdWVyeTogY2ZnLnF1ZXJ5LFxuICAgICAgICB0cmFuc2ZlclZpYTogY2ZnLnRyYW5zZmVyVmlhLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uc2hhcmVkQ2ZnLFxuICAgIH07XG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRDbGllbnRJZEN0cmwudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuY2xlYXJRdWVyeUhpc3RvcnkoKSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLnNlbGVjdGVkUXVlcnkkXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChxKSA9PiBxPy5fZGVwZW5kZW50c0NoYW5nZWQkID8/IG9mKG51bGwpKSxcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5xdWVyeVN0b3JlJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgocykgPT5cbiAgICAgICAgICBzLnN0b3JlQ2hhbmdlJC5waXBlKFxuICAgICAgICAgICAgc3RhcnRXaXRoKCcnKSxcbiAgICAgICAgICAgIG1hcCgoKSA9PiBzLl9zdG9yZSksXG4gICAgICAgICAgICB0YXAoKHMpID0+IHtcbiAgICAgICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9xdWVyaWVzJC5uZXh0KEFycmF5LmZyb20ocy52YWx1ZXMoKSkpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5xdWVyeVN0b3JlJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgocykgPT5cbiAgICAgICAgICBzLnF1ZXJ5Q3JlYXRlZCQucGlwZShcbiAgICAgICAgICAgIHRhcCgocXVlcnkpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgY3VycmVudEhpc3RvcnkgPSB0aGlzLnF1ZXJ5SGlzdG9yeSQuZ2V0VmFsdWUoKTtcblxuICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRIaXN0b3J5KSByZXR1cm47XG5cbiAgICAgICAgICAgICAgY29uc3QgY3VycmVudEhpc3RvcnlDbG9uZSA9IFsuLi5jdXJyZW50SGlzdG9yeV07XG5cbiAgICAgICAgICAgICAgaWYgKCFjdXJyZW50SGlzdG9yeS5zb21lKChxKSA9PiBxLl9pZCA9PT0gcXVlcnkuX2lkKSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRIaXN0b3J5Q2xvbmUudW5zaGlmdChxdWVyeSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjdXJyZW50SGlzdG9yeUNsb25lLnNwbGljZSg1MCk7XG5cbiAgICAgICAgICAgICAgdGhpcy5xdWVyeUhpc3RvcnkkLm5leHQoY3VycmVudEhpc3RvcnlDbG9uZSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMuX3F1ZXJpZXMkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChxdWVyaWVzKSA9PiB7XG4gICAgICAgICAgY29uc3QgY3VycmVudEhpc3RvcnkgPSB0aGlzLnF1ZXJ5SGlzdG9yeSQuZ2V0VmFsdWUoKTtcblxuICAgICAgICAgIGlmICghcXVlcmllcyB8fCAhY3VycmVudEhpc3RvcnkpIHJldHVybjtcblxuICAgICAgICAgIGNvbnN0IGN1cnJlbnRIaXN0b3J5Q2xvbmUgPSBbLi4uY3VycmVudEhpc3RvcnldO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBxdWVyeSBvZiBxdWVyaWVzKSB7XG4gICAgICAgICAgICBpZiAoIWN1cnJlbnRIaXN0b3J5Q2xvbmUuc29tZSgocSkgPT4gcS5faWQgPT09IHF1ZXJ5Ll9pZCkpIHtcbiAgICAgICAgICAgICAgY3VycmVudEhpc3RvcnlDbG9uZS51bnNoaWZ0KHF1ZXJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjdXJyZW50SGlzdG9yeUNsb25lLnNwbGljZSg1MCk7XG5cbiAgICAgICAgICB0aGlzLnF1ZXJ5SGlzdG9yeSQubmV4dChjdXJyZW50SGlzdG9yeUNsb25lKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRldnRvb2xDb25maWcgPSB7XG4gICAgICAgICAgaXNPcGVuOiB0aGlzLmlzT3BlbigpLFxuICAgICAgICAgIGlzVHJhbnNsdWNlbnQ6IHRoaXMuaXNUcmFuc2x1Y2VudCgpLFxuICAgICAgICAgIHNuYXBMYXlvdXQ6IHRoaXMuc25hcExheW91dCgpLFxuICAgICAgICAgIHNob3dSZXNwb25zZTogdGhpcy5zaG93UmVzcG9uc2UoKSxcbiAgICAgICAgICBzaG93UmF3UmVzcG9uc2U6IHRoaXMuc2hvd1Jhd1Jlc3BvbnNlKCksXG4gICAgICAgICAgc2hvd1F1ZXJ5Q29uZmlnOiB0aGlzLnNob3dRdWVyeUNvbmZpZygpLFxuICAgICAgICAgIHNob3dFbnRpdHlTdG9yZVZhbHVlOiB0aGlzLnNob3dFbnRpdHlTdG9yZVZhbHVlKCksXG4gICAgICAgICAgc2hvd0FyZ3VtZW50czogdGhpcy5zaG93QXJndW1lbnRzKCksXG4gICAgICAgICAgc2VsZWN0ZWRDbGllbnRJZDogdGhpcy5zZWxlY3RlZENsaWVudElkKCksXG4gICAgICAgICAgc2VsZWN0ZWRRdWVyeVBhdGg6IHRoaXMuc2VsZWN0ZWRRdWVyeUlkKCksXG4gICAgICAgICAgcXVlcnlMaXN0TW9kZTogdGhpcy5xdWVyeUxpc3RNb2RlKCksXG4gICAgICAgIH07XG5cbiAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdldGhsZXRlOnF1ZXJ5OmRldnRvb2xzJywgSlNPTi5zdHJpbmdpZnkoZGV2dG9vbENvbmZpZykpO1xuICAgICAgfSxcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcbiAgICApO1xuXG4gICAgY29uc3QgaW5pdGlhbENvbmZpZyA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXRobGV0ZTpxdWVyeTpkZXZ0b29scycpO1xuXG4gICAgaWYgKGluaXRpYWxDb25maWcpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoaW5pdGlhbENvbmZpZyk7XG5cbiAgICAgIHRoaXMuaXNPcGVuLnNldChwYXJzZWQuaXNPcGVuID8/IGZhbHNlKTtcbiAgICAgIHRoaXMuaXNUcmFuc2x1Y2VudC5zZXQocGFyc2VkLmlzVHJhbnNsdWNlbnQgPz8gZmFsc2UpO1xuICAgICAgdGhpcy5zbmFwTGF5b3V0LnNldChwYXJzZWQuc25hcExheW91dCA/PyAnZnVsbCcpO1xuICAgICAgdGhpcy5zaG93UmVzcG9uc2Uuc2V0KHBhcnNlZC5zaG93UmVzcG9uc2UgPz8gZmFsc2UpO1xuICAgICAgdGhpcy5zaG93UmF3UmVzcG9uc2Uuc2V0KHBhcnNlZC5zaG93UmF3UmVzcG9uc2UgPz8gZmFsc2UpO1xuICAgICAgdGhpcy5zaG93UXVlcnlDb25maWcuc2V0KHBhcnNlZC5zaG93UXVlcnlDb25maWcgPz8gZmFsc2UpO1xuICAgICAgdGhpcy5zaG93RW50aXR5U3RvcmVWYWx1ZS5zZXQocGFyc2VkLnNob3dFbnRpdHlTdG9yZVZhbHVlID8/IGZhbHNlKTtcbiAgICAgIHRoaXMuc2hvd0FyZ3VtZW50cy5zZXQocGFyc2VkLnNob3dBcmd1bWVudHMgPz8gZmFsc2UpO1xuICAgICAgdGhpcy5zZWxlY3RlZENsaWVudElkQ3RybC5zZXRWYWx1ZShwYXJzZWQuc2VsZWN0ZWRDbGllbnRJZCA/PyAwKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRRdWVyeUlkLnNldChwYXJzZWQuc2VsZWN0ZWRRdWVyeVBhdGggPz8gbnVsbCk7XG4gICAgICB0aGlzLnF1ZXJ5TGlzdE1vZGUuc2V0KHBhcnNlZC5xdWVyeUxpc3RNb2RlID8/ICdsaXZlJyk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHRyYWNrQnlDbGllbnQ6IFRyYWNrQnlGdW5jdGlvbjxRdWVyeUNsaWVudERldnRvb2xzT3B0aW9ucz4gPSAoXywgeyBjbGllbnQgfSkgPT4gY2xpZW50LmNvbmZpZy5iYXNlUm91dGU7XG4gIHByb3RlY3RlZCB0cmFja0J5UXVlcnk6IFRyYWNrQnlGdW5jdGlvbjxBbnlRdWVyeT4gPSAoXywgeyBfaWQgfSkgPT4gX2lkO1xuXG4gIHByb3RlY3RlZCB0b2dnbGVPcGVuKCkge1xuICAgIHRoaXMuaXNPcGVuLnNldCghdGhpcy5pc09wZW4oKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdG9nZ2xlVHJhbnNsdWNlbnQoKSB7XG4gICAgdGhpcy5pc1RyYW5zbHVjZW50LnNldCghdGhpcy5pc1RyYW5zbHVjZW50KCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRvZ2dsZVNob3dSZXNwb25zZSgpIHtcbiAgICB0aGlzLnNob3dSZXNwb25zZS5zZXQoIXRoaXMuc2hvd1Jlc3BvbnNlKCkpO1xuXG4gICAgbmV4dEZyYW1lKCgpID0+IHtcbiAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0b2dnbGVTaG93UXVlcnlDb25maWcoKSB7XG4gICAgdGhpcy5zaG93UXVlcnlDb25maWcuc2V0KCF0aGlzLnNob3dRdWVyeUNvbmZpZygpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0b2dnbGVTaG93UmF3UmVzcG9uc2UoKSB7XG4gICAgdGhpcy5zaG93UmF3UmVzcG9uc2Uuc2V0KCF0aGlzLnNob3dSYXdSZXNwb25zZSgpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0b2dnbGVTaG93RW50aXR5U3RvcmVWYWx1ZSgpIHtcbiAgICB0aGlzLnNob3dFbnRpdHlTdG9yZVZhbHVlLnNldCghdGhpcy5zaG93RW50aXR5U3RvcmVWYWx1ZSgpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0b2dnbGVTaG93QXJndW1lbnRzKCkge1xuICAgIHRoaXMuc2hvd0FyZ3VtZW50cy5zZXQoIXRoaXMuc2hvd0FyZ3VtZW50cygpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZWxlY3RTbmFwTGF5b3V0KGxheW91dDogUXVlcnlEZXZ0b29sc1NuYXBMYXlvdXQpIHtcbiAgICB0aGlzLnNuYXBMYXlvdXQuc2V0KGxheW91dCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2VsZWN0UXVlcnlMaXN0TW9kZShtb2RlOiBRdWVyeUxpc3RNb2RlKSB7XG4gICAgdGhpcy5xdWVyeUxpc3RNb2RlLnNldChtb2RlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZWxlY3RRdWVyeShxdWVyeTogQW55UXVlcnkpIHtcbiAgICB0aGlzLnNlbGVjdGVkUXVlcnlJZC5zZXQocXVlcnkuX2lkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjbGVhclF1ZXJ5SGlzdG9yeSgpIHtcbiAgICB0aGlzLnF1ZXJ5SGlzdG9yeSQubmV4dChbXSk7XG4gIH1cbn1cbiIsIkBpZiAoIWlzT3BlbigpKSB7XG4gIDxidXR0b24gKGNsaWNrKT1cInRvZ2dsZU9wZW4oKVwiIGNsYXNzPVwiZXQtcXVlcnktZGV2dG9vbHMtb3Blbi1idG4gZXQtcWQtY2hpcFwiPk9wZW4gRGV2dG9vbHM8L2J1dHRvbj5cbn1cblxuQGlmIChpc09wZW4oKSkge1xuICA8ZGl2XG4gICAgW2NsYXNzLmV0LXF1ZXJ5LWRldnRvb2xzLWNvbnRhaW5lci0tdHJhbnNwYXJlbnRdPVwiaXNUcmFuc2x1Y2VudCgpXCJcbiAgICBjbGFzcz1cImV0LXF1ZXJ5LWRldnRvb2xzLWNvbnRhaW5lciBldC1xdWVyeS1kZXZ0b29scy1jb250YWluZXItLXNuYXAte3sgc25hcExheW91dCgpIH19XCJcbiAgPlxuICAgIDxoZWFkZXIgY2xhc3M9XCJldC1xZC1oZWFkZXJcIj5cbiAgICAgIDxoMyBjbGFzcz1cImV0LXFkLWhlYWRlcl9fdGl0bGVcIj5RdWVyeSBEZXZ0b29sczwvaDM+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJldC1xZC1oZWFkZXJfX3NlbGVjdFwiPlxuICAgICAgICA8bGFiZWwgZm9yPVwiZXQtcXVlcnktY2xpZW50LWluc3RhbmNlXCI+Q2xpZW50IGluc3RhbmNlPC9sYWJlbD5cbiAgICAgICAgPHNlbGVjdCBbZm9ybUNvbnRyb2xdPVwic2VsZWN0ZWRDbGllbnRJZEN0cmxcIiBpZD1cImV0LXF1ZXJ5LWNsaWVudC1pbnN0YW5jZVwiPlxuICAgICAgICAgIEBmb3IgKGNsaWVudENvbmZpZyBvZiBxdWVyeUNsaWVudENvbmZpZ3M7IHRyYWNrIHRyYWNrQnlDbGllbnQoaSwgY2xpZW50Q29uZmlnKTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cImlcIj5cbiAgICAgICAgICAgICAge3sgY2xpZW50Q29uZmlnLmRpc3BsYXlOYW1lID8/IGNsaWVudENvbmZpZy5jbGllbnQuY29uZmlnLmJhc2VSb3V0ZSB9fVxuICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgfVxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8YnV0dG9uIChjbGljayk9XCJ0b2dnbGVPcGVuKClcIiBjbGFzcz1cImV0LXFkLWJ0biBldC1xZC1idG4tc2Vjb25kYXJ5XCI+Q2xvc2U8L2J1dHRvbj5cbiAgICA8L2hlYWRlcj5cblxuICAgIDxkaXYgY2xhc3M9XCJldC1xZC1zdWItaGVhZGVyXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgJ2V0LXFkLWNoaXAtc2Vjb25kYXJ5JzogIWlzVHJhbnNsdWNlbnQoKSB9XCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVRyYW5zbHVjZW50KClcIlxuICAgICAgICBjbGFzcz1cImV0LXFkLWNoaXAgZXQtcWQtdHJhbnNsdWNlbnQtY2xpY2thYmxlXCJcbiAgICAgID5cbiAgICAgICAgVHJhbnNsdWNlbnRcbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLXN1Yi1oZWFkZXJfX2RpdmlkZXJcIj48L2Rpdj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgW25nQ2xhc3NdPVwieyAnZXQtcWQtY2hpcC1zZWNvbmRhcnknOiBzbmFwTGF5b3V0KCkgIT09ICdmdWxsJyB9XCJcbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdFNuYXBMYXlvdXQoJ2Z1bGwnKVwiXG4gICAgICAgIGNsYXNzPVwiZXQtcWQtY2hpcFwiXG4gICAgICA+XG4gICAgICAgIEZ1bGxzY3JlZW5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBbbmdDbGFzc109XCJ7ICdldC1xZC1jaGlwLXNlY29uZGFyeSc6IHNuYXBMYXlvdXQoKSAhPT0gJ3RvcCcgfVwiXG4gICAgICAgIChjbGljayk9XCJzZWxlY3RTbmFwTGF5b3V0KCd0b3AnKVwiXG4gICAgICAgIGNsYXNzPVwiZXQtcWQtY2hpcFwiXG4gICAgICA+XG4gICAgICAgIFRvcFxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgJ2V0LXFkLWNoaXAtc2Vjb25kYXJ5Jzogc25hcExheW91dCgpICE9PSAnYm90dG9tJyB9XCJcbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdFNuYXBMYXlvdXQoJ2JvdHRvbScpXCJcbiAgICAgICAgY2xhc3M9XCJldC1xZC1jaGlwXCJcbiAgICAgID5cbiAgICAgICAgQm90dG9tXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgW25nQ2xhc3NdPVwieyAnZXQtcWQtY2hpcC1zZWNvbmRhcnknOiBzbmFwTGF5b3V0KCkgIT09ICdsZWZ0JyB9XCJcbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdFNuYXBMYXlvdXQoJ2xlZnQnKVwiXG4gICAgICAgIGNsYXNzPVwiZXQtcWQtY2hpcFwiXG4gICAgICA+XG4gICAgICAgIExlZnRcbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBbbmdDbGFzc109XCJ7ICdldC1xZC1jaGlwLXNlY29uZGFyeSc6IHNuYXBMYXlvdXQoKSAhPT0gJ3JpZ2h0JyB9XCJcbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdFNuYXBMYXlvdXQoJ3JpZ2h0JylcIlxuICAgICAgICBjbGFzcz1cImV0LXFkLWNoaXBcIlxuICAgICAgPlxuICAgICAgICBSaWdodFxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICBAaWYgKHNlbGVjdGVkQ2xpZW50Q29uZmlnKCk7IGFzIGNmZykge1xuICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLWNsaWVudFwiPlxuICAgICAgICA8cCBjbGFzcz1cImV0LXFkLWNsaWVudF9fdGl0bGVcIj57eyBjZmcuZGlzcGxheU5hbWUgPz8gY2ZnLmNsaWVudC5jb25maWcuYmFzZVJvdXRlIH19PC9wPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJldC1xZC1jbGllbnRfX2FjdGlvbnNcIj5cbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjZmcuY2xpZW50Ll9zdG9yZS5yZWZyZXNoUXVlcmllc0luVXNlKClcIiBjbGFzcz1cImV0LXFkLWNoaXBcIj5SZWZyZXNoIGFsbDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNmZy5jbGllbnQuX3N0b3JlLnJlZnJlc2hRdWVyaWVzSW5Vc2UoeyBpZ25vcmVDYWNoZVZhbGlkaXR5OiB0cnVlIH0pXCIgY2xhc3M9XCJldC1xZC1jaGlwXCI+XG4gICAgICAgICAgICBSZWZyZXNoIGFsbCAoaWdub3JlIGNhY2hlcylcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwiY2ZnLmNsaWVudC5fc3RvcmUucmVmcmVzaFF1ZXJpZXNJblVzZSh7IGlnbm9yZUNhY2hlVmFsaWRpdHk6IHRydWUsIHB1cmdlVW51c2VkOiB0cnVlIH0pXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZXQtcWQtY2hpcFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgUmVmcmVzaCBhbGwgKGlnbm9yZSBjYWNoZXMgJiBwdXJnZSB1bnVzZWQpXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgQGlmIChzZWxlY3RlZENsaWVudENvbmZpZygpOyBhcyBjZmcpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJldC1xZC1xdWVyaWVzXCI+XG4gICAgICAgIDxwIGNsYXNzPVwiZXQtcWQtcXVlcmllc19fdGl0bGVcIj5RdWVyeSBicm93c2VyPC9wPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtcXVlcmllc19fYWN0aW9uc1wiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2V0LXFkLWNoaXAtc2Vjb25kYXJ5JzogcXVlcnlMaXN0TW9kZSgpICE9PSAnbGl2ZScgfVwiXG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0UXVlcnlMaXN0TW9kZSgnbGl2ZScpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZXQtcWQtY2hpcCBldC1xZC1jaGlwLWJvcmRlcmVkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBMaXZlICh7eyBxdWVyaWVzKCk/Lmxlbmd0aCA/PyAwIH19KVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2V0LXFkLWNoaXAtc2Vjb25kYXJ5JzogcXVlcnlMaXN0TW9kZSgpICE9PSAnaGlzdG9yeScgfVwiXG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0UXVlcnlMaXN0TW9kZSgnaGlzdG9yeScpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZXQtcWQtY2hpcCBldC1xZC1jaGlwLWJvcmRlcmVkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBIaXN0b3J5ICh7eyAocXVlcnlIaXN0b3J5JCB8IGFzeW5jKT8ubGVuZ3RoID8/IDAgfX0vNTApXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgQGlmIChxdWVyeUxpc3RNb2RlKCkgPT09ICdoaXN0b3J5Jykge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLXF1ZXJpZXNfX2RpdmlkZXJcIj48L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNsZWFyUXVlcnlIaXN0b3J5KClcIiBjbGFzcz1cImV0LXFkLWNoaXAgZXQtcWQtY2hpcC1ib3JkZXJlZFwiPkNsZWFyIGhpc3Rvcnk8L2J1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJldC1xZC1xdWVyaWVzX19icm93c2VyXCI+XG4gICAgICAgICAgQGlmIChxdWVyeUxpc3RNb2RlKCkgPT09ICdsaXZlJykge1xuICAgICAgICAgICAgPHVsIGNsYXNzPVwiZXQtcWQtcXVlcmllc19fYnJvd3Nlci1saXN0XCI+XG4gICAgICAgICAgICAgIEBmb3IgKHF1ZXJ5IG9mIHF1ZXJpZXMoKTsgdHJhY2sgdHJhY2tCeVF1ZXJ5KCRpbmRleCwgcXVlcnkpKSB7XG4gICAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBbY2xhc3MuZXQtcWQtcXVlcnktLWFjdGl2ZV09XCJzZWxlY3RlZFF1ZXJ5KCk/Ll9pZCA9PT0gcXVlcnkuX2lkXCIgKGNsaWNrKT1cInNlbGVjdFF1ZXJ5KHF1ZXJ5KVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj4ge3sgcXVlcnkuX3F1ZXJ5Q29uZmlnLm1ldGhvZCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+IHt7IHF1ZXJ5IHwgcXVlcnlTaG9ydE5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKHF1ZXJ5TGlzdE1vZGUoKSA9PT0gJ2hpc3RvcnknKSB7XG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJldC1xZC1xdWVyaWVzX19icm93c2VyLWxpc3RcIj5cbiAgICAgICAgICAgICAgQGZvciAocXVlcnkgb2YgcXVlcnlIaXN0b3J5JCB8IGFzeW5jOyB0cmFjayB0cmFja0J5UXVlcnkoJGluZGV4LCBxdWVyeSkpIHtcbiAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIFtjbGFzcy5ldC1xZC1xdWVyeS0tYWN0aXZlXT1cInNlbGVjdGVkUXVlcnkoKT8uX2lkID09PSBxdWVyeS5faWRcIiAoY2xpY2spPVwic2VsZWN0UXVlcnkocXVlcnkpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPiB7eyBxdWVyeS5fcXVlcnlDb25maWcubWV0aG9kIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj4ge3sgcXVlcnkgfCBxdWVyeVNob3J0TmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgfVxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJldC1xZC1xdWVyaWVzX19icm93c2VyLWRldGFpbFwiPlxuICAgICAgICAgICAgQGlmIChzZWxlY3RlZFF1ZXJ5KCk7IGFzIHF1ZXJ5KSB7XG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwiZXQtcWQtcXVlcmllc19fYnJvd3Nlci1kZXRhaWxfX3RpdGxlXCI+XG4gICAgICAgICAgICAgICAge3sgcXVlcnkuX3F1ZXJ5Q29uZmlnLm1ldGhvZCB9fSB7eyBxdWVyeS5fcm91dGVXaXRoUGFyYW1zIH19XG4gICAgICAgICAgICAgIDwvcD5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtcXVlcmllc19fYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInF1ZXJ5LmV4ZWN1dGUoKVwiIGNsYXNzPVwiZXQtcWQtY2hpcCBldC1xZC1jaGlwLWJvcmRlcmVkXCI+RXhlY3V0ZTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInF1ZXJ5LmV4ZWN1dGUoeyBza2lwQ2FjaGU6IHRydWUgfSlcIiBjbGFzcz1cImV0LXFkLWNoaXAgZXQtcWQtY2hpcC1ib3JkZXJlZFwiPlxuICAgICAgICAgICAgICAgICAgRXhlY3V0ZSAoaWdub3JlIGNhY2hlKVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicXVlcnkuYWJvcnQoKVwiIGNsYXNzPVwiZXQtcWQtY2hpcCBldC1xZC1jaGlwLWJvcmRlcmVkXCI+QWJvcnQ8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtcXVlcmllc19fZGl2aWRlclwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2V0LXFkLWNoaXAtc2Vjb25kYXJ5JzogIXF1ZXJ5LmlzUG9sbGluZyB9XCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJxdWVyeS5wb2xsKHsgaW50ZXJ2YWw6IDUwMDAsIHRha2VVbnRpbDogX2Rlc3Ryb3kkIH0pXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXQtcWQtY2hpcCBldC1xZC1jaGlwLWJvcmRlcmVkXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBQb2xsXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdldC1xZC1jaGlwLXNlY29uZGFyeSc6IHF1ZXJ5LmlzUG9sbGluZyB9XCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJxdWVyeS5zdG9wUG9sbGluZygpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXQtcWQtY2hpcCBldC1xZC1jaGlwLWJvcmRlcmVkXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBTdG9wIHBvbGxpbmdcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICBAaWYgKHF1ZXJ5LmlzUG9sbGluZyB8fCBxdWVyeS5faXNQb2xsaW5nUGF1c2VkKSB7XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJxdWVyeS5wYXVzZVBvbGxpbmcoKVwiIGNsYXNzPVwiZXQtcWQtY2hpcCBldC1xZC1jaGlwLXNlY29uZGFyeSBldC1xZC1jaGlwLWJvcmRlcmVkXCI+XG4gICAgICAgICAgICAgICAgICAgIFBhdXNlIHBvbGxpbmdcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicXVlcnkucmVzdW1lUG9sbGluZygpXCIgY2xhc3M9XCJldC1xZC1jaGlwIGV0LXFkLWNoaXAtc2Vjb25kYXJ5IGV0LXFkLWNoaXAtYm9yZGVyZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgUmVzdW1lIHBvbGxpbmdcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLWxpc3RcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICA8cD5TdGF0ZSB0eXBlPC9wPlxuICAgICAgICAgICAgICAgICAgPHByZT57eyBxdWVyeS5yYXdTdGF0ZS50eXBlIH19PC9wcmU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICA8cD5EZXBlbmRlbnRzPC9wPlxuICAgICAgICAgICAgICAgICAgPHByZT57eyBxdWVyeS5fZGVwZW5kZW50cyB8IGpzb24gfX08L3ByZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldC1xZC1saXN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgIDxwPklzIGV4cGlyZWQ8L3A+XG4gICAgICAgICAgICAgICAgICA8cHJlPnt7IHF1ZXJ5LmlzRXhwaXJlZCB9fTwvcHJlPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgPHA+SXMgaW4gdXNlPC9wPlxuICAgICAgICAgICAgICAgICAgPHByZT57eyBxdWVyeS5pc0luVXNlIH19PC9wcmU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICA8cD5TdWJzY3JpYmVyIGNvdW50PC9wPlxuICAgICAgICAgICAgICAgICAgPHByZT57eyBxdWVyeS5fc3Vic2NyaWJlckNvdW50IH19PC9wcmU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICA8cD5JcyBwb2xsaW5nPC9wPlxuICAgICAgICAgICAgICAgICAgPHByZT57eyBxdWVyeS5pc1BvbGxpbmcgfX08L3ByZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldC1xZC1saXN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgIDxwPklzIHBvbGxpbmcgcGF1c2VkPC9wPlxuICAgICAgICAgICAgICAgICAgPHByZT57eyBxdWVyeS5faXNQb2xsaW5nUGF1c2VkIH19PC9wcmU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICA8cD5FbmFibGUgc21hcnQgcG9sbGluZzwvcD5cbiAgICAgICAgICAgICAgICAgIDxwcmU+e3sgcXVlcnkuX2VuYWJsZVNtYXJ0UG9sbGluZyB9fTwvcHJlPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgPHA+UXVlcnkgc3RvcmUga2V5PC9wPlxuICAgICAgICAgICAgICAgICAgPHByZT57eyBxdWVyeS5fcXVlcnlTdG9yZUtleSB9fTwvcHJlPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgPHA+QXJndW1lbnRzPC9wPlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZXQtcWQtY2hpcC1zZWNvbmRhcnknOiAhc2hvd0FyZ3VtZW50cygpIH1cIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTaG93QXJndW1lbnRzKClcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXQtcWQtY2hpcCBldC1xZC1jaGlwLWJvcmRlcmVkXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIFRvZ2dsZVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgQGlmIChzaG93QXJndW1lbnRzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPHByZT57eyBxdWVyeS5fYXJndW1lbnRzIHwganNvbiB9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgPHA+U3RhdGU8L3A+XG4gICAgICAgICAgICAgICAgICA8cD48aT4gV2FybmluZywgdGhpcyB3aWxsIGNhdXNlIGEgc3Vic2NyaXB0aW9uIGlmIHNob3duITwvaT48L3A+XG4gICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZXQtcWQtY2hpcC1zZWNvbmRhcnknOiAhc2hvd1Jlc3BvbnNlKCkgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNob3dSZXNwb25zZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV0LXFkLWNoaXAgZXQtcWQtY2hpcC1ib3JkZXJlZFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICBUb2dnbGVcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIEBpZiAoc2hvd1Jlc3BvbnNlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPHByZT57eyBxdWVyeS5zdGF0ZSQgfCBhc3luYyB8IGpzb24gfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldC1xZC1saXN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgIDxwPlJhdyBzdGF0ZTwvcD5cbiAgICAgICAgICAgICAgICAgIDxwPjxpPiBUaGUgcXVlcnkgc3RhdGUgdW5hZmZlY3RlZCBieSBlbnRpdHkgc3RvcmVzPC9pPjwvcD5cblxuICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2V0LXFkLWNoaXAtc2Vjb25kYXJ5JzogIXNob3dSYXdSZXNwb25zZSgpIH1cIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTaG93UmF3UmVzcG9uc2UoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldC1xZC1jaGlwIGV0LXFkLWNoaXAtYm9yZGVyZWRcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgVG9nZ2xlXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICBAaWYgKHNob3dSYXdSZXNwb25zZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxwcmU+e3sgcXVlcnkucmF3U3RhdGUgfCBqc29uIH19PC9wcmU+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICA8cD5RdWVyeSBjb25maWc8L3A+XG5cbiAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdldC1xZC1jaGlwLXNlY29uZGFyeSc6ICFzaG93UXVlcnlDb25maWcoKSB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2hvd1F1ZXJ5Q29uZmlnKClcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXQtcWQtY2hpcCBldC1xZC1jaGlwLWJvcmRlcmVkXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIFRvZ2dsZVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgQGlmIChzaG93UXVlcnlDb25maWcoKSkge1xuICAgICAgICAgICAgICAgICAgICA8cHJlPnt7IHN0cmluZ2lmaWVkUXVlcnlDb25maWcoKSB8IGpzb24gfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIEBpZiAoISFxdWVyeS5fcXVlcnlDb25maWcuZW50aXR5KSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPkVudGl0eSBzdG9yZSB2YWx1ZTwvcD5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2V0LXFkLWNoaXAtc2Vjb25kYXJ5JzogIXNob3dFbnRpdHlTdG9yZVZhbHVlKCkgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2hvd0VudGl0eVN0b3JlVmFsdWUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV0LXFkLWNoaXAgZXQtcWQtY2hpcC1ib3JkZXJlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgVG9nZ2xlXG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICBAaWYgKHNob3dFbnRpdHlTdG9yZVZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8cHJlPnt7IHNlbGVjdGVkUXVlcnlFbnRpdHlTdG9yZVZhbHVlJCB8IGFzeW5jIHwganNvbiB9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG59XG4iXX0=
|
|
@@ -15,11 +15,11 @@ export class QueryShortNamePipe {
|
|
|
15
15
|
console.log(route);
|
|
16
16
|
return route;
|
|
17
17
|
}
|
|
18
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
19
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
18
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: QueryShortNamePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
19
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.0.2", ngImport: i0, type: QueryShortNamePipe, isStandalone: true, name: "queryShortName" }); }
|
|
20
20
|
}
|
|
21
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
21
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: QueryShortNamePipe, decorators: [{
|
|
22
22
|
type: Pipe,
|
|
23
23
|
args: [{ name: 'queryShortName', standalone: true }]
|
|
24
24
|
}] });
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktc2hvcnQtbmFtZS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2RldnRvb2xzL3BpcGVzL3F1ZXJ5LXNob3J0LW5hbWUucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQzs7QUFJcEQsTUFBTSxPQUFPLGtCQUFrQjtJQUM3QixTQUFTLENBQUMsS0FBZTtRQUN2QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7UUFFckMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDN0IsK0tBQStLO1lBQy9LLGtHQUFrRztZQUVsRyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRS9CLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3BCLE9BQU8sT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7YUFDekQ7WUFFRCxPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVuQixPQUFPLEtBQWUsQ0FBQztJQUN6QixDQUFDOzhHQXBCVSxrQkFBa0I7NEdBQWxCLGtCQUFrQjs7MkZBQWxCLGtCQUFrQjtrQkFEOUIsSUFBSTttQkFBQyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQW55UXVlcnkgfSBmcm9tICcuLi8uLi9xdWVyeSc7XG5cbkBQaXBlKHsgbmFtZTogJ3F1ZXJ5U2hvcnROYW1lJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIFF1ZXJ5U2hvcnROYW1lUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0odmFsdWU6IEFueVF1ZXJ5KSB7XG4gICAgY29uc3Qgcm91dGUgPSB2YWx1ZS5fcm91dGVXaXRoUGFyYW1zO1xuXG4gICAgaWYgKHR5cGVvZiByb3V0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIGdpdmVuIGFuIHVybCB0aGF0IGxvb2tzIGxpa2UgdGhpczogaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9FbGFkQmV6YWxlbC9ldGltby1hY2hpZXZlbWVudHMgb3IgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9FbGFkQmV6YWxlbC9ldGltby1hY2hpZXZlbWVudHM/dGVzdD0xJnRlc3QyPTJcbiAgICAgIC8vIHdlIHdhbnQgdG8gZXh0cmFjdCB0aGUgbGFzdCAzIHBhcnRzIG9mIHRoZSB1cmwsIHNvIHdlIGdldDogcmVwb3MvRWxhZEJlemFsZWwvZXRpbW8tYWNoaWV2ZW1lbnRzXG5cbiAgICAgIGNvbnN0IHBhcnRzID0gcm91dGUuc3BsaXQoJy8nKTtcblxuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+IDMpIHtcbiAgICAgICAgcmV0dXJuIGAuLi4vJHtwYXJ0cy5zbGljZShwYXJ0cy5sZW5ndGggLSAzKS5qb2luKCcvJyl9YDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJvdXRlO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKHJvdXRlKTtcblxuICAgIHJldHVybiByb3V0ZSBhcyBzdHJpbmc7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -40,10 +40,10 @@ export class InfinityQueryTriggerDirective {
|
|
|
40
40
|
});
|
|
41
41
|
this._observer.observe(this._elementRef.nativeElement);
|
|
42
42
|
}
|
|
43
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
44
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
43
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: InfinityQueryTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
44
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.2", type: InfinityQueryTriggerDirective, isStandalone: true, selector: "[etInfinityQueryTrigger], et-infinity-query-trigger", inputs: { scrollContainerSelector: "scrollContainerSelector" }, ngImport: i0 }); }
|
|
45
45
|
}
|
|
46
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
46
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: InfinityQueryTriggerDirective, decorators: [{
|
|
47
47
|
type: Directive,
|
|
48
48
|
args: [{
|
|
49
49
|
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
@@ -53,4 +53,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
53
53
|
}], propDecorators: { scrollContainerSelector: [{
|
|
54
54
|
type: Input
|
|
55
55
|
}] } });
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5maW5pdHktcXVlcnktdHJpZ2dlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZGlyZWN0aXZlcy9pbmZpbml0eS1xdWVyeS10cmlnZ2VyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUN4RixPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBT2xFLE1BQU0sT0FBTyw2QkFBNkI7SUFMMUM7UUFNVSxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxDQUFBLFVBQXVCLENBQUEsQ0FBQyxDQUFDO1FBQzlDLG1CQUFjLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFOUMsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7UUFDbEMsY0FBUyxHQUFnQyxJQUFJLENBQUM7UUFFdEQsV0FBTSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUc1RCw0QkFBdUIsR0FBa0IsSUFBSSxDQUFDO0tBc0MvQztJQXBDQyxRQUFRO1FBQ04sTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFFNUYsSUFBSSxhQUFhLEVBQUU7WUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7U0FDaEc7YUFBTTtZQUNMLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1NBQ25DO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVPLDBCQUEwQjtRQUNoQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksb0JBQW9CLENBQ3ZDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDVixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFekIsSUFBSSxDQUFDLEtBQUs7Z0JBQUUsT0FBTztZQUVuQixJQUFJLEtBQUssQ0FBQyxjQUFjLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUU7Z0JBQ2hFLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7YUFDcEM7UUFDSCxDQUFDLEVBQ0Q7WUFDRSxJQUFJLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQ2hHLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFNBQVMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUNoQyxDQUNGLENBQUM7UUFFRixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3pELENBQUM7OEdBL0NVLDZCQUE2QjtrR0FBN0IsNkJBQTZCOzsyRkFBN0IsNkJBQTZCO2tCQUx6QyxTQUFTO21CQUFDO29CQUNULDhEQUE4RDtvQkFDOUQsUUFBUSxFQUFFLHFEQUFxRDtvQkFDL0QsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOzhCQVdDLHVCQUF1QjtzQkFEdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgaW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZyb21FdmVudCwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJTkZJTklUWV9RVUVSWV9UT0tFTiB9IGZyb20gJy4vaW5maW5pdHktcXVlcnkuZGlyZWN0aXZlJztcblxuQERpcmVjdGl2ZSh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnW2V0SW5maW5pdHlRdWVyeVRyaWdnZXJdLCBldC1pbmZpbml0eS1xdWVyeS10cmlnZ2VyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgSW5maW5pdHlRdWVyeVRyaWdnZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgX2VsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pO1xuICBwcml2YXRlIF9pbmZpbml0eVF1ZXJ5ID0gaW5qZWN0KElORklOSVRZX1FVRVJZX1RPS0VOKTtcblxuICBwcml2YXRlIF9kZXN0cm95ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHJpdmF0ZSBfb2JzZXJ2ZXI6IEludGVyc2VjdGlvbk9ic2VydmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgY2xpY2skID0gZnJvbUV2ZW50KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2NsaWNrJyk7XG5cbiAgQElucHV0KClcbiAgc2Nyb2xsQ29udGFpbmVyU2VsZWN0b3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IGlzSW50ZXJhY3RpdmUgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuaGFzQXR0cmlidXRlKCdldEluZmluaXR5UXVlcnlUcmlnZ2VyJyk7XG5cbiAgICBpZiAoaXNJbnRlcmFjdGl2ZSkge1xuICAgICAgdGhpcy5jbGljayQucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9pbmZpbml0eVF1ZXJ5LmxvYWROZXh0UGFnZSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2V0dXBJbnRlcnNlY3Rpb25PYnNlcnZlcigpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2Rlc3Ryb3kubmV4dCh0cnVlKTtcbiAgICB0aGlzLl9kZXN0cm95LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fb2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldHVwSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKTogdm9pZCB7XG4gICAgdGhpcy5fb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoXG4gICAgICAoZW50cmllcykgPT4ge1xuICAgICAgICBjb25zdCBlbnRyeSA9IGVudHJpZXNbMF07XG5cbiAgICAgICAgaWYgKCFlbnRyeSkgcmV0dXJuO1xuXG4gICAgICAgIGlmIChlbnRyeS5pc0ludGVyc2VjdGluZyAmJiAhdGhpcy5faW5maW5pdHlRdWVyeS5jb250ZXh0LmxvYWRpbmcpIHtcbiAgICAgICAgICB0aGlzLl9pbmZpbml0eVF1ZXJ5LmxvYWROZXh0UGFnZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICByb290OiB0aGlzLnNjcm9sbENvbnRhaW5lclNlbGVjdG9yID8gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLnNjcm9sbENvbnRhaW5lclNlbGVjdG9yKSA6IG51bGwsXG4gICAgICAgIHJvb3RNYXJnaW46ICcwcHgnLFxuICAgICAgICB0aHJlc2hvbGQ6IFswLjI1LCAwLjUsIDAuNzUsIDFdLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgdGhpcy5fb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG59XG4iXX0=
|
|
@@ -155,10 +155,10 @@ export class InfinityQueryDirective {
|
|
|
155
155
|
this._viewContext.currentQuery = null;
|
|
156
156
|
this._data$.next([]);
|
|
157
157
|
}
|
|
158
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
159
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
158
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: InfinityQueryDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
159
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.2", type: InfinityQueryDirective, isStandalone: true, selector: "[etInfinityQuery]", inputs: { infinityQuery: ["etInfinityQuery", "infinityQuery"] }, providers: [{ provide: INFINITY_QUERY_TOKEN, useExisting: InfinityQueryDirective }], exportAs: ["etInfinityQuery"], hostDirectives: [{ directive: i1.DelayableDirective }], ngImport: i0 }); }
|
|
160
160
|
}
|
|
161
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
161
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: InfinityQueryDirective, decorators: [{
|
|
162
162
|
type: Directive,
|
|
163
163
|
args: [{
|
|
164
164
|
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
@@ -172,4 +172,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
172
172
|
type: Input,
|
|
173
173
|
args: ['etInfinityQuery']
|
|
174
174
|
}] } });
|
|
175
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5maW5pdHktcXVlcnkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2RpcmVjdGl2ZXMvaW5maW5pdHktcXVlcnkuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLGNBQWMsRUFDZCxLQUFLLEVBRUwsV0FBVyxFQUNYLGdCQUFnQixHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckcsT0FBTyxFQUFFLGFBQWEsRUFBd0MsTUFBTSxtQkFBbUIsQ0FBQztBQUN4RixPQUFPLEVBRUwsbUJBQW1CLEVBQ25CLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIsZ0JBQWdCLEdBQ2pCLE1BQU0sVUFBVSxDQUFDOzs7QUFzQmxCLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLElBQUksY0FBYyxDQUE4QixzQkFBc0IsQ0FBQyxDQUFDO0FBVTVHLE1BQU0sT0FBTyxzQkFBc0I7SUFSbkM7UUFZbUIseUJBQW9CLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQUM5QyxpQkFBWSxHQUE0QjtZQUN2RCxTQUFTLEVBQUUsSUFBSTtZQUNmLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLE9BQU8sRUFBRSxLQUFLO1lBQ2QsS0FBSyxFQUFFLElBQUk7WUFFWCxXQUFXLEVBQUUsS0FBSztZQUNsQixXQUFXLEVBQUUsS0FBSztZQUNsQixXQUFXLEVBQUUsSUFBSTtZQUNqQixxQkFBcUIs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Qy9CLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUN6QyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFFbkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUVwQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFFdEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkIsQ0FBQzsrR0FsTVUsc0JBQXNCO21HQUF0QixzQkFBc0IsaUlBSHRCLENBQUMsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsV0FBVyxFQUFFLHNCQUFzQixFQUFFLENBQUM7OzRGQUd4RSxzQkFBc0I7a0JBUmxDLFNBQVM7bUJBQUM7b0JBQ1QsOERBQThEO29CQUM5RCxRQUFRLEVBQUUsbUJBQW1CO29CQUM3QixRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsV0FBVyx3QkFBd0IsRUFBRSxDQUFDO29CQUNuRixjQUFjLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztpQkFDckM7OEJBb0NLLGFBQWE7c0JBRGhCLEtBQUs7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIERpcmVjdGl2ZSxcbiAgRXJyb3JIYW5kbGVyLFxuICBpbmplY3QsXG4gIEluamVjdGlvblRva2VuLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjcmVhdGVEZXN0cm95LCBEZWxheWFibGVEaXJlY3RpdmUgfSBmcm9tICdAZXRobGV0ZS9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgc2tpcCwgU3ViamVjdCwgdGFrZVVudGlsLCB0YXAsIHdpdGhMYXRlc3RGcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJbmZpbml0eVF1ZXJ5LCBJbmZpbml0eVF1ZXJ5Q29uZmlnLCBJbmZpbml0eVF1ZXJ5T2YgfSBmcm9tICcuLi9pbmZpbml0ZS1xdWVyeSc7XG5pbXBvcnQge1xuICBCYXNlQXJndW1lbnRzLFxuICBpc1F1ZXJ5U3RhdGVGYWlsdXJlLFxuICBpc1F1ZXJ5U3RhdGVMb2FkaW5nLFxuICBpc1F1ZXJ5U3RhdGVTdWNjZXNzLFxuICBzd2l0Y2hRdWVyeVN0YXRlLFxufSBmcm9tICcuLi9xdWVyeSc7XG5pbXBvcnQgeyBBbnlRdWVyeUNyZWF0b3IsIENvbnN0cnVjdFF1ZXJ5IH0gZnJvbSAnLi4vcXVlcnktY3JlYXRvcic7XG5pbXBvcnQgeyBSZXF1ZXN0RXJyb3IgfSBmcm9tICcuLi9yZXF1ZXN0JztcblxuaW50ZXJmYWNlIEluZmluaXR5UXVlcnlDb250ZXh0PFxuICBRIGV4dGVuZHMgSW5maW5pdHlRdWVyeUNvbmZpZzxBbnlRdWVyeUNyZWF0b3IsIEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQsIGFueSwgdW5rbm93bltdPixcbj4ge1xuICAkaW1wbGljaXQ6IFFbJ3Jlc3BvbnNlJ11bJ2FycmF5VHlwZSddIHwgbnVsbDtcbiAgZXRJbmZpbml0eVF1ZXJ5OiBRWydyZXNwb25zZSddWydhcnJheVR5cGUnXSB8IG51bGw7XG4gIGxvYWRpbmc6IGJvb2xlYW47XG4gIGVycm9yOiBSZXF1ZXN0RXJyb3I8dW5rbm93bj4gfCBudWxsO1xuXG4gIGlzRmlyc3RMb2FkOiBib29sZWFuO1xuICBjYW5Mb2FkTW9yZTogYm9vbGVhbjtcbiAgY3VycmVudFBhZ2U6IG51bWJlciB8IG51bGw7XG4gIGN1cnJlbnRDYWxjdWxhdGVkUGFnZTogbnVtYmVyIHwgbnVsbDtcbiAgdG90YWxQYWdlczogbnVtYmVyIHwgbnVsbDtcbiAgaXRlbXNQZXJQYWdlOiBudW1iZXIgfCBudWxsO1xuXG4gIGN1cnJlbnRRdWVyeTogQ29uc3RydWN0UXVlcnk8UVsncXVlcnlDcmVhdG9yJ10+IHwgbnVsbDtcbn1cblxuZXhwb3J0IGNvbnN0IElORklOSVRZX1FVRVJZX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuPEluZmluaXR5UXVlcnlEaXJlY3RpdmU8YW55Pj4oJ0lORklOSVRZX1FVRVJZX1RPS0VOJyk7XG5cbkBEaXJlY3RpdmUoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1zZWxlY3RvclxuICBzZWxlY3RvcjogJ1tldEluZmluaXR5UXVlcnldJyxcbiAgZXhwb3J0QXM6ICdldEluZmluaXR5UXVlcnknLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IElORklOSVRZX1FVRVJZX1RPS0VOLCB1c2VFeGlzdGluZzogSW5maW5pdHlRdWVyeURpcmVjdGl2ZSB9XSxcbiAgaG9zdERpcmVjdGl2ZXM6IFtEZWxheWFibGVEaXJlY3RpdmVdLFxufSlcbmV4cG9ydCBjbGFzcyBJbmZpbml0eVF1ZXJ5RGlyZWN0aXZlPFxuICBRIGV4dGVuZHMgSW5maW5pdHlRdWVyeUNvbmZpZzxBbnlRdWVyeUNyZWF0b3IsIEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQsIGFueSwgdW5rbm93bltdPixcbj4gaW1wbGVtZW50cyBPbkluaXRcbntcbiAgcHJpdmF0ZSByZWFkb25seSBfcXVlcnlDb25maWdDaGFuZ2VkJCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdDb250ZXh0OiBJbmZpbml0eVF1ZXJ5Q29udGV4dDxRPiA9IHtcbiAgICAkaW1wbGljaXQ6IG51bGwsXG4gICAgZXRJbmZpbml0eVF1ZXJ5OiBudWxsLFxuICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgIGVycm9yOiBudWxsLFxuXG4gICAgaXNGaXJzdExvYWQ6IGZhbHNlLFxuICAgIGNhbkxvYWRNb3JlOiBmYWxzZSxcbiAgICBjdXJyZW50UGFnZTogbnVsbCxcbiAgICBjdXJyZW50Q2FsY3VsYXRlZFBhZ2U6IG51bGwsXG4gICAgdG90YWxQYWdlczogbnVsbCxcbiAgICBpdGVtc1BlclBhZ2U6IG51bGwsXG5cbiAgICBjdXJyZW50UXVlcnk6IG51bGwsXG4gIH07XG4gIHByaXZhdGUgX2luZmluaXR5UXVlcnlJbnN0YW5jZTogSW5maW5pdHlRdWVyeU9mPFE+IHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSQgPSBjcmVhdGVEZXN0cm95KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdDb250YWluZXJSZWYgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21haW5UZW1wbGF0ZVJlZiA9IGluamVjdChUZW1wbGF0ZVJlZjxJbmZpbml0eVF1ZXJ5Q29udGV4dDxRPj4pO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lcnJvckhhbmRsZXIgPSBpbmplY3QoRXJyb3JIYW5kbGVyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVsYXlhYmxlID0gaW5qZWN0KERlbGF5YWJsZURpcmVjdGl2ZSwgeyBob3N0OiB0cnVlIH0pO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RhdGEkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxRWydyZXNwb25zZSddWydhcnJheVR5cGUnXT4oW10pO1xuXG4gIHByaXZhdGUgX2RpZFJlY2VpdmVGaXJzdERhdGEkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gIHByaXZhdGUgX2lzTWFpblZpZXdDcmVhdGVkID0gZmFsc2U7XG5cbiAgQElucHV0KCdldEluZmluaXR5UXVlcnknKVxuICBnZXQgaW5maW5pdHlRdWVyeSgpOiBRIHtcbiAgICByZXR1cm4gdGhpcy5faW5maW5pdHlRdWVyeTtcbiAgfVxuICBzZXQgaW5maW5pdHlRdWVyeSh2OiBRKSB7XG4gICAgdGhpcy5fY2xlYW51cCgpO1xuXG4gICAgdGhpcy5faW5maW5pdHlRdWVyeSA9IHY7XG4gICAgdGhpcy5faW5maW5pdHlRdWVyeUluc3RhbmNlID0gdGhpcy5fc2V0dXBJbmZpbml0eVF1ZXJ5KHYpO1xuICAgIHRoaXMubG9hZE5leHRQYWdlKCk7XG4gIH1cbiAgcHJpdmF0ZSBfaW5maW5pdHlRdWVyeSE6IFE7XG5cbiAgZ2V0IGNvbnRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZpZXdDb250ZXh0O1xuICB9XG5cbiAgZ2V0IGluc3RhbmNlKCkge1xuICAgIHJldHVybiB0aGlzLl9pbmZpbml0eVF1ZXJ5SW5zdGFuY2U7XG4gIH1cblxuICBnZXQgZGF0YSQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IGRhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEkLmdldFZhbHVlKCk7XG4gIH1cblxuICBzdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZDxcbiAgICBRIGV4dGVuZHMgSW5maW5pdHlRdWVyeUNvbmZpZzxBbnlRdWVyeUNyZWF0b3IsIEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQsIGFueSwgdW5rbm93bltdPixcbiAgPihkaXI6IEluZmluaXR5UXVlcnlEaXJlY3RpdmU8UT4sIGN0eDogdW5rbm93bik6IGN0eCBpcyBJbmZpbml0eVF1ZXJ5Q29udGV4dDxRPiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9yZW5kZXJNYWluVmlldygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0dXBJbmZpbml0eVF1ZXJ5KGNvbmZpZzogUSkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEluZmluaXR5UXVlcnkoY29uZmlnKSBhcyBJbmZpbml0eVF1ZXJ5T2Y8UT47XG5cbiAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIGluc3RhbmNlLmN1cnJlbnRRdWVyeSQucGlwZShzd2l0Y2hRdWVyeVN0YXRlKCksIHdpdGhMYXRlc3RGcm9tKGluc3RhbmNlLmN1cnJlbnRRdWVyeSQpKSxcbiAgICAgIHRoaXMuX2RlbGF5YWJsZS5pc0RlbGF5ZWQkLFxuICAgICAgdGhpcy5fZGlkUmVjZWl2ZUZpcnN0RGF0YSQsXG4gICAgXSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKFtbc3RhdGUsIGN1cnJlbnRRdWVyeV0sIGlzRGVsYXllZCwgZGlkUmVjZWl2ZUZpcnN0RGF0YV0pID0+IHtcbiAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5jdXJyZW50UGFnZSA9IGluc3RhbmNlLmN1cnJlbnRQYWdlO1xuICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LnRvdGFsUGFnZXMgPSBpbnN0YW5jZS50b3RhbFBhZ2VzO1xuICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0Lml0ZW1zUGVyUGFnZSA9IGluc3RhbmNlLml0ZW1zUGVyUGFnZTtcbiAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5jYW5Mb2FkTW9yZSA9XG4gICAgICAgICAgICAoaW5zdGFuY2UudG90YWxQYWdlcyAmJiBpbnN0YW5jZS5jdXJyZW50UGFnZSAmJiBpbnN0YW5jZS50b3RhbFBhZ2VzID4gaW5zdGFuY2UuY3VycmVudFBhZ2UpIHx8IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmN1cnJlbnRDYWxjdWxhdGVkUGFnZSA9IGluc3RhbmNlLmN1cnJlbnRDYWxjdWxhdGVkUGFnZTtcblxuICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmN1cnJlbnRRdWVyeSA9IGN1cnJlbnRRdWVyeTtcblxuICAgICAgICAgIGlmIChpc1F1ZXJ5U3RhdGVMb2FkaW5nKHN0YXRlKSB8fCBpc0RlbGF5ZWQgfHwgKCFkaWRSZWNlaXZlRmlyc3REYXRhICYmIGlzUXVlcnlTdGF0ZVN1Y2Nlc3Moc3RhdGUpKSkge1xuICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5lcnJvciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5pc0ZpcnN0TG9hZCA9IHRoaXMuY29udGV4dC5ldEluZmluaXR5UXVlcnkgPT09IG51bGw7XG4gICAgICAgICAgfSBlbHNlIGlmIChpc1F1ZXJ5U3RhdGVGYWlsdXJlKHN0YXRlKSkge1xuICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQuZXJyb3IgPSBzdGF0ZS5lcnJvcjtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmlzRmlyc3RMb2FkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9lcnJvckhhbmRsZXIuaGFuZGxlRXJyb3Ioc3RhdGUuZXJyb3IpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNRdWVyeVN0YXRlU3VjY2VzcyhzdGF0ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmVycm9yID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmlzRmlyc3RMb2FkID0gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmVycm9yID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmV0SW5maW5pdHlRdWVyeSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC4kaW1wbGljaXQgPSBudWxsO1xuXG4gICAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5pc0ZpcnN0TG9hZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQuY2FuTG9hZE1vcmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmN1cnJlbnRQYWdlID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0Lml0ZW1zUGVyUGFnZSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC50b3RhbFBhZ2VzID0gbnVsbDtcblxuICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQuY3VycmVudFF1ZXJ5ID0gbnVsbDtcblxuICAgICAgICAgICAgdGhpcy5fZGF0YSQubmV4dChbXSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX3F1ZXJ5Q29uZmlnQ2hhbmdlZCQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgaW5zdGFuY2UuZGF0YSRcbiAgICAgIC5waXBlKFxuICAgICAgICBza2lwKDEpLFxuICAgICAgICB0YXAoKGRhdGEpID0+IHtcbiAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5ldEluZmluaXR5UXVlcnkgPSB0aGlzLl92aWV3Q29udGV4dC4kaW1wbGljaXQgPSBkYXRhIGFzIFFbJ3Jlc3BvbnNlJ11bJ2FycmF5VHlwZSddIHwgbnVsbDtcbiAgICAgICAgICB0aGlzLl9kYXRhJC5uZXh0KGRhdGEpO1xuXG4gICAgICAgICAgaWYgKCF0aGlzLl9kaWRSZWNlaXZlRmlyc3REYXRhJC5nZXRWYWx1ZSgpKSB7XG4gICAgICAgICAgICB0aGlzLl9kaWRSZWNlaXZlRmlyc3REYXRhJC5uZXh0KHRydWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9xdWVyeUNvbmZpZ0NoYW5nZWQkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIGxvYWROZXh0UGFnZSgpIHtcbiAgICBpZiAoIXRoaXMuX2luZmluaXR5UXVlcnlJbnN0YW5jZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl92aWV3Q29udGV4dC5sb2FkaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW5maW5pdHlRdWVyeUluc3RhbmNlLm5leHRQYWdlKCk7XG4gIH1cblxuICByZXNldChuZXdDb25maWc/OiBPbWl0PFEsICdxdWVyeUNyZWF0b3InIHwgJ3Jlc3BvbnNlJz4pIHtcbiAgICBpZiAoIXRoaXMuX2luZmluaXR5UXVlcnlJbnN0YW5jZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2luZmluaXR5UXVlcnlJbnN0YW5jZS5yZXNldChuZXdDb25maWcgYXMgYW55KTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlbmRlck1haW5WaWV3KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faXNNYWluVmlld0NyZWF0ZWQpIHtcbiAgICAgIHRoaXMuX2lzTWFpblZpZXdDcmVhdGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX21haW5UZW1wbGF0ZVJlZiwgdGhpcy5fdmlld0NvbnRleHQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NsZWFudXAoKSB7XG4gICAgdGhpcy5fcXVlcnlDb25maWdDaGFuZ2VkJC5uZXh0KHRydWUpO1xuXG4gICAgdGhpcy5fdmlld0NvbnRleHQubG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuX3ZpZXdDb250ZXh0LmVycm9yID0gbnVsbDtcbiAgICB0aGlzLl92aWV3Q29udGV4dC5ldEluZmluaXR5UXVlcnkgPSBudWxsO1xuICAgIHRoaXMuX3ZpZXdDb250ZXh0LiRpbXBsaWNpdCA9IG51bGw7XG5cbiAgICB0aGlzLl92aWV3Q29udGV4dC5pc0ZpcnN0TG9hZCA9IGZhbHNlO1xuICAgIHRoaXMuX3ZpZXdDb250ZXh0LmNhbkxvYWRNb3JlID0gZmFsc2U7XG4gICAgdGhpcy5fdmlld0NvbnRleHQuY3VycmVudFBhZ2UgPSBudWxsO1xuICAgIHRoaXMuX3ZpZXdDb250ZXh0Lml0ZW1zUGVyUGFnZSA9IG51bGw7XG4gICAgdGhpcy5fdmlld0NvbnRleHQudG90YWxQYWdlcyA9IG51bGw7XG5cbiAgICB0aGlzLl92aWV3Q29udGV4dC5jdXJyZW50UXVlcnkgPSBudWxsO1xuXG4gICAgdGhpcy5fZGF0YSQubmV4dChbXSk7XG4gIH1cbn1cbiJdfQ==
|
|
175
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5maW5pdHktcXVlcnkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2RpcmVjdGl2ZXMvaW5maW5pdHktcXVlcnkuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLGNBQWMsRUFDZCxLQUFLLEVBRUwsV0FBVyxFQUNYLGdCQUFnQixHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckcsT0FBTyxFQUFFLGFBQWEsRUFBd0MsTUFBTSxtQkFBbUIsQ0FBQztBQUN4RixPQUFPLEVBRUwsbUJBQW1CLEVBQ25CLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIsZ0JBQWdCLEdBQ2pCLE1BQU0sVUFBVSxDQUFDOzs7QUFzQmxCLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLElBQUksY0FBYyxDQUE4QixzQkFBc0IsQ0FBQyxDQUFDO0FBVTVHLE1BQU0sT0FBTyxzQkFBc0I7SUFSbkM7UUFZbUIseUJBQW9CLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQUM5QyxpQkFBWSxHQUE0QjtZQUN2RCxTQUFTLEVBQUUsSUFBSTtZQUNmLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLE9BQU8sRUFBRSxLQUFLO1lBQ2QsS0FBSyxFQUFFLElBQUk7WUFFWCxXQUFXLEVBQUUsS0FBSztZQUNsQixXQUFXLEVBQUUsS0FBSztZQUNsQixXQUFXLEVBQUUsSUFBSTtZQUNqQixxQkFBcUIs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Qy9CLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUN6QyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFFbkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUVwQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFFdEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkIsQ0FBQzs4R0FsTVUsc0JBQXNCO2tHQUF0QixzQkFBc0IsaUlBSHRCLENBQUMsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsV0FBVyxFQUFFLHNCQUFzQixFQUFFLENBQUM7OzJGQUd4RSxzQkFBc0I7a0JBUmxDLFNBQVM7bUJBQUM7b0JBQ1QsOERBQThEO29CQUM5RCxRQUFRLEVBQUUsbUJBQW1CO29CQUM3QixRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsV0FBVyx3QkFBd0IsRUFBRSxDQUFDO29CQUNuRixjQUFjLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztpQkFDckM7OEJBb0NLLGFBQWE7c0JBRGhCLEtBQUs7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIERpcmVjdGl2ZSxcbiAgRXJyb3JIYW5kbGVyLFxuICBpbmplY3QsXG4gIEluamVjdGlvblRva2VuLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjcmVhdGVEZXN0cm95LCBEZWxheWFibGVEaXJlY3RpdmUgfSBmcm9tICdAZXRobGV0ZS9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgc2tpcCwgU3ViamVjdCwgdGFrZVVudGlsLCB0YXAsIHdpdGhMYXRlc3RGcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJbmZpbml0eVF1ZXJ5LCBJbmZpbml0eVF1ZXJ5Q29uZmlnLCBJbmZpbml0eVF1ZXJ5T2YgfSBmcm9tICcuLi9pbmZpbml0ZS1xdWVyeSc7XG5pbXBvcnQge1xuICBCYXNlQXJndW1lbnRzLFxuICBpc1F1ZXJ5U3RhdGVGYWlsdXJlLFxuICBpc1F1ZXJ5U3RhdGVMb2FkaW5nLFxuICBpc1F1ZXJ5U3RhdGVTdWNjZXNzLFxuICBzd2l0Y2hRdWVyeVN0YXRlLFxufSBmcm9tICcuLi9xdWVyeSc7XG5pbXBvcnQgeyBBbnlRdWVyeUNyZWF0b3IsIENvbnN0cnVjdFF1ZXJ5IH0gZnJvbSAnLi4vcXVlcnktY3JlYXRvcic7XG5pbXBvcnQgeyBSZXF1ZXN0RXJyb3IgfSBmcm9tICcuLi9yZXF1ZXN0JztcblxuaW50ZXJmYWNlIEluZmluaXR5UXVlcnlDb250ZXh0PFxuICBRIGV4dGVuZHMgSW5maW5pdHlRdWVyeUNvbmZpZzxBbnlRdWVyeUNyZWF0b3IsIEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQsIGFueSwgdW5rbm93bltdPixcbj4ge1xuICAkaW1wbGljaXQ6IFFbJ3Jlc3BvbnNlJ11bJ2FycmF5VHlwZSddIHwgbnVsbDtcbiAgZXRJbmZpbml0eVF1ZXJ5OiBRWydyZXNwb25zZSddWydhcnJheVR5cGUnXSB8IG51bGw7XG4gIGxvYWRpbmc6IGJvb2xlYW47XG4gIGVycm9yOiBSZXF1ZXN0RXJyb3I8dW5rbm93bj4gfCBudWxsO1xuXG4gIGlzRmlyc3RMb2FkOiBib29sZWFuO1xuICBjYW5Mb2FkTW9yZTogYm9vbGVhbjtcbiAgY3VycmVudFBhZ2U6IG51bWJlciB8IG51bGw7XG4gIGN1cnJlbnRDYWxjdWxhdGVkUGFnZTogbnVtYmVyIHwgbnVsbDtcbiAgdG90YWxQYWdlczogbnVtYmVyIHwgbnVsbDtcbiAgaXRlbXNQZXJQYWdlOiBudW1iZXIgfCBudWxsO1xuXG4gIGN1cnJlbnRRdWVyeTogQ29uc3RydWN0UXVlcnk8UVsncXVlcnlDcmVhdG9yJ10+IHwgbnVsbDtcbn1cblxuZXhwb3J0IGNvbnN0IElORklOSVRZX1FVRVJZX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuPEluZmluaXR5UXVlcnlEaXJlY3RpdmU8YW55Pj4oJ0lORklOSVRZX1FVRVJZX1RPS0VOJyk7XG5cbkBEaXJlY3RpdmUoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1zZWxlY3RvclxuICBzZWxlY3RvcjogJ1tldEluZmluaXR5UXVlcnldJyxcbiAgZXhwb3J0QXM6ICdldEluZmluaXR5UXVlcnknLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IElORklOSVRZX1FVRVJZX1RPS0VOLCB1c2VFeGlzdGluZzogSW5maW5pdHlRdWVyeURpcmVjdGl2ZSB9XSxcbiAgaG9zdERpcmVjdGl2ZXM6IFtEZWxheWFibGVEaXJlY3RpdmVdLFxufSlcbmV4cG9ydCBjbGFzcyBJbmZpbml0eVF1ZXJ5RGlyZWN0aXZlPFxuICBRIGV4dGVuZHMgSW5maW5pdHlRdWVyeUNvbmZpZzxBbnlRdWVyeUNyZWF0b3IsIEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQsIGFueSwgdW5rbm93bltdPixcbj4gaW1wbGVtZW50cyBPbkluaXRcbntcbiAgcHJpdmF0ZSByZWFkb25seSBfcXVlcnlDb25maWdDaGFuZ2VkJCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdDb250ZXh0OiBJbmZpbml0eVF1ZXJ5Q29udGV4dDxRPiA9IHtcbiAgICAkaW1wbGljaXQ6IG51bGwsXG4gICAgZXRJbmZpbml0eVF1ZXJ5OiBudWxsLFxuICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgIGVycm9yOiBudWxsLFxuXG4gICAgaXNGaXJzdExvYWQ6IGZhbHNlLFxuICAgIGNhbkxvYWRNb3JlOiBmYWxzZSxcbiAgICBjdXJyZW50UGFnZTogbnVsbCxcbiAgICBjdXJyZW50Q2FsY3VsYXRlZFBhZ2U6IG51bGwsXG4gICAgdG90YWxQYWdlczogbnVsbCxcbiAgICBpdGVtc1BlclBhZ2U6IG51bGwsXG5cbiAgICBjdXJyZW50UXVlcnk6IG51bGwsXG4gIH07XG4gIHByaXZhdGUgX2luZmluaXR5UXVlcnlJbnN0YW5jZTogSW5maW5pdHlRdWVyeU9mPFE+IHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSQgPSBjcmVhdGVEZXN0cm95KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdDb250YWluZXJSZWYgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21haW5UZW1wbGF0ZVJlZiA9IGluamVjdChUZW1wbGF0ZVJlZjxJbmZpbml0eVF1ZXJ5Q29udGV4dDxRPj4pO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lcnJvckhhbmRsZXIgPSBpbmplY3QoRXJyb3JIYW5kbGVyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVsYXlhYmxlID0gaW5qZWN0KERlbGF5YWJsZURpcmVjdGl2ZSwgeyBob3N0OiB0cnVlIH0pO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RhdGEkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxRWydyZXNwb25zZSddWydhcnJheVR5cGUnXT4oW10pO1xuXG4gIHByaXZhdGUgX2RpZFJlY2VpdmVGaXJzdERhdGEkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gIHByaXZhdGUgX2lzTWFpblZpZXdDcmVhdGVkID0gZmFsc2U7XG5cbiAgQElucHV0KCdldEluZmluaXR5UXVlcnknKVxuICBnZXQgaW5maW5pdHlRdWVyeSgpOiBRIHtcbiAgICByZXR1cm4gdGhpcy5faW5maW5pdHlRdWVyeTtcbiAgfVxuICBzZXQgaW5maW5pdHlRdWVyeSh2OiBRKSB7XG4gICAgdGhpcy5fY2xlYW51cCgpO1xuXG4gICAgdGhpcy5faW5maW5pdHlRdWVyeSA9IHY7XG4gICAgdGhpcy5faW5maW5pdHlRdWVyeUluc3RhbmNlID0gdGhpcy5fc2V0dXBJbmZpbml0eVF1ZXJ5KHYpO1xuICAgIHRoaXMubG9hZE5leHRQYWdlKCk7XG4gIH1cbiAgcHJpdmF0ZSBfaW5maW5pdHlRdWVyeSE6IFE7XG5cbiAgZ2V0IGNvbnRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZpZXdDb250ZXh0O1xuICB9XG5cbiAgZ2V0IGluc3RhbmNlKCkge1xuICAgIHJldHVybiB0aGlzLl9pbmZpbml0eVF1ZXJ5SW5zdGFuY2U7XG4gIH1cblxuICBnZXQgZGF0YSQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IGRhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEkLmdldFZhbHVlKCk7XG4gIH1cblxuICBzdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZDxcbiAgICBRIGV4dGVuZHMgSW5maW5pdHlRdWVyeUNvbmZpZzxBbnlRdWVyeUNyZWF0b3IsIEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQsIGFueSwgdW5rbm93bltdPixcbiAgPihkaXI6IEluZmluaXR5UXVlcnlEaXJlY3RpdmU8UT4sIGN0eDogdW5rbm93bik6IGN0eCBpcyBJbmZpbml0eVF1ZXJ5Q29udGV4dDxRPiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9yZW5kZXJNYWluVmlldygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0dXBJbmZpbml0eVF1ZXJ5KGNvbmZpZzogUSkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEluZmluaXR5UXVlcnkoY29uZmlnKSBhcyBJbmZpbml0eVF1ZXJ5T2Y8UT47XG5cbiAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIGluc3RhbmNlLmN1cnJlbnRRdWVyeSQucGlwZShzd2l0Y2hRdWVyeVN0YXRlKCksIHdpdGhMYXRlc3RGcm9tKGluc3RhbmNlLmN1cnJlbnRRdWVyeSQpKSxcbiAgICAgIHRoaXMuX2RlbGF5YWJsZS5pc0RlbGF5ZWQkLFxuICAgICAgdGhpcy5fZGlkUmVjZWl2ZUZpcnN0RGF0YSQsXG4gICAgXSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKFtbc3RhdGUsIGN1cnJlbnRRdWVyeV0sIGlzRGVsYXllZCwgZGlkUmVjZWl2ZUZpcnN0RGF0YV0pID0+IHtcbiAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5jdXJyZW50UGFnZSA9IGluc3RhbmNlLmN1cnJlbnRQYWdlO1xuICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LnRvdGFsUGFnZXMgPSBpbnN0YW5jZS50b3RhbFBhZ2VzO1xuICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0Lml0ZW1zUGVyUGFnZSA9IGluc3RhbmNlLml0ZW1zUGVyUGFnZTtcbiAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5jYW5Mb2FkTW9yZSA9XG4gICAgICAgICAgICAoaW5zdGFuY2UudG90YWxQYWdlcyAmJiBpbnN0YW5jZS5jdXJyZW50UGFnZSAmJiBpbnN0YW5jZS50b3RhbFBhZ2VzID4gaW5zdGFuY2UuY3VycmVudFBhZ2UpIHx8IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmN1cnJlbnRDYWxjdWxhdGVkUGFnZSA9IGluc3RhbmNlLmN1cnJlbnRDYWxjdWxhdGVkUGFnZTtcblxuICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmN1cnJlbnRRdWVyeSA9IGN1cnJlbnRRdWVyeTtcblxuICAgICAgICAgIGlmIChpc1F1ZXJ5U3RhdGVMb2FkaW5nKHN0YXRlKSB8fCBpc0RlbGF5ZWQgfHwgKCFkaWRSZWNlaXZlRmlyc3REYXRhICYmIGlzUXVlcnlTdGF0ZVN1Y2Nlc3Moc3RhdGUpKSkge1xuICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5lcnJvciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5pc0ZpcnN0TG9hZCA9IHRoaXMuY29udGV4dC5ldEluZmluaXR5UXVlcnkgPT09IG51bGw7XG4gICAgICAgICAgfSBlbHNlIGlmIChpc1F1ZXJ5U3RhdGVGYWlsdXJlKHN0YXRlKSkge1xuICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQuZXJyb3IgPSBzdGF0ZS5lcnJvcjtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmlzRmlyc3RMb2FkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9lcnJvckhhbmRsZXIuaGFuZGxlRXJyb3Ioc3RhdGUuZXJyb3IpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNRdWVyeVN0YXRlU3VjY2VzcyhzdGF0ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmVycm9yID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmlzRmlyc3RMb2FkID0gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmVycm9yID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmV0SW5maW5pdHlRdWVyeSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC4kaW1wbGljaXQgPSBudWxsO1xuXG4gICAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5pc0ZpcnN0TG9hZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQuY2FuTG9hZE1vcmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0LmN1cnJlbnRQYWdlID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250ZXh0Lml0ZW1zUGVyUGFnZSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC50b3RhbFBhZ2VzID0gbnVsbDtcblxuICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRleHQuY3VycmVudFF1ZXJ5ID0gbnVsbDtcblxuICAgICAgICAgICAgdGhpcy5fZGF0YSQubmV4dChbXSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX3F1ZXJ5Q29uZmlnQ2hhbmdlZCQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgaW5zdGFuY2UuZGF0YSRcbiAgICAgIC5waXBlKFxuICAgICAgICBza2lwKDEpLFxuICAgICAgICB0YXAoKGRhdGEpID0+IHtcbiAgICAgICAgICB0aGlzLl92aWV3Q29udGV4dC5ldEluZmluaXR5UXVlcnkgPSB0aGlzLl92aWV3Q29udGV4dC4kaW1wbGljaXQgPSBkYXRhIGFzIFFbJ3Jlc3BvbnNlJ11bJ2FycmF5VHlwZSddIHwgbnVsbDtcbiAgICAgICAgICB0aGlzLl9kYXRhJC5uZXh0KGRhdGEpO1xuXG4gICAgICAgICAgaWYgKCF0aGlzLl9kaWRSZWNlaXZlRmlyc3REYXRhJC5nZXRWYWx1ZSgpKSB7XG4gICAgICAgICAgICB0aGlzLl9kaWRSZWNlaXZlRmlyc3REYXRhJC5uZXh0KHRydWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9xdWVyeUNvbmZpZ0NoYW5nZWQkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIGxvYWROZXh0UGFnZSgpIHtcbiAgICBpZiAoIXRoaXMuX2luZmluaXR5UXVlcnlJbnN0YW5jZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl92aWV3Q29udGV4dC5sb2FkaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW5maW5pdHlRdWVyeUluc3RhbmNlLm5leHRQYWdlKCk7XG4gIH1cblxuICByZXNldChuZXdDb25maWc/OiBPbWl0PFEsICdxdWVyeUNyZWF0b3InIHwgJ3Jlc3BvbnNlJz4pIHtcbiAgICBpZiAoIXRoaXMuX2luZmluaXR5UXVlcnlJbnN0YW5jZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2luZmluaXR5UXVlcnlJbnN0YW5jZS5yZXNldChuZXdDb25maWcgYXMgYW55KTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlbmRlck1haW5WaWV3KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faXNNYWluVmlld0NyZWF0ZWQpIHtcbiAgICAgIHRoaXMuX2lzTWFpblZpZXdDcmVhdGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX21haW5UZW1wbGF0ZVJlZiwgdGhpcy5fdmlld0NvbnRleHQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NsZWFudXAoKSB7XG4gICAgdGhpcy5fcXVlcnlDb25maWdDaGFuZ2VkJC5uZXh0KHRydWUpO1xuXG4gICAgdGhpcy5fdmlld0NvbnRleHQubG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuX3ZpZXdDb250ZXh0LmVycm9yID0gbnVsbDtcbiAgICB0aGlzLl92aWV3Q29udGV4dC5ldEluZmluaXR5UXVlcnkgPSBudWxsO1xuICAgIHRoaXMuX3ZpZXdDb250ZXh0LiRpbXBsaWNpdCA9IG51bGw7XG5cbiAgICB0aGlzLl92aWV3Q29udGV4dC5pc0ZpcnN0TG9hZCA9IGZhbHNlO1xuICAgIHRoaXMuX3ZpZXdDb250ZXh0LmNhbkxvYWRNb3JlID0gZmFsc2U7XG4gICAgdGhpcy5fdmlld0NvbnRleHQuY3VycmVudFBhZ2UgPSBudWxsO1xuICAgIHRoaXMuX3ZpZXdDb250ZXh0Lml0ZW1zUGVyUGFnZSA9IG51bGw7XG4gICAgdGhpcy5fdmlld0NvbnRleHQudG90YWxQYWdlcyA9IG51bGw7XG5cbiAgICB0aGlzLl92aWV3Q29udGV4dC5jdXJyZW50UXVlcnkgPSBudWxsO1xuXG4gICAgdGhpcy5fZGF0YSQubmV4dChbXSk7XG4gIH1cbn1cbiJdfQ==
|