ngx-edu-sharing-metaqs2 0.9.31 → 0.9.33
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/collection-count-history/collection-count-history.component.mjs +48 -32
- package/esm2022/lib/collection-count-history/monthpicker/monthpicker.component.mjs +7 -4
- package/esm2022/lib/components/collection-issues/collection-issues.component.mjs +2 -2
- package/esm2022/lib/components/donut-chart/donut-chart.component.mjs +9 -9
- package/esm2022/lib/components/filter/datepicker/datepicker.component.mjs +3 -3
- package/esm2022/lib/components/loading_indicator/overlay/overlay.service.mjs +41 -0
- package/esm2022/lib/components/loading_indicator/progress-spinner/progress-spinner.component.mjs +65 -0
- package/esm2022/lib/components/material-issues/material-issues.component.mjs +2 -2
- package/esm2022/lib/components/node-entry/node-entry.component.mjs +2 -2
- package/esm2022/lib/components/node-list/node-list.component.mjs +2 -2
- package/esm2022/lib/components/quality-matrix/quality_matrix.mjs +6 -5
- package/esm2022/lib/counts-with-history/counts-with-history.component.mjs +89 -84
- package/esm2022/lib/ng-meta-widgets-lib.module.mjs +8 -4
- package/esm2022/lib/tree-collection-details/tree-collection-details.component.mjs +17 -3
- package/esm2022/lib/tree-search-counts/tree-search-counts.component.mjs +5 -3
- package/esm2022/public-api.mjs +1 -2
- package/fesm2022/ngx-edu-sharing-metaqs2.mjs +277 -277
- package/fesm2022/ngx-edu-sharing-metaqs2.mjs.map +1 -1
- package/lib/collection-count-history/collection-count-history.component.d.ts +1 -0
- package/lib/collection-count-history/monthpicker/monthpicker.component.d.ts +2 -1
- package/lib/components/loading_indicator/overlay/overlay.service.d.ts +13 -0
- package/lib/components/loading_indicator/progress-spinner/progress-spinner.component.d.ts +21 -0
- package/lib/counts-with-history/counts-with-history.component.d.ts +27 -25
- package/lib/ng-meta-widgets-lib.module.d.ts +2 -1
- package/package.json +1 -1
- package/public-api.d.ts +0 -1
- package/esm2022/lib/materialtypes-by-sources/materialtypes-by-sources.component.mjs +0 -148
- package/lib/materialtypes-by-sources/materialtypes-by-sources.component.d.ts +0 -43
package/esm2022/lib/components/loading_indicator/progress-spinner/progress-spinner.component.mjs
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { Component, Input, ViewChild, } from '@angular/core';
|
|
2
|
+
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "../overlay/overlay.service";
|
|
5
|
+
import * as i2 from "@angular/material/progress-spinner";
|
|
6
|
+
export class ProgressSpinnerComponent {
|
|
7
|
+
constructor(vcRef, overlayService, el) {
|
|
8
|
+
// we are doing this in the constructor because ngOnInit runs after the first ngOnChanges
|
|
9
|
+
// and we need to create the overlayRef before the first ngOnChanges
|
|
10
|
+
// ngDoCheck runs too often.
|
|
11
|
+
this.vcRef = vcRef;
|
|
12
|
+
this.overlayService = overlayService;
|
|
13
|
+
this.el = el;
|
|
14
|
+
this.color = 'primary';
|
|
15
|
+
this.diameter = 100;
|
|
16
|
+
this.strokeWidth = 10;
|
|
17
|
+
this.backdropEnabled = false;
|
|
18
|
+
this.positionGloballyCenter = true;
|
|
19
|
+
this.progressSpinnerOverlayConfig = {
|
|
20
|
+
hasBackdrop: this.backdropEnabled,
|
|
21
|
+
backdropClass: 'cdk-overlay-transparent-backdrop',
|
|
22
|
+
};
|
|
23
|
+
if (this.positionGloballyCenter) {
|
|
24
|
+
this.progressSpinnerOverlayConfig['positionStrategy'] = this.overlayService.positionGloballyCenter();
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
/*
|
|
28
|
+
see https://stackoverflow.com/questions/63579801/how-do-i-create-a-custom-overlay-container-for-angular-material
|
|
29
|
+
how to create a overlay container.
|
|
30
|
+
With such a directive we can have a spinner that greys-out only e.g. the table like seen here:
|
|
31
|
+
https://reppners.github.io/ngx-cdk-dynamic-overlay-container/
|
|
32
|
+
*/
|
|
33
|
+
this.progressSpinnerOverlayConfig['positionStrategy'] = this.overlayService.positionFlexibleConnected(this.el);
|
|
34
|
+
}
|
|
35
|
+
// Create Overlay for progress spinner
|
|
36
|
+
this.overlayRef = this.overlayService.createOverlay(this.progressSpinnerOverlayConfig);
|
|
37
|
+
}
|
|
38
|
+
ngOnChanges(changes) {
|
|
39
|
+
changes.displayProgressSpinner.currentValue
|
|
40
|
+
? this.overlayService.attachTemplatePortal(this.overlayRef, this.progressSpinnerRef, this.vcRef)
|
|
41
|
+
: this.overlayRef.detach();
|
|
42
|
+
}
|
|
43
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProgressSpinnerComponent, deps: [{ token: i0.ViewContainerRef }, { token: i1.OverlayService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
44
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ProgressSpinnerComponent, isStandalone: true, selector: "metaqs2-progress-spinner", inputs: { color: "color", diameter: "diameter", strokeWidth: "strokeWidth", backdropEnabled: "backdropEnabled", positionGloballyCenter: "positionGloballyCenter", displayProgressSpinner: "displayProgressSpinner" }, viewQueries: [{ propertyName: "progressSpinnerRef", first: true, predicate: ["progressSpinnerRef"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<ng-template #progressSpinnerRef>\n <mat-spinner [color]=\"color\" [diameter]=\"diameter\" [strokeWidth]=\"strokeWidth\">\n\t</mat-spinner>\n</ng-template>", styles: [""], dependencies: [{ kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i2.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }] }); }
|
|
45
|
+
}
|
|
46
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProgressSpinnerComponent, decorators: [{
|
|
47
|
+
type: Component,
|
|
48
|
+
args: [{ selector: 'metaqs2-progress-spinner', standalone: true, imports: [MatProgressSpinnerModule], template: "<ng-template #progressSpinnerRef>\n <mat-spinner [color]=\"color\" [diameter]=\"diameter\" [strokeWidth]=\"strokeWidth\">\n\t</mat-spinner>\n</ng-template>" }]
|
|
49
|
+
}], ctorParameters: () => [{ type: i0.ViewContainerRef }, { type: i1.OverlayService }, { type: i0.ElementRef }], propDecorators: { color: [{
|
|
50
|
+
type: Input
|
|
51
|
+
}], diameter: [{
|
|
52
|
+
type: Input
|
|
53
|
+
}], strokeWidth: [{
|
|
54
|
+
type: Input
|
|
55
|
+
}], backdropEnabled: [{
|
|
56
|
+
type: Input
|
|
57
|
+
}], positionGloballyCenter: [{
|
|
58
|
+
type: Input
|
|
59
|
+
}], displayProgressSpinner: [{
|
|
60
|
+
type: Input
|
|
61
|
+
}], progressSpinnerRef: [{
|
|
62
|
+
type: ViewChild,
|
|
63
|
+
args: ['progressSpinnerRef', { static: true }]
|
|
64
|
+
}] } });
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3Mtc3Bpbm5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1tZXRhLXdpZGdldHMtbGliL3NyYy9saWIvY29tcG9uZW50cy9sb2FkaW5nX2luZGljYXRvci9wcm9ncmVzcy1zcGlubmVyL3Byb2dyZXNzLXNwaW5uZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctbWV0YS13aWRnZXRzLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvbG9hZGluZ19pbmRpY2F0b3IvcHJvZ3Jlc3Mtc3Bpbm5lci9wcm9ncmVzcy1zcGlubmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFNBQVMsR0FNVixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7OztBQVU5RSxNQUFNLE9BQU8sd0JBQXdCO0lBYW5DLFlBQW9CLEtBQXVCLEVBQVUsY0FBOEIsRUFBVSxFQUFjO1FBQ3pHLHlGQUF5RjtRQUN6RixvRUFBb0U7UUFDcEUsNEJBQTRCO1FBSFYsVUFBSyxHQUFMLEtBQUssQ0FBa0I7UUFBVSxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFBVSxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBWmxHLFVBQUssR0FBWSxTQUFTLENBQUM7UUFDM0IsYUFBUSxHQUFZLEdBQUcsQ0FBQztRQUN4QixnQkFBVyxHQUFZLEVBQUUsQ0FBQztRQUMxQixvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUN4QiwyQkFBc0IsR0FBRyxJQUFJLENBQUM7UUFhckMsSUFBSSxDQUFDLDRCQUE0QixHQUFHO1lBQ2xDLFdBQVcsRUFBRSxJQUFJLENBQUMsZUFBZTtZQUNqQyxhQUFhLEVBQUUsa0NBQWtDO1NBQ2xELENBQUM7UUFDRixJQUFJLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUN2RyxDQUFDO2FBQU0sQ0FBQztZQUNOOzs7OztjQUtFO1lBQ0YsSUFBSSxDQUFDLDRCQUE0QixDQUFDLGtCQUFrQixDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakgsQ0FBQztRQUNELHNDQUFzQztRQUN0QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLFlBQVk7WUFDekMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUNoRyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUMvQixDQUFDOytHQXpDVSx3QkFBd0I7bUdBQXhCLHdCQUF3Qix1Y0N0QnJDLDhKQUdjLHlERGlCRix3QkFBd0I7OzRGQUV2Qix3QkFBd0I7a0JBUHBDLFNBQVM7K0JBQ0UsMEJBQTBCLGNBR3hCLElBQUksV0FDUCxDQUFDLHdCQUF3QixDQUFDOzJJQUcxQixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFHRSxrQkFBa0I7c0JBRHpCLFNBQVM7dUJBQUMsb0JBQW9CLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgVmlld0NoaWxkLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBFbGVtZW50UmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE92ZXJsYXlDb25maWcsIE92ZXJsYXlSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5cbmltcG9ydCB7IE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXInO1xuaW1wb3J0IHsgT3ZlcmxheVNlcnZpY2UgfSBmcm9tICcuLi9vdmVybGF5L292ZXJsYXkuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21ldGFxczItcHJvZ3Jlc3Mtc3Bpbm5lcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9wcm9ncmVzcy1zcGlubmVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcHJvZ3Jlc3Mtc3Bpbm5lci5jb21wb25lbnQuY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBQcm9ncmVzc1NwaW5uZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBjb2xvcj86IHN0cmluZyA9ICdwcmltYXJ5JztcbiAgQElucHV0KCkgZGlhbWV0ZXI/OiBudW1iZXIgPSAxMDA7XG4gIEBJbnB1dCgpIHN0cm9rZVdpZHRoPzogbnVtYmVyID0gMTA7XG4gIEBJbnB1dCgpIGJhY2tkcm9wRW5hYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBwb3NpdGlvbkdsb2JhbGx5Q2VudGVyID0gdHJ1ZTtcbiAgQElucHV0KCkgZGlzcGxheVByb2dyZXNzU3Bpbm5lcjogYm9vbGVhbjtcblxuICBAVmlld0NoaWxkKCdwcm9ncmVzc1NwaW5uZXJSZWYnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBwcml2YXRlIHByb2dyZXNzU3Bpbm5lclJlZjogVGVtcGxhdGVSZWY8YW55PjtcbiAgcHJpdmF0ZSBwcm9ncmVzc1NwaW5uZXJPdmVybGF5Q29uZmlnOiBPdmVybGF5Q29uZmlnO1xuICBwcml2YXRlIG92ZXJsYXlSZWY6IE92ZXJsYXlSZWY7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB2Y1JlZjogVmlld0NvbnRhaW5lclJlZiwgcHJpdmF0ZSBvdmVybGF5U2VydmljZTogT3ZlcmxheVNlcnZpY2UsIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYpIHtcbiAgICAvLyB3ZSBhcmUgZG9pbmcgdGhpcyBpbiB0aGUgY29uc3RydWN0b3IgYmVjYXVzZSBuZ09uSW5pdCBydW5zIGFmdGVyIHRoZSBmaXJzdCBuZ09uQ2hhbmdlc1xuICAgIC8vIGFuZCB3ZSBuZWVkIHRvIGNyZWF0ZSB0aGUgb3ZlcmxheVJlZiBiZWZvcmUgdGhlIGZpcnN0IG5nT25DaGFuZ2VzXG4gICAgLy8gbmdEb0NoZWNrIHJ1bnMgdG9vIG9mdGVuLlxuXG4gICAgdGhpcy5wcm9ncmVzc1NwaW5uZXJPdmVybGF5Q29uZmlnID0ge1xuICAgICAgaGFzQmFja2Ryb3A6IHRoaXMuYmFja2Ryb3BFbmFibGVkLFxuICAgICAgYmFja2Ryb3BDbGFzczogJ2Nkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wJyxcbiAgICB9O1xuICAgIGlmICh0aGlzLnBvc2l0aW9uR2xvYmFsbHlDZW50ZXIpIHtcbiAgICAgIHRoaXMucHJvZ3Jlc3NTcGlubmVyT3ZlcmxheUNvbmZpZ1sncG9zaXRpb25TdHJhdGVneSddID0gdGhpcy5vdmVybGF5U2VydmljZS5wb3NpdGlvbkdsb2JhbGx5Q2VudGVyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qXG4gICAgICBzZWUgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNjM1Nzk4MDEvaG93LWRvLWktY3JlYXRlLWEtY3VzdG9tLW92ZXJsYXktY29udGFpbmVyLWZvci1hbmd1bGFyLW1hdGVyaWFsXG4gICAgICBob3cgdG8gY3JlYXRlIGEgb3ZlcmxheSBjb250YWluZXIuXG4gICAgICBXaXRoIHN1Y2ggYSBkaXJlY3RpdmUgd2UgY2FuIGhhdmUgYSBzcGlubmVyIHRoYXQgZ3JleXMtb3V0IG9ubHkgZS5nLiB0aGUgdGFibGUgbGlrZSBzZWVuIGhlcmU6XG4gICAgICBodHRwczovL3JlcHBuZXJzLmdpdGh1Yi5pby9uZ3gtY2RrLWR5bmFtaWMtb3ZlcmxheS1jb250YWluZXIvXG4gICAgICAqL1xuICAgICAgdGhpcy5wcm9ncmVzc1NwaW5uZXJPdmVybGF5Q29uZmlnWydwb3NpdGlvblN0cmF0ZWd5J10gPSB0aGlzLm92ZXJsYXlTZXJ2aWNlLnBvc2l0aW9uRmxleGlibGVDb25uZWN0ZWQodGhpcy5lbCk7XG4gICAgfVxuICAgIC8vIENyZWF0ZSBPdmVybGF5IGZvciBwcm9ncmVzcyBzcGlubmVyXG4gICAgdGhpcy5vdmVybGF5UmVmID0gdGhpcy5vdmVybGF5U2VydmljZS5jcmVhdGVPdmVybGF5KHRoaXMucHJvZ3Jlc3NTcGlubmVyT3ZlcmxheUNvbmZpZyk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgY2hhbmdlcy5kaXNwbGF5UHJvZ3Jlc3NTcGlubmVyLmN1cnJlbnRWYWx1ZVxuICAgICAgPyB0aGlzLm92ZXJsYXlTZXJ2aWNlLmF0dGFjaFRlbXBsYXRlUG9ydGFsKHRoaXMub3ZlcmxheVJlZiwgdGhpcy5wcm9ncmVzc1NwaW5uZXJSZWYsIHRoaXMudmNSZWYpXG4gICAgICA6IHRoaXMub3ZlcmxheVJlZi5kZXRhY2goKTtcbiAgfVxufVxuIiwiPG5nLXRlbXBsYXRlICNwcm9ncmVzc1NwaW5uZXJSZWY+XG4gIDxtYXQtc3Bpbm5lciBbY29sb3JdPVwiY29sb3JcIiBbZGlhbWV0ZXJdPVwiZGlhbWV0ZXJcIiBbc3Ryb2tlV2lkdGhdPVwic3Ryb2tlV2lkdGhcIj5cblx0PC9tYXQtc3Bpbm5lcj5cbjwvbmctdGVtcGxhdGU+Il19
|
|
@@ -14,10 +14,10 @@ export class MaterialIssuesComponent {
|
|
|
14
14
|
this.issues = await this.filterAPIService.getMaterialIssueFieldNames().toPromise();
|
|
15
15
|
}
|
|
16
16
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MaterialIssuesComponent, deps: [{ token: i1.FilterAPIService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
17
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MaterialIssuesComponent, selector: "metaqs2-material-issues", ngImport: i0, template: "<metaqs2-node-list\n *ngFor=\"let mode of issues\"\n [collectionId]=\"collectionId\"\n [mode]=\"mode\"\n type=\"material\"\n></metaqs2-node-list>\n", styles: [":host{padding:0 30px;display:flex;gap:30px;flex-wrap:wrap}:host>metaqs2-node-list{width:400px}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i3.NodeListComponent, selector: "metaqs2-node-list", inputs: ["mode", "type", "collectionId"], outputs: ["countChanged"] }] }); }
|
|
17
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MaterialIssuesComponent, selector: "metaqs2-material-issues", ngImport: i0, template: "<metaqs2-node-list\n *ngFor=\"let mode of issues\"\n [collectionId]=\"collectionId\"\n [mode]=\"mode\"\n type=\"material\"\n></metaqs2-node-list>\n", styles: [".while-loading{filter:blur(2px)}:host{padding:0 30px;display:flex;gap:30px;flex-wrap:wrap}:host>metaqs2-node-list{width:400px}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i3.NodeListComponent, selector: "metaqs2-node-list", inputs: ["mode", "type", "collectionId"], outputs: ["countChanged"] }] }); }
|
|
18
18
|
}
|
|
19
19
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MaterialIssuesComponent, decorators: [{
|
|
20
20
|
type: Component,
|
|
21
|
-
args: [{ selector: 'metaqs2-material-issues', template: "<metaqs2-node-list\n *ngFor=\"let mode of issues\"\n [collectionId]=\"collectionId\"\n [mode]=\"mode\"\n type=\"material\"\n></metaqs2-node-list>\n", styles: [":host{padding:0 30px;display:flex;gap:30px;flex-wrap:wrap}:host>metaqs2-node-list{width:400px}\n"] }]
|
|
21
|
+
args: [{ selector: 'metaqs2-material-issues', template: "<metaqs2-node-list\n *ngFor=\"let mode of issues\"\n [collectionId]=\"collectionId\"\n [mode]=\"mode\"\n type=\"material\"\n></metaqs2-node-list>\n", styles: [".while-loading{filter:blur(2px)}:host{padding:0 30px;display:flex;gap:30px;flex-wrap:wrap}:host>metaqs2-node-list{width:400px}\n"] }]
|
|
22
22
|
}], ctorParameters: () => [{ type: i1.FilterAPIService }] });
|
|
23
23
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwtaXNzdWVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1ldGEtd2lkZ2V0cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL21hdGVyaWFsLWlzc3Vlcy9tYXRlcmlhbC1pc3N1ZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctbWV0YS13aWRnZXRzLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvbWF0ZXJpYWwtaXNzdWVzL21hdGVyaWFsLWlzc3Vlcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDOzs7OztBQVFsRCxNQUFNLE9BQU8sdUJBQXVCO0lBS2xDLFlBQW9CLGdCQUFrQztRQUFsQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBSnRELFdBQU0sR0FBYSxFQUFFLENBQUM7UUFDdEIsdUVBQXVFO1FBQ3ZFLGlCQUFZLEdBQVcsc0NBQXNDLENBQUM7SUFFTCxDQUFDO0lBRTFELEtBQUssQ0FBQyxRQUFRO1FBQ1osSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQywwQkFBMEIsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3JGLENBQUM7K0dBVFUsdUJBQXVCO21HQUF2Qix1QkFBdUIsK0RDUnBDLHlKQU1BOzs0RkRFYSx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0UseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZpbHRlckFQSVNlcnZpY2UgfSBmcm9tICcuLi8uLi9qYXZhLWFwaSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21ldGFxczItbWF0ZXJpYWwtaXNzdWVzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21hdGVyaWFsLWlzc3Vlcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21hdGVyaWFsLWlzc3Vlcy5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBNYXRlcmlhbElzc3Vlc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGlzc3Vlczogc3RyaW5nW10gPSBbXTtcbiAgLy8gQFRPRE86IElucHV0IGlzIGJyb2tlbiwgbWF5YmUgY2F1c2Ugb2Ygd2l0aENvbXBvbmVudElucHV0QmluZGluZygpPyFcbiAgY29sbGVjdGlvbklkOiBzdHJpbmcgPSAnOTRmMjJjOWItMGQzYS00YzFjLTg5ODctNGM4ZTgzZjNhOTJlJztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZpbHRlckFQSVNlcnZpY2U6IEZpbHRlckFQSVNlcnZpY2UpIHt9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pc3N1ZXMgPSBhd2FpdCB0aGlzLmZpbHRlckFQSVNlcnZpY2UuZ2V0TWF0ZXJpYWxJc3N1ZUZpZWxkTmFtZXMoKS50b1Byb21pc2UoKTtcbiAgfVxufVxuIiwiPG1ldGFxczItbm9kZS1saXN0XG4gICpuZ0Zvcj1cImxldCBtb2RlIG9mIGlzc3Vlc1wiXG4gIFtjb2xsZWN0aW9uSWRdPVwiY29sbGVjdGlvbklkXCJcbiAgW21vZGVdPVwibW9kZVwiXG4gIHR5cGU9XCJtYXRlcmlhbFwiXG4+PC9tZXRhcXMyLW5vZGUtbGlzdD5cbiJdfQ==
|
|
@@ -22,11 +22,11 @@ export class NodeEntryComponent {
|
|
|
22
22
|
// return (this.node as MaterialCounts).materials_count !== undefined;
|
|
23
23
|
}
|
|
24
24
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NodeEntryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NodeEntryComponent, selector: "metaqs2-node-entry", inputs: { node: "node" }, outputs: { edit: "edit" }, ngImport: i0, template: "<div class=\"node\">\n <img class=\"icon\" [src]=\"node | nodeImageUrl\" loading=\"lazy\" />\n <div class=\"text\">\n <span class=\"title\">{{ node.title }}</span>\n <span class=\"description\" *ngIf=\"!isCollectionCount()\">{{ node.description }}</span>\n <span class=\"count\" *ngIf=\"isCollectionCount()\">{{ $any(node).materials_count }} Materialien</span>\n </div>\n <div class=\"actions\">\n <button mat-icon-button color=\"primary\" (click)=\"openNode(node)\">\n <mat-icon>open_in_new</mat-icon>\n </button>\n <button *ngIf=\"$any(node).type === 'ccm:io'\" mat-icon-button color=\"primary\" (click)=\"edit.emit(node)\">\n <mat-icon>edit</mat-icon>\n </button>\n </div>\n</div>\n", styles: [".node{display:flex;align-items:center;padding:5px 0}.node .icon{width:50px;min-width:50px;height:50px;object-fit:cover;padding-right:10px}.node .text{flex-grow:1;display:flex;flex-direction:column}.node .text .title{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;word-break:break-word;-webkit-line-clamp:2;-webkit-box-orient:vertical}.node .text .description,.node .text .count{font-size:90%;color:#555;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;word-break:break-word;-webkit-line-clamp:1;-webkit-box-orient:vertical}.node .actions{display:flex}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "pipe", type: i4.NodeImageUrlPipe, name: "nodeImageUrl" }] }); }
|
|
25
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NodeEntryComponent, selector: "metaqs2-node-entry", inputs: { node: "node" }, outputs: { edit: "edit" }, ngImport: i0, template: "<div class=\"node\">\n <img class=\"icon\" [src]=\"node | nodeImageUrl\" loading=\"lazy\" />\n <div class=\"text\">\n <span class=\"title\">{{ node.title }}</span>\n <span class=\"description\" *ngIf=\"!isCollectionCount()\">{{ node.description }}</span>\n <span class=\"count\" *ngIf=\"isCollectionCount()\">{{ $any(node).materials_count }} Materialien</span>\n </div>\n <div class=\"actions\">\n <button mat-icon-button color=\"primary\" (click)=\"openNode(node)\">\n <mat-icon>open_in_new</mat-icon>\n </button>\n <button *ngIf=\"$any(node).type === 'ccm:io'\" mat-icon-button color=\"primary\" (click)=\"edit.emit(node)\">\n <mat-icon>edit</mat-icon>\n </button>\n </div>\n</div>\n", styles: [".while-loading{filter:blur(2px)}.node{display:flex;align-items:center;padding:5px 0}.node .icon{width:50px;min-width:50px;height:50px;object-fit:cover;padding-right:10px}.node .text{flex-grow:1;display:flex;flex-direction:column}.node .text .title{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;word-break:break-word;-webkit-line-clamp:2;-webkit-box-orient:vertical}.node .text .description,.node .text .count{font-size:90%;color:#555;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;word-break:break-word;-webkit-line-clamp:1;-webkit-box-orient:vertical}.node .actions{display:flex}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "pipe", type: i4.NodeImageUrlPipe, name: "nodeImageUrl" }] }); }
|
|
26
26
|
}
|
|
27
27
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NodeEntryComponent, decorators: [{
|
|
28
28
|
type: Component,
|
|
29
|
-
args: [{ selector: 'metaqs2-node-entry', template: "<div class=\"node\">\n <img class=\"icon\" [src]=\"node | nodeImageUrl\" loading=\"lazy\" />\n <div class=\"text\">\n <span class=\"title\">{{ node.title }}</span>\n <span class=\"description\" *ngIf=\"!isCollectionCount()\">{{ node.description }}</span>\n <span class=\"count\" *ngIf=\"isCollectionCount()\">{{ $any(node).materials_count }} Materialien</span>\n </div>\n <div class=\"actions\">\n <button mat-icon-button color=\"primary\" (click)=\"openNode(node)\">\n <mat-icon>open_in_new</mat-icon>\n </button>\n <button *ngIf=\"$any(node).type === 'ccm:io'\" mat-icon-button color=\"primary\" (click)=\"edit.emit(node)\">\n <mat-icon>edit</mat-icon>\n </button>\n </div>\n</div>\n", styles: [".node{display:flex;align-items:center;padding:5px 0}.node .icon{width:50px;min-width:50px;height:50px;object-fit:cover;padding-right:10px}.node .text{flex-grow:1;display:flex;flex-direction:column}.node .text .title{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;word-break:break-word;-webkit-line-clamp:2;-webkit-box-orient:vertical}.node .text .description,.node .text .count{font-size:90%;color:#555;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;word-break:break-word;-webkit-line-clamp:1;-webkit-box-orient:vertical}.node .actions{display:flex}\n"] }]
|
|
29
|
+
args: [{ selector: 'metaqs2-node-entry', template: "<div class=\"node\">\n <img class=\"icon\" [src]=\"node | nodeImageUrl\" loading=\"lazy\" />\n <div class=\"text\">\n <span class=\"title\">{{ node.title }}</span>\n <span class=\"description\" *ngIf=\"!isCollectionCount()\">{{ node.description }}</span>\n <span class=\"count\" *ngIf=\"isCollectionCount()\">{{ $any(node).materials_count }} Materialien</span>\n </div>\n <div class=\"actions\">\n <button mat-icon-button color=\"primary\" (click)=\"openNode(node)\">\n <mat-icon>open_in_new</mat-icon>\n </button>\n <button *ngIf=\"$any(node).type === 'ccm:io'\" mat-icon-button color=\"primary\" (click)=\"edit.emit(node)\">\n <mat-icon>edit</mat-icon>\n </button>\n </div>\n</div>\n", styles: [".while-loading{filter:blur(2px)}.node{display:flex;align-items:center;padding:5px 0}.node .icon{width:50px;min-width:50px;height:50px;object-fit:cover;padding-right:10px}.node .text{flex-grow:1;display:flex;flex-direction:column}.node .text .title{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;word-break:break-word;-webkit-line-clamp:2;-webkit-box-orient:vertical}.node .text .description,.node .text .count{font-size:90%;color:#555;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;word-break:break-word;-webkit-line-clamp:1;-webkit-box-orient:vertical}.node .actions{display:flex}\n"] }]
|
|
30
30
|
}], ctorParameters: () => [], propDecorators: { node: [{
|
|
31
31
|
type: Input
|
|
32
32
|
}], edit: [{
|
|
@@ -91,11 +91,11 @@ export class NodeListComponent {
|
|
|
91
91
|
// this.data = this.rawData?.filter((d) => (d as MaterialCounts).materials_count <= (this.count ?? 0));
|
|
92
92
|
}
|
|
93
93
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NodeListComponent, deps: [{ token: i1.CollectionAPIService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
94
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NodeListComponent, selector: "metaqs2-node-list", inputs: { mode: "mode", type: "type", collectionId: "collectionId" }, outputs: { countChanged: "countChanged" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"wrapper\">\n <mat-card *ngIf=\"mode\">\n <mat-card-header>\n <mat-card-title>\n {{ 'issues.' + mode | translate }}\n <span class=\"count\" *ngIf=\"(data | async) as d\">({{ d.length || 0 }})</span>\n </mat-card-title>\n <button mat-icon-button color=\"primary\" [disabled]=\"!(data | async)\" (click)=\"refresh()\">\n <mat-icon>refresh</mat-icon>\n </button>\n </mat-card-header>\n <!-- @TODO -->\n <div *ngIf=\"type === 'collection' && mode === 'TODO_count'\" class=\"count-slider\">\n <label>Sammlungen mit {{ count }} oder weniger Inhalten</label>\n <mat-slider\n [showTickMarks]=\"true\"\n step=\"1\"\n [ngModel]=\"count\"\n (ngModelChange)=\"count = $event; filterCount()\"\n min=\"0\"\n max=\"10\"\n ></mat-slider>\n </div>\n <ng-container *ngIf=\"wrappedData$ | async as wrappedData\">\n <mat-spinner *ngIf=\"wrappedData.state === 'loading'\" diameter=\"40\" color=\"primary\"></mat-spinner>\n <div class=\"error\" *ngIf=\"wrappedData.state === 'error'\">\n <p class=\"error-text\">Etwas ist schief gelaufen.</p>\n </div>\n <div class=\"scroll\" *ngIf=\"wrappedData.state === 'success'\">\n <ng-container *ngIf=\"(data | async) as d\">\n <metaqs2-node-entry\n *ngFor=\"let node of DEFAULT_LIMIT < d.length && !showAll ? d.slice(0, DEFAULT_LIMIT) : d\"\n [node]=\"node\"\n (edit)=\"editNode(node)\"\n ></metaqs2-node-entry>\n <div *ngIf=\"!d.length\">\n <div class=\"all-done\">\n <p class=\"all-done-emoji\">\uD83E\uDD73</p>\n <p class=\"all-done-text\">Keine Elemente ausstehend</p>\n </div>\n </div>\n <button *ngIf=\"DEFAULT_LIMIT < d.length && !showAll\" (click)=\"showAll = true\" color=\"primary\" mat-button>\n Alle Elemente anzeigen <mat-icon>keyboard_arrow_down</mat-icon>\n </button>\n </ng-container>\n </div>\n </ng-container>\n </mat-card>\n</div>\n", styles: [".wrapper{width:100%;height:100%}.wrapper mat-card{display:flex;flex-direction:column;width:100%;height:100%;padding:0;box-shadow:none}.wrapper mat-card ::ng-deep mat-card-header{align-items:center}.wrapper mat-card ::ng-deep mat-card-header .mat-card-header-text{flex-grow:1;margin:0}.wrapper mat-card ::ng-deep mat-card-header .mat-card-header-text mat-card-title{padding-top:20px;font-size:120%}.wrapper mat-card ::ng-deep mat-card-header .mat-card-header-text mat-card-title .count{font-size:80%;color:#888}.wrapper mat-card .count-slider{display:flex;flex-direction:column;width:100%}.wrapper mat-card .count-slider>label{padding:0 20px;font-size:90%}.wrapper mat-card .count-slider>mat-slider{width:100%}.wrapper mat-card mat-spinner{flex-grow:1;display:flex;align-self:center;justify-self:center;margin-top:20%}.wrapper mat-card .scroll{flex-grow:1;overflow-y:auto}.wrapper mat-card .scroll>button{display:flex;margin:auto}.wrapper mat-card .scroll .all-done{display:flex;flex-direction:column;align-items:center}.wrapper mat-card .scroll .all-done .all-done-emoji{font-size:72px;margin-bottom:20px}.wrapper mat-card .scroll .all-done .all-done-text{text-align:center;font-size:1.3em;color:var(--font-light)}.wrapper mat-card .error{border:#d00 solid 2px;background-color:#d005;display:flex;flex-direction:column;align-items:center}.wrapper mat-card .error .error-text{font-size:1.3em}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: i3.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i3.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5.MatSlider, selector: "mat-slider", inputs: ["disabled", "discrete", "showTickMarks", "min", "color", "disableRipple", "max", "step", "displayWith"], exportAs: ["matSlider"] }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i7.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i9.NodeEntryComponent, selector: "metaqs2-node-entry", inputs: ["node"], outputs: ["edit"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i10.TranslatePipe, name: "translate" }] }); }
|
|
94
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NodeListComponent, selector: "metaqs2-node-list", inputs: { mode: "mode", type: "type", collectionId: "collectionId" }, outputs: { countChanged: "countChanged" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"wrapper\">\n <mat-card *ngIf=\"mode\">\n <mat-card-header>\n <mat-card-title>\n {{ 'issues.' + mode | translate }}\n <span class=\"count\" *ngIf=\"(data | async) as d\">({{ d.length || 0 }})</span>\n </mat-card-title>\n <button mat-icon-button color=\"primary\" [disabled]=\"!(data | async)\" (click)=\"refresh()\">\n <mat-icon>refresh</mat-icon>\n </button>\n </mat-card-header>\n <!-- @TODO -->\n <div *ngIf=\"type === 'collection' && mode === 'TODO_count'\" class=\"count-slider\">\n <label>Sammlungen mit {{ count }} oder weniger Inhalten</label>\n <mat-slider\n [showTickMarks]=\"true\"\n step=\"1\"\n [ngModel]=\"count\"\n (ngModelChange)=\"count = $event; filterCount()\"\n min=\"0\"\n max=\"10\"\n ></mat-slider>\n </div>\n <ng-container *ngIf=\"wrappedData$ | async as wrappedData\">\n <mat-spinner *ngIf=\"wrappedData.state === 'loading'\" diameter=\"40\" color=\"primary\"></mat-spinner>\n <div class=\"error\" *ngIf=\"wrappedData.state === 'error'\">\n <p class=\"error-text\">Etwas ist schief gelaufen.</p>\n </div>\n <div class=\"scroll\" *ngIf=\"wrappedData.state === 'success'\">\n <ng-container *ngIf=\"(data | async) as d\">\n <metaqs2-node-entry\n *ngFor=\"let node of DEFAULT_LIMIT < d.length && !showAll ? d.slice(0, DEFAULT_LIMIT) : d\"\n [node]=\"node\"\n (edit)=\"editNode(node)\"\n ></metaqs2-node-entry>\n <div *ngIf=\"!d.length\">\n <div class=\"all-done\">\n <p class=\"all-done-emoji\">\uD83E\uDD73</p>\n <p class=\"all-done-text\">Keine Elemente ausstehend</p>\n </div>\n </div>\n <button *ngIf=\"DEFAULT_LIMIT < d.length && !showAll\" (click)=\"showAll = true\" color=\"primary\" mat-button>\n Alle Elemente anzeigen <mat-icon>keyboard_arrow_down</mat-icon>\n </button>\n </ng-container>\n </div>\n </ng-container>\n </mat-card>\n</div>\n", styles: [".while-loading{filter:blur(2px)}.wrapper{width:100%;height:100%}.wrapper mat-card{display:flex;flex-direction:column;width:100%;height:100%;padding:0;box-shadow:none}.wrapper mat-card ::ng-deep mat-card-header{align-items:center}.wrapper mat-card ::ng-deep mat-card-header .mat-card-header-text{flex-grow:1;margin:0}.wrapper mat-card ::ng-deep mat-card-header .mat-card-header-text mat-card-title{padding-top:20px;font-size:120%}.wrapper mat-card ::ng-deep mat-card-header .mat-card-header-text mat-card-title .count{font-size:80%;color:#888}.wrapper mat-card .count-slider{display:flex;flex-direction:column;width:100%}.wrapper mat-card .count-slider>label{padding:0 20px;font-size:90%}.wrapper mat-card .count-slider>mat-slider{width:100%}.wrapper mat-card mat-spinner{flex-grow:1;display:flex;align-self:center;justify-self:center;margin-top:20%}.wrapper mat-card .scroll{flex-grow:1;overflow-y:auto}.wrapper mat-card .scroll>button{display:flex;margin:auto}.wrapper mat-card .scroll .all-done{display:flex;flex-direction:column;align-items:center}.wrapper mat-card .scroll .all-done .all-done-emoji{font-size:72px;margin-bottom:20px}.wrapper mat-card .scroll .all-done .all-done-text{text-align:center;font-size:1.3em;color:var(--font-light)}.wrapper mat-card .error{border:#d00 solid 2px;background-color:#d005;display:flex;flex-direction:column;align-items:center}.wrapper mat-card .error .error-text{font-size:1.3em}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: i3.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i3.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5.MatSlider, selector: "mat-slider", inputs: ["disabled", "discrete", "showTickMarks", "min", "color", "disableRipple", "max", "step", "displayWith"], exportAs: ["matSlider"] }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i7.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i9.NodeEntryComponent, selector: "metaqs2-node-entry", inputs: ["node"], outputs: ["edit"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i10.TranslatePipe, name: "translate" }] }); }
|
|
95
95
|
}
|
|
96
96
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NodeListComponent, decorators: [{
|
|
97
97
|
type: Component,
|
|
98
|
-
args: [{ selector: 'metaqs2-node-list', template: "<div class=\"wrapper\">\n <mat-card *ngIf=\"mode\">\n <mat-card-header>\n <mat-card-title>\n {{ 'issues.' + mode | translate }}\n <span class=\"count\" *ngIf=\"(data | async) as d\">({{ d.length || 0 }})</span>\n </mat-card-title>\n <button mat-icon-button color=\"primary\" [disabled]=\"!(data | async)\" (click)=\"refresh()\">\n <mat-icon>refresh</mat-icon>\n </button>\n </mat-card-header>\n <!-- @TODO -->\n <div *ngIf=\"type === 'collection' && mode === 'TODO_count'\" class=\"count-slider\">\n <label>Sammlungen mit {{ count }} oder weniger Inhalten</label>\n <mat-slider\n [showTickMarks]=\"true\"\n step=\"1\"\n [ngModel]=\"count\"\n (ngModelChange)=\"count = $event; filterCount()\"\n min=\"0\"\n max=\"10\"\n ></mat-slider>\n </div>\n <ng-container *ngIf=\"wrappedData$ | async as wrappedData\">\n <mat-spinner *ngIf=\"wrappedData.state === 'loading'\" diameter=\"40\" color=\"primary\"></mat-spinner>\n <div class=\"error\" *ngIf=\"wrappedData.state === 'error'\">\n <p class=\"error-text\">Etwas ist schief gelaufen.</p>\n </div>\n <div class=\"scroll\" *ngIf=\"wrappedData.state === 'success'\">\n <ng-container *ngIf=\"(data | async) as d\">\n <metaqs2-node-entry\n *ngFor=\"let node of DEFAULT_LIMIT < d.length && !showAll ? d.slice(0, DEFAULT_LIMIT) : d\"\n [node]=\"node\"\n (edit)=\"editNode(node)\"\n ></metaqs2-node-entry>\n <div *ngIf=\"!d.length\">\n <div class=\"all-done\">\n <p class=\"all-done-emoji\">\uD83E\uDD73</p>\n <p class=\"all-done-text\">Keine Elemente ausstehend</p>\n </div>\n </div>\n <button *ngIf=\"DEFAULT_LIMIT < d.length && !showAll\" (click)=\"showAll = true\" color=\"primary\" mat-button>\n Alle Elemente anzeigen <mat-icon>keyboard_arrow_down</mat-icon>\n </button>\n </ng-container>\n </div>\n </ng-container>\n </mat-card>\n</div>\n", styles: [".wrapper{width:100%;height:100%}.wrapper mat-card{display:flex;flex-direction:column;width:100%;height:100%;padding:0;box-shadow:none}.wrapper mat-card ::ng-deep mat-card-header{align-items:center}.wrapper mat-card ::ng-deep mat-card-header .mat-card-header-text{flex-grow:1;margin:0}.wrapper mat-card ::ng-deep mat-card-header .mat-card-header-text mat-card-title{padding-top:20px;font-size:120%}.wrapper mat-card ::ng-deep mat-card-header .mat-card-header-text mat-card-title .count{font-size:80%;color:#888}.wrapper mat-card .count-slider{display:flex;flex-direction:column;width:100%}.wrapper mat-card .count-slider>label{padding:0 20px;font-size:90%}.wrapper mat-card .count-slider>mat-slider{width:100%}.wrapper mat-card mat-spinner{flex-grow:1;display:flex;align-self:center;justify-self:center;margin-top:20%}.wrapper mat-card .scroll{flex-grow:1;overflow-y:auto}.wrapper mat-card .scroll>button{display:flex;margin:auto}.wrapper mat-card .scroll .all-done{display:flex;flex-direction:column;align-items:center}.wrapper mat-card .scroll .all-done .all-done-emoji{font-size:72px;margin-bottom:20px}.wrapper mat-card .scroll .all-done .all-done-text{text-align:center;font-size:1.3em;color:var(--font-light)}.wrapper mat-card .error{border:#d00 solid 2px;background-color:#d005;display:flex;flex-direction:column;align-items:center}.wrapper mat-card .error .error-text{font-size:1.3em}\n"] }]
|
|
98
|
+
args: [{ selector: 'metaqs2-node-list', template: "<div class=\"wrapper\">\n <mat-card *ngIf=\"mode\">\n <mat-card-header>\n <mat-card-title>\n {{ 'issues.' + mode | translate }}\n <span class=\"count\" *ngIf=\"(data | async) as d\">({{ d.length || 0 }})</span>\n </mat-card-title>\n <button mat-icon-button color=\"primary\" [disabled]=\"!(data | async)\" (click)=\"refresh()\">\n <mat-icon>refresh</mat-icon>\n </button>\n </mat-card-header>\n <!-- @TODO -->\n <div *ngIf=\"type === 'collection' && mode === 'TODO_count'\" class=\"count-slider\">\n <label>Sammlungen mit {{ count }} oder weniger Inhalten</label>\n <mat-slider\n [showTickMarks]=\"true\"\n step=\"1\"\n [ngModel]=\"count\"\n (ngModelChange)=\"count = $event; filterCount()\"\n min=\"0\"\n max=\"10\"\n ></mat-slider>\n </div>\n <ng-container *ngIf=\"wrappedData$ | async as wrappedData\">\n <mat-spinner *ngIf=\"wrappedData.state === 'loading'\" diameter=\"40\" color=\"primary\"></mat-spinner>\n <div class=\"error\" *ngIf=\"wrappedData.state === 'error'\">\n <p class=\"error-text\">Etwas ist schief gelaufen.</p>\n </div>\n <div class=\"scroll\" *ngIf=\"wrappedData.state === 'success'\">\n <ng-container *ngIf=\"(data | async) as d\">\n <metaqs2-node-entry\n *ngFor=\"let node of DEFAULT_LIMIT < d.length && !showAll ? d.slice(0, DEFAULT_LIMIT) : d\"\n [node]=\"node\"\n (edit)=\"editNode(node)\"\n ></metaqs2-node-entry>\n <div *ngIf=\"!d.length\">\n <div class=\"all-done\">\n <p class=\"all-done-emoji\">\uD83E\uDD73</p>\n <p class=\"all-done-text\">Keine Elemente ausstehend</p>\n </div>\n </div>\n <button *ngIf=\"DEFAULT_LIMIT < d.length && !showAll\" (click)=\"showAll = true\" color=\"primary\" mat-button>\n Alle Elemente anzeigen <mat-icon>keyboard_arrow_down</mat-icon>\n </button>\n </ng-container>\n </div>\n </ng-container>\n </mat-card>\n</div>\n", styles: [".while-loading{filter:blur(2px)}.wrapper{width:100%;height:100%}.wrapper mat-card{display:flex;flex-direction:column;width:100%;height:100%;padding:0;box-shadow:none}.wrapper mat-card ::ng-deep mat-card-header{align-items:center}.wrapper mat-card ::ng-deep mat-card-header .mat-card-header-text{flex-grow:1;margin:0}.wrapper mat-card ::ng-deep mat-card-header .mat-card-header-text mat-card-title{padding-top:20px;font-size:120%}.wrapper mat-card ::ng-deep mat-card-header .mat-card-header-text mat-card-title .count{font-size:80%;color:#888}.wrapper mat-card .count-slider{display:flex;flex-direction:column;width:100%}.wrapper mat-card .count-slider>label{padding:0 20px;font-size:90%}.wrapper mat-card .count-slider>mat-slider{width:100%}.wrapper mat-card mat-spinner{flex-grow:1;display:flex;align-self:center;justify-self:center;margin-top:20%}.wrapper mat-card .scroll{flex-grow:1;overflow-y:auto}.wrapper mat-card .scroll>button{display:flex;margin:auto}.wrapper mat-card .scroll .all-done{display:flex;flex-direction:column;align-items:center}.wrapper mat-card .scroll .all-done .all-done-emoji{font-size:72px;margin-bottom:20px}.wrapper mat-card .scroll .all-done .all-done-text{text-align:center;font-size:1.3em;color:var(--font-light)}.wrapper mat-card .error{border:#d00 solid 2px;background-color:#d005;display:flex;flex-direction:column;align-items:center}.wrapper mat-card .error .error-text{font-size:1.3em}\n"] }]
|
|
99
99
|
}], ctorParameters: () => [{ type: i1.CollectionAPIService }], propDecorators: { mode: [{
|
|
100
100
|
type: Input
|
|
101
101
|
}], type: [{
|
|
@@ -17,8 +17,9 @@ import * as i9 from "@angular/forms";
|
|
|
17
17
|
import * as i10 from "@angular/material/tooltip";
|
|
18
18
|
import * as i11 from "../filter/quality-matrix-filter.component";
|
|
19
19
|
import * as i12 from "../filter/datepicker/datepicker.component";
|
|
20
|
-
import * as i13 from "../
|
|
21
|
-
import * as i14 from "
|
|
20
|
+
import * as i13 from "../loading_indicator/progress-spinner/progress-spinner.component";
|
|
21
|
+
import * as i14 from "../donut-chart/donut-chart.component";
|
|
22
|
+
import * as i15 from "@ngx-translate/core";
|
|
22
23
|
export class QualityMatrixComponent {
|
|
23
24
|
constructor(metaApi, linkService) {
|
|
24
25
|
this.metaApi = metaApi;
|
|
@@ -236,12 +237,12 @@ export class QualityMatrixComponent {
|
|
|
236
237
|
return slices;
|
|
237
238
|
}
|
|
238
239
|
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 }); }
|
|
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" }] }); }
|
|
240
|
+
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<mat-card>\n <metaqs2-progress-spinner [displayProgressSpinner]=\"isLoading()\"></metaqs2-progress-spinner>\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: [".while-loading{filter:blur(2px)}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.ProgressSpinnerComponent, selector: "metaqs2-progress-spinner", inputs: ["color", "diameter", "strokeWidth", "backdropEnabled", "positionGloballyCenter", "displayProgressSpinner"] }, { kind: "component", type: i14.DonutChartComponent, selector: "metaqs2-donut-chart", inputs: ["radius", "viewBox", "borderSize", "strokeWidth", "data"] }, { kind: "pipe", type: i3.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: i15.TranslatePipe, name: "translate" }] }); }
|
|
240
241
|
}
|
|
241
242
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: QualityMatrixComponent, decorators: [{
|
|
242
243
|
type: Component,
|
|
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
|
|
244
|
+
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<mat-card>\n <metaqs2-progress-spinner [displayProgressSpinner]=\"isLoading()\"></metaqs2-progress-spinner>\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: [".while-loading{filter:blur(2px)}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
245
|
}], ctorParameters: () => [{ type: i1.MetaApiService }, { type: i2.EditorialLinkService }], propDecorators: { pageTitle: [{
|
|
245
246
|
type: Input
|
|
246
247
|
}] } });
|
|
247
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVhbGl0eV9tYXRyaXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1tZXRhLXdpZGdldHMtbGliL3NyYy9saWIvY29tcG9uZW50cy9xdWFsaXR5LW1hdHJpeC9xdWFsaXR5X21hdHJpeC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1ldGEtd2lkZ2V0cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL3F1YWxpdHktbWF0cml4L3F1YWxpdHktbWF0cml4Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFaEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQVVqQyxNQUFNLE9BQU8sc0JBQXNCO0lBb0JqQyxZQUE2QixPQUF1QixFQUFtQixXQUFpQztRQUEzRSxZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUFtQixnQkFBVyxHQUFYLFdBQVcsQ0FBc0I7UUFuQnhHLG9CQUFlLEdBQTBCLEVBQUUsQ0FBQztRQUM1QyxxQkFBZ0IsR0FBa0IsRUFBRSxDQUFDO1FBQ3JDLHVCQUFrQixHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENB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YSxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0UsMkJBQTJCO3NIQXNCckMsU0FBUztzQkFEUixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBmaW5hbGl6ZSwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTWV0YUFwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi9tZXRhLWFwaS5zZXJ2aWNlJztcbmltcG9ydCB7IFF1YWxpdHlNYXRyaXgsIFF1YWxpdHlNYXRyaXhIZWFkZXIsIFF1YWxpdHlNYXRyaXhSb3cgfSBmcm9tICcuLi8uLi9qYXZhLWFwaSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBGb3JtUmVjb3JkIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRWRpdG9yaWFsTGlua1NlcnZpY2UgfSBmcm9tICcuLi9lZGl0b3JpYWwtbGluay1zZXJ2aWNlL2VkaXRvcmlhbC1saW5rLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tICdsdXhvbic7XG5pbXBvcnQgeyBEb251dFNsaWNlIH0gZnJvbSAnLi4vZG9udXQtY2hhcnQvZG9udXQtY2hhcnQubW9kZWwnO1xuaW1wb3J0IHsgRmlsdGVyLCBGaWx0ZXJWYWx1ZSB9IGZyb20gJy4uLy4uL2phdmEtYXBpJztcbmltcG9ydCB7IEtleVZhbHVlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWV0YXFzMi1xdWFsaXR5LW1hdHJpeC12MicsXG4gIHRlbXBsYXRlVXJsOiAnLi9xdWFsaXR5LW1hdHJpeC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcXVhbGl0eV9tYXRyaXguc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBRdWFsaXR5TWF0cml4Q29tcG9uZW50IHtcbiAgZmlsdGVyZWRDb2x1bW5zOiBRdWFsaXR5TWF0cml4SGVhZGVyW10gPSBbXTtcbiAgZGF0YXRhYmxlQ29sdW1uczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICBzaG93SGlzdG9yaWNhbERhdGEgPSBuZXcgRm9ybUNvbnRyb2woeyB2YWx1ZTogZmFsc2UsIGRpc2FibGVkOiB0cnVlIH0pO1xuICBvbmx5U291cmNlc1dpdGhNYXRlcmlhbCA9IG5ldyBGb3JtQ29udHJvbCh7IHZhbHVlOiB0cnVlLCBkaXNhYmxlZDogdHJ1ZSB9KTtcbiAgY2F0ZWdvcnlDb250cm9sczogRm9ybVJlY29yZDxGb3JtQ29udHJvbDxzdHJpbmdbXT4+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=
|
|
248
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVhbGl0eV9tYXRyaXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1tZXRhLXdpZGdldHMtbGliL3NyYy9saWIvY29tcG9uZW50cy9xdWFsaXR5LW1hdHJpeC9xdWFsaXR5X21hdHJpeC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1ldGEtd2lkZ2V0cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL3F1YWxpdHktbWF0cml4L3F1YWxpdHktbWF0cml4Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFaEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVakMsTUFBTSxPQUFPLHNCQUFzQjtJQW9CakMsWUFBNkIsT0FBdUIsRUFBbUIsV0FBaUM7UUFBM0UsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFBbUIsZ0JBQVcsR0FBWCxXQUFXLENBQXNCO1FBbkJ4RyxvQkFBZSxHQUEwQixFQUFFLENBQUM7UUFDNUMscUJBQWdCLEdBQWtCLEVBQUUsQ0FBQztRQUNyQyx1QkFBa0IsR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxD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RWEsc0JBQXNCO2tCQUxsQyxTQUFTOytCQUNFLDJCQUEyQjtzSEFzQnJDLFNBQVM7c0JBRFIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgZmluYWxpemUsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE1ldGFBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbWV0YS1hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBRdWFsaXR5TWF0cml4LCBRdWFsaXR5TWF0cml4SGVhZGVyLCBRdWFsaXR5TWF0cml4Um93IH0gZnJvbSAnLi4vLi4vamF2YS1hcGknO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgRm9ybVJlY29yZCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEVkaXRvcmlhbExpbmtTZXJ2aWNlIH0gZnJvbSAnLi4vZWRpdG9yaWFsLWxpbmstc2VydmljZS9lZGl0b3JpYWwtbGluay5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSAnbHV4b24nO1xuaW1wb3J0IHsgRG9udXRTbGljZSB9IGZyb20gJy4uL2RvbnV0LWNoYXJ0L2RvbnV0LWNoYXJ0Lm1vZGVsJztcbmltcG9ydCB7IEZpbHRlciwgRmlsdGVyVmFsdWUgfSBmcm9tICcuLi8uLi9qYXZhLWFwaSc7XG5pbXBvcnQgeyBLZXlWYWx1ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21ldGFxczItcXVhbGl0eS1tYXRyaXgtdjInLFxuICB0ZW1wbGF0ZVVybDogJy4vcXVhbGl0eS1tYXRyaXguaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3F1YWxpdHlfbWF0cml4LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgUXVhbGl0eU1hdHJpeENvbXBvbmVudCB7XG4gIGZpbHRlcmVkQ29sdW1uczogUXVhbGl0eU1hdHJpeEhlYWRlcltdID0gW107XG4gIGRhdGF0YWJsZUNvbHVtbnM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgc2hvd0hpc3RvcmljYWxEYXRhID0gbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6IGZhbHNlLCBkaXNhYmxlZDogdHJ1ZSB9KTtcbiAgb25seVNvdXJjZXNXaXRoTWF0ZXJpYWwgPSBuZXcgRm9ybUNvbnRyb2woeyB2YWx1ZTogdHJ1ZSwgZGlzYWJsZWQ6IHRydWUgfSk7XG4gIGNhdGVnb3J5Q29udHJvbHM6IEZvcm1SZWNvcmQ8Rm9ybUNvbnRyb2w8c3RyaW5nW10+PjtcbiAgaXNMb2FkaW5nID0gc2lnbmFsKHRydWUpO1xuICByZWFkb25seSBjYXRlZ29yeUZpbHRlclZhbHVlczogTWFwPHN0cmluZywgRmlsdGVyVmFsdWVbXT4gPSBuZXcgTWFwKCk7XG4gIHJlYWRvbmx5IHJlY2VudFF1YWxpdHlNYXRyaXgkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxRdWFsaXR5TWF0cml4Pih7IGNvbHVtbnM6IFtdLCByb3dzOiBbXSB9IGFzIFF1YWxpdHlNYXRyaXgpO1xuICByZWFkb25seSBwYXN0UXVhbGl0eU1hdHJpeCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFF1YWxpdHlNYXRyaXggfCBudWxsPih7IGNvbHVtbnM6IFtdLCByb3dzOiBbXSB9IGFzIFF1YWxpdHlNYXRyaXgpO1xuICByZWFkb25seSByYW5nZTogRm9ybUdyb3VwPHtcbiAgICBzdGFydDogRm9ybUNvbnRyb2w8RGF0ZVRpbWU8Ym9vbGVhbj4+O1xuICAgIGVuZDogRm9ybUNvbnRyb2w8RGF0ZVRpbWU8Ym9vbGVhbj4+O1xuICB9PiA9IG5ldyBGb3JtR3JvdXAoe1xuICAgIHN0YXJ0OiBuZXcgRm9ybUNvbnRyb2woKSxcbiAgICBlbmQ6IG5ldyBGb3JtQ29udHJvbCgpLFxuICB9KTtcbiAgQElucHV0KClcbiAgcGFnZVRpdGxlOiBzdHJpbmcgPSAnUXVhbGl0eSBNYXRyaXgnO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgbWV0YUFwaTogTWV0YUFwaVNlcnZpY2UsIHByaXZhdGUgcmVhZG9ubHkgbGlua1NlcnZpY2U6IEVkaXRvcmlhbExpbmtTZXJ2aWNlKSB7XG4gICAgLy8gYSBGb3JtUmVjb3JkIGhhcyB0byBiZSBpbml0aWFsaXplZCB3aXRoIG9uZSBzb3VyY2UgdG8gZGV0ZXJtaW5lIGl0cyB0eXBlIDotKFxuICAgIHRoaXMuY2F0ZWdvcnlDb250cm9scyA9IG5ldyBGb3JtUmVjb3JkKHsgZHVtbXk6IG5ldyBGb3JtQ29udHJvbChbXSwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KSB9KTtcbiAgICB0aGlzLmNhdGVnb3J5Q29udHJvbHMucmVtb3ZlQ29udHJvbCgnZHVtbXknLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgdGhpcy5yZWdpc3RlckNhdGVnb3J5RmlsdGVycygpO1xuICAgIHRoaXMucmVnaXN0ZXJEYXRlUmFuZ2VGaWx0ZXIoKTtcbiAgICAvLyBUT0RPOiBjb25zaWRlciBhIHJlZ2lzdGVyKCkgZnVuY3Rpb25zXG4gICAgdGhpcy5vbmx5U291cmNlc1dpdGhNYXRlcmlhbC52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSkuc3Vic2NyaWJlKChvbmx5V2l0aE1hdGVyaWFsKSA9PiB7XG4gICAgICB0aGlzLmZpbHRlclRhYmxlQnlTb3VyY2VzV2l0aE1hdGVyaWFsKG9ubHlXaXRoTWF0ZXJpYWwpO1xuICAgIH0pO1xuICAgIHRoaXMub25Mb2FkZWREYXRhQ2hhbmdlcygpO1xuICAgIC8vdGhpcy5sb2FkRGF0YVdpdGhDdXJyZW50bHlTZWxlY3RlZEZpbHRlcnMoKTtcbiAgfVxuXG4gIGZpbHRlcklkZW50KF9pbmRleDogbnVtYmVyLCBpdGVtOiBLZXlWYWx1ZTxzdHJpbmcsIEZvcm1Db250cm9sPHN0cmluZ1tdPj4pIHtcbiAgICByZXR1cm4gaXRlbS5rZXk7XG4gIH1cblxuICBnZXQgcXVhbGl0eU1hdHJpeCgpOiBRdWFsaXR5TWF0cml4IHtcbiAgICByZXR1cm4gdGhpcy5yZWNlbnRRdWFsaXR5TWF0cml4JC52YWx1ZTtcbiAgfVxuXG4gIGdldCBzb3VyY2VDb2x1bW5zKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhdGFibGVDb2x1bW5zLm1hcCgoYykgPT4gYyArICdfc291cmNlJyk7XG4gIH1cblxuICBnZXQgY3VycmVudENvbHVtbnMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmRhdGF0YWJsZUNvbHVtbnMubWFwKChjKSA9PiBjICsgJ19jdXJyZW50Jyk7XG4gIH1cblxuICBnZXQgcGFzdENvbHVtbnMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmRhdGF0YWJsZUNvbHVtbnMubWFwKChjKSA9PiBjICsgJ19wYXN0Jyk7XG4gIH1cblxuICBnZXQgYWxsRGF0YUNvbHVtbnMoKTogc3RyaW5nW10ge1xuICAgIGlmICh0aGlzLnNob3dIaXN0b3JpY2FsRGF0YS52YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucGFzdENvbHVtbnMuZmxhdE1hcCgoZSwgaSkgPT4gW2UsIHRoaXMuY3VycmVudENvbHVtbnNbaV1dKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudENvbHVtbnM7XG4gIH1cblxuICBwcml2YXRlIGZpbHRlclRhYmxlQnlTb3VyY2VzV2l0aE1hdGVyaWFsKG9ubHlXaXRoOiBib29sZWFuIHwgbnVsbCkge1xuICAgIGNvbnN0IGFsbENvbHVtbnMgPSB0aGlzLnJlY2VudFF1YWxpdHlNYXRyaXgkLnZhbHVlLmNvbHVtbnMudG9Tb3J0ZWQoKGEsIGIpID0+IGEubGFiZWwubG9jYWxlQ29tcGFyZShiLmxhYmVsKSk7XG4gICAgLy8gYXZvaWQgZmlsdGVyaW5nIHdoZW4gbm90IG5lY2Vzc2FyeVxuICAgIHRoaXMuZmlsdGVyZWRDb2x1bW5zID0gb25seVdpdGggPyBhbGxDb2x1bW5zLmZpbHRlcigoYykgPT4gYy50b3RhbCA+IDApIDogYWxsQ29sdW1ucztcbiAgICB0aGlzLmRhdGF0YWJsZUNvbHVtbnMgPSB0aGlzLmZpbHRlcmVkQ29sdW1ucy5tYXAoKGMpID0+IGMuaWQpO1xuICB9XG5cbiAgcmVnaXN0ZXJEYXRlUmFuZ2VGaWx0ZXIoKSB7XG4gICAgdGhpcy5yYW5nZS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMubG9hZERhdGFXaXRoQ3VycmVudGx5U2VsZWN0ZWRGaWx0ZXJzKCk7XG4gICAgfSk7XG4gICAgdGhpcy5tZXRhQXBpLmdldFRpbWVyYW5nZUZpbHRlcigpLnN1YnNjcmliZSgocmFuZ2VGaWx0ZXIpID0+IHtcbiAgICAgIGlmIChyYW5nZUZpbHRlcikge1xuICAgICAgICBjb25zdCBzdGFydERhdGUgPSBEYXRlVGltZS5mcm9tSVNPKHJhbmdlRmlsdGVyLnZhbHVlcy5maW5kKCh2KSA9PiB2LmlkID09PSAncmFuZ2VTdGFydCcpPy5sYWJlbCEsIHtcbiAgICAgICAgICB6b25lOiAndXRjJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGVuZERhdGUgPSBEYXRlVGltZS5mcm9tSVNPKHJhbmdlRmlsdGVyLnZhbHVlcy5maW5kKCh2KSA9PiB2LmlkID09PSAncmFuZ2VFbmQnKT8ubGFiZWwhLCB7IHpvbmU6ICd1dGMnIH0pO1xuICAgICAgICAvL3RvZ2dsZSB0aGUgZW1pdEV2ZW50IHRvIGluaXRpYWxseSBsb2FkIHRoZSBkYXRhIG9yIG5vdFxuICAgICAgICB0aGlzLnJhbmdlLnNldENvbnRyb2woJ3N0YXJ0JywgbmV3IEZvcm1Db250cm9sPERhdGVUaW1lPihzdGFydERhdGUsIHsgbm9uTnVsbGFibGU6IHRydWUgfSksIHtcbiAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yYW5nZS5zZXRDb250cm9sKCdlbmQnLCBuZXcgRm9ybUNvbnRyb2w8RGF0ZVRpbWU+KGVuZERhdGUsIHsgbm9uTnVsbGFibGU6IHRydWUgfSksIHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3RlckNhdGVnb3J5RmlsdGVycygpIHtcbiAgICB0aGlzLm1ldGFBcGlcbiAgICAgIC5nZXRDYXRlZ29yeUZpbHRlcnMoKVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKGZpbHRlcnMpID0+IHtcbiAgICAgICAgZmlsdGVycy5mb3JFYWNoKChmaWx0ZXIpID0+IHtcbiAgICAgICAgICB0aGlzLmNhdGVnb3J5Q29udHJvbHMuYWRkQ29udHJvbChmaWx0ZXIuZmllbGQsIG5ldyBGb3JtQ29udHJvbChbXSwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KSwge1xuICAgICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmNhdGVnb3J5RmlsdGVyVmFsdWVzLnNldChcbiAgICAgICAgICAgIGZpbHRlci5maWVsZCxcbiAgICAgICAgICAgIGZpbHRlci52YWx1ZXMudG9Tb3J0ZWQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGEubGFiZWwubG9jYWxlQ29tcGFyZShiLmxhYmVsKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB0aGlzLmNhdGVnb3J5Q29udHJvbHMudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5sb2FkRGF0YVdpdGhDdXJyZW50bHlTZWxlY3RlZEZpbHRlcnMoKSk7XG4gIH1cblxuICBwcml2YXRlIG9uTG9hZGVkRGF0YUNoYW5nZXMoKSB7XG4gICAgdGhpcy5yZWNlbnRRdWFsaXR5TWF0cml4JFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxuICAgICAgICBmaWx0ZXIoKHFtKSA9PiBxbSAhPT0gbnVsbCksXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLmZpbHRlclRhYmxlQnlTb3VyY2VzV2l0aE1hdGVyaWFsKHRoaXMub25seVNvdXJjZXNXaXRoTWF0ZXJpYWwudmFsdWUpKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkRGF0YUZvclN0YXJ0KCk6IE9ic2VydmFibGU8UXVhbGl0eU1hdHJpeCB8IG51bGw+IHtcbiAgICBpZiAodGhpcy5yYW5nZS5jb250cm9scy5zdGFydD8udmFsdWUpIHtcbiAgICAgIGNvbnN0IGJvZHk6IEZpbHRlcltdID0gdGhpcy5nZXRDdXJyZW50RmlsdGVyVmFsdWVzKCk7XG4gICAgICBib2R5LnB1c2goe1xuICAgICAgICBmaWVsZDogJ2FzT2YnLFxuICAgICAgICB2YWx1ZXM6IFt7IGlkOiB0aGlzLnJhbmdlLmNvbnRyb2xzLnN0YXJ0LnZhbHVlLnRvSVNPKHsgaW5jbHVkZU9mZnNldDogZmFsc2UgfSkgYXMgc3RyaW5nLCBsYWJlbDogJycgfV0sXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0aGlzLm1ldGFBcGkuZ2V0UXVhbGl0eU1hdHJpeFdpdGhGaWx0ZXJzVjIoYm9keSkucGlwZSh0YWtlKDEpKTtcbiAgICB9XG4gICAgcmV0dXJuIG9mKG51bGwpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkRGF0YUZvckVuZCgpOiBPYnNlcnZhYmxlPFF1YWxpdHlNYXRyaXg+IHtcbiAgICBjb25zdCBib2R5OiBGaWx0ZXJbXSA9IHRoaXMuZ2V0Q3VycmVudEZpbHRlclZhbHVlcygpO1xuICAgIGJvZHkucHVzaCh7XG4gICAgICBmaWVsZDogJ2FzT2YnLFxuICAgICAgdmFsdWVzOiBbeyBpZDogdGhpcy5yYW5nZS5jb250cm9scy5lbmQudmFsdWUudG9JU08oeyBpbmNsdWRlT2Zmc2V0OiBmYWxzZSB9KSBhcyBzdHJpbmcsIGxhYmVsOiAnJyB9XSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5tZXRhQXBpLmdldFF1YWxpdHlNYXRyaXhXaXRoRmlsdGVyc1YyKGJvZHkpLnBpcGUodGFrZSgxKSk7XG4gIH1cblxuICBwcml2YXRlIGdldEN1cnJlbnRGaWx0ZXJWYWx1ZXMoKTogRmlsdGVyW10ge1xuICAgIGNvbnN0IGJvZHk6IEZpbHRlcltdID0gW107XG4gICAgZm9yIChjb25zdCBbZmllbGQsIHZhbHVlc10gb2YgT2JqZWN0LmVudHJpZXModGhpcy5jYXRlZ29yeUNvbnRyb2xzLnZhbHVlKSkge1xuICAgICAgbGV0IHJlcXVlc3RWYWx1ZXM6IEZpbHRlclZhbHVlW10gPSBbXTtcbiAgICAgIGlmICh2YWx1ZXMgJiYgdmFsdWVzLmxlbmd0aCkge1xuICAgICAgICByZXF1ZXN0VmFsdWVzID0gdmFsdWVzLm1hcCgodmFsdWUpID0+ICh7IGlkOiB2YWx1ZSwgbGFiZWw6ICcnIH0pKTtcbiAgICAgICAgYm9keS5wdXNoKHsgZmllbGQsIHZhbHVlczogcmVxdWVzdFZhbHVlcyB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGJvZHk7XG4gIH1cblxuICBwcml2YXRlIGxvYWREYXRhV2l0aEN1cnJlbnRseVNlbGVjdGVkRmlsdGVycygpIHtcbiAgICAvKlxuICAgIGNvbnNpZGVyIHVzaW5nIGFuIGludGVybWVkaWF0ZSBTdWJqZWN0IHdpdGggYSBzd2l0Y2hNYXAgcGlwZVxuICAgIHRvIHByZXZlbnQgdGhhdCBvbGRlciAoIGxvbmdlciBydW5uaW5nICkgcmVxdWVzdHMgb3ZlcndyaXRlIG5ld2VyIG9uZXNcbiAgICBzZWUgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNjQ0Mjc2MjkvaG93LXRvLXVzZS1yeGpzLXRvLWNhbmNlbC1wcmV2aW91cy1odHRwLXJlcXVlc3RzLWluLWFuLWFuZ3VsYXItc2VydmljZS82NDQ5MDE1NSM2NDQ5MDE1NVxuICAgICAqL1xuICAgIHRoaXMuaXNMb2FkaW5nLnNldCh0cnVlKTtcbiAgICBmb3JrSm9pbih7XG4gICAgICBwYXN0UW06IHRoaXMubG9hZERhdGFGb3JTdGFydCgpLFxuICAgICAgY3VycmVudFFtOiB0aGlzLmxvYWREYXRhRm9yRW5kKCksXG4gICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgoeyBwYXN0UW06IF8sIGN1cnJlbnRRbSB9KSA9PiB7XG4gICAgICAgICAgdGhpcy5kYXRhdGFibGVDb2x1bW5zID0gY3VycmVudFFtLmNvbHVtbnMuZmlsdGVyKChjKSA9PiBjLmxldmVsICE9PSAwKS5tYXAoKGMpID0+IGMuaWQpO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoeyBwYXN0UW0sIGN1cnJlbnRRbSB9KSA9PiB7XG4gICAgICAgIHRoaXMucmVjZW50UXVhbGl0eU1hdHJpeCQubmV4dChjdXJyZW50UW0pO1xuICAgICAgICB0aGlzLnBhc3RRdWFsaXR5TWF0cml4JC5uZXh0KHBhc3RRbSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIG9wZW5FZGl0TGluayhzb3VyY2U6IHN0cmluZywgaXNzdWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmxpbmtTZXJ2aWNlLm9wZW5CeVJlcGxpY2F0aW9uc291cmNlQW5kSXNzdWVUeXBlV2l0aEZpbHRlcnMoc291cmNlLCBpc3N1ZSwgdGhpcy5jYXRlZ29yeUNvbnRyb2xzLnZhbHVlKTtcbiAgfVxuXG4gIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL2lzc3Vlcy84MzYxI2lzc3VlY29tbWVudC0zNDU4MDQ5NTRcbiAgY29sdW1uSWRlbnQoX2luZGV4OiBudW1iZXIsIGNvbDogUXVhbGl0eU1hdHJpeEhlYWRlcikge1xuICAgIHJldHVybiBjb2wuaWQ7XG4gIH1cblxuICBhc3luYyByZWZyZXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vb3Igc2hvdWxkIHdlIHJlc2V0IGFsbCBGaWx0ZXI/XG4gICAgdGhpcy5sb2FkRGF0YVdpdGhDdXJyZW50bHlTZWxlY3RlZEZpbHRlcnMoKTtcbiAgfVxuXG4gIGdldFBhc3RDb2x1bW4oY29sdW1uSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnBhc3RRdWFsaXR5TWF0cml4JC52YWx1ZT8uY29sdW1ucy5maW5kKChjKSA9PiBjLmlkID09PSBjb2x1bW5JZCk7XG4gIH1cblxuICBnZXRUcmVuZChyb3c6IFF1YWxpdHlNYXRyaXhSb3csIGNvbHVtbjogUXVhbGl0eU1hdHJpeEhlYWRlcik6IHsgZGVsdGE/OiBudW1iZXI7IHRyZW5kPzogc3RyaW5nIH0ge1xuICAgIGlmICh0aGlzLnBhc3RRdWFsaXR5TWF0cml4JC52YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBpZiAodGhpcy5wYXN0UXVhbGl0eU1hdHJpeCQudmFsdWUuY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBwYXN0X3JvdyA9IHRoaXMucGFzdFF1YWxpdHlNYXRyaXgkPy52YWx1ZS5yb3dzLmZpbmQoKHByKSA9PiBwci5tZXRhLmlkID09IHJvdy5tZXRhLmlkKTtcbiAgICAgIGNvbnN0IHBhc3RfY29sdW1uID0gdGhpcy5wYXN0UXVhbGl0eU1hdHJpeCQudmFsdWUuY29sdW1ucy5maW5kKChjKSA9PiBjLmlkID09IGNvbHVtbi5pZCk7XG4gICAgICBpZiAoIXBhc3Rfcm93IHx8ICFwYXN0X2NvbHVtbikge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRlbHRhID0gTWF0aC5mbG9vcihcbiAgICAgICAgKDEwMCAqIHJvdy5jb3VudHNbY29sdW1uLmlkXS5zdWZmaWNpZW50KSAvIGNvbHVtbi50b3RhbCAtXG4gICAgICAgICAgKDEwMCAqIHBhc3Rfcm93LmNvdW50c1tjb2x1bW4uaWRdLnN1ZmZpY2llbnQpIC8gcGFzdF9jb2x1bW4udG90YWxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHRyZW5kID0gZGVsdGEgPT09IDAgPyAndHJlbmRpbmdfZmxhdCcgOiBkZWx0YSA8IDAgPyAndHJlbmRpbmdfZG93bicgOiAndHJlbmRpbmdfdXAnO1xuICAgICAgcmV0dXJuIHsgZGVsdGEsIHRyZW5kIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH1cblxuICBnZXREb251dFNsaWNlcyhyb3c6IFF1YWxpdHlNYXRyaXhSb3csIGNvbHVtbjogUXVhbGl0eU1hdHJpeEhlYWRlcik6IERvbnV0U2xpY2VbXSB7XG4gICAgbGV0IHN1ZmZpY2llbnRmaWxsUmF0ZSA9IDA7XG4gICAgbGV0IGluc3VmZmljaWVudGZpbGxSYXRlID0gMDtcbiAgICAvL0RlciBXZXJ0IGJlcmVjaG5ldCBzaWNoIGF1cyBkZW0gdG90YWxfY291bnQgLSB3aXRob3V0X2Rlc2NyaXB0aW9uX2NvdW50LlxuXG4gICAgaWYgKGNvbHVtbi50b3RhbCAhPT0gMCkge1xuICAgICAgc3VmZmljaWVudGZpbGxSYXRlID0gTWF0aC5yb3VuZCgoMTAwICogcm93LmNvdW50c1tjb2x1bW4uaWRdLnN1ZmZpY2llbnQpIC8gY29sdW1uLnRvdGFsKTtcbiAgICAgIGluc3VmZmljaWVudGZpbGxSYXRlID0gTWF0aC5yb3VuZCgoMTAwICogcm93LmNvdW50c1tjb2x1bW4uaWRdLmluc3VmZmljaWVudCkgLyBjb2x1bW4udG90YWwpO1xuICAgIH1cbiAgICBjb25zdCBzdWZmaWNpZW50VG90YWwgPSByb3cuY291bnRzW2NvbHVtbi5pZF0uc3VmZmljaWVudDtcbiAgICBjb25zdCBpbnN1ZmZpY2llbnRUb3RhbCA9IHJvdy5jb3VudHNbY29sdW1uLmlkXS5pbnN1ZmZpY2llbnQ7XG4gICAgY29uc3QgbWlzc2luZ1RvdGFsID0gY29sdW1uLnRvdGFsIC0gc3VmZmljaWVudFRvdGFsIC0gaW5zdWZmaWNpZW50VG90YWw7XG4gICAgY29uc3QgcmVzdCA9IDEwMCAtIChzdWZmaWNpZW50ZmlsbFJhdGUgKyBpbnN1ZmZpY2llbnRmaWxsUmF0ZSk7IC8vIGEuay5hLiBcIm1pc3NpbmdcIlxuICAgIGNvbnN0IHNsaWNlcyA9IFtcbiAgICAgIHtcbiAgICAgICAgaWQ6IDMsXG4gICAgICAgIHBlcmNlbnQ6IHJlc3QsXG4gICAgICAgIGNvbG9yOiAnI0Q4RURGQycsXG4gICAgICAgIGxhYmVsOiBgJHtyZXN0fSAlICgke21pc3NpbmdUb3RhbH0pYCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiAxLFxuICAgICAgICBwZXJjZW50OiBpbnN1ZmZpY2llbnRmaWxsUmF0ZSxcbiAgICAgICAgY29sb3I6ICcjQzIwODA4JyxcbiAgICAgICAgbGFiZWw6IGAke2luc3VmZmljaWVudGZpbGxSYXRlfSAlICgke2luc3VmZmljaWVudFRvdGFsfSlgLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6IDIsXG4gICAgICAgIHBlcmNlbnQ6IHN1ZmZpY2llbnRmaWxsUmF0ZSxcbiAgICAgICAgY29sb3I6ICcjNEFCRUZGJyxcbiAgICAgICAgbGFiZWw6IGAke3N1ZmZpY2llbnRmaWxsUmF0ZX0gJSAoJHtzdWZmaWNpZW50VG90YWx9KWAsXG4gICAgICB9LFxuICAgIF07XG4gICAgcmV0dXJuIHNsaWNlcztcbiAgfVxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgRGF0ZVRpbWUgPSBEYXRlVGltZTtcbn1cbiIsIjxtYXQtY2FyZCBhcHBlYXJhbmNlPVwicmFpc2VkXCI+XG4gIDxtYXQtY2FyZC1oZWFkZXIgKm5nSWY9XCJwYWdlVGl0bGVcIj5cbiAgICA8bWF0LWNhcmQtdGl0bGU+XG4gICAgICBRdWFsaXTDpHRzbWV0cmlrOiB7eyBwYWdlVGl0bGUgfCB0cmFuc2xhdGUgfX17e2lzTG9hZGluZygpID8gXCI6IExhZGUgbmV1ZSBEYXRlbi5cIiA6IFwiXCJ9fTwvbWF0LWNhcmQtdGl0bGVcbiAgICA+XG4gIDwvbWF0LWNhcmQtaGVhZGVyPlxuICA8bWF0LWNhcmQtY29udGVudD5cbiAgICAgIDxtZXRhcXMyLXFtLWZpbHRlclxuICAgICAgICAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIGNhdGVnb3J5Q29udHJvbHMuY29udHJvbHMgfCBrZXl2YWx1ZTsgdHJhY2tCeTogZmlsdGVySWRlbnRcIlxuICAgICAgICBbb3B0aW9uc109XCJjYXRlZ29yeUZpbHRlclZhbHVlcy5nZXQoZmlsdGVyLmtleSlcIlxuICAgICAgICBbaW5wdXRGb3JtQ29udHJvbF09XCJmaWx0ZXIudmFsdWVcIlxuICAgICAgICBbbGFiZWxdID0gXCInZmlsdGVyLicgKyBmaWx0ZXIua2V5IHwgdHJhbnNsYXRlXCI+PC9tZXRhcXMyLXFtLWZpbHRlcj5cbiAgPC9tYXQtY2FyZC1jb250ZW50PlxuICA8bWF0LWNhcmQtYWN0aW9ucyBhbGlnbj1cImVuZFwiPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFtkaXNhYmxlZF09XCJpc0xvYWRpbmcoKVwiIGxhYmVsUG9zaXRpb249XCJiZWZvcmVcIiBbZm9ybUNvbnRyb2xdPVwib25seVNvdXJjZXNXaXRoTWF0ZXJpYWxcIiBpZD1cIm9ubHlTb3VyY2VzV2l0aE1hdGVyaWFsXCIgPlxuICAgICAgc2hvdyBvbmx5IHNvdXJjZXMgd2l0aCBtYXRlcmlhbFxuICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nKClcIiBsYWJlbFBvc2l0aW9uPVwiYmVmb3JlXCIgW2Zvcm1Db250cm9sXT1cInNob3dIaXN0b3JpY2FsRGF0YVwiIGlkPVwic2hvd0hpc3RvcmljYWxEYXRhXCIgPlxuICAgICAgc2hvdyBoaXN0b3JpY2FsIGRhdGFcbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgPGJ1dHRvblxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgW2Rpc2FibGVkXT1cImlzTG9hZGluZ1wiXG4gICAgICAoY2xpY2spPVwicmVmcmVzaCgpXCJcbiAgICAgIG1hdFRvb2x0aXA9XCJBa3R1YWxpc2llcmUgZGVuIElTVC1TdGFuZFwiXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICA+XG4gICAgICA8bWF0LWljb24+cmVmcmVzaDwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LWNhcmQtYWN0aW9ucz5cbjwvbWF0LWNhcmQ+XG48bWV0YXFzMi1kYXRlcGlja2VyICpuZ0lmPVwic2hvd0hpc3RvcmljYWxEYXRhLnZhbHVlXCIgW2Rpc2FibGVkXT1cImlzTG9hZGluZygpXCIgW2lucHV0R3JvdXBdPVwicmFuZ2VcIiA+PC9tZXRhcXMyLWRhdGVwaWNrZXI+XG48bWF0LWNhcmQ+XG4gIDxtZXRhcXMyLXByb2dyZXNzLXNwaW5uZXIgW2Rpc3BsYXlQcm9ncmVzc1NwaW5uZXJdPVwiaXNMb2FkaW5nKClcIj48L21ldGFxczItcHJvZ3Jlc3Mtc3Bpbm5lcj5cbiAgPHRhYmxlIFtuZ0NsYXNzXT1cInsnd2hpbGUtbG9hZGluZyc6IGlzTG9hZGluZygpfVwiIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09XCJyZWNlbnRRdWFsaXR5TWF0cml4JC52YWx1ZS5yb3dzXCIgY2xhc3M9XCJxdWFsaXR5LW1hdHJpeFwiPlxuICAgIDwhLS0gRGVmaW5lIGNvbHVtbnMgb2YgdGFibGUgLS0+XG4gICAgPCEtLSBSb3cgSGVhZGVyIENvbHVtbiAtLT5cbiAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInJvdy1oZWFkZXJcIiBzdGlja3k+XG4gICAgICA8dGggcm93c3Bhbj1cIjJcIiBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+SXNzdWUgVHlwZTwvdGg+XG4gICAgICA8dGRcbiAgICAgICAgbWF0LWNlbGxcbiAgICAgICAgKm1hdENlbGxEZWY9XCJsZXQgcm93XCJcbiAgICAgICAgbWF0VG9vbHRpcD1cInt7cm93Lm1ldGEuYWx0X2xhYmVsfX1cIlxuICAgICAgICBjbGFzcz1cInJvdy1oZWFkZXIge3snbWF0LWNlbGwtbGV2ZWwtJyArIChyb3cubWV0YS5sZXZlbCsxKX19XCJcbiAgICAgID5cbiAgICAgICAge3tcInF1YWxpdHlfbWF0cml4LlwiICsgcm93Lm1ldGEubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPCEtLSBvbmUgY29sdW1uIGZvciB0aGUgc291cmNlIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbCBvZiBmaWx0ZXJlZENvbHVtbnM7IHRyYWNrQnk6Y29sdW1uSWRlbnRcIiBbbWF0Q29sdW1uRGVmXT1cImNvbC5pZCArICdfc291cmNlJ1wiPlxuICAgICAgPHRoIFthdHRyLmNvbHNwYW5dPVwic2hvd0hpc3RvcmljYWxEYXRhLnZhbHVlPzI6MVwiIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXRUb29sdGlwPVwie3tjb2wuYWx0TGFiZWx9fVwiID57e2NvbC5sYWJlbH19PC90aD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8IS0tIC9zb3VyY2UgLS0+XG4gICAgPCEtLSBjdXJyZW50IERhdGEgQ29sdW1ucyAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgZmlsdGVyZWRDb2x1bW5zOyB0cmFja0J5OmNvbHVtbklkZW50XCIgW21hdENvbHVtbkRlZl09XCJjb2x1bW4uaWQgKyAnX2N1cnJlbnQnXCI+XG4gICAgICA8dGggY2xhc3M9XCJyZWNlbnQtZGF0YS1jZWxsXCIgbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdFRvb2x0aXA9XCJ7e2NvbHVtbi5hbHRMYWJlbH19XCIgPnt7IHJhbmdlLmNvbnRyb2xzLmVuZC52YWx1ZT8udG9Mb2NhbGVTdHJpbmcoRGF0ZVRpbWUuREFURV9TSE9SVCkgfX0gPGJyPih7e2NvbHVtbi50b3RhbH19KTwvdGg+XG4gICAgICA8dGQgY2xhc3M9XCJyZWNlbnQtZGF0YS1jZWxsXCIgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCI+XG4gICAgICAgICAgPGEgKm5nSWY9XCJjb2x1bW4udG90YWwgPiAwIGVsc2UgZW1wdHlEaXZcIiBjbGFzcz1cImNoYXJ0LWNvbnRhaW5lclwiIChjbGljayk9XCJvcGVuRWRpdExpbmsoIGNvbHVtbi5sYWJlbCwgIHJvdy5tZXRhLmxhYmVsKVwiPlxuICAgICAgICAgICAgPGRpdiA+XG4gICAgICAgICAgICAgIDxtZXRhcXMyLWRvbnV0LWNoYXJ0IFtkYXRhXT1cImdldERvbnV0U2xpY2VzKHJvdywgY29sdW1uKVwiIFtib3JkZXJTaXplXT1cIjI1XCI+PC9tZXRhcXMyLWRvbnV0LWNoYXJ0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZW1wdHlEaXY+XG4gICAgICAgICAgICA8ZGl2Pi08L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8IS0tIC9jdXJyZW50IERhdGEgQ29sdW1ucyAtLT5cbiAgICA8IS0tIHBhc3QgRGF0YSBDb2x1bW5zIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93SGlzdG9yaWNhbERhdGEudmFsdWVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBmaWx0ZXJlZENvbHVtbnM7IHRyYWNrQnk6Y29sdW1uSWRlbnRcIiBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5pZCArICdfcGFzdCdcIj5cbiAgICAgICAgPHRoIGNsYXNzPVwiaGlzdG9yaWMtZGF0YS1jZWxsXCIgbWF0LWhlYWRlci1jZWxsXG4gICAgICAgICAgICAqbWF0SGVhZGVyQ2VsbERlZj57eyByYW5nZS5jb250cm9scy5zdGFydC52YWx1ZT8udG9Mb2NhbGVTdHJpbmcoRGF0ZVRpbWUuREFURV9TSE9SVCkgfX1cbiAgICAgICAgICA8YnI+e3sgZ2V0UGFzdENvbHVtbihjb2x1bW4uaWQpPy50b3RhbCB9fVxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGQgY2xhc3M9XCJoaXN0b3JpYy1kYXRhLWNlbGxcIiBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0VHJlbmQocm93LCBjb2x1bW4pIGFzIHRyZW5kXCI+XG4gICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJ0cmVuZC50cmVuZFwiPlxuICAgICAgICAgICAgICA8bWF0LWljb24gYXJpYS1oaWRkZW49XCJmYWxzZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwidHJlbmQudHJlbmRcIiBbZm9udEljb25dPVwidHJlbmQudHJlbmQhXCIgLz5cbiAgICAgICAgICAgICAge3sgdHJlbmQuZGVsdGEgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPCEtLSAvcGFzdCBEYXRhIENvbHVtbnMgLS0+XG5cbiAgICAgIDwhLS0gR2VuZXJhdGUgYWN0dWFsIHRhYmxlIC0tPlxuICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiWydyb3ctaGVhZGVyJ10uY29uY2F0KCBzb3VyY2VDb2x1bW5zKTsgc3RpY2t5OiB0cnVlO1wiPjwvdHI+XG4gICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJhbGxEYXRhQ29sdW1uczsgc3RpY2t5OiB0cnVlO1wiPjwvdHI+XG4gICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IFsncm93LWhlYWRlciddLmNvbmNhdChhbGxEYXRhQ29sdW1ucylcIj48L3RyPlxuICA8L3RhYmxlPlxuPC9tYXQtY2FyZD5cbiJdfQ==
|