ngx-edu-sharing-metaqs2 0.9.49 → 0.9.51

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.
@@ -39,7 +39,7 @@ export class BaseHistoricDataTableDirective {
39
39
  this.dataForPastData$ = new Subject();
40
40
  this.dataForRecentData$ = new Subject();
41
41
  this.startValues$ = this.dataForPastData$.pipe(filter((data) => this.validateLoadingData(data)), distinctUntilChanged((a, b) => this.compareLoadingDataEqual(a, b)), throttleTime(500), switchMap((start) => this.getCountByDate(start)), tap((it) => this.pastTypeCount$.next(it)), takeUntilDestroyed(this.destroyRef));
42
- this.endValues$ = this.dataForRecentData$.pipe(tap((it) => console.debug('endValues$.pipe', it)), filter((data) => this.validateLoadingData(data)), distinctUntilChanged((a, b) => this.compareLoadingDataEqual(a, b)), throttleTime(500), switchMap((end) => this.getCountByDate(end)), tap((it) => this.recentTypeCount$.next(it)), tap((it) => this.columns.set(it.columns.slice())), takeUntilDestroyed(this.destroyRef));
42
+ this.endValues$ = this.dataForRecentData$.pipe(filter((data) => this.validateLoadingData(data)), distinctUntilChanged((a, b) => this.compareLoadingDataEqual(a, b)), throttleTime(500), switchMap((end) => this.getCountByDate(end)), tap((it) => this.recentTypeCount$.next(it)), tap((it) => this.columns.set(it.columns.slice())), takeUntilDestroyed(this.destroyRef));
43
43
  /* In this widget's backend we do have data for today
44
44
  * therefore we set the end date to today and use the timerange() endpoint to only set the start date
45
45
  */
@@ -121,20 +121,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
121
121
  export class CountsWithHistoryComponent extends BaseHistoricDataTableDirective {
122
122
  ngOnInit() {
123
123
  this.apiMethod ??= 'getMaterialTypeCountsByReplicationSource';
124
- this.endValues$.subscribe(() => {
125
- console.debug('endValues$.subscribe event');
126
- });
127
- console.debug('endValues subscribed');
124
+ this.endValues$.subscribe();
128
125
  this.range.valueChanges
129
126
  .pipe(tap((data) => {
130
- console.debug('range.valueChanges', data);
131
127
  this.dataForPastData$.next({ date: data.start });
132
128
  this.dataForRecentData$.next({ date: data.end });
133
129
  }), takeUntilDestroyed(this.destroyRef))
134
130
  .subscribe();
135
131
  this.isHistoryEnabled$
136
132
  .pipe(tap((enabled) => {
137
- console.debug('isHistoryEnabled', enabled);
138
133
  this.range.controls.end.reset();
139
134
  if (!enabled) {
140
135
  this.startDateSubscription?.unsubscribe();
@@ -143,10 +138,8 @@ export class CountsWithHistoryComponent extends BaseHistoricDataTableDirective {
143
138
  }
144
139
  this.range.controls.start.reset();
145
140
  if (!this.timeFilterLoaded()) {
146
- console.debug('isTimeFilterLoaded', 'false');
147
141
  this.startDateSubscription = this.timerangeStart$
148
142
  .pipe(take(1), tap(() => {
149
- console.debug('startDateSubscription', 'done');
150
143
  this.startValuesSubscription = this.startValues$.subscribe();
151
144
  this.range.controls.start.reset();
152
145
  }))
@@ -160,7 +153,6 @@ export class CountsWithHistoryComponent extends BaseHistoricDataTableDirective {
160
153
  .subscribe();
161
154
  }
162
155
  getCountByDate(data) {
163
- console.debug('getCountByDate', data);
164
156
  const filter = {
165
157
  field: 'asOf',
166
158
  values: [{ id: data.date.toISO({ includeOffset: false }), label: '' }],
@@ -173,7 +165,6 @@ export class CountsWithHistoryComponent extends BaseHistoricDataTableDirective {
173
165
  })));
174
166
  }
175
167
  validateLoadingData(data) {
176
- console.debug('validateLoadingData', data, data.date?.isValid);
177
168
  return data.date?.isValid ?? false;
178
169
  }
179
170
  compareLoadingDataEqual(a, b) {
@@ -209,4 +200,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
209
200
  MatRipple,
210
201
  ], template: "<mat-card appearance=\"raised\">\n <mat-card-header *ngIf=\"pageTitle\">\n <mat-card-title data-test-id=\"page-title\">\n Qualit\u00E4tsmetrik: {{ pageTitle | translate }}{{ isLoading() ? \": Lade neue Daten.\" : \"\" }}\n </mat-card-title>\n </mat-card-header>\n <!-- consider to put the filter in the table header to avoid that it is scrolled out of view-->\n <!-- show the filter after the values are loaded to avoid loading current data twice -->\n <mat-card-content class=\"toolbar\">\n <metaqs2-datepicker style=\"display: inline-block\" matRipple [disabled]=\"isLoading() || !isHistoryEnabled()\" [inputGroup]=\"range\" *ngIf=\"timeFilterLoaded() && isHistoryEnabled()\"></metaqs2-datepicker>\n <div style=\"flex: 1 1 auto\"></div>\n <mat-slide-toggle [ngModel]=\"isHistoryEnabled()\" (ngModelChange)=\"isHistoryEnabled.set($event)\" [disabled]=\"isLoading()\">\n <label>Zeige historische Daten</label>\n </mat-slide-toggle>\n </mat-card-content>\n</mat-card>\n<mat-card>\n <metaqs2-progress-spinner [displayProgressSpinner]=\"isLoading()\"></metaqs2-progress-spinner>\n <table [class.while-loading]=\"isLoading()\" mat-table [dataSource]=\"recentTypeCount$.value.rows\"\n class=\"quality-matrix\">\n <!-- Define columns of table -->\n <!-- Row Header Column -->\n <ng-container matColumnDef=\"label-col\" sticky>\n <th [attr.rowspan]=\"isHistoryEnabled() ? '2' : '1'\" mat-header-cell *matHeaderCellDef>\n <div>Quelle</div>\n </th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n [matTooltip]=\"row.meta.alt_label\"\n class=\"label-col mat-cell-level-{{row.meta.level + 1}}\"\n >\n {{ row.meta.label }}\n </td>\n </ng-container>\n <!-- one column for each type -->\n <ng-container *ngFor=\"let col of (recentTypeCount$ | async)?.columns; trackBy:columnIdent\"\n [matColumnDef]=\"col.id + '_type'\">\n <th [attr.colspan]=\"isHistoryEnabled() ? '2' : '1'\" mat-header-cell *matHeaderCellDef [matTooltip]=\"col.label\">\n {{ columnTranslationkey ? (columnTranslationkey + col.label | translate) : col.label }}\n </th>\n </ng-container>\n <!-- one column for each type for the most current date-->\n <ng-container *ngFor=\"let col of (recentTypeCount$ | async)?.columns; trackBy:columnIdent\"\n [matColumnDef]=\"col.id + '_recent'\">\n <th class=\"recent-data-cell\" mat-header-cell *matHeaderCellDef\n matTooltip=\"no tooltip\">{{ range.controls.end.value.toLocaleString(DateTime.DATE_SHORT) }}\n </th>\n <td class=\"recent-data-cell\" mat-cell *matCellDef=\"let row\">\n <a [attr.href]=\"openInEditor(row.meta.id, col.id) | async\" target=\"editor_frontend\">{{ row.counts[col.id] ?? '\u2013' }}</a>\n </td>\n </ng-container>\n <!-- one column for each type for the older date-->\n <ng-container *ngFor=\"let col of (recentTypeCount$ | async)?.columns; trackBy:columnIdent\"\n [matColumnDef]=\"col.id + '_past'\">\n <th class=\"past-data-cell\" mat-header-cell *matHeaderCellDef matTooltip=\"no tooltip\">\n {{ (pastTypeCount$ | async)?.rows?.length ? range.controls.start.value.toLocaleString(DateTime.DATE_SHORT) : 'no past data' }}\n </th>\n <td class=\"past-data-cell\" mat-cell *matCellDef=\"let row;\" >\n <ng-container *ngIf=\"(pastTypeCount$ | async)?.rows?.length && pastTypeCount(row, col.id) as trend\">\n <span [class]=\"trend.trend\"> {{ trend.value ?? '\u2013' }}\n <mat-icon *ngIf=\"trend.value\" aria-hidden=\"false\" [attr.aria-label]=\"trend.trend\" [fontIcon]=\"trend.trend!\" /></span>\n <span class=\"cdk-visually-hidden\">{{ trend.trend }}</span>\n </ng-container>\n </td>\n </ng-container>\n <!-- generate actual table -->\n <tr mat-header-row *matHeaderRowDef=\"['label-col'].concat(typeColumns()); sticky:true;\"></tr>\n <tr [hidden]=\"!isHistoryEnabled()\" mat-header-row *matHeaderRowDef=\"allColumns(); sticky: true;\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['label-col'].concat(allColumns())\"></tr>\n\n </table>\n</mat-card>\n", styles: [".while-loading{filter:blur(2px)}tr:nth-child(2n){background-color:#e4e4e4}tr:nth-child(2n)>td.label-col,tr:nth-child(2n) td.recent-data-cell{border-right:1px solid white}tr:nth-child(odd){background-color:#fff}tr:nth-child(odd)>td.label-col,tr:nth-child(odd) td.recent-data-cell{border-right:1px solid #e4e4e4}td.label-col{text-align:left}.mat-mdc-header-cell,.mat-mdc-cell{text-align:center}.mat-mdc-header-cell a[href],.mat-mdc-cell a[href]{color:var(--mat-table-row-item-label-text-color);cursor:pointer;text-decoration:underline}.mat-mdc-header-cell a[href]:hover,.mat-mdc-cell a[href]:hover{text-decoration:underline}.mat-mdc-header-cell mat-icon,.mat-mdc-cell mat-icon{margin-left:5px;vertical-align:middle}.trending_down{color:#4abeff}.trending_up{color:#c20808}.toolbar,.actionbar{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;gap:.5rem}\n"] }]
211
202
  }] });
