@ethlete/query 5.8.0 → 5.9.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.
Files changed (44) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/esm2022/index.mjs +4 -2
  3. package/esm2022/lib/auth/basic-auth-provider.mjs +1 -1
  4. package/esm2022/lib/auth/bearer-auth-provider.mjs +1 -1
  5. package/esm2022/lib/auth/custom-header-auth-provider.mjs +1 -1
  6. package/esm2022/lib/devtools/components/query-devtools/index.mjs +2 -0
  7. package/esm2022/lib/devtools/components/query-devtools/query-devtools.component.mjs +79 -5
  8. package/esm2022/lib/devtools/pipes/index.mjs +2 -2
  9. package/esm2022/lib/devtools/pipes/query-short-name.pipe.mjs +3 -3
  10. package/esm2022/lib/devtools/utils/index.mjs +2 -2
  11. package/esm2022/lib/directives/infinity-query-trigger.directive.mjs +3 -3
  12. package/esm2022/lib/directives/infinity-query.directive.mjs +3 -3
  13. package/esm2022/lib/directives/query.directive.mjs +3 -3
  14. package/esm2022/lib/query/query.mjs +43 -19
  15. package/esm2022/lib/query/query.types.mjs +1 -1
  16. package/esm2022/lib/query-creator/query-creator.mjs +1 -1
  17. package/esm2022/lib/request/request.util.mjs +1 -1
  18. package/fesm2022/ethlete-query.mjs +373 -277
  19. package/fesm2022/ethlete-query.mjs.map +1 -1
  20. package/index.d.ts +3 -1
  21. package/lib/auth/basic-auth-provider.d.ts +1 -1
  22. package/lib/auth/bearer-auth-provider.d.ts +1 -1
  23. package/lib/auth/custom-header-auth-provider.d.ts +1 -1
  24. package/lib/devtools/components/query-devtools/query-devtools.component.d.ts +74 -0
  25. package/lib/devtools/pipes/index.d.ts +1 -1
  26. package/lib/devtools/utils/index.d.ts +1 -1
  27. package/lib/query/query.types.d.ts +1 -0
  28. package/lib/query/query.utils.d.ts +5 -5
  29. package/lib/query-client/query-client.d.ts +8 -8
  30. package/lib/request/request.d.ts +1 -1
  31. package/lib/request/request.util.d.ts +6 -5
  32. package/package.json +5 -5
  33. package/esm2022/lib/devtools/components/public-api.mjs +0 -2
  34. package/esm2022/lib/devtools/components/query-devtools/public-api.mjs +0 -2
  35. package/esm2022/lib/devtools/index.mjs +0 -2
  36. package/esm2022/lib/devtools/pipes/public-api.mjs +0 -2
  37. package/esm2022/lib/devtools/public-api.mjs +0 -4
  38. package/esm2022/lib/devtools/utils/public-api.mjs +0 -2
  39. package/lib/devtools/components/public-api.d.ts +0 -1
  40. package/lib/devtools/index.d.ts +0 -1
  41. package/lib/devtools/pipes/public-api.d.ts +0 -1
  42. package/lib/devtools/public-api.d.ts +0 -3
  43. package/lib/devtools/utils/public-api.d.ts +0 -1
  44. /package/lib/devtools/components/query-devtools/{public-api.d.ts → index.d.ts} +0 -0
@@ -1,2 +1,2 @@
1
- export * from './public-api';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZGV2dG9vbHMvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
1
+ export * from './query-client.utils';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvZGV2dG9vbHMvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vcXVlcnktY2xpZW50LnV0aWxzJztcbiJdfQ==
@@ -40,10 +40,10 @@ export class InfinityQueryTriggerDirective {
40
40
  });
41
41
  this._observer.observe(this._elementRef.nativeElement);
42
42
  }
43
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: InfinityQueryTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
44
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.4", type: InfinityQueryTriggerDirective, isStandalone: true, selector: "[etInfinityQueryTrigger], et-infinity-query-trigger", inputs: { scrollContainerSelector: "scrollContainerSelector" }, ngImport: i0 }); }
43
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: InfinityQueryTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
44
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.0", type: InfinityQueryTriggerDirective, isStandalone: true, selector: "[etInfinityQueryTrigger], et-infinity-query-trigger", inputs: { scrollContainerSelector: "scrollContainerSelector" }, ngImport: i0 }); }
45
45
  }
