ngx-edu-sharing-metaqs2 0.9.24 → 0.9.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -9
- package/esm2022/lib/collection-count-history/collection-count-history.component.mjs +9 -5
- package/esm2022/lib/components/quality-matrix/quality_matrix.mjs +14 -6
- package/esm2022/lib/counts-with-history/counts-with-history.component.mjs +33 -31
- package/esm2022/lib/env-helper.service.mjs +3 -6
- package/esm2022/lib/tree-collection-details/tree-collection-details.component.mjs +8 -5
- package/esm2022/lib/tree-search-counts/tree-search-counts.component.mjs +7 -5
- package/fesm2022/ngx-edu-sharing-metaqs2.mjs +58 -42
- package/fesm2022/ngx-edu-sharing-metaqs2.mjs.map +1 -1
- package/lib/collection-count-history/collection-count-history.component.d.ts +2 -1
- package/lib/components/quality-matrix/quality_matrix.d.ts +2 -1
- package/lib/counts-with-history/counts-with-history.component.d.ts +4 -6
- package/lib/env-helper.service.d.ts +2 -3
- package/lib/tree-collection-details/tree-collection-details.component.d.ts +2 -1
- package/lib/tree-search-counts/tree-search-counts.component.d.ts +5 -5
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -5,9 +5,19 @@ This library provides the widgets for the MetaDataQualityService.
|
|
|
5
5
|
A running version of the widgets can be found [here](https://metaqs-2-ng.staging.openeduhub.net/).
|
|
6
6
|
|
|
7
7
|
## Dependencies
|
|
8
|
-
- Angular 16 to 19
|
|
8
|
+
- Angular 16[^*] to 19
|
|
9
|
+
|
|
10
|
+
|
|
9
11
|
- [ng2-charts](https://valor-software.com/ng2-charts/)
|
|
10
12
|
|
|
13
|
+
|
|
14
|
+
[^*]:_to make it work with Angular 16 these changes were made:_
|
|
15
|
+
- use *ngIf instead of @if
|
|
16
|
+
- use of *ngFor instead of @for
|
|
17
|
+
- use of @Input instead of input() signals
|
|
18
|
+
- explicitly `provide` the MatLuxonAdapter instead of using the `provideLuxonAdapter(dateFormats)` function
|
|
19
|
+
- import `MatFormFieldModule`, `MatSelectModule` instead of only needed components
|
|
20
|
+
|
|
11
21
|
These are not enforced as peer dependencies, but are required for the widgets to work:
|
|
12
22
|
- [Angular Material](https://material.angular.io/)
|
|
13
23
|
- [ngx-translate](https://github.com/ngx-translate)
|
|
@@ -81,14 +91,15 @@ selector: `<app-tree-search-counts />`
|
|
|
81
91
|
selector: `<lib-counts-with-history />`.
|
|
82
92
|
|
|
83
93
|
This is a generic component that can be used to display counts with a history.
|
|
84
|
-
It can be configered by providing the follwing data structure in it's routing configuration
|
|
94
|
+
It can be configered by providing the follwing data structure in it's routing configuration
|
|
95
|
+
or by providing it as an input to the component:
|
|
85
96
|
```javascript
|
|
86
97
|
{
|
|
87
98
|
path: 'content-type-count',
|
|
88
99
|
component: CountsWithHistoryComponent,
|
|
89
|
-
data: {
|
|
90
|
-
|
|
91
|
-
apiMethod: 'getMaterialTypeCountsByReplicationSource', // the method to call on the MetaApiService
|
|
100
|
+
data: {
|
|
101
|
+
pageTitle: 'pageTitle.content-type-count', // translation key for the title (if not provided or empty, the page header will not be displayed)
|
|
102
|
+
apiMethod: 'getMaterialTypeCountsByReplicationSource', // the method to call on the MetaApiService (required)
|
|
92
103
|
columnTranslationkey: 'issues.', // translation key for the columns (optional)
|
|
93
104
|
},
|
|
94
105
|
}
|
|
@@ -99,7 +110,7 @@ Currently the following manifestations are implemented:
|
|
|
99
110
|
{
|
|
100
111
|
path: 'content-type-count',
|
|
101
112
|
component: CountsWithHistoryComponent,
|
|
102
|
-
data: {
|
|
113
|
+
data: { pageTitle: 'pageTitle.content-type-count', apiMethod: 'getMaterialTypeCountsByReplicationSource' }
|
|
103
114
|
}
|
|
104
115
|
```
|
|
105
116
|
#### Lizenzarten nach Quellen
|
|
@@ -108,7 +119,7 @@ Currently the following manifestations are implemented:
|
|
|
108
119
|
{
|
|
109
120
|
path: 'license-count-sources',
|
|
110
121
|
component: CountsWithHistoryComponent,
|
|
111
|
-
data: {
|
|
122
|
+
data: { pageTitle: 'pageTitle.license-count-sources', apiMethod: 'getLicenseCountsByReplicationSource' },
|
|
112
123
|
},
|
|
113
124
|
```
|
|
114
125
|
#### Lizenzarten nach Sammlungen
|
|
@@ -116,7 +127,7 @@ Currently the following manifestations are implemented:
|
|
|
116
127
|
{
|
|
117
128
|
path: 'license-count-collections',
|
|
118
129
|
component: CountsWithHistoryComponent,
|
|
119
|
-
data: {
|
|
130
|
+
data: { pageTitle: 'pageTitle.license-count-collections', apiMethod: 'getMaterialCountMatrixByLicenseGroup' },
|
|
120
131
|
}
|
|
121
132
|
```
|
|
122
133
|
#### Quellen und ihre Qualitätsprobleme
|
|
@@ -125,7 +136,7 @@ Currently the following manifestations are implemented:
|
|
|
125
136
|
path: 'issues-replicationsources',
|
|
126
137
|
component: CountsWithHistoryComponent,
|
|
127
138
|
data: {
|
|
128
|
-
|
|
139
|
+
pageTitle: 'pageTitle.issues-replicationsources',
|
|
129
140
|
apiMethod: 'getCompletenessForReplicationSources',
|
|
130
141
|
columnTranslationkey: 'issues.'},
|
|
131
142
|
},
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { Component, signal, ViewChild } from '@angular/core';
|
|
1
|
+
import { Component, Input, signal, ViewChild } from '@angular/core';
|
|
2
2
|
import { BaseChartDirective } from 'ng2-charts';
|
|
3
3
|
import { DateTime } from 'luxon';
|
|
4
4
|
import { MatCard, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card';
|
|
5
5
|
import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';
|
|
6
6
|
import { MonthpickerComponent } from './monthpicker/monthpicker.component';
|
|
7
7
|
import { BehaviorSubject } from 'rxjs';
|
|
8
|
-
import { AsyncPipe, NgClass } from '@angular/common';
|
|
8
|
+
import { AsyncPipe, NgClass, NgIf } from '@angular/common';
|
|
9
9
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
10
10
|
import { distinctUntilChanged, finalize, take } from 'rxjs/operators';
|
|
11
11
|
import * as i0 from "@angular/core";
|
|
@@ -90,7 +90,7 @@ export class CollectionCountHistoryComponent {
|
|
|
90
90
|
});
|
|
91
91
|
}
|
|
92
92
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CollectionCountHistoryComponent, deps: [{ token: i1.MetaApiService }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
93
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CollectionCountHistoryComponent, isStandalone: true, selector: "metaqs2-collection-count-history", viewQueries: [{ propertyName: "chart", first: true, predicate: BaseChartDirective, descendants: true }], ngImport: i0, template: "<mat-card appearance=\"outlined\">\n <mat-card-header>\n <mat-card-title>\n
|
|
93
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CollectionCountHistoryComponent, isStandalone: true, selector: "metaqs2-collection-count-history", inputs: { pageTitle: "pageTitle" }, viewQueries: [{ propertyName: "chart", first: true, predicate: BaseChartDirective, descendants: true }], ngImport: i0, template: "<mat-card appearance=\"outlined\">\n <mat-card-header *ngIf=\"pageTitle\">\n <mat-card-title>\n {{ pageTitle }}{{ isLoading() ? \": Lade neue Daten.\" : \"\" }}\n </mat-card-title>\n </mat-card-header>\n <mat-card-content>\n\n <metaqs2-monthpicker\n [inputGroup]=\"range\"></metaqs2-monthpicker>\n\n <div [ngClass]=\"{'while-loading': isLoading()}\">\n <canvas\n baseChart\n [datasets]=\"(datapoints$ | async) || []\"\n [options]=\"lineChartOptions\"\n [type]=\"'line'\"\n ></canvas>\n </div>\n </mat-card-content>\n</mat-card>", styles: [""], dependencies: [{ kind: "directive", type: BaseChartDirective, selector: "canvas[baseChart]", inputs: ["type", "legend", "data", "options", "plugins", "labels", "datasets"], outputs: ["chartClick", "chartHover"], exportAs: ["base-chart"] }, { kind: "component", type: MonthpickerComponent, selector: "metaqs2-monthpicker", inputs: ["startView", "inputGroup"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
|
|
94
94
|
}
|
|
95
95
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CollectionCountHistoryComponent, decorators: [{
|
|
96
96
|
type: Component,
|
|
@@ -104,9 +104,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
104
104
|
AsyncPipe,
|
|
105
105
|
ReactiveFormsModule,
|
|
106
106
|
NgClass,
|
|
107
|
-
|
|
107
|
+
NgIf,
|
|
108
|
+
], template: "<mat-card appearance=\"outlined\">\n <mat-card-header *ngIf=\"pageTitle\">\n <mat-card-title>\n {{ pageTitle }}{{ isLoading() ? \": Lade neue Daten.\" : \"\" }}\n </mat-card-title>\n </mat-card-header>\n <mat-card-content>\n\n <metaqs2-monthpicker\n [inputGroup]=\"range\"></metaqs2-monthpicker>\n\n <div [ngClass]=\"{'while-loading': isLoading()}\">\n <canvas\n baseChart\n [datasets]=\"(datapoints$ | async) || []\"\n [options]=\"lineChartOptions\"\n [type]=\"'line'\"\n ></canvas>\n </div>\n </mat-card-content>\n</mat-card>" }]
|
|
108
109
|
}], ctorParameters: () => [{ type: i1.MetaApiService }, { type: i0.DestroyRef }], propDecorators: { chart: [{
|
|
109
110
|
type: ViewChild,
|
|
110
111
|
args: [BaseChartDirective]
|
|
112
|
+
}], pageTitle: [{
|
|
113
|
+
type: Input,
|
|
114
|
+
args: [{ required: true }]
|
|
111
115
|
}] } });
|
|
112
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi1jb3VudC1oaXN0b3J5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1ldGEtd2lkZ2V0cy1saWIvc3JjL2xpYi9jb2xsZWN0aW9uLWNvdW50LWhpc3RvcnkvY29sbGVjdGlvbi1jb3VudC1oaXN0b3J5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1ldGEtd2lkZ2V0cy1saWIvc3JjL2xpYi9jb2xsZWN0aW9uLWNvdW50LWhpc3RvcnkvY29sbGVjdGlvbi1jb3VudC1oaXN0b3J5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXNCLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxRQUFRLEVBQWdCLE1BQU0sT0FBTyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RixPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRzNFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFvQnRFLE1BQU0sT0FBTywrQkFBK0I7SUF3QjFDLFlBQTZCLE9BQXVCLEVBQW1CLFVBQXNCO1FBQWhFLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQW1CLGVBQVUsR0FBVixVQUFVLENBQVk7UUF0Qm5GLHFCQUFnQixHQUFrQztZQUMxRCxPQUFPLEVBQUU7Z0JBQ1AsUUFBUSxFQUFFLE1BQU07Z0JBQ2hCLFFBQVEsRUFBRSxPQUFPO2FBQ2xCO1lBQ0QsSUFBSSxFQUFFO2dCQUNKLE1BQU0sRUFBRSxZQUFZO2FBQ3JCO1lBQ0QsU0FBUyxFQUFFLEtBQUs7U0FDakIsQ0FBQztRQUNRLGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQWtDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLGNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUIsVUFBSyxHQUdULElBQUksU0FBUyxDQUFDO1lBQ2pCLEtBQUssRUFBRSxJQUFJLFdBQVcsRUFBRTtZQUN4QixHQUFHLEVBQUUsSUFBSSxXQUFXLEVBQUU7U0FDdkIsQ0FBQyxDQUFDO1FBQ08sa0JBQWEsR0FBbUIsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNqRSxnQkFBVyxHQUFHLElBQUksV0FBVyxDQUFlLE9BQU8sRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRVUsQ0FBQztJQUVqRyxRQUFRO1FBQ04sSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELHVCQUF1QjtRQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVk7YUFDcEIsSUFBSSxDQUNILGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDbkMsc0dBQXNHO1FBQ3RHLG9CQUFvQixDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ2xDLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUM1RCxDQUFDLENBQUMsQ0FDSDthQUNBLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7UUFDTCxJQUFJLENBQUMsT0FBTzthQUNULGtCQUFrQixFQUFFO2FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDYixTQUFTLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUN6QixJQUFJLFdBQVcsRUFBRSxDQUFDO2dCQUNoQixNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFlBQVksQ0FBQyxFQUFFLEtBQU0sRUFBRTtvQkFDaEcsSUFBSSxFQUFFLEtBQUs7aUJBQ1osQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNuQyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFVBQVUsQ0FBQyxFQUFFLEtBQU0sRUFBRTtvQkFDNUYsSUFBSSxFQUFFLEtBQUs7aUJBQ1osQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxXQUFXLENBQVcsU0FBUyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUU7b0JBQzFGLFNBQVMsRUFBRSxLQUFLO2lCQUNqQixDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLElBQUksV0FBVyxDQUFXLE9BQU8sRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDaEgsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLFFBQVE7UUFDZCxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV6QixNQUFNLE9BQU8sR0FBd0I7WUFDbkMsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUc7WUFDM0MsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUc7WUFDdkMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSztTQUNwQyxDQUFDO1FBRUYsSUFBSSxDQUFDLE9BQU87YUFDVCwwQkFBMEIsQ0FBQyxPQUFPLENBQUM7YUFDbkMsSUFBSSxDQUNILElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDMUM7YUFDQSxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUN0QixNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ3ZDLE9BQU87b0JBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7d0JBQzlCLE9BQU87NEJBQ0wsSUFBSSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUU7NEJBQ3pELEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSzt5QkFDbkIsQ0FBQztvQkFDSixDQUFDLENBQUM7b0JBQ0YsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJO2lCQUNqQixDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7K0dBMUZVLCtCQUErQjttR0FBL0IsK0JBQStCLG1JQUMvQixrQkFBa0IsZ0RDbEMvQix5a0JBb0JXLDBEREFQLGtCQUFrQiwrTUFDbEIsb0JBQW9CLHFHQUNwQixPQUFPLG9HQUNQLGFBQWEsNERBQ2IsWUFBWSw2RkFDWixjQUFjLHdEQUNkLFNBQVMsNkNBQ1QsbUJBQW1CLCtCQUNuQixPQUFPOzs0RkFLRSwrQkFBK0I7a0JBakIzQyxTQUFTOytCQUNFLGtDQUFrQyxjQUNoQyxJQUFJLFdBQ1A7d0JBQ1Asa0JBQWtCO3dCQUNsQixvQkFBb0I7d0JBQ3BCLE9BQU87d0JBQ1AsYUFBYTt3QkFDYixZQUFZO3dCQUNaLGNBQWM7d0JBQ2QsU0FBUzt3QkFDVCxtQkFBbUI7d0JBQ25CLE9BQU87cUJBQ1I7NEdBSzhCLEtBQUs7c0JBQW5DLFNBQVM7dUJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBEZXN0cm95UmVmLCBPbkluaXQsIHNpZ25hbCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDaGFydENvbmZpZ3VyYXRpb24sIENoYXJ0RGF0YXNldCB9IGZyb20gJ2NoYXJ0LmpzJztcbmltcG9ydCB7IEJhc2VDaGFydERpcmVjdGl2ZSB9IGZyb20gJ25nMi1jaGFydHMnO1xuaW1wb3J0IHsgRGF0ZVRpbWUsIERhdGVUaW1lVW5pdCB9IGZyb20gJ2x1eG9uJztcbmltcG9ydCB7IE1hdENhcmQsIE1hdENhcmRDb250ZW50LCBNYXRDYXJkSGVhZGVyLCBNYXRDYXJkVGl0bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jYXJkJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IE1vbnRocGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi9tb250aHBpY2tlci9tb250aHBpY2tlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ291bnQgfSBmcm9tICcuLi9qYXZhLWFwaSc7XG5pbXBvcnQgeyBNZXRhQXBpU2VydmljZSB9IGZyb20gJy4uL21ldGEtYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbmFsaXplLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTWF0ZXJpYWxDb3VudEZpbHRlciB9IGZyb20gJy4uL2phdmEtYXBpJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWV0YXFzMi1jb2xsZWN0aW9uLWNvdW50LWhpc3RvcnknLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQmFzZUNoYXJ0RGlyZWN0aXZlLFxuICAgIE1vbnRocGlja2VyQ29tcG9uZW50LFxuICAgIE1hdENhcmQsXG4gICAgTWF0Q2FyZEhlYWRlcixcbiAgICBNYXRDYXJkVGl0bGUsXG4gICAgTWF0Q2FyZENvbnRlbnQsXG4gICAgQXN5bmNQaXBlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgTmdDbGFzcyxcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbGxlY3Rpb24tY291bnQtaGlzdG9yeS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9jb2xsZWN0aW9uLWNvdW50LWhpc3RvcnkuY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uQ291bnRIaXN0b3J5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQFZpZXdDaGlsZChCYXNlQ2hhcnREaXJlY3RpdmUpIGNoYXJ0PzogQmFzZUNoYXJ0RGlyZWN0aXZlO1xuICBwcm90ZWN0ZWQgbGluZUNoYXJ0T3B0aW9uczogQ2hhcnRDb25maWd1cmF0aW9uWydvcHRpb25zJ10gPSB7XG4gICAgcGFyc2luZzoge1xuICAgICAgeEF4aXNLZXk6ICdkYXRlJyxcbiAgICAgIHlBeGlzS2V5OiAnY291bnQnLFxuICAgIH0sXG4gICAgZm9udDoge1xuICAgICAgZmFtaWx5OiAnTW9udHNlcnJhdCcsXG4gICAgfSxcbiAgICBhbmltYXRpb246IGZhbHNlLFxuICB9O1xuICBwcm90ZWN0ZWQgZGF0YXBvaW50cyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENoYXJ0RGF0YXNldDwnbGluZScsIENvdW50W10+W10+KFtdKTtcbiAgcHJvdGVjdGVkIGlzTG9hZGluZyA9IHNpZ25hbCh0cnVlKTtcbiAgcmVhZG9ubHkgcmFuZ2U6IEZvcm1Hcm91cDx7XG4gICAgc3RhcnQ6IEZvcm1Db250cm9sPERhdGVUaW1lPGJvb2xlYW4+PjtcbiAgICBlbmQ6IEZvcm1Db250cm9sPERhdGVUaW1lPGJvb2xlYW4+PjtcbiAgfT4gPSBuZXcgRm9ybUdyb3VwKHtcbiAgICBzdGFydDogbmV3IEZvcm1Db250cm9sKCksXG4gICAgZW5kOiBuZXcgRm9ybUNvbnRyb2woKSxcbiAgfSk7XG4gIHByb3RlY3RlZCBncmFudWxhcml0aWVzOiBEYXRlVGltZVVuaXRbXSA9IFsneWVhcicsICdtb250aCcsICd3ZWVrJywgJ2RheSddO1xuICBwcm90ZWN0ZWQgZ3JhbnVsYXJpdHkgPSBuZXcgRm9ybUNvbnRyb2w8RGF0ZVRpbWVVbml0PignbW9udGgnLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgbWV0YUFwaTogTWV0YUFwaVNlcnZpY2UsIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZjogRGVzdHJveVJlZikge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlZ2lzdGVyRGF0ZVJhbmdlRmlsdGVyKCk7XG4gIH1cblxuICByZWdpc3RlckRhdGVSYW5nZUZpbHRlcigpIHtcbiAgICB0aGlzLnJhbmdlLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpLFxuICAgICAgICAvL3RoZSBNYXRlcmlhbCBEYXRlcGlja2VyIGVtaXRzIHRoZSBpbml0aWFsIHZhbHVlcyA0IHRpbWVzIHdoZW4gaXQgc3RhcnRzLCBzbyB3ZSBuZWVkIHRvIGRpc3RpbmN0IHRoZW1cbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXYsIGN1cnIpID0+IHtcbiAgICAgICAgICByZXR1cm4gcHJldi5zdGFydCA9PT0gY3Vyci5zdGFydCAmJiBwcmV2LmVuZCA9PT0gY3Vyci5lbmQ7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkRGF0YSgpO1xuICAgICAgfSk7XG4gICAgdGhpcy5tZXRhQXBpXG4gICAgICAuZ2V0VGltZXJhbmdlRmlsdGVyKClcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKChyYW5nZUZpbHRlcikgPT4ge1xuICAgICAgICBpZiAocmFuZ2VGaWx0ZXIpIHtcbiAgICAgICAgICBjb25zdCBzdGFydERhdGUgPSBEYXRlVGltZS5mcm9tSVNPKHJhbmdlRmlsdGVyLnZhbHVlcy5maW5kKCh2KSA9PiB2LmlkID09PSAncmFuZ2VTdGFydCcpPy5sYWJlbCEsIHtcbiAgICAgICAgICAgIHpvbmU6ICd1dGMnLFxuICAgICAgICAgIH0pLnN0YXJ0T2YodGhpcy5ncmFudWxhcml0eS52YWx1ZSk7XG4gICAgICAgICAgY29uc3QgZW5kRGF0ZSA9IERhdGVUaW1lLmZyb21JU08ocmFuZ2VGaWx0ZXIudmFsdWVzLmZpbmQoKHYpID0+IHYuaWQgPT09ICdyYW5nZUVuZCcpPy5sYWJlbCEsIHtcbiAgICAgICAgICAgIHpvbmU6ICd1dGMnLFxuICAgICAgICAgIH0pLmVuZE9mKHRoaXMuZ3JhbnVsYXJpdHkudmFsdWUpO1xuICAgICAgICAgIHRoaXMucmFuZ2Uuc2V0Q29udHJvbCgnc3RhcnQnLCBuZXcgRm9ybUNvbnRyb2w8RGF0ZVRpbWU+KHN0YXJ0RGF0ZSwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KSwge1xuICAgICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnJhbmdlLnNldENvbnRyb2woJ2VuZCcsIG5ldyBGb3JtQ29udHJvbDxEYXRlVGltZT4oZW5kRGF0ZSwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZERhdGEoKTogdm9pZCB7XG4gICAgdGhpcy5pc0xvYWRpbmcuc2V0KHRydWUpO1xuXG4gICAgY29uc3QgcmVxdWVzdDogTWF0ZXJpYWxDb3VudEZpbHRlciA9IHtcbiAgICAgIHN0YXJ0RGF0ZTogdGhpcy5yYW5nZS52YWx1ZS5zdGFydD8udG9JU08oKSEsXG4gICAgICBlbmREYXRlOiB0aGlzLnJhbmdlLnZhbHVlLmVuZD8udG9JU08oKSEsXG4gICAgICBncmFudWxhcml0eTogdGhpcy5ncmFudWxhcml0eS52YWx1ZSxcbiAgICB9O1xuXG4gICAgdGhpcy5tZXRhQXBpXG4gICAgICAuZ2V0RWRpdG9yaWFsTWF0ZXJpYWxDb3VudHMocmVxdWVzdClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmlzTG9hZGluZy5zZXQoZmFsc2UpKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YXBvaW50cyA9IHJlc3BvbnNlLm1hcCgoZGF0YSkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhOiBkYXRhLmNvdW50cy5tYXAoKGNvdW50KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZGF0ZTogRGF0ZVRpbWUuZnJvbUlTTyhjb3VudC5kYXRlKS50b0Zvcm1hdCgnTExMTCB5eXl5JykhLFxuICAgICAgICAgICAgICAgIGNvdW50OiBjb3VudC5jb3VudCxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbGFiZWw6IGRhdGEubmFtZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kYXRhcG9pbnRzJC5uZXh0KGRhdGFwb2ludHMpO1xuICAgICAgfSk7XG4gIH1cbn1cbiIsIjxtYXQtY2FyZCBhcHBlYXJhbmNlPVwib3V0bGluZWRcIj5cbiAgPG1hdC1jYXJkLWhlYWRlcj5cbiAgICA8bWF0LWNhcmQtdGl0bGU+XG4gICAgICBjb2xsZWN0aW9uLWNvdW50LWhpc3Rvcnl7eyBpc0xvYWRpbmcoKSA/IFwiOiBMYWRlIG5ldWUgRGF0ZW4uXCIgOiBcIlwiIH19XG4gICAgPC9tYXQtY2FyZC10aXRsZT5cbiAgPC9tYXQtY2FyZC1oZWFkZXI+XG4gIDxtYXQtY2FyZC1jb250ZW50PlxuXG4gICAgPG1ldGFxczItbW9udGhwaWNrZXJcbiAgICAgIFtpbnB1dEdyb3VwXT1cInJhbmdlXCI+PC9tZXRhcXMyLW1vbnRocGlja2VyPlxuXG4gICAgPGRpdiBbbmdDbGFzc109XCJ7J3doaWxlLWxvYWRpbmcnOiBpc0xvYWRpbmcoKX1cIj5cbiAgICAgIDxjYW52YXNcbiAgICAgICAgYmFzZUNoYXJ0XG4gICAgICAgIFtkYXRhc2V0c109XCIoZGF0YXBvaW50cyQgfCBhc3luYykgfHwgW11cIlxuICAgICAgICBbb3B0aW9uc109XCJsaW5lQ2hhcnRPcHRpb25zXCJcbiAgICAgICAgW3R5cGVdPVwiJ2xpbmUnXCJcbiAgICAgID48L2NhbnZhcz5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtY2FyZC1jb250ZW50PlxuPC9tYXQtY2FyZD4iXX0=
|
|
116
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi1jb3VudC1oaXN0b3J5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1ldGEtd2lkZ2V0cy1saWIvc3JjL2xpYi9jb2xsZWN0aW9uLWNvdW50LWhpc3RvcnkvY29sbGVjdGlvbi1jb3VudC1oaXN0b3J5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1ldGEtd2lkZ2V0cy1saWIvc3JjL2xpYi9jb2xsZWN0aW9uLWNvdW50LWhpc3RvcnkvY29sbGVjdGlvbi1jb3VudC1oaXN0b3J5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxRQUFRLEVBQWdCLE1BQU0sT0FBTyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RixPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRzNFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7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RSxJQUFJLENBQUMsSUFBSTtpQkFDakIsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOytHQTVGVSwrQkFBK0I7bUdBQS9CLCtCQUErQix1S0FDL0Isa0JBQWtCLGdEQ25DL0Isb2xCQW9CVywwRERBUCxrQkFBa0IsK01BQ2xCLG9CQUFvQixxR0FDcEIsT0FBTyxvR0FDUCxhQUFhLDREQUNiLFlBQVksNkZBQ1osY0FBYyx3REFDZCxTQUFTLDZDQUNULG1CQUFtQiwrQkFDbkIsT0FBTyxvRkFDUCxJQUFJOzs0RkFLSywrQkFBK0I7a0JBbEIzQyxTQUFTOytCQUNFLGtDQUFrQyxjQUNoQyxJQUFJLFdBQ1A7d0JBQ1Asa0JBQWtCO3dCQUNsQixvQkFBb0I7d0JBQ3BCLE9BQU87d0JBQ1AsYUFBYTt3QkFDYixZQUFZO3dCQUNaLGNBQWM7d0JBQ2QsU0FBUzt3QkFDVCxtQkFBbUI7d0JBQ25CLE9BQU87d0JBQ1AsSUFBSTtxQkFDTDs0R0FLOEIsS0FBSztzQkFBbkMsU0FBUzt1QkFBQyxrQkFBa0I7Z0JBd0JuQixTQUFTO3NCQURsQixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRGVzdHJveVJlZiwgSW5wdXQsIE9uSW5pdCwgc2lnbmFsLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENoYXJ0Q29uZmlndXJhdGlvbiwgQ2hhcnREYXRhc2V0IH0gZnJvbSAnY2hhcnQuanMnO1xuaW1wb3J0IHsgQmFzZUNoYXJ0RGlyZWN0aXZlIH0gZnJvbSAnbmcyLWNoYXJ0cyc7XG5pbXBvcnQgeyBEYXRlVGltZSwgRGF0ZVRpbWVVbml0IH0gZnJvbSAnbHV4b24nO1xuaW1wb3J0IHsgTWF0Q2FyZCwgTWF0Q2FyZENvbnRlbnQsIE1hdENhcmRIZWFkZXIsIE1hdENhcmRUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NhcmQnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgTW9udGhwaWNrZXJDb21wb25lbnQgfSBmcm9tICcuL21vbnRocGlja2VyL21vbnRocGlja2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb3VudCB9IGZyb20gJy4uL2phdmEtYXBpJztcbmltcG9ydCB7IE1ldGFBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vbWV0YS1hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdDbGFzcywgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmluYWxpemUsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBNYXRlcmlhbENvdW50RmlsdGVyIH0gZnJvbSAnLi4vamF2YS1hcGknO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtZXRhcXMyLWNvbGxlY3Rpb24tY291bnQtaGlzdG9yeScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBCYXNlQ2hhcnREaXJlY3RpdmUsXG4gICAgTW9udGhwaWNrZXJDb21wb25lbnQsXG4gICAgTWF0Q2FyZCxcbiAgICBNYXRDYXJkSGVhZGVyLFxuICAgIE1hdENhcmRUaXRsZSxcbiAgICBNYXRDYXJkQ29udGVudCxcbiAgICBBc3luY1BpcGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBOZ0NsYXNzLFxuICAgIE5nSWYsXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9jb2xsZWN0aW9uLWNvdW50LWhpc3RvcnkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vY29sbGVjdGlvbi1jb3VudC1oaXN0b3J5LmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkNvdW50SGlzdG9yeUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBWaWV3Q2hpbGQoQmFzZUNoYXJ0RGlyZWN0aXZlKSBjaGFydD86IEJhc2VDaGFydERpcmVjdGl2ZTtcbiAgcHJvdGVjdGVkIGxpbmVDaGFydE9wdGlvbnM6IENoYXJ0Q29uZmlndXJhdGlvblsnb3B0aW9ucyddID0ge1xuICAgIHBhcnNpbmc6IHtcbiAgICAgIHhBeGlzS2V5OiAnZGF0ZScsXG4gICAgICB5QXhpc0tleTogJ2NvdW50JyxcbiAgICB9LFxuICAgIGZvbnQ6IHtcbiAgICAgIGZhbWlseTogJ01vbnRzZXJyYXQnLFxuICAgIH0sXG4gICAgYW5pbWF0aW9uOiBmYWxzZSxcbiAgfTtcbiAgcHJvdGVjdGVkIGRhdGFwb2ludHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDaGFydERhdGFzZXQ8J2xpbmUnLCBDb3VudFtdPltdPihbXSk7XG4gIHByb3RlY3RlZCBpc0xvYWRpbmcgPSBzaWduYWwodHJ1ZSk7XG4gIHJlYWRvbmx5IHJhbmdlOiBGb3JtR3JvdXA8e1xuICAgIHN0YXJ0OiBGb3JtQ29udHJvbDxEYXRlVGltZTxib29sZWFuPj47XG4gICAgZW5kOiBGb3JtQ29udHJvbDxEYXRlVGltZTxib29sZWFuPj47XG4gIH0+ID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgc3RhcnQ6IG5ldyBGb3JtQ29udHJvbCgpLFxuICAgIGVuZDogbmV3IEZvcm1Db250cm9sKCksXG4gIH0pO1xuICBwcm90ZWN0ZWQgZ3JhbnVsYXJpdGllczogRGF0ZVRpbWVVbml0W10gPSBbJ3llYXInLCAnbW9udGgnLCAnd2VlaycsICdkYXknXTtcbiAgcHJvdGVjdGVkIGdyYW51bGFyaXR5ID0gbmV3IEZvcm1Db250cm9sPERhdGVUaW1lVW5pdD4oJ21vbnRoJywgeyBub25OdWxsYWJsZTogdHJ1ZSB9KTtcblxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICBwcm90ZWN0ZWQgcGFnZVRpdGxlOiBzdHJpbmc7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgbWV0YUFwaTogTWV0YUFwaVNlcnZpY2UsIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZjogRGVzdHJveVJlZikge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlZ2lzdGVyRGF0ZVJhbmdlRmlsdGVyKCk7XG4gIH1cblxuICByZWdpc3RlckRhdGVSYW5nZUZpbHRlcigpIHtcbiAgICB0aGlzLnJhbmdlLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpLFxuICAgICAgICAvL3RoZSBNYXRlcmlhbCBEYXRlcGlja2VyIGVtaXRzIHRoZSBpbml0aWFsIHZhbHVlcyA0IHRpbWVzIHdoZW4gaXQgc3RhcnRzLCBzbyB3ZSBuZWVkIHRvIGRpc3RpbmN0IHRoZW1cbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXYsIGN1cnIpID0+IHtcbiAgICAgICAgICByZXR1cm4gcHJldi5zdGFydCA9PT0gY3Vyci5zdGFydCAmJiBwcmV2LmVuZCA9PT0gY3Vyci5lbmQ7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkRGF0YSgpO1xuICAgICAgfSk7XG4gICAgdGhpcy5tZXRhQXBpXG4gICAgICAuZ2V0VGltZXJhbmdlRmlsdGVyKClcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKChyYW5nZUZpbHRlcikgPT4ge1xuICAgICAgICBpZiAocmFuZ2VGaWx0ZXIpIHtcbiAgICAgICAgICBjb25zdCBzdGFydERhdGUgPSBEYXRlVGltZS5mcm9tSVNPKHJhbmdlRmlsdGVyLnZhbHVlcy5maW5kKCh2KSA9PiB2LmlkID09PSAncmFuZ2VTdGFydCcpPy5sYWJlbCEsIHtcbiAgICAgICAgICAgIHpvbmU6ICd1dGMnLFxuICAgICAgICAgIH0pLnN0YXJ0T2YodGhpcy5ncmFudWxhcml0eS52YWx1ZSk7XG4gICAgICAgICAgY29uc3QgZW5kRGF0ZSA9IERhdGVUaW1lLmZyb21JU08ocmFuZ2VGaWx0ZXIudmFsdWVzLmZpbmQoKHYpID0+IHYuaWQgPT09ICdyYW5nZUVuZCcpPy5sYWJlbCEsIHtcbiAgICAgICAgICAgIHpvbmU6ICd1dGMnLFxuICAgICAgICAgIH0pLmVuZE9mKHRoaXMuZ3JhbnVsYXJpdHkudmFsdWUpO1xuICAgICAgICAgIHRoaXMucmFuZ2Uuc2V0Q29udHJvbCgnc3RhcnQnLCBuZXcgRm9ybUNvbnRyb2w8RGF0ZVRpbWU+KHN0YXJ0RGF0ZSwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KSwge1xuICAgICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnJhbmdlLnNldENvbnRyb2woJ2VuZCcsIG5ldyBGb3JtQ29udHJvbDxEYXRlVGltZT4oZW5kRGF0ZSwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZERhdGEoKTogdm9pZCB7XG4gICAgdGhpcy5pc0xvYWRpbmcuc2V0KHRydWUpO1xuXG4gICAgY29uc3QgcmVxdWVzdDogTWF0ZXJpYWxDb3VudEZpbHRlciA9IHtcbiAgICAgIHN0YXJ0RGF0ZTogdGhpcy5yYW5nZS52YWx1ZS5zdGFydD8udG9JU08oKSEsXG4gICAgICBlbmREYXRlOiB0aGlzLnJhbmdlLnZhbHVlLmVuZD8udG9JU08oKSEsXG4gICAgICBncmFudWxhcml0eTogdGhpcy5ncmFudWxhcml0eS52YWx1ZSxcbiAgICB9O1xuXG4gICAgdGhpcy5tZXRhQXBpXG4gICAgICAuZ2V0RWRpdG9yaWFsTWF0ZXJpYWxDb3VudHMocmVxdWVzdClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmlzTG9hZGluZy5zZXQoZmFsc2UpKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YXBvaW50cyA9IHJlc3BvbnNlLm1hcCgoZGF0YSkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhOiBkYXRhLmNvdW50cy5tYXAoKGNvdW50KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZGF0ZTogRGF0ZVRpbWUuZnJvbUlTTyhjb3VudC5kYXRlKS50b0Zvcm1hdCgnTExMTCB5eXl5JykhLFxuICAgICAgICAgICAgICAgIGNvdW50OiBjb3VudC5jb3VudCxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbGFiZWw6IGRhdGEubmFtZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kYXRhcG9pbnRzJC5uZXh0KGRhdGFwb2ludHMpO1xuICAgICAgfSk7XG4gIH1cbn1cbiIsIjxtYXQtY2FyZCBhcHBlYXJhbmNlPVwib3V0bGluZWRcIj5cbiAgPG1hdC1jYXJkLWhlYWRlciAqbmdJZj1cInBhZ2VUaXRsZVwiPlxuICAgIDxtYXQtY2FyZC10aXRsZT5cbiAgICAgIHt7IHBhZ2VUaXRsZSB9fXt7IGlzTG9hZGluZygpID8gXCI6IExhZGUgbmV1ZSBEYXRlbi5cIiA6IFwiXCIgfX1cbiAgICA8L21hdC1jYXJkLXRpdGxlPlxuICA8L21hdC1jYXJkLWhlYWRlcj5cbiAgPG1hdC1jYXJkLWNvbnRlbnQ+XG5cbiAgICA8bWV0YXFzMi1tb250aHBpY2tlclxuICAgICAgW2lucHV0R3JvdXBdPVwicmFuZ2VcIj48L21ldGFxczItbW9udGhwaWNrZXI+XG5cbiAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnd2hpbGUtbG9hZGluZyc6IGlzTG9hZGluZygpfVwiPlxuICAgICAgPGNhbnZhc1xuICAgICAgICBiYXNlQ2hhcnRcbiAgICAgICAgW2RhdGFzZXRzXT1cIihkYXRhcG9pbnRzJCB8IGFzeW5jKSB8fCBbXVwiXG4gICAgICAgIFtvcHRpb25zXT1cImxpbmVDaGFydE9wdGlvbnNcIlxuICAgICAgICBbdHlwZV09XCInbGluZSdcIlxuICAgICAgPjwvY2FudmFzPlxuICAgIDwvZGl2PlxuICA8L21hdC1jYXJkLWNvbnRlbnQ+XG48L21hdC1jYXJkPiJdfQ==
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Component, signal } from '@angular/core';
|
|
1
|
+
import { Component, Input, signal } from '@angular/core';
|
|
2
2
|
import { BehaviorSubject, forkJoin, of } from 'rxjs';
|
|
3
3
|
import { filter, finalize, take, tap } from 'rxjs/operators';
|
|
4
4
|
import { FormControl, FormGroup, FormRecord } from '@angular/forms';
|
|
@@ -35,6 +35,7 @@ export class QualityMatrixComponent {
|
|
|
35
35
|
start: new FormControl(),
|
|
36
36
|
end: new FormControl(),
|
|
37
37
|
});
|
|
38
|
+
this.pageTitle = 'Quality Matrix';
|
|
38
39
|
this.DateTime = DateTime;
|
|
39
40
|
// a FormRecord has to be initialized with one source to determine its type :-(
|
|
40
41
|
this.categoryControls = new FormRecord({ dummy: new FormControl([], { nonNullable: true }) });
|
|
@@ -70,7 +71,7 @@ export class QualityMatrixComponent {
|
|
|
70
71
|
return this.currentColumns;
|
|
71
72
|
}
|
|
72
73
|
filterTableBySourcesWithMaterial(onlyWith) {
|
|
73
|
-
const allColumns = this.recentQualityMatrix$.value.columns.
|
|
74
|
+
const allColumns = this.recentQualityMatrix$.value.columns.toSorted((a, b) => a.label.localeCompare(b.label));
|
|
74
75
|
// avoid filtering when not necessary
|
|
75
76
|
this.filteredColumns = onlyWith ? allColumns.filter((c) => c.total > 0) : allColumns;
|
|
76
77
|
this.datatableColumns = this.filteredColumns.map((c) => c.id);
|
|
@@ -147,6 +148,11 @@ export class QualityMatrixComponent {
|
|
|
147
148
|
return body;
|
|
148
149
|
}
|
|
149
150
|
loadDataWithCurrentlySelectedFilters() {
|
|
151
|
+
/*
|
|
152
|
+
consider using an intermediate Subject with a switchMap pipe
|
|
153
|
+
to prevent that older ( longer running ) requests overwrite newer ones
|
|
154
|
+
see https://stackoverflow.com/questions/64427629/how-to-use-rxjs-to-cancel-previous-http-requests-in-an-angular-service/64490155#64490155
|
|
155
|
+
*/
|
|
150
156
|
this.isLoading.set(true);
|
|
151
157
|
forkJoin({
|
|
152
158
|
pastQm: this.loadDataForStart(),
|
|
@@ -230,10 +236,12 @@ export class QualityMatrixComponent {
|
|
|
230
236
|
return slices;
|
|
231
237
|
}
|
|
232
238
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: QualityMatrixComponent, deps: [{ token: i1.MetaApiService }, { token: i2.EditorialLinkService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
233
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: QualityMatrixComponent, selector: "metaqs2-quality-matrix-v2", ngImport: i0, template: "<mat-card appearance=\"raised\">\n <mat-card-header>\n <mat-card-title>\n Qualit\u00E4tsmetrik: Metadatenvollst\u00E4ndigkeit von Quellen{{isLoading() ? \": Lade neue Daten.\" : \"\"}}</mat-card-title\n >\n </mat-card-header>\n <mat-card-content>\n <metaqs2-qm-filter\n *ngFor=\"let filter of categoryControls.controls | keyvalue; trackBy: filterIdent\"\n [options]=\"categoryFilterValues.get(filter.key)\"\n [inputFormControl]=\"filter.value\"\n [label] = \"'filter.' + filter.key | translate\"></metaqs2-qm-filter>\n </mat-card-content>\n <mat-card-actions align=\"end\">\n <mat-slide-toggle [disabled]=\"isLoading()\" labelPosition=\"before\" [formControl]=\"onlySourcesWithMaterial\" id=\"onlySourcesWithMaterial\" >\n show only sources with material\n </mat-slide-toggle>\n <mat-slide-toggle [disabled]=\"isLoading()\" labelPosition=\"before\" [formControl]=\"showHistoricalData\" id=\"showHistoricalData\" >\n show historical data\n </mat-slide-toggle>\n <button\n mat-icon-button\n color=\"primary\"\n [disabled]=\"isLoading\"\n (click)=\"refresh()\"\n matTooltip=\"Aktualisiere den IST-Stand\"\n matTooltipShowDelay=\"500\"\n >\n <mat-icon>refresh</mat-icon>\n </button>\n </mat-card-actions>\n</mat-card>\n<metaqs2-datepicker *ngIf=\"showHistoricalData.value\" [disabled]=\"isLoading()\" [inputGroup]=\"range\" ></metaqs2-datepicker>\n\n\n<mat-card>\n <table [ngClass]=\"{'while-loading': isLoading()}\" mat-table [dataSource]=\"recentQualityMatrix$.value.rows\" class=\"quality-matrix\">\n <!-- Define columns of table -->\n <!-- Row Header Column -->\n <ng-container matColumnDef=\"row-header\" sticky>\n <th rowspan=\"2\" mat-header-cell *matHeaderCellDef>Issue Type</th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n matTooltip=\"{{row.meta.alt_label}}\"\n class=\"row-header {{'mat-cell-level-' + (row.meta.level+1)}}\"\n >\n {{\"quality_matrix.\" + row.meta.label | translate }}\n </td>\n </ng-container>\n <!-- one column for the source -->\n <ng-container *ngFor=\"let col of filteredColumns; trackBy:columnIdent\" [matColumnDef]=\"col.id + '_source'\">\n <th [attr.colspan]=\"showHistoricalData.value?2:1\" mat-header-cell *matHeaderCellDef matTooltip=\"{{col.altLabel}}\" >{{col.label}}</th>\n </ng-container>\n <!-- /source -->\n <!-- current Data Columns -->\n <ng-container *ngFor=\"let column of filteredColumns; trackBy:columnIdent\" [matColumnDef]=\"column.id + '_current'\">\n <th class=\"recent-data-cell\" mat-header-cell *matHeaderCellDef matTooltip=\"{{column.altLabel}}\" >{{ range.controls.end.value?.toLocaleString(DateTime.DATE_SHORT) }} <br>({{column.total}})</th>\n <td class=\"recent-data-cell\" mat-cell *matCellDef=\"let row\">\n <a *ngIf=\"column.total > 0 else emptyDiv\" class=\"chart-container\" (click)=\"openEditLink( column.label, row.meta.label)\">\n <div >\n <metaqs2-donut-chart [data]=\"getDonutSlices(row, column)\" [borderSize]=\"25\"></metaqs2-donut-chart>\n </div>\n </a>\n <ng-template #emptyDiv>\n <div>-</div>\n </ng-template>\n </td>\n </ng-container>\n <!-- /current Data Columns -->\n <!-- past Data Columns -->\n <ng-container *ngIf=\"showHistoricalData.value\">\n <ng-container *ngFor=\"let column of filteredColumns; trackBy:columnIdent\" [matColumnDef]=\"column.id + '_past'\">\n <th class=\"historic-data-cell\" mat-header-cell\n *matHeaderCellDef>{{ range.controls.start.value?.toLocaleString(DateTime.DATE_SHORT) }}\n <br>{{ getPastColumn(column.id)?.total }}\n </th>\n <td class=\"historic-data-cell\" mat-cell *matCellDef=\"let row\">\n <ng-container *ngIf=\"getTrend(row, column) as trend\">\n <span [ngClass]=\"trend.trend\">\n <mat-icon aria-hidden=\"false\" [attr.aria-label]=\"trend.trend\" [fontIcon]=\"trend.trend!\" />\n {{ trend.delta }}\n </span>\n </ng-container>\n\n </td>\n </ng-container>\n </ng-container>\n <!-- /past Data Columns -->\n\n <!-- Generate actual table -->\n <tr mat-header-row *matHeaderRowDef=\"['row-header'].concat( sourceColumns); sticky: true;\"></tr>\n <tr mat-header-row *matHeaderRowDef=\"allDataColumns; sticky: true;\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['row-header'].concat(allDataColumns)\"></tr>\n </table>\n</mat-card>\n", styles: ["mat-card-actions>mat-slide-toggle{margin-left:20px}.row{flex-grow:1;display:flex;align-items:center}table{width:100%;overflow-y:auto}table .scroll{flex-grow:1;overflow-y:auto}.cell{flex:1}.mat-mdc-cell{padding-top:5px}.mat-mdc-cell,.mat-mdc-header-cell{padding-left:5px;text-align:center}.mat-mdc-cell a.chart-container,.mat-mdc-header-cell a.chart-container{display:flex;justify-content:center}.mat-mdc-cell .trending_up,.mat-mdc-header-cell .trending_up{color:#4abeff}.mat-mdc-cell .trending_down,.mat-mdc-header-cell .trending_down{color:#c20808}.recent-data-cell,.mat-column-row-header{border-right:1px solid #e4e4e4}.mat-header-cell-label{color:#000;padding-left:30px;padding-right:30px;justify-content:left;border-bottom:1px solid #e4e4e4;font-style:normal;font-weight:500;font-size:110%;background:#ddf0fb;text-align:left}.mat-header-cell-label>div{display:flex;font-weight:700;font-style:normal;justify-content:left}.mat-header-cell-small{padding-left:5px;padding-right:5px;justify-content:left;font-style:normal;font-weight:400;font-size:105%;background:#ddf0fb;border-top:1px solid #e4e4e4;border-bottom:1px solid #e4e4e4}.mat-mdc-cell a{cursor:pointer;display:flex;align-items:center;justify-content:left}.mat-mdc-cell a>mat-icon{padding-right:5px;font-size:22px;height:20px;opacity:.75}.mat-mdc-cell a>mat-icon:hover,.mat-mdc-cell a>mat-icon:focus{text-decoration:none}.mat-mdc-cell .number{display:flex;height:47px;justify-content:left;align-items:center;padding-left:15px}.mat-mdc-cell .row-header{display:flex;height:47px;max-height:47px;justify-content:left;align-items:center;padding-left:15px}.mat-mdc-cell .row-header-sum{display:flex;height:47px;max-height:47px;justify-content:left;align-items:center;border-right:5px solid #bdbdbd}.mat-mdc-card{width:100%;box-shadow:none}.mat-mdc-card ::ng-deep mat-card-header{align-items:center}.mat-mdc-card ::ng-deep mat-card-header .mat-card-header-text{flex-grow:1;margin:0}.mat-mdc-card ::ng-deep mat-card-header .mat-card-header-text mat-card-title{padding-top:20px;font-size:120%}.mat-mdc-card ::ng-deep mat-card-header .mat-card-header-text mat-card-title .count{font-size:80%;color:#888}.mat-mdc-card .source-header{font-style:normal;font-weight:400;font-size:20px;height:30px;width:60%}.mat-mdc-card .source-header .robot-explanation{font-size:15px}.mat-mdc-card .scroll{flex-grow:1;overflow-y:auto}.mat-header-cell-scope{color:#545454}.mat-mdc-header-row{height:70px;max-height:70px;min-height:56px}:host{overflow:auto}:host ::ng-deep thead{border:10px solid #ff0000;position:relative;z-index:1}.mat-cell-level-1{padding-left:20px!important}.mat-cell-level-2{padding-left:40px!important}.mat-cell-level-3{padding-left:60px!important}.mat-cell-level-4{padding-left:80px!important}.mat-cell-level-5{padding-left:100px!important}.mat-cell-level-6{padding-left:120px!important}.mat-cell-level-7{padding-left:140px!important}.mat-cell-level-8{padding-left:160px!important}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i4.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i4.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i4.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i4.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i8.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i8.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i8.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i8.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i8.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i8.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i8.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i8.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i8.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i8.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i11.QualityMatrixFilterComponent, selector: "metaqs2-qm-filter", inputs: ["options", "inputFormControl", "label", "multiple"], outputs: ["changedFilters"] }, { kind: "component", type: i12.DatepickerComponent, selector: "metaqs2-datepicker", inputs: ["disabled", "inputGroup"] }, { kind: "component", type: i13.DonutChartComponent, selector: "metaqs2-donut-chart", inputs: ["radius", "viewBox", "borderSize", "strokeWidth", "data"] }, { kind: "pipe", type: i3.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: i14.TranslatePipe, name: "translate" }] }); }
|
|
239
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: QualityMatrixComponent, selector: "metaqs2-quality-matrix-v2", inputs: { pageTitle: "pageTitle" }, ngImport: i0, template: "<mat-card appearance=\"raised\">\n <mat-card-header *ngIf=\"pageTitle\">\n <mat-card-title>\n Qualit\u00E4tsmetrik: {{ pageTitle | translate }}{{isLoading() ? \": Lade neue Daten.\" : \"\"}}</mat-card-title\n >\n </mat-card-header>\n <mat-card-content>\n <metaqs2-qm-filter\n *ngFor=\"let filter of categoryControls.controls | keyvalue; trackBy: filterIdent\"\n [options]=\"categoryFilterValues.get(filter.key)\"\n [inputFormControl]=\"filter.value\"\n [label] = \"'filter.' + filter.key | translate\"></metaqs2-qm-filter>\n </mat-card-content>\n <mat-card-actions align=\"end\">\n <mat-slide-toggle [disabled]=\"isLoading()\" labelPosition=\"before\" [formControl]=\"onlySourcesWithMaterial\" id=\"onlySourcesWithMaterial\" >\n show only sources with material\n </mat-slide-toggle>\n <mat-slide-toggle [disabled]=\"isLoading()\" labelPosition=\"before\" [formControl]=\"showHistoricalData\" id=\"showHistoricalData\" >\n show historical data\n </mat-slide-toggle>\n <button\n mat-icon-button\n color=\"primary\"\n [disabled]=\"isLoading\"\n (click)=\"refresh()\"\n matTooltip=\"Aktualisiere den IST-Stand\"\n matTooltipShowDelay=\"500\"\n >\n <mat-icon>refresh</mat-icon>\n </button>\n </mat-card-actions>\n</mat-card>\n<metaqs2-datepicker *ngIf=\"showHistoricalData.value\" [disabled]=\"isLoading()\" [inputGroup]=\"range\" ></metaqs2-datepicker>\n\n\n<mat-card>\n <table [ngClass]=\"{'while-loading': isLoading()}\" mat-table [dataSource]=\"recentQualityMatrix$.value.rows\" class=\"quality-matrix\">\n <!-- Define columns of table -->\n <!-- Row Header Column -->\n <ng-container matColumnDef=\"row-header\" sticky>\n <th rowspan=\"2\" mat-header-cell *matHeaderCellDef>Issue Type</th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n matTooltip=\"{{row.meta.alt_label}}\"\n class=\"row-header {{'mat-cell-level-' + (row.meta.level+1)}}\"\n >\n {{\"quality_matrix.\" + row.meta.label | translate }}\n </td>\n </ng-container>\n <!-- one column for the source -->\n <ng-container *ngFor=\"let col of filteredColumns; trackBy:columnIdent\" [matColumnDef]=\"col.id + '_source'\">\n <th [attr.colspan]=\"showHistoricalData.value?2:1\" mat-header-cell *matHeaderCellDef matTooltip=\"{{col.altLabel}}\" >{{col.label}}</th>\n </ng-container>\n <!-- /source -->\n <!-- current Data Columns -->\n <ng-container *ngFor=\"let column of filteredColumns; trackBy:columnIdent\" [matColumnDef]=\"column.id + '_current'\">\n <th class=\"recent-data-cell\" mat-header-cell *matHeaderCellDef matTooltip=\"{{column.altLabel}}\" >{{ range.controls.end.value?.toLocaleString(DateTime.DATE_SHORT) }} <br>({{column.total}})</th>\n <td class=\"recent-data-cell\" mat-cell *matCellDef=\"let row\">\n <a *ngIf=\"column.total > 0 else emptyDiv\" class=\"chart-container\" (click)=\"openEditLink( column.label, row.meta.label)\">\n <div >\n <metaqs2-donut-chart [data]=\"getDonutSlices(row, column)\" [borderSize]=\"25\"></metaqs2-donut-chart>\n </div>\n </a>\n <ng-template #emptyDiv>\n <div>-</div>\n </ng-template>\n </td>\n </ng-container>\n <!-- /current Data Columns -->\n <!-- past Data Columns -->\n <ng-container *ngIf=\"showHistoricalData.value\">\n <ng-container *ngFor=\"let column of filteredColumns; trackBy:columnIdent\" [matColumnDef]=\"column.id + '_past'\">\n <th class=\"historic-data-cell\" mat-header-cell\n *matHeaderCellDef>{{ range.controls.start.value?.toLocaleString(DateTime.DATE_SHORT) }}\n <br>{{ getPastColumn(column.id)?.total }}\n </th>\n <td class=\"historic-data-cell\" mat-cell *matCellDef=\"let row\">\n <ng-container *ngIf=\"getTrend(row, column) as trend\">\n <span [ngClass]=\"trend.trend\">\n <mat-icon aria-hidden=\"false\" [attr.aria-label]=\"trend.trend\" [fontIcon]=\"trend.trend!\" />\n {{ trend.delta }}\n </span>\n </ng-container>\n\n </td>\n </ng-container>\n </ng-container>\n <!-- /past Data Columns -->\n\n <!-- Generate actual table -->\n <tr mat-header-row *matHeaderRowDef=\"['row-header'].concat( sourceColumns); sticky: true;\"></tr>\n <tr mat-header-row *matHeaderRowDef=\"allDataColumns; sticky: true;\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['row-header'].concat(allDataColumns)\"></tr>\n </table>\n</mat-card>\n", styles: ["mat-card-actions>mat-slide-toggle{margin-left:20px}.row{flex-grow:1;display:flex;align-items:center}table{width:100%;overflow-y:auto}table .scroll{flex-grow:1;overflow-y:auto}.cell{flex:1}.mat-mdc-cell{padding-top:5px}.mat-mdc-cell,.mat-mdc-header-cell{padding-left:5px;text-align:center}.mat-mdc-cell a.chart-container,.mat-mdc-header-cell a.chart-container{display:flex;justify-content:center}.mat-mdc-cell .trending_up,.mat-mdc-header-cell .trending_up{color:#4abeff}.mat-mdc-cell .trending_down,.mat-mdc-header-cell .trending_down{color:#c20808}.recent-data-cell,.mat-column-row-header{border-right:1px solid #e4e4e4}.mat-header-cell-label{color:#000;padding-left:30px;padding-right:30px;justify-content:left;border-bottom:1px solid #e4e4e4;font-style:normal;font-weight:500;font-size:110%;background:#ddf0fb;text-align:left}.mat-header-cell-label>div{display:flex;font-weight:700;font-style:normal;justify-content:left}.mat-header-cell-small{padding-left:5px;padding-right:5px;justify-content:left;font-style:normal;font-weight:400;font-size:105%;background:#ddf0fb;border-top:1px solid #e4e4e4;border-bottom:1px solid #e4e4e4}.mat-mdc-cell a{cursor:pointer;display:flex;align-items:center;justify-content:left}.mat-mdc-cell a>mat-icon{padding-right:5px;font-size:22px;height:20px;opacity:.75}.mat-mdc-cell a>mat-icon:hover,.mat-mdc-cell a>mat-icon:focus{text-decoration:none}.mat-mdc-cell .number{display:flex;height:47px;justify-content:left;align-items:center;padding-left:15px}.mat-mdc-cell .row-header{display:flex;height:47px;max-height:47px;justify-content:left;align-items:center;padding-left:15px}.mat-mdc-cell .row-header-sum{display:flex;height:47px;max-height:47px;justify-content:left;align-items:center;border-right:5px solid #bdbdbd}.mat-mdc-card{width:100%;box-shadow:none}.mat-mdc-card ::ng-deep mat-card-header{align-items:center}.mat-mdc-card ::ng-deep mat-card-header .mat-card-header-text{flex-grow:1;margin:0}.mat-mdc-card ::ng-deep mat-card-header .mat-card-header-text mat-card-title{padding-top:20px;font-size:120%}.mat-mdc-card ::ng-deep mat-card-header .mat-card-header-text mat-card-title .count{font-size:80%;color:#888}.mat-mdc-card .source-header{font-style:normal;font-weight:400;font-size:20px;height:30px;width:60%}.mat-mdc-card .source-header .robot-explanation{font-size:15px}.mat-mdc-card .scroll{flex-grow:1;overflow-y:auto}.mat-header-cell-scope{color:#545454}.mat-mdc-header-row{height:70px;max-height:70px;min-height:56px}:host{overflow:auto}:host ::ng-deep thead{border:10px solid #ff0000;position:relative;z-index:1}.mat-cell-level-1{padding-left:20px!important}.mat-cell-level-2{padding-left:40px!important}.mat-cell-level-3{padding-left:60px!important}.mat-cell-level-4{padding-left:80px!important}.mat-cell-level-5{padding-left:100px!important}.mat-cell-level-6{padding-left:120px!important}.mat-cell-level-7{padding-left:140px!important}.mat-cell-level-8{padding-left:160px!important}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i4.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i4.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i4.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i4.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i8.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i8.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i8.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i8.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i8.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i8.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i8.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i8.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i8.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i8.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i11.QualityMatrixFilterComponent, selector: "metaqs2-qm-filter", inputs: ["options", "inputFormControl", "label", "multiple"], outputs: ["changedFilters"] }, { kind: "component", type: i12.DatepickerComponent, selector: "metaqs2-datepicker", inputs: ["disabled", "inputGroup"] }, { kind: "component", type: i13.DonutChartComponent, selector: "metaqs2-donut-chart", inputs: ["radius", "viewBox", "borderSize", "strokeWidth", "data"] }, { kind: "pipe", type: i3.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: i14.TranslatePipe, name: "translate" }] }); }
|
|
234
240
|
}
|
|
235
241
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: QualityMatrixComponent, decorators: [{
|
|
236
242
|
type: Component,
|
|
237
|
-
args: [{ selector: 'metaqs2-quality-matrix-v2', template: "<mat-card appearance=\"raised\">\n <mat-card-header>\n <mat-card-title>\n Qualit\u00E4tsmetrik:
|
|
238
|
-
}], ctorParameters: () => [{ type: i1.MetaApiService }, { type: i2.EditorialLinkService }]
|
|
239
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVhbGl0eV9tYXRyaXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1tZXRhLXdpZGdldHMtbGliL3NyYy9saWIvY29tcG9uZW50cy9xdWFsaXR5LW1hdHJpeC9xdWFsaXR5X21hdHJpeC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1ldGEtd2lkZ2V0cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL3F1YWxpdHktbWF0cml4L3F1YWxpdHktbWF0cml4Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBVWpDLE1BQU0sT0FBTyxzQkFBc0I7SUFrQmpDLFlBQTZCLE9BQXVCLEVBQW1CLFdBQWlDO1FBQTNFLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQW1CLGdCQUFXLEdBQVgsV0FBVyxDQUFzQjtRQWpCeEcsb0JBQWUsR0FBMEIsRUFBRSxDQUFDO1FBQzVDLHFCQUFnQixHQUFrQixFQUFFLENBQUM7UUFDckMsdUJBQWtCLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FB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TUFBTSxlQUFlLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDO1FBQ3pELE1BQU0saUJBQWlCLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDO1FBQzdELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxLQUFLLEdBQUcsZUFBZSxHQUFHLGlCQUFpQixDQUFDO1FBQ3hFLE1BQU0sSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLGtCQUFrQixHQUFHLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxtQkFBbUI7UUFDbkYsTUFBTSxNQUFNLEdBQUc7WUFDYjtnQkFDRSxFQUFFLEVBQUUsQ0FBQztnQkFDTCxPQUFPLEVBQUUsSUFBSTtnQkFDYixLQUFLLEVBQUUsU0FBUztnQkFDaEIsS0FBSyxFQUFFLEdBQUcsSUFBSSxPQUFPLFlBQVksR0FBRzthQUNyQztZQUNEO2dCQUNFLEVBQUUsRUFBRSxDQUFDO2dCQUNMLE9BQU8sRUFBRSxvQkFBb0I7Z0JBQzdCLEtBQUssRUFBRSxTQUFTO2dCQUNoQixLQUFLLEVBQUUsR0FBRyxvQkFBb0IsT0FBTyxpQkFBaUIsR0FBRzthQUMxRDtZQUNEO2dCQUNFLEVBQUUsRUFBRSxDQUFDO2dCQUNMLE9BQU8sRUFBRSxrQkFBa0I7Z0JBQzNCLEtBQUssRUFBRSxTQUFTO2dCQUNoQixLQUFLLEVBQUUsR0FBRyxrQkFBa0IsT0FBTyxlQUFlLEdBQUc7YUFDdEQ7U0FDRixDQUFDO1FBQ0YsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzsrR0FyUFUsc0JBQXNCO21HQUF0QixzQkFBc0IsaUVDbEJuQyxxZ0pBZ0dBOzs0RkQ5RWEsc0JBQXNCO2tCQUxsQyxTQUFTOytCQUNFLDJCQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBmaW5hbGl6ZSwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTWV0YUFwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi9tZXRhLWFwaS5zZXJ2aWNlJztcbmltcG9ydCB7IFF1YWxpdHlNYXRyaXgsIFF1YWxpdHlNYXRyaXhIZWFkZXIsIFF1YWxpdHlNYXRyaXhSb3cgfSBmcm9tICcuLi8uLi9qYXZhLWFwaSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBGb3JtUmVjb3JkIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRWRpdG9yaWFsTGlua1NlcnZpY2UgfSBmcm9tICcuLi9lZGl0b3JpYWwtbGluay1zZXJ2aWNlL2VkaXRvcmlhbC1saW5rLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tICdsdXhvbic7XG5pbXBvcnQgeyBEb251dFNsaWNlIH0gZnJvbSAnLi4vZG9udXQtY2hhcnQvZG9udXQtY2hhcnQubW9kZWwnO1xuaW1wb3J0IHsgRmlsdGVyLCBGaWx0ZXJWYWx1ZSB9IGZyb20gJy4uLy4uL2phdmEtYXBpJztcbmltcG9ydCB7IEtleVZhbHVlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWV0YXFzMi1xdWFsaXR5LW1hdHJpeC12MicsXG4gIHRlbXBsYXRlVXJsOiAnLi9xdWFsaXR5LW1hdHJpeC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcXVhbGl0eV9tYXRyaXguc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBRdWFsaXR5TWF0cml4Q29tcG9uZW50IHtcbiAgZmlsdGVyZWRDb2x1bW5zOiBRdWFsaXR5TWF0cml4SGVhZGVyW10gPSBbXTtcbiAgZGF0YXRhYmxlQ29sdW1uczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICBzaG93SGlzdG9yaWNhbERhdGEgPSBuZXcgRm9ybUNvbnRyb2woeyB2YWx1ZTogZmFsc2UsIGRpc2FibGVkOiB0cnVlIH0pO1xuICBvbmx5U291cmNlc1dpdGhNYXRlcmlhbCA9IG5ldyBGb3JtQ29udHJvbCh7IHZhbHVlOiB0cnVlLCBkaXNhYmxlZDogdHJ1ZSB9KTtcbiAgY2F0ZWdvcnlDb250cm9sczogRm9ybVJlY29yZDxGb3JtQ29udHJvbDxzdHJpbmdbXT4+O1xuICBpc0xvYWRpbmcgPSBzaWduYWwodHJ1ZSk7XG4gIHJlYWRvbmx5IGNhdGVnb3J5RmlsdGVyVmFsdWVzOiBNYXA8c3RyaW5nLCBGaWx0ZXJWYWx1ZVtdPiA9IG5ldyBNYXAoKTtcbiAgcmVhZG9ubHkgcmVjZW50UXVhbGl0eU1hdHJpeCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFF1YWxpdHlNYXRyaXg+KHsgY29sdW1uczogW10sIHJvd3M6IFtdIH0gYXMgUXVhbGl0eU1hdHJpeCk7XG4gIHJlYWRvbmx5IHBhc3RRdWFsaXR5TWF0cml4JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UXVhbGl0eU1hdHJpeCB8IG51bGw+KHsgY29sdW1uczogW10sIHJvd3M6IFtdIH0gYXMgUXVhbGl0eU1hdHJpeCk7XG4gIHJlYWRvbmx5IHJhbmdlOiBGb3JtR3JvdXA8e1xuICAgIHN0YXJ0OiBGb3JtQ29udHJvbDxEYXRlVGltZTxib29sZWFuPj47XG4gICAgZW5kOiBGb3JtQ29udHJvbDxEYXRlVGltZTxib29sZWFuPj47XG4gIH0+ID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgc3RhcnQ6IG5ldyBGb3JtQ29udHJvbCgpLFxuICAgIGVuZDogbmV3IEZvcm1Db250cm9sKCksXG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgbWV0YUFwaTogTWV0YUFwaVNlcnZpY2UsIHByaXZhdGUgcmVhZG9ubHkgbGlua1NlcnZpY2U6IEVkaXRvcmlhbExpbmtTZXJ2aWNlKSB7XG4gICAgLy8gYSBGb3JtUmVjb3JkIGhhcyB0byBiZSBpbml0aWFsaXplZCB3aXRoIG9uZSBzb3VyY2UgdG8gZGV0ZXJtaW5lIGl0cyB0eXBlIDotKFxuICAgIHRoaXMuY2F0ZWdvcnlDb250cm9scyA9IG5ldyBGb3JtUmVjb3JkKHsgZHVtbXk6IG5ldyBGb3JtQ29udHJvbChbXSwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KSB9KTtcbiAgICB0aGlzLmNhdGVnb3J5Q29udHJvbHMucmVtb3ZlQ29udHJvbCgnZHVtbXknLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgdGhpcy5yZWdpc3RlckNhdGVnb3J5RmlsdGVycygpO1xuICAgIHRoaXMucmVnaXN0ZXJEYXRlUmFuZ2VGaWx0ZXIoKTtcbiAgICAvLyBUT0RPOiBjb25zaWRlciBhIHJlZ2lzdGVyKCkgZnVuY3Rpb25zXG4gICAgdGhpcy5vbmx5U291cmNlc1dpdGhNYXRlcmlhbC52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSkuc3Vic2NyaWJlKChvbmx5V2l0aE1hdGVyaWFsKSA9PiB7XG4gICAgICB0aGlzLmZpbHRlclRhYmxlQnlTb3VyY2VzV2l0aE1hdGVyaWFsKG9ubHlXaXRoTWF0ZXJpYWwpO1xuICAgIH0pO1xuICAgIHRoaXMub25Mb2FkZWREYXRhQ2hhbmdlcygpO1xuICAgIC8vdGhpcy5sb2FkRGF0YVdpdGhDdXJyZW50bHlTZWxlY3RlZEZpbHRlcnMoKTtcbiAgfVxuXG4gIGZpbHRlcklkZW50KF9pbmRleDogbnVtYmVyLCBpdGVtOiBLZXlWYWx1ZTxzdHJpbmcsIEZvcm1Db250cm9sPHN0cmluZ1tdPj4pIHtcbiAgICByZXR1cm4gaXRlbS5rZXk7XG4gIH1cblxuICBnZXQgcXVhbGl0eU1hdHJpeCgpOiBRdWFsaXR5TWF0cml4IHtcbiAgICByZXR1cm4gdGhpcy5yZWNlbnRRdWFsaXR5TWF0cml4JC52YWx1ZTtcbiAgfVxuXG4gIGdldCBzb3VyY2VDb2x1bW5zKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhdGFibGVDb2x1bW5zLm1hcCgoYykgPT4gYyArICdfc291cmNlJyk7XG4gIH1cblxuICBnZXQgY3VycmVudENvbHVtbnMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmRhdGF0YWJsZUNvbHVtbnMubWFwKChjKSA9PiBjICsgJ19jdXJyZW50Jyk7XG4gIH1cblxuICBnZXQgcGFzdENvbHVtbnMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmRhdGF0YWJsZUNvbHVtbnMubWFwKChjKSA9PiBjICsgJ19wYXN0Jyk7XG4gIH1cblxuICBnZXQgYWxsRGF0YUNvbHVtbnMoKTogc3RyaW5nW10ge1xuICAgIGlmICh0aGlzLnNob3dIaXN0b3JpY2FsRGF0YS52YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucGFzdENvbHVtbnMuZmxhdE1hcCgoZSwgaSkgPT4gW2UsIHRoaXMuY3VycmVudENvbHVtbnNbaV1dKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudENvbHVtbnM7XG4gIH1cblxuICBwcml2YXRlIGZpbHRlclRhYmxlQnlTb3VyY2VzV2l0aE1hdGVyaWFsKG9ubHlXaXRoOiBib29sZWFuIHwgbnVsbCkge1xuICAgIGNvbnN0IGFsbENvbHVtbnMgPSB0aGlzLnJlY2VudFF1YWxpdHlNYXRyaXgkLnZhbHVlLmNvbHVtbnMuc2xpY2UoKTtcbiAgICAvLyBhdm9pZCBmaWx0ZXJpbmcgd2hlbiBub3QgbmVjZXNzYXJ5XG4gICAgdGhpcy5maWx0ZXJlZENvbHVtbnMgPSBvbmx5V2l0aCA/IGFsbENvbHVtbnMuZmlsdGVyKChjKSA9PiBjLnRvdGFsID4gMCkgOiBhbGxDb2x1bW5zO1xuICAgIHRoaXMuZGF0YXRhYmxlQ29sdW1ucyA9IHRoaXMuZmlsdGVyZWRDb2x1bW5zLm1hcCgoYykgPT4gYy5pZCk7XG4gIH1cblxuICByZWdpc3RlckRhdGVSYW5nZUZpbHRlcigpIHtcbiAgICB0aGlzLnJhbmdlLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5sb2FkRGF0YVdpdGhDdXJyZW50bHlTZWxlY3RlZEZpbHRlcnMoKTtcbiAgICB9KTtcbiAgICB0aGlzLm1ldGFBcGkuZ2V0VGltZXJhbmdlRmlsdGVyKCkuc3Vic2NyaWJlKChyYW5nZUZpbHRlcikgPT4ge1xuICAgICAgaWYgKHJhbmdlRmlsdGVyKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IERhdGVUaW1lLmZyb21JU08ocmFuZ2VGaWx0ZXIudmFsdWVzLmZpbmQoKHYpID0+IHYuaWQgPT09ICdyYW5nZVN0YXJ0Jyk/LmxhYmVsISwge1xuICAgICAgICAgIHpvbmU6ICd1dGMnLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZW5kRGF0ZSA9IERhdGVUaW1lLmZyb21JU08ocmFuZ2VGaWx0ZXIudmFsdWVzLmZpbmQoKHYpID0+IHYuaWQgPT09ICdyYW5nZUVuZCcpPy5sYWJlbCEsIHsgem9uZTogJ3V0YycgfSk7XG4gICAgICAgIC8vdG9nZ2xlIHRoZSBlbWl0RXZlbnQgdG8gaW5pdGlhbGx5IGxvYWQgdGhlIGRhdGEgb3Igbm90XG4gICAgICAgIHRoaXMucmFuZ2Uuc2V0Q29udHJvbCgnc3RhcnQnLCBuZXcgRm9ybUNvbnRyb2w8RGF0ZVRpbWU+KHN0YXJ0RGF0ZSwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KSwge1xuICAgICAgICAgIGVtaXRFdmVudDogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJhbmdlLnNldENvbnRyb2woJ2VuZCcsIG5ldyBGb3JtQ29udHJvbDxEYXRlVGltZT4oZW5kRGF0ZSwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KSwgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlZ2lzdGVyQ2F0ZWdvcnlGaWx0ZXJzKCkge1xuICAgIHRoaXMubWV0YUFwaVxuICAgICAgLmdldENhdGVnb3J5RmlsdGVycygpXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSgoZmlsdGVycykgPT4ge1xuICAgICAgICBmaWx0ZXJzLmZvckVhY2goKGZpbHRlcikgPT4ge1xuICAgICAgICAgIHRoaXMuY2F0ZWdvcnlDb250cm9scy5hZGRDb250cm9sKGZpbHRlci5maWVsZCwgbmV3IEZvcm1Db250cm9sKFtdLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pLCB7XG4gICAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuY2F0ZWdvcnlGaWx0ZXJWYWx1ZXMuc2V0KFxuICAgICAgICAgICAgZmlsdGVyLmZpZWxkLFxuICAgICAgICAgICAgZmlsdGVyLnZhbHVlcy50b1NvcnRlZCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gYS5sYWJlbC5sb2NhbGVDb21wYXJlKGIubGFiZWwpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIHRoaXMuY2F0ZWdvcnlDb250cm9scy52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmxvYWREYXRhV2l0aEN1cnJlbnRseVNlbGVjdGVkRmlsdGVycygpKTtcbiAgfVxuXG4gIHByaXZhdGUgb25Mb2FkZWREYXRhQ2hhbmdlcygpIHtcbiAgICB0aGlzLnJlY2VudFF1YWxpdHlNYXRyaXgkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXG4gICAgICAgIGZpbHRlcigocW0pID0+IHFtICE9PSBudWxsKSxcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuZmlsdGVyVGFibGVCeVNvdXJjZXNXaXRoTWF0ZXJpYWwodGhpcy5vbmx5U291cmNlc1dpdGhNYXRlcmlhbC52YWx1ZSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIGxvYWREYXRhRm9yU3RhcnQoKTogT2JzZXJ2YWJsZTxRdWFsaXR5TWF0cml4IHwgbnVsbD4ge1xuICAgIGlmICh0aGlzLnJhbmdlLmNvbnRyb2xzLnN0YXJ0Py52YWx1ZSkge1xuICAgICAgY29uc3QgYm9keTogRmlsdGVyW10gPSB0aGlzLmdldEN1cnJlbnRGaWx0ZXJWYWx1ZXMoKTtcbiAgICAgIGJvZHkucHVzaCh7XG4gICAgICAgIGZpZWxkOiAnYXNPZicsXG4gICAgICAgIHZhbHVlczogW3sgaWQ6IHRoaXMucmFuZ2UuY29udHJvbHMuc3RhcnQudmFsdWUudG9JU08oeyBpbmNsdWRlT2Zmc2V0OiBmYWxzZSB9KSBhcyBzdHJpbmcsIGxhYmVsOiAnJyB9XSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRoaXMubWV0YUFwaS5nZXRRdWFsaXR5TWF0cml4V2l0aEZpbHRlcnNWMihib2R5KS5waXBlKHRha2UoMSkpO1xuICAgIH1cbiAgICByZXR1cm4gb2YobnVsbCk7XG4gIH1cblxuICBwcml2YXRlIGxvYWREYXRhRm9yRW5kKCk6IE9ic2VydmFibGU8UXVhbGl0eU1hdHJpeD4ge1xuICAgIGNvbnN0IGJvZHk6IEZpbHRlcltdID0gdGhpcy5nZXRDdXJyZW50RmlsdGVyVmFsdWVzKCk7XG4gICAgYm9keS5wdXNoKHtcbiAgICAgIGZpZWxkOiAnYXNPZicsXG4gICAgICB2YWx1ZXM6IFt7IGlkOiB0aGlzLnJhbmdlLmNvbnRyb2xzLmVuZC52YWx1ZS50b0lTTyh7IGluY2x1ZGVPZmZzZXQ6IGZhbHNlIH0pIGFzIHN0cmluZywgbGFiZWw6ICcnIH1dLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLm1ldGFBcGkuZ2V0UXVhbGl0eU1hdHJpeFdpdGhGaWx0ZXJzVjIoYm9keSkucGlwZSh0YWtlKDEpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3VycmVudEZpbHRlclZhbHVlcygpOiBGaWx0ZXJbXSB7XG4gICAgY29uc3QgYm9keTogRmlsdGVyW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtmaWVsZCwgdmFsdWVzXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmNhdGVnb3J5Q29udHJvbHMudmFsdWUpKSB7XG4gICAgICBsZXQgcmVxdWVzdFZhbHVlczogRmlsdGVyVmFsdWVbXSA9IFtdO1xuICAgICAgaWYgKHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIHJlcXVlc3RWYWx1ZXMgPSB2YWx1ZXMubWFwKCh2YWx1ZSkgPT4gKHsgaWQ6IHZhbHVlLCBsYWJlbDogJycgfSkpO1xuICAgICAgICBib2R5LnB1c2goeyBmaWVsZCwgdmFsdWVzOiByZXF1ZXN0VmFsdWVzIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYm9keTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZERhdGFXaXRoQ3VycmVudGx5U2VsZWN0ZWRGaWx0ZXJzKCkge1xuICAgIHRoaXMuaXNMb2FkaW5nLnNldCh0cnVlKTtcbiAgICBmb3JrSm9pbih7XG4gICAgICBwYXN0UW06IHRoaXMubG9hZERhdGFGb3JTdGFydCgpLFxuICAgICAgY3VycmVudFFtOiB0aGlzLmxvYWREYXRhRm9yRW5kKCksXG4gICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgoeyBwYXN0UW06IF8sIGN1cnJlbnRRbSB9KSA9PiB7XG4gICAgICAgICAgdGhpcy5kYXRhdGFibGVDb2x1bW5zID0gY3VycmVudFFtLmNvbHVtbnMuZmlsdGVyKChjKSA9PiBjLmxldmVsICE9PSAwKS5tYXAoKGMpID0+IGMuaWQpO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoeyBwYXN0UW0sIGN1cnJlbnRRbSB9KSA9PiB7XG4gICAgICAgIHRoaXMucmVjZW50UXVhbGl0eU1hdHJpeCQubmV4dChjdXJyZW50UW0pO1xuICAgICAgICB0aGlzLnBhc3RRdWFsaXR5TWF0cml4JC5uZXh0KHBhc3RRbSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIG9wZW5FZGl0TGluayhzb3VyY2U6IHN0cmluZywgaXNzdWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmxpbmtTZXJ2aWNlLm9wZW5CeVJlcGxpY2F0aW9uc291cmNlQW5kSXNzdWVUeXBlV2l0aEZpbHRlcnMoc291cmNlLCBpc3N1ZSwgdGhpcy5jYXRlZ29yeUNvbnRyb2xzLnZhbHVlKTtcbiAgfVxuXG4gIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL2lzc3Vlcy84MzYxI2lzc3VlY29tbWVudC0zNDU4MDQ5NTRcbiAgY29sdW1uSWRlbnQoX2luZGV4OiBudW1iZXIsIGNvbDogUXVhbGl0eU1hdHJpeEhlYWRlcikge1xuICAgIHJldHVybiBjb2wuaWQ7XG4gIH1cblxuICBhc3luYyByZWZyZXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vb3Igc2hvdWxkIHdlIHJlc2V0IGFsbCBGaWx0ZXI/XG4gICAgdGhpcy5sb2FkRGF0YVdpdGhDdXJyZW50bHlTZWxlY3RlZEZpbHRlcnMoKTtcbiAgfVxuXG4gIGdldFBhc3RDb2x1bW4oY29sdW1uSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnBhc3RRdWFsaXR5TWF0cml4JC52YWx1ZT8uY29sdW1ucy5maW5kKChjKSA9PiBjLmlkID09PSBjb2x1bW5JZCk7XG4gIH1cblxuICBnZXRUcmVuZChyb3c6IFF1YWxpdHlNYXRyaXhSb3csIGNvbHVtbjogUXVhbGl0eU1hdHJpeEhlYWRlcik6IHsgZGVsdGE/OiBudW1iZXI7IHRyZW5kPzogc3RyaW5nIH0ge1xuICAgIGlmICh0aGlzLnBhc3RRdWFsaXR5TWF0cml4JC52YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBpZiAodGhpcy5wYXN0UXVhbGl0eU1hdHJpeCQudmFsdWUuY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBwYXN0X3JvdyA9IHRoaXMucGFzdFF1YWxpdHlNYXRyaXgkPy52YWx1ZS5yb3dzLmZpbmQoKHByKSA9PiBwci5tZXRhLmlkID09IHJvdy5tZXRhLmlkKTtcbiAgICAgIGNvbnN0IHBhc3RfY29sdW1uID0gdGhpcy5wYXN0UXVhbGl0eU1hdHJpeCQudmFsdWUuY29sdW1ucy5maW5kKChjKSA9PiBjLmlkID09IGNvbHVtbi5pZCk7XG4gICAgICBpZiAoIXBhc3Rfcm93IHx8ICFwYXN0X2NvbHVtbikge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRlbHRhID0gTWF0aC5mbG9vcihcbiAgICAgICAgKDEwMCAqIHJvdy5jb3VudHNbY29sdW1uLmlkXS5zdWZmaWNpZW50KSAvIGNvbHVtbi50b3RhbCAtXG4gICAgICAgICAgKDEwMCAqIHBhc3Rfcm93LmNvdW50c1tjb2x1bW4uaWRdLnN1ZmZpY2llbnQpIC8gcGFzdF9jb2x1bW4udG90YWxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHRyZW5kID0gZGVsdGEgPT09IDAgPyAndHJlbmRpbmdfZmxhdCcgOiBkZWx0YSA8IDAgPyAndHJlbmRpbmdfZG93bicgOiAndHJlbmRpbmdfdXAnO1xuICAgICAgcmV0dXJuIHsgZGVsdGEsIHRyZW5kIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH1cblxuICBnZXREb251dFNsaWNlcyhyb3c6IFF1YWxpdHlNYXRyaXhSb3csIGNvbHVtbjogUXVhbGl0eU1hdHJpeEhlYWRlcik6IERvbnV0U2xpY2VbXSB7XG4gICAgbGV0IHN1ZmZpY2llbnRmaWxsUmF0ZSA9IDA7XG4gICAgbGV0IGluc3VmZmljaWVudGZpbGxSYXRlID0gMDtcbiAgICAvL0RlciBXZXJ0IGJlcmVjaG5ldCBzaWNoIGF1cyBkZW0gdG90YWxfY291bnQgLSB3aXRob3V0X2Rlc2NyaXB0aW9uX2NvdW50LlxuXG4gICAgaWYgKGNvbHVtbi50b3RhbCAhPT0gMCkge1xuICAgICAgc3VmZmljaWVudGZpbGxSYXRlID0gTWF0aC5yb3VuZCgoMTAwICogcm93LmNvdW50c1tjb2x1bW4uaWRdLnN1ZmZpY2llbnQpIC8gY29sdW1uLnRvdGFsKTtcbiAgICAgIGluc3VmZmljaWVudGZpbGxSYXRlID0gTWF0aC5yb3VuZCgoMTAwICogcm93LmNvdW50c1tjb2x1bW4uaWRdLmluc3VmZmljaWVudCkgLyBjb2x1bW4udG90YWwpO1xuICAgIH1cbiAgICBjb25zdCBzdWZmaWNpZW50VG90YWwgPSByb3cuY291bnRzW2NvbHVtbi5pZF0uc3VmZmljaWVudDtcbiAgICBjb25zdCBpbnN1ZmZpY2llbnRUb3RhbCA9IHJvdy5jb3VudHNbY29sdW1uLmlkXS5pbnN1ZmZpY2llbnQ7XG4gICAgY29uc3QgbWlzc2luZ1RvdGFsID0gY29sdW1uLnRvdGFsIC0gc3VmZmljaWVudFRvdGFsIC0gaW5zdWZmaWNpZW50VG90YWw7XG4gICAgY29uc3QgcmVzdCA9IDEwMCAtIChzdWZmaWNpZW50ZmlsbFJhdGUgKyBpbnN1ZmZpY2llbnRmaWxsUmF0ZSk7IC8vIGEuay5hLiBcIm1pc3NpbmdcIlxuICAgIGNvbnN0IHNsaWNlcyA9IFtcbiAgICAgIHtcbiAgICAgICAgaWQ6IDMsXG4gICAgICAgIHBlcmNlbnQ6IHJlc3QsXG4gICAgICAgIGNvbG9yOiAnI0Q4RURGQycsXG4gICAgICAgIGxhYmVsOiBgJHtyZXN0fSAlICgke21pc3NpbmdUb3RhbH0pYCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiAxLFxuICAgICAgICBwZXJjZW50OiBpbnN1ZmZpY2llbnRmaWxsUmF0ZSxcbiAgICAgICAgY29sb3I6ICcjQzIwODA4JyxcbiAgICAgICAgbGFiZWw6IGAke2luc3VmZmljaWVudGZpbGxSYXRlfSAlICgke2luc3VmZmljaWVudFRvdGFsfSlgLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6IDIsXG4gICAgICAgIHBlcmNlbnQ6IHN1ZmZpY2llbnRmaWxsUmF0ZSxcbiAgICAgICAgY29sb3I6ICcjNEFCRUZGJyxcbiAgICAgICAgbGFiZWw6IGAke3N1ZmZpY2llbnRmaWxsUmF0ZX0gJSAoJHtzdWZmaWNpZW50VG90YWx9KWAsXG4gICAgICB9LFxuICAgIF07XG4gICAgcmV0dXJuIHNsaWNlcztcbiAgfVxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgRGF0ZVRpbWUgPSBEYXRlVGltZTtcbn1cbiIsIjxtYXQtY2FyZCBhcHBlYXJhbmNlPVwicmFpc2VkXCI+XG4gIDxtYXQtY2FyZC1oZWFkZXI+XG4gICAgPG1hdC1jYXJkLXRpdGxlPlxuICAgICAgUXVhbGl0w6R0c21ldHJpazogTWV0YWRhdGVudm9sbHN0w6RuZGlna2VpdCB2b24gUXVlbGxlbnt7aXNMb2FkaW5nKCkgPyBcIjogTGFkZSBuZXVlIERhdGVuLlwiIDogXCJcIn19PC9tYXQtY2FyZC10aXRsZVxuICAgID5cbiAgPC9tYXQtY2FyZC1oZWFkZXI+XG4gIDxtYXQtY2FyZC1jb250ZW50PlxuICAgICAgPG1ldGFxczItcW0tZmlsdGVyXG4gICAgICAgICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2YgY2F0ZWdvcnlDb250cm9scy5jb250cm9scyB8IGtleXZhbHVlOyB0cmFja0J5OiBmaWx0ZXJJZGVudFwiXG4gICAgICAgIFtvcHRpb25zXT1cImNhdGVnb3J5RmlsdGVyVmFsdWVzLmdldChmaWx0ZXIua2V5KVwiXG4gICAgICAgIFtpbnB1dEZvcm1Db250cm9sXT1cImZpbHRlci52YWx1ZVwiXG4gICAgICAgIFtsYWJlbF0gPSBcIidmaWx0ZXIuJyArIGZpbHRlci5rZXkgfCB0cmFuc2xhdGVcIj48L21ldGFxczItcW0tZmlsdGVyPlxuICA8L21hdC1jYXJkLWNvbnRlbnQ+XG4gIDxtYXQtY2FyZC1hY3Rpb25zIGFsaWduPVwiZW5kXCI+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgW2Rpc2FibGVkXT1cImlzTG9hZGluZygpXCIgbGFiZWxQb3NpdGlvbj1cImJlZm9yZVwiIFtmb3JtQ29udHJvbF09XCJvbmx5U291cmNlc1dpdGhNYXRlcmlhbFwiIGlkPVwib25seVNvdXJjZXNXaXRoTWF0ZXJpYWxcIiA+XG4gICAgICBzaG93IG9ubHkgc291cmNlcyB3aXRoIG1hdGVyaWFsXG4gICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFtkaXNhYmxlZF09XCJpc0xvYWRpbmcoKVwiIGxhYmVsUG9zaXRpb249XCJiZWZvcmVcIiBbZm9ybUNvbnRyb2xdPVwic2hvd0hpc3RvcmljYWxEYXRhXCIgaWQ9XCJzaG93SGlzdG9yaWNhbERhdGFcIiA+XG4gICAgICBzaG93IGhpc3RvcmljYWwgZGF0YVxuICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8YnV0dG9uXG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nXCJcbiAgICAgIChjbGljayk9XCJyZWZyZXNoKClcIlxuICAgICAgbWF0VG9vbHRpcD1cIkFrdHVhbGlzaWVyZSBkZW4gSVNULVN0YW5kXCJcbiAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbj5yZWZyZXNoPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9tYXQtY2FyZC1hY3Rpb25zPlxuPC9tYXQtY2FyZD5cbjxtZXRhcXMyLWRhdGVwaWNrZXIgKm5nSWY9XCJzaG93SGlzdG9yaWNhbERhdGEudmFsdWVcIiBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nKClcIiBbaW5wdXRHcm91cF09XCJyYW5nZVwiID48L21ldGFxczItZGF0ZXBpY2tlcj5cblxuXG48bWF0LWNhcmQ+XG4gIDx0YWJsZSBbbmdDbGFzc109XCJ7J3doaWxlLWxvYWRpbmcnOiBpc0xvYWRpbmcoKX1cIiBtYXQtdGFibGUgW2RhdGFTb3VyY2VdPVwicmVjZW50UXVhbGl0eU1hdHJpeCQudmFsdWUucm93c1wiIGNsYXNzPVwicXVhbGl0eS1tYXRyaXhcIj5cbiAgICA8IS0tIERlZmluZSBjb2x1bW5zIG9mIHRhYmxlIC0tPlxuICAgIDwhLS0gUm93IEhlYWRlciBDb2x1bW4gLS0+XG4gICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJyb3ctaGVhZGVyXCIgc3RpY2t5PlxuICAgICAgPHRoIHJvd3NwYW49XCIyXCIgbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPklzc3VlIFR5cGU8L3RoPlxuICAgICAgPHRkXG4gICAgICAgIG1hdC1jZWxsXG4gICAgICAgICptYXRDZWxsRGVmPVwibGV0IHJvd1wiXG4gICAgICAgIG1hdFRvb2x0aXA9XCJ7e3Jvdy5tZXRhLmFsdF9sYWJlbH19XCJcbiAgICAgICAgY2xhc3M9XCJyb3ctaGVhZGVyIHt7J21hdC1jZWxsLWxldmVsLScgKyAocm93Lm1ldGEubGV2ZWwrMSl9fVwiXG4gICAgICA+XG4gICAgICAgIHt7XCJxdWFsaXR5X21hdHJpeC5cIiArIHJvdy5tZXRhLmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3RkPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwhLS0gb25lIGNvbHVtbiBmb3IgdGhlIHNvdXJjZSAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2wgb2YgZmlsdGVyZWRDb2x1bW5zOyB0cmFja0J5OmNvbHVtbklkZW50XCIgW21hdENvbHVtbkRlZl09XCJjb2wuaWQgKyAnX3NvdXJjZSdcIj5cbiAgICAgIDx0aCBbYXR0ci5jb2xzcGFuXT1cInNob3dIaXN0b3JpY2FsRGF0YS52YWx1ZT8yOjFcIiBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0VG9vbHRpcD1cInt7Y29sLmFsdExhYmVsfX1cIiA+e3tjb2wubGFiZWx9fTwvdGg+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPCEtLSAvc291cmNlIC0tPlxuICAgIDwhLS0gY3VycmVudCBEYXRhIENvbHVtbnMgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGZpbHRlcmVkQ29sdW1uczsgdHJhY2tCeTpjb2x1bW5JZGVudFwiIFttYXRDb2x1bW5EZWZdPVwiY29sdW1uLmlkICsgJ19jdXJyZW50J1wiPlxuICAgICAgPHRoIGNsYXNzPVwicmVjZW50LWRhdGEtY2VsbFwiIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXRUb29sdGlwPVwie3tjb2x1bW4uYWx0TGFiZWx9fVwiID57eyByYW5nZS5jb250cm9scy5lbmQudmFsdWU/LnRvTG9jYWxlU3RyaW5nKERhdGVUaW1lLkRBVEVfU0hPUlQpIH19IDxicj4oe3tjb2x1bW4udG90YWx9fSk8L3RoPlxuICAgICAgPHRkIGNsYXNzPVwicmVjZW50LWRhdGEtY2VsbFwiIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiPlxuICAgICAgICAgIDxhICpuZ0lmPVwiY29sdW1uLnRvdGFsID4gMCBlbHNlIGVtcHR5RGl2XCIgY2xhc3M9XCJjaGFydC1jb250YWluZXJcIiAoY2xpY2spPVwib3BlbkVkaXRMaW5rKCBjb2x1bW4ubGFiZWwsICByb3cubWV0YS5sYWJlbClcIj5cbiAgICAgICAgICAgIDxkaXYgPlxuICAgICAgICAgICAgICA8bWV0YXFzMi1kb251dC1jaGFydCBbZGF0YV09XCJnZXREb251dFNsaWNlcyhyb3csIGNvbHVtbilcIiBbYm9yZGVyU2l6ZV09XCIyNVwiPjwvbWV0YXFzMi1kb251dC1jaGFydD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2VtcHR5RGl2PlxuICAgICAgICAgICAgPGRpdj4tPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPCEtLSAvY3VycmVudCBEYXRhIENvbHVtbnMgLS0+XG4gICAgPCEtLSBwYXN0IERhdGEgQ29sdW1ucyAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0hpc3RvcmljYWxEYXRhLnZhbHVlXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgZmlsdGVyZWRDb2x1bW5zOyB0cmFja0J5OmNvbHVtbklkZW50XCIgW21hdENvbHVtbkRlZl09XCJjb2x1bW4uaWQgKyAnX3Bhc3QnXCI+XG4gICAgICAgIDx0aCBjbGFzcz1cImhpc3RvcmljLWRhdGEtY2VsbFwiIG1hdC1oZWFkZXItY2VsbFxuICAgICAgICAgICAgKm1hdEhlYWRlckNlbGxEZWY+e3sgcmFuZ2UuY29udHJvbHMuc3RhcnQudmFsdWU/LnRvTG9jYWxlU3RyaW5nKERhdGVUaW1lLkRBVEVfU0hPUlQpIH19XG4gICAgICAgICAgPGJyPnt7IGdldFBhc3RDb2x1bW4oY29sdW1uLmlkKT8udG90YWwgfX1cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRkIGNsYXNzPVwiaGlzdG9yaWMtZGF0YS1jZWxsXCIgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldFRyZW5kKHJvdywgY29sdW1uKSBhcyB0cmVuZFwiPlxuICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwidHJlbmQudHJlbmRcIj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIGFyaWEtaGlkZGVuPVwiZmFsc2VcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInRyZW5kLnRyZW5kXCIgW2ZvbnRJY29uXT1cInRyZW5kLnRyZW5kIVwiIC8+XG4gICAgICAgICAgICAgIHt7IHRyZW5kLmRlbHRhIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwhLS0gL3Bhc3QgRGF0YSBDb2x1bW5zIC0tPlxuXG4gICAgICA8IS0tIEdlbmVyYXRlIGFjdHVhbCB0YWJsZSAtLT5cbiAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cIlsncm93LWhlYWRlciddLmNvbmNhdCggc291cmNlQ29sdW1ucyk7IHN0aWNreTogdHJ1ZTtcIj48L3RyPlxuICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiYWxsRGF0YUNvbHVtbnM7IHN0aWNreTogdHJ1ZTtcIj48L3RyPlxuICAgIDx0ciBtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBbJ3Jvdy1oZWFkZXInXS5jb25jYXQoYWxsRGF0YUNvbHVtbnMpXCI+PC90cj5cbiAgPC90YWJsZT5cbjwvbWF0LWNhcmQ+XG4iXX0=
|
|
243
|
+
args: [{ selector: 'metaqs2-quality-matrix-v2', template: "<mat-card appearance=\"raised\">\n <mat-card-header *ngIf=\"pageTitle\">\n <mat-card-title>\n Qualit\u00E4tsmetrik: {{ pageTitle | translate }}{{isLoading() ? \": Lade neue Daten.\" : \"\"}}</mat-card-title\n >\n </mat-card-header>\n <mat-card-content>\n <metaqs2-qm-filter\n *ngFor=\"let filter of categoryControls.controls | keyvalue; trackBy: filterIdent\"\n [options]=\"categoryFilterValues.get(filter.key)\"\n [inputFormControl]=\"filter.value\"\n [label] = \"'filter.' + filter.key | translate\"></metaqs2-qm-filter>\n </mat-card-content>\n <mat-card-actions align=\"end\">\n <mat-slide-toggle [disabled]=\"isLoading()\" labelPosition=\"before\" [formControl]=\"onlySourcesWithMaterial\" id=\"onlySourcesWithMaterial\" >\n show only sources with material\n </mat-slide-toggle>\n <mat-slide-toggle [disabled]=\"isLoading()\" labelPosition=\"before\" [formControl]=\"showHistoricalData\" id=\"showHistoricalData\" >\n show historical data\n </mat-slide-toggle>\n <button\n mat-icon-button\n color=\"primary\"\n [disabled]=\"isLoading\"\n (click)=\"refresh()\"\n matTooltip=\"Aktualisiere den IST-Stand\"\n matTooltipShowDelay=\"500\"\n >\n <mat-icon>refresh</mat-icon>\n </button>\n </mat-card-actions>\n</mat-card>\n<metaqs2-datepicker *ngIf=\"showHistoricalData.value\" [disabled]=\"isLoading()\" [inputGroup]=\"range\" ></metaqs2-datepicker>\n\n\n<mat-card>\n <table [ngClass]=\"{'while-loading': isLoading()}\" mat-table [dataSource]=\"recentQualityMatrix$.value.rows\" class=\"quality-matrix\">\n <!-- Define columns of table -->\n <!-- Row Header Column -->\n <ng-container matColumnDef=\"row-header\" sticky>\n <th rowspan=\"2\" mat-header-cell *matHeaderCellDef>Issue Type</th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n matTooltip=\"{{row.meta.alt_label}}\"\n class=\"row-header {{'mat-cell-level-' + (row.meta.level+1)}}\"\n >\n {{\"quality_matrix.\" + row.meta.label | translate }}\n </td>\n </ng-container>\n <!-- one column for the source -->\n <ng-container *ngFor=\"let col of filteredColumns; trackBy:columnIdent\" [matColumnDef]=\"col.id + '_source'\">\n <th [attr.colspan]=\"showHistoricalData.value?2:1\" mat-header-cell *matHeaderCellDef matTooltip=\"{{col.altLabel}}\" >{{col.label}}</th>\n </ng-container>\n <!-- /source -->\n <!-- current Data Columns -->\n <ng-container *ngFor=\"let column of filteredColumns; trackBy:columnIdent\" [matColumnDef]=\"column.id + '_current'\">\n <th class=\"recent-data-cell\" mat-header-cell *matHeaderCellDef matTooltip=\"{{column.altLabel}}\" >{{ range.controls.end.value?.toLocaleString(DateTime.DATE_SHORT) }} <br>({{column.total}})</th>\n <td class=\"recent-data-cell\" mat-cell *matCellDef=\"let row\">\n <a *ngIf=\"column.total > 0 else emptyDiv\" class=\"chart-container\" (click)=\"openEditLink( column.label, row.meta.label)\">\n <div >\n <metaqs2-donut-chart [data]=\"getDonutSlices(row, column)\" [borderSize]=\"25\"></metaqs2-donut-chart>\n </div>\n </a>\n <ng-template #emptyDiv>\n <div>-</div>\n </ng-template>\n </td>\n </ng-container>\n <!-- /current Data Columns -->\n <!-- past Data Columns -->\n <ng-container *ngIf=\"showHistoricalData.value\">\n <ng-container *ngFor=\"let column of filteredColumns; trackBy:columnIdent\" [matColumnDef]=\"column.id + '_past'\">\n <th class=\"historic-data-cell\" mat-header-cell\n *matHeaderCellDef>{{ range.controls.start.value?.toLocaleString(DateTime.DATE_SHORT) }}\n <br>{{ getPastColumn(column.id)?.total }}\n </th>\n <td class=\"historic-data-cell\" mat-cell *matCellDef=\"let row\">\n <ng-container *ngIf=\"getTrend(row, column) as trend\">\n <span [ngClass]=\"trend.trend\">\n <mat-icon aria-hidden=\"false\" [attr.aria-label]=\"trend.trend\" [fontIcon]=\"trend.trend!\" />\n {{ trend.delta }}\n </span>\n </ng-container>\n\n </td>\n </ng-container>\n </ng-container>\n <!-- /past Data Columns -->\n\n <!-- Generate actual table -->\n <tr mat-header-row *matHeaderRowDef=\"['row-header'].concat( sourceColumns); sticky: true;\"></tr>\n <tr mat-header-row *matHeaderRowDef=\"allDataColumns; sticky: true;\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['row-header'].concat(allDataColumns)\"></tr>\n </table>\n</mat-card>\n", styles: ["mat-card-actions>mat-slide-toggle{margin-left:20px}.row{flex-grow:1;display:flex;align-items:center}table{width:100%;overflow-y:auto}table .scroll{flex-grow:1;overflow-y:auto}.cell{flex:1}.mat-mdc-cell{padding-top:5px}.mat-mdc-cell,.mat-mdc-header-cell{padding-left:5px;text-align:center}.mat-mdc-cell a.chart-container,.mat-mdc-header-cell a.chart-container{display:flex;justify-content:center}.mat-mdc-cell .trending_up,.mat-mdc-header-cell .trending_up{color:#4abeff}.mat-mdc-cell .trending_down,.mat-mdc-header-cell .trending_down{color:#c20808}.recent-data-cell,.mat-column-row-header{border-right:1px solid #e4e4e4}.mat-header-cell-label{color:#000;padding-left:30px;padding-right:30px;justify-content:left;border-bottom:1px solid #e4e4e4;font-style:normal;font-weight:500;font-size:110%;background:#ddf0fb;text-align:left}.mat-header-cell-label>div{display:flex;font-weight:700;font-style:normal;justify-content:left}.mat-header-cell-small{padding-left:5px;padding-right:5px;justify-content:left;font-style:normal;font-weight:400;font-size:105%;background:#ddf0fb;border-top:1px solid #e4e4e4;border-bottom:1px solid #e4e4e4}.mat-mdc-cell a{cursor:pointer;display:flex;align-items:center;justify-content:left}.mat-mdc-cell a>mat-icon{padding-right:5px;font-size:22px;height:20px;opacity:.75}.mat-mdc-cell a>mat-icon:hover,.mat-mdc-cell a>mat-icon:focus{text-decoration:none}.mat-mdc-cell .number{display:flex;height:47px;justify-content:left;align-items:center;padding-left:15px}.mat-mdc-cell .row-header{display:flex;height:47px;max-height:47px;justify-content:left;align-items:center;padding-left:15px}.mat-mdc-cell .row-header-sum{display:flex;height:47px;max-height:47px;justify-content:left;align-items:center;border-right:5px solid #bdbdbd}.mat-mdc-card{width:100%;box-shadow:none}.mat-mdc-card ::ng-deep mat-card-header{align-items:center}.mat-mdc-card ::ng-deep mat-card-header .mat-card-header-text{flex-grow:1;margin:0}.mat-mdc-card ::ng-deep mat-card-header .mat-card-header-text mat-card-title{padding-top:20px;font-size:120%}.mat-mdc-card ::ng-deep mat-card-header .mat-card-header-text mat-card-title .count{font-size:80%;color:#888}.mat-mdc-card .source-header{font-style:normal;font-weight:400;font-size:20px;height:30px;width:60%}.mat-mdc-card .source-header .robot-explanation{font-size:15px}.mat-mdc-card .scroll{flex-grow:1;overflow-y:auto}.mat-header-cell-scope{color:#545454}.mat-mdc-header-row{height:70px;max-height:70px;min-height:56px}:host{overflow:auto}:host ::ng-deep thead{border:10px solid #ff0000;position:relative;z-index:1}.mat-cell-level-1{padding-left:20px!important}.mat-cell-level-2{padding-left:40px!important}.mat-cell-level-3{padding-left:60px!important}.mat-cell-level-4{padding-left:80px!important}.mat-cell-level-5{padding-left:100px!important}.mat-cell-level-6{padding-left:120px!important}.mat-cell-level-7{padding-left:140px!important}.mat-cell-level-8{padding-left:160px!important}\n"] }]
|
|
244
|
+
}], ctorParameters: () => [{ type: i1.MetaApiService }, { type: i2.EditorialLinkService }], propDecorators: { pageTitle: [{
|
|
245
|
+
type: Input
|
|
246
|
+
}] } });
|
|
247
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVhbGl0eV9tYXRyaXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1tZXRhLXdpZGdldHMtbGliL3NyYy9saWIvY29tcG9uZW50cy9xdWFsaXR5LW1hdHJpeC9xdWFsaXR5X21hdHJpeC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1ldGEtd2lkZ2V0cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL3F1YWxpdHktbWF0cml4L3F1YWxpdHktbWF0cml4Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFaEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQVVqQyxNQUFNLE9BQU8sc0JBQXNCO0lBb0JqQyxZQUE2QixPQUF1QixFQUFtQixXQUFpQztRQUEzRSxZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUFtQixnQkFBVyxHQUFYLFdBQVcsQ0FBc0I7UUFuQnhHLG9CQUFlLEdBQTBCLEVBQUUsQ0FBQztRQUM1QyxxQkFBZ0IsR0FBa0IsRUFBRSxDQUFDO1FBQ3JDLHVCQUFrQixHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN2RSw0QkFBdUIsR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFFM0UsY0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQix5QkFBb0IsR0FBK0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUM3RCx5QkFBb0IsR0FBRyxJQUFJLGVBQWUsQ0FBZ0IsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQW1CLENBQUMsQ0FBQztRQUN0Ryx1QkFBa0IsR0FBRyxJQUFJLGVBQWUsQ0FBdUIsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQW1CLENBQUMsQ0FBQztRQUMzRyxVQUFLLEdBR1QsSUFBSSxTQUFTLENBQUM7WUFDakIsS0FBSyxFQUFFLElBQUksV0FBVyxFQUFFO1lBQ3hCLEdBQUcsRUFBRSxJQUFJLFdBQVcsRUFBRTtTQUN2QixDQUFDLENBQUM7UUFFSCxjQUFTLEdBQVcsZ0JBQWdCLENBQUM7UUEyT2xCLGFBQVEsR0FBRyxRQUFRLENBQUM7UUF4T3JDLCtFQUErRTtRQUMvRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDL0Isd0NBQXdDO1FBQ3hDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFO1lBQ2xHLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzFELENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsOENBQThDO0lBQ2hELENBQUM7SUFFRCxXQUFXLENBQUMsTUFBYyxFQUFFLElBQTZDO1FBQ3ZFLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2xDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFTyxnQ0FBZ0MsQ0FBQyxRQUF3QjtRQUMvRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM5RyxxQ0FBcUM7UUFDckMsSUFBSSxDQUFDLGVBQWUsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztRQUNyRixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsdUJBQXVCO1FBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNoRSxJQUFJLENBQUMsb0NBQW9DLEVBQUUsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUMxRCxJQUFJLFdBQVcsRUFBRSxDQUFDO2dCQUNoQixNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFlBQVksQ0FBQyxFQUFFLEtBQU0sRUFBRTtvQkFDaEcsSUFBSSxFQUFFLEtBQUs7aUJBQ1osQ0FBQyxDQUFDO2dCQUNILE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssVUFBVSxDQUFDLEVBQUUsS0FBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7Z0JBQy9HLHdEQUF3RDtnQkFDeEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLElBQUksV0FBVyxDQUFXLFNBQVMsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFO29CQUMxRixTQUFTLEVBQUUsS0FBSztpQkFDakIsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLFdBQVcsQ0FBVyxPQUFPLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQy9HLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyx1QkFBdUI7UUFDN0IsSUFBSSxDQUFDLE9BQU87YUFDVCxrQkFBa0IsRUFBRTthQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2IsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDckIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUN6QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUU7b0JBQ3pGLFNBQVMsRUFBRSxLQUFLO2lCQUNqQixDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FDM0IsTUFBTSxDQUFDLEtBQUssRUFDWixNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDOUIsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3hDLENBQUMsQ0FBQyxDQUNILENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVk7YUFDL0IsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7YUFDMUIsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxvQ0FBb0MsRUFBRSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVPLG1CQUFtQjtRQUN6QixJQUFJLENBQUMsb0JBQW9CO2FBQ3RCLElBQUksQ0FDSCxrQkFBa0IsRUFBRSxFQUNwQixNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFDM0IsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDckY7YUFDQSxTQUFTLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ3JDLE1BQU0sSUFBSSxHQUFhLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQ3JELElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQ1IsS0FBSyxFQUFFLE1BQU07Z0JBQ2IsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQVcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7YUFDdkcsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUVPLGNBQWM7UUFDcEIsTUFBTSxJQUFJLEdBQWEsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDckQsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNSLEtBQUssRUFBRSxNQUFNO1lBQ2IsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQVcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7U0FDckcsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRU8sc0JBQXNCO1FBQzVCLE1BQU0sSUFBSSxHQUFhLEVBQUUsQ0FBQztRQUMxQixLQUFLLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMxRSxJQUFJLGFBQWEsR0FBa0IsRUFBRSxDQUFDO1lBQ3RDLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDNUIsYUFBYSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7WUFDOUMsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyxvQ0FBb0M7UUFDMUM7Ozs7V0FJRztRQUNILElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLFFBQVEsQ0FBQztZQUNQLE1BQU0sRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDL0IsU0FBUyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUU7U0FDakMsQ0FBQzthQUNDLElBQUksQ0FDSCxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7WUFDL0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFGLENBQUMsQ0FBQyxDQUNIO2FBQ0EsU0FBUyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtZQUNuQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQWMsRUFBRSxLQUFhO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyw4Q0FBOEMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNySCxDQUFDO0lBRUQsK0VBQStFO0lBQy9FLFdBQVcsQ0FBQyxNQUFjLEVBQUUsR0FBd0I7UUFDbEQsT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTztRQUNYLGdDQUFnQztRQUNoQyxJQUFJLENBQUMsb0NBQW9DLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsYUFBYSxDQUFDLFFBQWdCO1FBQzVCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFFRCxRQUFRLENBQUMsR0FBcUIsRUFBRSxNQUEyQjtRQUN6RCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDM0MsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDckQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekYsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUM5QixPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUM7WUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUN0QixDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSztnQkFDckQsQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FDcEUsQ0FBQztZQUVGLE1BQU0sS0FBSyxHQUFHLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUM7WUFDMUYsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUMxQixDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsR0FBcUIsRUFBRSxNQUEyQjtRQUMvRCxJQUFJLGtCQUFrQixHQUFHLENBQUMsQ0FBQztRQUMzQixJQUFJLG9CQUFvQixHQUFHLENBQUMsQ0FBQztRQUM3QiwwRUFBMEU7UUFFMUUsSUFBSSxNQUFNLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLGtCQUFrQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pGLG9CQUFvQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9GLENBQUM7UUFDRCxNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFDekQsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUM7UUFDN0QsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLEtBQUssR0FBRyxlQUFlLEdBQUcsaUJBQWlCLENBQUM7UUFDeEUsTUFBTSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsa0JBQWtCLEdBQUcsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLG1CQUFtQjtRQUNuRixNQUFNLE1BQU0sR0FBRztZQUNiO2dCQUNFLEVBQUUsRUFBRSxDQUFDO2dCQUNMLE9BQU8sRUFBRSxJQUFJO2dCQUNiLEtBQUssRUFBRSxTQUFTO2dCQUNoQixLQUFLLEVBQUUsR0FBRyxJQUFJLE9BQU8sWUFBWSxHQUFHO2FBQ3JDO1lBQ0Q7Z0JBQ0UsRUFBRSxFQUFFLENBQUM7Z0JBQ0wsT0FBTyxFQUFFLG9CQUFvQjtnQkFDN0IsS0FBSyxFQUFFLFNBQVM7Z0JBQ2hCLEtBQUssRUFBRSxHQUFHLG9CQUFvQixPQUFPLGlCQUFpQixHQUFHO2FBQzFEO1lBQ0Q7Z0JBQ0UsRUFBRSxFQUFFLENBQUM7Z0JBQ0wsT0FBTyxFQUFFLGtCQUFrQjtnQkFDM0IsS0FBSyxFQUFFLFNBQVM7Z0JBQ2hCLEtBQUssRUFBRSxHQUFHLGtCQUFrQixPQUFPLGVBQWUsR0FBRzthQUN0RDtTQUNGLENBQUM7UUFDRixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOytHQTVQVSxzQkFBc0I7bUdBQXRCLHNCQUFzQixxR0NsQm5DLDJnSkFnR0E7OzRGRDlFYSxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0UsMkJBQTJCO3NIQXNCckMsU0FBUztzQkFEUixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBmaW5hbGl6ZSwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTWV0YUFwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi9tZXRhLWFwaS5zZXJ2aWNlJztcbmltcG9ydCB7IFF1YWxpdHlNYXRyaXgsIFF1YWxpdHlNYXRyaXhIZWFkZXIsIFF1YWxpdHlNYXRyaXhSb3cgfSBmcm9tICcuLi8uLi9qYXZhLWFwaSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBGb3JtUmVjb3JkIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRWRpdG9yaWFsTGlua1NlcnZpY2UgfSBmcm9tICcuLi9lZGl0b3JpYWwtbGluay1zZXJ2aWNlL2VkaXRvcmlhbC1saW5rLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tICdsdXhvbic7XG5pbXBvcnQgeyBEb251dFNsaWNlIH0gZnJvbSAnLi4vZG9udXQtY2hhcnQvZG9udXQtY2hhcnQubW9kZWwnO1xuaW1wb3J0IHsgRmlsdGVyLCBGaWx0ZXJWYWx1ZSB9IGZyb20gJy4uLy4uL2phdmEtYXBpJztcbmltcG9ydCB7IEtleVZhbHVlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWV0YXFzMi1xdWFsaXR5LW1hdHJpeC12MicsXG4gIHRlbXBsYXRlVXJsOiAnLi9xdWFsaXR5LW1hdHJpeC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcXVhbGl0eV9tYXRyaXguc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBRdWFsaXR5TWF0cml4Q29tcG9uZW50IHtcbiAgZmlsdGVyZWRDb2x1bW5zOiBRdWFsaXR5TWF0cml4SGVhZGVyW10gPSBbXTtcbiAgZGF0YXRhYmxlQ29sdW1uczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICBzaG93SGlzdG9yaWNhbERhdGEgPSBuZXcgRm9ybUNvbnRyb2woeyB2YWx1ZTogZmFsc2UsIGRpc2FibGVkOiB0cnVlIH0pO1xuICBvbmx5U291cmNlc1dpdGhNYXRlcmlhbCA9IG5ldyBGb3JtQ29udHJvbCh7IHZhbHVlOiB0cnVlLCBkaXNhYmxlZDogdHJ1ZSB9KTtcbiAgY2F0ZWdvcnlDb250cm9sczogRm9ybVJlY29yZDxGb3JtQ29udHJvbDxzdHJpbmdbXT4+O1xuICBpc0xvYWRpbmcgPSBzaWduYWwodHJ1ZSk7XG4gIHJlYWRvbmx5IGNhdGVnb3J5RmlsdGVyVmFsdWVzOiBNYXA8c3RyaW5nLCBGaWx0ZXJWYWx1ZVtdPiA9IG5ldyBNYXAoKTtcbiAgcmVhZG9ubHkgcmVjZW50UXVhbGl0eU1hdHJpeCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFF1YWxpdHlNYXRyaXg+KHsgY29sdW1uczogW10sIHJvd3M6IFtdIH0gYXMgUXVhbGl0eU1hdHJpeCk7XG4gIHJlYWRvbmx5IHBhc3RRdWFsaXR5TWF0cml4JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UXVhbGl0eU1hdHJpeCB8IG51bGw+KHsgY29sdW1uczogW10sIHJvd3M6IFtdIH0gYXMgUXVhbGl0eU1hdHJpeCk7XG4gIHJlYWRvbmx5IHJhbmdlOiBGb3JtR3JvdXA8e1xuICAgIHN0YXJ0OiBGb3JtQ29udHJvbDxEYXRlVGltZTxib29sZWFuPj47XG4gICAgZW5kOiBGb3JtQ29udHJvbDxEYXRlVGltZTxib29sZWFuPj47XG4gIH0+ID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgc3RhcnQ6IG5ldyBGb3JtQ29udHJvbCgpLFxuICAgIGVuZDogbmV3IEZvcm1Db250cm9sKCksXG4gIH0pO1xuICBASW5wdXQoKVxuICBwYWdlVGl0bGU6IHN0cmluZyA9ICdRdWFsaXR5IE1hdHJpeCc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBtZXRhQXBpOiBNZXRhQXBpU2VydmljZSwgcHJpdmF0ZSByZWFkb25seSBsaW5rU2VydmljZTogRWRpdG9yaWFsTGlua1NlcnZpY2UpIHtcbiAgICAvLyBhIEZvcm1SZWNvcmQgaGFzIHRvIGJlIGluaXRpYWxpemVkIHdpdGggb25lIHNvdXJjZSB0byBkZXRlcm1pbmUgaXRzIHR5cGUgOi0oXG4gICAgdGhpcy5jYXRlZ29yeUNvbnRyb2xzID0gbmV3IEZvcm1SZWNvcmQoeyBkdW1teTogbmV3IEZvcm1Db250cm9sKFtdLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pIH0pO1xuICAgIHRoaXMuY2F0ZWdvcnlDb250cm9scy5yZW1vdmVDb250cm9sKCdkdW1teScsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyQ2F0ZWdvcnlGaWx0ZXJzKCk7XG4gICAgdGhpcy5yZWdpc3RlckRhdGVSYW5nZUZpbHRlcigpO1xuICAgIC8vIFRPRE86IGNvbnNpZGVyIGEgcmVnaXN0ZXIoKSBmdW5jdGlvbnNcbiAgICB0aGlzLm9ubHlTb3VyY2VzV2l0aE1hdGVyaWFsLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKG9ubHlXaXRoTWF0ZXJpYWwpID0+IHtcbiAgICAgIHRoaXMuZmlsdGVyVGFibGVCeVNvdXJjZXNXaXRoTWF0ZXJpYWwob25seVdpdGhNYXRlcmlhbCk7XG4gICAgfSk7XG4gICAgdGhpcy5vbkxvYWRlZERhdGFDaGFuZ2VzKCk7XG4gICAgLy90aGlzLmxvYWREYXRhV2l0aEN1cnJlbnRseVNlbGVjdGVkRmlsdGVycygpO1xuICB9XG5cbiAgZmlsdGVySWRlbnQoX2luZGV4OiBudW1iZXIsIGl0ZW06IEtleVZhbHVlPHN0cmluZywgRm9ybUNvbnRyb2w8c3RyaW5nW10+Pikge1xuICAgIHJldHVybiBpdGVtLmtleTtcbiAgfVxuXG4gIGdldCBxdWFsaXR5TWF0cml4KCk6IFF1YWxpdHlNYXRyaXgge1xuICAgIHJldHVybiB0aGlzLnJlY2VudFF1YWxpdHlNYXRyaXgkLnZhbHVlO1xuICB9XG5cbiAgZ2V0IHNvdXJjZUNvbHVtbnMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmRhdGF0YWJsZUNvbHVtbnMubWFwKChjKSA9PiBjICsgJ19zb3VyY2UnKTtcbiAgfVxuXG4gIGdldCBjdXJyZW50Q29sdW1ucygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YXRhYmxlQ29sdW1ucy5tYXAoKGMpID0+IGMgKyAnX2N1cnJlbnQnKTtcbiAgfVxuXG4gIGdldCBwYXN0Q29sdW1ucygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YXRhYmxlQ29sdW1ucy5tYXAoKGMpID0+IGMgKyAnX3Bhc3QnKTtcbiAgfVxuXG4gIGdldCBhbGxEYXRhQ29sdW1ucygpOiBzdHJpbmdbXSB7XG4gICAgaWYgKHRoaXMuc2hvd0hpc3RvcmljYWxEYXRhLnZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYXN0Q29sdW1ucy5mbGF0TWFwKChlLCBpKSA9PiBbZSwgdGhpcy5jdXJyZW50Q29sdW1uc1tpXV0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jdXJyZW50Q29sdW1ucztcbiAgfVxuXG4gIHByaXZhdGUgZmlsdGVyVGFibGVCeVNvdXJjZXNXaXRoTWF0ZXJpYWwob25seVdpdGg6IGJvb2xlYW4gfCBudWxsKSB7XG4gICAgY29uc3QgYWxsQ29sdW1ucyA9IHRoaXMucmVjZW50UXVhbGl0eU1hdHJpeCQudmFsdWUuY29sdW1ucy50b1NvcnRlZCgoYSwgYikgPT4gYS5sYWJlbC5sb2NhbGVDb21wYXJlKGIubGFiZWwpKTtcbiAgICAvLyBhdm9pZCBmaWx0ZXJpbmcgd2hlbiBub3QgbmVjZXNzYXJ5XG4gICAgdGhpcy5maWx0ZXJlZENvbHVtbnMgPSBvbmx5V2l0aCA/IGFsbENvbHVtbnMuZmlsdGVyKChjKSA9PiBjLnRvdGFsID4gMCkgOiBhbGxDb2x1bW5zO1xuICAgIHRoaXMuZGF0YXRhYmxlQ29sdW1ucyA9IHRoaXMuZmlsdGVyZWRDb2x1bW5zLm1hcCgoYykgPT4gYy5pZCk7XG4gIH1cblxuICByZWdpc3RlckRhdGVSYW5nZUZpbHRlcigpIHtcbiAgICB0aGlzLnJhbmdlLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5sb2FkRGF0YVdpdGhDdXJyZW50bHlTZWxlY3RlZEZpbHRlcnMoKTtcbiAgICB9KTtcbiAgICB0aGlzLm1ldGFBcGkuZ2V0VGltZXJhbmdlRmlsdGVyKCkuc3Vic2NyaWJlKChyYW5nZUZpbHRlcikgPT4ge1xuICAgICAgaWYgKHJhbmdlRmlsdGVyKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IERhdGVUaW1lLmZyb21JU08ocmFuZ2VGaWx0ZXIudmFsdWVzLmZpbmQoKHYpID0+IHYuaWQgPT09ICdyYW5nZVN0YXJ0Jyk/LmxhYmVsISwge1xuICAgICAgICAgIHpvbmU6ICd1dGMnLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZW5kRGF0ZSA9IERhdGVUaW1lLmZyb21JU08ocmFuZ2VGaWx0ZXIudmFsdWVzLmZpbmQoKHYpID0+IHYuaWQgPT09ICdyYW5nZUVuZCcpPy5sYWJlbCEsIHsgem9uZTogJ3V0YycgfSk7XG4gICAgICAgIC8vdG9nZ2xlIHRoZSBlbWl0RXZlbnQgdG8gaW5pdGlhbGx5IGxvYWQgdGhlIGRhdGEgb3Igbm90XG4gICAgICAgIHRoaXMucmFuZ2Uuc2V0Q29udHJvbCgnc3RhcnQnLCBuZXcgRm9ybUNvbnRyb2w8RGF0ZVRpbWU+KHN0YXJ0RGF0ZSwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KSwge1xuICAgICAgICAgIGVtaXRFdmVudDogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJhbmdlLnNldENvbnRyb2woJ2VuZCcsIG5ldyBGb3JtQ29udHJvbDxEYXRlVGltZT4oZW5kRGF0ZSwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KSwgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlZ2lzdGVyQ2F0ZWdvcnlGaWx0ZXJzKCkge1xuICAgIHRoaXMubWV0YUFwaVxuICAgICAgLmdldENhdGVnb3J5RmlsdGVycygpXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSgoZmlsdGVycykgPT4ge1xuICAgICAgICBmaWx0ZXJzLmZvckVhY2goKGZpbHRlcikgPT4ge1xuICAgICAgICAgIHRoaXMuY2F0ZWdvcnlDb250cm9scy5hZGRDb250cm9sKGZpbHRlci5maWVsZCwgbmV3IEZvcm1Db250cm9sKFtdLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pLCB7XG4gICAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuY2F0ZWdvcnlGaWx0ZXJWYWx1ZXMuc2V0KFxuICAgICAgICAgICAgZmlsdGVyLmZpZWxkLFxuICAgICAgICAgICAgZmlsdGVyLnZhbHVlcy50b1NvcnRlZCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gYS5sYWJlbC5sb2NhbGVDb21wYXJlKGIubGFiZWwpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIHRoaXMuY2F0ZWdvcnlDb250cm9scy52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmxvYWREYXRhV2l0aEN1cnJlbnRseVNlbGVjdGVkRmlsdGVycygpKTtcbiAgfVxuXG4gIHByaXZhdGUgb25Mb2FkZWREYXRhQ2hhbmdlcygpIHtcbiAgICB0aGlzLnJlY2VudFF1YWxpdHlNYXRyaXgkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXG4gICAgICAgIGZpbHRlcigocW0pID0+IHFtICE9PSBudWxsKSxcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuZmlsdGVyVGFibGVCeVNvdXJjZXNXaXRoTWF0ZXJpYWwodGhpcy5vbmx5U291cmNlc1dpdGhNYXRlcmlhbC52YWx1ZSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIGxvYWREYXRhRm9yU3RhcnQoKTogT2JzZXJ2YWJsZTxRdWFsaXR5TWF0cml4IHwgbnVsbD4ge1xuICAgIGlmICh0aGlzLnJhbmdlLmNvbnRyb2xzLnN0YXJ0Py52YWx1ZSkge1xuICAgICAgY29uc3QgYm9keTogRmlsdGVyW10gPSB0aGlzLmdldEN1cnJlbnRGaWx0ZXJWYWx1ZXMoKTtcbiAgICAgIGJvZHkucHVzaCh7XG4gICAgICAgIGZpZWxkOiAnYXNPZicsXG4gICAgICAgIHZhbHVlczogW3sgaWQ6IHRoaXMucmFuZ2UuY29udHJvbHMuc3RhcnQudmFsdWUudG9JU08oeyBpbmNsdWRlT2Zmc2V0OiBmYWxzZSB9KSBhcyBzdHJpbmcsIGxhYmVsOiAnJyB9XSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRoaXMubWV0YUFwaS5nZXRRdWFsaXR5TWF0cml4V2l0aEZpbHRlcnNWMihib2R5KS5waXBlKHRha2UoMSkpO1xuICAgIH1cbiAgICByZXR1cm4gb2YobnVsbCk7XG4gIH1cblxuICBwcml2YXRlIGxvYWREYXRhRm9yRW5kKCk6IE9ic2VydmFibGU8UXVhbGl0eU1hdHJpeD4ge1xuICAgIGNvbnN0IGJvZHk6IEZpbHRlcltdID0gdGhpcy5nZXRDdXJyZW50RmlsdGVyVmFsdWVzKCk7XG4gICAgYm9keS5wdXNoKHtcbiAgICAgIGZpZWxkOiAnYXNPZicsXG4gICAgICB2YWx1ZXM6IFt7IGlkOiB0aGlzLnJhbmdlLmNvbnRyb2xzLmVuZC52YWx1ZS50b0lTTyh7IGluY2x1ZGVPZmZzZXQ6IGZhbHNlIH0pIGFzIHN0cmluZywgbGFiZWw6ICcnIH1dLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLm1ldGFBcGkuZ2V0UXVhbGl0eU1hdHJpeFdpdGhGaWx0ZXJzVjIoYm9keSkucGlwZSh0YWtlKDEpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3VycmVudEZpbHRlclZhbHVlcygpOiBGaWx0ZXJbXSB7XG4gICAgY29uc3QgYm9keTogRmlsdGVyW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtmaWVsZCwgdmFsdWVzXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmNhdGVnb3J5Q29udHJvbHMudmFsdWUpKSB7XG4gICAgICBsZXQgcmVxdWVzdFZhbHVlczogRmlsdGVyVmFsdWVbXSA9IFtdO1xuICAgICAgaWYgKHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIHJlcXVlc3RWYWx1ZXMgPSB2YWx1ZXMubWFwKCh2YWx1ZSkgPT4gKHsgaWQ6IHZhbHVlLCBsYWJlbDogJycgfSkpO1xuICAgICAgICBib2R5LnB1c2goeyBmaWVsZCwgdmFsdWVzOiByZXF1ZXN0VmFsdWVzIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYm9keTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZERhdGFXaXRoQ3VycmVudGx5U2VsZWN0ZWRGaWx0ZXJzKCkge1xuICAgIC8qXG4gICAgY29uc2lkZXIgdXNpbmcgYW4gaW50ZXJtZWRpYXRlIFN1YmplY3Qgd2l0aCBhIHN3aXRjaE1hcCBwaXBlXG4gICAgdG8gcHJldmVudCB0aGF0IG9sZGVyICggbG9uZ2VyIHJ1bm5pbmcgKSByZXF1ZXN0cyBvdmVyd3JpdGUgbmV3ZXIgb25lc1xuICAgIHNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy82NDQyNzYyOS9ob3ctdG8tdXNlLXJ4anMtdG8tY2FuY2VsLXByZXZpb3VzLWh0dHAtcmVxdWVzdHMtaW4tYW4tYW5ndWxhci1zZXJ2aWNlLzY0NDkwMTU1IzY0NDkwMTU1XG4gICAgICovXG4gICAgdGhpcy5pc0xvYWRpbmcuc2V0KHRydWUpO1xuICAgIGZvcmtKb2luKHtcbiAgICAgIHBhc3RRbTogdGhpcy5sb2FkRGF0YUZvclN0YXJ0KCksXG4gICAgICBjdXJyZW50UW06IHRoaXMubG9hZERhdGFGb3JFbmQoKSxcbiAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFwKCh7IHBhc3RRbTogXywgY3VycmVudFFtIH0pID0+IHtcbiAgICAgICAgICB0aGlzLmRhdGF0YWJsZUNvbHVtbnMgPSBjdXJyZW50UW0uY29sdW1ucy5maWx0ZXIoKGMpID0+IGMubGV2ZWwgIT09IDApLm1hcCgoYykgPT4gYy5pZCk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh7IHBhc3RRbSwgY3VycmVudFFtIH0pID0+IHtcbiAgICAgICAgdGhpcy5yZWNlbnRRdWFsaXR5TWF0cml4JC5uZXh0KGN1cnJlbnRRbSk7XG4gICAgICAgIHRoaXMucGFzdFF1YWxpdHlNYXRyaXgkLm5leHQocGFzdFFtKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgb3BlbkVkaXRMaW5rKHNvdXJjZTogc3RyaW5nLCBpc3N1ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMubGlua1NlcnZpY2Uub3BlbkJ5UmVwbGljYXRpb25zb3VyY2VBbmRJc3N1ZVR5cGVXaXRoRmlsdGVycyhzb3VyY2UsIGlzc3VlLCB0aGlzLmNhdGVnb3J5Q29udHJvbHMudmFsdWUpO1xuICB9XG5cbiAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvaXNzdWVzLzgzNjEjaXNzdWVjb21tZW50LTM0NTgwNDk1NFxuICBjb2x1bW5JZGVudChfaW5kZXg6IG51bWJlciwgY29sOiBRdWFsaXR5TWF0cml4SGVhZGVyKSB7XG4gICAgcmV0dXJuIGNvbC5pZDtcbiAgfVxuXG4gIGFzeW5jIHJlZnJlc2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy9vciBzaG91bGQgd2UgcmVzZXQgYWxsIEZpbHRlcj9cbiAgICB0aGlzLmxvYWREYXRhV2l0aEN1cnJlbnRseVNlbGVjdGVkRmlsdGVycygpO1xuICB9XG5cbiAgZ2V0UGFzdENvbHVtbihjb2x1bW5JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMucGFzdFF1YWxpdHlNYXRyaXgkLnZhbHVlPy5jb2x1bW5zLmZpbmQoKGMpID0+IGMuaWQgPT09IGNvbHVtbklkKTtcbiAgfVxuXG4gIGdldFRyZW5kKHJvdzogUXVhbGl0eU1hdHJpeFJvdywgY29sdW1uOiBRdWFsaXR5TWF0cml4SGVhZGVyKTogeyBkZWx0YT86IG51bWJlcjsgdHJlbmQ/OiBzdHJpbmcgfSB7XG4gICAgaWYgKHRoaXMucGFzdFF1YWxpdHlNYXRyaXgkLnZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGlmICh0aGlzLnBhc3RRdWFsaXR5TWF0cml4JC52YWx1ZS5jb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHBhc3Rfcm93ID0gdGhpcy5wYXN0UXVhbGl0eU1hdHJpeCQ/LnZhbHVlLnJvd3MuZmluZCgocHIpID0+IHByLm1ldGEuaWQgPT0gcm93Lm1ldGEuaWQpO1xuICAgICAgY29uc3QgcGFzdF9jb2x1bW4gPSB0aGlzLnBhc3RRdWFsaXR5TWF0cml4JC52YWx1ZS5jb2x1bW5zLmZpbmQoKGMpID0+IGMuaWQgPT0gY29sdW1uLmlkKTtcbiAgICAgIGlmICghcGFzdF9yb3cgfHwgIXBhc3RfY29sdW1uKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGVsdGEgPSBNYXRoLmZsb29yKFxuICAgICAgICAoMTAwICogcm93LmNvdW50c1tjb2x1bW4uaWRdLnN1ZmZpY2llbnQpIC8gY29sdW1uLnRvdGFsIC1cbiAgICAgICAgICAoMTAwICogcGFzdF9yb3cuY291bnRzW2NvbHVtbi5pZF0uc3VmZmljaWVudCkgLyBwYXN0X2NvbHVtbi50b3RhbFxuICAgICAgKTtcblxuICAgICAgY29uc3QgdHJlbmQgPSBkZWx0YSA9PT0gMCA/ICd0cmVuZGluZ19mbGF0JyA6IGRlbHRhIDwgMCA/ICd0cmVuZGluZ19kb3duJyA6ICd0cmVuZGluZ191cCc7XG4gICAgICByZXR1cm4geyBkZWx0YSwgdHJlbmQgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfVxuXG4gIGdldERvbnV0U2xpY2VzKHJvdzogUXVhbGl0eU1hdHJpeFJvdywgY29sdW1uOiBRdWFsaXR5TWF0cml4SGVhZGVyKTogRG9udXRTbGljZVtdIHtcbiAgICBsZXQgc3VmZmljaWVudGZpbGxSYXRlID0gMDtcbiAgICBsZXQgaW5zdWZmaWNpZW50ZmlsbFJhdGUgPSAwO1xuICAgIC8vRGVyIFdlcnQgYmVyZWNobmV0IHNpY2ggYXVzIGRlbSB0b3RhbF9jb3VudCAtIHdpdGhvdXRfZGVzY3JpcHRpb25fY291bnQuXG5cbiAgICBpZiAoY29sdW1uLnRvdGFsICE9PSAwKSB7XG4gICAgICBzdWZmaWNpZW50ZmlsbFJhdGUgPSBNYXRoLnJvdW5kKCgxMDAgKiByb3cuY291bnRzW2NvbHVtbi5pZF0uc3VmZmljaWVudCkgLyBjb2x1bW4udG90YWwpO1xuICAgICAgaW5zdWZmaWNpZW50ZmlsbFJhdGUgPSBNYXRoLnJvdW5kKCgxMDAgKiByb3cuY291bnRzW2NvbHVtbi5pZF0uaW5zdWZmaWNpZW50KSAvIGNvbHVtbi50b3RhbCk7XG4gICAgfVxuICAgIGNvbnN0IHN1ZmZpY2llbnRUb3RhbCA9IHJvdy5jb3VudHNbY29sdW1uLmlkXS5zdWZmaWNpZW50O1xuICAgIGNvbnN0IGluc3VmZmljaWVudFRvdGFsID0gcm93LmNvdW50c1tjb2x1bW4uaWRdLmluc3VmZmljaWVudDtcbiAgICBjb25zdCBtaXNzaW5nVG90YWwgPSBjb2x1bW4udG90YWwgLSBzdWZmaWNpZW50VG90YWwgLSBpbnN1ZmZpY2llbnRUb3RhbDtcbiAgICBjb25zdCByZXN0ID0gMTAwIC0gKHN1ZmZpY2llbnRmaWxsUmF0ZSArIGluc3VmZmljaWVudGZpbGxSYXRlKTsgLy8gYS5rLmEuIFwibWlzc2luZ1wiXG4gICAgY29uc3Qgc2xpY2VzID0gW1xuICAgICAge1xuICAgICAgICBpZDogMyxcbiAgICAgICAgcGVyY2VudDogcmVzdCxcbiAgICAgICAgY29sb3I6ICcjRDhFREZDJyxcbiAgICAgICAgbGFiZWw6IGAke3Jlc3R9ICUgKCR7bWlzc2luZ1RvdGFsfSlgLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6IDEsXG4gICAgICAgIHBlcmNlbnQ6IGluc3VmZmljaWVudGZpbGxSYXRlLFxuICAgICAgICBjb2xvcjogJyNDMjA4MDgnLFxuICAgICAgICBsYWJlbDogYCR7aW5zdWZmaWNpZW50ZmlsbFJhdGV9ICUgKCR7aW5zdWZmaWNpZW50VG90YWx9KWAsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogMixcbiAgICAgICAgcGVyY2VudDogc3VmZmljaWVudGZpbGxSYXRlLFxuICAgICAgICBjb2xvcjogJyM0QUJFRkYnLFxuICAgICAgICBsYWJlbDogYCR7c3VmZmljaWVudGZpbGxSYXRlfSAlICgke3N1ZmZpY2llbnRUb3RhbH0pYCxcbiAgICAgIH0sXG4gICAgXTtcbiAgICByZXR1cm4gc2xpY2VzO1xuICB9XG4gIHByb3RlY3RlZCByZWFkb25seSBEYXRlVGltZSA9IERhdGVUaW1lO1xufVxuIiwiPG1hdC1jYXJkIGFwcGVhcmFuY2U9XCJyYWlzZWRcIj5cbiAgPG1hdC1jYXJkLWhlYWRlciAqbmdJZj1cInBhZ2VUaXRsZVwiPlxuICAgIDxtYXQtY2FyZC10aXRsZT5cbiAgICAgIFF1YWxpdMOkdHNtZXRyaWs6IHt7IHBhZ2VUaXRsZSB8IHRyYW5zbGF0ZSB9fXt7aXNMb2FkaW5nKCkgPyBcIjogTGFkZSBuZXVlIERhdGVuLlwiIDogXCJcIn19PC9tYXQtY2FyZC10aXRsZVxuICAgID5cbiAgPC9tYXQtY2FyZC1oZWFkZXI+XG4gIDxtYXQtY2FyZC1jb250ZW50PlxuICAgICAgPG1ldGFxczItcW0tZmlsdGVyXG4gICAgICAgICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2YgY2F0ZWdvcnlDb250cm9scy5jb250cm9scyB8IGtleXZhbHVlOyB0cmFja0J5OiBmaWx0ZXJJZGVudFwiXG4gICAgICAgIFtvcHRpb25zXT1cImNhdGVnb3J5RmlsdGVyVmFsdWVzLmdldChmaWx0ZXIua2V5KVwiXG4gICAgICAgIFtpbnB1dEZvcm1Db250cm9sXT1cImZpbHRlci52YWx1ZVwiXG4gICAgICAgIFtsYWJlbF0gPSBcIidmaWx0ZXIuJyArIGZpbHRlci5rZXkgfCB0cmFuc2xhdGVcIj48L21ldGFxczItcW0tZmlsdGVyPlxuICA8L21hdC1jYXJkLWNvbnRlbnQ+XG4gIDxtYXQtY2FyZC1hY3Rpb25zIGFsaWduPVwiZW5kXCI+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgW2Rpc2FibGVkXT1cImlzTG9hZGluZygpXCIgbGFiZWxQb3NpdGlvbj1cImJlZm9yZVwiIFtmb3JtQ29udHJvbF09XCJvbmx5U291cmNlc1dpdGhNYXRlcmlhbFwiIGlkPVwib25seVNvdXJjZXNXaXRoTWF0ZXJpYWxcIiA+XG4gICAgICBzaG93IG9ubHkgc291cmNlcyB3aXRoIG1hdGVyaWFsXG4gICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFtkaXNhYmxlZF09XCJpc0xvYWRpbmcoKVwiIGxhYmVsUG9zaXRpb249XCJiZWZvcmVcIiBbZm9ybUNvbnRyb2xdPVwic2hvd0hpc3RvcmljYWxEYXRhXCIgaWQ9XCJzaG93SGlzdG9yaWNhbERhdGFcIiA+XG4gICAgICBzaG93IGhpc3RvcmljYWwgZGF0YVxuICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8YnV0dG9uXG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nXCJcbiAgICAgIChjbGljayk9XCJyZWZyZXNoKClcIlxuICAgICAgbWF0VG9vbHRpcD1cIkFrdHVhbGlzaWVyZSBkZW4gSVNULVN0YW5kXCJcbiAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbj5yZWZyZXNoPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9tYXQtY2FyZC1hY3Rpb25zPlxuPC9tYXQtY2FyZD5cbjxtZXRhcXMyLWRhdGVwaWNrZXIgKm5nSWY9XCJzaG93SGlzdG9yaWNhbERhdGEudmFsdWVcIiBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nKClcIiBbaW5wdXRHcm91cF09XCJyYW5nZVwiID48L21ldGFxczItZGF0ZXBpY2tlcj5cblxuXG48bWF0LWNhcmQ+XG4gIDx0YWJsZSBbbmdDbGFzc109XCJ7J3doaWxlLWxvYWRpbmcnOiBpc0xvYWRpbmcoKX1cIiBtYXQtdGFibGUgW2RhdGFTb3VyY2VdPVwicmVjZW50UXVhbGl0eU1hdHJpeCQudmFsdWUucm93c1wiIGNsYXNzPVwicXVhbGl0eS1tYXRyaXhcIj5cbiAgICA8IS0tIERlZmluZSBjb2x1bW5zIG9mIHRhYmxlIC0tPlxuICAgIDwhLS0gUm93IEhlYWRlciBDb2x1bW4gLS0+XG4gICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJyb3ctaGVhZGVyXCIgc3RpY2t5PlxuICAgICAgPHRoIHJvd3NwYW49XCIyXCIgbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPklzc3VlIFR5cGU8L3RoPlxuICAgICAgPHRkXG4gICAgICAgIG1hdC1jZWxsXG4gICAgICAgICptYXRDZWxsRGVmPVwibGV0IHJvd1wiXG4gICAgICAgIG1hdFRvb2x0aXA9XCJ7e3Jvdy5tZXRhLmFsdF9sYWJlbH19XCJcbiAgICAgICAgY2xhc3M9XCJyb3ctaGVhZGVyIHt7J21hdC1jZWxsLWxldmVsLScgKyAocm93Lm1ldGEubGV2ZWwrMSl9fVwiXG4gICAgICA+XG4gICAgICAgIHt7XCJxdWFsaXR5X21hdHJpeC5cIiArIHJvdy5tZXRhLmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3RkPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwhLS0gb25lIGNvbHVtbiBmb3IgdGhlIHNvdXJjZSAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2wgb2YgZmlsdGVyZWRDb2x1bW5zOyB0cmFja0J5OmNvbHVtbklkZW50XCIgW21hdENvbHVtbkRlZl09XCJjb2wuaWQgKyAnX3NvdXJjZSdcIj5cbiAgICAgIDx0aCBbYXR0ci5jb2xzcGFuXT1cInNob3dIaXN0b3JpY2FsRGF0YS52YWx1ZT8yOjFcIiBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0VG9vbHRpcD1cInt7Y29sLmFsdExhYmVsfX1cIiA+e3tjb2wubGFiZWx9fTwvdGg+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPCEtLSAvc291cmNlIC0tPlxuICAgIDwhLS0gY3VycmVudCBEYXRhIENvbHVtbnMgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGZpbHRlcmVkQ29sdW1uczsgdHJhY2tCeTpjb2x1bW5JZGVudFwiIFttYXRDb2x1bW5EZWZdPVwiY29sdW1uLmlkICsgJ19jdXJyZW50J1wiPlxuICAgICAgPHRoIGNsYXNzPVwicmVjZW50LWRhdGEtY2VsbFwiIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXRUb29sdGlwPVwie3tjb2x1bW4uYWx0TGFiZWx9fVwiID57eyByYW5nZS5jb250cm9scy5lbmQudmFsdWU/LnRvTG9jYWxlU3RyaW5nKERhdGVUaW1lLkRBVEVfU0hPUlQpIH19IDxicj4oe3tjb2x1bW4udG90YWx9fSk8L3RoPlxuICAgICAgPHRkIGNsYXNzPVwicmVjZW50LWRhdGEtY2VsbFwiIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiPlxuICAgICAgICAgIDxhICpuZ0lmPVwiY29sdW1uLnRvdGFsID4gMCBlbHNlIGVtcHR5RGl2XCIgY2xhc3M9XCJjaGFydC1jb250YWluZXJcIiAoY2xpY2spPVwib3BlbkVkaXRMaW5rKCBjb2x1bW4ubGFiZWwsICByb3cubWV0YS5sYWJlbClcIj5cbiAgICAgICAgICAgIDxkaXYgPlxuICAgICAgICAgICAgICA8bWV0YXFzMi1kb251dC1jaGFydCBbZGF0YV09XCJnZXREb251dFNsaWNlcyhyb3csIGNvbHVtbilcIiBbYm9yZGVyU2l6ZV09XCIyNVwiPjwvbWV0YXFzMi1kb251dC1jaGFydD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2VtcHR5RGl2PlxuICAgICAgICAgICAgPGRpdj4tPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPCEtLSAvY3VycmVudCBEYXRhIENvbHVtbnMgLS0+XG4gICAgPCEtLSBwYXN0IERhdGEgQ29sdW1ucyAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0hpc3RvcmljYWxEYXRhLnZhbHVlXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgZmlsdGVyZWRDb2x1bW5zOyB0cmFja0J5OmNvbHVtbklkZW50XCIgW21hdENvbHVtbkRlZl09XCJjb2x1bW4uaWQgKyAnX3Bhc3QnXCI+XG4gICAgICAgIDx0aCBjbGFzcz1cImhpc3RvcmljLWRhdGEtY2VsbFwiIG1hdC1oZWFkZXItY2VsbFxuICAgICAgICAgICAgKm1hdEhlYWRlckNlbGxEZWY+e3sgcmFuZ2UuY29udHJvbHMuc3RhcnQudmFsdWU/LnRvTG9jYWxlU3RyaW5nKERhdGVUaW1lLkRBVEVfU0hPUlQpIH19XG4gICAgICAgICAgPGJyPnt7IGdldFBhc3RDb2x1bW4oY29sdW1uLmlkKT8udG90YWwgfX1cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRkIGNsYXNzPVwiaGlzdG9yaWMtZGF0YS1jZWxsXCIgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldFRyZW5kKHJvdywgY29sdW1uKSBhcyB0cmVuZFwiPlxuICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwidHJlbmQudHJlbmRcIj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIGFyaWEtaGlkZGVuPVwiZmFsc2VcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInRyZW5kLnRyZW5kXCIgW2ZvbnRJY29uXT1cInRyZW5kLnRyZW5kIVwiIC8+XG4gICAgICAgICAgICAgIHt7IHRyZW5kLmRlbHRhIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwhLS0gL3Bhc3QgRGF0YSBDb2x1bW5zIC0tPlxuXG4gICAgICA8IS0tIEdlbmVyYXRlIGFjdHVhbCB0YWJsZSAtLT5cbiAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cIlsncm93LWhlYWRlciddLmNvbmNhdCggc291cmNlQ29sdW1ucyk7IHN0aWNreTogdHJ1ZTtcIj48L3RyPlxuICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiYWxsRGF0YUNvbHVtbnM7IHN0aWNreTogdHJ1ZTtcIj48L3RyPlxuICAgIDx0ciBtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBbJ3Jvdy1oZWFkZXInXS5jb25jYXQoYWxsRGF0YUNvbHVtbnMpXCI+PC90cj5cbiAgPC90YWJsZT5cbjwvbWF0LWNhcmQ+XG4iXX0=
|