@ethlete/query 4.9.1 → 4.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -199,13 +199,13 @@ export class QueryDevtoolsComponent {
199
199
  clearQueryHistory() {
200
200
  this.queryHistory.set([]);
201
201
  }
202
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: QueryDevtoolsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
203
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.0", 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().length }}/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(); 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>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>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: [".et-query-devtools{position:fixed;top:0;z-index:1000000;font-size:14px}.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 }); }
202
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: QueryDevtoolsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
203
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", 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().length }}/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(); 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>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>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 }); }
204
204
  }
205
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: QueryDevtoolsComponent, decorators: [{
205
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: QueryDevtoolsComponent, decorators: [{
206
206
  type: Component,
207
207
  args: [{ selector: 'et-query-devtools', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.ShadowDom, host: {
208
208
  class: 'et-query-devtools',
209
- }, 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().length }}/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(); 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>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>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: [".et-query-devtools{position:fixed;top:0;z-index:1000000;font-size:14px}.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"] }]
209
+ }, 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().length }}/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(); 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>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>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"] }]
210
210
  }], ctorParameters: function () { return []; } });
211
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZGV2dG9vbHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2RldnRvb2xzL2NvbXBvbmVudHMvcXVlcnktZGV2dG9vbHMvcXVlcnktZGV2dG9vbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2RldnRvb2xzL2NvbXBvbmVudHMvcXVlcnktZGV2dG9vbHMvcXVlcnktZGV2dG9vbHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBRVQsaUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXRGLE9BQU8sRUFBWSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNqRCxPQUFPLEVBQUUsMkJBQTJCLEVBQThCLE1B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LHNCQUFzQjtrQkFkbEMsU0FBUzsrQkFDRSxtQkFBbUIsY0FHakIsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxTQUFTLFFBRXBDO3dCQUNKLEtBQUssRUFBRSxtQkFBbUI7cUJBQzNCLFdBQ1EsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixDQUFDLGtCQUM3RSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXN5bmNQaXBlLCBKc29uUGlwZSwgTmdDbGFzcywgTmdGb3IsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIFRyYWNrQnlGdW5jdGlvbixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGNyZWF0ZURlc3Ryb3ksIG5leHRGcmFtZSB9IGZyb20gJ0BldGhsZXRlL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtYXAsIG9mLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVudGl0eVN0b3JlIH0gZnJvbSAnLi4vLi4vLi4vZW50aXR5JztcbmltcG9ydCB7IEFueVF1ZXJ5LCBpc0dxbFF1ZXJ5Q29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vcXVlcnknO1xuaW1wb3J0IHsgUXVlcnlTaG9ydE5hbWVQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMnO1xuaW1wb3J0IHsgUVVFUllfQ0xJRU5UX0RFVlRPT0xTX1RPS0VOLCBRdWVyeUNsaWVudERldnRvb2xzT3B0aW9ucyB9IGZyb20gJy4uLy4uL3V0aWxzJztcblxudHlwZSBRdWVyeURldnRvb2xzU25hcExheW91dCA9ICdmdWxsJyB8ICdsZWZ0JyB8ICdyaWdodCcgfCAnYm90dG9tJyB8ICd0b3AnO1xudHlwZSBRdWVyeUxpc3RNb2RlID0gJ2xpdmUnIHwgJ2hpc3RvcnknO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdldC1xdWVyeS1kZXZ0b29scycsXG4gIHRlbXBsYXRlVXJsOiAnLi9xdWVyeS1kZXZ0b29scy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3F1ZXJ5LWRldnRvb2xzLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5TaGFkb3dEb20sXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8taG9zdC1tZXRhZGF0YS1wcm9wZXJ0eVxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdldC1xdWVyeS1kZXZ0b29scycsXG4gIH0sXG4gIGltcG9ydHM6IFtOZ0lmLCBOZ0ZvciwgQXN5bmNQaXBlLCBKc29uUGlwZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgTmdDbGFzcywgUXVlcnlTaG9ydE5hbWVQaXBlXSxcbiAgaG9zdERpcmVjdGl2ZXM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBRdWVyeURldnRvb2xzQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9kZXN0cm95JCA9IGNyZWF0ZURlc3Ryb3koKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcXVlcnlDbGllbnRDb25maWdzID0gaW5qZWN0KFFVRVJZX0NMSUVOVF9ERVZUT09MU19UT0tFTik7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzT3BlbiA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBpc1RyYW5zbHVjZW50ID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNuYXBMYXlvdXQgPSBzaWduYWw8UXVlcnlEZXZ0b29sc1NuYXBMYXlvdXQ+KCdmdWxsJyk7XG4gIHByb3RlY3RlZCByZWFkb25seSBxdWVyeUxpc3RNb2RlID0gc2lnbmFsPFF1ZXJ5TGlzdE1vZGU+KCdsaXZlJyk7XG5cbiAgcHJvdGVjdGVkIHNob3dSZXNwb25zZSA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCBzaG93UmF3UmVzcG9uc2UgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgc2hvd1F1ZXJ5Q29uZmlnID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvdGVjdGVkIHNob3dFbnRpdHlTdG9yZVZhbHVlID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvdGVjdGVkIHNob3dBcmd1bWVudHMgPSBzaWduYWwoZmFsc2UpO1xuXG4gIHByb3RlY3RlZCBzZWxlY3RlZENsaWVudElkQ3RybCA9IG5ldyBGb3JtQ29udHJvbCgwKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0ZWRDbGllbnRJZCA9IHRvU2lnbmFsKFxuICAgIHRoaXMuc2VsZWN0ZWRDbGllbnRJZEN0cmwudmFsdWVDaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKHRoaXMuc2VsZWN0ZWRDbGllbnRJZEN0cmwudmFsdWUpKSxcbiAgKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdGVkUXVlcnlJZCA9IHNpZ25hbDxudW1iZXIgfCBudWxsPihudWxsKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0ZWRDbGllbnRDb25maWcgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKHRoaXMucXVlcnlDbGllbnRDb25maWdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIHRoaXMucXVlcnlDbGllbnRDb25maWdzWzBdO1xuICAgIH1cblxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zZWxlY3RlZENsaWVudElkKCkgPz8gMDtcblxuICAgIHJldHVybiB0aGlzLnF1ZXJ5Q2xpZW50Q29uZmlnc1tpbmRleF07XG4gIH0pO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBxdWVyeVN0b3JlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuc2VsZWN0ZWRDbGllbnRDb25maWcoKTtcblxuICAgIHJldHVybiBjb25maWcuY2xpZW50Ll9zdG9yZTtcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHF1ZXJ5U3RvcmUkID0gdG9PYnNlcnZhYmxlKHRoaXMucXVlcnlTdG9yZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfcXVlcmllcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFueVF1ZXJ5W10+KFtdKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHF1ZXJpZXMgPSB0b1NpZ25hbCh0aGlzLl9xdWVyaWVzJCk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdGVkUXVlcnkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgaWQgPSB0aGlzLnNlbGVjdGVkUXVlcnlJZCgpO1xuICAgIGNvbnN0IG1vZGUgPSB0aGlzLnF1ZXJ5TGlzdE1vZGUoKTtcblxuICAgIGlmIChpZCA9PT0gbnVsbCB8fCAhbW9kZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKG1vZGUgPT09ICdsaXZlJykge1xuICAgICAgcmV0dXJuIHRoaXMucXVlcmllcygpPy5maW5kKChxKSA9PiBxLl9pZCA9PT0gaWQpID8/IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucXVlcnlIaXN0b3J5KCk/LmZpbmQoKHEpID0+IHEuX2lkID09PSBpZCkgPz8gbnVsbDtcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIHNlbGVjdGVkUXVlcnlFbnRpdHlTdG9yZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuc2VsZWN0ZWRRdWVyeSgpO1xuXG4gICAgaWYgKCFxdWVyeSkgcmV0dXJuIG51bGw7XG5cbiAgICByZXR1cm4gcXVlcnkuc3RvcmUgYXMgRW50aXR5U3RvcmU8dW5rbm93bj4gfCBudWxsO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0ZWRRdWVyeUVudGl0eVN0b3JlJCA9IHRvT2JzZXJ2YWJsZSh0aGlzLnNlbGVjdGVkUXVlcnlFbnRpdHlTdG9yZSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdGVkUXVlcnlFbnRpdHlTdG9yZVZhbHVlJCA9IHRoaXMuc2VsZWN0ZWRRdWVyeUVudGl0eVN0b3JlJC5waXBlKFxuICAgIHN3aXRjaE1hcChcbiAgICAgIChzKSA9PlxuICAgICAgICBzPy5fY2hhbmdlJC5waXBlKFxuICAgICAgICAgIHN0YXJ0V2l0aCgnJyksXG4gICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgIGlmICghcy5fZGljdGlvbmFyeSkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKHMuX2RpY3Rpb25hcnkpLnJlZHVjZSgob2JqLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgICAgIH0sIHt9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKSA/PyBvZihudWxsKSxcbiAgICApLFxuICApO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBxdWVyeUhpc3RvcnkgPSBzaWduYWw8QW55UXVlcnlbXT4oW10pO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBzdHJpbmdpZmllZFF1ZXJ5Q29uZmlnID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5zZWxlY3RlZFF1ZXJ5KCk7XG5cbiAgICBpZiAoIXF1ZXJ5KSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGNmZyA9IHF1ZXJ5Ll9xdWVyeUNvbmZpZztcbiAgICBjb25zdCByb3V0ZSA9XG4gICAgICB0eXBlb2YgY2ZnLnJvdXRlID09PSAnc3RyaW5nJyA/IGNmZy5yb3V0ZSA6IGNmZy5yb3V0ZSA/IGNmZy5yb3V0ZSh7fSkucmVwbGFjZSgvdW5kZWZpbmVkL2csICc6cGFyYW0nKSA6IG51bGw7XG5cbiAgICBjb25zdCBzaGFyZWRDZmcgPSB7XG4gICAgICBtZXRob2Q6IGNmZy5tZXRob2QsXG4gICAgICBzZWN1cmU6IGNmZy5zZWN1cmUsXG4gICAgICByb3V0ZSxcbiAgICAgIHJlcG9ydFByb2dyZXNzOiBjZmcucmVwb3J0UHJvZ3Jlc3MsXG4gICAgICByZXNwb25zZVR5cGU6IGNmZy5yZXNwb25zZVR5cGUsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IGNmZy53aXRoQ3JlZGVudGlhbHMsXG4gICAgICBhdXRvUmVmcmVzaE9uOiBjZmcuYXV0b1JlZnJlc2hPbixcbiAgICAgIGVuYWJsZVNtYXJ0UG9sbGluZzogY2ZnLmVuYWJsZVNtYXJ0UG9sbGluZyxcbiAgICAgIGhhc0VudGl0eVN0b3JlOiAhIWNmZy5lbnRpdHksXG4gICAgfTtcblxuICAgIGlmIChpc0dxbFF1ZXJ5Q29uZmlnKGNmZykpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnNoYXJlZENmZyxcbiAgICAgICAgcXVlcnk6IGNmZy5xdWVyeSxcbiAgICAgICAgdHJhbnNmZXJWaWE6IGNmZy50cmFuc2ZlclZpYSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnNoYXJlZENmZyxcbiAgICB9O1xuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNlbGVjdGVkQ2xpZW50SWRDdHJsLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLmNsZWFyUXVlcnlIaXN0b3J5KCkpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5xdWVyeVN0b3JlJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgocykgPT5cbiAgICAgICAgICBzLnN0b3JlQ2hhbmdlJC5waXBlKFxuICAgICAgICAgICAgc3RhcnRXaXRoKCcnKSxcbiAgICAgICAgICAgIG1hcCgoKSA9PiBzLl9zdG9yZSksXG4gICAgICAgICAgICB0YXAoKHMpID0+IHRoaXMuX3F1ZXJpZXMkLm5leHQoQXJyYXkuZnJvbShzLnZhbHVlcygpKSkpLFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5xdWVyeVN0b3JlJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgocykgPT5cbiAgICAgICAgICBzLnF1ZXJ5Q3JlYXRlZCQucGlwZShcbiAgICAgICAgICAgIHRhcCgocXVlcnkpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgY3VycmVudEhpc3RvcnkgPSB0aGlzLnF1ZXJ5SGlzdG9yeSgpO1xuXG4gICAgICAgICAgICAgIGlmICghY3VycmVudEhpc3RvcnkpIHJldHVybjtcblxuICAgICAgICAgICAgICBjb25zdCBjdXJyZW50SGlzdG9yeUNsb25lID0gWy4uLmN1cnJlbnRIaXN0b3J5XTtcblxuICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRIaXN0b3J5LnNvbWUoKHEpID0+IHEuX2lkID09PSBxdWVyeS5faWQpKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudEhpc3RvcnlDbG9uZS51bnNoaWZ0KHF1ZXJ5KTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGN1cnJlbnRIaXN0b3J5Q2xvbmUuc3BsaWNlKDUwKTtcblxuICAgICAgICAgICAgICB0aGlzLnF1ZXJ5SGlzdG9yeS5zZXQoY3VycmVudEhpc3RvcnlDbG9uZSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMuX3F1ZXJpZXMkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChxdWVyaWVzKSA9PiB7XG4gICAgICAgICAgY29uc3QgY3VycmVudEhpc3RvcnkgPSB0aGlzLnF1ZXJ5SGlzdG9yeSgpO1xuXG4gICAgICAgICAgaWYgKCFxdWVyaWVzIHx8ICFjdXJyZW50SGlzdG9yeSkgcmV0dXJuO1xuXG4gICAgICAgICAgY29uc3QgY3VycmVudEhpc3RvcnlDbG9uZSA9IFsuLi5jdXJyZW50SGlzdG9yeV07XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IHF1ZXJ5IG9mIHF1ZXJpZXMpIHtcbiAgICAgICAgICAgIGlmICghY3VycmVudEhpc3RvcnlDbG9uZS5zb21lKChxKSA9PiBxLl9pZCA9PT0gcXVlcnkuX2lkKSkge1xuICAgICAgICAgICAgICBjdXJyZW50SGlzdG9yeUNsb25lLnVuc2hpZnQocXVlcnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGN1cnJlbnRIaXN0b3J5Q2xvbmUuc3BsaWNlKDUwKTtcblxuICAgICAgICAgIHRoaXMucXVlcnlIaXN0b3J5LnNldChjdXJyZW50SGlzdG9yeUNsb25lKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgZGV2dG9vbENvbmZpZyA9IHtcbiAgICAgICAgaXNPcGVuOiB0aGlzLmlzT3BlbigpLFxuICAgICAgICBpc1RyYW5zbHVjZW50OiB0aGlzLmlzVHJhbnNsdWNlbnQoKSxcbiAgICAgICAgc25hcExheW91dDogdGhpcy5zbmFwTGF5b3V0KCksXG4gICAgICAgIHNob3dSZXNwb25zZTogdGhpcy5zaG93UmVzcG9uc2UoKSxcbiAgICAgICAgc2hvd1Jhd1Jlc3BvbnNlOiB0aGlzLnNob3dSYXdSZXNwb25zZSgpLFxuICAgICAgICBzaG93UXVlcnlDb25maWc6IHRoaXMuc2hvd1F1ZXJ5Q29uZmlnKCksXG4gICAgICAgIHNob3dFbnRpdHlTdG9yZVZhbHVlOiB0aGlzLnNob3dFbnRpdHlTdG9yZVZhbHVlKCksXG4gICAgICAgIHNob3dBcmd1bWVudHM6IHRoaXMuc2hvd0FyZ3VtZW50cygpLFxuICAgICAgICBzZWxlY3RlZENsaWVudElkOiB0aGlzLnNlbGVjdGVkQ2xpZW50SWQoKSxcbiAgICAgICAgc2VsZWN0ZWRRdWVyeVBhdGg6IHRoaXMuc2VsZWN0ZWRRdWVyeUlkKCksXG4gICAgICAgIHF1ZXJ5TGlzdE1vZGU6IHRoaXMucXVlcnlMaXN0TW9kZSgpLFxuICAgICAgfTtcblxuICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdldGhsZXRlOnF1ZXJ5OmRldnRvb2xzJywgSlNPTi5zdHJpbmdpZnkoZGV2dG9vbENvbmZpZykpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgaW5pdGlhbENvbmZpZyA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXRobGV0ZTpxdWVyeTpkZXZ0b29scycpO1xuXG4gICAgaWYgKGluaXRpYWxDb25maWcpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoaW5pdGlhbENvbmZpZyk7XG5cbiAgICAgIHRoaXMuaXNPcGVuLnNldChwYXJzZWQuaXNPcGVuID8/IGZhbHNlKTtcbiAgICAgIHRoaXMuaXNUcmFuc2x1Y2VudC5zZXQocGFyc2VkLmlzVHJhbnNsdWNlbnQgPz8gZmFsc2UpO1xuICAgICAgdGhpcy5zbmFwTGF5b3V0LnNldChwYXJzZWQuc25hcExheW91dCA/PyAnZnVsbCcpO1xuICAgICAgdGhpcy5zaG93UmVzcG9uc2Uuc2V0KHBhcnNlZC5zaG93UmVzcG9uc2UgPz8gZmFsc2UpO1xuICAgICAgdGhpcy5zaG93UmF3UmVzcG9uc2Uuc2V0KHBhcnNlZC5zaG93UmF3UmVzcG9uc2UgPz8gZmFsc2UpO1xuICAgICAgdGhpcy5zaG93UXVlcnlDb25maWcuc2V0KHBhcnNlZC5zaG93UXVlcnlDb25maWcgPz8gZmFsc2UpO1xuICAgICAgdGhpcy5zaG93RW50aXR5U3RvcmVWYWx1ZS5zZXQocGFyc2VkLnNob3dFbnRpdHlTdG9yZVZhbHVlID8/IGZhbHNlKTtcbiAgICAgIHRoaXMuc2hvd0FyZ3VtZW50cy5zZXQocGFyc2VkLnNob3dBcmd1bWVudHMgPz8gZmFsc2UpO1xuICAgICAgdGhpcy5zZWxlY3RlZENsaWVudElkQ3RybC5zZXRWYWx1ZShwYXJzZWQuc2VsZWN0ZWRDbGllbnRJZCA/PyAwKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRRdWVyeUlkLnNldChwYXJzZWQuc2VsZWN0ZWRRdWVyeVBhdGggPz8gbnVsbCk7XG4gICAgICB0aGlzLnF1ZXJ5TGlzdE1vZGUuc2V0KHBhcnNlZC5xdWVyeUxpc3RNb2RlID8/ICdsaXZlJyk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHRyYWNrQnlDbGllbnQ6IFRyYWNrQnlGdW5jdGlvbjxRdWVyeUNsaWVudERldnRvb2xzT3B0aW9ucz4gPSAoXywgeyBjbGllbnQgfSkgPT4gY2xpZW50LmNvbmZpZy5iYXNlUm91dGU7XG4gIHByb3RlY3RlZCB0cmFja0J5UXVlcnk6IFRyYWNrQnlGdW5jdGlvbjxBbnlRdWVyeT4gPSAoXywgeyBfaWQgfSkgPT4gX2lkO1xuXG4gIHByb3RlY3RlZCB0b2dnbGVPcGVuKCkge1xuICAgIHRoaXMuaXNPcGVuLnNldCghdGhpcy5pc09wZW4oKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdG9nZ2xlVHJhbnNsdWNlbnQoKSB7XG4gICAgdGhpcy5pc1RyYW5zbHVjZW50LnNldCghdGhpcy5pc1RyYW5zbHVjZW50KCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRvZ2dsZVNob3dSZXNwb25zZSgpIHtcbiAgICB0aGlzLnNob3dSZXNwb25zZS5zZXQoIXRoaXMuc2hvd1Jlc3BvbnNlKCkpO1xuXG4gICAgbmV4dEZyYW1lKCgpID0+IHtcbiAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0b2dnbGVTaG93UXVlcnlDb25maWcoKSB7XG4gICAgdGhpcy5zaG93UXVlcnlDb25maWcuc2V0KCF0aGlzLnNob3dRdWVyeUNvbmZpZygpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0b2dnbGVTaG93UmF3UmVzcG9uc2UoKSB7XG4gICAgdGhpcy5zaG93UmF3UmVzcG9uc2Uuc2V0KCF0aGlzLnNob3dSYXdSZXNwb25zZSgpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0b2dnbGVTaG93RW50aXR5U3RvcmVWYWx1ZSgpIHtcbiAgICB0aGlzLnNob3dFbnRpdHlTdG9yZVZhbHVlLnNldCghdGhpcy5zaG93RW50aXR5U3RvcmVWYWx1ZSgpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0b2dnbGVTaG93QXJndW1lbnRzKCkge1xuICAgIHRoaXMuc2hvd0FyZ3VtZW50cy5zZXQoIXRoaXMuc2hvd0FyZ3VtZW50cygpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZWxlY3RTbmFwTGF5b3V0KGxheW91dDogUXVlcnlEZXZ0b29sc1NuYXBMYXlvdXQpIHtcbiAgICB0aGlzLnNuYXBMYXlvdXQuc2V0KGxheW91dCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2VsZWN0UXVlcnlMaXN0TW9kZShtb2RlOiBRdWVyeUxpc3RNb2RlKSB7XG4gICAgdGhpcy5xdWVyeUxpc3RNb2RlLnNldChtb2RlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZWxlY3RRdWVyeShxdWVyeTogQW55UXVlcnkpIHtcbiAgICB0aGlzLnNlbGVjdGVkUXVlcnlJZC5zZXQocXVlcnkuX2lkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjbGVhclF1ZXJ5SGlzdG9yeSgpIHtcbiAgICB0aGlzLnF1ZXJ5SGlzdG9yeS5zZXQoW10pO1xuICB9XG59XG4iLCI8YnV0dG9uICpuZ0lmPVwiIWlzT3BlbigpXCIgKGNsaWNrKT1cInRvZ2dsZU9wZW4oKVwiIGNsYXNzPVwiZXQtcXVlcnktZGV2dG9vbHMtb3Blbi1idG4gZXQtcWQtY2hpcFwiPk9wZW4gRGV2dG9vbHM8L2J1dHRvbj5cblxuPGRpdlxuICAqbmdJZj1cImlzT3BlbigpXCJcbiAgW2NsYXNzLmV0LXF1ZXJ5LWRldnRvb2xzLWNvbnRhaW5lci0tdHJhbnNwYXJlbnRdPVwiaXNUcmFuc2x1Y2VudCgpXCJcbiAgY2xhc3M9XCJldC1xdWVyeS1kZXZ0b29scy1jb250YWluZXIgZXQtcXVlcnktZGV2dG9vbHMtY29udGFpbmVyLS1zbmFwLXt7IHNuYXBMYXlvdXQoKSB9fVwiXG4+XG4gIDxoZWFkZXIgY2xhc3M9XCJldC1xZC1oZWFkZXJcIj5cbiAgICA8aDMgY2xhc3M9XCJldC1xZC1oZWFkZXJfX3RpdGxlXCI+UXVlcnkgRGV2dG9vbHM8L2gzPlxuXG4gICAgPGRpdiBjbGFzcz1cImV0LXFkLWhlYWRlcl9fc2VsZWN0XCI+XG4gICAgICA8bGFiZWwgZm9yPVwiZXQtcXVlcnktY2xpZW50LWluc3RhbmNlXCI+Q2xpZW50IGluc3RhbmNlPC9sYWJlbD5cbiAgICAgIDxzZWxlY3QgW2Zvcm1Db250cm9sXT1cInNlbGVjdGVkQ2xpZW50SWRDdHJsXCIgaWQ9XCJldC1xdWVyeS1jbGllbnQtaW5zdGFuY2VcIj5cbiAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgY2xpZW50Q29uZmlnIG9mIHF1ZXJ5Q2xpZW50Q29uZmlnczsgaW5kZXggYXMgaTsgdHJhY2tCeTogdHJhY2tCeUNsaWVudFwiIFt2YWx1ZV09XCJpXCI+XG4gICAgICAgICAge3sgY2xpZW50Q29uZmlnLmRpc3BsYXlOYW1lID8/IGNsaWVudENvbmZpZy5jbGllbnQuY29uZmlnLmJhc2VSb3V0ZSB9fVxuICAgICAgICA8L29wdGlvbj5cbiAgICAgIDwvc2VsZWN0PlxuICAgIDwvZGl2PlxuXG4gICAgPGJ1dHRvbiAoY2xpY2spPVwidG9nZ2xlT3BlbigpXCIgY2xhc3M9XCJldC1xZC1idG4gZXQtcWQtYnRuLXNlY29uZGFyeVwiPkNsb3NlPC9idXR0b24+XG4gIDwvaGVhZGVyPlxuXG4gIDxkaXYgY2xhc3M9XCJldC1xZC1zdWItaGVhZGVyXCI+XG4gICAgPGJ1dHRvblxuICAgICAgW25nQ2xhc3NdPVwieyAnZXQtcWQtY2hpcC1zZWNvbmRhcnknOiAhaXNUcmFuc2x1Y2VudCgpIH1cIlxuICAgICAgKGNsaWNrKT1cInRvZ2dsZVRyYW5zbHVjZW50KClcIlxuICAgICAgY2xhc3M9XCJldC1xZC1jaGlwIGV0LXFkLXRyYW5zbHVjZW50LWNsaWNrYWJsZVwiXG4gICAgPlxuICAgICAgVHJhbnNsdWNlbnRcbiAgICA8L2J1dHRvbj5cbiAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtc3ViLWhlYWRlcl9fZGl2aWRlclwiPjwvZGl2PlxuICAgIDxidXR0b25cbiAgICAgIFtuZ0NsYXNzXT1cInsgJ2V0LXFkLWNoaXAtc2Vjb25kYXJ5Jzogc25hcExheW91dCgpICE9PSAnZnVsbCcgfVwiXG4gICAgICAoY2xpY2spPVwic2VsZWN0U25hcExheW91dCgnZnVsbCcpXCJcbiAgICAgIGNsYXNzPVwiZXQtcWQtY2hpcFwiXG4gICAgPlxuICAgICAgRnVsbHNjcmVlblxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgIFtuZ0NsYXNzXT1cInsgJ2V0LXFkLWNoaXAtc2Vjb25kYXJ5Jzogc25hcExheW91dCgpICE9PSAndG9wJyB9XCJcbiAgICAgIChjbGljayk9XCJzZWxlY3RTbmFwTGF5b3V0KCd0b3AnKVwiXG4gICAgICBjbGFzcz1cImV0LXFkLWNoaXBcIlxuICAgID5cbiAgICAgIFRvcFxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgIFtuZ0NsYXNzXT1cInsgJ2V0LXFkLWNoaXAtc2Vjb25kYXJ5Jzogc25hcExheW91dCgpICE9PSAnYm90dG9tJyB9XCJcbiAgICAgIChjbGljayk9XCJzZWxlY3RTbmFwTGF5b3V0KCdib3R0b20nKVwiXG4gICAgICBjbGFzcz1cImV0LXFkLWNoaXBcIlxuICAgID5cbiAgICAgIEJvdHRvbVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgIFtuZ0NsYXNzXT1cInsgJ2V0LXFkLWNoaXAtc2Vjb25kYXJ5Jzogc25hcExheW91dCgpICE9PSAnbGVmdCcgfVwiXG4gICAgICAoY2xpY2spPVwic2VsZWN0U25hcExheW91dCgnbGVmdCcpXCJcbiAgICAgIGNsYXNzPVwiZXQtcWQtY2hpcFwiXG4gICAgPlxuICAgICAgTGVmdFxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgIFtuZ0NsYXNzXT1cInsgJ2V0LXFkLWNoaXAtc2Vjb25kYXJ5Jzogc25hcExheW91dCgpICE9PSAncmlnaHQnIH1cIlxuICAgICAgKGNsaWNrKT1cInNlbGVjdFNuYXBMYXlvdXQoJ3JpZ2h0JylcIlxuICAgICAgY2xhc3M9XCJldC1xZC1jaGlwXCJcbiAgICA+XG4gICAgICBSaWdodFxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRDbGllbnRDb25maWcoKSBhcyBjZmdcIiBjbGFzcz1cImV0LXFkLWNsaWVudFwiPlxuICAgIDxwIGNsYXNzPVwiZXQtcWQtY2xpZW50X190aXRsZVwiPnt7IGNmZy5kaXNwbGF5TmFtZSA/PyBjZmcuY2xpZW50LmNvbmZpZy5iYXNlUm91dGUgfX08L3A+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtY2xpZW50X19hY3Rpb25zXCI+XG4gICAgICA8YnV0dG9uIChjbGljayk9XCJjZmcuY2xpZW50Ll9zdG9yZS5yZWZyZXNoUXVlcmllc0luVXNlKClcIiBjbGFzcz1cImV0LXFkLWNoaXBcIj5SZWZyZXNoIGFsbDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2ZnLmNsaWVudC5fc3RvcmUucmVmcmVzaFF1ZXJpZXNJblVzZSh7IGlnbm9yZUNhY2hlVmFsaWRpdHk6IHRydWUgfSlcIiBjbGFzcz1cImV0LXFkLWNoaXBcIj5cbiAgICAgICAgUmVmcmVzaCBhbGwgKGlnbm9yZSBjYWNoZXMpXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKGNsaWNrKT1cImNmZy5jbGllbnQuX3N0b3JlLnJlZnJlc2hRdWVyaWVzSW5Vc2UoeyBpZ25vcmVDYWNoZVZhbGlkaXR5OiB0cnVlLCBwdXJnZVVudXNlZDogdHJ1ZSB9KVwiXG4gICAgICAgIGNsYXNzPVwiZXQtcWQtY2hpcFwiXG4gICAgICA+XG4gICAgICAgIFJlZnJlc2ggYWxsIChpZ25vcmUgY2FjaGVzICYgcHVyZ2UgdW51c2VkKVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9XCJzZWxlY3RlZENsaWVudENvbmZpZygpIGFzIGNmZ1wiIGNsYXNzPVwiZXQtcWQtcXVlcmllc1wiPlxuICAgIDxwIGNsYXNzPVwiZXQtcWQtcXVlcmllc19fdGl0bGVcIj5RdWVyeSBicm93c2VyPC9wPlxuICAgIDxkaXYgY2xhc3M9XCJldC1xZC1xdWVyaWVzX19hY3Rpb25zXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgJ2V0LXFkLWNoaXAtc2Vjb25kYXJ5JzogcXVlcnlMaXN0TW9kZSgpICE9PSAnbGl2ZScgfVwiXG4gICAgICAgIChjbGljayk9XCJzZWxlY3RRdWVyeUxpc3RNb2RlKCdsaXZlJylcIlxuICAgICAgICBjbGFzcz1cImV0LXFkLWNoaXAgZXQtcWQtY2hpcC1ib3JkZXJlZFwiXG4gICAgICA+XG4gICAgICAgIExpdmUgKHt7IHF1ZXJpZXMoKT8ubGVuZ3RoID8/IDAgfX0pXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgW25nQ2xhc3NdPVwieyAnZXQtcWQtY2hpcC1zZWNvbmRhcnknOiBxdWVyeUxpc3RNb2RlKCkgIT09ICdoaXN0b3J5JyB9XCJcbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdFF1ZXJ5TGlzdE1vZGUoJ2hpc3RvcnknKVwiXG4gICAgICAgIGNsYXNzPVwiZXQtcWQtY2hpcCBldC1xZC1jaGlwLWJvcmRlcmVkXCJcbiAgICAgID5cbiAgICAgICAgSGlzdG9yeSAoe3sgcXVlcnlIaXN0b3J5KCkubGVuZ3RoIH19LzUwKVxuICAgICAgPC9idXR0b24+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicXVlcnlMaXN0TW9kZSgpID09PSAnaGlzdG9yeSdcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLXF1ZXJpZXNfX2RpdmlkZXJcIj48L2Rpdj5cbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2xlYXJRdWVyeUhpc3RvcnkoKVwiIGNsYXNzPVwiZXQtcWQtY2hpcCBldC1xZC1jaGlwLWJvcmRlcmVkXCI+Q2xlYXIgaGlzdG9yeTwvYnV0dG9uPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtcXVlcmllc19fYnJvd3NlclwiPlxuICAgICAgPHVsICpuZ0lmPVwicXVlcnlMaXN0TW9kZSgpID09PSAnbGl2ZSdcIiBjbGFzcz1cImV0LXFkLXF1ZXJpZXNfX2Jyb3dzZXItbGlzdFwiPlxuICAgICAgICA8bGkgKm5nRm9yPVwibGV0IHF1ZXJ5IG9mIHF1ZXJpZXMoKTsgdHJhY2tCeTogdHJhY2tCeVF1ZXJ5XCI+XG4gICAgICAgICAgPGJ1dHRvbiBbY2xhc3MuZXQtcWQtcXVlcnktLWFjdGl2ZV09XCJzZWxlY3RlZFF1ZXJ5KCk/Ll9pZCA9PT0gcXVlcnkuX2lkXCIgKGNsaWNrKT1cInNlbGVjdFF1ZXJ5KHF1ZXJ5KVwiPlxuICAgICAgICAgICAgPHNwYW4+IHt7IHF1ZXJ5Ll9xdWVyeUNvbmZpZy5tZXRob2QgfX08L3NwYW4+XG4gICAgICAgICAgICA8c3Bhbj4ge3sgcXVlcnkgfCBxdWVyeVNob3J0TmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9saT5cbiAgICAgIDwvdWw+XG4gICAgICA8dWwgKm5nSWY9XCJxdWVyeUxpc3RNb2RlKCkgPT09ICdoaXN0b3J5J1wiIGNsYXNzPVwiZXQtcWQtcXVlcmllc19fYnJvd3Nlci1saXN0XCI+XG4gICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgcXVlcnkgb2YgcXVlcnlIaXN0b3J5KCk7IHRyYWNrQnk6IHRyYWNrQnlRdWVyeVwiPlxuICAgICAgICAgIDxidXR0b24gW2NsYXNzLmV0LXFkLXF1ZXJ5LS1hY3RpdmVdPVwic2VsZWN0ZWRRdWVyeSgpPy5faWQgPT09IHF1ZXJ5Ll9pZFwiIChjbGljayk9XCJzZWxlY3RRdWVyeShxdWVyeSlcIj5cbiAgICAgICAgICAgIDxzcGFuPiB7eyBxdWVyeS5fcXVlcnlDb25maWcubWV0aG9kIH19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+IHt7IHF1ZXJ5IHwgcXVlcnlTaG9ydE5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbGk+XG4gICAgICA8L3VsPlxuICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLXF1ZXJpZXNfX2Jyb3dzZXItZGV0YWlsXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFF1ZXJ5KCkgYXMgcXVlcnlcIj5cbiAgICAgICAgICA8cCBjbGFzcz1cImV0LXFkLXF1ZXJpZXNfX2Jyb3dzZXItZGV0YWlsX190aXRsZVwiPlxuICAgICAgICAgICAge3sgcXVlcnkuX3F1ZXJ5Q29uZmlnLm1ldGhvZCB9fSB7eyBxdWVyeS5fcm91dGVXaXRoUGFyYW1zIH19XG4gICAgICAgICAgPC9wPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLXF1ZXJpZXNfX2FjdGlvbnNcIj5cbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInF1ZXJ5LmV4ZWN1dGUoKVwiIGNsYXNzPVwiZXQtcWQtY2hpcCBldC1xZC1jaGlwLWJvcmRlcmVkXCI+RXhlY3V0ZTwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicXVlcnkuZXhlY3V0ZSh7IHNraXBDYWNoZTogdHJ1ZSB9KVwiIGNsYXNzPVwiZXQtcWQtY2hpcCBldC1xZC1jaGlwLWJvcmRlcmVkXCI+XG4gICAgICAgICAgICAgIEV4ZWN1dGUgKGlnbm9yZSBjYWNoZSlcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJxdWVyeS5hYm9ydCgpXCIgY2xhc3M9XCJldC1xZC1jaGlwIGV0LXFkLWNoaXAtYm9yZGVyZWRcIj5BYm9ydDwvYnV0dG9uPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLXF1ZXJpZXNfX2RpdmlkZXJcIj48L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZXQtcWQtY2hpcC1zZWNvbmRhcnknOiAhcXVlcnkuaXNQb2xsaW5nIH1cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwicXVlcnkucG9sbCh7IGludGVydmFsOiA1MDAwLCB0YWtlVW50aWw6IF9kZXN0cm95JCB9KVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZXQtcWQtY2hpcCBldC1xZC1jaGlwLWJvcmRlcmVkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgUG9sbFxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZXQtcWQtY2hpcC1zZWNvbmRhcnknOiBxdWVyeS5pc1BvbGxpbmcgfVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJxdWVyeS5zdG9wUG9sbGluZygpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJldC1xZC1jaGlwIGV0LXFkLWNoaXAtYm9yZGVyZWRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBTdG9wIHBvbGxpbmdcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInF1ZXJ5LmlzUG9sbGluZyB8fCBxdWVyeS5faXNQb2xsaW5nUGF1c2VkXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInF1ZXJ5LnBhdXNlUG9sbGluZygpXCIgY2xhc3M9XCJldC1xZC1jaGlwIGV0LXFkLWNoaXAtc2Vjb25kYXJ5IGV0LXFkLWNoaXAtYm9yZGVyZWRcIj5cbiAgICAgICAgICAgICAgICBQYXVzZSBwb2xsaW5nXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJxdWVyeS5yZXN1bWVQb2xsaW5nKClcIiBjbGFzcz1cImV0LXFkLWNoaXAgZXQtcWQtY2hpcC1zZWNvbmRhcnkgZXQtcWQtY2hpcC1ib3JkZXJlZFwiPlxuICAgICAgICAgICAgICAgIFJlc3VtZSBwb2xsaW5nXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICA8cD5TdGF0ZSB0eXBlPC9wPlxuICAgICAgICAgICAgICA8cHJlPnt7IHF1ZXJ5LnJhd1N0YXRlLnR5cGUgfX08L3ByZT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgIDxwPklzIGV4cGlyZWQ8L3A+XG4gICAgICAgICAgICAgIDxwcmU+e3sgcXVlcnkuaXNFeHBpcmVkIH19PC9wcmU+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICA8cD5JcyBpbiB1c2U8L3A+XG4gICAgICAgICAgICAgIDxwcmU+e3sgcXVlcnkuaXNJblVzZSB9fTwvcHJlPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldC1xZC1saXN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgPHA+U3Vic2NyaWJlciBjb3VudDwvcD5cbiAgICAgICAgICAgICAgPHByZT57eyBxdWVyeS5fc3Vic2NyaWJlckNvdW50IH19PC9wcmU+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICA8cD5JcyBwb2xsaW5nPC9wPlxuICAgICAgICAgICAgICA8cHJlPnt7IHF1ZXJ5LmlzUG9sbGluZyB9fTwvcHJlPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldC1xZC1saXN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgPHA+SXMgcG9sbGluZyBwYXVzZWQ8L3A+XG4gICAgICAgICAgICAgIDxwcmU+e3sgcXVlcnkuX2lzUG9sbGluZ1BhdXNlZCB9fTwvcHJlPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldC1xZC1saXN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgPHA+RW5hYmxlIHNtYXJ0IHBvbGxpbmc8L3A+XG4gICAgICAgICAgICAgIDxwcmU+e3sgcXVlcnkuX2VuYWJsZVNtYXJ0UG9sbGluZyB9fTwvcHJlPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldC1xZC1saXN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgPHA+QXJndW1lbnRzPC9wPlxuXG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZXQtcWQtY2hpcC1zZWNvbmRhcnknOiAhc2hvd0FyZ3VtZW50cygpIH1cIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNob3dBcmd1bWVudHMoKVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImV0LXFkLWNoaXAgZXQtcWQtY2hpcC1ib3JkZXJlZFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgVG9nZ2xlXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8cHJlICpuZ0lmPVwic2hvd0FyZ3VtZW50cygpXCI+e3sgcXVlcnkuX2FyZ3VtZW50cyB8IGpzb24gfX08L3ByZT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgIDxwPlN0YXRlPC9wPlxuICAgICAgICAgICAgICA8cD48aT4gV2FybmluZywgdGhpcyB3aWxsIGNhdXNlIGEgc3Vic2NyaXB0aW9uIGlmIHNob3duITwvaT48L3A+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZXQtcWQtY2hpcC1zZWNvbmRhcnknOiAhc2hvd1Jlc3BvbnNlKCkgfVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2hvd1Jlc3BvbnNlKClcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldC1xZC1jaGlwIGV0LXFkLWNoaXAtYm9yZGVyZWRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIFRvZ2dsZVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPHByZSAqbmdJZj1cInNob3dSZXNwb25zZSgpXCI+e3sgcXVlcnkuc3RhdGUkIHwgYXN5bmMgfCBqc29uIH19PC9wcmU+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICA8cD5SYXcgc3RhdGU8L3A+XG4gICAgICAgICAgICAgIDxwPjxpPiBUaGUgcXVlcnkgc3RhdGUgdW5hZmZlY3RlZCBieSBlbnRpdHkgc3RvcmVzPC9pPjwvcD5cblxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2V0LXFkLWNoaXAtc2Vjb25kYXJ5JzogIXNob3dSYXdSZXNwb25zZSgpIH1cIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNob3dSYXdSZXNwb25zZSgpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXQtcWQtY2hpcCBldC1xZC1jaGlwLWJvcmRlcmVkXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBUb2dnbGVcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxwcmUgKm5nSWY9XCJzaG93UmF3UmVzcG9uc2UoKVwiPnt7IHF1ZXJ5LnJhd1N0YXRlIHwganNvbiB9fTwvcHJlPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldC1xZC1saXN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgPHA+UXVlcnkgY29uZmlnPC9wPlxuXG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZXQtcWQtY2hpcC1zZWNvbmRhcnknOiAhc2hvd1F1ZXJ5Q29uZmlnKCkgfVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2hvd1F1ZXJ5Q29uZmlnKClcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldC1xZC1jaGlwIGV0LXFkLWNoaXAtYm9yZGVyZWRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIFRvZ2dsZVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPHByZSAqbmdJZj1cInNob3dRdWVyeUNvbmZpZygpXCI+e3sgc3RyaW5naWZpZWRRdWVyeUNvbmZpZygpIHwganNvbiB9fTwvcHJlPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhIXF1ZXJ5Ll9xdWVyeUNvbmZpZy5lbnRpdHlcIiBjbGFzcz1cImV0LXFkLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICA8cD5FbnRpdHkgc3RvcmUgdmFsdWU8L3A+XG5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdldC1xZC1jaGlwLXNlY29uZGFyeSc6ICFzaG93RW50aXR5U3RvcmVWYWx1ZSgpIH1cIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNob3dFbnRpdHlTdG9yZVZhbHVlKClcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldC1xZC1jaGlwIGV0LXFkLWNoaXAtYm9yZGVyZWRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIFRvZ2dsZVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPHByZSAqbmdJZj1cInNob3dFbnRpdHlTdG9yZVZhbHVlKClcIj57eyBzZWxlY3RlZFF1ZXJ5RW50aXR5U3RvcmVWYWx1ZSQgfCBhc3luYyB8IGpzb24gfX08L3ByZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
211
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZGV2dG9vbHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2RldnRvb2xzL2NvbXBvbmVudHMvcXVlcnktZGV2dG9vbHMvcXVlcnktZGV2dG9vbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2RldnRvb2xzL2NvbXBvbmVudHMvcXVlcnktZGV2dG9vbHMvcXVlcnktZGV2dG9vbHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBRVQsaUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXRGLE9BQU8sRUFBWSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNqRCxPQUFPLEVBQUUsMkJBQTJCLEVBQThCLE1B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RixzQkFBc0I7a0JBZGxDLFNBQVM7K0JBQ0UsbUJBQW1CLGNBR2pCLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsU0FBUyxRQUVwQzt3QkFDSixLQUFLLEVBQUUsbUJBQW1CO3FCQUMzQixXQUNRLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxrQkFDN0UsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzeW5jUGlwZSwgSnNvblBpcGUsIE5nQ2xhc3MsIE5nRm9yLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBUcmFja0J5RnVuY3Rpb24sXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBpbmplY3QsXG4gIHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b09ic2VydmFibGUsIHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBjcmVhdGVEZXN0cm95LCBuZXh0RnJhbWUgfSBmcm9tICdAZXRobGV0ZS9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgbWFwLCBvZiwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBFbnRpdHlTdG9yZSB9IGZyb20gJy4uLy4uLy4uL2VudGl0eSc7XG5pbXBvcnQgeyBBbnlRdWVyeSwgaXNHcWxRdWVyeUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uL3F1ZXJ5JztcbmltcG9ydCB7IFF1ZXJ5U2hvcnROYW1lUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzJztcbmltcG9ydCB7IFFVRVJZX0NMSUVOVF9ERVZUT09MU19UT0tFTiwgUXVlcnlDbGllbnREZXZ0b29sc09wdGlvbnMgfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbnR5cGUgUXVlcnlEZXZ0b29sc1NuYXBMYXlvdXQgPSAnZnVsbCcgfCAnbGVmdCcgfCAncmlnaHQnIHwgJ2JvdHRvbScgfCAndG9wJztcbnR5cGUgUXVlcnlMaXN0TW9kZSA9ICdsaXZlJyB8ICdoaXN0b3J5JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZXQtcXVlcnktZGV2dG9vbHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vcXVlcnktZGV2dG9vbHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9xdWVyeS1kZXZ0b29scy5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uU2hhZG93RG9tLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWhvc3QtbWV0YWRhdGEtcHJvcGVydHlcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnZXQtcXVlcnktZGV2dG9vbHMnLFxuICB9LFxuICBpbXBvcnRzOiBbTmdJZiwgTmdGb3IsIEFzeW5jUGlwZSwgSnNvblBpcGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIE5nQ2xhc3MsIFF1ZXJ5U2hvcnROYW1lUGlwZV0sXG4gIGhvc3REaXJlY3RpdmVzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgUXVlcnlEZXZ0b29sc0NvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHByb3RlY3RlZCByZWFkb25seSBfZGVzdHJveSQgPSBjcmVhdGVEZXN0cm95KCk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHF1ZXJ5Q2xpZW50Q29uZmlncyA9IGluamVjdChRVUVSWV9DTElFTlRfREVWVE9PTFNfVE9LRU4pO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBpc09wZW4gPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNUcmFuc2x1Y2VudCA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBzbmFwTGF5b3V0ID0gc2lnbmFsPFF1ZXJ5RGV2dG9vbHNTbmFwTGF5b3V0PignZnVsbCcpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcXVlcnlMaXN0TW9kZSA9IHNpZ25hbDxRdWVyeUxpc3RNb2RlPignbGl2ZScpO1xuXG4gIHByb3RlY3RlZCBzaG93UmVzcG9uc2UgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgc2hvd1Jhd1Jlc3BvbnNlID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvdGVjdGVkIHNob3dRdWVyeUNvbmZpZyA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCBzaG93RW50aXR5U3RvcmVWYWx1ZSA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCBzaG93QXJndW1lbnRzID0gc2lnbmFsKGZhbHNlKTtcblxuICBwcm90ZWN0ZWQgc2VsZWN0ZWRDbGllbnRJZEN0cmwgPSBuZXcgRm9ybUNvbnRyb2woMCk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdGVkQ2xpZW50SWQgPSB0b1NpZ25hbChcbiAgICB0aGlzLnNlbGVjdGVkQ2xpZW50SWRDdHJsLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLnNlbGVjdGVkQ2xpZW50SWRDdHJsLnZhbHVlKSksXG4gICk7XG4gIHByb3RlY3RlZCByZWFkb25seSBzZWxlY3RlZFF1ZXJ5SWQgPSBzaWduYWw8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdGVkQ2xpZW50Q29uZmlnID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICh0aGlzLnF1ZXJ5Q2xpZW50Q29uZmlncy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiB0aGlzLnF1ZXJ5Q2xpZW50Q29uZmlnc1swXTtcbiAgICB9XG5cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRDbGllbnRJZCgpID8/IDA7XG5cbiAgICByZXR1cm4gdGhpcy5xdWVyeUNsaWVudENvbmZpZ3NbaW5kZXhdO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcXVlcnlTdG9yZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLnNlbGVjdGVkQ2xpZW50Q29uZmlnKCk7XG5cbiAgICByZXR1cm4gY29uZmlnLmNsaWVudC5fc3RvcmU7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBxdWVyeVN0b3JlJCA9IHRvT2JzZXJ2YWJsZSh0aGlzLnF1ZXJ5U3RvcmUpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3F1ZXJpZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBbnlRdWVyeVtdPihbXSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBxdWVyaWVzID0gdG9TaWduYWwodGhpcy5fcXVlcmllcyQpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBzZWxlY3RlZFF1ZXJ5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGlkID0gdGhpcy5zZWxlY3RlZFF1ZXJ5SWQoKTtcbiAgICBjb25zdCBtb2RlID0gdGhpcy5xdWVyeUxpc3RNb2RlKCk7XG5cbiAgICBpZiAoaWQgPT09IG51bGwgfHwgIW1vZGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChtb2RlID09PSAnbGl2ZScpIHtcbiAgICAgIHJldHVybiB0aGlzLnF1ZXJpZXMoKT8uZmluZCgocSkgPT4gcS5faWQgPT09IGlkKSA/PyBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnF1ZXJ5SGlzdG9yeSgpPy5maW5kKChxKSA9PiBxLl9pZCA9PT0gaWQpID8/IG51bGw7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCBzZWxlY3RlZFF1ZXJ5RW50aXR5U3RvcmUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLnNlbGVjdGVkUXVlcnkoKTtcblxuICAgIGlmICghcXVlcnkpIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIHF1ZXJ5LnN0b3JlIGFzIEVudGl0eVN0b3JlPHVua25vd24+IHwgbnVsbDtcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdGVkUXVlcnlFbnRpdHlTdG9yZSQgPSB0b09ic2VydmFibGUodGhpcy5zZWxlY3RlZFF1ZXJ5RW50aXR5U3RvcmUpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBzZWxlY3RlZFF1ZXJ5RW50aXR5U3RvcmVWYWx1ZSQgPSB0aGlzLnNlbGVjdGVkUXVlcnlFbnRpdHlTdG9yZSQucGlwZShcbiAgICBzd2l0Y2hNYXAoXG4gICAgICAocykgPT5cbiAgICAgICAgcz8uX2NoYW5nZSQucGlwZShcbiAgICAgICAgICBzdGFydFdpdGgoJycpLFxuICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXMuX2RpY3Rpb25hcnkpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShzLl9kaWN0aW9uYXJ5KS5yZWR1Y2UoXG4gICAgICAgICAgICAgIChvYmosIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICAgIG9ialtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge30gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pLFxuICAgICAgICApID8/IG9mKG51bGwpLFxuICAgICksXG4gICk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHF1ZXJ5SGlzdG9yeSA9IHNpZ25hbDxBbnlRdWVyeVtdPihbXSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHN0cmluZ2lmaWVkUXVlcnlDb25maWcgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLnNlbGVjdGVkUXVlcnkoKTtcblxuICAgIGlmICghcXVlcnkpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgY2ZnID0gcXVlcnkuX3F1ZXJ5Q29uZmlnO1xuICAgIGNvbnN0IHJvdXRlID1cbiAgICAgIHR5cGVvZiBjZmcucm91dGUgPT09ICdzdHJpbmcnID8gY2ZnLnJvdXRlIDogY2ZnLnJvdXRlID8gY2ZnLnJvdXRlKHt9KS5yZXBsYWNlKC91bmRlZmluZWQvZywgJzpwYXJhbScpIDogbnVsbDtcblxuICAgIGNvbnN0IHNoYXJlZENmZyA9IHtcbiAgICAgIG1ldGhvZDogY2ZnLm1ldGhvZCxcbiAgICAgIHNlY3VyZTogY2ZnLnNlY3VyZSxcbiAgICAgIHJvdXRlLFxuICAgICAgcmVwb3J0UHJvZ3Jlc3M6IGNmZy5yZXBvcnRQcm9ncmVzcyxcbiAgICAgIHJlc3BvbnNlVHlwZTogY2ZnLnJlc3BvbnNlVHlwZSxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogY2ZnLndpdGhDcmVkZW50aWFscyxcbiAgICAgIGF1dG9SZWZyZXNoT246IGNmZy5hdXRvUmVmcmVzaE9uLFxuICAgICAgZW5hYmxlU21hcnRQb2xsaW5nOiBjZmcuZW5hYmxlU21hcnRQb2xsaW5nLFxuICAgICAgaGFzRW50aXR5U3RvcmU6ICEhY2ZnLmVudGl0eSxcbiAgICB9O1xuXG4gICAgaWYgKGlzR3FsUXVlcnlDb25maWcoY2ZnKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc2hhcmVkQ2ZnLFxuICAgICAgICBxdWVyeTogY2ZnLnF1ZXJ5LFxuICAgICAgICB0cmFuc2ZlclZpYTogY2ZnLnRyYW5zZmVyVmlhLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uc2hhcmVkQ2ZnLFxuICAgIH07XG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRDbGllbnRJZEN0cmwudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuY2xlYXJRdWVyeUhpc3RvcnkoKSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLnF1ZXJ5U3RvcmUkXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChzKSA9PlxuICAgICAgICAgIHMuc3RvcmVDaGFuZ2UkLnBpcGUoXG4gICAgICAgICAgICBzdGFydFdpdGgoJycpLFxuICAgICAgICAgICAgbWFwKCgpID0+IHMuX3N0b3JlKSxcbiAgICAgICAgICAgIHRhcCgocykgPT4gdGhpcy5fcXVlcmllcyQubmV4dChBcnJheS5mcm9tKHMudmFsdWVzKCkpKSksXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLnF1ZXJ5U3RvcmUkXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChzKSA9PlxuICAgICAgICAgIHMucXVlcnlDcmVhdGVkJC5waXBlKFxuICAgICAgICAgICAgdGFwKChxdWVyeSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBjdXJyZW50SGlzdG9yeSA9IHRoaXMucXVlcnlIaXN0b3J5KCk7XG5cbiAgICAgICAgICAgICAgaWYgKCFjdXJyZW50SGlzdG9yeSkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRIaXN0b3J5Q2xvbmUgPSBbLi4uY3VycmVudEhpc3RvcnldO1xuXG4gICAgICAgICAgICAgIGlmICghY3VycmVudEhpc3Rvcnkuc29tZSgocSkgPT4gcS5faWQgPT09IHF1ZXJ5Ll9pZCkpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50SGlzdG9yeUNsb25lLnVuc2hpZnQocXVlcnkpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY3VycmVudEhpc3RvcnlDbG9uZS5zcGxpY2UoNTApO1xuXG4gICAgICAgICAgICAgIHRoaXMucXVlcnlIaXN0b3J5LnNldChjdXJyZW50SGlzdG9yeUNsb25lKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5fcXVlcmllcyRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKHF1ZXJpZXMpID0+IHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50SGlzdG9yeSA9IHRoaXMucXVlcnlIaXN0b3J5KCk7XG5cbiAgICAgICAgICBpZiAoIXF1ZXJpZXMgfHwgIWN1cnJlbnRIaXN0b3J5KSByZXR1cm47XG5cbiAgICAgICAgICBjb25zdCBjdXJyZW50SGlzdG9yeUNsb25lID0gWy4uLmN1cnJlbnRIaXN0b3J5XTtcblxuICAgICAgICAgIGZvciAoY29uc3QgcXVlcnkgb2YgcXVlcmllcykge1xuICAgICAgICAgICAgaWYgKCFjdXJyZW50SGlzdG9yeUNsb25lLnNvbWUoKHEpID0+IHEuX2lkID09PSBxdWVyeS5faWQpKSB7XG4gICAgICAgICAgICAgIGN1cnJlbnRIaXN0b3J5Q2xvbmUudW5zaGlmdChxdWVyeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY3VycmVudEhpc3RvcnlDbG9uZS5zcGxpY2UoNTApO1xuXG4gICAgICAgICAgdGhpcy5xdWVyeUhpc3Rvcnkuc2V0KGN1cnJlbnRIaXN0b3J5Q2xvbmUpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBkZXZ0b29sQ29uZmlnID0ge1xuICAgICAgICBpc09wZW46IHRoaXMuaXNPcGVuKCksXG4gICAgICAgIGlzVHJhbnNsdWNlbnQ6IHRoaXMuaXNUcmFuc2x1Y2VudCgpLFxuICAgICAgICBzbmFwTGF5b3V0OiB0aGlzLnNuYXBMYXlvdXQoKSxcbiAgICAgICAgc2hvd1Jlc3BvbnNlOiB0aGlzLnNob3dSZXNwb25zZSgpLFxuICAgICAgICBzaG93UmF3UmVzcG9uc2U6IHRoaXMuc2hvd1Jhd1Jlc3BvbnNlKCksXG4gICAgICAgIHNob3dRdWVyeUNvbmZpZzogdGhpcy5zaG93UXVlcnlDb25maWcoKSxcbiAgICAgICAgc2hvd0VudGl0eVN0b3JlVmFsdWU6IHRoaXMuc2hvd0VudGl0eVN0b3JlVmFsdWUoKSxcbiAgICAgICAgc2hvd0FyZ3VtZW50czogdGhpcy5zaG93QXJndW1lbnRzKCksXG4gICAgICAgIHNlbGVjdGVkQ2xpZW50SWQ6IHRoaXMuc2VsZWN0ZWRDbGllbnRJZCgpLFxuICAgICAgICBzZWxlY3RlZFF1ZXJ5UGF0aDogdGhpcy5zZWxlY3RlZFF1ZXJ5SWQoKSxcbiAgICAgICAgcXVlcnlMaXN0TW9kZTogdGhpcy5xdWVyeUxpc3RNb2RlKCksXG4gICAgICB9O1xuXG4gICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2V0aGxldGU6cXVlcnk6ZGV2dG9vbHMnLCBKU09OLnN0cmluZ2lmeShkZXZ0b29sQ29uZmlnKSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBpbml0aWFsQ29uZmlnID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCdldGhsZXRlOnF1ZXJ5OmRldnRvb2xzJyk7XG5cbiAgICBpZiAoaW5pdGlhbENvbmZpZykge1xuICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShpbml0aWFsQ29uZmlnKTtcblxuICAgICAgdGhpcy5pc09wZW4uc2V0KHBhcnNlZC5pc09wZW4gPz8gZmFsc2UpO1xuICAgICAgdGhpcy5pc1RyYW5zbHVjZW50LnNldChwYXJzZWQuaXNUcmFuc2x1Y2VudCA/PyBmYWxzZSk7XG4gICAgICB0aGlzLnNuYXBMYXlvdXQuc2V0KHBhcnNlZC5zbmFwTGF5b3V0ID8/ICdmdWxsJyk7XG4gICAgICB0aGlzLnNob3dSZXNwb25zZS5zZXQocGFyc2VkLnNob3dSZXNwb25zZSA/PyBmYWxzZSk7XG4gICAgICB0aGlzLnNob3dSYXdSZXNwb25zZS5zZXQocGFyc2VkLnNob3dSYXdSZXNwb25zZSA/PyBmYWxzZSk7XG4gICAgICB0aGlzLnNob3dRdWVyeUNvbmZpZy5zZXQocGFyc2VkLnNob3dRdWVyeUNvbmZpZyA/PyBmYWxzZSk7XG4gICAgICB0aGlzLnNob3dFbnRpdHlTdG9yZVZhbHVlLnNldChwYXJzZWQuc2hvd0VudGl0eVN0b3JlVmFsdWUgPz8gZmFsc2UpO1xuICAgICAgdGhpcy5zaG93QXJndW1lbnRzLnNldChwYXJzZWQuc2hvd0FyZ3VtZW50cyA/PyBmYWxzZSk7XG4gICAgICB0aGlzLnNlbGVjdGVkQ2xpZW50SWRDdHJsLnNldFZhbHVlKHBhcnNlZC5zZWxlY3RlZENsaWVudElkID8/IDApO1xuICAgICAgdGhpcy5zZWxlY3RlZFF1ZXJ5SWQuc2V0KHBhcnNlZC5zZWxlY3RlZFF1ZXJ5UGF0aCA/PyBudWxsKTtcbiAgICAgIHRoaXMucXVlcnlMaXN0TW9kZS5zZXQocGFyc2VkLnF1ZXJ5TGlzdE1vZGUgPz8gJ2xpdmUnKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgdHJhY2tCeUNsaWVudDogVHJhY2tCeUZ1bmN0aW9uPFF1ZXJ5Q2xpZW50RGV2dG9vbHNPcHRpb25zPiA9IChfLCB7IGNsaWVudCB9KSA9PiBjbGllbnQuY29uZmlnLmJhc2VSb3V0ZTtcbiAgcHJvdGVjdGVkIHRyYWNrQnlRdWVyeTogVHJhY2tCeUZ1bmN0aW9uPEFueVF1ZXJ5PiA9IChfLCB7IF9pZCB9KSA9PiBfaWQ7XG5cbiAgcHJvdGVjdGVkIHRvZ2dsZU9wZW4oKSB7XG4gICAgdGhpcy5pc09wZW4uc2V0KCF0aGlzLmlzT3BlbigpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0b2dnbGVUcmFuc2x1Y2VudCgpIHtcbiAgICB0aGlzLmlzVHJhbnNsdWNlbnQuc2V0KCF0aGlzLmlzVHJhbnNsdWNlbnQoKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdG9nZ2xlU2hvd1Jlc3BvbnNlKCkge1xuICAgIHRoaXMuc2hvd1Jlc3BvbnNlLnNldCghdGhpcy5zaG93UmVzcG9uc2UoKSk7XG5cbiAgICBuZXh0RnJhbWUoKCkgPT4ge1xuICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRvZ2dsZVNob3dRdWVyeUNvbmZpZygpIHtcbiAgICB0aGlzLnNob3dRdWVyeUNvbmZpZy5zZXQoIXRoaXMuc2hvd1F1ZXJ5Q29uZmlnKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRvZ2dsZVNob3dSYXdSZXNwb25zZSgpIHtcbiAgICB0aGlzLnNob3dSYXdSZXNwb25zZS5zZXQoIXRoaXMuc2hvd1Jhd1Jlc3BvbnNlKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRvZ2dsZVNob3dFbnRpdHlTdG9yZVZhbHVlKCkge1xuICAgIHRoaXMuc2hvd0VudGl0eVN0b3JlVmFsdWUuc2V0KCF0aGlzLnNob3dFbnRpdHlTdG9yZVZhbHVlKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRvZ2dsZVNob3dBcmd1bWVudHMoKSB7XG4gICAgdGhpcy5zaG93QXJndW1lbnRzLnNldCghdGhpcy5zaG93QXJndW1lbnRzKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNlbGVjdFNuYXBMYXlvdXQobGF5b3V0OiBRdWVyeURldnRvb2xzU25hcExheW91dCkge1xuICAgIHRoaXMuc25hcExheW91dC5zZXQobGF5b3V0KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZWxlY3RRdWVyeUxpc3RNb2RlKG1vZGU6IFF1ZXJ5TGlzdE1vZGUpIHtcbiAgICB0aGlzLnF1ZXJ5TGlzdE1vZGUuc2V0KG1vZGUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNlbGVjdFF1ZXJ5KHF1ZXJ5OiBBbnlRdWVyeSkge1xuICAgIHRoaXMuc2VsZWN0ZWRRdWVyeUlkLnNldChxdWVyeS5faWQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNsZWFyUXVlcnlIaXN0b3J5KCkge1xuICAgIHRoaXMucXVlcnlIaXN0b3J5LnNldChbXSk7XG4gIH1cbn1cbiIsIjxidXR0b24gKm5nSWY9XCIhaXNPcGVuKClcIiAoY2xpY2spPVwidG9nZ2xlT3BlbigpXCIgY2xhc3M9XCJldC1xdWVyeS1kZXZ0b29scy1vcGVuLWJ0biBldC1xZC1jaGlwXCI+T3BlbiBEZXZ0b29sczwvYnV0dG9uPlxuXG48ZGl2XG4gICpuZ0lmPVwiaXNPcGVuKClcIlxuICBbY2xhc3MuZXQtcXVlcnktZGV2dG9vbHMtY29udGFpbmVyLS10cmFuc3BhcmVudF09XCJpc1RyYW5zbHVjZW50KClcIlxuICBjbGFzcz1cImV0LXF1ZXJ5LWRldnRvb2xzLWNvbnRhaW5lciBldC1xdWVyeS1kZXZ0b29scy1jb250YWluZXItLXNuYXAte3sgc25hcExheW91dCgpIH19XCJcbj5cbiAgPGhlYWRlciBjbGFzcz1cImV0LXFkLWhlYWRlclwiPlxuICAgIDxoMyBjbGFzcz1cImV0LXFkLWhlYWRlcl9fdGl0bGVcIj5RdWVyeSBEZXZ0b29sczwvaDM+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtaGVhZGVyX19zZWxlY3RcIj5cbiAgICAgIDxsYWJlbCBmb3I9XCJldC1xdWVyeS1jbGllbnQtaW5zdGFuY2VcIj5DbGllbnQgaW5zdGFuY2U8L2xhYmVsPlxuICAgICAgPHNlbGVjdCBbZm9ybUNvbnRyb2xdPVwic2VsZWN0ZWRDbGllbnRJZEN0cmxcIiBpZD1cImV0LXF1ZXJ5LWNsaWVudC1pbnN0YW5jZVwiPlxuICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjbGllbnRDb25maWcgb2YgcXVlcnlDbGllbnRDb25maWdzOyBpbmRleCBhcyBpOyB0cmFja0J5OiB0cmFja0J5Q2xpZW50XCIgW3ZhbHVlXT1cImlcIj5cbiAgICAgICAgICB7eyBjbGllbnRDb25maWcuZGlzcGxheU5hbWUgPz8gY2xpZW50Q29uZmlnLmNsaWVudC5jb25maWcuYmFzZVJvdXRlIH19XG4gICAgICAgIDwvb3B0aW9uPlxuICAgICAgPC9zZWxlY3Q+XG4gICAgPC9kaXY+XG5cbiAgICA8YnV0dG9uIChjbGljayk9XCJ0b2dnbGVPcGVuKClcIiBjbGFzcz1cImV0LXFkLWJ0biBldC1xZC1idG4tc2Vjb25kYXJ5XCI+Q2xvc2U8L2J1dHRvbj5cbiAgPC9oZWFkZXI+XG5cbiAgPGRpdiBjbGFzcz1cImV0LXFkLXN1Yi1oZWFkZXJcIj5cbiAgICA8YnV0dG9uXG4gICAgICBbbmdDbGFzc109XCJ7ICdldC1xZC1jaGlwLXNlY29uZGFyeSc6ICFpc1RyYW5zbHVjZW50KCkgfVwiXG4gICAgICAoY2xpY2spPVwidG9nZ2xlVHJhbnNsdWNlbnQoKVwiXG4gICAgICBjbGFzcz1cImV0LXFkLWNoaXAgZXQtcWQtdHJhbnNsdWNlbnQtY2xpY2thYmxlXCJcbiAgICA+XG4gICAgICBUcmFuc2x1Y2VudFxuICAgIDwvYnV0dG9uPlxuICAgIDxkaXYgY2xhc3M9XCJldC1xZC1zdWItaGVhZGVyX19kaXZpZGVyXCI+PC9kaXY+XG4gICAgPGJ1dHRvblxuICAgICAgW25nQ2xhc3NdPVwieyAnZXQtcWQtY2hpcC1zZWNvbmRhcnknOiBzbmFwTGF5b3V0KCkgIT09ICdmdWxsJyB9XCJcbiAgICAgIChjbGljayk9XCJzZWxlY3RTbmFwTGF5b3V0KCdmdWxsJylcIlxuICAgICAgY2xhc3M9XCJldC1xZC1jaGlwXCJcbiAgICA+XG4gICAgICBGdWxsc2NyZWVuXG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgW25nQ2xhc3NdPVwieyAnZXQtcWQtY2hpcC1zZWNvbmRhcnknOiBzbmFwTGF5b3V0KCkgIT09ICd0b3AnIH1cIlxuICAgICAgKGNsaWNrKT1cInNlbGVjdFNuYXBMYXlvdXQoJ3RvcCcpXCJcbiAgICAgIGNsYXNzPVwiZXQtcWQtY2hpcFwiXG4gICAgPlxuICAgICAgVG9wXG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgW25nQ2xhc3NdPVwieyAnZXQtcWQtY2hpcC1zZWNvbmRhcnknOiBzbmFwTGF5b3V0KCkgIT09ICdib3R0b20nIH1cIlxuICAgICAgKGNsaWNrKT1cInNlbGVjdFNuYXBMYXlvdXQoJ2JvdHRvbScpXCJcbiAgICAgIGNsYXNzPVwiZXQtcWQtY2hpcFwiXG4gICAgPlxuICAgICAgQm90dG9tXG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgW25nQ2xhc3NdPVwieyAnZXQtcWQtY2hpcC1zZWNvbmRhcnknOiBzbmFwTGF5b3V0KCkgIT09ICdsZWZ0JyB9XCJcbiAgICAgIChjbGljayk9XCJzZWxlY3RTbmFwTGF5b3V0KCdsZWZ0JylcIlxuICAgICAgY2xhc3M9XCJldC1xZC1jaGlwXCJcbiAgICA+XG4gICAgICBMZWZ0XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgW25nQ2xhc3NdPVwieyAnZXQtcWQtY2hpcC1zZWNvbmRhcnknOiBzbmFwTGF5b3V0KCkgIT09ICdyaWdodCcgfVwiXG4gICAgICAoY2xpY2spPVwic2VsZWN0U25hcExheW91dCgncmlnaHQnKVwiXG4gICAgICBjbGFzcz1cImV0LXFkLWNoaXBcIlxuICAgID5cbiAgICAgIFJpZ2h0XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9XCJzZWxlY3RlZENsaWVudENvbmZpZygpIGFzIGNmZ1wiIGNsYXNzPVwiZXQtcWQtY2xpZW50XCI+XG4gICAgPHAgY2xhc3M9XCJldC1xZC1jbGllbnRfX3RpdGxlXCI+e3sgY2ZnLmRpc3BsYXlOYW1lID8/IGNmZy5jbGllbnQuY29uZmlnLmJhc2VSb3V0ZSB9fTwvcD5cblxuICAgIDxkaXYgY2xhc3M9XCJldC1xZC1jbGllbnRfX2FjdGlvbnNcIj5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cImNmZy5jbGllbnQuX3N0b3JlLnJlZnJlc2hRdWVyaWVzSW5Vc2UoKVwiIGNsYXNzPVwiZXQtcWQtY2hpcFwiPlJlZnJlc2ggYWxsPC9idXR0b24+XG4gICAgICA8YnV0dG9uIChjbGljayk9XCJjZmcuY2xpZW50Ll9zdG9yZS5yZWZyZXNoUXVlcmllc0luVXNlKHsgaWdub3JlQ2FjaGVWYWxpZGl0eTogdHJ1ZSB9KVwiIGNsYXNzPVwiZXQtcWQtY2hpcFwiPlxuICAgICAgICBSZWZyZXNoIGFsbCAoaWdub3JlIGNhY2hlcylcbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAoY2xpY2spPVwiY2ZnLmNsaWVudC5fc3RvcmUucmVmcmVzaFF1ZXJpZXNJblVzZSh7IGlnbm9yZUNhY2hlVmFsaWRpdHk6IHRydWUsIHB1cmdlVW51c2VkOiB0cnVlIH0pXCJcbiAgICAgICAgY2xhc3M9XCJldC1xZC1jaGlwXCJcbiAgICAgID5cbiAgICAgICAgUmVmcmVzaCBhbGwgKGlnbm9yZSBjYWNoZXMgJiBwdXJnZSB1bnVzZWQpXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdJZj1cInNlbGVjdGVkQ2xpZW50Q29uZmlnKCkgYXMgY2ZnXCIgY2xhc3M9XCJldC1xZC1xdWVyaWVzXCI+XG4gICAgPHAgY2xhc3M9XCJldC1xZC1xdWVyaWVzX190aXRsZVwiPlF1ZXJ5IGJyb3dzZXI8L3A+XG4gICAgPGRpdiBjbGFzcz1cImV0LXFkLXF1ZXJpZXNfX2FjdGlvbnNcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgW25nQ2xhc3NdPVwieyAnZXQtcWQtY2hpcC1zZWNvbmRhcnknOiBxdWVyeUxpc3RNb2RlKCkgIT09ICdsaXZlJyB9XCJcbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdFF1ZXJ5TGlzdE1vZGUoJ2xpdmUnKVwiXG4gICAgICAgIGNsYXNzPVwiZXQtcWQtY2hpcCBldC1xZC1jaGlwLWJvcmRlcmVkXCJcbiAgICAgID5cbiAgICAgICAgTGl2ZSAoe3sgcXVlcmllcygpPy5sZW5ndGggPz8gMCB9fSlcbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBbbmdDbGFzc109XCJ7ICdldC1xZC1jaGlwLXNlY29uZGFyeSc6IHF1ZXJ5TGlzdE1vZGUoKSAhPT0gJ2hpc3RvcnknIH1cIlxuICAgICAgICAoY2xpY2spPVwic2VsZWN0UXVlcnlMaXN0TW9kZSgnaGlzdG9yeScpXCJcbiAgICAgICAgY2xhc3M9XCJldC1xZC1jaGlwIGV0LXFkLWNoaXAtYm9yZGVyZWRcIlxuICAgICAgPlxuICAgICAgICBIaXN0b3J5ICh7eyBxdWVyeUhpc3RvcnkoKS5sZW5ndGggfX0vNTApXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJxdWVyeUxpc3RNb2RlKCkgPT09ICdoaXN0b3J5J1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtcXVlcmllc19fZGl2aWRlclwiPjwvZGl2PlxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjbGVhclF1ZXJ5SGlzdG9yeSgpXCIgY2xhc3M9XCJldC1xZC1jaGlwIGV0LXFkLWNoaXAtYm9yZGVyZWRcIj5DbGVhciBoaXN0b3J5PC9idXR0b24+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJldC1xZC1xdWVyaWVzX19icm93c2VyXCI+XG4gICAgICA8dWwgKm5nSWY9XCJxdWVyeUxpc3RNb2RlKCkgPT09ICdsaXZlJ1wiIGNsYXNzPVwiZXQtcWQtcXVlcmllc19fYnJvd3Nlci1saXN0XCI+XG4gICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgcXVlcnkgb2YgcXVlcmllcygpOyB0cmFja0J5OiB0cmFja0J5UXVlcnlcIj5cbiAgICAgICAgICA8YnV0dG9uIFtjbGFzcy5ldC1xZC1xdWVyeS0tYWN0aXZlXT1cInNlbGVjdGVkUXVlcnkoKT8uX2lkID09PSBxdWVyeS5faWRcIiAoY2xpY2spPVwic2VsZWN0UXVlcnkocXVlcnkpXCI+XG4gICAgICAgICAgICA8c3Bhbj4ge3sgcXVlcnkuX3F1ZXJ5Q29uZmlnLm1ldGhvZCB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuPiB7eyBxdWVyeSB8IHF1ZXJ5U2hvcnROYW1lIH19PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2xpPlxuICAgICAgPC91bD5cbiAgICAgIDx1bCAqbmdJZj1cInF1ZXJ5TGlzdE1vZGUoKSA9PT0gJ2hpc3RvcnknXCIgY2xhc3M9XCJldC1xZC1xdWVyaWVzX19icm93c2VyLWxpc3RcIj5cbiAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBxdWVyeSBvZiBxdWVyeUhpc3RvcnkoKTsgdHJhY2tCeTogdHJhY2tCeVF1ZXJ5XCI+XG4gICAgICAgICAgPGJ1dHRvbiBbY2xhc3MuZXQtcWQtcXVlcnktLWFjdGl2ZV09XCJzZWxlY3RlZFF1ZXJ5KCk/Ll9pZCA9PT0gcXVlcnkuX2lkXCIgKGNsaWNrKT1cInNlbGVjdFF1ZXJ5KHF1ZXJ5KVwiPlxuICAgICAgICAgICAgPHNwYW4+IHt7IHF1ZXJ5Ll9xdWVyeUNvbmZpZy5tZXRob2QgfX08L3NwYW4+XG4gICAgICAgICAgICA8c3Bhbj4ge3sgcXVlcnkgfCBxdWVyeVNob3J0TmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9saT5cbiAgICAgIDwvdWw+XG4gICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtcXVlcmllc19fYnJvd3Nlci1kZXRhaWxcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkUXVlcnkoKSBhcyBxdWVyeVwiPlxuICAgICAgICAgIDxwIGNsYXNzPVwiZXQtcWQtcXVlcmllc19fYnJvd3Nlci1kZXRhaWxfX3RpdGxlXCI+XG4gICAgICAgICAgICB7eyBxdWVyeS5fcXVlcnlDb25maWcubWV0aG9kIH19IHt7IHF1ZXJ5Ll9yb3V0ZVdpdGhQYXJhbXMgfX1cbiAgICAgICAgICA8L3A+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtcXVlcmllc19fYWN0aW9uc1wiPlxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicXVlcnkuZXhlY3V0ZSgpXCIgY2xhc3M9XCJldC1xZC1jaGlwIGV0LXFkLWNoaXAtYm9yZGVyZWRcIj5FeGVjdXRlPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJxdWVyeS5leGVjdXRlKHsgc2tpcENhY2hlOiB0cnVlIH0pXCIgY2xhc3M9XCJldC1xZC1jaGlwIGV0LXFkLWNoaXAtYm9yZGVyZWRcIj5cbiAgICAgICAgICAgICAgRXhlY3V0ZSAoaWdub3JlIGNhY2hlKVxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInF1ZXJ5LmFib3J0KClcIiBjbGFzcz1cImV0LXFkLWNoaXAgZXQtcWQtY2hpcC1ib3JkZXJlZFwiPkFib3J0PC9idXR0b24+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtcXVlcmllc19fZGl2aWRlclwiPjwvZGl2PlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdldC1xZC1jaGlwLXNlY29uZGFyeSc6ICFxdWVyeS5pc1BvbGxpbmcgfVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJxdWVyeS5wb2xsKHsgaW50ZXJ2YWw6IDUwMDAsIHRha2VVbnRpbDogX2Rlc3Ryb3kkIH0pXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJldC1xZC1jaGlwIGV0LXFkLWNoaXAtYm9yZGVyZWRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBQb2xsXG4gICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdldC1xZC1jaGlwLXNlY29uZGFyeSc6IHF1ZXJ5LmlzUG9sbGluZyB9XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInF1ZXJ5LnN0b3BQb2xsaW5nKClcIlxuICAgICAgICAgICAgICBjbGFzcz1cImV0LXFkLWNoaXAgZXQtcWQtY2hpcC1ib3JkZXJlZFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFN0b3AgcG9sbGluZ1xuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicXVlcnkuaXNQb2xsaW5nIHx8IHF1ZXJ5Ll9pc1BvbGxpbmdQYXVzZWRcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicXVlcnkucGF1c2VQb2xsaW5nKClcIiBjbGFzcz1cImV0LXFkLWNoaXAgZXQtcWQtY2hpcC1zZWNvbmRhcnkgZXQtcWQtY2hpcC1ib3JkZXJlZFwiPlxuICAgICAgICAgICAgICAgIFBhdXNlIHBvbGxpbmdcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInF1ZXJ5LnJlc3VtZVBvbGxpbmcoKVwiIGNsYXNzPVwiZXQtcWQtY2hpcCBldC1xZC1jaGlwLXNlY29uZGFyeSBldC1xZC1jaGlwLWJvcmRlcmVkXCI+XG4gICAgICAgICAgICAgICAgUmVzdW1lIHBvbGxpbmdcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJldC1xZC1saXN0XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgIDxwPlN0YXRlIHR5cGU8L3A+XG4gICAgICAgICAgICAgIDxwcmU+e3sgcXVlcnkucmF3U3RhdGUudHlwZSB9fTwvcHJlPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldC1xZC1saXN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgPHA+SXMgZXhwaXJlZDwvcD5cbiAgICAgICAgICAgICAgPHByZT57eyBxdWVyeS5pc0V4cGlyZWQgfX08L3ByZT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgIDxwPklzIGluIHVzZTwvcD5cbiAgICAgICAgICAgICAgPHByZT57eyBxdWVyeS5pc0luVXNlIH19PC9wcmU+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICA8cD5TdWJzY3JpYmVyIGNvdW50PC9wPlxuICAgICAgICAgICAgICA8cHJlPnt7IHF1ZXJ5Ll9zdWJzY3JpYmVyQ291bnQgfX08L3ByZT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgIDxwPklzIHBvbGxpbmc8L3A+XG4gICAgICAgICAgICAgIDxwcmU+e3sgcXVlcnkuaXNQb2xsaW5nIH19PC9wcmU+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICA8cD5JcyBwb2xsaW5nIHBhdXNlZDwvcD5cbiAgICAgICAgICAgICAgPHByZT57eyBxdWVyeS5faXNQb2xsaW5nUGF1c2VkIH19PC9wcmU+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICA8cD5FbmFibGUgc21hcnQgcG9sbGluZzwvcD5cbiAgICAgICAgICAgICAgPHByZT57eyBxdWVyeS5fZW5hYmxlU21hcnRQb2xsaW5nIH19PC9wcmU+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICA8cD5Bcmd1bWVudHM8L3A+XG5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdldC1xZC1jaGlwLXNlY29uZGFyeSc6ICFzaG93QXJndW1lbnRzKCkgfVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2hvd0FyZ3VtZW50cygpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXQtcWQtY2hpcCBldC1xZC1jaGlwLWJvcmRlcmVkXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBUb2dnbGVcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxwcmUgKm5nSWY9XCJzaG93QXJndW1lbnRzKClcIj57eyBxdWVyeS5fYXJndW1lbnRzIHwganNvbiB9fTwvcHJlPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldC1xZC1saXN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgPHA+U3RhdGU8L3A+XG4gICAgICAgICAgICAgIDxwPjxpPiBXYXJuaW5nLCB0aGlzIHdpbGwgY2F1c2UgYSBzdWJzY3JpcHRpb24gaWYgc2hvd24hPC9pPjwvcD5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdldC1xZC1jaGlwLXNlY29uZGFyeSc6ICFzaG93UmVzcG9uc2UoKSB9XCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTaG93UmVzcG9uc2UoKVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImV0LXFkLWNoaXAgZXQtcWQtY2hpcC1ib3JkZXJlZFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgVG9nZ2xlXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8cHJlICpuZ0lmPVwic2hvd1Jlc3BvbnNlKClcIj57eyBxdWVyeS5zdGF0ZSQgfCBhc3luYyB8IGpzb24gfX08L3ByZT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXQtcWQtbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgIDxwPlJhdyBzdGF0ZTwvcD5cbiAgICAgICAgICAgICAgPHA+PGk+IFRoZSBxdWVyeSBzdGF0ZSB1bmFmZmVjdGVkIGJ5IGVudGl0eSBzdG9yZXM8L2k+PC9wPlxuXG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZXQtcWQtY2hpcC1zZWNvbmRhcnknOiAhc2hvd1Jhd1Jlc3BvbnNlKCkgfVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2hvd1Jhd1Jlc3BvbnNlKClcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldC1xZC1jaGlwIGV0LXFkLWNoaXAtYm9yZGVyZWRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIFRvZ2dsZVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPHByZSAqbmdJZj1cInNob3dSYXdSZXNwb25zZSgpXCI+e3sgcXVlcnkucmF3U3RhdGUgfCBqc29uIH19PC9wcmU+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV0LXFkLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICA8cD5RdWVyeSBjb25maWc8L3A+XG5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdldC1xZC1jaGlwLXNlY29uZGFyeSc6ICFzaG93UXVlcnlDb25maWcoKSB9XCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTaG93UXVlcnlDb25maWcoKVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImV0LXFkLWNoaXAgZXQtcWQtY2hpcC1ib3JkZXJlZFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgVG9nZ2xlXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8cHJlICpuZ0lmPVwic2hvd1F1ZXJ5Q29uZmlnKClcIj57eyBzdHJpbmdpZmllZFF1ZXJ5Q29uZmlnKCkgfCBqc29uIH19PC9wcmU+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiEhcXVlcnkuX3F1ZXJ5Q29uZmlnLmVudGl0eVwiIGNsYXNzPVwiZXQtcWQtbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgIDxwPkVudGl0eSBzdG9yZSB2YWx1ZTwvcD5cblxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2V0LXFkLWNoaXAtc2Vjb25kYXJ5JzogIXNob3dFbnRpdHlTdG9yZVZhbHVlKCkgfVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2hvd0VudGl0eVN0b3JlVmFsdWUoKVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImV0LXFkLWNoaXAgZXQtcWQtY2hpcC1ib3JkZXJlZFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgVG9nZ2xlXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8cHJlICpuZ0lmPVwic2hvd0VudGl0eVN0b3JlVmFsdWUoKVwiPnt7IHNlbGVjdGVkUXVlcnlFbnRpdHlTdG9yZVZhbHVlJCB8IGFzeW5jIHwganNvbiB9fTwvcHJlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -15,10 +15,10 @@ 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: "16.2.0", ngImport: i0, type: QueryShortNamePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
19
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.2.0", ngImport: i0, type: QueryShortNamePipe, isStandalone: true, name: "queryShortName" }); }
18
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: QueryShortNamePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
19
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.2.2", ngImport: i0, type: QueryShortNamePipe, isStandalone: true, name: "queryShortName" }); }
20
20
  }