46
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: InfinityQueryTriggerDirective, decorators: [{
46
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: InfinityQueryTriggerDirective, decorators: [{
47
47
  type: Directive,
48
48
  args: [{
49
49
  // 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: "17.2.4", ngImport: i0, type: InfinityQueryDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
159
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.4", 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: "17.3.0", ngImport: i0, type: InfinityQueryDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
159
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.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 }); }
160
160
  }
161
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: InfinityQueryDirective, decorators: [{
161
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: InfinityQueryDirective, decorators: [{
162
162
  type: Directive,
163
163
  args: [{
164
164
  // eslint-disable-next-line @angular-eslint/directive-selector
@@ -103,10 +103,10 @@ export class QueryDirective {
103
103
  this._viewContainerRef.createEmbeddedView(this._mainTemplateRef, this._viewContext);
104
104
  }
105
105
  }
106
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: QueryDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
107
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.4", type: QueryDirective, isStandalone: true, selector: "[etQuery]", inputs: { query: ["etQuery", "query"], cache: ["etQueryCache", "cache"] }, ngImport: i0 }); }
106
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: QueryDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
107
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.0", type: QueryDirective, isStandalone: true, selector: "[etQuery]", inputs: { query: ["etQuery", "query"], cache: ["etQueryCache", "cache"] }, ngImport: i0 }); }
108
108
  }
109
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: QueryDirective, decorators: [{
109
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: QueryDirective, decorators: [{
110
110
  type: Directive,
111
111
  args: [{
112
112
  // eslint-disable-next-line @angular-eslint/directive-selector
@@ -1,9 +1,9 @@
1
1
  import { untracked } from '@angular/core';
2
- import { BehaviorSubject, filter, interval, map, of, ReplaySubject, shareReplay, skip, Subject, switchMap, takeUntil, takeWhile, tap, timer, } from 'rxjs';
2
+ import { BehaviorSubject, combineLatest, filter, interval, map, of, ReplaySubject, shareReplay, skip, Subject, switchMap, take, takeUntil, takeWhile, tap, timer, } from 'rxjs';
3
3
  import { isBearerAuthProvider } from '../auth';
4
4
  import { shouldCacheQuery } from '../query-client';
5
5
  import { request } from '../request';
6
- import { computeQueryBody, computeQueryHeaders, computeQueryMethod, filterFailure, filterSuccess, isGqlQueryConfig, isQueryStateCancelled, isQueryStateFailure, isQueryStateLoading, isQueryStatePrepared, isQueryStateSuccess, takeUntilResponse, } from './query.utils';
6
+ import { computeQueryBody, computeQueryHeaders, computeQueryMethod, filterFailure, filterSuccess, isGqlQueryConfig, isQueryStateCancelled, isQueryStateFailure, isQueryStateLoading, isQueryStatePrepared, isQueryStateSuccess, switchQueryState, takeUntilResponse, } from './query.utils';
7
7
  let _nextQueryId = 0;
8
8
  export class Query {
9
9
  get _nextId() {
@@ -146,25 +146,49 @@ export class Query {
146
146
  }
147
147
  }
148
148
  this._updateState({ type: "LOADING" /* QueryStateType.Loading */, meta });
149
- const method = computeQueryMethod({ config: queryConfig, client: this._client });
150
- const body = computeQueryBody({ config: queryConfig, client: this._client, args: this._arguments, method });
151
- const headers = computeQueryHeaders({ client: this._client, config: queryConfig, args: this._arguments });
152
149
  if (this._isInMockMode) {
153
- this._mockRequest(headers, meta, options);
150
+ this._mockRequest({}, meta, options);
154
151
  }
155
152
  else {
156
- request({
157
- urlWithParams: this._routeWithParams,
158
- method,
159
- body,
160
- headers,
161
- reportProgress: queryConfig.reportProgress,
162
- responseType: queryConfig.responseType,
163
- withCredentials: queryConfig.withCredentials,
164
- cacheAdapter: this._client.config.request?.cacheAdapter,
165
- retryFn: this._client.config.request?.retryFn,
166
- })
167
- .pipe(tap((state) => this._updateEntityState(state, meta, options)), takeUntil(this._onAbort$))
153
+ let goSignal = of(true);
154
+ if (authProvider &&
155
+ isBearerAuthProvider(authProvider) &&
156
+ queryConfig.secure &&
157
+ !isQueryStateSuccess(authProvider.currentRefreshQuery?.rawState)) {
158
+ // On page load the query might be executed before the auth provider has been initialized.
159
+ // In this case we need to wait for the auth provider to be ready before we can execute the query.
160
+ goSignal = combineLatest([
161
+ // The tokens might get set without a refresh query being created (e.g.) directly after login.
162
+ authProvider.currentRefreshQuery$.pipe(switchQueryState(), takeUntilResponse()),
163
+ authProvider.tokens$.pipe(take(1)),
164
+ ]).pipe(takeUntil(this._onAbort$), filter(([state, tokens]) => {
165
+ if (state) {
166
+ return !isQueryStateLoading(state);
167
+ }
168
+ return !!tokens;
169
+ }), tap(([state]) => {
170
+ if (isQueryStateFailure(state)) {
171
+ this._updateEntityState({ type: 'failure', error: state.error, headers: {} }, meta, options);
172
+ }
173
+ }), map(() => true), take(1));
174
+ }
175
+ goSignal
176
+ .pipe(switchMap(() => {
177
+ const method = computeQueryMethod({ config: queryConfig, client: this._client });
178
+ const body = computeQueryBody({ config: queryConfig, client: this._client, args: this._arguments, method });
179
+ const headers = computeQueryHeaders({ client: this._client, config: queryConfig, args: this._arguments });
180
+ return request({
181
+ urlWithParams: this._routeWithParams,
182
+ method,
183
+ body,
184
+ headers,
185
+ reportProgress: queryConfig.reportProgress,
186
+ responseType: queryConfig.responseType,
187
+ withCredentials: queryConfig.withCredentials,
188
+ cacheAdapter: this._client.config.request?.cacheAdapter,
189
+ retryFn: this._client.config.request?.retryFn,
190
+ }).pipe(tap((state) => this._updateEntityState(state, meta, options)), takeUntil(this._onAbort$));
191
+ }))
168
192
  .subscribe();
169
193
  }
170
194
  return this;
@@ -401,4 +425,4 @@ export class Query {
401
425
  return Object.keys(this._dependents).length > 0;
402
426
  }
403
427
  }
404
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvcXVlcnkvcXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQ0wsZUFBZSxFQUNmLE1BQU0sRUFDTixRQUFRLEVBQ1IsR0FBRyxFQUVILEVBQUUsRUFDRixhQUFhLEVBQ2IsV0FBVyxFQUNYLElBQUksRUFDSixPQUFPLEVBRVAsU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEVBQ1QsR0FBRyxFQUNILEtBQUssR0FDTixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUUvQyxPQUFPLEVBQWUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRSxPQUFPLEVBQWtCLE9BQU8sRUFBOEMsTUFBTSxZQUFZLENBQUM7QUFhakcsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixtQkFBbUIsRUFDbkIsa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLHFCQUFxQixFQUNyQixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQixtQkFBbUIsRUFDbkIsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztBQUVyQixNQUFNLE9BQU8sS0FBSztJQXVDaEIsSUFBWSxPQUFPO1FBQ2pCLE9BQU8sRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUN0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0s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QUM7UUFFL0IsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDZixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUVELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRDs7T0FFRztJQUNILGNBQWM7UUFDWixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDbEQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdW50cmFja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGZpbHRlcixcbiAgaW50ZXJ2YWwsXG4gIG1hcCxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIFJlcGxheVN1YmplY3QsXG4gIHNoYXJlUmVwbGF5LFxuICBza2lwLFxuICBTdWJqZWN0LFxuICBTdWJzY3JpcHRpb24sXG4gIHN3aXRjaE1hcCxcbiAgdGFrZVVudGlsLFxuICB0YWtlV2hpbGUsXG4gIHRhcCxcbiAgdGltZXIsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgaXNCZWFyZXJBdXRoUHJvdmlkZXIgfSBmcm9tICcuLi9hdXRoJztcbmltcG9ydCB7IEVudGl0eVN0b3JlIH0gZnJvbSAnLi4vZW50aXR5JztcbmltcG9ydCB7IFF1ZXJ5Q2xpZW50LCBzaG91bGRDYWNoZVF1ZXJ5IH0gZnJvbSAnLi4vcXVlcnktY2xpZW50JztcbmltcG9ydCB7IEh0dHBTdGF0dXNDb2RlLCByZXF1ZXN0LCBSZXF1ZXN0RXJyb3IsIFJlcXVlc3RFdmVudCwgUmVxdWVzdEhlYWRlcnMgfSBmcm9tICcuLi9yZXF1ZXN0JztcbmltcG9ydCB7XG4gIEJhc2VBcmd1bWVudHMsXG4gIEV4ZWN1dGVRdWVyeU9wdGlvbnMsXG4gIEdxbFF1ZXJ5Q29uZmlnLFxuICBQb2xsQ29uZmlnLFxuICBRdWVyeUF1dG9SZWZyZXNoQ29uZmlnLFxuICBRdWVyeVN0YXRlLFxuICBRdWVyeVN0YXRlTWV0YSxcbiAgUXVlcnlTdGF0ZVR5cGUsXG4gIFJlc3RRdWVyeUNvbmZpZyxcbiAgUm91dGVUeXBlLFxufSBmcm9tICcuL3F1ZXJ5LnR5cGVzJztcbmltcG9ydCB7XG4gIGNvbXB1dGVRdWVyeUJvZHksXG4gIGNvbXB1dGVRdWVyeUhlYWRlcnMsXG4gIGNvbXB1dGVRdWVyeU1ldGhvZCxcbiAgZmlsdGVyRmFpbHVyZSxcbiAgZmlsdGVyU3VjY2VzcyxcbiAgaXNHcWxRdWVyeUNvbmZpZyxcbiAgaXNRdWVyeVN0YXRlQ2FuY2VsbGVkLFxuICBpc1F1ZXJ5U3RhdGVGYWlsdXJlLFxuICBpc1F1ZXJ5U3RhdGVMb2FkaW5nLFxuICBpc1F1ZXJ5U3RhdGVQcmVwYXJlZCxcbiAgaXNRdWVyeVN0YXRlU3VjY2VzcyxcbiAgdGFrZVVudGlsUmVzcG9uc2UsXG59IGZyb20gJy4vcXVlcnkudXRpbHMnO1xuXG5sZXQgX25leHRRdWVyeUlkID0gMDtcblxuZXhwb3J0IGNsYXNzIFF1ZXJ5PFxuICBSZXNwb25zZSxcbiAgQXJndW1lbnRzIGV4dGVuZHMgQmFzZUFyZ3VtZW50cyB8IHVuZGVmaW5lZCxcbiAgUm91dGUgZXh0ZW5kcyBSb3V0ZVR5cGU8QXJndW1lbnRzPixcbiAgU3RvcmUgZXh0ZW5kcyBFbnRpdHlTdG9yZTx1bmtub3duPixcbiAgRGF0YSxcbiAgSWQsXG4+IHtcbiAgcmVhZG9ubHkgX2lkID0gX25leHRRdWVyeUlkKys7XG5cbiAgcHJpdmF0ZSBfY3VycmVudExvY2FsSWQgPSAwO1xuICBwcml2YXRlIF9wb2xsaW5nU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfb25BYm9ydCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIF9jdXJyZW50UG9sbENvbmZpZzogUG9sbENvbmZpZyB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogVXNlZCB0byB0cmFjayB3aGljaCBjb21wb25lbnRzIGRlcGVuZCBvbiB0aGlzIHF1ZXJ5LlxuICAgKiBUaGUga2V5IGlzIHRoZSBjb21wb25lbnQncyBfdE5vZGUgaW5kZXguXG4gICAqIFRoZSB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBjb21wb25lbnQgaGFzIHN1YnNjcmliZWQgdG8gdGhpcyBxdWVyeS5cbiAgICogVGhlIHZhbHVlIG1pZ2h0IGluY3JlYXNlIHNpbmNlIHdlIGNhbnQgZGlzdGluZ3Vpc2ggYmV0d2VlbiBhIGNvbXBvbmVudCBhbmQgYSBob3N0IGRpcmVjdGl2ZSBhcHBsaWVkIHRvIGl0LlxuICAgKi9cbiAgX2RlcGVuZGVudHM6IFJlY29yZDxudW1iZXIsIG51bWJlcj4gPSB7fTtcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBfZGVwZW5kZW50c0NoYW5nZWQkID0gbmV3IFJlcGxheVN1YmplY3Q8UmVjb3JkPG51bWJlciwgbnVtYmVyPj4oKTtcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBfaXNQb2xsaW5nUGF1c2VkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxRdWVyeVN0YXRlPFJlc3BvbnNlPj4oe1xuICAgIHR5cGU6IFF1ZXJ5U3RhdGVUeXBlLlByZXBhcmVkLFxuICAgIG1ldGE6IHsgaWQ6IHRoaXMuX2N1cnJlbnRMb2NhbElkLCB0cmlnZ2VyZWRWaWE6ICdwcm9ncmFtJyB9LFxuICB9KTtcblxuICBwcml2YXRlIGdldCBfbmV4dElkKCkge1xuICAgIHJldHVybiArK3RoaXMuX2N1cnJlbnRMb2NhbElkO1xuICB9XG5cbiAgZ2V0IHN0YXRlJCgpOiBPYnNlcnZhYmxlPFF1ZXJ5U3RhdGU8RGF0YT4+IHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGUkLnBpcGUoXG4gICAgICB0YXAoKHMpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9jbGllbnQuY29uZmlnLmxvZ2dpbmc/LnByZXBhcmVkUXVlcnlTdWJzY3JpcHRpb25zKSByZXR1cm47XG5cbiAgICAgICAgaWYgKGlzUXVlcnlTdGF0ZVByZXBhcmVkKHMpKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYFF1ZXJ5ICR7dGhpcy5fcm91dGVXaXRoUGFyYW1zfSB3YXMgc3Vic2NyaWJlZCB0byBpbiB0aGUgcHJlcGFyZWQgc3RhdGUuIERpZCB5b3UgZm9yZ2V0IHRvIGNhbGwgLmV4ZWN1dGUoKT9gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgc3dpdGNoTWFwKChzKSA9PiB0aGlzLl90cmFuc2Zvcm1TdGF0ZShzKSksXG4gICAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHF1ZXJ5LlxuICAgKlxuICAgKiAqKldhcm5pbmchKiogVGhpcyBkaWZmZXJzIGZyb20gdGhlIGBzdGF0ZSRgIG9ic2VydmFibGUgaW4gdGhhdCBpdCBkb2VzIG5vdCB1c2UgdGhlIHF1ZXJ5IHN0b3JlLiBUaHVzLCB0aGUgcmVzcG9uc2UgZGF0YSBtaWdodCBiZSBvdXRkYXRlZC5cbiAgICogVXNlIGBzdGF0ZSRgIChvciBgZmlyc3RWYWx1ZUZyb20oc3RhdGUkKWApIHRoZSBtb3N0IHVwLXRvLWRhdGUgZGF0YS5cbiAgICovXG4gIGdldCByYXdTdGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGUkLnZhbHVlO1xuICB9XG5cbiAgZ2V0IGlzRXhwaXJlZCgpIHtcbiAgICBpZiAoaXNRdWVyeVN0YXRlTG9hZGluZyh0aGlzLnJhd1N0YXRlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGlzUXVlcnlTdGF0ZVByZXBhcmVkKHRoaXMucmF3U3RhdGUpIHx8XG4gICAgICBpc1F1ZXJ5U3RhdGVDYW5jZWxsZWQodGhpcy5yYXdTdGF0ZSkgfHxcbiAgICAgIGlzUXVlcnlTdGF0ZUZhaWx1cmUodGhpcy5yYXdTdGF0ZSlcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHRzID0gdGhpcy5yYXdTdGF0ZS5tZXRhLmV4cGlyZXNBdDtcblxuICAgIGlmICghdHMpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0cyA8IERhdGUubm93KCk7XG4gIH1cblxuICBnZXQgaXNJblVzZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGUkLm9ic2VydmVkIHx8IE9iamVjdC5rZXlzKHRoaXMuX2RlcGVuZGVudHMpLmxlbmd0aCA+IDA7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXQgX3N1YnNjcmliZXJDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGUkLm9ic2VydmVycy5sZW5ndGg7XG4gIH1cblxuICBnZXQgaXNQb2xsaW5nKCkge1xuICAgIHJldHVybiAhIXRoaXMuX3BvbGxpbmdTdWJzY3JpcHRpb247XG4gIH1cblxuICBnZXQgYXV0b1JlZnJlc2hPbkNvbmZpZygpIHtcbiAgICBjb25zdCBiYXNlID0gdGhpcy5fcXVlcnlDb25maWcuYXV0b1JlZnJlc2hPbiA/PyB7fTtcblxuICAgIGNvbnN0IHRyYW5zZm9ybWVkOiBSZWFkb25seTxRdWVyeUF1dG9SZWZyZXNoQ29uZmlnPiA9IHtcbiAgICAgIHF1ZXJ5Q2xpZW50RGVmYXVsdEhlYWRlcnNDaGFuZ2U6IGJhc2UucXVlcnlDbGllbnREZWZhdWx0SGVhZGVyc0NoYW5nZSA/PyB0cnVlLFxuICAgICAgd2luZG93Rm9jdXM6IGJhc2Uud2luZG93Rm9jdXMgPz8gdHJ1ZSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRyYW5zZm9ybWVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0IF9lbmFibGVTbWFydFBvbGxpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXJ5Q29uZmlnLmVuYWJsZVNtYXJ0UG9sbGluZyA/PyB0cnVlO1xuICB9XG5cbiAgZ2V0IHN0b3JlKCkge1xuICAgIHJldHVybiB0aGlzLl9xdWVyeUNvbmZpZy5lbnRpdHk/LnN0b3JlID8/IG51bGw7XG4gIH1cblxuICBnZXQgY2FuQmVDYWNoZWQoKSB7XG4gICAgcmV0dXJuIHNob3VsZENhY2hlUXVlcnkodGhpcy5fcXVlcnlDb25maWcubWV0aG9kKTtcbiAgfVxuXG4gIGdldCBfaXNJbk1vY2tNb2RlKCkge1xuICAgIHJldHVybiAhIXRoaXMuX2FyZ3VtZW50cz8ubW9jaztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NsaWVudDogUXVlcnlDbGllbnQsXG5cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgX3F1ZXJ5Q29uZmlnOlxuICAgICAgfCBSZXN0UXVlcnlDb25maWc8Um91dGUsIFJlc3BvbnNlLCBBcmd1bWVudHMsIFN0b3JlLCBEYXRhLCBJZD5cbiAgICAgIHwgR3FsUXVlcnlDb25maWc8Um91dGUsIFJlc3BvbnNlLCBBcmd1bWVudHMsIFN0b3JlLCBEYXRhLCBJZD4sXG5cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgX3JvdXRlV2l0aFBhcmFtczogUm91dGUsXG5cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgX2FyZ3VtZW50czogQXJndW1lbnRzLFxuXG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IF9xdWVyeVN0b3JlS2V5OiBzdHJpbmcsXG4gICkge31cblxuICBleGVjdXRlKG9wdGlvbnM6IEV4ZWN1dGVRdWVyeU9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHsgc2tpcENhY2hlID0gZmFsc2UsIF90cmlnZ2VyZWRWaWE6IHRyaWdnZXJlZFZpYSA9ICdwcm9ncmFtJywgY2FuY2VsUHJldmlvdXMgPSBmYWxzZSB9ID0gb3B0aW9ucztcbiAgICBjb25zdCB7IGF1dGhQcm92aWRlciB9ID0gdGhpcy5fY2xpZW50O1xuICAgIGNvbnN0IHF1ZXJ5Q29uZmlnID0gdGhpcy5fcXVlcnlDb25maWc7XG5cbiAgICBpZiAoIXRoaXMuaXNFeHBpcmVkICYmICFza2lwQ2FjaGUgJiYgaXNRdWVyeVN0YXRlU3VjY2Vzcyh0aGlzLnJhd1N0YXRlKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgaWYgKHF1ZXJ5Q29uZmlnLnNlY3VyZSAmJiAhYXV0aFByb3ZpZGVyICYmICF0aGlzLl9pc0luTW9ja01vZGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGV4ZWN1dGUgc2VjdXJlIHF1ZXJ5IHdpdGhvdXQgYXV0aCBwcm92aWRlcicpO1xuICAgIH1cblxuICAgIGNvbnN0IGlkID0gdGhpcy5fbmV4dElkO1xuICAgIGNvbnN0IG1ldGE6IFF1ZXJ5U3RhdGVNZXRhID0geyBpZCwgdHJpZ2dlcmVkVmlhIH07XG5cbiAgICBpZiAoaXNRdWVyeVN0YXRlTG9hZGluZyh0aGlzLnJhd1N0YXRlKSkge1xuICAgICAgaWYgKGNhbmNlbFByZXZpb3VzKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZVN0YXRlKHsgdHlwZTogUXVlcnlTdGF0ZVR5cGUuTG9hZGluZywgbWV0YSB9KTtcblxuICAgIGNvbnN0IG1ldGhvZCA9IGNvbXB1dGVRdWVyeU1ldGhvZCh7IGNvbmZpZzogcXVlcnlDb25maWcsIGNsaWVudDogdGhpcy5fY2xpZW50IH0pO1xuICAgIGNvbnN0IGJvZHkgPSBjb21wdXRlUXVlcnlCb2R5KHsgY29uZmlnOiBxdWVyeUNvbmZpZywgY2xpZW50OiB0aGlzLl9jbGllbnQsIGFyZ3M6IHRoaXMuX2FyZ3VtZW50cywgbWV0aG9kIH0pO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBjb21wdXRlUXVlcnlIZWFkZXJzKHsgY2xpZW50OiB0aGlzLl9jbGllbnQsIGNvbmZpZzogcXVlcnlDb25maWcsIGFyZ3M6IHRoaXMuX2FyZ3VtZW50cyB9KTtcblxuICAgIGlmICh0aGlzLl9pc0luTW9ja01vZGUpIHtcbiAgICAgIHRoaXMuX21vY2tSZXF1ZXN0KGhlYWRlcnMsIG1ldGEsIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0PFJlc3BvbnNlPih7XG4gICAgICAgIHVybFdpdGhQYXJhbXM6IHRoaXMuX3JvdXRlV2l0aFBhcmFtcyxcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICBib2R5LFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICByZXBvcnRQcm9ncmVzczogcXVlcnlDb25maWcucmVwb3J0UHJvZ3Jlc3MsXG4gICAgICAgIHJlc3BvbnNlVHlwZTogcXVlcnlDb25maWcucmVzcG9uc2VUeXBlLFxuICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHF1ZXJ5Q29uZmlnLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgY2FjaGVBZGFwdGVyOiB0aGlzLl9jbGllbnQuY29uZmlnLnJlcXVlc3Q/LmNhY2hlQWRhcHRlcixcbiAgICAgICAgcmV0cnlGbjogdGhpcy5fY2xpZW50LmNvbmZpZy5yZXF1ZXN0Py5yZXRyeUZuLFxuICAgICAgfSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFwKChzdGF0ZSkgPT4gdGhpcy5fdXBkYXRlRW50aXR5U3RhdGUoc3RhdGUsIG1ldGEsIG9wdGlvbnMpKSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25BYm9ydCQpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGFib3J0KCkge1xuICAgIGlmICghaXNRdWVyeVN0YXRlTG9hZGluZyh0aGlzLnJhd1N0YXRlKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdGhpcy5fb25BYm9ydCQubmV4dCgpO1xuXG4gICAgdGhpcy5fdXBkYXRlU3RhdGUoe1xuICAgICAgdHlwZTogUXVlcnlTdGF0ZVR5cGUuQ2FuY2VsbGVkLFxuICAgICAgbWV0YTogeyBpZDogdGhpcy5yYXdTdGF0ZS5tZXRhLmlkLCB0cmlnZ2VyZWRWaWE6IHRoaXMucmF3U3RhdGUubWV0YS50cmlnZ2VyZWRWaWEgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcG9sbChjb25maWc6IFBvbGxDb25maWcpIHtcbiAgICBpZiAodGhpcy5fcG9sbGluZ1N1YnNjcmlwdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdGhpcy5fY3VycmVudFBvbGxDb25maWcgPSBjb25maWc7XG5cbiAgICBjb25zdCBpbnRlcnZhbCQgPSBpbnRlcnZhbChjb25maWcuaW50ZXJ2YWwpO1xuICAgIGNvbnN0IHBvbGwkID0gaW50ZXJ2YWwkLnBpcGUoXG4gICAgICBza2lwKGNvbmZpZy50cmlnZ2VySW1tZWRpYXRlbHkgPyAwIDogMSksXG4gICAgICB0YWtlVW50aWwoY29uZmlnLnRha2VVbnRpbCksXG4gICAgICB0YWtlV2hpbGUoKCkgPT4gIXRoaXMuX2lzUG9sbGluZ1BhdXNlZCksXG4gICAgICBmaWx0ZXIoKCkgPT4gIWlzUXVlcnlTdGF0ZUxvYWRpbmcodGhpcy5fc3RhdGUkLnZhbHVlKSksXG4gICAgKTtcblxuICAgIHRoaXMuX3BvbGxpbmdTdWJzY3JpcHRpb24gPSBwb2xsJC5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4gdGhpcy5leGVjdXRlKHsgc2tpcENhY2hlOiB0cnVlLCBfdHJpZ2dlcmVkVmlhOiAncG9sbCcgfSksXG4gICAgICBjb21wbGV0ZTogKCkgPT4gdGhpcy5zdG9wUG9sbGluZygpLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdG9wUG9sbGluZygpIHtcbiAgICB0aGlzLl9wb2xsaW5nU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX3BvbGxpbmdTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgIHRoaXMuX2N1cnJlbnRQb2xsQ29uZmlnID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcGF1c2VQb2xsaW5nKCkge1xuICAgIHRoaXMuX3BvbGxpbmdTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fcG9sbGluZ1N1YnNjcmlwdGlvbiA9IG51bGw7XG5cbiAgICB0aGlzLl9pc1BvbGxpbmdQYXVzZWQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICByZXN1bWVQb2xsaW5nKCkge1xuICAgIGlmICghdGhpcy5faXNQb2xsaW5nUGF1c2VkIHx8ICF0aGlzLl9jdXJyZW50UG9sbENvbmZpZykge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdGhpcy5faXNQb2xsaW5nUGF1c2VkID0gZmFsc2U7XG5cbiAgICByZXR1cm4gdGhpcy5wb2xsKHsgLi4udGhpcy5fY3VycmVudFBvbGxDb25maWcsIHRyaWdnZXJJbW1lZGlhdGVseTogdHJ1ZSB9KTtcbiAgfVxuXG4gIG9uU3VjY2VzcyhjYWxsYmFjazogKHJlc3BvbnNlOiBEYXRhKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5zdGF0ZSQucGlwZSh0YWtlVW50aWxSZXNwb25zZSgpLCBmaWx0ZXJTdWNjZXNzKCkpLnN1YnNjcmliZSgoc3RhdGUpID0+IGNhbGxiYWNrKHN0YXRlLnJlc3BvbnNlKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBvbkZhaWx1cmUoY2FsbGJhY2s6IChlcnJvcjogUmVxdWVzdEVycm9yPHVua25vd24+KSA9PiB2b2lkKSB7XG4gICAgdGhpcy5zdGF0ZSQucGlwZSh0YWtlVW50aWxSZXNwb25zZSgpLCBmaWx0ZXJGYWlsdXJlKCkpLnN1YnNjcmliZSgoc3RhdGUpID0+IGNhbGxiYWNrKHN0YXRlLmVycm9yKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcml2YXRlIF9nZXRCZWFyZXJBdXRoUHJvdmlkZXIoKSB7XG4gICAgY29uc3QgYXV0aFByb3ZpZGVyID0gdGhpcy5fY2xpZW50LmF1dGhQcm92aWRlcjtcblxuICAgIGlmIChhdXRoUHJvdmlkZXIgJiYgaXNCZWFyZXJBdXRoUHJvdmlkZXIoYXV0aFByb3ZpZGVyKSkge1xuICAgICAgcmV0dXJuIGF1dGhQcm92aWRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZUVudGl0eVN0YXRlKFxuICAgIHJlcXVlc3RFdmVudDogUmVxdWVzdEV2ZW50PFJlc3BvbnNlPixcbiAgICBtZXRhOiBRdWVyeVN0YXRlTWV0YSxcbiAgICBvcHRpb25zPzogRXhlY3V0ZVF1ZXJ5T3B0aW9ucyxcbiAgKSB7XG4gICAgc3dpdGNoIChyZXF1ZXN0RXZlbnQudHlwZSkge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgY2FzZSAnZGVsYXktcmV0cnknOiB7XG4gICAgICAgIGNvbnN0IHsgdHlwZSwgcmV0cnlEZWxheSwgcmV0cnlOdW1iZXIgfSA9IHJlcXVlc3RFdmVudDtcbiAgICAgICAgY29uc3QgbmV3TWV0YTogUXVlcnlTdGF0ZU1ldGEgPSB7IC4uLm1ldGEsIGlzV2FpdGluZ0ZvclJldHJ5OiB0eXBlID09PSAnZGVsYXktcmV0cnknLCByZXRyeURlbGF5LCByZXRyeU51bWJlciB9O1xuXG4gICAgICAgIHRoaXMuX3VwZGF0ZVN0YXRlKHtcbiAgICAgICAgICB0eXBlOiBRdWVyeVN0YXRlVHlwZS5Mb2FkaW5nLFxuICAgICAgICAgIG1ldGE6IG5ld01ldGEsXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSAndXBsb2FkLXByb2dyZXNzJzpcbiAgICAgIGNhc2UgJ2Rvd25sb2FkLXByb2dyZXNzJzoge1xuICAgICAgICB0aGlzLl91cGRhdGVTdGF0ZSh7XG4gICAgICAgICAgdHlwZTogUXVlcnlTdGF0ZVR5cGUuTG9hZGluZyxcbiAgICAgICAgICBwcm9ncmVzczogcmVxdWVzdEV2ZW50LnByb2dyZXNzLFxuICAgICAgICAgIHBhcnRpYWxUZXh0OiAncGFydGlhbFRleHQnIGluIHJlcXVlc3RFdmVudCA/IHJlcXVlc3RFdmVudC5wYXJ0aWFsVGV4dCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBtZXRhLFxuICAgICAgICB9KTtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSAnc3VjY2Vzcyc6IHtcbiAgICAgICAgY29uc3QgeyByZXNwb25zZSwgZXhwaXJlc0luVGltZXN0YW1wIH0gPSByZXF1ZXN0RXZlbnQ7XG4gICAgICAgIGNvbnN0IGlzR3FsID0gaXNHcWxRdWVyeUNvbmZpZyh0aGlzLl9xdWVyeUNvbmZpZyk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9XG4gICAgICAgICAgaXNHcWwgJiYgdHlwZW9mIHJlc3BvbnNlID09PSAnb2JqZWN0JyAmJiAhIXJlc3BvbnNlICYmICdkYXRhJyBpbiByZXNwb25zZVxuICAgICAgICAgICAgPyAocmVzcG9uc2VbJ2RhdGEnXSBhcyBSZXNwb25zZSlcbiAgICAgICAgICAgIDogKHJlc3BvbnNlIGFzIFJlc3BvbnNlKTtcblxuICAgICAgICBpZiAodGhpcy5fcXVlcnlDb25maWcuZW50aXR5ICYmIHRoaXMuX3F1ZXJ5Q29uZmlnLmVudGl0eS5zZXQpIHtcbiAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuX3F1ZXJ5Q29uZmlnLmVudGl0eT8uaWQoeyBhcmdzOiB0aGlzLl9hcmd1bWVudHMsIHJlc3BvbnNlOiByZXNwb25zZURhdGEgfSk7XG5cbiAgICAgICAgICB0aGlzLl9xdWVyeUNvbmZpZy5lbnRpdHk/LnNldCh7XG4gICAgICAgICAgICBhcmdzOiB0aGlzLl9hcmd1bWVudHMsXG4gICAgICAgICAgICByZXNwb25zZTogcmVzcG9uc2VEYXRhLFxuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICBzdG9yZTogdGhpcy5fcXVlcnlDb25maWcuZW50aXR5LnN0b3JlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdXBkYXRlU3RhdGUoe1xuICAgICAgICAgIHR5cGU6IFF1ZXJ5U3RhdGVUeXBlLlN1Y2Nlc3MsXG4gICAgICAgICAgcmVzcG9uc2U6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgICBtZXRhOiB7IC4uLm1ldGEsIGV4cGlyZXNBdDogZXhwaXJlc0luVGltZXN0YW1wIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlICdmYWlsdXJlJzoge1xuICAgICAgICBjb25zdCB7IGVycm9yIH0gPSByZXF1ZXN0RXZlbnQ7XG4gICAgICAgIGNvbnN0IGZhaWx1cmUgPSAoKSA9PiB0aGlzLl91cGRhdGVTdGF0ZSh7IHR5cGU6IFF1ZXJ5U3RhdGVUeXBlLkZhaWx1cmUsIGVycm9yLCBtZXRhIH0pO1xuICAgICAgICBjb25zdCBiZWFyZXJBdXRoUHJvdmlkZXIgPSB0aGlzLl9nZXRCZWFyZXJBdXRoUHJvdmlkZXIoKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgIWJlYXJlckF1dGhQcm92aWRlciB8fFxuICAgICAgICAgIG9wdGlvbnM/Ll9pc1VuYXV0aG9yaXplZFJldHJ5IHx8XG4gICAgICAgICAgZXJyb3Iuc3RhdHVzICE9PSBIdHRwU3RhdHVzQ29kZS5VbmF1dGhvcml6ZWQgfHxcbiAgICAgICAgICAhYmVhcmVyQXV0aFByb3ZpZGVyLnNob3VsZFJlZnJlc2hPblVuYXV0aG9yaXplZFJlc3BvbnNlXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBmYWlsdXJlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBxdWVyeSA9IGJlYXJlckF1dGhQcm92aWRlci5fcmVmcmVzaFF1ZXJ5KCk7XG4gICAgICAgIGlmICghcXVlcnkpIHJldHVybiBmYWlsdXJlKCk7XG5cbiAgICAgICAgcXVlcnkuc3RhdGUkXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWxSZXNwb25zZSgpLFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uQWJvcnQkKSxcbiAgICAgICAgICAgIHRhcCgoc3RhdGUpID0+XG4gICAgICAgICAgICAgIGlzUXVlcnlTdGF0ZVN1Y2Nlc3Moc3RhdGUpID8gdGhpcy5leGVjdXRlKHsgLi4ub3B0aW9ucywgX2lzVW5hdXRob3JpemVkUmV0cnk6IHRydWUgfSkgOiBmYWlsdXJlKCksXG4gICAgICAgICAgICApLFxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ2NhbmNlbCc6IHtcbiAgICAgICAgdGhpcy5fdXBkYXRlU3RhdGUoe1xuICAgICAgICAgIHR5cGU6IFF1ZXJ5U3RhdGVUeXBlLkNhbmNlbGxlZCxcbiAgICAgICAgICBtZXRhLFxuICAgICAgICB9KTtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF90cmFuc2Zvcm1TdGF0ZShzOiBRdWVyeVN0YXRlPFJlc3BvbnNlPik6IE9ic2VydmFibGU8UXVlcnlTdGF0ZTxEYXRhPj4ge1xuICAgIGlmICghaXNRdWVyeVN0YXRlU3VjY2VzcyhzKSB8fCAhdGhpcy5fcXVlcnlDb25maWcuZW50aXR5Py5nZXQpIHtcbiAgICAgIHJldHVybiBvZihzKSBhcyBPYnNlcnZhYmxlPFF1ZXJ5U3RhdGU8RGF0YT4+O1xuICAgIH1cblxuICAgIGNvbnN0IGlkID0gdGhpcy5fcXVlcnlDb25maWcuZW50aXR5LmlkKHsgYXJnczogdGhpcy5fYXJndW1lbnRzLCByZXNwb25zZTogcy5yZXNwb25zZSB9KTtcblxuICAgIHJldHVybiB0aGlzLl9xdWVyeUNvbmZpZy5lbnRpdHlcbiAgICAgIC5nZXQoeyBhcmdzOiB0aGlzLl9hcmd1bWVudHMsIGlkLCByZXNwb25zZTogcy5yZXNwb25zZSwgc3RvcmU6IHRoaXMuX3F1ZXJ5Q29uZmlnLmVudGl0eS5zdG9yZSB9KVxuICAgICAgLnBpcGUobWFwKCh2KSA9PiAoeyAuLi5zLCByZXNwb25zZTogdiB9KSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlU3RhdGUoczogUXVlcnlTdGF0ZTxSZXNwb25zZT4pIHtcbiAgICAvLyBXZSBuZWVkIHRvIHVzZSB1bnRyYWNrZWQgaGVyZSB0byBhdm9pZCBBbmd1bGFyJ3MgXCJhbGxvd1NpZ25hbFdyaXRlcyBpcyBmYWxzZVwiIGVycm9yIHdoZW4gZXhlY3V0aW5nIHF1ZXJpZXMgaW5zaWRlIEFuZ3VsYXIncyBjb21wdXRlZC9lZmZlY3Qgc2lnbmFsIGZ1bmN0aW9ucy5cbiAgICB1bnRyYWNrZWQoKCkgPT4gdGhpcy5fc3RhdGUkLm5leHQocykpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbW9ja1JlcXVlc3QoaGVhZGVyczogUmVxdWVzdEhlYWRlcnMgfCB1bmRlZmluZWQsIG1ldGE6IFF1ZXJ5U3RhdGVNZXRhLCBvcHRpb25zOiBFeGVjdXRlUXVlcnlPcHRpb25zKSB7XG4gICAgaWYgKCF0aGlzLl9hcmd1bWVudHM/Lm1vY2spIHJldHVybjtcblxuICAgIGNvbnN0IHsgZGVsYXkgPSAyMDAsIGVycm9yLCByZXNwb25zZSwgcmV0cnlJbnRvUmVzcG9uc2UgPSBmYWxzZSwgcHJvZ3Jlc3MgfSA9IHRoaXMuX2FyZ3VtZW50cy5tb2NrO1xuICAgIGNvbnN0IHByb2dyZXNzRmlsZVNpemUgPSBwcm9ncmVzcz8uZmlsZVNpemUgPz8gMTAwMDAwMDtcbiAgICBjb25zdCBwcm9ncmVzc0V2ZW50VHlwZSA9IHByb2dyZXNzPy5ldmVudFR5cGUgPz8gJ3VwbG9hZCc7XG4gICAgY29uc3QgcHJvZ3Jlc3NFdmVudENvdW50ID0gcHJvZ3Jlc3M/LmV2ZW50Q291bnQgPz8gNTtcbiAgICBjb25zdCBwcm9ncmVzc09taXRUb3RhbCA9IHByb2dyZXNzPy5vbWl0VG90YWwgPz8gZmFsc2U7XG4gICAgY29uc3Qgb21pdFBhcnRpYWxUZXh0ID0gcHJvZ3Jlc3M/Lm9taXRQYXJ0aWFsVGV4dCA/PyBmYWxzZTtcblxuICAgIGNvbnN0IGZpbmFsUmVzb2x2ZU1vY2sgPSAoKSA9PiB7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlRW50aXR5U3RhdGUoeyBlcnJvciwgaGVhZGVyczogaGVhZGVycyA/PyB7fSwgdHlwZTogJ2ZhaWx1cmUnIH0sIG1ldGEsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3VwZGF0ZUVudGl0eVN0YXRlKFxuICAgICAgICB7IHJlc3BvbnNlOiByZXNwb25zZSBhcyBSZXNwb25zZSwgaGVhZGVyczogaGVhZGVycyA/PyB7fSwgdHlwZTogJ3N1Y2Nlc3MnIH0sXG4gICAgICAgIG1ldGEsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICApO1xuICAgIH07XG5cbiAgICBpZiAocHJvZ3Jlc3MpIHtcbiAgICAgIGludGVydmFsKGRlbGF5KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoKGEpID0+IHtcbiAgICAgICAgICAgIGlmIChhID09PSBwcm9ncmVzc0V2ZW50Q291bnQgKyAxKSB7XG4gICAgICAgICAgICAgIGZpbmFsUmVzb2x2ZU1vY2soKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBNYXRoLm1pbihwcm9ncmVzc0ZpbGVTaXplICogYSwgcHJvZ3Jlc3NGaWxlU2l6ZSAqIHByb2dyZXNzRXZlbnRDb3VudCk7XG4gICAgICAgICAgICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSAoY3VycmVudCAvIChwcm9ncmVzc0ZpbGVTaXplICogcHJvZ3Jlc3NFdmVudENvdW50KSkgKiAxMDA7XG5cbiAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlRW50aXR5U3RhdGUoXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgdHlwZTogcHJvZ3Jlc3NFdmVudFR5cGUgPT09ICd1cGxvYWQnID8gJ3VwbG9hZC1wcm9ncmVzcycgOiAnZG93bmxvYWQtcHJvZ3Jlc3MnLFxuICAgICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyA/PyB7fSxcbiAgICAgICAgICAgICAgICAgIHByb2dyZXNzOiB7IGN1cnJlbnQsIC4uLihwcm9ncmVzc09taXRUb3RhbCA/IHt9IDogeyBwZXJjZW50YWdlLCB0b3RhbDogcHJvZ3Jlc3NGaWxlU2l6ZSB9KSB9LFxuICAgICAgICAgICAgICAgICAgcGFydGlhbFRleHQ6IG9taXRQYXJ0aWFsVGV4dCA/IHVuZGVmaW5lZCA6IGBQYXJ0aWFsIHRleHQgJHthfWAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtZXRhLFxuICAgICAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uQWJvcnQkKSxcbiAgICAgICAgICB0YWtlV2hpbGUoKGEpID0+IGEgPCBwcm9ncmVzc0V2ZW50Q291bnQgKyAxLCB0cnVlKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfSBlbHNlIGlmIChyZXRyeUludG9SZXNwb25zZSkge1xuICAgICAgaW50ZXJ2YWwoZGVsYXkpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgoYSkgPT4ge1xuICAgICAgICAgICAgaWYgKGEgPT09IDMpIHtcbiAgICAgICAgICAgICAgZmluYWxSZXNvbHZlTW9jaygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3QgYU1vZGlmaWVkID0gYSArIDE7XG4gICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUVudGl0eVN0YXRlKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdkZWxheS1yZXRyeScsXG4gICAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzID8/IHt9LFxuICAgICAgICAgICAgICAgICAgcmV0cnlEZWxheTogMTAwMCArIDEwMDAgKiBhTW9kaWZpZWQsXG4gICAgICAgICAgICAgICAgICByZXRyeU51bWJlcjogYU1vZGlmaWVkLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbWV0YSxcbiAgICAgICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkFib3J0JCksXG4gICAgICAgICAgdGFrZVdoaWxlKChhKSA9PiBhIDwgMywgdHJ1ZSksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aW1lcihkZWxheSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFwKCgpID0+IGZpbmFsUmVzb2x2ZU1vY2soKSksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uQWJvcnQkKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX2FkZERlcGVuZGVudCh0Tm9kZUluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoIXRoaXMuX2RlcGVuZGVudHNbdE5vZGVJbmRleF0pIHtcbiAgICAgIHRoaXMuX2RlcGVuZGVudHNbdE5vZGVJbmRleF0gPSAwO1xuICAgIH1cblxuICAgIHRoaXMuX2RlcGVuZGVudHNbdE5vZGVJbmRleF0rKztcblxuICAgIHRoaXMuX2RlcGVuZGVudHNDaGFuZ2VkJC5uZXh0KHRoaXMuX2RlcGVuZGVudHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX3JlbW92ZURlcGVuZGVudCh0Tm9kZUluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBjb3VudCA9IHRoaXMuX2RlcGVuZGVudHNbdE5vZGVJbmRleF07XG4gICAgaWYgKGNvdW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kZXBlbmRlbnRzW3ROb2RlSW5kZXhdLS07XG5cbiAgICBpZiAoY291bnQgPD0gMSkge1xuICAgICAgZGVsZXRlIHRoaXMuX2RlcGVuZGVudHNbdE5vZGVJbmRleF07XG4gICAgfVxuXG4gICAgdGhpcy5fZGVwZW5kZW50c0NoYW5nZWQkLm5leHQodGhpcy5fZGVwZW5kZW50cyk7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBfaGFzRGVwZW5kZW50cygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5fZGVwZW5kZW50cykubGVuZ3RoID4gMDtcbiAgfVxufVxuIl19
428
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvcXVlcnkvcXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixNQUFNLEVBQ04sUUFBUSxFQUNSLEdBQUcsRUFFSCxFQUFFLEVBQ0YsYUFBYSxFQUNiLFdBQVcsRUFDWCxJQUFJLEVBQ0osT0FBTyxFQUVQLFNBQVMsRUFDVCxJQUFJLEVBQ0osU0FBUyxFQUNULFNBQVMsRUFDVCxHQUFHLEVBQ0gsS0FBSyxHQUNOLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRS9DLE9BQU8sRUFBZSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hFLE9BQU8sRUFBa0IsT0FBTyxFQUE4QyxNQUFNLFlBQVksQ0FBQztBQWFqRyxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIsb0JBQW9CLEVBQ3BCLG1CQUFtQixFQUNuQixnQkFBZ0IsRUFDaEIsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztBQUVyQixNQUFNLE9BQU8sS0FBSztJQXVDaEIsSUFBWSxPQUFPO1FBQ2pCLE9BQU8sRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUN0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNSLElB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QkFBZ0IsQ0FBQyxVQUFrQjtRQUNqQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzNDLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3hCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBRS9CLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RDLENBQUM7UUFFRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxjQUFjO1FBQ1osT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2xELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVudHJhY2tlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBmaWx0ZXIsXG4gIGludGVydmFsLFxuICBtYXAsXG4gIE9ic2VydmFibGUsXG4gIG9mLFxuICBSZXBsYXlTdWJqZWN0LFxuICBzaGFyZVJlcGxheSxcbiAgc2tpcCxcbiAgU3ViamVjdCxcbiAgU3Vic2NyaXB0aW9uLFxuICBzd2l0Y2hNYXAsXG4gIHRha2UsXG4gIHRha2VVbnRpbCxcbiAgdGFrZVdoaWxlLFxuICB0YXAsXG4gIHRpbWVyLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGlzQmVhcmVyQXV0aFByb3ZpZGVyIH0gZnJvbSAnLi4vYXV0aCc7XG5pbXBvcnQgeyBFbnRpdHlTdG9yZSB9IGZyb20gJy4uL2VudGl0eSc7XG5pbXBvcnQgeyBRdWVyeUNsaWVudCwgc2hvdWxkQ2FjaGVRdWVyeSB9IGZyb20gJy4uL3F1ZXJ5LWNsaWVudCc7XG5pbXBvcnQgeyBIdHRwU3RhdHVzQ29kZSwgcmVxdWVzdCwgUmVxdWVzdEVycm9yLCBSZXF1ZXN0RXZlbnQsIFJlcXVlc3RIZWFkZXJzIH0gZnJvbSAnLi4vcmVxdWVzdCc7XG5pbXBvcnQge1xuICBCYXNlQXJndW1lbnRzLFxuICBFeGVjdXRlUXVlcnlPcHRpb25zLFxuICBHcWxRdWVyeUNvbmZpZyxcbiAgUG9sbENvbmZpZyxcbiAgUXVlcnlBdXRvUmVmcmVzaENvbmZpZyxcbiAgUXVlcnlTdGF0ZSxcbiAgUXVlcnlTdGF0ZU1ldGEsXG4gIFF1ZXJ5U3RhdGVUeXBlLFxuICBSZXN0UXVlcnlDb25maWcsXG4gIFJvdXRlVHlwZSxcbn0gZnJvbSAnLi9xdWVyeS50eXBlcyc7XG5pbXBvcnQge1xuICBjb21wdXRlUXVlcnlCb2R5LFxuICBjb21wdXRlUXVlcnlIZWFkZXJzLFxuICBjb21wdXRlUXVlcnlNZXRob2QsXG4gIGZpbHRlckZhaWx1cmUsXG4gIGZpbHRlclN1Y2Nlc3MsXG4gIGlzR3FsUXVlcnlDb25maWcsXG4gIGlzUXVlcnlTdGF0ZUNhbmNlbGxlZCxcbiAgaXNRdWVyeVN0YXRlRmFpbHVyZSxcbiAgaXNRdWVyeVN0YXRlTG9hZGluZyxcbiAgaXNRdWVyeVN0YXRlUHJlcGFyZWQsXG4gIGlzUXVlcnlTdGF0ZVN1Y2Nlc3MsXG4gIHN3aXRjaFF1ZXJ5U3RhdGUsXG4gIHRha2VVbnRpbFJlc3BvbnNlLFxufSBmcm9tICcuL3F1ZXJ5LnV0aWxzJztcblxubGV0IF9uZXh0UXVlcnlJZCA9IDA7XG5cbmV4cG9ydCBjbGFzcyBRdWVyeTxcbiAgUmVzcG9uc2UsXG4gIEFyZ3VtZW50cyBleHRlbmRzIEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQsXG4gIFJvdXRlIGV4dGVuZHMgUm91dGVUeXBlPEFyZ3VtZW50cz4sXG4gIFN0b3JlIGV4dGVuZHMgRW50aXR5U3RvcmU8dW5rbm93bj4sXG4gIERhdGEsXG4gIElkLFxuPiB7XG4gIHJlYWRvbmx5IF9pZCA9IF9uZXh0UXVlcnlJZCsrO1xuXG4gIHByaXZhdGUgX2N1cnJlbnRMb2NhbElkID0gMDtcbiAgcHJpdmF0ZSBfcG9sbGluZ1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX29uQWJvcnQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBfY3VycmVudFBvbGxDb25maWc6IFBvbGxDb25maWcgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIFVzZWQgdG8gdHJhY2sgd2hpY2ggY29tcG9uZW50cyBkZXBlbmQgb24gdGhpcyBxdWVyeS5cbiAgICogVGhlIGtleSBpcyB0aGUgY29tcG9uZW50J3MgX3ROb2RlIGluZGV4LlxuICAgKiBUaGUgdmFsdWUgaXMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgY29tcG9uZW50IGhhcyBzdWJzY3JpYmVkIHRvIHRoaXMgcXVlcnkuXG4gICAqIFRoZSB2YWx1ZSBtaWdodCBpbmNyZWFzZSBzaW5jZSB3ZSBjYW50IGRpc3Rpbmd1aXNoIGJldHdlZW4gYSBjb21wb25lbnQgYW5kIGEgaG9zdCBkaXJlY3RpdmUgYXBwbGllZCB0byBpdC5cbiAgICovXG4gIF9kZXBlbmRlbnRzOiBSZWNvcmQ8bnVtYmVyLCBudW1iZXI+ID0ge307XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX2RlcGVuZGVudHNDaGFuZ2VkJCA9IG5ldyBSZXBsYXlTdWJqZWN0PFJlY29yZDxudW1iZXIsIG51bWJlcj4+KCk7XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX2lzUG9sbGluZ1BhdXNlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0YXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UXVlcnlTdGF0ZTxSZXNwb25zZT4+KHtcbiAgICB0eXBlOiBRdWVyeVN0YXRlVHlwZS5QcmVwYXJlZCxcbiAgICBtZXRhOiB7IGlkOiB0aGlzLl9jdXJyZW50TG9jYWxJZCwgdHJpZ2dlcmVkVmlhOiAncHJvZ3JhbScgfSxcbiAgfSk7XG5cbiAgcHJpdmF0ZSBnZXQgX25leHRJZCgpIHtcbiAgICByZXR1cm4gKyt0aGlzLl9jdXJyZW50TG9jYWxJZDtcbiAgfVxuXG4gIGdldCBzdGF0ZSQoKTogT2JzZXJ2YWJsZTxRdWVyeVN0YXRlPERhdGE+PiB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5waXBlKFxuICAgICAgdGFwKChzKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5fY2xpZW50LmNvbmZpZy5sb2dnaW5nPy5wcmVwYXJlZFF1ZXJ5U3Vic2NyaXB0aW9ucykgcmV0dXJuO1xuXG4gICAgICAgIGlmIChpc1F1ZXJ5U3RhdGVQcmVwYXJlZChzKSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGBRdWVyeSAke3RoaXMuX3JvdXRlV2l0aFBhcmFtc30gd2FzIHN1YnNjcmliZWQgdG8gaW4gdGhlIHByZXBhcmVkIHN0YXRlLiBEaWQgeW91IGZvcmdldCB0byBjYWxsIC5leGVjdXRlKCk/YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHN3aXRjaE1hcCgocykgPT4gdGhpcy5fdHJhbnNmb3JtU3RhdGUocykpLFxuICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBxdWVyeS5cbiAgICpcbiAgICogKipXYXJuaW5nISoqIFRoaXMgZGlmZmVycyBmcm9tIHRoZSBgc3RhdGUkYCBvYnNlcnZhYmxlIGluIHRoYXQgaXQgZG9lcyBub3QgdXNlIHRoZSBxdWVyeSBzdG9yZS4gVGh1cywgdGhlIHJlc3BvbnNlIGRhdGEgbWlnaHQgYmUgb3V0ZGF0ZWQuXG4gICAqIFVzZSBgc3RhdGUkYCAob3IgYGZpcnN0VmFsdWVGcm9tKHN0YXRlJClgKSB0aGUgbW9zdCB1cC10by1kYXRlIGRhdGEuXG4gICAqL1xuICBnZXQgcmF3U3RhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC52YWx1ZTtcbiAgfVxuXG4gIGdldCBpc0V4cGlyZWQoKSB7XG4gICAgaWYgKGlzUXVlcnlTdGF0ZUxvYWRpbmcodGhpcy5yYXdTdGF0ZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBpc1F1ZXJ5U3RhdGVQcmVwYXJlZCh0aGlzLnJhd1N0YXRlKSB8fFxuICAgICAgaXNRdWVyeVN0YXRlQ2FuY2VsbGVkKHRoaXMucmF3U3RhdGUpIHx8XG4gICAgICBpc1F1ZXJ5U3RhdGVGYWlsdXJlKHRoaXMucmF3U3RhdGUpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCB0cyA9IHRoaXMucmF3U3RhdGUubWV0YS5leHBpcmVzQXQ7XG5cbiAgICBpZiAoIXRzKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHMgPCBEYXRlLm5vdygpO1xuICB9XG5cbiAgZ2V0IGlzSW5Vc2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5vYnNlcnZlZCB8fCBPYmplY3Qua2V5cyh0aGlzLl9kZXBlbmRlbnRzKS5sZW5ndGggPiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0IF9zdWJzY3JpYmVyQ291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5vYnNlcnZlcnMubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IGlzUG9sbGluZygpIHtcbiAgICByZXR1cm4gISF0aGlzLl9wb2xsaW5nU3Vic2NyaXB0aW9uO1xuICB9XG5cbiAgZ2V0IGF1dG9SZWZyZXNoT25Db25maWcoKSB7XG4gICAgY29uc3QgYmFzZSA9IHRoaXMuX3F1ZXJ5Q29uZmlnLmF1dG9SZWZyZXNoT24gPz8ge307XG5cbiAgICBjb25zdCB0cmFuc2Zvcm1lZDogUmVhZG9ubHk8UXVlcnlBdXRvUmVmcmVzaENvbmZpZz4gPSB7XG4gICAgICBxdWVyeUNsaWVudERlZmF1bHRIZWFkZXJzQ2hhbmdlOiBiYXNlLnF1ZXJ5Q2xpZW50RGVmYXVsdEhlYWRlcnNDaGFuZ2UgPz8gdHJ1ZSxcbiAgICAgIHdpbmRvd0ZvY3VzOiBiYXNlLndpbmRvd0ZvY3VzID8/IHRydWUsXG4gICAgfTtcblxuICAgIHJldHVybiB0cmFuc2Zvcm1lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldCBfZW5hYmxlU21hcnRQb2xsaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9xdWVyeUNvbmZpZy5lbmFibGVTbWFydFBvbGxpbmcgPz8gdHJ1ZTtcbiAgfVxuXG4gIGdldCBzdG9yZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcXVlcnlDb25maWcuZW50aXR5Py5zdG9yZSA/PyBudWxsO1xuICB9XG5cbiAgZ2V0IGNhbkJlQ2FjaGVkKCkge1xuICAgIHJldHVybiBzaG91bGRDYWNoZVF1ZXJ5KHRoaXMuX3F1ZXJ5Q29uZmlnLm1ldGhvZCk7XG4gIH1cblxuICBnZXQgX2lzSW5Nb2NrTW9kZSgpIHtcbiAgICByZXR1cm4gISF0aGlzLl9hcmd1bWVudHM/Lm1vY2s7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jbGllbnQ6IFF1ZXJ5Q2xpZW50LFxuXG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IF9xdWVyeUNvbmZpZzpcbiAgICAgIHwgUmVzdFF1ZXJ5Q29uZmlnPFJvdXRlLCBSZXNwb25zZSwgQXJndW1lbnRzLCBTdG9yZSwgRGF0YSwgSWQ+XG4gICAgICB8IEdxbFF1ZXJ5Q29uZmlnPFJvdXRlLCBSZXNwb25zZSwgQXJndW1lbnRzLCBTdG9yZSwgRGF0YSwgSWQ+LFxuXG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IF9yb3V0ZVdpdGhQYXJhbXM6IFJvdXRlLFxuXG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IF9hcmd1bWVudHM6IEFyZ3VtZW50cyxcblxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBfcXVlcnlTdG9yZUtleTogc3RyaW5nLFxuICApIHt9XG5cbiAgZXhlY3V0ZShvcHRpb25zOiBFeGVjdXRlUXVlcnlPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB7IHNraXBDYWNoZSA9IGZhbHNlLCBfdHJpZ2dlcmVkVmlhOiB0cmlnZ2VyZWRWaWEgPSAncHJvZ3JhbScsIGNhbmNlbFByZXZpb3VzID0gZmFsc2UgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgeyBhdXRoUHJvdmlkZXIgfSA9IHRoaXMuX2NsaWVudDtcbiAgICBjb25zdCBxdWVyeUNvbmZpZyA9IHRoaXMuX3F1ZXJ5Q29uZmlnO1xuXG4gICAgaWYgKCF0aGlzLmlzRXhwaXJlZCAmJiAhc2tpcENhY2hlICYmIGlzUXVlcnlTdGF0ZVN1Y2Nlc3ModGhpcy5yYXdTdGF0ZSkpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGlmIChxdWVyeUNvbmZpZy5zZWN1cmUgJiYgIWF1dGhQcm92aWRlciAmJiAhdGhpcy5faXNJbk1vY2tNb2RlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBleGVjdXRlIHNlY3VyZSBxdWVyeSB3aXRob3V0IGF1dGggcHJvdmlkZXInKTtcbiAgICB9XG5cbiAgICBjb25zdCBpZCA9IHRoaXMuX25leHRJZDtcbiAgICBjb25zdCBtZXRhOiBRdWVyeVN0YXRlTWV0YSA9IHsgaWQsIHRyaWdnZXJlZFZpYSB9O1xuXG4gICAgaWYgKGlzUXVlcnlTdGF0ZUxvYWRpbmcodGhpcy5yYXdTdGF0ZSkpIHtcbiAgICAgIGlmIChjYW5jZWxQcmV2aW91cykge1xuICAgICAgICB0aGlzLmFib3J0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVTdGF0ZSh7IHR5cGU6IFF1ZXJ5U3RhdGVUeXBlLkxvYWRpbmcsIG1ldGEgfSk7XG5cbiAgICBpZiAodGhpcy5faXNJbk1vY2tNb2RlKSB7XG4gICAgICB0aGlzLl9tb2NrUmVxdWVzdCh7fSwgbWV0YSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBnb1NpZ25hbCA9IG9mKHRydWUpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGF1dGhQcm92aWRlciAmJlxuICAgICAgICBpc0JlYXJlckF1dGhQcm92aWRlcihhdXRoUHJvdmlkZXIpICYmXG4gICAgICAgIHF1ZXJ5Q29uZmlnLnNlY3VyZSAmJlxuICAgICAgICAhaXNRdWVyeVN0YXRlU3VjY2VzcyhhdXRoUHJvdmlkZXIuY3VycmVudFJlZnJlc2hRdWVyeT8ucmF3U3RhdGUpXG4gICAgICApIHtcbiAgICAgICAgLy8gT24gcGFnZSBsb2FkIHRoZSBxdWVyeSBtaWdodCBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIGF1dGggcHJvdmlkZXIgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuXG4gICAgICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBhdXRoIHByb3ZpZGVyIHRvIGJlIHJlYWR5IGJlZm9yZSB3ZSBjYW4gZXhlY3V0ZSB0aGUgcXVlcnkuXG4gICAgICAgIGdvU2lnbmFsID0gY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgLy8gVGhlIHRva2VucyBtaWdodCBnZXQgc2V0IHdpdGhvdXQgYSByZWZyZXNoIHF1ZXJ5IGJlaW5nIGNyZWF0ZWQgKGUuZy4pIGRpcmVjdGx5IGFmdGVyIGxvZ2luLlxuICAgICAgICAgIGF1dGhQcm92aWRlci5jdXJyZW50UmVmcmVzaFF1ZXJ5JC5waXBlKHN3aXRjaFF1ZXJ5U3RhdGUoKSwgdGFrZVVudGlsUmVzcG9uc2UoKSksXG4gICAgICAgICAgYXV0aFByb3ZpZGVyLnRva2VucyQucGlwZSh0YWtlKDEpKSxcbiAgICAgICAgXSkucGlwZShcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25BYm9ydCQpLFxuICAgICAgICAgIGZpbHRlcigoW3N0YXRlLCB0b2tlbnNdKSA9PiB7XG4gICAgICAgICAgICBpZiAoc3RhdGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuICFpc1F1ZXJ5U3RhdGVMb2FkaW5nKHN0YXRlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuICEhdG9rZW5zO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRhcCgoW3N0YXRlXSkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzUXVlcnlTdGF0ZUZhaWx1cmUoc3RhdGUpKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUVudGl0eVN0YXRlKHsgdHlwZTogJ2ZhaWx1cmUnLCBlcnJvcjogc3RhdGUuZXJyb3IsIGhlYWRlcnM6IHt9IH0sIG1ldGEsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIG1hcCgoKSA9PiB0cnVlKSxcbiAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBnb1NpZ25hbFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWV0aG9kID0gY29tcHV0ZVF1ZXJ5TWV0aG9kKHsgY29uZmlnOiBxdWVyeUNvbmZpZywgY2xpZW50OiB0aGlzLl9jbGllbnQgfSk7XG4gICAgICAgICAgICBjb25zdCBib2R5ID0gY29tcHV0ZVF1ZXJ5Qm9keSh7IGNvbmZpZzogcXVlcnlDb25maWcsIGNsaWVudDogdGhpcy5fY2xpZW50LCBhcmdzOiB0aGlzLl9hcmd1bWVudHMsIG1ldGhvZCB9KTtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSBjb21wdXRlUXVlcnlIZWFkZXJzKHsgY2xpZW50OiB0aGlzLl9jbGllbnQsIGNvbmZpZzogcXVlcnlDb25maWcsIGFyZ3M6IHRoaXMuX2FyZ3VtZW50cyB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3Q8UmVzcG9uc2U+KHtcbiAgICAgICAgICAgICAgdXJsV2l0aFBhcmFtczogdGhpcy5fcm91dGVXaXRoUGFyYW1zIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcXVlcnlDb25maWcucmVwb3J0UHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogcXVlcnlDb25maWcucmVzcG9uc2VUeXBlLFxuICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHF1ZXJ5Q29uZmlnLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgY2FjaGVBZGFwdGVyOiB0aGlzLl9jbGllbnQuY29uZmlnLnJlcXVlc3Q/LmNhY2hlQWRhcHRlcixcbiAgICAgICAgICAgICAgcmV0cnlGbjogdGhpcy5fY2xpZW50LmNvbmZpZy5yZXF1ZXN0Py5yZXRyeUZuLFxuICAgICAgICAgICAgfSkucGlwZShcbiAgICAgICAgICAgICAgdGFwKChzdGF0ZSkgPT4gdGhpcy5fdXBkYXRlRW50aXR5U3RhdGUoc3RhdGUsIG1ldGEsIG9wdGlvbnMpKSxcbiAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uQWJvcnQkKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSksXG4gICAgICAgIClcblxuICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICBpZiAoIWlzUXVlcnlTdGF0ZUxvYWRpbmcodGhpcy5yYXdTdGF0ZSkpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHRoaXMuX29uQWJvcnQkLm5leHQoKTtcblxuICAgIHRoaXMuX3VwZGF0ZVN0YXRlKHtcbiAgICAgIHR5cGU6IFF1ZXJ5U3RhdGVUeXBlLkNhbmNlbGxlZCxcbiAgICAgIG1ldGE6IHsgaWQ6IHRoaXMucmF3U3RhdGUubWV0YS5pZCwgdHJpZ2dlcmVkVmlhOiB0aGlzLnJhd1N0YXRlLm1ldGEudHJpZ2dlcmVkVmlhIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHBvbGwoY29uZmlnOiBQb2xsQ29uZmlnKSB7XG4gICAgaWYgKHRoaXMuX3BvbGxpbmdTdWJzY3JpcHRpb24pIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHRoaXMuX2N1cnJlbnRQb2xsQ29uZmlnID0gY29uZmlnO1xuXG4gICAgY29uc3QgaW50ZXJ2YWwkID0gaW50ZXJ2YWwoY29uZmlnLmludGVydmFsKTtcbiAgICBjb25zdCBwb2xsJCA9IGludGVydmFsJC5waXBlKFxuICAgICAgc2tpcChjb25maWcudHJpZ2dlckltbWVkaWF0ZWx5ID8gMCA6IDEpLFxuICAgICAgdGFrZVVudGlsKGNvbmZpZy50YWtlVW50aWwpLFxuICAgICAgdGFrZVdoaWxlKCgpID0+ICF0aGlzLl9pc1BvbGxpbmdQYXVzZWQpLFxuICAgICAgZmlsdGVyKCgpID0+ICFpc1F1ZXJ5U3RhdGVMb2FkaW5nKHRoaXMuX3N0YXRlJC52YWx1ZSkpLFxuICAgICk7XG5cbiAgICB0aGlzLl9wb2xsaW5nU3Vic2NyaXB0aW9uID0gcG9sbCQuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHRoaXMuZXhlY3V0ZSh7IHNraXBDYWNoZTogdHJ1ZSwgX3RyaWdnZXJlZFZpYTogJ3BvbGwnIH0pLFxuICAgICAgY29tcGxldGU6ICgpID0+IHRoaXMuc3RvcFBvbGxpbmcoKSxcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc3RvcFBvbGxpbmcoKSB7XG4gICAgdGhpcy5fcG9sbGluZ1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9wb2xsaW5nU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICB0aGlzLl9jdXJyZW50UG9sbENvbmZpZyA9IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHBhdXNlUG9sbGluZygpIHtcbiAgICB0aGlzLl9wb2xsaW5nU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX3BvbGxpbmdTdWJzY3JpcHRpb24gPSBudWxsO1xuXG4gICAgdGhpcy5faXNQb2xsaW5nUGF1c2VkID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcmVzdW1lUG9sbGluZygpIHtcbiAgICBpZiAoIXRoaXMuX2lzUG9sbGluZ1BhdXNlZCB8fCAhdGhpcy5fY3VycmVudFBvbGxDb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHRoaXMuX2lzUG9sbGluZ1BhdXNlZCA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHRoaXMucG9sbCh7IC4uLnRoaXMuX2N1cnJlbnRQb2xsQ29uZmlnLCB0cmlnZ2VySW1tZWRpYXRlbHk6IHRydWUgfSk7XG4gIH1cblxuICBvblN1Y2Nlc3MoY2FsbGJhY2s6IChyZXNwb25zZTogRGF0YSkgPT4gdm9pZCkge1xuICAgIHRoaXMuc3RhdGUkLnBpcGUodGFrZVVudGlsUmVzcG9uc2UoKSwgZmlsdGVyU3VjY2VzcygpKS5zdWJzY3JpYmUoKHN0YXRlKSA9PiBjYWxsYmFjayhzdGF0ZS5yZXNwb25zZSkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgb25GYWlsdXJlKGNhbGxiYWNrOiAoZXJyb3I6IFJlcXVlc3RFcnJvcjx1bmtub3duPikgPT4gdm9pZCkge1xuICAgIHRoaXMuc3RhdGUkLnBpcGUodGFrZVVudGlsUmVzcG9uc2UoKSwgZmlsdGVyRmFpbHVyZSgpKS5zdWJzY3JpYmUoKHN0YXRlKSA9PiBjYWxsYmFjayhzdGF0ZS5lcnJvcikpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0QmVhcmVyQXV0aFByb3ZpZGVyKCkge1xuICAgIGNvbnN0IGF1dGhQcm92aWRlciA9IHRoaXMuX2NsaWVudC5hdXRoUHJvdmlkZXI7XG5cbiAgICBpZiAoYXV0aFByb3ZpZGVyICYmIGlzQmVhcmVyQXV0aFByb3ZpZGVyKGF1dGhQcm92aWRlcikpIHtcbiAgICAgIHJldHVybiBhdXRoUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVFbnRpdHlTdGF0ZShcbiAgICByZXF1ZXN0RXZlbnQ6IFJlcXVlc3RFdmVudDxSZXNwb25zZT4sXG4gICAgbWV0YTogUXVlcnlTdGF0ZU1ldGEsXG4gICAgb3B0aW9ucz86IEV4ZWN1dGVRdWVyeU9wdGlvbnMsXG4gICkge1xuICAgIHN3aXRjaCAocmVxdWVzdEV2ZW50LnR5cGUpIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgIGNhc2UgJ2RlbGF5LXJldHJ5Jzoge1xuICAgICAgICBjb25zdCB7IHR5cGUsIHJldHJ5RGVsYXksIHJldHJ5TnVtYmVyIH0gPSByZXF1ZXN0RXZlbnQ7XG4gICAgICAgIGNvbnN0IG5ld01ldGE6IFF1ZXJ5U3RhdGVNZXRhID0geyAuLi5tZXRhLCBpc1dhaXRpbmdGb3JSZXRyeTogdHlwZSA9PT0gJ2RlbGF5LXJldHJ5JywgcmV0cnlEZWxheSwgcmV0cnlOdW1iZXIgfTtcblxuICAgICAgICB0aGlzLl91cGRhdGVTdGF0ZSh7XG4gICAgICAgICAgdHlwZTogUXVlcnlTdGF0ZVR5cGUuTG9hZGluZyxcbiAgICAgICAgICBtZXRhOiBuZXdNZXRhLFxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3VwbG9hZC1wcm9ncmVzcyc6XG4gICAgICBjYXNlICdkb3dubG9hZC1wcm9ncmVzcyc6IHtcbiAgICAgICAgdGhpcy5fdXBkYXRlU3RhdGUoe1xuICAgICAgICAgIHR5cGU6IFF1ZXJ5U3RhdGVUeXBlLkxvYWRpbmcsXG4gICAgICAgICAgcHJvZ3Jlc3M6IHJlcXVlc3RFdmVudC5wcm9ncmVzcyxcbiAgICAgICAgICBwYXJ0aWFsVGV4dDogJ3BhcnRpYWxUZXh0JyBpbiByZXF1ZXN0RXZlbnQgPyByZXF1ZXN0RXZlbnQucGFydGlhbFRleHQgOiB1bmRlZmluZWQsXG4gICAgICAgICAgbWV0YSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3N1Y2Nlc3MnOiB7XG4gICAgICAgIGNvbnN0IHsgcmVzcG9uc2UsIGV4cGlyZXNJblRpbWVzdGFtcCB9ID0gcmVxdWVzdEV2ZW50O1xuICAgICAgICBjb25zdCBpc0dxbCA9IGlzR3FsUXVlcnlDb25maWcodGhpcy5fcXVlcnlDb25maWcpO1xuICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPVxuICAgICAgICAgIGlzR3FsICYmIHR5cGVvZiByZXNwb25zZSA9PT0gJ29iamVjdCcgJiYgISFyZXNwb25zZSAmJiAnZGF0YScgaW4gcmVzcG9uc2VcbiAgICAgICAgICAgID8gKHJlc3BvbnNlWydkYXRhJ10gYXMgUmVzcG9uc2UpXG4gICAgICAgICAgICA6IChyZXNwb25zZSBhcyBSZXNwb25zZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuX3F1ZXJ5Q29uZmlnLmVudGl0eSAmJiB0aGlzLl9xdWVyeUNvbmZpZy5lbnRpdHkuc2V0KSB7XG4gICAgICAgICAgY29uc3QgaWQgPSB0aGlzLl9xdWVyeUNvbmZpZy5lbnRpdHk/LmlkKHsgYXJnczogdGhpcy5fYXJndW1lbnRzLCByZXNwb25zZTogcmVzcG9uc2VEYXRhIH0pO1xuXG4gICAgICAgICAgdGhpcy5fcXVlcnlDb25maWcuZW50aXR5Py5zZXQoe1xuICAgICAgICAgICAgYXJnczogdGhpcy5fYXJndW1lbnRzLFxuICAgICAgICAgICAgcmVzcG9uc2U6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgc3RvcmU6IHRoaXMuX3F1ZXJ5Q29uZmlnLmVudGl0eS5zdG9yZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3VwZGF0ZVN0YXRlKHtcbiAgICAgICAgICB0eXBlOiBRdWVyeVN0YXRlVHlwZS5TdWNjZXNzLFxuICAgICAgICAgIHJlc3BvbnNlOiByZXNwb25zZURhdGEsXG4gICAgICAgICAgbWV0YTogeyAuLi5tZXRhLCBleHBpcmVzQXQ6IGV4cGlyZXNJblRpbWVzdGFtcCB9LFxuICAgICAgICB9KTtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSAnZmFpbHVyZSc6IHtcbiAgICAgICAgY29uc3QgeyBlcnJvciB9ID0gcmVxdWVzdEV2ZW50O1xuICAgICAgICBjb25zdCBmYWlsdXJlID0gKCkgPT4gdGhpcy5fdXBkYXRlU3RhdGUoeyB0eXBlOiBRdWVyeVN0YXRlVHlwZS5GYWlsdXJlLCBlcnJvciwgbWV0YSB9KTtcbiAgICAgICAgY29uc3QgYmVhcmVyQXV0aFByb3ZpZGVyID0gdGhpcy5fZ2V0QmVhcmVyQXV0aFByb3ZpZGVyKCk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICFiZWFyZXJBdXRoUHJvdmlkZXIgfHxcbiAgICAgICAgICBvcHRpb25zPy5faXNVbmF1dGhvcml6ZWRSZXRyeSB8fFxuICAgICAgICAgIGVycm9yLnN0YXR1cyAhPT0gSHR0cFN0YXR1c0NvZGUuVW5hdXRob3JpemVkIHx8XG4gICAgICAgICAgIWJlYXJlckF1dGhQcm92aWRlci5zaG91bGRSZWZyZXNoT25VbmF1dGhvcml6ZWRSZXNwb25zZVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gZmFpbHVyZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcXVlcnkgPSBiZWFyZXJBdXRoUHJvdmlkZXIuX3JlZnJlc2hRdWVyeSgpO1xuICAgICAgICBpZiAoIXF1ZXJ5KSByZXR1cm4gZmFpbHVyZSgpO1xuXG4gICAgICAgIHF1ZXJ5LnN0YXRlJFxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsUmVzcG9uc2UoKSxcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkFib3J0JCksXG4gICAgICAgICAgICB0YXAoKHN0YXRlKSA9PlxuICAgICAgICAgICAgICBpc1F1ZXJ5U3RhdGVTdWNjZXNzKHN0YXRlKSA/IHRoaXMuZXhlY3V0ZSh7IC4uLm9wdGlvbnMsIF9pc1VuYXV0aG9yaXplZFJldHJ5OiB0cnVlIH0pIDogZmFpbHVyZSgpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApXG4gICAgICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlICdjYW5jZWwnOiB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVN0YXRlKHtcbiAgICAgICAgICB0eXBlOiBRdWVyeVN0YXRlVHlwZS5DYW5jZWxsZWQsXG4gICAgICAgICAgbWV0YSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfdHJhbnNmb3JtU3RhdGUoczogUXVlcnlTdGF0ZTxSZXNwb25zZT4pOiBPYnNlcnZhYmxlPFF1ZXJ5U3RhdGU8RGF0YT4+IHtcbiAgICBpZiAoIWlzUXVlcnlTdGF0ZVN1Y2Nlc3MocykgfHwgIXRoaXMuX3F1ZXJ5Q29uZmlnLmVudGl0eT8uZ2V0KSB7XG4gICAgICByZXR1cm4gb2YocykgYXMgT2JzZXJ2YWJsZTxRdWVyeVN0YXRlPERhdGE+PjtcbiAgICB9XG5cbiAgICBjb25zdCBpZCA9IHRoaXMuX3F1ZXJ5Q29uZmlnLmVudGl0eS5pZCh7IGFyZ3M6IHRoaXMuX2FyZ3VtZW50cywgcmVzcG9uc2U6IHMucmVzcG9uc2UgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5fcXVlcnlDb25maWcuZW50aXR5XG4gICAgICAuZ2V0KHsgYXJnczogdGhpcy5fYXJndW1lbnRzLCBpZCwgcmVzcG9uc2U6IHMucmVzcG9uc2UsIHN0b3JlOiB0aGlzLl9xdWVyeUNvbmZpZy5lbnRpdHkuc3RvcmUgfSlcbiAgICAgIC5waXBlKG1hcCgodikgPT4gKHsgLi4ucywgcmVzcG9uc2U6IHYgfSkpKTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZVN0YXRlKHM6IFF1ZXJ5U3RhdGU8UmVzcG9uc2U+KSB7XG4gICAgLy8gV2UgbmVlZCB0byB1c2UgdW50cmFja2VkIGhlcmUgdG8gYXZvaWQgQW5ndWxhcidzIFwiYWxsb3dTaWduYWxXcml0ZXMgaXMgZmFsc2VcIiBlcnJvciB3aGVuIGV4ZWN1dGluZyBxdWVyaWVzIGluc2lkZSBBbmd1bGFyJ3MgY29tcHV0ZWQvZWZmZWN0IHNpZ25hbCBmdW5jdGlvbnMuXG4gICAgdW50cmFja2VkKCgpID0+IHRoaXMuX3N0YXRlJC5uZXh0KHMpKTtcbiAgfVxuXG4gIHByaXZhdGUgX21vY2tSZXF1ZXN0KGhlYWRlcnM6IFJlcXVlc3RIZWFkZXJzIHwgdW5kZWZpbmVkLCBtZXRhOiBRdWVyeVN0YXRlTWV0YSwgb3B0aW9uczogRXhlY3V0ZVF1ZXJ5T3B0aW9ucykge1xuICAgIGlmICghdGhpcy5fYXJndW1lbnRzPy5tb2NrKSByZXR1cm47XG5cbiAgICBjb25zdCB7IGRlbGF5ID0gMjAwLCBlcnJvciwgcmVzcG9uc2UsIHJldHJ5SW50b1Jlc3BvbnNlID0gZmFsc2UsIHByb2dyZXNzIH0gPSB0aGlzLl9hcmd1bWVudHMubW9jaztcbiAgICBjb25zdCBwcm9ncmVzc0ZpbGVTaXplID0gcHJvZ3Jlc3M/LmZpbGVTaXplID8/IDEwMDAwMDA7XG4gICAgY29uc3QgcHJvZ3Jlc3NFdmVudFR5cGUgPSBwcm9ncmVzcz8uZXZlbnRUeXBlID8/ICd1cGxvYWQnO1xuICAgIGNvbnN0IHByb2dyZXNzRXZlbnRDb3VudCA9IHByb2dyZXNzPy5ldmVudENvdW50ID8/IDU7XG4gICAgY29uc3QgcHJvZ3Jlc3NPbWl0VG90YWwgPSBwcm9ncmVzcz8ub21pdFRvdGFsID8/IGZhbHNlO1xuICAgIGNvbnN0IG9taXRQYXJ0aWFsVGV4dCA9IHByb2dyZXNzPy5vbWl0UGFydGlhbFRleHQgPz8gZmFsc2U7XG5cbiAgICBjb25zdCBmaW5hbFJlc29sdmVNb2NrID0gKCkgPT4ge1xuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUVudGl0eVN0YXRlKHsgZXJyb3IsIGhlYWRlcnM6IGhlYWRlcnMgPz8ge30sIHR5cGU6ICdmYWlsdXJlJyB9LCBtZXRhLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl91cGRhdGVFbnRpdHlTdGF0ZShcbiAgICAgICAgeyByZXNwb25zZTogcmVzcG9uc2UgYXMgUmVzcG9uc2UsIGhlYWRlcnM6IGhlYWRlcnMgPz8ge30sIHR5cGU6ICdzdWNjZXNzJyB9LFxuICAgICAgICBtZXRhLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgaWYgKHByb2dyZXNzKSB7XG4gICAgICBpbnRlcnZhbChkZWxheSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFwKChhKSA9PiB7XG4gICAgICAgICAgICBpZiAoYSA9PT0gcHJvZ3Jlc3NFdmVudENvdW50ICsgMSkge1xuICAgICAgICAgICAgICBmaW5hbFJlc29sdmVNb2NrKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gTWF0aC5taW4ocHJvZ3Jlc3NGaWxlU2l6ZSAqIGEsIHByb2dyZXNzRmlsZVNpemUgKiBwcm9ncmVzc0V2ZW50Q291bnQpO1xuICAgICAgICAgICAgICBjb25zdCBwZXJjZW50YWdlID0gKGN1cnJlbnQgLyAocHJvZ3Jlc3NGaWxlU2l6ZSAqIHByb2dyZXNzRXZlbnRDb3VudCkpICogMTAwO1xuXG4gICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUVudGl0eVN0YXRlKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IHByb2dyZXNzRXZlbnRUeXBlID09PSAndXBsb2FkJyA/ICd1cGxvYWQtcHJvZ3Jlc3MnIDogJ2Rvd25sb2FkLXByb2dyZXNzJyxcbiAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMgPz8ge30sXG4gICAgICAgICAgICAgICAgICBwcm9ncmVzczogeyBjdXJyZW50LCAuLi4ocHJvZ3Jlc3NPbWl0VG90YWwgPyB7fSA6IHsgcGVyY2VudGFnZSwgdG90YWw6IHByb2dyZXNzRmlsZVNpemUgfSkgfSxcbiAgICAgICAgICAgICAgICAgIHBhcnRpYWxUZXh0OiBvbWl0UGFydGlhbFRleHQgPyB1bmRlZmluZWQgOiBgUGFydGlhbCB0ZXh0ICR7YX1gLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbWV0YSxcbiAgICAgICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkFib3J0JCksXG4gICAgICAgICAgdGFrZVdoaWxlKChhKSA9PiBhIDwgcHJvZ3Jlc3NFdmVudENvdW50ICsgMSwgdHJ1ZSksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH0gZWxzZSBpZiAocmV0cnlJbnRvUmVzcG9uc2UpIHtcbiAgICAgIGludGVydmFsKGRlbGF5KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoKGEpID0+IHtcbiAgICAgICAgICAgIGlmIChhID09PSAzKSB7XG4gICAgICAgICAgICAgIGZpbmFsUmVzb2x2ZU1vY2soKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFNb2RpZmllZCA9IGEgKyAxO1xuICAgICAgICAgICAgICB0aGlzLl91cGRhdGVFbnRpdHlTdGF0ZShcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAnZGVsYXktcmV0cnknLFxuICAgICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyA/PyB7fSxcbiAgICAgICAgICAgICAgICAgIHJldHJ5RGVsYXk6IDEwMDAgKyAxMDAwICogYU1vZGlmaWVkLFxuICAgICAgICAgICAgICAgICAgcmV0cnlOdW1iZXI6IGFNb2RpZmllZCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1ldGEsXG4gICAgICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25BYm9ydCQpLFxuICAgICAgICAgIHRha2VXaGlsZSgoYSkgPT4gYSA8IDMsIHRydWUpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGltZXIoZGVsYXkpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgoKSA9PiBmaW5hbFJlc29sdmVNb2NrKCkpLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkFib3J0JCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIF9hZGREZXBlbmRlbnQodE5vZGVJbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKCF0aGlzLl9kZXBlbmRlbnRzW3ROb2RlSW5kZXhdKSB7XG4gICAgICB0aGlzLl9kZXBlbmRlbnRzW3ROb2RlSW5kZXhdID0gMDtcbiAgICB9XG5cbiAgICB0aGlzLl9kZXBlbmRlbnRzW3ROb2RlSW5kZXhdKys7XG5cbiAgICB0aGlzLl9kZXBlbmRlbnRzQ2hhbmdlZCQubmV4dCh0aGlzLl9kZXBlbmRlbnRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIF9yZW1vdmVEZXBlbmRlbnQodE5vZGVJbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgY291bnQgPSB0aGlzLl9kZXBlbmRlbnRzW3ROb2RlSW5kZXhdO1xuICAgIGlmIChjb3VudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZGVwZW5kZW50c1t0Tm9kZUluZGV4XS0tO1xuXG4gICAgaWYgKGNvdW50IDw9IDEpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLl9kZXBlbmRlbnRzW3ROb2RlSW5kZXhdO1xuICAgIH1cblxuICAgIHRoaXMuX2RlcGVuZGVudHNDaGFuZ2VkJC5uZXh0KHRoaXMuX2RlcGVuZGVudHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX2hhc0RlcGVuZGVudHMoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX2RlcGVuZGVudHMpLmxlbmd0aCA+IDA7XG4gIH1cbn1cbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvcXVlcnkvcXVlcnkudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVudGl0eVN0b3JlIH0gZnJvbSAnLi4vZW50aXR5JztcbmltcG9ydCB7IEFueVF1ZXJ5Q3JlYXRvciwgQ29uc3RydWN0UXVlcnksIFF1ZXJ5RGF0YU9mLCBRdWVyeVJlc3BvbnNlT2YgfSBmcm9tICcuLi9xdWVyeS1jcmVhdG9yJztcbmltcG9ydCB7IFF1ZXJ5Rm9ybSB9IGZyb20gJy4uL3F1ZXJ5LWZvcm0nO1xuaW1wb3J0IHsgTWV0aG9kLCBQYXRoUGFyYW1zLCBRdWVyeVBhcmFtcywgUmVxdWVzdEVycm9yLCBSZXF1ZXN0UHJvZ3Jlc3MgfSBmcm9tICcuLi9yZXF1ZXN0JztcbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSAnLi9xdWVyeSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlBdXRvUmVmcmVzaENvbmZpZyB7XG4gIC8qKlxuICAgKiBSZWZyZXNoIHRoZSBxdWVyeSB3aGVuIHRoZSBxdWVyeSBjbGllbnQncyBoZWFkZXJzIGNoYW5nZS5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcXVlcnlDbGllbnREZWZhdWx0SGVhZGVyc0NoYW5nZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJlZnJlc2ggdGhlIHF1ZXJ5IHdoZW4gdGhlIHdpbmRvdyByZWdhaW5zIGZvY3VzLlxuICAgKlxuICAgKiBUaGlzIGNhbiBvbmx5IGJlIGRpc2FibGVkIGlmIGBhdXRvUmVmcmVzaFF1ZXJpZXNPbldpbmRvd0ZvY3VzYCBpcyBlbmFibGVkIG9uIHRoZSBxdWVyeSBjbGllbnQuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHdpbmRvd0ZvY3VzPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlTZXRQYXJhbXM8U3RvcmUsIFJlc3BvbnNlLCBBcmd1bWVudHMsIElkPiB7XG4gIC8qKlxuICAgKiBUaGUgcmVzcG9uc2UgZGF0YS5cbiAgICovXG4gIHJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAvKipcbiAgICogVGhlIGlkKHMpIHJldHVybmVkIGJ5IHRoZSBgaWRgIGZ1bmN0aW9uLlxuICAgKi9cbiAgaWQ6IElkO1xuXG4gIC8qKlxuICAgKiBUaGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgcXVlcnkuXG4gICAqL1xuICBhcmdzOiBBcmd1bWVudHM7XG5cbiAgLyoqXG4gICAqIFRoZSBlbnRpdHkgc3RvcmUuXG4gICAqL1xuICBzdG9yZTogU3RvcmU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5R2V0UGFyYW1zPFN0b3JlLCBSZXNwb25zZSwgQXJndW1lbnRzLCBJZD4ge1xuICAvKipcbiAgICogVGhlIHJlc3BvbnNlIGRhdGEuXG4gICAqL1xuICByZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgLyoqXG4gICAqIFRoZSBpZChzKSByZXR1cm5lZCBieSB0aGUgYGlkYCBmdW5jdGlvbi5cbiAgICovXG4gIGlkOiBJZDtcblxuICAvKipcbiAgICogVGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIHF1ZXJ5LlxuICAgKi9cbiAgYXJnczogQXJndW1lbnRzO1xuXG4gIC8qKlxuICAgKiBUaGUgZW50aXR5IHN0b3JlLlxuICAgKi9cbiAgc3RvcmU6IFN0b3JlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eUlkUGFyYW1zPFJlc3BvbnNlLCBBcmd1bWVudHM+IHtcbiAgLyoqXG4gICAqIFRoZSByZXNwb25zZSBkYXRhLlxuICAgKi9cbiAgcmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gIC8qKlxuICAgKiBUaGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgcXVlcnkuXG4gICAqL1xuICBhcmdzOiBBcmd1bWVudHM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlFbnRpdHlDb25maWc8U3RvcmUsIERhdGEsIFJlc3BvbnNlLCBBcmd1bWVudHMsIElkPiB7XG4gIC8qKlxuICAgKiBUaGUgZW50aXR5IHN0b3JlIHRvIHVzZSBmb3IgdGhlIHF1ZXJ5LlxuICAgKi9cbiAgc3RvcmU6IFN0b3JlO1xuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgaWQgb2YgdGhlIGVudGl0eS4gQ2FuIGFsc28gcmV0dXJuIGFuIGFycmF5IG9mIGlkcy5cbiAgICovXG4gIGlkOiAoZGF0YTogRW50aXR5SWRQYXJhbXM8UmVzcG9uc2UsIEFyZ3VtZW50cz4pID0+IElkO1xuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgcmVzcG9uc2UgZGF0YSAoY2FuIGJlIGEgc3Vic2V0IG9mIHRoZSByZXNwb25zZSkuXG4gICAqL1xuICBnZXQ/OiAoZGF0YTogRW50aXR5R2V0UGFyYW1zPFN0b3JlLCBSZXNwb25zZSwgQXJndW1lbnRzLCBJZD4pID0+IE9ic2VydmFibGU8RGF0YT47XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdG8gdXBkYXRlIHRoZSBlbnRpdHkgc3RvcmUgZXZlcnkgdGltZSBhIG5ldyByZXNwb25zZSBpcyByZWNlaXZlZC5cbiAgICovXG4gIHNldD86IChkYXRhOiBFbnRpdHlTZXRQYXJhbXM8U3RvcmUsIFJlc3BvbnNlLCBBcmd1bWVudHMsIElkPikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IHR5cGUgUXVlcnlDb25maWdCYXNlPFxuICBSZXNwb25zZSxcbiAgQXJndW1lbnRzIGV4dGVuZHMgQmFzZUFyZ3VtZW50cyB8IHVuZGVmaW5lZCxcbiAgU3RvcmUgZXh0ZW5kcyBFbnRpdHlTdG9yZTx1bmtub3duPixcbiAgRGF0YSxcbiAgSWQsXG4+ID0ge1xuICAvKipcbiAgICogVGhlIGh0dHAgbWV0aG9kIHRvIHVzZSBmb3IgdGhlIHF1ZXJ5LlxuICAgKi9cbiAgbWV0aG9kOiBNZXRob2Q7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgdGhlIGF1dGggcHJvdmlkZXIgc2hvdWxkIGJlIHVzZWQgZm9yIHRoaXMgcXVlcnkuXG4gICAqIFRoZSBxdWVyeSAqKndpbGwgdGhyb3cqKiBpZiB0aGUgcXVlcnkgY2xpZW50J3MgYXV0aCBwcm92aWRlciBpcyB1bnNldC5cbiAgICovXG4gIHNlY3VyZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgdGhlIHF1ZXJ5IHNob3VsZCBlbWl0IHByb2dyZXNzIGV2ZW50cy5cbiAgICovXG4gIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB0aGUgcXVlcnkncyByZXNwb25zZSB0eXBlLlxuICAgKiBAZGVmYXVsdCAnanNvbidcbiAgICovXG4gIHJlc3BvbnNlVHlwZT86ICdhcnJheWJ1ZmZlcicgfCAnYmxvYicgfCAnanNvbicgfCAndGV4dCc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyByZXF1ZXN0IHNob3VsZCBiZSBzZW50IHdpdGggb3V0Z29pbmcgY3JlZGVudGlhbHMgKGNvb2tpZXMpLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgaGFuZGxpbmcgYXV0byByZWZyZXNoIHRyaWdnZXJzLlxuICAgKlxuICAgKiAqKk5vdGU6KiogVGhpcyBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgcXVlcmllcyB0aGF0IGNhbiBiZSByZWZyZXNoZWQuIChgR0VUYCwgYEhFQURgLCBgT1BUSU9OU2AsIGBHUUxfUVVFUllgKVxuICAgKi9cbiAgYXV0b1JlZnJlc2hPbj86IFF1ZXJ5QXV0b1JlZnJlc2hDb25maWc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYXV0b21hdGljYWxseSBzdG9wIHBvbGxpbmcgZm9yIHRoaXMgcXVlcnkgd2hlbiB0aGUgd2luZG93IGxvc2VzIGZvY3VzLlxuICAgKiBQb2xsaW5nIHdpbGwgcmVzdW1lIHdoZW4gdGhlIHdpbmRvdyByZWdhaW5zIGZvY3VzLlxuICAgKlxuICAgKiBUaGlzIGNhbiBvbmx5IGJlIGRpc2FibGVkIGlmIGBlbmFibGVTbWFydFBvbGxpbmdgIGlzIGVuYWJsZWQgb24gdGhlIHF1ZXJ5IGNsaWVudC5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgZW5hYmxlU21hcnRQb2xsaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHF1ZXJ5J3MgdHlwZSBpbmZvcm1hdGlvbi5cbiAgICovXG4gIHR5cGVzPzoge1xuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBzdWNjZXNzZnVsIHJlc3BvbnNlLlxuICAgICAqL1xuICAgIHJlc3BvbnNlPzogUmVzcG9uc2U7XG5cbiAgICAvKipcbiAgICAgKiBBcmd1bWVudHMgZm9yIGV4ZWN1dGluZyB0aGUgcXVlcnkuXG4gICAgICpcbiAgICAgKiAtIGBwYXRoUGFyYW1zYDogVGhlIHBhdGggcGFyYW1ldGVycyBmb3IgdGhlIHF1ZXJ5LiAoaW4gZnJvbnQgb2YgdGhlID8gaW4gdGhlIHVybClcbiAgICAgKiAtIGBxdWVyeVBhcmFtc2A6IFRoZSBxdWVyeSBwYXJhbWV0ZXJzIGZvciB0aGUgcXVlcnkuIChhZnRlciB0aGUgPyBpbiB0aGUgdXJsKVxuICAgICAqIC0gYGJvZHlgOiBUaGUgYm9keSBmb3IgdGhlIHF1ZXJ5LiBVbmF2YWlsYWJsZSBmb3IgR0VULCBIRUFEIGFuZCBPUFRJT05TIHJlcXVlc3RzLlxuICAgICAqIC0gYGhlYWRlcnNgOiBUaGUgaGVhZGVycyBmb3IgdGhlIHF1ZXJ5LlxuICAgICAqIC0gYHZhcmlhYmxlc2A6IFRoZSB2YXJpYWJsZXMgZm9yIHRoZSBxdWVyeS4gKGdyYXBocWwgb25seSlcbiAgICAgKi9cbiAgICBhcmdzPzogQXJndW1lbnRzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBPYmplY3QgY29udGFpbmluZyB0aGUgcXVlcnkncyBlbnRpdHkgc3RvcmUgaW5mb3JtYXRpb24uXG4gICAqL1xuICBlbnRpdHk/OiBRdWVyeUVudGl0eUNvbmZpZzxTdG9yZSwgRGF0YSwgUmVzcG9uc2UsIEFyZ3VtZW50cywgSWQ+O1xufTtcblxuZXhwb3J0IHR5cGUgUmVzdFF1ZXJ5Q29uZmlnPFxuICBSb3V0ZSBleHRlbmRzIFJvdXRlVHlwZTxBcmd1bWVudHM+LFxuICBSZXNwb25zZSxcbiAgQXJndW1lbnRzIGV4dGVuZHMgQmFzZUFyZ3VtZW50cyB8IHVuZGVmaW5lZCxcbiAgU3RvcmUgZXh0ZW5kcyBFbnRpdHlTdG9yZTx1bmtub3duPixcbiAgRGF0YSxcbiAgSWQsXG4+ID0gUXVlcnlDb25maWdCYXNlPFJlc3BvbnNlLCBBcmd1bWVudHMsIFN0b3JlLCBEYXRhLCBJZD4gJiB7XG4gIC8qKlxuICAgKiBUaGUgYXBpIHJvdXRlIHRvIHVzZSBmb3IgdGhlIHF1ZXJ5LlxuICAgKi9cbiAgcm91dGU6IFJvdXRlO1xufTtcblxuZXhwb3J0IHR5cGUgR3FsVHJhbnNmZXJPcHRpb24gPSAnR0VUJyB8ICdQT1NUJztcblxuZXhwb3J0IGludGVyZmFjZSBHcWxRdWVyeUNvbmZpZzxcbiAgUm91dGUgZXh0ZW5kcyBSb3V0ZVR5cGU8QXJndW1lbnRzPiB8IHVuZGVmaW5lZCxcbiAgUmVzcG9uc2UsXG4gIEFyZ3VtZW50cyBleHRlbmRzIEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQsXG4gIFN0b3JlIGV4dGVuZHMgRW50aXR5U3RvcmU8dW5rbm93bj4sXG4gIERhdGEsXG4gIElkLFxuPiBleHRlbmRzIFF1ZXJ5Q29uZmlnQmFzZTxSZXNwb25zZSwgQXJndW1lbnRzLCBTdG9yZSwgRGF0YSwgSWQ+IHtcbiAgLyoqXG4gICAqIFRoZSBncmFwaHFsIHF1ZXJ5IHRvIHVzZSBmb3IgdGhlIHF1ZXJ5LlxuICAgKi9cbiAgcXVlcnk6IHN0cmluZztcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiB0aGUgcXVlcnkgc2hvdWxkIGJlIHNlbnQgdmlhIEdFVCBvciBQT1NULlxuICAgKiAtIGBHRVRgOiBUaGUgcXVlcnkgd2lsbCBiZSBzZW50IHZpYSBxdWVyeSBwYXJhbWV0ZXJzLlxuICAgKiAtIGBQT1NUYDogVGhlIHF1ZXJ5IHdpbGwgYmUgc2VudCB2aWEgdGhlIGJvZHkuXG4gICAqIEBkZWZhdWx0ICdQT1NUJ1xuICAgKi9cbiAgdHJhbnNmZXJWaWE/OiBHcWxUcmFuc2Zlck9wdGlvbjtcblxuICAvKipcbiAgICogU3Vicm91dGUgdG8gdXNlIGZvciB0aGUgcXVlcnkuXG4gICAqL1xuICByb3V0ZT86IFJvdXRlO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IHR5cGUgQW55UmVzdFF1ZXJ5Q29uZmlnID0gUmVzdFF1ZXJ5Q29uZmlnPGFueSwgYW55LCBhbnksIGFueSwgYW55LCBhbnk+O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCB0eXBlIEFueUdxbFF1ZXJ5Q29uZmlnID0gR3FsUXVlcnlDb25maWc8YW55LCBhbnksIGFueSwgYW55LCBhbnksIGFueT47XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5Q29uZmlnV2l0aG91dE1ldGhvZDxcbiAgUm91dGUgZXh0ZW5kcyBSb3V0ZVR5cGU8QXJndW1lbnRzPixcbiAgUmVzcG9uc2UsXG4gIEFyZ3VtZW50cyBleHRlbmRzIEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQsXG4gIFN0b3JlIGV4dGVuZHMgRW50aXR5U3RvcmU8dW5rbm93bj4sXG4gIERhdGEsXG4gIElkLFxuPiA9IE9taXQ8UmVzdFF1ZXJ5Q29uZmlnPFJvdXRlLCBSZXNwb25zZSwgQXJndW1lbnRzLCBTdG9yZSwgRGF0YSwgSWQ+LCAnbWV0aG9kJz47XG5cbmV4cG9ydCB0eXBlIEdxbFF1ZXJ5Q29uZmlnV2l0aG91dE1ldGhvZDxcbiAgUm91dGUgZXh0ZW5kcyBSb3V0ZVR5cGU8QXJndW1lbnRzPixcbiAgUmVzcG9uc2UsXG4gIEFyZ3VtZW50cyBleHRlbmRzIEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQsXG4gIFN0b3JlIGV4dGVuZHMgRW50aXR5U3RvcmU8dW5rbm93bj4sXG4gIERhdGEsXG4gIElkLFxuPiA9IE9taXQ8R3FsUXVlcnlDb25maWc8Um91dGUsIFJlc3BvbnNlLCBBcmd1bWVudHMsIFN0b3JlLCBEYXRhLCBJZD4sICdtZXRob2QnPjtcblxuZXhwb3J0IHR5cGUgQmFzZUFyZ3VtZW50cyA9IFdpdGhIZWFkZXJzICZcbiAgV2l0aFZhcmlhYmxlcyAmXG4gIFdpdGhCb2R5ICZcbiAgV2l0aFF1ZXJ5UGFyYW1zICZcbiAgV2l0aFBhdGhQYXJhbXMgJlxuICBXaXRoTW9jazx1bmtub3duPjtcblxuZXhwb3J0IGludGVyZmFjZSBXaXRoSGVhZGVycyB7XG4gIC8qKlxuICAgKiBUaGUgaGVhZGVycyB0byBzZW5kIHdpdGggdGhlIHF1ZXJ5LlxuICAgKi9cbiAgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlNb2NrQ29uZmlnPE1vY2tSZXNwb25zZT4ge1xuICAvKipcbiAgICogVGhlIG1vY2sgcmVzcG9uc2UgdG8gdXNlIGZvciB0aGUgcXVlcnkuXG4gICAqL1xuICByZXNwb25zZT86IE1vY2tSZXNwb25zZTtcblxuICAvKipcbiAgICogVGhlIG1vY2sgZXJyb3IgdG8gdXNlIGZvciB0aGUgcXVlcnkuXG4gICAqL1xuICBlcnJvcj86IFJlcXVlc3RFcnJvcjtcblxuICAvKipcbiAgICogVGhlIGRlbGF5IGluIG1pbGxpc2Vjb25kcyB0byB3YWl0IGJlZm9yZSByZXNvbHZpbmcgdGhlIG1vY2suXG4gICAqIElmIHByb2dyZXNzIGlzIGVuYWJsZWQsIHRoZSBkZWxheSB3aWxsIGJlIHVzZWQgZm9yIGVhY2ggcHJvZ3Jlc3MgZXZlbnQuXG4gICAqIEBkZWZhdWx0IDIwMFxuICAgKi9cbiAgZGVsYXk/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVwb3J0IHByb2dyZXNzIGZvciB0aGUgbW9jay5cbiAgICogRm9yIHRlc3RpbmcgZS5nLiBmaWxlIHVwbG9hZHMuXG4gICAqL1xuICBwcm9ncmVzcz86IHtcbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIHByb2dyZXNzIGV2ZW50cyB0byByZXBvcnQuXG4gICAgICogQGRlZmF1bHQgNVxuICAgICAqL1xuICAgIGV2ZW50Q291bnQ/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiBwcm9ncmVzcyBldmVudCB0byByZXBvcnQuXG4gICAgICogQGRlZmF1bHQgJ3VwbG9hZCdcbiAgICAgKi9cbiAgICBldmVudFR5cGU/OiAnZG93bmxvYWQnIHwgJ3VwbG9hZCc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdG90YWwgc2l6ZSBvZiB0aGUgZmlsZSB0byByZXBvcnQgcHJvZ3Jlc3MgZm9yIGluIGJ5dGVzLlxuICAgICAqIEBkZWZhdWx0IDFfMDAwXzAwMCAoMU1CKVxuICAgICAqL1xuICAgIGZpbGVTaXplPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogSWYgdHJ1ZSwgdGhlIHRvdGFsIHNpemUgb2YgdGhlIGZpbGUgd2lsbCBiZSBvbWl0dGVkIGZyb20gdGhlIHByb2dyZXNzIGV2ZW50LlxuICAgICAqIFVzZWZ1bCBmb3IgdGVzdGluZyBlLmcuIGRvd25sb2FkIHByb2dyZXNzIHdoZW4gdGhlIHNlcnZlciBkb2VzIG5vdCBwcm92aWRlIGEgdG90YWwgc2l6ZS5cbiAgICAgKi9cbiAgICBvbWl0VG90YWw/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogSWYgdHJ1ZSwgdGhlIHBhcnRpYWwgdGV4dCB3aWxsIGJlIG9taXR0ZWQgZnJvbSB0aGUgcHJvZ3Jlc3MgZXZlbnQuXG4gICAgICogVXNlZnVsIGZvciB0ZXN0aW5nIGUuZy4gZG93bmxvYWQgcHJvZ3Jlc3Mgd2hlbiB0aGUgc2VydmVyIGRvZXMgbm90IHByb3ZpZGUgYSBwYXJ0aWFsIHRleHQuXG4gICAgICovXG4gICAgb21pdFBhcnRpYWxUZXh0PzogYm9vbGVhbjtcbiAgfTtcblxuICAvKipcbiAgICogVGhpcyB3aWxsIG1vY2sgdGhlIHJlcXVlc3QgZmFpbGluZyBhbmQgZ2V0dGluZyByZXRyaWVkIDMgdGltZXMuIEFmdGVyLCB0aGUgcmVxdWVzdCB3aWxsIHN1Y2NlZWQgd2l0aCB0aGUgcHJvdmlkZWQgcmVzcG9uc2UuXG4gICAqIENhbiBub3QgYmUgdXNlZCB3aXRoIGBwcm9ncmVzc2AgZW5hYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJldHJ5SW50b1Jlc3BvbnNlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXaXRoTW9jazxNb2NrUmVzcG9uc2U+IHtcbiAgbW9jaz86IFF1ZXJ5TW9ja0NvbmZpZzxNb2NrUmVzcG9uc2U+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5Q29uZmlnIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBxdWVyeSBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGludGVybmFsIHF1ZXJ5IHN0b3JlLlxuICAgKlxuICAgKiBHZW5lcmFsbHkgdGhpcyBzaG91bGQgYmUgbGVmdCBvbiBgZmFsc2VgIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBza2lwUXVlcnlTdG9yZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBjYWNoZSBrZXkgdG8gdXNlIGZvciB0aGlzIHF1ZXJ5LlxuICAgKiBVc2VmdWwgZm9yIHF1ZXJpZXMgdGhhdCBhcmUgZXF1YWwgYnV0IHNob3VsZCBiZSBzdG9yZWQgc2VwYXJhdGVseS5cbiAgICogV2lsbCBiZSBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBpZiBub3QgcHJvdmlkZWQuXG4gICAqXG4gICAqIEdlbmVyYWxseSB0aGlzIHNob3VsZCBiZSBsZWZ0IG9uIGB1bmRlZmluZWRgIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuXG4gICAqL1xuICBxdWVyeVN0b3JlQ2FjaGVLZXk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2l0aENvbmZpZyB7XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgcXVlcnkuXG4gICAqL1xuICBjb25maWc/OiBRdWVyeUNvbmZpZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXaXRoVmFyaWFibGVzIHtcbiAgLyoqXG4gICAqIFRoZSB2YXJpYWJsZXMgZm9yIHRoZSBxdWVyeS4gKGdyYXBocWwgb25seSlcbiAgICovXG4gIHZhcmlhYmxlcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdpdGhCb2R5IHtcbiAgLyoqXG4gICAqIFRoZSBib2R5IGZvciB0aGUgcXVlcnkuIFVuYXZhaWxhYmxlIGZvciBHRVQsIEhFQUQgYW5kIE9QVElPTlMgcmVxdWVzdHMuXG4gICAqL1xuICBib2R5PzogdW5rbm93bjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXaXRoUXVlcnlQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgZm9yIHRoZSBxdWVyeS4gKGFmdGVyIHRoZSA/IGluIHRoZSB1cmwpXG4gICAqL1xuICBxdWVyeVBhcmFtcz86IFF1ZXJ5UGFyYW1zO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdpdGhQYXRoUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBwYXRoIHBhcmFtZXRlcnMgZm9yIHRoZSBxdWVyeS4gKGluIGZyb250IG9mIHRoZSA/IGluIHRoZSB1cmwpXG4gICAqL1xuICBwYXRoUGFyYW1zPzogUGF0aFBhcmFtcztcbn1cblxuZXhwb3J0IHR5cGUgUXVlcnlUcmlnZ2VyID0gJ3Byb2dyYW0nIHwgJ3BvbGwnIHwgJ2F1dG8nO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlc1xuZXhwb3J0IHR5cGUgRW1wdHlPYmplY3QgPSB7fTtcblxuZXhwb3J0IGludGVyZmFjZSBFeGVjdXRlUXVlcnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc2tpcCB0aGUgY2FjaGUgZm9yIHRoaXMgcXVlcnkuIFRoaXMgd2lsbCBmb3JjZSB0aGUgcXVlcnkgdG8gYmUgZXhlY3V0ZWQuIEl0IG1pZ2h0IHN0aWxsIGJlIGNhdWdodCBieSB0aGUgbmF0aXZlIGJyb3dzZXIgY2FjaGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBza2lwQ2FjaGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGNhbmNlbCB0aGUgcHJldmlvdXMgcmVxdWVzdCBpZiBpdCBpcyBzdGlsbCBsb2FkaW5nLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgY2FuY2VsUHJldmlvdXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgdHJpZ2dlciB0eXBlIGZvciB0aGlzIHF1ZXJ5LlxuICAgKiAtIGBwcm9ncmFtYDogVGhlIHF1ZXJ5IHdhcyB0cmlnZ2VyZWQgYnkgdGhlIHVzZXIuXG4gICAqIC0gYHBvbGxgOiBUaGUgcXVlcnkgd2FzIHRyaWdnZXJlZCBieSBwb2xsaW5nLlxuICAgKiAtIGBhdXRvYDogVGhlIHF1ZXJ5IHdhcyB0cmlnZ2VyZWQgYnkgYW4gYXV0byByZWZyZXNoIGV2ZW50LlxuICAgKiBAZGVmYXVsdCAncHJvZ3JhbSdcbiAgICogQGludGVybmFsXG4gICAqL1xuICBfdHJpZ2dlcmVkVmlhPzogUXVlcnlUcmlnZ2VyO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgaXMgYSByZXRyeSBvZiBhbiB1bmF1dGhvcml6ZWQgcmVxdWVzdC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBfaXNVbmF1dGhvcml6ZWRSZXRyeT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIFJvdXRlVHlwZTxBcmd1bWVudHMgZXh0ZW5kcyBCYXNlQXJndW1lbnRzIHwgdW5kZWZpbmVkPiA9IEFyZ3VtZW50cyBleHRlbmRzIHtcbiAgcGF0aFBhcmFtczogaW5mZXIgUGF0aFBhcmFtcztcbn1cbiAgPyAocDogUGF0aFBhcmFtcykgPT4gUm91dGVTdHJpbmdcbiAgOiBSb3V0ZVN0cmluZztcblxuZXhwb3J0IHR5cGUgUm91dGVTdHJpbmcgPSBgLyR7c3RyaW5nfWA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9sbENvbmZpZyB7XG4gIC8qKlxuICAgKiBUaGUgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzIHRvIHBvbGwgdGhlIHF1ZXJ5LlxuICAgKi9cbiAgaW50ZXJ2YWw6IG51bWJlcjtcblxuICAvKipcbiAgICogQSBvYnNlcnZhYmxlIHRoYXQgd2lsbCBzdG9wIHRoZSBwb2xsaW5nIHdoZW4gaXQgZW1pdHMuXG4gICAqL1xuICB0YWtlVW50aWw6IE9ic2VydmFibGU8dW5rbm93bj47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gdHJpZ2dlciB0aGUgcXVlcnkgaW1tZWRpYXRlbHkgYWZ0ZXIgcG9sbGluZyBzdGFydHMuXG4gICAqL1xuICB0cmlnZ2VySW1tZWRpYXRlbHk/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgZW51bSBRdWVyeVN0YXRlVHlwZSB7XG4gIFByZXBhcmVkID0gJ1BSRVBBUkVEJyxcbiAgTG9hZGluZyA9ICdMT0FESU5HJyxcbiAgU3VjY2VzcyA9ICdTVUNDRVNTJyxcbiAgRmFpbHVyZSA9ICdGQUlMVVJFJyxcbiAgQ2FuY2VsbGVkID0gJ0NBTkNFTExFRCcsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJlcGFyZWQge1xuICB0eXBlOiBRdWVyeVN0YXRlVHlwZS5QcmVwYXJlZDtcbiAgbWV0YTogUXVlcnlTdGF0ZU1ldGE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VjY2VzczxSZXNwb25zZSA9IHVua25vd24+IHtcbiAgdHlwZTogUXVlcnlTdGF0ZVR5cGUuU3VjY2VzcztcbiAgcmVzcG9uc2U6IFJlc3BvbnNlO1xuICBtZXRhOiBRdWVyeVN0YXRlU3VjY2Vzc01ldGE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmFpbHVyZSB7XG4gIHR5cGU6IFF1ZXJ5U3RhdGVUeXBlLkZhaWx1cmU7XG4gIGVycm9yOiBSZXF1ZXN0RXJyb3I7XG4gIG1ldGE6IFF1ZXJ5U3RhdGVNZXRhO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvYWRpbmcge1xuICB0eXBlOiBRdWVyeVN0YXRlVHlwZS5Mb2FkaW5nO1xuICBtZXRhOiBRdWVyeVN0YXRlTWV0YTtcbiAgcGFydGlhbFRleHQ/OiBzdHJpbmc7XG4gIHByb2dyZXNzPzogUmVxdWVzdFByb2dyZXNzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhbmNlbGxlZCB7XG4gIHR5cGU6IFF1ZXJ5U3RhdGVUeXBlLkNhbmNlbGxlZDtcbiAgbWV0YTogUXVlcnlTdGF0ZU1ldGE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlTdGF0ZU1ldGEge1xuICBpZDogbnVtYmVyO1xuICB0cmlnZ2VyZWRWaWE6IFF1ZXJ5VHJpZ2dlcjtcbiAgaXNXYWl0aW5nRm9yUmV0cnk/OiBib29sZWFuO1xuICByZXRyeU51bWJlcj86IG51bWJlcjtcbiAgcmV0cnlEZWxheT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBRdWVyeVN0YXRlU3VjY2Vzc01ldGEgZXh0ZW5kcyBRdWVyeVN0YXRlTWV0YSB7XG4gIGV4cGlyZXNBdD86IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgUXVlcnlTdGF0ZTxSZXNwb25zZSA9IHVua25vd24+ID0gTG9hZGluZyB8IFN1Y2Nlc3M8UmVzcG9uc2U+IHwgRmFpbHVyZSB8IENhbmNlbGxlZCB8IFByZXBhcmVkO1xuXG5leHBvcnQgdHlwZSBRdWVyeVN0YXRlUmVzcG9uc2VPZjxUIGV4dGVuZHMgUXVlcnlTdGF0ZSA9IFF1ZXJ5U3RhdGU+ID1cbiAgVCBleHRlbmRzIFN1Y2Nlc3M8aW5mZXIgUmVzcG9uc2U+ID8gUmVzcG9uc2UgOiBuZXZlcjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCB0eXBlIEFueVF1ZXJ5ID0gUXVlcnk8YW55LCBhbnksIGFueSwgYW55LCBhbnksIGFueT47XG5cbmV4cG9ydCB0eXBlIEFueVF1ZXJ5Q3JlYXRvckNvbGxlY3Rpb24gPSB7IFtuYW1lOiBzdHJpbmddOiBBbnlRdWVyeUNyZWF0b3IgfTtcblxuZXhwb3J0IHR5cGUgUXVlcnlDb2xsZWN0aW9uT2Y8VCBleHRlbmRzIHsgW25hbWU6IHN0cmluZ106IEFueVF1ZXJ5Q3JlYXRvciB9PiA9IHtcbiAgW0sgaW4ga2V5b2YgVF06IHsgdHlwZTogSzsgcXVlcnk6IENvbnN0cnVjdFF1ZXJ5PFRbS10+IH07XG59W2tleW9mIFRdO1xuXG5leHBvcnQgdHlwZSBBbnlRdWVyeUNvbGxlY3Rpb24gPSBRdWVyeUNvbGxlY3Rpb25PZjxBbnlRdWVyeUNyZWF0b3JDb2xsZWN0aW9uPjtcblxuZXhwb3J0IHR5cGUgUXVlcnlPZjxUIGV4dGVuZHMgQW55UXVlcnlDb2xsZWN0aW9uIHwgQW55UXVlcnkgfCBudWxsPiA9IFQgZXh0ZW5kcyBBbnlRdWVyeVxuICA/IFRcbiAgOiBUIGV4dGVuZHMgQW55UXVlcnlDb2xsZWN0aW9uXG4gICAgPyBUWydxdWVyeSddXG4gICAgOiBuZXZlcjtcblxuZXhwb3J0IHR5cGUgQW55UXVlcnlDb2xsZWN0aW9uUmVzcG9uc2U8VCBleHRlbmRzIEFueVF1ZXJ5Q29sbGVjdGlvbj4gPSBRdWVyeVJlc3BvbnNlT2Y8VFsncXVlcnknXT47XG5leHBvcnQgdHlwZSBBbnlRdWVyeUNvbGxlY3Rpb25EYXRhPFQgZXh0ZW5kcyBBbnlRdWVyeUNvbGxlY3Rpb24+ID0gUXVlcnlEYXRhT2Y8VFsncXVlcnknXT47XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5Q29sbGVjdGlvbktleXNPZjxUIGV4dGVuZHMgQW55UXVlcnlDb2xsZWN0aW9uIHwgQW55UXVlcnkgfCBudWxsPiA9IFQgZXh0ZW5kcyBBbnlRdWVyeUNvbGxlY3Rpb25cbiAgPyBUWyd0eXBlJ11cbiAgOiBuZXZlcjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBpbnRlcmZhY2UgUmVzZXRQYWdlT25FcnJvck9wZXJhdG9yQ29uZmlnPEogZXh0ZW5kcyBRdWVyeUZvcm08YW55Pj4ge1xuICAvKipcbiAgICogVGhlIHF1ZXJ5IGZvcm0gdG8gcmVzZXQgdGhlIHBhZ2Ugb2YuXG4gICAqL1xuICBxdWVyeUZvcm06IEo7XG5cbiAgLyoqXG4gICAqIFRoZSBrZXkgb2YgdGhlIHBhZ2UgY29udHJvbCBpbiB0aGUgcXVlcnkgZm9ybS5cbiAgICogQGRlZmF1bHQgJ3BhZ2UnXG4gICAqL1xuICBwYWdlQ29udHJvbEtleT86IHN0cmluZztcbn1cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvcXVlcnkvcXVlcnkudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVudGl0eVN0b3JlIH0gZnJvbSAnLi4vZW50aXR5JztcbmltcG9ydCB7IEFueVF1ZXJ5Q3JlYXRvciwgQ29uc3RydWN0UXVlcnksIFF1ZXJ5RGF0YU9mLCBRdWVyeVJlc3BvbnNlT2YgfSBmcm9tICcuLi9xdWVyeS1jcmVhdG9yJztcbmltcG9ydCB7IFF1ZXJ5Rm9ybSB9IGZyb20gJy4uL3F1ZXJ5LWZvcm0nO1xuaW1wb3J0IHsgTWV0aG9kLCBQYXRoUGFyYW1zLCBRdWVyeVBhcmFtcywgUmVxdWVzdEVycm9yLCBSZXF1ZXN0UHJvZ3Jlc3MgfSBmcm9tICcuLi9yZXF1ZXN0JztcbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSAnLi9xdWVyeSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlBdXRvUmVmcmVzaENvbmZpZyB7XG4gIC8qKlxuICAgKiBSZWZyZXNoIHRoZSBxdWVyeSB3aGVuIHRoZSBxdWVyeSBjbGllbnQncyBoZWFkZXJzIGNoYW5nZS5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcXVlcnlDbGllbnREZWZhdWx0SGVhZGVyc0NoYW5nZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJlZnJlc2ggdGhlIHF1ZXJ5IHdoZW4gdGhlIHdpbmRvdyByZWdhaW5zIGZvY3VzLlxuICAgKlxuICAgKiBUaGlzIGNhbiBvbmx5IGJlIGRpc2FibGVkIGlmIGBhdXRvUmVmcmVzaFF1ZXJpZXNPbldpbmRvd0ZvY3VzYCBpcyBlbmFibGVkIG9uIHRoZSBxdWVyeSBjbGllbnQuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHdpbmRvd0ZvY3VzPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlTZXRQYXJhbXM8U3RvcmUsIFJlc3BvbnNlLCBBcmd1bWVudHMsIElkPiB7XG4gIC8qKlxuICAgKiBUaGUgcmVzcG9uc2UgZGF0YS5cbiAgICovXG4gIHJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAvKipcbiAgICogVGhlIGlkKHMpIHJldHVybmVkIGJ5IHRoZSBgaWRgIGZ1bmN0aW9uLlxuICAgKi9cbiAgaWQ6IElkO1xuXG4gIC8qKlxuICAgKiBUaGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgcXVlcnkuXG4gICAqL1xuICBhcmdzOiBBcmd1bWVudHM7XG5cbiAgLyoqXG4gICAqIFRoZSBlbnRpdHkgc3RvcmUuXG4gICAqL1xuICBzdG9yZTogU3RvcmU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5R2V0UGFyYW1zPFN0b3JlLCBSZXNwb25zZSwgQXJndW1lbnRzLCBJZD4ge1xuICAvKipcbiAgICogVGhlIHJlc3BvbnNlIGRhdGEuXG4gICAqL1xuICByZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgLyoqXG4gICAqIFRoZSBpZChzKSByZXR1cm5lZCBieSB0aGUgYGlkYCBmdW5jdGlvbi5cbiAgICovXG4gIGlkOiBJZDtcblxuICAvKipcbiAgICogVGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIHF1ZXJ5LlxuICAgKi9cbiAgYXJnczogQXJndW1lbnRzO1xuXG4gIC8qKlxuICAgKiBUaGUgZW50aXR5IHN0b3JlLlxuICAgKi9cbiAgc3RvcmU6IFN0b3JlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eUlkUGFyYW1zPFJlc3BvbnNlLCBBcmd1bWVudHM+IHtcbiAgLyoqXG4gICAqIFRoZSByZXNwb25zZSBkYXRhLlxuICAgKi9cbiAgcmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gIC8qKlxuICAgKiBUaGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgcXVlcnkuXG4gICAqL1xuICBhcmdzOiBBcmd1bWVudHM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlFbnRpdHlDb25maWc8U3RvcmUsIERhdGEsIFJlc3BvbnNlLCBBcmd1bWVudHMsIElkPiB7XG4gIC8qKlxuICAgKiBUaGUgZW50aXR5IHN0b3JlIHRvIHVzZSBmb3IgdGhlIHF1ZXJ5LlxuICAgKi9cbiAgc3RvcmU6IFN0b3JlO1xuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgaWQgb2YgdGhlIGVudGl0eS4gQ2FuIGFsc28gcmV0dXJuIGFuIGFycmF5IG9mIGlkcy5cbiAgICovXG4gIGlkOiAoZGF0YTogRW50aXR5SWRQYXJhbXM8UmVzcG9uc2UsIEFyZ3VtZW50cz4pID0+IElkO1xuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgcmVzcG9uc2UgZGF0YSAoY2FuIGJlIGEgc3Vic2V0IG9mIHRoZSByZXNwb25zZSkuXG4gICAqL1xuICBnZXQ/OiAoZGF0YTogRW50aXR5R2V0UGFyYW1zPFN0b3JlLCBSZXNwb25zZSwgQXJndW1lbnRzLCBJZD4pID0+IE9ic2VydmFibGU8RGF0YT47XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdG8gdXBkYXRlIHRoZSBlbnRpdHkgc3RvcmUgZXZlcnkgdGltZSBhIG5ldyByZXNwb25zZSBpcyByZWNlaXZlZC5cbiAgICovXG4gIHNldD86IChkYXRhOiBFbnRpdHlTZXRQYXJhbXM8U3RvcmUsIFJlc3BvbnNlLCBBcmd1bWVudHMsIElkPikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IHR5cGUgUXVlcnlDb25maWdCYXNlPFxuICBSZXNwb25zZSxcbiAgQXJndW1lbnRzIGV4dGVuZHMgQmFzZUFyZ3VtZW50cyB8IHVuZGVmaW5lZCxcbiAgU3RvcmUgZXh0ZW5kcyBFbnRpdHlTdG9yZTx1bmtub3duPixcbiAgRGF0YSxcbiAgSWQsXG4+ID0ge1xuICAvKipcbiAgICogVGhlIGh0dHAgbWV0aG9kIHRvIHVzZSBmb3IgdGhlIHF1ZXJ5LlxuICAgKi9cbiAgbWV0aG9kOiBNZXRob2Q7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgdGhlIGF1dGggcHJvdmlkZXIgc2hvdWxkIGJlIHVzZWQgZm9yIHRoaXMgcXVlcnkuXG4gICAqIFRoZSBxdWVyeSAqKndpbGwgdGhyb3cqKiBpZiB0aGUgcXVlcnkgY2xpZW50J3MgYXV0aCBwcm92aWRlciBpcyB1bnNldC5cbiAgICovXG4gIHNlY3VyZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgdGhlIHF1ZXJ5IHNob3VsZCBlbWl0IHByb2dyZXNzIGV2ZW50cy5cbiAgICovXG4gIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB0aGUgcXVlcnkncyByZXNwb25zZSB0eXBlLlxuICAgKiBAZGVmYXVsdCAnanNvbidcbiAgICovXG4gIHJlc3BvbnNlVHlwZT86ICdhcnJheWJ1ZmZlcicgfCAnYmxvYicgfCAnanNvbicgfCAndGV4dCc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyByZXF1ZXN0IHNob3VsZCBiZSBzZW50IHdpdGggb3V0Z29pbmcgY3JlZGVudGlhbHMgKGNvb2tpZXMpLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgaGFuZGxpbmcgYXV0byByZWZyZXNoIHRyaWdnZXJzLlxuICAgKlxuICAgKiAqKk5vdGU6KiogVGhpcyBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgcXVlcmllcyB0aGF0IGNhbiBiZSByZWZyZXNoZWQuIChgR0VUYCwgYEhFQURgLCBgT1BUSU9OU2AsIGBHUUxfUVVFUllgKVxuICAgKi9cbiAgYXV0b1JlZnJlc2hPbj86IFF1ZXJ5QXV0b1JlZnJlc2hDb25maWc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYXV0b21hdGljYWxseSBzdG9wIHBvbGxpbmcgZm9yIHRoaXMgcXVlcnkgd2hlbiB0aGUgd2luZG93IGxvc2VzIGZvY3VzLlxuICAgKiBQb2xsaW5nIHdpbGwgcmVzdW1lIHdoZW4gdGhlIHdpbmRvdyByZWdhaW5zIGZvY3VzLlxuICAgKlxuICAgKiBUaGlzIGNhbiBvbmx5IGJlIGRpc2FibGVkIGlmIGBlbmFibGVTbWFydFBvbGxpbmdgIGlzIGVuYWJsZWQgb24gdGhlIHF1ZXJ5IGNsaWVudC5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgZW5hYmxlU21hcnRQb2xsaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHF1ZXJ5J3MgdHlwZSBpbmZvcm1hdGlvbi5cbiAgICovXG4gIHR5cGVzPzoge1xuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBzdWNjZXNzZnVsIHJlc3BvbnNlLlxuICAgICAqL1xuICAgIHJlc3BvbnNlPzogUmVzcG9uc2U7XG5cbiAgICAvKipcbiAgICAgKiBBcmd1bWVudHMgZm9yIGV4ZWN1dGluZyB0aGUgcXVlcnkuXG4gICAgICpcbiAgICAgKiAtIGBwYXRoUGFyYW1zYDogVGhlIHBhdGggcGFyYW1ldGVycyBmb3IgdGhlIHF1ZXJ5LiAoaW4gZnJvbnQgb2YgdGhlID8gaW4gdGhlIHVybClcbiAgICAgKiAtIGBxdWVyeVBhcmFtc2A6IFRoZSBxdWVyeSBwYXJhbWV0ZXJzIGZvciB0aGUgcXVlcnkuIChhZnRlciB0aGUgPyBpbiB0aGUgdXJsKVxuICAgICAqIC0gYGJvZHlgOiBUaGUgYm9keSBmb3IgdGhlIHF1ZXJ5LiBVbmF2YWlsYWJsZSBmb3IgR0VULCBIRUFEIGFuZCBPUFRJT05TIHJlcXVlc3RzLlxuICAgICAqIC0gYGhlYWRlcnNgOiBUaGUgaGVhZGVycyBmb3IgdGhlIHF1ZXJ5LlxuICAgICAqIC0gYHZhcmlhYmxlc2A6IFRoZSB2YXJpYWJsZXMgZm9yIHRoZSBxdWVyeS4gKGdyYXBocWwgb25seSlcbiAgICAgKi9cbiAgICBhcmdzPzogQXJndW1lbnRzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBPYmplY3QgY29udGFpbmluZyB0aGUgcXVlcnkncyBlbnRpdHkgc3RvcmUgaW5mb3JtYXRpb24uXG4gICAqL1xuICBlbnRpdHk/OiBRdWVyeUVudGl0eUNvbmZpZzxTdG9yZSwgRGF0YSwgUmVzcG9uc2UsIEFyZ3VtZW50cywgSWQ+O1xufTtcblxuZXhwb3J0IHR5cGUgUmVzdFF1ZXJ5Q29uZmlnPFxuICBSb3V0ZSBleHRlbmRzIFJvdXRlVHlwZTxBcmd1bWVudHM+LFxuICBSZXNwb25zZSxcbiAgQXJndW1lbnRzIGV4dGVuZHMgQmFzZUFyZ3VtZW50cyB8IHVuZGVmaW5lZCxcbiAgU3RvcmUgZXh0ZW5kcyBFbnRpdHlTdG9yZTx1bmtub3duPixcbiAgRGF0YSxcbiAgSWQsXG4+ID0gUXVlcnlDb25maWdCYXNlPFJlc3BvbnNlLCBBcmd1bWVudHMsIFN0b3JlLCBEYXRhLCBJZD4gJiB7XG4gIC8qKlxuICAgKiBUaGUgYXBpIHJvdXRlIHRvIHVzZSBmb3IgdGhlIHF1ZXJ5LlxuICAgKi9cbiAgcm91dGU6IFJvdXRlO1xufTtcblxuZXhwb3J0IHR5cGUgR3FsVHJhbnNmZXJPcHRpb24gPSAnR0VUJyB8ICdQT1NUJztcblxuZXhwb3J0IGludGVyZmFjZSBHcWxRdWVyeUNvbmZpZzxcbiAgUm91dGUgZXh0ZW5kcyBSb3V0ZVR5cGU8QXJndW1lbnRzPiB8IHVuZGVmaW5lZCxcbiAgUmVzcG9uc2UsXG4gIEFyZ3VtZW50cyBleHRlbmRzIEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQsXG4gIFN0b3JlIGV4dGVuZHMgRW50aXR5U3RvcmU8dW5rbm93bj4sXG4gIERhdGEsXG4gIElkLFxuPiBleHRlbmRzIFF1ZXJ5Q29uZmlnQmFzZTxSZXNwb25zZSwgQXJndW1lbnRzLCBTdG9yZSwgRGF0YSwgSWQ+IHtcbiAgLyoqXG4gICAqIFRoZSBncmFwaHFsIHF1ZXJ5IHRvIHVzZSBmb3IgdGhlIHF1ZXJ5LlxuICAgKi9cbiAgcXVlcnk6IHN0cmluZztcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiB0aGUgcXVlcnkgc2hvdWxkIGJlIHNlbnQgdmlhIEdFVCBvciBQT1NULlxuICAgKiAtIGBHRVRgOiBUaGUgcXVlcnkgd2lsbCBiZSBzZW50IHZpYSBxdWVyeSBwYXJhbWV0ZXJzLlxuICAgKiAtIGBQT1NUYDogVGhlIHF1ZXJ5IHdpbGwgYmUgc2VudCB2aWEgdGhlIGJvZHkuXG4gICAqIEBkZWZhdWx0ICdQT1NUJ1xuICAgKi9cbiAgdHJhbnNmZXJWaWE/OiBHcWxUcmFuc2Zlck9wdGlvbjtcblxuICAvKipcbiAgICogU3Vicm91dGUgdG8gdXNlIGZvciB0aGUgcXVlcnkuXG4gICAqL1xuICByb3V0ZT86IFJvdXRlO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IHR5cGUgQW55UmVzdFF1ZXJ5Q29uZmlnID0gUmVzdFF1ZXJ5Q29uZmlnPGFueSwgYW55LCBhbnksIGFueSwgYW55LCBhbnk+O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCB0eXBlIEFueUdxbFF1ZXJ5Q29uZmlnID0gR3FsUXVlcnlDb25maWc8YW55LCBhbnksIGFueSwgYW55LCBhbnksIGFueT47XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5Q29uZmlnV2l0aG91dE1ldGhvZDxcbiAgUm91dGUgZXh0ZW5kcyBSb3V0ZVR5cGU8QXJndW1lbnRzPixcbiAgUmVzcG9uc2UsXG4gIEFyZ3VtZW50cyBleHRlbmRzIEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQsXG4gIFN0b3JlIGV4dGVuZHMgRW50aXR5U3RvcmU8dW5rbm93bj4sXG4gIERhdGEsXG4gIElkLFxuPiA9IE9taXQ8UmVzdFF1ZXJ5Q29uZmlnPFJvdXRlLCBSZXNwb25zZSwgQXJndW1lbnRzLCBTdG9yZSwgRGF0YSwgSWQ+LCAnbWV0aG9kJz47XG5cbmV4cG9ydCB0eXBlIEdxbFF1ZXJ5Q29uZmlnV2l0aG91dE1ldGhvZDxcbiAgUm91dGUgZXh0ZW5kcyBSb3V0ZVR5cGU8QXJndW1lbnRzPixcbiAgUmVzcG9uc2UsXG4gIEFyZ3VtZW50cyBleHRlbmRzIEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQsXG4gIFN0b3JlIGV4dGVuZHMgRW50aXR5U3RvcmU8dW5rbm93bj4sXG4gIERhdGEsXG4gIElkLFxuPiA9IE9taXQ8R3FsUXVlcnlDb25maWc8Um91dGUsIFJlc3BvbnNlLCBBcmd1bWVudHMsIFN0b3JlLCBEYXRhLCBJZD4sICdtZXRob2QnPjtcblxuZXhwb3J0IHR5cGUgQmFzZUFyZ3VtZW50cyA9IFdpdGhIZWFkZXJzICZcbiAgV2l0aFZhcmlhYmxlcyAmXG4gIFdpdGhCb2R5ICZcbiAgV2l0aFF1ZXJ5UGFyYW1zICZcbiAgV2l0aFBhdGhQYXJhbXMgJlxuICBXaXRoTW9jazx1bmtub3duPjtcblxuZXhwb3J0IGludGVyZmFjZSBXaXRoSGVhZGVycyB7XG4gIC8qKlxuICAgKiBUaGUgaGVhZGVycyB0byBzZW5kIHdpdGggdGhlIHF1ZXJ5LlxuICAgKi9cbiAgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlNb2NrQ29uZmlnPE1vY2tSZXNwb25zZT4ge1xuICAvKipcbiAgICogVGhlIG1vY2sgcmVzcG9uc2UgdG8gdXNlIGZvciB0aGUgcXVlcnkuXG4gICAqL1xuICByZXNwb25zZT86IE1vY2tSZXNwb25zZTtcblxuICAvKipcbiAgICogVGhlIG1vY2sgZXJyb3IgdG8gdXNlIGZvciB0aGUgcXVlcnkuXG4gICAqL1xuICBlcnJvcj86IFJlcXVlc3RFcnJvcjtcblxuICAvKipcbiAgICogVGhlIGRlbGF5IGluIG1pbGxpc2Vjb25kcyB0byB3YWl0IGJlZm9yZSByZXNvbHZpbmcgdGhlIG1vY2suXG4gICAqIElmIHByb2dyZXNzIGlzIGVuYWJsZWQsIHRoZSBkZWxheSB3aWxsIGJlIHVzZWQgZm9yIGVhY2ggcHJvZ3Jlc3MgZXZlbnQuXG4gICAqIEBkZWZhdWx0IDIwMFxuICAgKi9cbiAgZGVsYXk/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVwb3J0IHByb2dyZXNzIGZvciB0aGUgbW9jay5cbiAgICogRm9yIHRlc3RpbmcgZS5nLiBmaWxlIHVwbG9hZHMuXG4gICAqL1xuICBwcm9ncmVzcz86IHtcbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIHByb2dyZXNzIGV2ZW50cyB0byByZXBvcnQuXG4gICAgICogQGRlZmF1bHQgNVxuICAgICAqL1xuICAgIGV2ZW50Q291bnQ/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiBwcm9ncmVzcyBldmVudCB0byByZXBvcnQuXG4gICAgICogQGRlZmF1bHQgJ3VwbG9hZCdcbiAgICAgKi9cbiAgICBldmVudFR5cGU/OiAnZG93bmxvYWQnIHwgJ3VwbG9hZCc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdG90YWwgc2l6ZSBvZiB0aGUgZmlsZSB0byByZXBvcnQgcHJvZ3Jlc3MgZm9yIGluIGJ5dGVzLlxuICAgICAqIEBkZWZhdWx0IDFfMDAwXzAwMCAoMU1CKVxuICAgICAqL1xuICAgIGZpbGVTaXplPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogSWYgdHJ1ZSwgdGhlIHRvdGFsIHNpemUgb2YgdGhlIGZpbGUgd2lsbCBiZSBvbWl0dGVkIGZyb20gdGhlIHByb2dyZXNzIGV2ZW50LlxuICAgICAqIFVzZWZ1bCBmb3IgdGVzdGluZyBlLmcuIGRvd25sb2FkIHByb2dyZXNzIHdoZW4gdGhlIHNlcnZlciBkb2VzIG5vdCBwcm92aWRlIGEgdG90YWwgc2l6ZS5cbiAgICAgKi9cbiAgICBvbWl0VG90YWw/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogSWYgdHJ1ZSwgdGhlIHBhcnRpYWwgdGV4dCB3aWxsIGJlIG9taXR0ZWQgZnJvbSB0aGUgcHJvZ3Jlc3MgZXZlbnQuXG4gICAgICogVXNlZnVsIGZvciB0ZXN0aW5nIGUuZy4gZG93bmxvYWQgcHJvZ3Jlc3Mgd2hlbiB0aGUgc2VydmVyIGRvZXMgbm90IHByb3ZpZGUgYSBwYXJ0aWFsIHRleHQuXG4gICAgICovXG4gICAgb21pdFBhcnRpYWxUZXh0PzogYm9vbGVhbjtcbiAgfTtcblxuICAvKipcbiAgICogVGhpcyB3aWxsIG1vY2sgdGhlIHJlcXVlc3QgZmFpbGluZyBhbmQgZ2V0dGluZyByZXRyaWVkIDMgdGltZXMuIEFmdGVyLCB0aGUgcmVxdWVzdCB3aWxsIHN1Y2NlZWQgd2l0aCB0aGUgcHJvdmlkZWQgcmVzcG9uc2UuXG4gICAqIENhbiBub3QgYmUgdXNlZCB3aXRoIGBwcm9ncmVzc2AgZW5hYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJldHJ5SW50b1Jlc3BvbnNlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXaXRoTW9jazxNb2NrUmVzcG9uc2U+IHtcbiAgbW9jaz86IFF1ZXJ5TW9ja0NvbmZpZzxNb2NrUmVzcG9uc2U+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5Q29uZmlnIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBxdWVyeSBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGludGVybmFsIHF1ZXJ5IHN0b3JlLlxuICAgKlxuICAgKiBHZW5lcmFsbHkgdGhpcyBzaG91bGQgYmUgbGVmdCBvbiBgZmFsc2VgIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBza2lwUXVlcnlTdG9yZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBjYWNoZSBrZXkgdG8gdXNlIGZvciB0aGlzIHF1ZXJ5LlxuICAgKiBVc2VmdWwgZm9yIHF1ZXJpZXMgdGhhdCBhcmUgZXF1YWwgYnV0IHNob3VsZCBiZSBzdG9yZWQgc2VwYXJhdGVseS5cbiAgICogV2lsbCBiZSBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBpZiBub3QgcHJvdmlkZWQuXG4gICAqXG4gICAqIEdlbmVyYWxseSB0aGlzIHNob3VsZCBiZSBsZWZ0IG9uIGB1bmRlZmluZWRgIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuXG4gICAqL1xuICBxdWVyeVN0b3JlQ2FjaGVLZXk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2l0aENvbmZpZyB7XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgcXVlcnkuXG4gICAqL1xuICBjb25maWc/OiBRdWVyeUNvbmZpZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXaXRoVmFyaWFibGVzIHtcbiAgLyoqXG4gICAqIFRoZSB2YXJpYWJsZXMgZm9yIHRoZSBxdWVyeS4gKGdyYXBocWwgb25seSlcbiAgICovXG4gIHZhcmlhYmxlcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdpdGhCb2R5IHtcbiAgLyoqXG4gICAqIFRoZSBib2R5IGZvciB0aGUgcXVlcnkuIFVuYXZhaWxhYmxlIGZvciBHRVQsIEhFQUQgYW5kIE9QVElPTlMgcmVxdWVzdHMuXG4gICAqL1xuICBib2R5PzogdW5rbm93bjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXaXRoUXVlcnlQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgZm9yIHRoZSBxdWVyeS4gKGFmdGVyIHRoZSA/IGluIHRoZSB1cmwpXG4gICAqL1xuICBxdWVyeVBhcmFtcz86IFF1ZXJ5UGFyYW1zO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdpdGhQYXRoUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBwYXRoIHBhcmFtZXRlcnMgZm9yIHRoZSBxdWVyeS4gKGluIGZyb250IG9mIHRoZSA/IGluIHRoZSB1cmwpXG4gICAqL1xuICBwYXRoUGFyYW1zPzogUGF0aFBhcmFtcztcbn1cblxuZXhwb3J0IHR5cGUgUXVlcnlUcmlnZ2VyID0gJ3Byb2dyYW0nIHwgJ3BvbGwnIHwgJ2F1dG8nO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlc1xuZXhwb3J0IHR5cGUgRW1wdHlPYmplY3QgPSB7fTtcblxuZXhwb3J0IGludGVyZmFjZSBFeGVjdXRlUXVlcnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc2tpcCB0aGUgY2FjaGUgZm9yIHRoaXMgcXVlcnkuIFRoaXMgd2lsbCBmb3JjZSB0aGUgcXVlcnkgdG8gYmUgZXhlY3V0ZWQuIEl0IG1pZ2h0IHN0aWxsIGJlIGNhdWdodCBieSB0aGUgbmF0aXZlIGJyb3dzZXIgY2FjaGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBza2lwQ2FjaGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGNhbmNlbCB0aGUgcHJldmlvdXMgcmVxdWVzdCBpZiBpdCBpcyBzdGlsbCBsb2FkaW5nLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgY2FuY2VsUHJldmlvdXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgdHJpZ2dlciB0eXBlIGZvciB0aGlzIHF1ZXJ5LlxuICAgKiAtIGBwcm9ncmFtYDogVGhlIHF1ZXJ5IHdhcyB0cmlnZ2VyZWQgYnkgdGhlIHVzZXIuXG4gICAqIC0gYHBvbGxgOiBUaGUgcXVlcnkgd2FzIHRyaWdnZXJlZCBieSBwb2xsaW5nLlxuICAgKiAtIGBhdXRvYDogVGhlIHF1ZXJ5IHdhcyB0cmlnZ2VyZWQgYnkgYW4gYXV0byByZWZyZXNoIGV2ZW50LlxuICAgKiBAZGVmYXVsdCAncHJvZ3JhbSdcbiAgICogQGludGVybmFsXG4gICAqL1xuICBfdHJpZ2dlcmVkVmlhPzogUXVlcnlUcmlnZ2VyO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgaXMgYSByZXRyeSBvZiBhbiB1bmF1dGhvcml6ZWQgcmVxdWVzdC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBfaXNVbmF1dGhvcml6ZWRSZXRyeT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIFJvdXRlVHlwZTxBcmd1bWVudHMgZXh0ZW5kcyBCYXNlQXJndW1lbnRzIHwgdW5kZWZpbmVkPiA9IEFyZ3VtZW50cyBleHRlbmRzIHtcbiAgcGF0aFBhcmFtczogaW5mZXIgUGF0aFBhcmFtcztcbn1cbiAgPyAocDogUGF0aFBhcmFtcykgPT4gUm91dGVTdHJpbmdcbiAgOiBSb3V0ZVN0cmluZztcblxuZXhwb3J0IHR5cGUgUm91dGVTdHJpbmcgPSBgLyR7c3RyaW5nfWA7XG5cbmV4cG9ydCB0eXBlIEFueVJvdXRlID0gKChwOiBQYXRoUGFyYW1zKSA9PiBzdHJpbmcpIHwgUm91dGVTdHJpbmc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9sbENvbmZpZyB7XG4gIC8qKlxuICAgKiBUaGUgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzIHRvIHBvbGwgdGhlIHF1ZXJ5LlxuICAgKi9cbiAgaW50ZXJ2YWw6IG51bWJlcjtcblxuICAvKipcbiAgICogQSBvYnNlcnZhYmxlIHRoYXQgd2lsbCBzdG9wIHRoZSBwb2xsaW5nIHdoZW4gaXQgZW1pdHMuXG4gICAqL1xuICB0YWtlVW50aWw6IE9ic2VydmFibGU8dW5rbm93bj47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gdHJpZ2dlciB0aGUgcXVlcnkgaW1tZWRpYXRlbHkgYWZ0ZXIgcG9sbGluZyBzdGFydHMuXG4gICAqL1xuICB0cmlnZ2VySW1tZWRpYXRlbHk/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgZW51bSBRdWVyeVN0YXRlVHlwZSB7XG4gIFByZXBhcmVkID0gJ1BSRVBBUkVEJyxcbiAgTG9hZGluZyA9ICdMT0FESU5HJyxcbiAgU3VjY2VzcyA9ICdTVUNDRVNTJyxcbiAgRmFpbHVyZSA9ICdGQUlMVVJFJyxcbiAgQ2FuY2VsbGVkID0gJ0NBTkNFTExFRCcsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJlcGFyZWQge1xuICB0eXBlOiBRdWVyeVN0YXRlVHlwZS5QcmVwYXJlZDtcbiAgbWV0YTogUXVlcnlTdGF0ZU1ldGE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VjY2VzczxSZXNwb25zZSA9IHVua25vd24+IHtcbiAgdHlwZTogUXVlcnlTdGF0ZVR5cGUuU3VjY2VzcztcbiAgcmVzcG9uc2U6IFJlc3BvbnNlO1xuICBtZXRhOiBRdWVyeVN0YXRlU3VjY2Vzc01ldGE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmFpbHVyZSB7XG4gIHR5cGU6IFF1ZXJ5U3RhdGVUeXBlLkZhaWx1cmU7XG4gIGVycm9yOiBSZXF1ZXN0RXJyb3I7XG4gIG1ldGE6IFF1ZXJ5U3RhdGVNZXRhO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvYWRpbmcge1xuICB0eXBlOiBRdWVyeVN0YXRlVHlwZS5Mb2FkaW5nO1xuICBtZXRhOiBRdWVyeVN0YXRlTWV0YTtcbiAgcGFydGlhbFRleHQ/OiBzdHJpbmc7XG4gIHByb2dyZXNzPzogUmVxdWVzdFByb2dyZXNzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhbmNlbGxlZCB7XG4gIHR5cGU6IFF1ZXJ5U3RhdGVUeXBlLkNhbmNlbGxlZDtcbiAgbWV0YTogUXVlcnlTdGF0ZU1ldGE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlTdGF0ZU1ldGEge1xuICBpZDogbnVtYmVyO1xuICB0cmlnZ2VyZWRWaWE6IFF1ZXJ5VHJpZ2dlcjtcbiAgaXNXYWl0aW5nRm9yUmV0cnk/OiBib29sZWFuO1xuICByZXRyeU51bWJlcj86IG51bWJlcjtcbiAgcmV0cnlEZWxheT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBRdWVyeVN0YXRlU3VjY2Vzc01ldGEgZXh0ZW5kcyBRdWVyeVN0YXRlTWV0YSB7XG4gIGV4cGlyZXNBdD86IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgUXVlcnlTdGF0ZTxSZXNwb25zZSA9IHVua25vd24+ID0gTG9hZGluZyB8IFN1Y2Nlc3M8UmVzcG9uc2U+IHwgRmFpbHVyZSB8IENhbmNlbGxlZCB8IFByZXBhcmVkO1xuXG5leHBvcnQgdHlwZSBRdWVyeVN0YXRlUmVzcG9uc2VPZjxUIGV4dGVuZHMgUXVlcnlTdGF0ZSA9IFF1ZXJ5U3RhdGU+ID1cbiAgVCBleHRlbmRzIFN1Y2Nlc3M8aW5mZXIgUmVzcG9uc2U+ID8gUmVzcG9uc2UgOiBuZXZlcjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCB0eXBlIEFueVF1ZXJ5ID0gUXVlcnk8YW55LCBhbnksIGFueSwgYW55LCBhbnksIGFueT47XG5cbmV4cG9ydCB0eXBlIEFueVF1ZXJ5Q3JlYXRvckNvbGxlY3Rpb24gPSB7IFtuYW1lOiBzdHJpbmddOiBBbnlRdWVyeUNyZWF0b3IgfTtcblxuZXhwb3J0IHR5cGUgUXVlcnlDb2xsZWN0aW9uT2Y8VCBleHRlbmRzIHsgW25hbWU6IHN0cmluZ106IEFueVF1ZXJ5Q3JlYXRvciB9PiA9IHtcbiAgW0sgaW4ga2V5b2YgVF06IHsgdHlwZTogSzsgcXVlcnk6IENvbnN0cnVjdFF1ZXJ5PFRbS10+IH07XG59W2tleW9mIFRdO1xuXG5leHBvcnQgdHlwZSBBbnlRdWVyeUNvbGxlY3Rpb24gPSBRdWVyeUNvbGxlY3Rpb25PZjxBbnlRdWVyeUNyZWF0b3JDb2xsZWN0aW9uPjtcblxuZXhwb3J0IHR5cGUgUXVlcnlPZjxUIGV4dGVuZHMgQW55UXVlcnlDb2xsZWN0aW9uIHwgQW55UXVlcnkgfCBudWxsPiA9IFQgZXh0ZW5kcyBBbnlRdWVyeVxuICA/IFRcbiAgOiBUIGV4dGVuZHMgQW55UXVlcnlDb2xsZWN0aW9uXG4gICAgPyBUWydxdWVyeSddXG4gICAgOiBuZXZlcjtcblxuZXhwb3J0IHR5cGUgQW55UXVlcnlDb2xsZWN0aW9uUmVzcG9uc2U8VCBleHRlbmRzIEFueVF1ZXJ5Q29sbGVjdGlvbj4gPSBRdWVyeVJlc3BvbnNlT2Y8VFsncXVlcnknXT47XG5leHBvcnQgdHlwZSBBbnlRdWVyeUNvbGxlY3Rpb25EYXRhPFQgZXh0ZW5kcyBBbnlRdWVyeUNvbGxlY3Rpb24+ID0gUXVlcnlEYXRhT2Y8VFsncXVlcnknXT47XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5Q29sbGVjdGlvbktleXNPZjxUIGV4dGVuZHMgQW55UXVlcnlDb2xsZWN0aW9uIHwgQW55UXVlcnkgfCBudWxsPiA9IFQgZXh0ZW5kcyBBbnlRdWVyeUNvbGxlY3Rpb25cbiAgPyBUWyd0eXBlJ11cbiAgOiBuZXZlcjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBpbnRlcmZhY2UgUmVzZXRQYWdlT25FcnJvck9wZXJhdG9yQ29uZmlnPEogZXh0ZW5kcyBRdWVyeUZvcm08YW55Pj4ge1xuICAvKipcbiAgICogVGhlIHF1ZXJ5IGZvcm0gdG8gcmVzZXQgdGhlIHBhZ2Ugb2YuXG4gICAqL1xuICBxdWVyeUZvcm06IEo7XG5cbiAgLyoqXG4gICAqIFRoZSBrZXkgb2YgdGhlIHBhZ2UgY29udHJvbCBpbiB0aGUgcXVlcnkgZm9ybS5cbiAgICogQGRlZmF1bHQgJ3BhZ2UnXG4gICAqL1xuICBwYWdlQ29udHJvbEtleT86IHN0cmluZztcbn1cbiJdfQ==
@@ -53,4 +53,4 @@ export class QueryCreator {
53
53
  this.behaviorSubject = (initialValue) => new BehaviorSubject(initialValue ?? null);
54
54
  }
55
55
  }
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktY3JlYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9xdWVyeS1jcmVhdG9yL3F1ZXJ5LWNyZWF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2QyxPQUFPLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixFQUFFLGdCQUFnQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzVFLE9BQU8sRUFBZSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBV2xGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDeEMsT0FBTyxFQUF3Qix5QkFBeUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUczRSxNQUFNLE9BQU8sWUFBWTtJQVF2QixZQUNVLFlBRXVELEVBQ3ZELE9BQW9CLEVBQ3BCLE1BQWtCO1FBSmxCLGlCQUFZLEdBQVosWUFBWSxDQUUyQztRQUN2RCxZQUFPLEdBQVAsT0FBTyxDQUFhO1FBQ3BCLFdBQU0sR0FBTixNQUFNLENBQVk7UUFHNUIsNkRBQTZEO1FBQzdELGFBQWE7UUFDYixZQUFPLEdBQWdFLENBQ3JFLElBQWdFLEVBQ2hFLEVBQUU7WUFDRixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUM7Z0JBQ3ZCLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTO2dCQUNuQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLO2dCQUM5QixVQUFVLEVBQUUsSUFBSSxFQUFFLFVBQVU7Z0JBQzVCLFdBQVcsRUFBRSx1QkFBdUIsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO2dCQUMvRixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsV0FBVzthQUMzRCxDQUFVLENBQUM7WUFFWixNQUFNLFFBQVEsR0FDWixDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsa0JBQWtCLElBQUksRUFBRSxDQUFDO2dCQUN4QyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFNUYsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsQ0FBQztnQkFDaEYsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQXFELFFBQVEsQ0FBQyxDQUFDO2dCQUVwRyxJQUFJLGFBQWEsRUFBRSxDQUFDO29CQUNsQixPQUFPLGFBQWEsQ0FBQztnQkFDdkIsQ0FBQztZQUNILENBQUM7WUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FDckIsSUFBSSxDQUFDLE9BQU8sRUFDWixJQUFJLENBQUMsWUFBWSxFQUNqQixLQUFLLEVBQ0wsSUFBSSxJQUFLLEVBQWdCLEVBQ3pCLFFBQVEsQ0FDVCxDQUFDO1lBRUYsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsQ0FBQztnQkFDaEYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ25DLENBQUM7WUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRXpDLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxDQUFDO1FBRUYsa0JBQWEsR0FBRyxDQUFDLFlBQXFELEVBQUUsTUFBNkIsRUFBRSxFQUFFO1lBQ3ZHLHdCQUF3QixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUU3QyxNQUFNLE9BQU8sR0FBRyxJQUFJLGVBQWUsQ0FBeUMsWUFBWSxJQUFJLElBQUksQ0FBQyxDQUFDO1lBRWxHLHlCQUF5QixDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFFckUsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQyxDQUFDO1FBRUYsaUJBQVksR0FBRyxDQUFDLFlBQXFELEVBQUUsTUFBNkIsRUFBRSxFQUFFO1lBQ3RHLHdCQUF3QixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUU1QyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQXlDLFlBQVksSUFBSSxJQUFJLENBQUMsQ0FBQztZQUVyRix5QkFBeUIsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFFMUUsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQyxDQUFDO1FBRUY7O1dBRUc7UUFDSCxvQkFBZSxHQUFHLENBQUMsWUFBcUQsRUFBRSxFQUFFLENBQzFFLElBQUksZUFBZSxDQUF5QyxZQUFZLElBQUksSUFBSSxDQUFDLENBQUM7SUFwRWpGLENBQUM7Q0FxRUwiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBFbnRpdHlTdG9yZSB9IGZyb20gJy4uL2VudGl0eSc7XG5pbXBvcnQgeyBRdWVyeSwgY29tcHV0ZVF1ZXJ5UXVlcnlQYXJhbXMsIGlzR3FsUXVlcnlDb25maWcgfSBmcm9tICcuLi9xdWVyeSc7XG5pbXBvcnQgeyBRdWVyeUNsaWVudCwgYnVpbGRHcWxDYWNoZUtleSwgc2hvdWxkQ2FjaGVRdWVyeSB9IGZyb20gJy4uL3F1ZXJ5LWNsaWVudCc7XG5pbXBvcnQgeyBRdWVyeVN0b3JlIH0gZnJvbSAnLi4vcXVlcnktc3RvcmUnO1xuaW1wb3J0IHtcbiAgQmFzZUFyZ3VtZW50cyxcbiAgR3FsUXVlcnlDb25maWcsXG4gIFJlc3RRdWVyeUNvbmZpZyxcbiAgUm91dGVUeXBlLFxuICBXaXRoQ29uZmlnLFxuICBXaXRoSGVhZGVycyxcbiAgV2l0aE1vY2ssXG59IGZyb20gJy4uL3F1ZXJ5L3F1ZXJ5LnR5cGVzJztcbmltcG9ydCB7IGJ1aWxkUm91dGUgfSBmcm9tICcuLi9yZXF1ZXN0JztcbmltcG9ydCB7IFF1ZXJ5Q29udGFpbmVyQ29uZmlnLCBhZGRRdWVyeUNvbnRhaW5lckhhbmRsaW5nIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgUXVlcnlQcmVwYXJlRm4gfSBmcm9tICcuL3F1ZXJ5LWNyZWF0b3IudHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgUXVlcnlDcmVhdG9yPFxuICBBcmd1bWVudHMgZXh0ZW5kcyBCYXNlQXJndW1lbnRzIHwgdW5kZWZpbmVkLFxuICBSZXNwb25zZSxcbiAgUm91dGUgZXh0ZW5kcyBSb3V0ZVR5cGU8QXJndW1lbnRzPixcbiAgU3RvcmUgZXh0ZW5kcyBFbnRpdHlTdG9yZTx1bmtub3duPixcbiAgRGF0YSxcbiAgSWQsXG4+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfcXVlcnlDb25maWc6XG4gICAgICB8IFJlc3RRdWVyeUNvbmZpZzxSb3V0ZSwgUmVzcG9uc2UsIEFyZ3VtZW50cywgU3RvcmUsIERhdGEsIElkPlxuICAgICAgfCBHcWxRdWVyeUNvbmZpZzxSb3V0ZSwgUmVzcG9uc2UsIEFyZ3VtZW50cywgU3RvcmUsIERhdGEsIElkPixcbiAgICBwcml2YXRlIF9jbGllbnQ6IFF1ZXJ5Q2xpZW50LFxuICAgIHByaXZhdGUgX3N0b3JlOiBRdWVyeVN0b3JlLFxuICApIHt9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAvLyBAdHMtaWdub3JlXG4gIHByZXBhcmU6IFF1ZXJ5UHJlcGFyZUZuPEFyZ3VtZW50cywgUmVzcG9uc2UsIFJvdXRlLCBTdG9yZSwgRGF0YSwgSWQ+ID0gKFxuICAgIGFyZ3M/OiBBcmd1bWVudHMgJiBXaXRoSGVhZGVycyAmIFdpdGhDb25maWcgJiBXaXRoTW9jazxSZXNwb25zZT4sXG4gICkgPT4ge1xuICAgIGNvbnN0IHJvdXRlID0gYnVpbGRSb3V0ZSh7XG4gICAgICBiYXNlOiB0aGlzLl9jbGllbnQuY29uZmlnLmJhc2VSb3V0ZSxcbiAgICAgIHJvdXRlOiB0aGlzLl9xdWVyeUNvbmZpZy5yb3V0ZSxcbiAgICAgIHBhdGhQYXJhbXM6IGFyZ3M/LnBhdGhQYXJhbXMsXG4gICAgICBxdWVyeVBhcmFtczogY29tcHV0ZVF1ZXJ5UXVlcnlQYXJhbXMoeyBjb25maWc6IHRoaXMuX3F1ZXJ5Q29uZmlnLCBjbGllbnQ6IHRoaXMuX2NsaWVudCwgYXJncyB9KSxcbiAgICAgIHF1ZXJ5UGFyYW1Db25maWc6IHRoaXMuX2NsaWVudC5jb25maWcucmVxdWVzdD8ucXVlcnlQYXJhbXMsXG4gICAgfSkgYXMgUm91dGU7XG5cbiAgICBjb25zdCBjYWNoZUtleSA9XG4gICAgICAoYXJncz8uY29uZmlnPy5xdWVyeVN0b3JlQ2FjaGVLZXkgPz8gJycpICtcbiAgICAgIChpc0dxbFF1ZXJ5Q29uZmlnKHRoaXMuX3F1ZXJ5Q29uZmlnKSA/IGJ1aWxkR3FsQ2FjaGVLZXkodGhpcy5fcXVlcnlDb25maWcsIGFyZ3MpIDogcm91dGUpO1xuXG4gICAgaWYgKHNob3VsZENhY2hlUXVlcnkodGhpcy5fcXVlcnlDb25maWcubWV0aG9kKSAmJiAhYXJncz8uY29uZmlnPy5za2lwUXVlcnlTdG9yZSkge1xuICAgICAgY29uc3QgZXhpc3RpbmdRdWVyeSA9IHRoaXMuX3N0b3JlLmdldDxRdWVyeTxSZXNwb25zZSwgQXJndW1lbnRzLCBSb3V0ZSwgU3RvcmUsIERhdGEsIElkPj4oY2FjaGVLZXkpO1xuXG4gICAgICBpZiAoZXhpc3RpbmdRdWVyeSkge1xuICAgICAgICByZXR1cm4gZXhpc3RpbmdRdWVyeTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBxdWVyeSA9IG5ldyBRdWVyeTxSZXNwb25zZSwgQXJndW1lbnRzLCBSb3V0ZSwgU3RvcmUsIERhdGEsIElkPihcbiAgICAgIHRoaXMuX2NsaWVudCxcbiAgICAgIHRoaXMuX3F1ZXJ5Q29uZmlnLFxuICAgICAgcm91dGUsXG4gICAgICBhcmdzID8/ICh7fSBhcyBBcmd1bWVudHMpLFxuICAgICAgY2FjaGVLZXksXG4gICAgKTtcblxuICAgIGlmIChzaG91bGRDYWNoZVF1ZXJ5KHRoaXMuX3F1ZXJ5Q29uZmlnLm1ldGhvZCkgJiYgIWFyZ3M/LmNvbmZpZz8uc2tpcFF1ZXJ5U3RvcmUpIHtcbiAgICAgIHRoaXMuX3N0b3JlLmFkZChjYWNoZUtleSwgcXVlcnkpO1xuICAgIH1cblxuICAgIHRoaXMuX3N0b3JlLl9kaXNwYXRjaFF1ZXJ5Q3JlYXRlZChxdWVyeSk7XG5cbiAgICByZXR1cm4gcXVlcnk7XG4gIH07XG5cbiAgY3JlYXRlU3ViamVjdCA9IChpbml0aWFsVmFsdWU/OiBSZXR1cm5UeXBlPHR5cGVvZiB0aGlzLnByZXBhcmU+IHwgbnVsbCwgY29uZmlnPzogUXVlcnlDb250YWluZXJDb25maWcpID0+IHtcbiAgICBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQodGhpcy5jcmVhdGVTdWJqZWN0KTtcblxuICAgIGNvbnN0IHN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFJldHVyblR5cGU8dHlwZW9mIHRoaXMucHJlcGFyZT4gfCBudWxsPihpbml0aWFsVmFsdWUgPz8gbnVsbCk7XG5cbiAgICBhZGRRdWVyeUNvbnRhaW5lckhhbmRsaW5nKHN1YmplY3QsICgpID0+IHN1YmplY3QuZ2V0VmFsdWUoKSwgY29uZmlnKTtcblxuICAgIHJldHVybiBzdWJqZWN0O1xuICB9O1xuXG4gIGNyZWF0ZVNpZ25hbCA9IChpbml0aWFsVmFsdWU/OiBSZXR1cm5UeXBlPHR5cGVvZiB0aGlzLnByZXBhcmU+IHwgbnVsbCwgY29uZmlnPzogUXVlcnlDb250YWluZXJDb25maWcpID0+IHtcbiAgICBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQodGhpcy5jcmVhdGVTaWduYWwpO1xuXG4gICAgY29uc3QgX3NpZ25hbCA9IHNpZ25hbDxSZXR1cm5UeXBlPHR5cGVvZiB0aGlzLnByZXBhcmU+IHwgbnVsbD4oaW5pdGlhbFZhbHVlID8/IG51bGwpO1xuXG4gICAgYWRkUXVlcnlDb250YWluZXJIYW5kbGluZyh0b09ic2VydmFibGUoX3NpZ25hbCksICgpID0+IF9zaWduYWwoKSwgY29uZmlnKTtcblxuICAgIHJldHVybiBfc2lnbmFsO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYG15UXVlcnkuY3JlYXRlU3ViamVjdCgpYCBvciBgbXlRdWVyeS5jcmVhdGVTaWduYWwoKWAgaW5zdGVhZC4gV2lsbCBiZSByZW1vdmVkIGluIHY2LlxuICAgKi9cbiAgYmVoYXZpb3JTdWJqZWN0ID0gKGluaXRpYWxWYWx1ZT86IFJldHVyblR5cGU8dHlwZW9mIHRoaXMucHJlcGFyZT4gfCBudWxsKSA9PlxuICAgIG5ldyBCZWhhdmlvclN1YmplY3Q8UmV0dXJuVHlwZTx0eXBlb2YgdGhpcy5wcmVwYXJlPiB8IG51bGw+KGluaXRpYWxWYWx1ZSA/PyBudWxsKTtcbn1cbiJdfQ==
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktY3JlYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9xdWVyeS1jcmVhdG9yL3F1ZXJ5LWNyZWF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2QyxPQUFPLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixFQUFFLGdCQUFnQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzVFLE9BQU8sRUFBZSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBWWxGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDeEMsT0FBTyxFQUF3Qix5QkFBeUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUczRSxNQUFNLE9BQU8sWUFBWTtJQVF2QixZQUNVLFlBRXVELEVBQ3ZELE9BQW9CLEVBQ3BCLE1BQWtCO1FBSmxCLGlCQUFZLEdBQVosWUFBWSxDQUUyQztRQUN2RCxZQUFPLEdBQVAsT0FBTyxDQUFhO1FBQ3BCLFdBQU0sR0FBTixNQUFNLENBQVk7UUFHNUIsNkRBQTZEO1FBQzdELGFBQWE7UUFDYixZQUFPLEdBQWdFLENBQ3JFLElBQWdFLEVBQ2hFLEVBQUU7WUFDRixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUM7Z0JBQ3ZCLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTO2dCQUNuQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFpQjtnQkFDMUMsVUFBVSxFQUFFLElBQUksRUFBRSxVQUFVO2dCQUM1QixXQUFXLEVBQUUsdUJBQXVCLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztnQkFDL0YsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLFdBQVc7YUFDM0QsQ0FBVSxDQUFDO1lBRVosTUFBTSxRQUFRLEdBQ1osQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixJQUFJLEVBQUUsQ0FBQztnQkFDeEMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRTVGLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLENBQUM7Z0JBQ2hGLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFxRCxRQUFRLENBQUMsQ0FBQztnQkFFcEcsSUFBSSxhQUFhLEVBQUUsQ0FBQztvQkFDbEIsT0FBTyxhQUFhLENBQUM7Z0JBQ3ZCLENBQUM7WUFDSCxDQUFDO1lBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQ3JCLElBQUksQ0FBQyxPQUFPLEVBQ1osSUFBSSxDQUFDLFlBQVksRUFDakIsS0FBSyxFQUNMLElBQUksSUFBSyxFQUFnQixFQUN6QixRQUFRLENBQ1QsQ0FBQztZQUVGLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLENBQUM7Z0JBQ2hGLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNuQyxDQUFDO1lBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUV6QyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQztRQUVGLGtCQUFhLEdBQUcsQ0FBQyxZQUFxRCxFQUFFLE1BQTZCLEVBQUUsRUFBRTtZQUN2Ryx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFFN0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxlQUFlLENBQXlDLFlBQVksSUFBSSxJQUFJLENBQUMsQ0FBQztZQUVsRyx5QkFBeUIsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRXJFLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsQ0FBQztRQUVGLGlCQUFZLEdBQUcsQ0FBQyxZQUFxRCxFQUFFLE1BQTZCLEVBQUUsRUFBRTtZQUN0Ryx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFNUMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUF5QyxZQUFZLElBQUksSUFBSSxDQUFDLENBQUM7WUFFckYseUJBQXlCLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRTFFLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsQ0FBQztRQUVGOztXQUVHO1FBQ0gsb0JBQWUsR0FBRyxDQUFDLFlBQXFELEVBQUUsRUFBRSxDQUMxRSxJQUFJLGVBQWUsQ0FBeUMsWUFBWSxJQUFJLElBQUksQ0FBQyxDQUFDO0lBcEVqRixDQUFDO0NBcUVMIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRW50aXR5U3RvcmUgfSBmcm9tICcuLi9lbnRpdHknO1xuaW1wb3J0IHsgUXVlcnksIGNvbXB1dGVRdWVyeVF1ZXJ5UGFyYW1zLCBpc0dxbFF1ZXJ5Q29uZmlnIH0gZnJvbSAnLi4vcXVlcnknO1xuaW1wb3J0IHsgUXVlcnlDbGllbnQsIGJ1aWxkR3FsQ2FjaGVLZXksIHNob3VsZENhY2hlUXVlcnkgfSBmcm9tICcuLi9xdWVyeS1jbGllbnQnO1xuaW1wb3J0IHsgUXVlcnlTdG9yZSB9IGZyb20gJy4uL3F1ZXJ5LXN0b3JlJztcbmltcG9ydCB7XG4gIEFueVJvdXRlLFxuICBCYXNlQXJndW1lbnRzLFxuICBHcWxRdWVyeUNvbmZpZyxcbiAgUmVzdFF1ZXJ5Q29uZmlnLFxuICBSb3V0ZVR5cGUsXG4gIFdpdGhDb25maWcsXG4gIFdpdGhIZWFkZXJzLFxuICBXaXRoTW9jayxcbn0gZnJvbSAnLi4vcXVlcnkvcXVlcnkudHlwZXMnO1xuaW1wb3J0IHsgYnVpbGRSb3V0ZSB9IGZyb20gJy4uL3JlcXVlc3QnO1xuaW1wb3J0IHsgUXVlcnlDb250YWluZXJDb25maWcsIGFkZFF1ZXJ5Q29udGFpbmVySGFuZGxpbmcgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBRdWVyeVByZXBhcmVGbiB9IGZyb20gJy4vcXVlcnktY3JlYXRvci50eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBRdWVyeUNyZWF0b3I8XG4gIEFyZ3VtZW50cyBleHRlbmRzIEJhc2VBcmd1bWVudHMgfCB1bmRlZmluZWQsXG4gIFJlc3BvbnNlLFxuICBSb3V0ZSBleHRlbmRzIFJvdXRlVHlwZTxBcmd1bWVudHM+LFxuICBTdG9yZSBleHRlbmRzIEVudGl0eVN0b3JlPHVua25vd24+LFxuICBEYXRhLFxuICBJZCxcbj4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9xdWVyeUNvbmZpZzpcbiAgICAgIHwgUmVzdFF1ZXJ5Q29uZmlnPFJvdXRlLCBSZXNwb25zZSwgQXJndW1lbnRzLCBTdG9yZSwgRGF0YSwgSWQ+XG4gICAgICB8IEdxbFF1ZXJ5Q29uZmlnPFJvdXRlLCBSZXNwb25zZSwgQXJndW1lbnRzLCBTdG9yZSwgRGF0YSwgSWQ+LFxuICAgIHByaXZhdGUgX2NsaWVudDogUXVlcnlDbGllbnQsXG4gICAgcHJpdmF0ZSBfc3RvcmU6IFF1ZXJ5U3RvcmUsXG4gICkge31cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gIC8vIEB0cy1pZ25vcmVcbiAgcHJlcGFyZTogUXVlcnlQcmVwYXJlRm48QXJndW1lbnRzLCBSZXNwb25zZSwgUm91dGUsIFN0b3JlLCBEYXRhLCBJZD4gPSAoXG4gICAgYXJncz86IEFyZ3VtZW50cyAmIFdpdGhIZWFkZXJzICYgV2l0aENvbmZpZyAmIFdpdGhNb2NrPFJlc3BvbnNlPixcbiAgKSA9PiB7XG4gICAgY29uc3Qgcm91dGUgPSBidWlsZFJvdXRlKHtcbiAgICAgIGJhc2U6IHRoaXMuX2NsaWVudC5jb25maWcuYmFzZVJvdXRlLFxuICAgICAgcm91dGU6IHRoaXMuX3F1ZXJ5Q29uZmlnLnJvdXRlIGFzIEFueVJvdXRlLFxuICAgICAgcGF0aFBhcmFtczogYXJncz8ucGF0aFBhcmFtcyxcbiAgICAgIHF1ZXJ5UGFyYW1zOiBjb21wdXRlUXVlcnlRdWVyeVBhcmFtcyh7IGNvbmZpZzogdGhpcy5fcXVlcnlDb25maWcsIGNsaWVudDogdGhpcy5fY2xpZW50LCBhcmdzIH0pLFxuICAgICAgcXVlcnlQYXJhbUNvbmZpZzogdGhpcy5fY2xpZW50LmNvbmZpZy5yZXF1ZXN0Py5xdWVyeVBhcmFtcyxcbiAgICB9KSBhcyBSb3V0ZTtcblxuICAgIGNvbnN0IGNhY2hlS2V5ID1cbiAgICAgIChhcmdzPy5jb25maWc/LnF1ZXJ5U3RvcmVDYWNoZUtleSA/PyAnJykgK1xuICAgICAgKGlzR3FsUXVlcnlDb25maWcodGhpcy5fcXVlcnlDb25maWcpID8gYnVpbGRHcWxDYWNoZUtleSh0aGlzLl9xdWVyeUNvbmZpZywgYXJncykgOiByb3V0ZSk7XG5cbiAgICBpZiAoc2hvdWxkQ2FjaGVRdWVyeSh0aGlzLl9xdWVyeUNvbmZpZy5tZXRob2QpICYmICFhcmdzPy5jb25maWc/LnNraXBRdWVyeVN0b3JlKSB7XG4gICAgICBjb25zdCBleGlzdGluZ1F1ZXJ5ID0gdGhpcy5fc3RvcmUuZ2V0PFF1ZXJ5PFJlc3BvbnNlLCBBcmd1bWVudHMsIFJvdXRlLCBTdG9yZSwgRGF0YSwgSWQ+PihjYWNoZUtleSk7XG5cbiAgICAgIGlmIChleGlzdGluZ1F1ZXJ5KSB7XG4gICAgICAgIHJldHVybiBleGlzdGluZ1F1ZXJ5O1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5ID0gbmV3IFF1ZXJ5PFJlc3BvbnNlLCBBcmd1bWVudHMsIFJvdXRlLCBTdG9yZSwgRGF0YSwgSWQ+KFxuICAgICAgdGhpcy5fY2xpZW50LFxuICAgICAgdGhpcy5fcXVlcnlDb25maWcsXG4gICAgICByb3V0ZSxcbiAgICAgIGFyZ3MgPz8gKHt9IGFzIEFyZ3VtZW50cyksXG4gICAgICBjYWNoZUtleSxcbiAgICApO1xuXG4gICAgaWYgKHNob3VsZENhY2hlUXVlcnkodGhpcy5fcXVlcnlDb25maWcubWV0aG9kKSAmJiAhYXJncz8uY29uZmlnPy5za2lwUXVlcnlTdG9yZSkge1xuICAgICAgdGhpcy5fc3RvcmUuYWRkKGNhY2hlS2V5LCBxdWVyeSk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3RvcmUuX2Rpc3BhdGNoUXVlcnlDcmVhdGVkKHF1ZXJ5KTtcblxuICAgIHJldHVybiBxdWVyeTtcbiAgfTtcblxuICBjcmVhdGVTdWJqZWN0ID0gKGluaXRpYWxWYWx1ZT86IFJldHVyblR5cGU8dHlwZW9mIHRoaXMucHJlcGFyZT4gfCBudWxsLCBjb25maWc/OiBRdWVyeUNvbnRhaW5lckNvbmZpZykgPT4ge1xuICAgIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dCh0aGlzLmNyZWF0ZVN1YmplY3QpO1xuXG4gICAgY29uc3Qgc3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UmV0dXJuVHlwZTx0eXBlb2YgdGhpcy5wcmVwYXJlPiB8IG51bGw+KGluaXRpYWxWYWx1ZSA/PyBudWxsKTtcblxuICAgIGFkZFF1ZXJ5Q29udGFpbmVySGFuZGxpbmcoc3ViamVjdCwgKCkgPT4gc3ViamVjdC5nZXRWYWx1ZSgpLCBjb25maWcpO1xuXG4gICAgcmV0dXJuIHN1YmplY3Q7XG4gIH07XG5cbiAgY3JlYXRlU2lnbmFsID0gKGluaXRpYWxWYWx1ZT86IFJldHVyblR5cGU8dHlwZW9mIHRoaXMucHJlcGFyZT4gfCBudWxsLCBjb25maWc/OiBRdWVyeUNvbnRhaW5lckNvbmZpZykgPT4ge1xuICAgIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dCh0aGlzLmNyZWF0ZVNpZ25hbCk7XG5cbiAgICBjb25zdCBfc2lnbmFsID0gc2lnbmFsPFJldHVyblR5cGU8dHlwZW9mIHRoaXMucHJlcGFyZT4gfCBudWxsPihpbml0aWFsVmFsdWUgPz8gbnVsbCk7XG5cbiAgICBhZGRRdWVyeUNvbnRhaW5lckhhbmRsaW5nKHRvT2JzZXJ2YWJsZShfc2lnbmFsKSwgKCkgPT4gX3NpZ25hbCgpLCBjb25maWcpO1xuXG4gICAgcmV0dXJuIF9zaWduYWw7XG4gIH07XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgbXlRdWVyeS5jcmVhdGVTdWJqZWN0KClgIG9yIGBteVF1ZXJ5LmNyZWF0ZVNpZ25hbCgpYCBpbnN0ZWFkLiBXaWxsIGJlIHJlbW92ZWQgaW4gdjYuXG4gICAqL1xuICBiZWhhdmlvclN1YmplY3QgPSAoaW5pdGlhbFZhbHVlPzogUmV0dXJuVHlwZTx0eXBlb2YgdGhpcy5wcmVwYXJlPiB8IG51bGwpID0+XG4gICAgbmV3IEJlaGF2aW9yU3ViamVjdDxSZXR1cm5UeXBlPHR5cGVvZiB0aGlzLnByZXBhcmU+IHwgbnVsbD4oaW5pdGlhbFZhbHVlID8/IG51bGwpO1xufVxuIl19