212
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRzLXdpdGgtaGlzdG9yeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1tZXRhLXdpZGdldHMtbGliL3NyYy9saWIvY291bnRzLXdpdGgtaGlzdG9yeS9jb3VudHMtd2l0aC1oaXN0b3J5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1ldGEtd2lkZ2V0cy1saWIvc3JjL2xpYi9jb3VudHMtd2l0aC1oaXN0b3J5L2NvdW50cy13aXRoLWhpc3RvcnkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRyxPQUFPLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdHLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNySCxPQUFPLEVBQUUsZUFBZSxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQWtCLE1BQU0sTUFBTSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFckQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNqQyxP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QU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7K0dBbEZVLDBCQUEwQjttR0FBMUIsMEJBQTBCLDhHQzNOdkMsa25JQXlFQSx3NkJEd0hJLGFBQWEsbVpBS2IsVUFBVSxnUkFDVixjQUFjLHNnQ0FFZCxlQUFlLDRGQUtmLE9BQU8sbUhBQ1AsbUJBQW1CLG1HQUNuQixPQUFPLDJJQUNQLElBQUksNEZBQ0osV0FBVywrVkFDWCxjQUFjLHFVQUNkLFNBQVMsOENBQ1Qsd0JBQXdCLDBMQUN4QixTQUFTOzs0RkFLQSwwQkFBMEI7a0JBOUJ0QyxTQUFTOytCQUNFLDZCQUE2QixjQUMzQixJQUFJLFdBQ1A7d0JBQ1AsYUFBYTt3QkFDYixPQUFPO3dCQUNQLGFBQWE7d0JBQ2IsWUFBWTt3QkFDWixjQUFjO3dCQUNkLFVBQVU7d0JBQ1YsY0FBYzt3QkFDZCxRQUFRO3dCQUNSLGVBQWU7d0JBQ2YsWUFBWTt3QkFDWixlQUFlO3dCQUNmLE1BQU07d0JBQ04sU0FBUzt3QkFDVCxPQUFPO3dCQUNQLG1CQUFtQjt3QkFDbkIsT0FBTzt3QkFDUCxJQUFJO3dCQUNKLFdBQVc7d0JBQ1gsY0FBYzt3QkFDZCxTQUFTO3dCQUNULHdCQUF3Qjt3QkFDeEIsU0FBUztxQkFDViIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIERlc3Ryb3lSZWYsIERpcmVjdGl2ZSwgaW5qZWN0LCBJbnB1dCwgT25Jbml0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdENhcmQsIE1hdENhcmRDb250ZW50LCBNYXRDYXJkSGVhZGVyLCBNYXRDYXJkTW9kdWxlLCBNYXRDYXJkVGl0bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jYXJkJztcbmltcG9ydCB7IE1hdFRvb2x0aXAgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7IE1hdEhlYWRlclJvdywgTWF0SGVhZGVyUm93RGVmLCBNYXRSb3csIE1hdFJvd0RlZiwgTWF0VGFibGUsIE1hdFRhYmxlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgVW5zdWJzY3JpYmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0Zvck9mLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1ldGFBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vbWV0YS1hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBGaWx0ZXIsIE1hdHJpeFJvd1dpdGhDb3VudHMsIE1hdHJpeFdpdGhDb3VudHMsIFF1YWxpdHlNYXRyaXhIZWFkZXIgfSBmcm9tICcuLi9qYXZhLWFwaSc7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gJ2x1eG9uJztcbmltcG9ydCB7XG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIGZpbmFsaXplLFxuICBtYXAsXG4gIHNraXBXaGlsZSxcbiAgc3dpdGNoTWFwLFxuICB0YWtlLFxuICB0YXAsXG4gIHRocm90dGxlVGltZSxcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEYXRlcGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9maWx0ZXIvZGF0ZXBpY2tlci9kYXRlcGlja2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXRJY29uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQsIHRvT2JzZXJ2YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IE1hdFNsaWRlVG9nZ2xlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGUtdG9nZ2xlJztcbmltcG9ydCB7IFByb2dyZXNzU3Bpbm5lckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvbG9hZGluZ19pbmRpY2F0b3IvcHJvZ3Jlc3Mtc3Bpbm5lci9wcm9ncmVzcy1zcGlubmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFZGl0b3JpYWxMaW5rU2VydmljZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvZWRpdG9yaWFsLWxpbmstc2VydmljZS9lZGl0b3JpYWwtbGluay5zZXJ2aWNlJztcbmltcG9ydCB7IE1hdFJpcHBsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuXG5leHBvcnQgdHlwZSBQaWNrS2V5c0J5UHJvcGVydHlUeXBlPFRPYmplY3QgZXh0ZW5kcyBvYmplY3QsIFRQcm9wZXJ0eVR5cGU+ID0ge1xuICBbVEtleSBpbiBrZXlvZiBUT2JqZWN0XTogVE9iamVjdFtUS2V5XSBleHRlbmRzIFRQcm9wZXJ0eVR5cGUgPyBUS2V5IDogbmV2ZXI7XG59W2tleW9mIFRPYmplY3RdO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlSGlzdG9yaWNEYXRhVGFibGVEaXJlY3RpdmU8XG4gIFRMb2FkaW5nRGF0YSBleHRlbmRzIG9iamVjdCxcbiAgVE1ldGhvZFR5cGUgZXh0ZW5kcyBNZXRhQXBpU2VydmljZVtrZXlvZiBNZXRhQXBpU2VydmljZV0gJiBGdW5jdGlvblxuPiB7XG4gIHByb3RlY3RlZCByZWFkb25seSBtZXRhQXBpID0gaW5qZWN0KE1ldGFBcGlTZXJ2aWNlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIHByb3RlY3RlZCByZWFkb25seSBsaW5rU2VydmljZSA9IGluamVjdChFZGl0b3JpYWxMaW5rU2VydmljZSk7XG5cbiAgQElucHV0KClcbiAgYXBpTWV0aG9kOiBQaWNrS2V5c0J5UHJvcGVydHlUeXBlPE1ldGFBcGlTZXJ2aWNlLCBUTWV0aG9kVHlwZT47XG4gIEBJbnB1dCgpXG4gIGNvbHVtblRyYW5zbGF0aW9ua2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KClcbiAgcGFnZVRpdGxlOiBzdHJpbmc7XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIHNvdXJjZVR5cGU6ICdyZXBsaWNhdGlvblNvdXJjZScgfCAnY29sbGVjdGlvbic7XG5cbiAgcHJvdGVjdGVkIGxvYWRpbmdDb3VudCA9IHNpZ25hbCgwKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzTG9hZGluZyA9IGNvbXB1dGVkKCgpID0+IHRoaXMubG9hZGluZ0NvdW50KCkgPiAwKTtcbiAgcmVhZG9ubHkgaXNIaXN0b3J5RW5hYmxlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBpc0hpc3RvcnlFbmFibGVkJCA9IHRvT2JzZXJ2YWJsZSh0aGlzLmlzSGlzdG9yeUVuYWJsZWQpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSB0aW1lRmlsdGVyTG9hZGVkID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvdGVjdGVkIHJlY2VudFR5cGVDb3VudCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHsgY29sdW1uczogW10sIHJvd3M6IFtdIH0gYXMgTWF0cml4V2l0aENvdW50cyk7XG4gIHByb3RlY3RlZCBwYXN0VHlwZUNvdW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3QoeyBjb2x1bW5zOiBbXSwgcm93czogW10gfSBhcyBNYXRyaXhXaXRoQ291bnRzKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IERhdGVUaW1lID0gRGF0ZVRpbWU7XG4gIHB1YmxpYyBjb2x1bW5zID0gc2lnbmFsKFtdIGFzIEFycmF5PFF1YWxpdHlNYXRyaXhIZWFkZXI+KTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGF0YUZvclBhc3REYXRhJCA9IG5ldyBTdWJqZWN0PFBhcnRpYWw8VExvYWRpbmdEYXRhPj4oKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRhdGFGb3JSZWNlbnREYXRhJCA9IG5ldyBTdWJqZWN0PFBhcnRpYWw8VExvYWRpbmdEYXRhPj4oKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3RhcnRWYWx1ZXMkID0gdGhpcy5kYXRhRm9yUGFzdERhdGEkLnBpcGUoXG4gICAgZmlsdGVyKChkYXRhKSA9PiB0aGlzLnZhbGlkYXRlTG9hZGluZ0RhdGEoZGF0YSkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiB0aGlzLmNvbXBhcmVMb2FkaW5nRGF0YUVxdWFsKGEsIGIpKSxcbiAgICB0aHJvdHRsZVRpbWUoNTAwKSxcbiAgICBzd2l0Y2hNYXAoKHN0YXJ0KSA9PiB0aGlzLmdldENvdW50QnlEYXRlKHN0YXJ0KSksXG4gICAgdGFwKChpdCkgPT4gdGhpcy5wYXN0VHlwZUNvdW50JC5uZXh0KGl0KSksXG4gICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGVuZFZhbHVlcyQgPSB0aGlzLmRhdGFGb3JSZWNlbnREYXRhJC5waXBlKFxuICAgIHRhcCgoaXQpID0+IGNvbnNvbGUuZGVidWcoJ2VuZFZhbHVlcyQucGlwZScsIGl0KSksXG4gICAgZmlsdGVyKChkYXRhKSA9PiB0aGlzLnZhbGlkYXRlTG9hZGluZ0RhdGEoZGF0YSkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiB0aGlzLmNvbXBhcmVMb2FkaW5nRGF0YUVxdWFsKGEsIGIpKSxcbiAgICB0aHJvdHRsZVRpbWUoNTAwKSxcbiAgICBzd2l0Y2hNYXAoKGVuZCkgPT4gdGhpcy5nZXRDb3VudEJ5RGF0ZShlbmQpKSxcbiAgICB0YXAoKGl0KSA9PiB0aGlzLnJlY2VudFR5cGVDb3VudCQubmV4dChpdCkpLFxuICAgIHRhcCgoaXQpID0+IHRoaXMuY29sdW1ucy5zZXQoaXQuY29sdW1ucy5zbGljZSgpKSksXG4gICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgKTtcblxuICBwcm90ZWN0ZWQgc3RhcnREYXRlU3Vic2NyaXB0aW9uOiBVbnN1YnNjcmliYWJsZSB8IHVuZGVmaW5lZDtcbiAgcHJvdGVjdGVkIHN0YXJ0VmFsdWVzU3Vic2NyaXB0aW9uOiBVbnN1YnNjcmliYWJsZSB8IHVuZGVmaW5lZDtcblxuICAvKiBJbiB0aGlzIHdpZGdldCdzIGJhY2tlbmQgd2UgZG8gaGF2ZSBkYXRhIGZvciB0b2RheVxuICAgKiB0aGVyZWZvcmUgd2Ugc2V0IHRoZSBlbmQgZGF0ZSB0byB0b2RheSBhbmQgdXNlIHRoZSB0aW1lcmFuZ2UoKSBlbmRwb2ludCB0byBvbmx5IHNldCB0aGUgc3RhcnQgZGF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcmFuZ2U6IEZvcm1Hcm91cDx7XG4gICAgc3RhcnQ6IEZvcm1Db250cm9sPERhdGVUaW1lPGJvb2xlYW4+PjtcbiAgICBlbmQ6IEZvcm1Db250cm9sPERhdGVUaW1lPGJvb2xlYW4+PjtcbiAgfT4gPSBuZXcgRm9ybUdyb3VwKHtcbiAgICBzdGFydDogbmV3IEZvcm1Db250cm9sKCksXG4gICAgZW5kOiBuZXcgRm9ybUNvbnRyb2woRGF0ZVRpbWUudXRjKCkuc3RhcnRPZignZGF5JyksIHsgbm9uTnVsbGFibGU6IHRydWUgfSksXG4gIH0pO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSB0aW1lcmFuZ2VTdGFydCQgPSBvZih1bmRlZmluZWQpLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuZ2V0QXZhaWxhYmxlRGF0ZVJhbmdlKCkpLFxuICAgIHRha2UoMSksXG4gICAgbWFwKChyYW5nZUZpbHRlcikgPT4gdGhpcy5nZXRTdGFydERhdGVPZlJhbmdlKHJhbmdlRmlsdGVyKSksXG4gICAgdGFwKChzdGFydERhdGUpID0+IHtcbiAgICAgIC8vdGhpcyBpcyB0byBoYXZlIGEgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIHN0YXJ0IGRhdGUgPT4gdGhlIG1pbiBkYXRlIG9mIHRoZSByYW5nZVxuICAgICAgdGhpcy5yYW5nZS5zZXRDb250cm9sKCdzdGFydCcsIG5ldyBGb3JtQ29udHJvbDxEYXRlVGltZTx0cnVlPj4oc3RhcnREYXRlLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pKTtcbiAgICAgIHRoaXMudGltZUZpbHRlckxvYWRlZC5zZXQodHJ1ZSk7XG4gICAgfSksXG4gICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgKTtcblxuICByZWFkb25seSBhbGxDb2x1bW5zID0gY29tcHV0ZWQ8QXJyYXk8c3RyaW5nPj4oKCkgPT4ge1xuICAgIGlmICghdGhpcy5pc0hpc3RvcnlFbmFibGVkKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlY2VudENvbHVtbnMoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucGFzdENvbHVtbnMoKS5mbGF0TWFwKChlLCBpKSA9PiBbZSwgdGhpcy5yZWNlbnRDb2x1bW5zKClbaV1dKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgdHlwZUNvbHVtbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucygpLm1hcCgoYykgPT4gYy5pZCArICdfdHlwZScpO1xuICB9KTtcblxuICByZWFkb25seSByZWNlbnRDb2x1bW5zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbnMoKS5tYXAoKGMpID0+IGMuaWQgKyAnX3JlY2VudCcpO1xuICB9KTtcblxuICByZWFkb25seSBwYXN0Q29sdW1ucyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zKCkubWFwKChjKSA9PiBjLmlkICsgJ19wYXN0Jyk7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRDb3VudEJ5RGF0ZShkYXRlOiBUTG9hZGluZ0RhdGEpOiBPYnNlcnZhYmxlPE1hdHJpeFdpdGhDb3VudHM+O1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgdmFsaWRhdGVMb2FkaW5nRGF0YShkYXRhOiBQYXJ0aWFsPFRMb2FkaW5nRGF0YT4pOiBkYXRhIGlzIFRMb2FkaW5nRGF0YTtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGNvbXBhcmVMb2FkaW5nRGF0YUVxdWFsKGE6IFRMb2FkaW5nRGF0YSwgYjogVExvYWRpbmdEYXRhKTogYm9vbGVhbjtcblxuICBwcm90ZWN0ZWQgZ2V0QXZhaWxhYmxlRGF0ZVJhbmdlKCkge1xuICAgIHJldHVybiBvZih1bmRlZmluZWQpLnBpcGUoXG4gICAgICB0YXAoKCkgPT4gdGhpcy5sb2FkaW5nQ291bnQudXBkYXRlKChpdCkgPT4gaXQgKyAxKSksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5tZXRhQXBpLmdldFRpbWVyYW5nZUZpbHRlcigpKSxcbiAgICAgIGZpbHRlcigoZmlsdGVyKTogZmlsdGVyIGlzIEZpbHRlciA9PiBmaWx0ZXIgIT0gbnVsbCksXG4gICAgICB0YXAoKCkgPT4gdGhpcy5sb2FkaW5nQ291bnQudXBkYXRlKChpdCkgPT4gaXQgLSAxKSlcbiAgICApO1xuICB9XG4gIHByaXZhdGUgZ2V0U3RhcnREYXRlT2ZSYW5nZShyYW5nZUZpbHRlcjogRmlsdGVyKSB7XG4gICAgcmV0dXJuIERhdGVUaW1lLmZyb21JU08ocmFuZ2VGaWx0ZXIudmFsdWVzLmZpbmQoKHYpID0+IHYuaWQgPT09ICdyYW5nZVN0YXJ0Jyk/LmxhYmVsISwge1xuICAgICAgem9uZTogJ3V0YycsXG4gICAgfSkuc3RhcnRPZignZGF5JykgYXMgRGF0ZVRpbWU8dHJ1ZT47XG4gIH1cblxuICBwdWJsaWMgY29sdW1uSWRlbnQoX2luZGV4OiBudW1iZXIsIGNvbDogUXVhbGl0eU1hdHJpeEhlYWRlcikge1xuICAgIHJldHVybiBjb2wuaWQ7XG4gIH1cblxuICBwdWJsaWMgcGFzdFR5cGVDb3VudChyb3c6IE1hdHJpeFJvd1dpdGhDb3VudHMsIGNvbHVtbmlkOiBzdHJpbmcpOiB7IGRlbHRhPzogbnVtYmVyOyB0cmVuZD86IHN0cmluZzsgdmFsdWU/OiBudW1iZXIgfSB7XG4gICAgaWYgKCF0aGlzLnBhc3RUeXBlQ291bnQkLnZhbHVlLnJvd3MubGVuZ3RoKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IHBhc3Rfcm93ID0gdGhpcy5wYXN0VHlwZUNvdW50JC52YWx1ZS5yb3dzLmZpbmQoKHByKSA9PiBwci5tZXRhLmlkID09IHJvdy5tZXRhLmlkKTtcbiAgICBjb25zdCBwYXN0X2NvbHVtbiA9IHRoaXMucGFzdFR5cGVDb3VudCQudmFsdWUuY29sdW1ucy5maW5kKChjKSA9PiBjLmlkID09IGNvbHVtbmlkKTtcbiAgICBpZiAoIXBhc3Rfcm93IHx8ICFwYXN0X2NvbHVtbikge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHJvdy5jb3VudHNbY29sdW1uaWRdO1xuICAgIGNvbnN0IHBhc3RWYWx1ZSA9IHBhc3Rfcm93LmNvdW50c1tjb2x1bW5pZF07XG5cbiAgICBjb25zdCBkZWx0YSA9IChjdXJyZW50VmFsdWUgfHwgMCkgLSAocGFzdFZhbHVlIHx8IDApO1xuICAgIGNvbnN0IHRyZW5kID0gZGVsdGEgPT09IDAgPyAndHJlbmRpbmdfZmxhdCcgOiBkZWx0YSA8IDAgPyAndHJlbmRpbmdfZG93bicgOiAndHJlbmRpbmdfdXAnO1xuICAgIHJldHVybiB7IGRlbHRhLCB0cmVuZCwgdmFsdWU6IHBhc3RWYWx1ZSB9O1xuICB9XG5cbiAgcHVibGljIG9wZW5JbkVkaXRvcihzb3VyY2VJZDogc3RyaW5nLCBpc3N1ZUlkOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5zb3VyY2VUeXBlID09PSAncmVwbGljYXRpb25Tb3VyY2UnKSB7XG4gICAgICAvLyBmaW5kIHRoZSBsb25nIG5hbWUgZm9yIHRoZSBzb3VyY2VcbiAgICAgIHNvdXJjZUlkID0gdGhpcy5yZWNlbnRUeXBlQ291bnQkLnZhbHVlLnJvd3MuZmluZCgocikgPT4gci5tZXRhLmlkID09PSBzb3VyY2VJZCk/Lm1ldGEubGFiZWwgfHwgc291cmNlSWQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmxpbmtTZXJ2aWNlLnR5cGVzTG9hZGVkJC5waXBlKFxuICAgICAgc2tpcFdoaWxlKChsb2FkZWQpID0+ICFsb2FkZWQpLFxuICAgICAgdGFrZSgxKSxcbiAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmxpbmtTZXJ2aWNlLmNyZWF0ZUxpbmtGb3JDb3VudHNXaXRoSGlzdG9yeSh0aGlzLnNvdXJjZVR5cGUsIHNvdXJjZUlkLCBpc3N1ZUlkKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuXG50eXBlIExvYWRpbmdEYXRhID0ge1xuICBkYXRlOiBEYXRlVGltZTtcbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21ldGFxczItY291bnRzLXdpdGgtaGlzdG9yeScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBNYXRDYXJkTW9kdWxlLFxuICAgIE1hdENhcmQsXG4gICAgTWF0Q2FyZEhlYWRlcixcbiAgICBNYXRDYXJkVGl0bGUsXG4gICAgTWF0Q2FyZENvbnRlbnQsXG4gICAgTWF0VG9vbHRpcCxcbiAgICBNYXRUYWJsZU1vZHVsZSxcbiAgICBNYXRUYWJsZSxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgTWF0SGVhZGVyUm93LFxuICAgIE1hdEhlYWRlclJvd0RlZixcbiAgICBNYXRSb3csXG4gICAgTWF0Um93RGVmLFxuICAgIE5nRm9yT2YsXG4gICAgRGF0ZXBpY2tlckNvbXBvbmVudCxcbiAgICBNYXRJY29uLFxuICAgIE5nSWYsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgTWF0U2xpZGVUb2dnbGUsXG4gICAgQXN5bmNQaXBlLFxuICAgIFByb2dyZXNzU3Bpbm5lckNvbXBvbmVudCxcbiAgICBNYXRSaXBwbGUsXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3VudHMtd2l0aC1oaXN0b3J5LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2NvdW50cy13aXRoLWhpc3RvcnkuY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBDb3VudHNXaXRoSGlzdG9yeUNvbXBvbmVudFxuICBleHRlbmRzIEJhc2VIaXN0b3JpY0RhdGFUYWJsZURpcmVjdGl2ZTxMb2FkaW5nRGF0YSwgKGZpbHRlcnM6IEZpbHRlcltdKSA9PiBPYnNlcnZhYmxlPE1hdHJpeFdpdGhDb3VudHM+PlxuICBpbXBsZW1lbnRzIE9uSW5pdFxue1xuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmFwaU1ldGhvZCA/Pz0gJ2dldE1hdGVyaWFsVHlwZUNvdW50c0J5UmVwbGljYXRpb25Tb3VyY2UnO1xuXG4gICAgdGhpcy5lbmRWYWx1ZXMkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdlbmRWYWx1ZXMkLnN1YnNjcmliZSBldmVudCcpO1xuICAgIH0pO1xuICAgIGNvbnNvbGUuZGVidWcoJ2VuZFZhbHVlcyBzdWJzY3JpYmVkJyk7XG5cbiAgICB0aGlzLnJhbmdlLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoZGF0YSkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ3JhbmdlLnZhbHVlQ2hhbmdlcycsIGRhdGEpO1xuICAgICAgICAgIHRoaXMuZGF0YUZvclBhc3REYXRhJC5uZXh0KHsgZGF0ZTogZGF0YS5zdGFydCB9KTtcbiAgICAgICAgICB0aGlzLmRhdGFGb3JSZWNlbnREYXRhJC5uZXh0KHsgZGF0ZTogZGF0YS5lbmQgfSk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5pc0hpc3RvcnlFbmFibGVkJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoZW5hYmxlZCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ2lzSGlzdG9yeUVuYWJsZWQnLCBlbmFibGVkKTtcbiAgICAgICAgICB0aGlzLnJhbmdlLmNvbnRyb2xzLmVuZC5yZXNldCgpO1xuICAgICAgICAgIGlmICghZW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5zdGFydERhdGVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0VmFsdWVzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnJhbmdlLmNvbnRyb2xzLnN0YXJ0LnJlc2V0KCk7XG4gICAgICAgICAgaWYgKCF0aGlzLnRpbWVGaWx0ZXJMb2FkZWQoKSkge1xuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZygnaXNUaW1lRmlsdGVyTG9hZGVkJywgJ2ZhbHNlJyk7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0RGF0ZVN1YnNjcmlwdGlvbiA9IHRoaXMudGltZXJhbmdlU3RhcnQkXG4gICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ3N0YXJ0RGF0ZVN1YnNjcmlwdGlvbicsICdkb25lJyk7XG4gICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0VmFsdWVzU3Vic2NyaXB0aW9uID0gdGhpcy5zdGFydFZhbHVlcyQuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLnJhbmdlLmNvbnRyb2xzLnN0YXJ0LnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRWYWx1ZXNTdWJzY3JpcHRpb24gPSB0aGlzLnN0YXJ0VmFsdWVzJC5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMucmFuZ2UuY29udHJvbHMuc3RhcnQucmVzZXQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldENvdW50QnlEYXRlKGRhdGE6IExvYWRpbmdEYXRhKTogT2JzZXJ2YWJsZTxNYXRyaXhXaXRoQ291bnRzPiB7XG4gICAgY29uc29sZS5kZWJ1ZygnZ2V0Q291bnRCeURhdGUnLCBkYXRhKTtcbiAgICBjb25zdCBmaWx0ZXI6IEZpbHRlciA9IHtcbiAgICAgIGZpZWxkOiAnYXNPZicsXG4gICAgICB2YWx1ZXM6IFt7IGlkOiBkYXRhLmRhdGUudG9JU08oeyBpbmNsdWRlT2Zmc2V0OiBmYWxzZSB9KSEsIGxhYmVsOiAnJyB9XSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIG9mKHVuZGVmaW5lZCkucGlwZShcbiAgICAgIHRhcCgoKSA9PiB0aGlzLmxvYWRpbmdDb3VudC51cGRhdGUoKGl0KSA9PiBpdCArIDEpKSxcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGFBcGlbdGhpcy5hcGlNZXRob2RdKFtmaWx0ZXJdKS5waXBlKGZpbmFsaXplKCgpID0+IHRoaXMubG9hZGluZ0NvdW50LnVwZGF0ZSgoaXQpID0+IGl0IC0gMSkpKTtcbiAgICAgIH0pLFxuICAgICAgbWFwKChyZXNwb25zZSkgPT4gKHtcbiAgICAgICAgLi4ucmVzcG9uc2UsXG4gICAgICAgIHJvd3M6IHJlc3BvbnNlLnJvd3MudG9Tb3J0ZWQoKGEsIGIpID0+IGEubWV0YS5sYWJlbC5sb2NhbGVDb21wYXJlKGIubWV0YS5sYWJlbCkpLFxuICAgICAgfSkpXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB2YWxpZGF0ZUxvYWRpbmdEYXRhKGRhdGE6IFBhcnRpYWw8TG9hZGluZ0RhdGE+KTogZGF0YSBpcyBMb2FkaW5nRGF0YSB7XG4gICAgY29uc29sZS5kZWJ1ZygndmFsaWRhdGVMb2FkaW5nRGF0YScsIGRhdGEsIGRhdGEuZGF0ZT8uaXNWYWxpZCk7XG4gICAgcmV0dXJuIGRhdGEuZGF0ZT8uaXNWYWxpZCA/PyBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb21wYXJlTG9hZGluZ0RhdGFFcXVhbChhOiBMb2FkaW5nRGF0YSwgYjogTG9hZGluZ0RhdGEpOiBib29sZWFuIHtcbiAgICByZXR1cm4gYS5kYXRlLmVxdWFscyhiLmRhdGUpO1xuICB9XG59XG4iLCI8bWF0LWNhcmQgYXBwZWFyYW5jZT1cInJhaXNlZFwiPlxuICA8bWF0LWNhcmQtaGVhZGVyICpuZ0lmPVwicGFnZVRpdGxlXCI+XG4gICAgPG1hdC1jYXJkLXRpdGxlIGRhdGEtdGVzdC1pZD1cInBhZ2UtdGl0bGVcIj5cbiAgICAgIFF1YWxpdMOkdHNtZXRyaWs6IHt7IHBhZ2VUaXRsZSB8IHRyYW5zbGF0ZSB9fXt7IGlzTG9hZGluZygpID8gXCI6IExhZGUgbmV1ZSBEYXRlbi5cIiA6IFwiXCIgfX1cbiAgICA8L21hdC1jYXJkLXRpdGxlPlxuICA8L21hdC1jYXJkLWhlYWRlcj5cbiAgPCEtLSBjb25zaWRlciB0byBwdXQgdGhlIGZpbHRlciBpbiB0aGUgdGFibGUgaGVhZGVyIHRvIGF2b2lkIHRoYXQgaXQgaXMgc2Nyb2xsZWQgb3V0IG9mIHZpZXctLT5cbiAgPCEtLSBzaG93IHRoZSBmaWx0ZXIgYWZ0ZXIgdGhlIHZhbHVlcyBhcmUgbG9hZGVkIHRvIGF2b2lkIGxvYWRpbmcgY3VycmVudCBkYXRhIHR3aWNlIC0tPlxuICA8bWF0LWNhcmQtY29udGVudCBjbGFzcz1cInRvb2xiYXJcIj5cbiAgICA8bWV0YXFzMi1kYXRlcGlja2VyIHN0eWxlPVwiZGlzcGxheTogaW5saW5lLWJsb2NrXCIgbWF0UmlwcGxlIFtkaXNhYmxlZF09XCJpc0xvYWRpbmcoKSB8fCAhaXNIaXN0b3J5RW5hYmxlZCgpXCIgW2lucHV0R3JvdXBdPVwicmFuZ2VcIiAqbmdJZj1cInRpbWVGaWx0ZXJMb2FkZWQoKSAmJiBpc0hpc3RvcnlFbmFibGVkKClcIj48L21ldGFxczItZGF0ZXBpY2tlcj5cbiAgICA8ZGl2IHN0eWxlPVwiZmxleDogMSAxIGF1dG9cIj48L2Rpdj5cbiAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbbmdNb2RlbF09XCJpc0hpc3RvcnlFbmFibGVkKClcIiAobmdNb2RlbENoYW5nZSk9XCJpc0hpc3RvcnlFbmFibGVkLnNldCgkZXZlbnQpXCIgW2Rpc2FibGVkXT1cImlzTG9hZGluZygpXCI+XG4gICAgICA8bGFiZWw+WmVpZ2UgaGlzdG9yaXNjaGUgRGF0ZW48L2xhYmVsPlxuICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgPC9tYXQtY2FyZC1jb250ZW50PlxuPC9tYXQtY2FyZD5cbjxtYXQtY2FyZD5cbiAgPG1ldGFxczItcHJvZ3Jlc3Mtc3Bpbm5lciBbZGlzcGxheVByb2dyZXNzU3Bpbm5lcl09XCJpc0xvYWRpbmcoKVwiPjwvbWV0YXFzMi1wcm9ncmVzcy1zcGlubmVyPlxuICA8dGFibGUgW2NsYXNzLndoaWxlLWxvYWRpbmddPVwiaXNMb2FkaW5nKClcIiBtYXQtdGFibGUgW2RhdGFTb3VyY2VdPVwicmVjZW50VHlwZUNvdW50JC52YWx1ZS5yb3dzXCJcbiAgICAgICAgIGNsYXNzPVwicXVhbGl0eS1tYXRyaXhcIj5cbiAgICA8IS0tIERlZmluZSBjb2x1bW5zIG9mIHRhYmxlIC0tPlxuICAgIDwhLS0gUm93IEhlYWRlciBDb2x1bW4gLS0+XG4gICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJsYWJlbC1jb2xcIiBzdGlja3k+XG4gICAgICA8dGggW2F0dHIucm93c3Bhbl09XCJpc0hpc3RvcnlFbmFibGVkKCkgPyAnMicgOiAnMSdcIiBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XG4gICAgICAgIDxkaXY+UXVlbGxlPC9kaXY+XG4gICAgICA8L3RoPlxuICAgICAgPHRkXG4gICAgICAgIG1hdC1jZWxsXG4gICAgICAgICptYXRDZWxsRGVmPVwibGV0IHJvd1wiXG4gICAgICAgIFttYXRUb29sdGlwXT1cInJvdy5tZXRhLmFsdF9sYWJlbFwiXG4gICAgICAgIGNsYXNzPVwibGFiZWwtY29sIG1hdC1jZWxsLWxldmVsLXt7cm93Lm1ldGEubGV2ZWwgKyAxfX1cIlxuICAgICAgPlxuICAgICAgICB7eyByb3cubWV0YS5sYWJlbCB9fVxuICAgICAgPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8IS0tIG9uZSBjb2x1bW4gZm9yIGVhY2ggdHlwZSAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2wgb2YgKHJlY2VudFR5cGVDb3VudCQgfCBhc3luYyk/LmNvbHVtbnM7IHRyYWNrQnk6Y29sdW1uSWRlbnRcIlxuICAgICAgICAgICAgICAgICAgW21hdENvbHVtbkRlZl09XCJjb2wuaWQgKyAnX3R5cGUnXCI+XG4gICAgICA8dGggW2F0dHIuY29sc3Bhbl09XCJpc0hpc3RvcnlFbmFibGVkKCkgPyAnMicgOiAnMSdcIiBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgW21hdFRvb2x0aXBdPVwiY29sLmxhYmVsXCI+XG4gICAgICAgIHt7IGNvbHVtblRyYW5zbGF0aW9ua2V5ID8gKGNvbHVtblRyYW5zbGF0aW9ua2V5ICsgY29sLmxhYmVsIHwgdHJhbnNsYXRlKSA6IGNvbC5sYWJlbCB9fVxuICAgICAgPC90aD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8IS0tIG9uZSBjb2x1bW4gZm9yIGVhY2ggdHlwZSBmb3IgdGhlIG1vc3QgY3VycmVudCBkYXRlLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIChyZWNlbnRUeXBlQ291bnQkIHwgYXN5bmMpPy5jb2x1bW5zOyB0cmFja0J5OmNvbHVtbklkZW50XCJcbiAgICAgICAgICAgICAgICAgIFttYXRDb2x1bW5EZWZdPVwiY29sLmlkICsgJ19yZWNlbnQnXCI+XG4gICAgICA8dGggY2xhc3M9XCJyZWNlbnQtZGF0YS1jZWxsXCIgbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmXG4gICAgICAgICAgbWF0VG9vbHRpcD1cIm5vIHRvb2x0aXBcIj57eyByYW5nZS5jb250cm9scy5lbmQudmFsdWUudG9Mb2NhbGVTdHJpbmcoRGF0ZVRpbWUuREFURV9TSE9SVCkgfX1cbiAgICAgIDwvdGg+XG4gICAgICA8dGQgY2xhc3M9XCJyZWNlbnQtZGF0YS1jZWxsXCIgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCI+XG4gICAgICAgIDxhIFthdHRyLmhyZWZdPVwib3BlbkluRWRpdG9yKHJvdy5tZXRhLmlkLCBjb2wuaWQpIHwgYXN5bmNcIiB0YXJnZXQ9XCJlZGl0b3JfZnJvbnRlbmRcIj57eyByb3cuY291bnRzW2NvbC5pZF0gPz8gJ+KAkycgfX08L2E+XG4gICAgICA8L3RkPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwhLS0gb25lIGNvbHVtbiBmb3IgZWFjaCB0eXBlIGZvciB0aGUgb2xkZXIgZGF0ZS0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbCBvZiAocmVjZW50VHlwZUNvdW50JCB8IGFzeW5jKT8uY29sdW1uczsgdHJhY2tCeTpjb2x1bW5JZGVudFwiXG4gICAgICAgICAgICAgICAgICBbbWF0Q29sdW1uRGVmXT1cImNvbC5pZCArICdfcGFzdCdcIj5cbiAgICAgIDx0aCBjbGFzcz1cInBhc3QtZGF0YS1jZWxsXCIgbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdFRvb2x0aXA9XCJubyB0b29sdGlwXCI+XG4gICAgICAgIHt7IChwYXN0VHlwZUNvdW50JCB8IGFzeW5jKT8ucm93cz8ubGVuZ3RoID8gcmFuZ2UuY29udHJvbHMuc3RhcnQudmFsdWUudG9Mb2NhbGVTdHJpbmcoRGF0ZVRpbWUuREFURV9TSE9SVCkgOiAnbm8gcGFzdCBkYXRhJyB9fVxuICAgICAgPC90aD5cbiAgICAgIDx0ZCBjbGFzcz1cInBhc3QtZGF0YS1jZWxsXCIgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93O1wiID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihwYXN0VHlwZUNvdW50JCB8IGFzeW5jKT8ucm93cz8ubGVuZ3RoICYmIHBhc3RUeXBlQ291bnQocm93LCBjb2wuaWQpIGFzIHRyZW5kXCI+XG4gICAgICAgICAgPHNwYW4gW2NsYXNzXT1cInRyZW5kLnRyZW5kXCI+IHt7IHRyZW5kLnZhbHVlID8/ICfigJMnIH19XG4gICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJ0cmVuZC52YWx1ZVwiIGFyaWEtaGlkZGVuPVwiZmFsc2VcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInRyZW5kLnRyZW5kXCIgW2ZvbnRJY29uXT1cInRyZW5kLnRyZW5kIVwiIC8+PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2RrLXZpc3VhbGx5LWhpZGRlblwiPnt7IHRyZW5kLnRyZW5kIH19PC9zcGFuPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPCEtLSBnZW5lcmF0ZSBhY3R1YWwgdGFibGUgLS0+XG4gICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJbJ2xhYmVsLWNvbCddLmNvbmNhdCh0eXBlQ29sdW1ucygpKTsgc3RpY2t5OnRydWU7XCI+PC90cj5cbiAgICA8dHIgW2hpZGRlbl09XCIhaXNIaXN0b3J5RW5hYmxlZCgpXCIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImFsbENvbHVtbnMoKTsgc3RpY2t5OiB0cnVlO1wiPjwvdHI+XG4gICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IFsnbGFiZWwtY29sJ10uY29uY2F0KGFsbENvbHVtbnMoKSlcIj48L3RyPlxuXG4gIDwvdGFibGU+XG48L21hdC1jYXJkPlxuIl19
203
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRzLXdpdGgtaGlzdG9yeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1tZXRhLXdpZGdldHMtbGliL3NyYy9saWIvY291bnRzLXdpdGgtaGlzdG9yeS9jb3VudHMtd2l0aC1oaXN0b3J5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1ldGEtd2lkZ2V0cy1saWIvc3JjL2xpYi9jb3VudHMtd2l0aC1oaXN0b3J5L2NvdW50cy13aXRoLWhpc3RvcnkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRyxPQUFPLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdHLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNySCxPQUFPLEVBQUUsZUFBZSxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQWtCLE1BQU0sTUFBTSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFckQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNqQyxP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LHdCQUF3Qjt3QkFDeEIsU0FBUztxQkFDViIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIERlc3Ryb3lSZWYsIERpcmVjdGl2ZSwgaW5qZWN0LCBJbnB1dCwgT25Jbml0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdENhcmQsIE1hdENhcmRDb250ZW50LCBNYXRDYXJkSGVhZGVyLCBNYXRDYXJkTW9kdWxlLCBNYXRDYXJkVGl0bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jYXJkJztcbmltcG9ydCB7IE1hdFRvb2x0aXAgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7IE1hdEhlYWRlclJvdywgTWF0SGVhZGVyUm93RGVmLCBNYXRSb3csIE1hdFJvd0RlZiwgTWF0VGFibGUsIE1hdFRhYmxlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgVW5zdWJzY3JpYmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0Zvck9mLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1ldGFBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vbWV0YS1hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBGaWx0ZXIsIE1hdHJpeFJvd1dpdGhDb3VudHMsIE1hdHJpeFdpdGhDb3VudHMsIFF1YWxpdHlNYXRyaXhIZWFkZXIgfSBmcm9tICcuLi9qYXZhLWFwaSc7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gJ2x1eG9uJztcbmltcG9ydCB7XG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIGZpbmFsaXplLFxuICBtYXAsXG4gIHNraXBXaGlsZSxcbiAgc3dpdGNoTWFwLFxuICB0YWtlLFxuICB0YXAsXG4gIHRocm90dGxlVGltZSxcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEYXRlcGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9maWx0ZXIvZGF0ZXBpY2tlci9kYXRlcGlja2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXRJY29uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQsIHRvT2JzZXJ2YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IE1hdFNsaWRlVG9nZ2xlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGUtdG9nZ2xlJztcbmltcG9ydCB7IFByb2dyZXNzU3Bpbm5lckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvbG9hZGluZ19pbmRpY2F0b3IvcHJvZ3Jlc3Mtc3Bpbm5lci9wcm9ncmVzcy1zcGlubmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFZGl0b3JpYWxMaW5rU2VydmljZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvZWRpdG9yaWFsLWxpbmstc2VydmljZS9lZGl0b3JpYWwtbGluay5zZXJ2aWNlJztcbmltcG9ydCB7IE1hdFJpcHBsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuXG5leHBvcnQgdHlwZSBQaWNrS2V5c0J5UHJvcGVydHlUeXBlPFRPYmplY3QgZXh0ZW5kcyBvYmplY3QsIFRQcm9wZXJ0eVR5cGU+ID0ge1xuICBbVEtleSBpbiBrZXlvZiBUT2JqZWN0XTogVE9iamVjdFtUS2V5XSBleHRlbmRzIFRQcm9wZXJ0eVR5cGUgPyBUS2V5IDogbmV2ZXI7XG59W2tleW9mIFRPYmplY3RdO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlSGlzdG9yaWNEYXRhVGFibGVEaXJlY3RpdmU8XG4gIFRMb2FkaW5nRGF0YSBleHRlbmRzIG9iamVjdCxcbiAgVE1ldGhvZFR5cGUgZXh0ZW5kcyBNZXRhQXBpU2VydmljZVtrZXlvZiBNZXRhQXBpU2VydmljZV0gJiBGdW5jdGlvblxuPiB7XG4gIHByb3RlY3RlZCByZWFkb25seSBtZXRhQXBpID0gaW5qZWN0KE1ldGFBcGlTZXJ2aWNlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIHByb3RlY3RlZCByZWFkb25seSBsaW5rU2VydmljZSA9IGluamVjdChFZGl0b3JpYWxMaW5rU2VydmljZSk7XG5cbiAgQElucHV0KClcbiAgYXBpTWV0aG9kOiBQaWNrS2V5c0J5UHJvcGVydHlUeXBlPE1ldGFBcGlTZXJ2aWNlLCBUTWV0aG9kVHlwZT47XG4gIEBJbnB1dCgpXG4gIGNvbHVtblRyYW5zbGF0aW9ua2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KClcbiAgcGFnZVRpdGxlOiBzdHJpbmc7XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIHNvdXJjZVR5cGU6ICdyZXBsaWNhdGlvblNvdXJjZScgfCAnY29sbGVjdGlvbic7XG5cbiAgcHJvdGVjdGVkIGxvYWRpbmdDb3VudCA9IHNpZ25hbCgwKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzTG9hZGluZyA9IGNvbXB1dGVkKCgpID0+IHRoaXMubG9hZGluZ0NvdW50KCkgPiAwKTtcbiAgcmVhZG9ubHkgaXNIaXN0b3J5RW5hYmxlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBpc0hpc3RvcnlFbmFibGVkJCA9IHRvT2JzZXJ2YWJsZSh0aGlzLmlzSGlzdG9yeUVuYWJsZWQpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSB0aW1lRmlsdGVyTG9hZGVkID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvdGVjdGVkIHJlY2VudFR5cGVDb3VudCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHsgY29sdW1uczogW10sIHJvd3M6IFtdIH0gYXMgTWF0cml4V2l0aENvdW50cyk7XG4gIHByb3RlY3RlZCBwYXN0VHlwZUNvdW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3QoeyBjb2x1bW5zOiBbXSwgcm93czogW10gfSBhcyBNYXRyaXhXaXRoQ291bnRzKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IERhdGVUaW1lID0gRGF0ZVRpbWU7XG4gIHB1YmxpYyBjb2x1bW5zID0gc2lnbmFsKFtdIGFzIEFycmF5PFF1YWxpdHlNYXRyaXhIZWFkZXI+KTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGF0YUZvclBhc3REYXRhJCA9IG5ldyBTdWJqZWN0PFBhcnRpYWw8VExvYWRpbmdEYXRhPj4oKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRhdGFGb3JSZWNlbnREYXRhJCA9IG5ldyBTdWJqZWN0PFBhcnRpYWw8VExvYWRpbmdEYXRhPj4oKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3RhcnRWYWx1ZXMkID0gdGhpcy5kYXRhRm9yUGFzdERhdGEkLnBpcGUoXG4gICAgZmlsdGVyKChkYXRhKSA9PiB0aGlzLnZhbGlkYXRlTG9hZGluZ0RhdGEoZGF0YSkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiB0aGlzLmNvbXBhcmVMb2FkaW5nRGF0YUVxdWFsKGEsIGIpKSxcbiAgICB0aHJvdHRsZVRpbWUoNTAwKSxcbiAgICBzd2l0Y2hNYXAoKHN0YXJ0KSA9PiB0aGlzLmdldENvdW50QnlEYXRlKHN0YXJ0KSksXG4gICAgdGFwKChpdCkgPT4gdGhpcy5wYXN0VHlwZUNvdW50JC5uZXh0KGl0KSksXG4gICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGVuZFZhbHVlcyQgPSB0aGlzLmRhdGFGb3JSZWNlbnREYXRhJC5waXBlKFxuICAgIGZpbHRlcigoZGF0YSkgPT4gdGhpcy52YWxpZGF0ZUxvYWRpbmdEYXRhKGRhdGEpKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgoYSwgYikgPT4gdGhpcy5jb21wYXJlTG9hZGluZ0RhdGFFcXVhbChhLCBiKSksXG4gICAgdGhyb3R0bGVUaW1lKDUwMCksXG4gICAgc3dpdGNoTWFwKChlbmQpID0+IHRoaXMuZ2V0Q291bnRCeURhdGUoZW5kKSksXG4gICAgdGFwKChpdCkgPT4gdGhpcy5yZWNlbnRUeXBlQ291bnQkLm5leHQoaXQpKSxcbiAgICB0YXAoKGl0KSA9PiB0aGlzLmNvbHVtbnMuc2V0KGl0LmNvbHVtbnMuc2xpY2UoKSkpLFxuICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICk7XG5cbiAgcHJvdGVjdGVkIHN0YXJ0RGF0ZVN1YnNjcmlwdGlvbjogVW5zdWJzY3JpYmFibGUgfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCBzdGFydFZhbHVlc1N1YnNjcmlwdGlvbjogVW5zdWJzY3JpYmFibGUgfCB1bmRlZmluZWQ7XG5cbiAgLyogSW4gdGhpcyB3aWRnZXQncyBiYWNrZW5kIHdlIGRvIGhhdmUgZGF0YSBmb3IgdG9kYXlcbiAgICogdGhlcmVmb3JlIHdlIHNldCB0aGUgZW5kIGRhdGUgdG8gdG9kYXkgYW5kIHVzZSB0aGUgdGltZXJhbmdlKCkgZW5kcG9pbnQgdG8gb25seSBzZXQgdGhlIHN0YXJ0IGRhdGVcbiAgICovXG4gIHJlYWRvbmx5IHJhbmdlOiBGb3JtR3JvdXA8e1xuICAgIHN0YXJ0OiBGb3JtQ29udHJvbDxEYXRlVGltZTxib29sZWFuPj47XG4gICAgZW5kOiBGb3JtQ29udHJvbDxEYXRlVGltZTxib29sZWFuPj47XG4gIH0+ID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgc3RhcnQ6IG5ldyBGb3JtQ29udHJvbCgpLFxuICAgIGVuZDogbmV3IEZvcm1Db250cm9sKERhdGVUaW1lLnV0YygpLnN0YXJ0T2YoJ2RheScpLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pLFxuICB9KTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdGltZXJhbmdlU3RhcnQkID0gb2YodW5kZWZpbmVkKS5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmdldEF2YWlsYWJsZURhdGVSYW5nZSgpKSxcbiAgICB0YWtlKDEpLFxuICAgIG1hcCgocmFuZ2VGaWx0ZXIpID0+IHRoaXMuZ2V0U3RhcnREYXRlT2ZSYW5nZShyYW5nZUZpbHRlcikpLFxuICAgIHRhcCgoc3RhcnREYXRlKSA9PiB7XG4gICAgICAvL3RoaXMgaXMgdG8gaGF2ZSBhIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBzdGFydCBkYXRlID0+IHRoZSBtaW4gZGF0ZSBvZiB0aGUgcmFuZ2VcbiAgICAgIHRoaXMucmFuZ2Uuc2V0Q29udHJvbCgnc3RhcnQnLCBuZXcgRm9ybUNvbnRyb2w8RGF0ZVRpbWU8dHJ1ZT4+KHN0YXJ0RGF0ZSwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KSk7XG4gICAgICB0aGlzLnRpbWVGaWx0ZXJMb2FkZWQuc2V0KHRydWUpO1xuICAgIH0pLFxuICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICk7XG5cbiAgcmVhZG9ubHkgYWxsQ29sdW1ucyA9IGNvbXB1dGVkPEFycmF5PHN0cmluZz4+KCgpID0+IHtcbiAgICBpZiAoIXRoaXMuaXNIaXN0b3J5RW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZWNlbnRDb2x1bW5zKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnBhc3RDb2x1bW5zKCkuZmxhdE1hcCgoZSwgaSkgPT4gW2UsIHRoaXMucmVjZW50Q29sdW1ucygpW2ldXSk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHR5cGVDb2x1bW5zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbnMoKS5tYXAoKGMpID0+IGMuaWQgKyAnX3R5cGUnKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgcmVjZW50Q29sdW1ucyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zKCkubWFwKChjKSA9PiBjLmlkICsgJ19yZWNlbnQnKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgcGFzdENvbHVtbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucygpLm1hcCgoYykgPT4gYy5pZCArICdfcGFzdCcpO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0Q291bnRCeURhdGUoZGF0ZTogVExvYWRpbmdEYXRhKTogT2JzZXJ2YWJsZTxNYXRyaXhXaXRoQ291bnRzPjtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHZhbGlkYXRlTG9hZGluZ0RhdGEoZGF0YTogUGFydGlhbDxUTG9hZGluZ0RhdGE+KTogZGF0YSBpcyBUTG9hZGluZ0RhdGE7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBjb21wYXJlTG9hZGluZ0RhdGFFcXVhbChhOiBUTG9hZGluZ0RhdGEsIGI6IFRMb2FkaW5nRGF0YSk6IGJvb2xlYW47XG5cbiAgcHJvdGVjdGVkIGdldEF2YWlsYWJsZURhdGVSYW5nZSgpIHtcbiAgICByZXR1cm4gb2YodW5kZWZpbmVkKS5waXBlKFxuICAgICAgdGFwKCgpID0+IHRoaXMubG9hZGluZ0NvdW50LnVwZGF0ZSgoaXQpID0+IGl0ICsgMSkpLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMubWV0YUFwaS5nZXRUaW1lcmFuZ2VGaWx0ZXIoKSksXG4gICAgICBmaWx0ZXIoKGZpbHRlcik6IGZpbHRlciBpcyBGaWx0ZXIgPT4gZmlsdGVyICE9IG51bGwpLFxuICAgICAgdGFwKCgpID0+IHRoaXMubG9hZGluZ0NvdW50LnVwZGF0ZSgoaXQpID0+IGl0IC0gMSkpXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGdldFN0YXJ0RGF0ZU9mUmFuZ2UocmFuZ2VGaWx0ZXI6IEZpbHRlcikge1xuICAgIHJldHVybiBEYXRlVGltZS5mcm9tSVNPKHJhbmdlRmlsdGVyLnZhbHVlcy5maW5kKCh2KSA9PiB2LmlkID09PSAncmFuZ2VTdGFydCcpPy5sYWJlbCEsIHtcbiAgICAgIHpvbmU6ICd1dGMnLFxuICAgIH0pLnN0YXJ0T2YoJ2RheScpIGFzIERhdGVUaW1lPHRydWU+O1xuICB9XG5cbiAgcHVibGljIGNvbHVtbklkZW50KF9pbmRleDogbnVtYmVyLCBjb2w6IFF1YWxpdHlNYXRyaXhIZWFkZXIpIHtcbiAgICByZXR1cm4gY29sLmlkO1xuICB9XG5cbiAgcHVibGljIHBhc3RUeXBlQ291bnQocm93OiBNYXRyaXhSb3dXaXRoQ291bnRzLCBjb2x1bW5pZDogc3RyaW5nKTogeyBkZWx0YT86IG51bWJlcjsgdHJlbmQ/OiBzdHJpbmc7IHZhbHVlPzogbnVtYmVyIH0ge1xuICAgIGlmICghdGhpcy5wYXN0VHlwZUNvdW50JC52YWx1ZS5yb3dzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCBwYXN0X3JvdyA9IHRoaXMucGFzdFR5cGVDb3VudCQudmFsdWUucm93cy5maW5kKChwcikgPT4gcHIubWV0YS5pZCA9PSByb3cubWV0YS5pZCk7XG4gICAgY29uc3QgcGFzdF9jb2x1bW4gPSB0aGlzLnBhc3RUeXBlQ291bnQkLnZhbHVlLmNvbHVtbnMuZmluZCgoYykgPT4gYy5pZCA9PSBjb2x1bW5pZCk7XG4gICAgaWYgKCFwYXN0X3JvdyB8fCAhcGFzdF9jb2x1bW4pIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50VmFsdWUgPSByb3cuY291bnRzW2NvbHVtbmlkXTtcbiAgICBjb25zdCBwYXN0VmFsdWUgPSBwYXN0X3Jvdy5jb3VudHNbY29sdW1uaWRdO1xuXG4gICAgY29uc3QgZGVsdGEgPSAoY3VycmVudFZhbHVlIHx8IDApIC0gKHBhc3RWYWx1ZSB8fCAwKTtcbiAgICBjb25zdCB0cmVuZCA9IGRlbHRhID09PSAwID8gJ3RyZW5kaW5nX2ZsYXQnIDogZGVsdGEgPCAwID8gJ3RyZW5kaW5nX2Rvd24nIDogJ3RyZW5kaW5nX3VwJztcbiAgICByZXR1cm4geyBkZWx0YSwgdHJlbmQsIHZhbHVlOiBwYXN0VmFsdWUgfTtcbiAgfVxuXG4gIHB1YmxpYyBvcGVuSW5FZGl0b3Ioc291cmNlSWQ6IHN0cmluZywgaXNzdWVJZDogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuc291cmNlVHlwZSA9PT0gJ3JlcGxpY2F0aW9uU291cmNlJykge1xuICAgICAgLy8gZmluZCB0aGUgbG9uZyBuYW1lIGZvciB0aGUgc291cmNlXG4gICAgICBzb3VyY2VJZCA9IHRoaXMucmVjZW50VHlwZUNvdW50JC52YWx1ZS5yb3dzLmZpbmQoKHIpID0+IHIubWV0YS5pZCA9PT0gc291cmNlSWQpPy5tZXRhLmxhYmVsIHx8IHNvdXJjZUlkO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5saW5rU2VydmljZS50eXBlc0xvYWRlZCQucGlwZShcbiAgICAgIHNraXBXaGlsZSgobG9hZGVkKSA9PiAhbG9hZGVkKSxcbiAgICAgIHRha2UoMSksXG4gICAgICBtYXAoKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5saW5rU2VydmljZS5jcmVhdGVMaW5rRm9yQ291bnRzV2l0aEhpc3RvcnkodGhpcy5zb3VyY2VUeXBlLCBzb3VyY2VJZCwgaXNzdWVJZCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cblxudHlwZSBMb2FkaW5nRGF0YSA9IHtcbiAgZGF0ZTogRGF0ZVRpbWU7XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtZXRhcXMyLWNvdW50cy13aXRoLWhpc3RvcnknLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTWF0Q2FyZE1vZHVsZSxcbiAgICBNYXRDYXJkLFxuICAgIE1hdENhcmRIZWFkZXIsXG4gICAgTWF0Q2FyZFRpdGxlLFxuICAgIE1hdENhcmRDb250ZW50LFxuICAgIE1hdFRvb2x0aXAsXG4gICAgTWF0VGFibGVNb2R1bGUsXG4gICAgTWF0VGFibGUsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIE1hdEhlYWRlclJvdyxcbiAgICBNYXRIZWFkZXJSb3dEZWYsXG4gICAgTWF0Um93LFxuICAgIE1hdFJvd0RlZixcbiAgICBOZ0Zvck9mLFxuICAgIERhdGVwaWNrZXJDb21wb25lbnQsXG4gICAgTWF0SWNvbixcbiAgICBOZ0lmLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIE1hdFNsaWRlVG9nZ2xlLFxuICAgIEFzeW5jUGlwZSxcbiAgICBQcm9ncmVzc1NwaW5uZXJDb21wb25lbnQsXG4gICAgTWF0UmlwcGxlLFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vY291bnRzLXdpdGgtaGlzdG9yeS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9jb3VudHMtd2l0aC1oaXN0b3J5LmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgQ291bnRzV2l0aEhpc3RvcnlDb21wb25lbnRcbiAgZXh0ZW5kcyBCYXNlSGlzdG9yaWNEYXRhVGFibGVEaXJlY3RpdmU8TG9hZGluZ0RhdGEsIChmaWx0ZXJzOiBGaWx0ZXJbXSkgPT4gT2JzZXJ2YWJsZTxNYXRyaXhXaXRoQ291bnRzPj5cbiAgaW1wbGVtZW50cyBPbkluaXRcbntcbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5hcGlNZXRob2QgPz89ICdnZXRNYXRlcmlhbFR5cGVDb3VudHNCeVJlcGxpY2F0aW9uU291cmNlJztcblxuICAgIHRoaXMuZW5kVmFsdWVzJC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMucmFuZ2UudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChkYXRhKSA9PiB7XG4gICAgICAgICAgdGhpcy5kYXRhRm9yUGFzdERhdGEkLm5leHQoeyBkYXRlOiBkYXRhLnN0YXJ0IH0pO1xuICAgICAgICAgIHRoaXMuZGF0YUZvclJlY2VudERhdGEkLm5leHQoeyBkYXRlOiBkYXRhLmVuZCB9KTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLmlzSGlzdG9yeUVuYWJsZWQkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChlbmFibGVkKSA9PiB7XG4gICAgICAgICAgdGhpcy5yYW5nZS5jb250cm9scy5lbmQucmVzZXQoKTtcbiAgICAgICAgICBpZiAoIWVuYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5zdGFydFZhbHVlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5yYW5nZS5jb250cm9scy5zdGFydC5yZXNldCgpO1xuICAgICAgICAgIGlmICghdGhpcy50aW1lRmlsdGVyTG9hZGVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlU3Vic2NyaXB0aW9uID0gdGhpcy50aW1lcmFuZ2VTdGFydCRcbiAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydFZhbHVlc1N1YnNjcmlwdGlvbiA9IHRoaXMuc3RhcnRWYWx1ZXMkLnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5yYW5nZS5jb250cm9scy5zdGFydC5yZXNldCgpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0VmFsdWVzU3Vic2NyaXB0aW9uID0gdGhpcy5zdGFydFZhbHVlcyQuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLnJhbmdlLmNvbnRyb2xzLnN0YXJ0LnJlc2V0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRDb3VudEJ5RGF0ZShkYXRhOiBMb2FkaW5nRGF0YSk6IE9ic2VydmFibGU8TWF0cml4V2l0aENvdW50cz4ge1xuICAgIGNvbnN0IGZpbHRlcjogRmlsdGVyID0ge1xuICAgICAgZmllbGQ6ICdhc09mJyxcbiAgICAgIHZhbHVlczogW3sgaWQ6IGRhdGEuZGF0ZS50b0lTTyh7IGluY2x1ZGVPZmZzZXQ6IGZhbHNlIH0pISwgbGFiZWw6ICcnIH1dLFxuICAgIH07XG5cbiAgICByZXR1cm4gb2YodW5kZWZpbmVkKS5waXBlKFxuICAgICAgdGFwKCgpID0+IHRoaXMubG9hZGluZ0NvdW50LnVwZGF0ZSgoaXQpID0+IGl0ICsgMSkpLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0YUFwaVt0aGlzLmFwaU1ldGhvZF0oW2ZpbHRlcl0pLnBpcGUoZmluYWxpemUoKCkgPT4gdGhpcy5sb2FkaW5nQ291bnQudXBkYXRlKChpdCkgPT4gaXQgLSAxKSkpO1xuICAgICAgfSksXG4gICAgICBtYXAoKHJlc3BvbnNlKSA9PiAoe1xuICAgICAgICAuLi5yZXNwb25zZSxcbiAgICAgICAgcm93czogcmVzcG9uc2Uucm93cy50b1NvcnRlZCgoYSwgYikgPT4gYS5tZXRhLmxhYmVsLmxvY2FsZUNvbXBhcmUoYi5tZXRhLmxhYmVsKSksXG4gICAgICB9KSlcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIHZhbGlkYXRlTG9hZGluZ0RhdGEoZGF0YTogUGFydGlhbDxMb2FkaW5nRGF0YT4pOiBkYXRhIGlzIExvYWRpbmdEYXRhIHtcbiAgICByZXR1cm4gZGF0YS5kYXRlPy5pc1ZhbGlkID8/IGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvbXBhcmVMb2FkaW5nRGF0YUVxdWFsKGE6IExvYWRpbmdEYXRhLCBiOiBMb2FkaW5nRGF0YSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhLmRhdGUuZXF1YWxzKGIuZGF0ZSk7XG4gIH1cbn1cbiIsIjxtYXQtY2FyZCBhcHBlYXJhbmNlPVwicmFpc2VkXCI+XG4gIDxtYXQtY2FyZC1oZWFkZXIgKm5nSWY9XCJwYWdlVGl0bGVcIj5cbiAgICA8bWF0LWNhcmQtdGl0bGUgZGF0YS10ZXN0LWlkPVwicGFnZS10aXRsZVwiPlxuICAgICAgUXVhbGl0w6R0c21ldHJpazoge3sgcGFnZVRpdGxlIHwgdHJhbnNsYXRlIH19e3sgaXNMb2FkaW5nKCkgPyBcIjogTGFkZSBuZXVlIERhdGVuLlwiIDogXCJcIiB9fVxuICAgIDwvbWF0LWNhcmQtdGl0bGU+XG4gIDwvbWF0LWNhcmQtaGVhZGVyPlxuICA8IS0tIGNvbnNpZGVyIHRvIHB1dCB0aGUgZmlsdGVyIGluIHRoZSB0YWJsZSBoZWFkZXIgdG8gYXZvaWQgdGhhdCBpdCBpcyBzY3JvbGxlZCBvdXQgb2Ygdmlldy0tPlxuICA8IS0tIHNob3cgdGhlIGZpbHRlciBhZnRlciB0aGUgdmFsdWVzIGFyZSBsb2FkZWQgdG8gYXZvaWQgbG9hZGluZyBjdXJyZW50IGRhdGEgdHdpY2UgLS0+XG4gIDxtYXQtY2FyZC1jb250ZW50IGNsYXNzPVwidG9vbGJhclwiPlxuICAgIDxtZXRhcXMyLWRhdGVwaWNrZXIgc3R5bGU9XCJkaXNwbGF5OiBpbmxpbmUtYmxvY2tcIiBtYXRSaXBwbGUgW2Rpc2FibGVkXT1cImlzTG9hZGluZygpIHx8ICFpc0hpc3RvcnlFbmFibGVkKClcIiBbaW5wdXRHcm91cF09XCJyYW5nZVwiICpuZ0lmPVwidGltZUZpbHRlckxvYWRlZCgpICYmIGlzSGlzdG9yeUVuYWJsZWQoKVwiPjwvbWV0YXFzMi1kYXRlcGlja2VyPlxuICAgIDxkaXYgc3R5bGU9XCJmbGV4OiAxIDEgYXV0b1wiPjwvZGl2PlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFtuZ01vZGVsXT1cImlzSGlzdG9yeUVuYWJsZWQoKVwiIChuZ01vZGVsQ2hhbmdlKT1cImlzSGlzdG9yeUVuYWJsZWQuc2V0KCRldmVudClcIiBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nKClcIj5cbiAgICAgIDxsYWJlbD5aZWlnZSBoaXN0b3Jpc2NoZSBEYXRlbjwvbGFiZWw+XG4gICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICA8L21hdC1jYXJkLWNvbnRlbnQ+XG48L21hdC1jYXJkPlxuPG1hdC1jYXJkPlxuICA8bWV0YXFzMi1wcm9ncmVzcy1zcGlubmVyIFtkaXNwbGF5UHJvZ3Jlc3NTcGlubmVyXT1cImlzTG9hZGluZygpXCI+PC9tZXRhcXMyLXByb2dyZXNzLXNwaW5uZXI+XG4gIDx0YWJsZSBbY2xhc3Mud2hpbGUtbG9hZGluZ109XCJpc0xvYWRpbmcoKVwiIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09XCJyZWNlbnRUeXBlQ291bnQkLnZhbHVlLnJvd3NcIlxuICAgICAgICAgY2xhc3M9XCJxdWFsaXR5LW1hdHJpeFwiPlxuICAgIDwhLS0gRGVmaW5lIGNvbHVtbnMgb2YgdGFibGUgLS0+XG4gICAgPCEtLSBSb3cgSGVhZGVyIENvbHVtbiAtLT5cbiAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImxhYmVsLWNvbFwiIHN0aWNreT5cbiAgICAgIDx0aCBbYXR0ci5yb3dzcGFuXT1cImlzSGlzdG9yeUVuYWJsZWQoKSA/ICcyJyA6ICcxJ1wiIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cbiAgICAgICAgPGRpdj5RdWVsbGU8L2Rpdj5cbiAgICAgIDwvdGg+XG4gICAgICA8dGRcbiAgICAgICAgbWF0LWNlbGxcbiAgICAgICAgKm1hdENlbGxEZWY9XCJsZXQgcm93XCJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwicm93Lm1ldGEuYWx0X2xhYmVsXCJcbiAgICAgICAgY2xhc3M9XCJsYWJlbC1jb2wgbWF0LWNlbGwtbGV2ZWwte3tyb3cubWV0YS5sZXZlbCArIDF9fVwiXG4gICAgICA+XG4gICAgICAgIHt7IHJvdy5tZXRhLmxhYmVsIH19XG4gICAgICA8L3RkPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwhLS0gb25lIGNvbHVtbiBmb3IgZWFjaCB0eXBlIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbCBvZiAocmVjZW50VHlwZUNvdW50JCB8IGFzeW5jKT8uY29sdW1uczsgdHJhY2tCeTpjb2x1bW5JZGVudFwiXG4gICAgICAgICAgICAgICAgICBbbWF0Q29sdW1uRGVmXT1cImNvbC5pZCArICdfdHlwZSdcIj5cbiAgICAgIDx0aCBbYXR0ci5jb2xzcGFuXT1cImlzSGlzdG9yeUVuYWJsZWQoKSA/ICcyJyA6ICcxJ1wiIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBbbWF0VG9vbHRpcF09XCJjb2wubGFiZWxcIj5cbiAgICAgICAge3sgY29sdW1uVHJhbnNsYXRpb25rZXkgPyAoY29sdW1uVHJhbnNsYXRpb25rZXkgKyBjb2wubGFiZWwgfCB0cmFuc2xhdGUpIDogY29sLmxhYmVsIH19XG4gICAgICA8L3RoPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwhLS0gb25lIGNvbHVtbiBmb3IgZWFjaCB0eXBlIGZvciB0aGUgbW9zdCBjdXJyZW50IGRhdGUtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2wgb2YgKHJlY2VudFR5cGVDb3VudCQgfCBhc3luYyk/LmNvbHVtbnM7IHRyYWNrQnk6Y29sdW1uSWRlbnRcIlxuICAgICAgICAgICAgICAgICAgW21hdENvbHVtbkRlZl09XCJjb2wuaWQgKyAnX3JlY2VudCdcIj5cbiAgICAgIDx0aCBjbGFzcz1cInJlY2VudC1kYXRhLWNlbGxcIiBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgICAgICBtYXRUb29sdGlwPVwibm8gdG9vbHRpcFwiPnt7IHJhbmdlLmNvbnRyb2xzLmVuZC52YWx1ZS50b0xvY2FsZVN0cmluZyhEYXRlVGltZS5EQVRFX1NIT1JUKSB9fVxuICAgICAgPC90aD5cbiAgICAgIDx0ZCBjbGFzcz1cInJlY2VudC1kYXRhLWNlbGxcIiBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIj5cbiAgICAgICAgPGEgW2F0dHIuaHJlZl09XCJvcGVuSW5FZGl0b3Iocm93Lm1ldGEuaWQsIGNvbC5pZCkgfCBhc3luY1wiIHRhcmdldD1cImVkaXRvcl9mcm9udGVuZFwiPnt7IHJvdy5jb3VudHNbY29sLmlkXSA/PyAn4oCTJyB9fTwvYT5cbiAgICAgIDwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPCEtLSBvbmUgY29sdW1uIGZvciBlYWNoIHR5cGUgZm9yIHRoZSBvbGRlciBkYXRlLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIChyZWNlbnRUeXBlQ291bnQkIHwgYXN5bmMpPy5jb2x1bW5zOyB0cmFja0J5OmNvbHVtbklkZW50XCJcbiAgICAgICAgICAgICAgICAgIFttYXRDb2x1bW5EZWZdPVwiY29sLmlkICsgJ19wYXN0J1wiPlxuICAgICAgPHRoIGNsYXNzPVwicGFzdC1kYXRhLWNlbGxcIiBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0VG9vbHRpcD1cIm5vIHRvb2x0aXBcIj5cbiAgICAgICAge3sgKHBhc3RUeXBlQ291bnQkIHwgYXN5bmMpPy5yb3dzPy5sZW5ndGggPyByYW5nZS5jb250cm9scy5zdGFydC52YWx1ZS50b0xvY2FsZVN0cmluZyhEYXRlVGltZS5EQVRFX1NIT1JUKSA6ICdubyBwYXN0IGRhdGEnIH19XG4gICAgICA8L3RoPlxuICAgICAgPHRkIGNsYXNzPVwicGFzdC1kYXRhLWNlbGxcIiBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3c7XCIgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKHBhc3RUeXBlQ291bnQkIHwgYXN5bmMpPy5yb3dzPy5sZW5ndGggJiYgcGFzdFR5cGVDb3VudChyb3csIGNvbC5pZCkgYXMgdHJlbmRcIj5cbiAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwidHJlbmQudHJlbmRcIj4ge3sgdHJlbmQudmFsdWUgPz8gJ+KAkycgfX1cbiAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cInRyZW5kLnZhbHVlXCIgYXJpYS1oaWRkZW49XCJmYWxzZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwidHJlbmQudHJlbmRcIiBbZm9udEljb25dPVwidHJlbmQudHJlbmQhXCIgLz48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjZGstdmlzdWFsbHktaGlkZGVuXCI+e3sgdHJlbmQudHJlbmQgfX08L3NwYW4+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8IS0tIGdlbmVyYXRlIGFjdHVhbCB0YWJsZSAtLT5cbiAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cIlsnbGFiZWwtY29sJ10uY29uY2F0KHR5cGVDb2x1bW5zKCkpOyBzdGlja3k6dHJ1ZTtcIj48L3RyPlxuICAgIDx0ciBbaGlkZGVuXT1cIiFpc0hpc3RvcnlFbmFibGVkKClcIiBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiYWxsQ29sdW1ucygpOyBzdGlja3k6IHRydWU7XCI+PC90cj5cbiAgICA8dHIgbWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogWydsYWJlbC1jb2wnXS5jb25jYXQoYWxsQ29sdW1ucygpKVwiPjwvdHI+XG5cbiAgPC90YWJsZT5cbjwvbWF0LWNhcmQ+XG4iXX0=
@@ -3696,7 +3696,7 @@ class BaseHistoricDataTableDirective {
3696
3696
  this.dataForPastData$ = new Subject();
3697
3697
  this.dataForRecentData$ = new Subject();
3698
3698
  this.startValues$ = this.dataForPastData$.pipe(filter((data) => this.validateLoadingData(data)), distinctUntilChanged((a, b) => this.compareLoadingDataEqual(a, b)), throttleTime(500), switchMap((start) => this.getCountByDate(start)), tap((it) => this.pastTypeCount$.next(it)), takeUntilDestroyed(this.destroyRef));
3699
- this.endValues$ = this.dataForRecentData$.pipe(tap((it) => console.debug('endValues$.pipe', it)), filter((data) => this.validateLoadingData(data)), distinctUntilChanged((a, b) => this.compareLoadingDataEqual(a, b)), throttleTime(500), switchMap((end) => this.getCountByDate(end)), tap((it) => this.recentTypeCount$.next(it)), tap((it) => this.columns.set(it.columns.slice())), takeUntilDestroyed(this.destroyRef));
3699
+ this.endValues$ = this.dataForRecentData$.pipe(filter((data) => this.validateLoadingData(data)), distinctUntilChanged((a, b) => this.compareLoadingDataEqual(a, b)), throttleTime(500), switchMap((end) => this.getCountByDate(end)), tap((it) => this.recentTypeCount$.next(it)), tap((it) => this.columns.set(it.columns.slice())), takeUntilDestroyed(this.destroyRef));
3700
3700
  /* In this widget's backend we do have data for today
3701
3701
  * therefore we set the end date to today and use the timerange() endpoint to only set the start date
3702
3702
  */
@@ -3778,20 +3778,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
3778
3778
  class CountsWithHistoryComponent extends BaseHistoricDataTableDirective {
3779
3779
  ngOnInit() {
3780
3780
  this.apiMethod ??= 'getMaterialTypeCountsByReplicationSource';
3781
- this.endValues$.subscribe(() => {
3782
- console.debug('endValues$.subscribe event');
3783
- });
3784
- console.debug('endValues subscribed');
3781
+ this.endValues$.subscribe();
3785
3782
  this.range.valueChanges
3786
3783
  .pipe(tap((data) => {
3787
- console.debug('range.valueChanges', data);
3788
3784
  this.dataForPastData$.next({ date: data.start });
3789
3785
  this.dataForRecentData$.next({ date: data.end });
3790
3786
  }), takeUntilDestroyed(this.destroyRef))
3791
3787
  .subscribe();
3792
3788
  this.isHistoryEnabled$
3793
3789
  .pipe(tap((enabled) => {
3794
- console.debug('isHistoryEnabled', enabled);
3795
3790
  this.range.controls.end.reset();
3796
3791
  if (!enabled) {
3797
3792
  this.startDateSubscription?.unsubscribe();
@@ -3800,10 +3795,8 @@ class CountsWithHistoryComponent extends BaseHistoricDataTableDirective {
3800
3795
  }
3801
3796
  this.range.controls.start.reset();
3802
3797
  if (!this.timeFilterLoaded()) {
3803
- console.debug('isTimeFilterLoaded', 'false');
3804
3798
  this.startDateSubscription = this.timerangeStart$
3805
3799
  .pipe(take(1), tap(() => {
3806
- console.debug('startDateSubscription', 'done');
3807
3800
  this.startValuesSubscription = this.startValues$.subscribe();
3808
3801
  this.range.controls.start.reset();
3809
3802
  }))
@@ -3817,7 +3810,6 @@ class CountsWithHistoryComponent extends BaseHistoricDataTableDirective {
3817
3810
  .subscribe();
3818
3811
  }
3819
3812
  getCountByDate(data) {
3820
- console.debug('getCountByDate', data);
3821
3813
  const filter = {
3822
3814
  field: 'asOf',
3823
3815
  values: [{ id: data.date.toISO({ includeOffset: false }), label: '' }],
@@ -3830,7 +3822,6 @@ class CountsWithHistoryComponent extends BaseHistoricDataTableDirective {
3830
3822
  })));
3831
3823
  }
3832
3824
  validateLoadingData(data) {
3833
- console.debug('validateLoadingData', data, data.date?.isValid);
3834
3825
  return data.date?.isValid ?? false;
3835
3826
  }
3836
3827
  compareLoadingDataEqual(a, b) {