21
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: QueryShortNamePipe, decorators: [{
21
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: QueryShortNamePipe, decorators: [{
22
22
  type: Pipe,
23
23
  args: [{ name: 'queryShortName', standalone: true }]
24
24
  }] });
@@ -38,10 +38,10 @@ export class InfinityQueryTriggerDirective {
38
38
  });
39
39
  this._observer.observe(this._elementRef.nativeElement);
40
40
  }
41
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: InfinityQueryTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
42
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.0", type: InfinityQueryTriggerDirective, isStandalone: true, selector: "[etInfinityQueryTrigger], et-infinity-query-trigger", inputs: { scrollContainerSelector: "scrollContainerSelector" }, ngImport: i0 }); }
41
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: InfinityQueryTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
42
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.2", type: InfinityQueryTriggerDirective, isStandalone: true, selector: "[etInfinityQueryTrigger], et-infinity-query-trigger", inputs: { scrollContainerSelector: "scrollContainerSelector" }, ngImport: i0 }); }
43
43
  }
44
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: InfinityQueryTriggerDirective, decorators: [{
44
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: InfinityQueryTriggerDirective, decorators: [{
45
45
  type: Directive,
46
46
  args: [{
47
47
  // eslint-disable-next-line @angular-eslint/directive-selector
@@ -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: "16.2.0", ngImport: i0, type: InfinityQueryDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
159
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.0", 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 }); }
158
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: InfinityQueryDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
159
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.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: "16.2.0", ngImport: i0, type: InfinityQueryDirective, decorators: [{
161
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: InfinityQueryDirective, decorators: [{
162
162
  type: Directive,
163
163
  args: [{
164
164
  // eslint-disable-next-line @angular-eslint/directive-selector
@@ -100,10 +100,10 @@ export class QueryDirective {
100
100
  this._viewContainerRef.createEmbeddedView(this._mainTemplateRef, this._viewContext);
101
101
  }
102
102
  }
103
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: QueryDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
104
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.0", type: QueryDirective, isStandalone: true, selector: "[etQuery]", inputs: { query: ["etQuery", "query"], cache: ["etQueryCache", "cache"] }, ngImport: i0 }); }
103
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: QueryDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
104
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.2", type: QueryDirective, isStandalone: true, selector: "[etQuery]", inputs: { query: ["etQuery", "query"], cache: ["etQueryCache", "cache"] }, ngImport: i0 }); }
105
105
  }
106
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: QueryDirective, decorators: [{
106
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: QueryDirective, decorators: [{
107
107
  type: Directive,
108
108
  args: [{
109
109
  // eslint-disable-next-line @angular-eslint/directive-selector
@@ -120,4 +120,4 @@ export class EntityStore {
120
120
  return keys;
121
121
  }
122
122
  }
123
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2VudGl0eS9lbnRpdHktc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRzlGLE1BQU0sZ0JBQWlCLFNBQVEsS0FBSztJQUNsQyxZQUFZLE9BQWUsRUFBUyxNQUFnQjtRQUNsRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFEbUIsV0FBTSxHQUFOLE1BQU0sQ0FBVTtRQUVsRCxJQUFJLENBQUMsSUFBSSxHQUFHLGtCQUFrQixDQUFDO0lBQ2pDLENBQUM7Q0FDRjtBQUVELFNBQVMsT0FBTyxDQUFJLEdBQVU7SUFDNUIsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBRUQsTUFBTSxPQUFPLFdBQVc7SUFXdEIsWUFBNkIsT0FBMEI7UUFBMUIsWUFBTyxHQUFQLE9BQU8sQ0FBbUI7UUFWdkQ7O1dBRUc7UUFDTSxnQkFBVyxHQUFHLElBQUksR0FBRyxFQUFnQixDQUFDO1FBRS9DOztXQUVHO1FBQ00sYUFBUSxHQUFHLElBQUksT0FBTyxFQUEyQixDQUFDO0lBRUQsQ0FBQztJQUszRCxNQUFNLENBQUMsU0FBa0Q7UUFDdkQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQzVCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDN0MsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQW9CLENBQUMsQ0FB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QUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQWMsRUFBRSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUMzRyxDQUFDO0lBQ0osQ0FBQztJQUVPLElBQUksQ0FBQyxHQUFjLEVBQUUsS0FBUTtRQUNuQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFO1lBQzNCLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ2hFO1FBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTyxPQUFPLENBQUMsR0FBYztRQUM1QixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFO1lBQzNCLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDNUQ7UUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRU8sY0FBYyxDQUFDLElBQTZDO1FBQ2xFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN2QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzFCLE9BQU8sT0FBTyxDQUFDLElBQXFCLENBQUMsQ0FBQzthQUN2QztZQUVELE9BQU8sSUFBbUIsQ0FBQztTQUM1QjtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIG1hcCwgc2hhcmVSZXBsYXksIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRW50aXR5S2V5LCBFbnRpdHlTdG9yZUNvbmZpZyB9IGZyb20gJy4vZW50aXR5LnR5cGVzJztcblxuY2xhc3MgRW50aXR5U3RvcmVFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBwdWJsaWMgZGV0YWlsPzogdW5rbm93bikge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdFbnRpdHlTdG9yZUVycm9yJztcbiAgfVxufVxuXG5mdW5jdGlvbiBmbGF0dGVuPFQ+KGFycjogVFtdW10pOiBUW10ge1xuICByZXR1cm4gYXJyLnJlZHVjZSgoYWNjLCB2YWwpID0+IGFjYy5jb25jYXQodmFsKSwgW10pO1xufVxuXG5leHBvcnQgY2xhc3MgRW50aXR5U3RvcmU8VD4ge1xuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICByZWFkb25seSBfZGljdGlvbmFyeSA9IG5ldyBNYXA8RW50aXR5S2V5LCBUPigpO1xuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHJlYWRvbmx5IF9jaGFuZ2UkID0gbmV3IFN1YmplY3Q8RW50aXR5S2V5IHwgRW50aXR5S2V5W10+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBfY29uZmlnOiBFbnRpdHlTdG9yZUNvbmZpZykge31cblxuICBzZWxlY3Qoa2V5OiBFbnRpdHlLZXkpOiBPYnNlcnZhYmxlPFQgfCBudWxsPjtcbiAgc2VsZWN0KGtleXM6IEVudGl0eUtleVtdKTogT2JzZXJ2YWJsZTxUW10+O1xuICBzZWxlY3Qoa2V5czogRW50aXR5S2V5W11bXSk6IE9ic2VydmFibGU8VFtdPjtcbiAgc2VsZWN0KGtleU9yS2V5czogRW50aXR5S2V5IHwgRW50aXR5S2V5W10gfCBFbnRpdHlLZXlbXVtdKTogT2JzZXJ2YWJsZTxUIHwgbnVsbD4gfCBPYnNlcnZhYmxlPFRbXT4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGtleU9yS2V5cykpIHtcbiAgICAgIGNvbnN0IF9rZXlzID0gdGhpcy5fbm9ybWFsaXplS2V5cyhrZXlPcktleXMpO1xuICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdE1hbnkoX2tleXMgYXMgRW50aXR5S2V5W10pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9zZWxlY3Qoa2V5T3JLZXlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAqKk5vdGU6KiogUHJlZmVyIGBzZWxlY3RgIG92ZXIgYHNlbGVjdFdoZXJlYCB3aGVuIHBvc3NpYmxlLlxuICAgKi9cbiAgc2VsZWN0V2hlcmUocHJlZGljYXRlOiAodmFsdWU6IFQpID0+IGJvb2xlYW4pOiBPYnNlcnZhYmxlPFRbXT4ge1xuICAgIHJldHVybiB0aGlzLl9jaGFuZ2UkLnBpcGUoXG4gICAgICBzdGFydFdpdGgobnVsbCksXG4gICAgICBkZWJvdW5jZVRpbWUoMCksXG4gICAgICBtYXAoKCkgPT4gQXJyYXkuZnJvbSh0aGlzLl9kaWN0aW9uYXJ5LnZhbHVlcygpKS5maWx0ZXIocHJlZGljYXRlKSksXG4gICAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pLFxuICAgICk7XG4gIH1cblxuICBzZXQoa2V5OiBFbnRpdHlLZXksIHZhbHVlOiBUKTogdm9pZDtcbiAgc2V0KGtleXM6IEVudGl0eUtleVtdLCB2YWx1ZXM6IFRbXSk6IHZvaWQ7XG4gIHNldChrZXlzOiBFbnRpdHlLZXlbXVtdLCB2YWx1ZXM6IFRbXVtdKTogdm9pZDtcbiAgc2V0KGtleU9yS2V5czogRW50aXR5S2V5IHwgRW50aXR5S2V5W10gfCBFbnRpdHlLZXlbXVtdLCB2YWx1ZU9yVmFsdWVzOiBUIHwgVFtdIHwgVFtdW10pIHtcbiAgICBjb25zdCBfa2V5cyA9IHRoaXMuX25vcm1hbGl6ZUtleXMoa2V5T3JLZXlzKTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KF9rZXlzKSkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlT3JWYWx1ZXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFbnRpdHlTdG9yZUVycm9yKCdXaGVuIHNldHRpbmcgbXVsdGlwbGUga2V5cywgdmFsdWVzIG11c3QgYmUgYW4gYXJyYXknLCB7XG4gICAgICAgICAga2V5T3JWYWx1ZXM6IF9rZXlzLFxuICAgICAgICAgIHZhbHVlT3JWYWx1ZXMsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBfdmFsdWVzID0gKEFycmF5LmlzQXJyYXkodmFsdWVPclZhbHVlc1swXSkgPyBmbGF0dGVuKHZhbHVlT3JWYWx1ZXMgYXMgVFtdW10pIDogdmFsdWVPclZhbHVlcykgYXMgVFtdO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IF9rZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMuX3NldChfa2V5c1tpXSwgX3ZhbHVlc1tpXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3NldChfa2V5cywgdmFsdWVPclZhbHVlcyBhcyBUKTtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFuZ2UkLm5leHQoX2tleXMpO1xuICB9XG5cbiAgcmVtb3ZlKGtleTogRW50aXR5S2V5KTogdm9pZDtcbiAgcmVtb3ZlKGtleXM6IEVudGl0eUtleVtdKTogdm9pZDtcbiAgcmVtb3ZlKGtleXM6IEVudGl0eUtleVtdW10pOiB2b2lkO1xuICByZW1vdmUoa2V5T3JLZXlzOiBFbnRpdHlLZXkgfCBFbnRpdHlLZXlbXSB8IEVudGl0eUtleVtdW10pIHtcbiAgICBjb25zdCBfa2V5cyA9IHRoaXMuX25vcm1hbGl6ZUtleXMoa2V5T3JLZXlzKTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KF9rZXlzKSkge1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgX2tleXMpIHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlKGtleSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3JlbW92ZShfa2V5cyk7XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbmdlJC5uZXh0KF9rZXlzKTtcbiAgfVxuXG4gIGxvZ1N0YXRlKCkge1xuICAgIGNvbnNvbGUubG9nKCdFbnRpdHlTdG9yZTonLCB0aGlzLl9jb25maWcubmFtZSwge1xuICAgICAgZGljdGlvbmFyeTogdGhpcy5fZGljdGlvbmFyeSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3NlbGVjdChrZXk6IEVudGl0eUtleSk6IE9ic2VydmFibGU8VCB8IG51bGw+IHtcbiAgICBpZiAodGhpcy5fY29uZmlnLmxvZ0FjdGlvbnMpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdFbnRpdHlTdG9yZTogc2VsZWN0JywgdGhpcy5fY29uZmlnLm5hbWUsIGtleSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2NoYW5nZSQucGlwZShcbiAgICAgIHN0YXJ0V2l0aChudWxsKSxcbiAgICAgIGZpbHRlcigodikgPT4ge1xuICAgICAgICBpZiAodiA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodikpIHtcbiAgICAgICAgICByZXR1cm4gdi5pbmNsdWRlcyhrZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHYgPT09IGtleTtcbiAgICAgIH0pLFxuICAgICAgbWFwKCgpID0+IHRoaXMuX2RpY3Rpb25hcnkuZ2V0KGtleSkgPz8gbnVsbCksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NlbGVjdE1hbnkoa2V5czogRW50aXR5S2V5W10pOiBPYnNlcnZhYmxlPFRbXT4ge1xuICAgIGlmICh0aGlzLl9jb25maWcubG9nQWN0aW9ucykge1xuICAgICAgY29uc29sZS5sb2coJ0VudGl0eVN0b3JlOiBzZWxlY3RNYW55JywgdGhpcy5fY29uZmlnLm5hbWUsIGtleXMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jaGFuZ2UkLnBpcGUoXG4gICAgICBzdGFydFdpdGgobnVsbCksXG4gICAgICBmaWx0ZXIoKHYpID0+IHtcbiAgICAgICAgaWYgKHYgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHYpKSB7XG4gICAgICAgICAgcmV0dXJuIGtleXMuc29tZSgoa2V5KSA9PiB2LmluY2x1ZGVzKGtleSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGtleXMuaW5jbHVkZXModik7XG4gICAgICB9KSxcbiAgICAgIG1hcCgoKSA9PiBrZXlzLm1hcCgoa2V5KSA9PiB0aGlzLl9kaWN0aW9uYXJ5LmdldChrZXkpKS5maWx0ZXIoKHZhbHVlKTogdmFsdWUgaXMgVCA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldChrZXk6IEVudGl0eUtleSwgdmFsdWU6IFQpIHtcbiAgICBpZiAodGhpcy5fY29uZmlnLmxvZ0FjdGlvbnMpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdFbnRpdHlTdG9yZTogc2V0JywgdGhpcy5fY29uZmlnLm5hbWUsIGtleSwgdmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMuX2RpY3Rpb25hcnkuc2V0KGtleSwgdmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVtb3ZlKGtleTogRW50aXR5S2V5KSB7XG4gICAgaWYgKHRoaXMuX2NvbmZpZy5sb2dBY3Rpb25zKSB7XG4gICAgICBjb25zb2xlLmxvZygnRW50aXR5U3RvcmU6IHJlbW92ZScsIHRoaXMuX2NvbmZpZy5uYW1lLCBrZXkpO1xuICAgIH1cblxuICAgIHRoaXMuX2RpY3Rpb25hcnkuZGVsZXRlKGtleSk7XG4gIH1cblxuICBwcml2YXRlIF9ub3JtYWxpemVLZXlzKGtleXM6IEVudGl0eUtleSB8IEVudGl0eUtleVtdIHwgRW50aXR5S2V5W11bXSk6IEVudGl0eUtleSB8IEVudGl0eUtleVtdIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShrZXlzKSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5c1swXSkpIHtcbiAgICAgICAgcmV0dXJuIGZsYXR0ZW4oa2V5cyBhcyBFbnRpdHlLZXlbXVtdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGtleXMgYXMgRW50aXR5S2V5W107XG4gICAgfVxuXG4gICAgcmV0dXJuIGtleXM7XG4gIH1cbn1cbiJdfQ==
123
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2VudGl0eS9lbnRpdHktc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRzlGLE1BQU0sZ0JBQWlCLFNBQVEsS0FBSztJQUNsQyxZQUNFLE9BQWUsRUFDUixNQUFnQjtRQUV2QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFGUixXQUFNLEdBQU4sTUFBTSxDQUFVO1FBR3ZCLElBQUksQ0FBQyxJQUFJLEdBQUcsa0JBQWtCLENBQUM7SUFDakMsQ0FBQztDQUNGO0FBRUQsU0FBUyxPQUFPLENBQUksR0FBVTtJQUM1QixPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZELENBQUM7QUFFRCxNQUFNLE9BQU8sV0FBVztJQVd0QixZQUE2QixPQUEwQjtRQUExQixZQUFPLEdBQVAsT0FBTyxDQUFtQjtRQVZ2RDs7V0FFRztRQUNNLGdCQUFXLEdBQUcsSUFBSSxHQUFHLEVBQWdCLENBQUM7UUFFL0M7O1dBRUc7UUFDTSxhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQTJCLENBQUM7SUFFRCxDQUFDO0lBSzNELE1BQU0sQ0FBQyxTQUFrRDtRQUN2RCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDNUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM3QyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBb0IsQ0FBQyxDQUFD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QUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBYyxFQUFFLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQzNHLENBQUM7SUFDSixDQUFDO0lBRU8sSUFBSSxDQUFDLEdBQWMsRUFBRSxLQUFRO1FBQ25DLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUU7WUFDM0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDaEU7UUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVPLE9BQU8sQ0FBQyxHQUFjO1FBQzVCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUU7WUFDM0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztTQUM1RDtRQUVELElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTyxjQUFjLENBQUMsSUFBNkM7UUFDbEUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3ZCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDMUIsT0FBTyxPQUFPLENBQUMsSUFBcUIsQ0FBQyxDQUFDO2FBQ3ZDO1lBRUQsT0FBTyxJQUFtQixDQUFDO1NBQzVCO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBkZWJvdW5jZVRpbWUsIGZpbHRlciwgbWFwLCBzaGFyZVJlcGxheSwgc3RhcnRXaXRoIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBFbnRpdHlLZXksIEVudGl0eVN0b3JlQ29uZmlnIH0gZnJvbSAnLi9lbnRpdHkudHlwZXMnO1xuXG5jbGFzcyBFbnRpdHlTdG9yZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgcHVibGljIGRldGFpbD86IHVua25vd24sXG4gICkge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdFbnRpdHlTdG9yZUVycm9yJztcbiAgfVxufVxuXG5mdW5jdGlvbiBmbGF0dGVuPFQ+KGFycjogVFtdW10pOiBUW10ge1xuICByZXR1cm4gYXJyLnJlZHVjZSgoYWNjLCB2YWwpID0+IGFjYy5jb25jYXQodmFsKSwgW10pO1xufVxuXG5leHBvcnQgY2xhc3MgRW50aXR5U3RvcmU8VD4ge1xuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICByZWFkb25seSBfZGljdGlvbmFyeSA9IG5ldyBNYXA8RW50aXR5S2V5LCBUPigpO1xuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHJlYWRvbmx5IF9jaGFuZ2UkID0gbmV3IFN1YmplY3Q8RW50aXR5S2V5IHwgRW50aXR5S2V5W10+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBfY29uZmlnOiBFbnRpdHlTdG9yZUNvbmZpZykge31cblxuICBzZWxlY3Qoa2V5OiBFbnRpdHlLZXkpOiBPYnNlcnZhYmxlPFQgfCBudWxsPjtcbiAgc2VsZWN0KGtleXM6IEVudGl0eUtleVtdKTogT2JzZXJ2YWJsZTxUW10+O1xuICBzZWxlY3Qoa2V5czogRW50aXR5S2V5W11bXSk6IE9ic2VydmFibGU8VFtdPjtcbiAgc2VsZWN0KGtleU9yS2V5czogRW50aXR5S2V5IHwgRW50aXR5S2V5W10gfCBFbnRpdHlLZXlbXVtdKTogT2JzZXJ2YWJsZTxUIHwgbnVsbD4gfCBPYnNlcnZhYmxlPFRbXT4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGtleU9yS2V5cykpIHtcbiAgICAgIGNvbnN0IF9rZXlzID0gdGhpcy5fbm9ybWFsaXplS2V5cyhrZXlPcktleXMpO1xuICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdE1hbnkoX2tleXMgYXMgRW50aXR5S2V5W10pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9zZWxlY3Qoa2V5T3JLZXlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAqKk5vdGU6KiogUHJlZmVyIGBzZWxlY3RgIG92ZXIgYHNlbGVjdFdoZXJlYCB3aGVuIHBvc3NpYmxlLlxuICAgKi9cbiAgc2VsZWN0V2hlcmUocHJlZGljYXRlOiAodmFsdWU6IFQpID0+IGJvb2xlYW4pOiBPYnNlcnZhYmxlPFRbXT4ge1xuICAgIHJldHVybiB0aGlzLl9jaGFuZ2UkLnBpcGUoXG4gICAgICBzdGFydFdpdGgobnVsbCksXG4gICAgICBkZWJvdW5jZVRpbWUoMCksXG4gICAgICBtYXAoKCkgPT4gQXJyYXkuZnJvbSh0aGlzLl9kaWN0aW9uYXJ5LnZhbHVlcygpKS5maWx0ZXIocHJlZGljYXRlKSksXG4gICAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pLFxuICAgICk7XG4gIH1cblxuICBzZXQoa2V5OiBFbnRpdHlLZXksIHZhbHVlOiBUKTogdm9pZDtcbiAgc2V0KGtleXM6IEVudGl0eUtleVtdLCB2YWx1ZXM6IFRbXSk6IHZvaWQ7XG4gIHNldChrZXlzOiBFbnRpdHlLZXlbXVtdLCB2YWx1ZXM6IFRbXVtdKTogdm9pZDtcbiAgc2V0KGtleU9yS2V5czogRW50aXR5S2V5IHwgRW50aXR5S2V5W10gfCBFbnRpdHlLZXlbXVtdLCB2YWx1ZU9yVmFsdWVzOiBUIHwgVFtdIHwgVFtdW10pIHtcbiAgICBjb25zdCBfa2V5cyA9IHRoaXMuX25vcm1hbGl6ZUtleXMoa2V5T3JLZXlzKTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KF9rZXlzKSkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlT3JWYWx1ZXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFbnRpdHlTdG9yZUVycm9yKCdXaGVuIHNldHRpbmcgbXVsdGlwbGUga2V5cywgdmFsdWVzIG11c3QgYmUgYW4gYXJyYXknLCB7XG4gICAgICAgICAga2V5T3JWYWx1ZXM6IF9rZXlzLFxuICAgICAgICAgIHZhbHVlT3JWYWx1ZXMsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBfdmFsdWVzID0gKEFycmF5LmlzQXJyYXkodmFsdWVPclZhbHVlc1swXSkgPyBmbGF0dGVuKHZhbHVlT3JWYWx1ZXMgYXMgVFtdW10pIDogdmFsdWVPclZhbHVlcykgYXMgVFtdO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IF9rZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMuX3NldChfa2V5c1tpXSwgX3ZhbHVlc1tpXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3NldChfa2V5cywgdmFsdWVPclZhbHVlcyBhcyBUKTtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFuZ2UkLm5leHQoX2tleXMpO1xuICB9XG5cbiAgcmVtb3ZlKGtleTogRW50aXR5S2V5KTogdm9pZDtcbiAgcmVtb3ZlKGtleXM6IEVudGl0eUtleVtdKTogdm9pZDtcbiAgcmVtb3ZlKGtleXM6IEVudGl0eUtleVtdW10pOiB2b2lkO1xuICByZW1vdmUoa2V5T3JLZXlzOiBFbnRpdHlLZXkgfCBFbnRpdHlLZXlbXSB8IEVudGl0eUtleVtdW10pIHtcbiAgICBjb25zdCBfa2V5cyA9IHRoaXMuX25vcm1hbGl6ZUtleXMoa2V5T3JLZXlzKTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KF9rZXlzKSkge1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgX2tleXMpIHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlKGtleSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3JlbW92ZShfa2V5cyk7XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbmdlJC5uZXh0KF9rZXlzKTtcbiAgfVxuXG4gIGxvZ1N0YXRlKCkge1xuICAgIGNvbnNvbGUubG9nKCdFbnRpdHlTdG9yZTonLCB0aGlzLl9jb25maWcubmFtZSwge1xuICAgICAgZGljdGlvbmFyeTogdGhpcy5fZGljdGlvbmFyeSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3NlbGVjdChrZXk6IEVudGl0eUtleSk6IE9ic2VydmFibGU8VCB8IG51bGw+IHtcbiAgICBpZiAodGhpcy5fY29uZmlnLmxvZ0FjdGlvbnMpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdFbnRpdHlTdG9yZTogc2VsZWN0JywgdGhpcy5fY29uZmlnLm5hbWUsIGtleSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2NoYW5nZSQucGlwZShcbiAgICAgIHN0YXJ0V2l0aChudWxsKSxcbiAgICAgIGZpbHRlcigodikgPT4ge1xuICAgICAgICBpZiAodiA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodikpIHtcbiAgICAgICAgICByZXR1cm4gdi5pbmNsdWRlcyhrZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHYgPT09IGtleTtcbiAgICAgIH0pLFxuICAgICAgbWFwKCgpID0+IHRoaXMuX2RpY3Rpb25hcnkuZ2V0KGtleSkgPz8gbnVsbCksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NlbGVjdE1hbnkoa2V5czogRW50aXR5S2V5W10pOiBPYnNlcnZhYmxlPFRbXT4ge1xuICAgIGlmICh0aGlzLl9jb25maWcubG9nQWN0aW9ucykge1xuICAgICAgY29uc29sZS5sb2coJ0VudGl0eVN0b3JlOiBzZWxlY3RNYW55JywgdGhpcy5fY29uZmlnLm5hbWUsIGtleXMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jaGFuZ2UkLnBpcGUoXG4gICAgICBzdGFydFdpdGgobnVsbCksXG4gICAgICBmaWx0ZXIoKHYpID0+IHtcbiAgICAgICAgaWYgKHYgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHYpKSB7XG4gICAgICAgICAgcmV0dXJuIGtleXMuc29tZSgoa2V5KSA9PiB2LmluY2x1ZGVzKGtleSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGtleXMuaW5jbHVkZXModik7XG4gICAgICB9KSxcbiAgICAgIG1hcCgoKSA9PiBrZXlzLm1hcCgoa2V5KSA9PiB0aGlzLl9kaWN0aW9uYXJ5LmdldChrZXkpKS5maWx0ZXIoKHZhbHVlKTogdmFsdWUgaXMgVCA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldChrZXk6IEVudGl0eUtleSwgdmFsdWU6IFQpIHtcbiAgICBpZiAodGhpcy5fY29uZmlnLmxvZ0FjdGlvbnMpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdFbnRpdHlTdG9yZTogc2V0JywgdGhpcy5fY29uZmlnLm5hbWUsIGtleSwgdmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMuX2RpY3Rpb25hcnkuc2V0KGtleSwgdmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVtb3ZlKGtleTogRW50aXR5S2V5KSB7XG4gICAgaWYgKHRoaXMuX2NvbmZpZy5sb2dBY3Rpb25zKSB7XG4gICAgICBjb25zb2xlLmxvZygnRW50aXR5U3RvcmU6IHJlbW92ZScsIHRoaXMuX2NvbmZpZy5uYW1lLCBrZXkpO1xuICAgIH1cblxuICAgIHRoaXMuX2RpY3Rpb25hcnkuZGVsZXRlKGtleSk7XG4gIH1cblxuICBwcml2YXRlIF9ub3JtYWxpemVLZXlzKGtleXM6IEVudGl0eUtleSB8IEVudGl0eUtleVtdIHwgRW50aXR5S2V5W11bXSk6IEVudGl0eUtleSB8IEVudGl0eUtleVtdIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShrZXlzKSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5c1swXSkpIHtcbiAgICAgICAgcmV0dXJuIGZsYXR0ZW4oa2V5cyBhcyBFbnRpdHlLZXlbXVtdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGtleXMgYXMgRW50aXR5S2V5W107XG4gICAgfVxuXG4gICAgcmV0dXJuIGtleXM7XG4gIH1cbn1cbiJdfQ==
@@ -26,4 +26,4 @@ export const removeFrom = (store, { where, id }) => {
26
26
  .pipe(tap((entities) => store.remove(entities.map(id))), take(1))
27
27
  .subscribe();
28
28
  };
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2VudGl0eS9lbnRpdHkudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJckQsTUFBTSxVQUFVLGNBQWMsQ0FBSSxRQUFzQjtJQUN0RCxPQUFPLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsUUFBUSxFQUFFLEtBQUssRUFBbUIsQ0FBQSxDQUFDLENBQUM7QUFDbEUsQ0FBQztBQUVELGlEQUFpRDtBQUNqRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQVd4QixLQUFnQyxFQUNoQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUF1RCxFQUNyRSxFQUFFLENBQ0YsU0FBUyxDQUFDLENBQUMsS0FBc0IsRUFBRSxFQUFFO0lBQ25DLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFNUIsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXRCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN0QixPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUF5QixDQUFBLENBQUMsQ0FBQyxDQUFDO0tBQ2pHO1NBQU07UUFDTCxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUF5QixDQUFBLENBQUMsQ0FBQyxDQUFDO0tBQ2pHO0FBQ0gsQ0FBQyxDQUFDLENBQUM7QUFFTDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFJLEtBQXFCLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUF1QixFQUFFLEVBQUU7SUFDekYsS0FBSztTQUNGLFdBQVcsQ0FBQyxLQUFLLENBQUM7U0FDbEIsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFDakQsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUNSO1NBQ0EsU0FBUyxFQUFFLENBQUM7QUFDakIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGFnaW5hdGVkIH0gZnJvbSAnQGV0aGxldGUvdHlwZXMnO1xuaW1wb3J0IHsgbWFwLCBvZiwgc3dpdGNoTWFwLCB0YWtlLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVudGl0eVN0b3JlIH0gZnJvbSAnLi9lbnRpdHktc3RvcmUnO1xuaW1wb3J0IHsgRW50aXR5S2V5LCBJbnNlcnRGcm9tQ29uZmlnLCBSZW1vdmVGcm9tQ29uZmlnIH0gZnJvbSAnLi9lbnRpdHkudHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gbWFwVG9QYWdpbmF0ZWQ8VD4ocmVzcG9uc2U6IFBhZ2luYXRlZDxUPikge1xuICByZXR1cm4gbWFwKChpdGVtcykgPT4gKHsgLi4ucmVzcG9uc2UsIGl0ZW1zIH0gYXMgUGFnaW5hdGVkPFQ+KSk7XG59XG5cbi8vIEZJWE1FOiBUaGlzIGJyZWFrcyBpZiBTdWJTdG9yZVR5cGUgaXMgYW4gYXJyYXlcbi8qKlxuICogVXNlIGFuIG90aGVyIHN0b3JlIHRvIHJlcHJlc2VudCBhIHByb3BlcnR5IG9mIHRoZSBjdXJyZW50IGVudGl0eS5cbiAqL1xuZXhwb3J0IGNvbnN0IGluc2VydEZyb20gPSA8XG4gIE9yaWdpblN0b3JlVHlwZSxcbiAgT3JpZ2luS2V5cyBleHRlbmRzIGtleW9mIE5vbk51bGxhYmxlPE9yaWdpblN0b3JlVHlwZT4sXG4gIFN1YlN0b3JlVHlwZSBleHRlbmRzIE5vbk51bGxhYmxlPE9yaWdpblN0b3JlVHlwZT5bT3JpZ2luS2V5c10gZXh0ZW5kcyBBcnJheTxpbmZlciBVPlxuICAgID8gVVxuICAgIDogTm9uTnVsbGFibGU8T3JpZ2luU3RvcmVUeXBlPltPcmlnaW5LZXlzXSxcbiAgSWRGbiBleHRlbmRzICh2YWx1ZTogTm9uTnVsbGFibGU8T3JpZ2luU3RvcmVUeXBlPikgPT4gRW50aXR5S2V5IHwgRW50aXR5S2V5W10sXG4gIENvbXB1dGVkRW50aXR5VHlwZSBleHRlbmRzIFJldHVyblR5cGU8SWRGbj4gZXh0ZW5kcyBBcnJheTx1bmtub3duPlxuICAgID8gT3JpZ2luU3RvcmVUeXBlXG4gICAgOiBPbWl0PE9yaWdpblN0b3JlVHlwZSwgT3JpZ2luS2V5cz4gJiB7IFtLIGluIE9yaWdpbktleXNdOiBTdWJTdG9yZVR5cGUgfCBudWxsIH0sXG4+KFxuICBzdG9yZTogRW50aXR5U3RvcmU8U3ViU3RvcmVUeXBlPixcbiAgeyBmb3I6IGtleSwgaWQgfTogSW5zZXJ0RnJvbUNvbmZpZzxPcmlnaW5TdG9yZVR5cGUsIE9yaWdpbktleXMsIElkRm4+LFxuKSA9PlxuICBzd2l0Y2hNYXAoKHZhbHVlOiBPcmlnaW5TdG9yZVR5cGUpID0+IHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gb2YobnVsbCk7XG5cbiAgICBjb25zdCBpZHMgPSBpZCh2YWx1ZSk7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShpZHMpKSB7XG4gICAgICByZXR1cm4gc3RvcmUuc2VsZWN0KGlkcykucGlwZShtYXAoKGRhdGEpID0+ICh7IC4uLnZhbHVlLCBba2V5XTogZGF0YSB9IGFzIENvbXB1dGVkRW50aXR5VHlwZSkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHN0b3JlLnNlbGVjdChpZHMpLnBpcGUobWFwKChkYXRhKSA9PiAoeyAuLi52YWx1ZSwgW2tleV06IGRhdGEgfSBhcyBDb21wdXRlZEVudGl0eVR5cGUpKSk7XG4gICAgfVxuICB9KTtcblxuLyoqXG4gKiBSZW1vdmUgZW50aXRpZXMgZnJvbSBhIHN0b3JlIGJhc2VkIG9uIGEgd2hlcmUgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVGcm9tID0gPFQ+KHN0b3JlOiBFbnRpdHlTdG9yZTxUPiwgeyB3aGVyZSwgaWQgfTogUmVtb3ZlRnJvbUNvbmZpZzxUPikgPT4ge1xuICBzdG9yZVxuICAgIC5zZWxlY3RXaGVyZSh3aGVyZSlcbiAgICAucGlwZShcbiAgICAgIHRhcCgoZW50aXRpZXMpID0+IHN0b3JlLnJlbW92ZShlbnRpdGllcy5tYXAoaWQpKSksXG4gICAgICB0YWtlKDEpLFxuICAgIClcbiAgICAuc3Vic2NyaWJlKCk7XG59O1xuIl19
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL2VudGl0eS9lbnRpdHkudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJckQsTUFBTSxVQUFVLGNBQWMsQ0FBSSxRQUFzQjtJQUN0RCxPQUFPLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFpQixDQUFDLENBQUM7QUFDbEUsQ0FBQztBQUVELGlEQUFpRDtBQUNqRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQVd4QixLQUFnQyxFQUNoQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUF1RCxFQUNyRSxFQUFFLENBQ0YsU0FBUyxDQUFDLENBQUMsS0FBc0IsRUFBRSxFQUFFO0lBQ25DLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFNUIsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXRCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN0QixPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQXVCLENBQUMsQ0FBQyxDQUFDO0tBQ2pHO1NBQU07UUFDTCxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQXVCLENBQUMsQ0FBQyxDQUFDO0tBQ2pHO0FBQ0gsQ0FBQyxDQUFDLENBQUM7QUFFTDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFJLEtBQXFCLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUF1QixFQUFFLEVBQUU7SUFDekYsS0FBSztTQUNGLFdBQVcsQ0FBQyxLQUFLLENBQUM7U0FDbEIsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFDakQsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUNSO1NBQ0EsU0FBUyxFQUFFLENBQUM7QUFDakIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGFnaW5hdGVkIH0gZnJvbSAnQGV0aGxldGUvdHlwZXMnO1xuaW1wb3J0IHsgbWFwLCBvZiwgc3dpdGNoTWFwLCB0YWtlLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVudGl0eVN0b3JlIH0gZnJvbSAnLi9lbnRpdHktc3RvcmUnO1xuaW1wb3J0IHsgRW50aXR5S2V5LCBJbnNlcnRGcm9tQ29uZmlnLCBSZW1vdmVGcm9tQ29uZmlnIH0gZnJvbSAnLi9lbnRpdHkudHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gbWFwVG9QYWdpbmF0ZWQ8VD4ocmVzcG9uc2U6IFBhZ2luYXRlZDxUPikge1xuICByZXR1cm4gbWFwKChpdGVtcykgPT4gKHsgLi4ucmVzcG9uc2UsIGl0ZW1zIH0pIGFzIFBhZ2luYXRlZDxUPik7XG59XG5cbi8vIEZJWE1FOiBUaGlzIGJyZWFrcyBpZiBTdWJTdG9yZVR5cGUgaXMgYW4gYXJyYXlcbi8qKlxuICogVXNlIGFuIG90aGVyIHN0b3JlIHRvIHJlcHJlc2VudCBhIHByb3BlcnR5IG9mIHRoZSBjdXJyZW50IGVudGl0eS5cbiAqL1xuZXhwb3J0IGNvbnN0IGluc2VydEZyb20gPSA8XG4gIE9yaWdpblN0b3JlVHlwZSxcbiAgT3JpZ2luS2V5cyBleHRlbmRzIGtleW9mIE5vbk51bGxhYmxlPE9yaWdpblN0b3JlVHlwZT4sXG4gIFN1YlN0b3JlVHlwZSBleHRlbmRzIE5vbk51bGxhYmxlPE9yaWdpblN0b3JlVHlwZT5bT3JpZ2luS2V5c10gZXh0ZW5kcyBBcnJheTxpbmZlciBVPlxuICAgID8gVVxuICAgIDogTm9uTnVsbGFibGU8T3JpZ2luU3RvcmVUeXBlPltPcmlnaW5LZXlzXSxcbiAgSWRGbiBleHRlbmRzICh2YWx1ZTogTm9uTnVsbGFibGU8T3JpZ2luU3RvcmVUeXBlPikgPT4gRW50aXR5S2V5IHwgRW50aXR5S2V5W10sXG4gIENvbXB1dGVkRW50aXR5VHlwZSBleHRlbmRzIFJldHVyblR5cGU8SWRGbj4gZXh0ZW5kcyBBcnJheTx1bmtub3duPlxuICAgID8gT3JpZ2luU3RvcmVUeXBlXG4gICAgOiBPbWl0PE9yaWdpblN0b3JlVHlwZSwgT3JpZ2luS2V5cz4gJiB7IFtLIGluIE9yaWdpbktleXNdOiBTdWJTdG9yZVR5cGUgfCBudWxsIH0sXG4+KFxuICBzdG9yZTogRW50aXR5U3RvcmU8U3ViU3RvcmVUeXBlPixcbiAgeyBmb3I6IGtleSwgaWQgfTogSW5zZXJ0RnJvbUNvbmZpZzxPcmlnaW5TdG9yZVR5cGUsIE9yaWdpbktleXMsIElkRm4+LFxuKSA9PlxuICBzd2l0Y2hNYXAoKHZhbHVlOiBPcmlnaW5TdG9yZVR5cGUpID0+IHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gb2YobnVsbCk7XG5cbiAgICBjb25zdCBpZHMgPSBpZCh2YWx1ZSk7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShpZHMpKSB7XG4gICAgICByZXR1cm4gc3RvcmUuc2VsZWN0KGlkcykucGlwZShtYXAoKGRhdGEpID0+ICh7IC4uLnZhbHVlLCBba2V5XTogZGF0YSB9KSBhcyBDb21wdXRlZEVudGl0eVR5cGUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHN0b3JlLnNlbGVjdChpZHMpLnBpcGUobWFwKChkYXRhKSA9PiAoeyAuLi52YWx1ZSwgW2tleV06IGRhdGEgfSkgYXMgQ29tcHV0ZWRFbnRpdHlUeXBlKSk7XG4gICAgfVxuICB9KTtcblxuLyoqXG4gKiBSZW1vdmUgZW50aXRpZXMgZnJvbSBhIHN0b3JlIGJhc2VkIG9uIGEgd2hlcmUgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVGcm9tID0gPFQ+KHN0b3JlOiBFbnRpdHlTdG9yZTxUPiwgeyB3aGVyZSwgaWQgfTogUmVtb3ZlRnJvbUNvbmZpZzxUPikgPT4ge1xuICBzdG9yZVxuICAgIC5zZWxlY3RXaGVyZSh3aGVyZSlcbiAgICAucGlwZShcbiAgICAgIHRhcCgoZW50aXRpZXMpID0+IHN0b3JlLnJlbW92ZShlbnRpdGllcy5tYXAoaWQpKSksXG4gICAgICB0YWtlKDEpLFxuICAgIClcbiAgICAuc3Vic2NyaWJlKCk7XG59O1xuIl19