@provoly/dashboard 0.15.8 → 0.15.10
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/admin/components/admin-classes/admin-classes-customize/tooltip/admin-classes-customize-tooltip.component.mjs +7 -6
- package/esm2022/admin/components/admin-classes/admin-classes-form/admin-classes-form.component.mjs +5 -4
- package/esm2022/admin/components/admin-classes/admin-classes-view/admin-attributes-form/admin-attributes-form.component.mjs +3 -3
- package/esm2022/admin/components/admin-dataset/shared/admin-form-dataset/admin-form-dataset.component.mjs +2 -2
- package/esm2022/admin/i18n/fr.translations.mjs +2 -2
- package/esm2022/dataset/i18n/fr.translations.mjs +2 -2
- package/esm2022/filters/date/date-filter.component.mjs +3 -3
- package/esm2022/lib/core/auth/geoAuth.service.mjs +8 -15
- package/esm2022/lib/core/components/modal-status/modal-status.component.mjs +2 -2
- package/esm2022/lib/core/model/dataset.interface.mjs +1 -1
- package/esm2022/lib/core/model/filter.interface.mjs +1 -1
- package/esm2022/lib/core/model/widget-map-manifest.interface.mjs +1 -1
- package/esm2022/lib/core/public-api.mjs +2 -2
- package/esm2022/lib/core/store/aggregation/frontend-aggregation/aggregation-utils.class.mjs +184 -0
- package/esm2022/lib/core/store/aggregation/frontend-aggregation/frontend-aggregation.service.mjs +93 -0
- package/esm2022/lib/dashboard/store/dashboard.selectors.mjs +2 -2
- package/esm2022/presentation/components/presentation.component.mjs +3 -3
- package/esm2022/presentation/i18n/en.translations.mjs +3 -2
- package/esm2022/presentation/i18n/fr.translations.mjs +6 -5
- package/esm2022/presentation/style/css.component.mjs +2 -2
- package/esm2022/restitution/i18n/fr.translations.mjs +2 -2
- package/esm2022/restitution/style/css.component.mjs +2 -2
- package/esm2022/tooltips/attribute/attribute-tooltip.component.mjs +19 -10
- package/esm2022/widgets/widget-map/component/widget-map.component.mjs +18 -11
- package/esm2022/widgets/widget-map/utils/widget-map.utils.mjs +36 -1
- package/esm2022/widgets/widget-table/component/widget-table.component.mjs +3 -3
- package/fesm2022/provoly-dashboard-admin.mjs +14 -12
- package/fesm2022/provoly-dashboard-admin.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-dataset.mjs +1 -1
- package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-filters-date.mjs +2 -2
- package/fesm2022/provoly-dashboard-filters-date.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-presentation.mjs +11 -9
- package/fesm2022/provoly-dashboard-presentation.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-restitution.mjs +3 -3
- package/fesm2022/provoly-dashboard-restitution.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-tooltips-attribute.mjs +18 -9
- package/fesm2022/provoly-dashboard-tooltips-attribute.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +52 -10
- package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-table.mjs +2 -2
- package/fesm2022/provoly-dashboard-widgets-widget-table.mjs.map +1 -1
- package/fesm2022/provoly-dashboard.mjs +237 -179
- package/fesm2022/provoly-dashboard.mjs.map +1 -1
- package/lib/core/auth/geoAuth.service.d.ts +3 -1
- package/lib/core/model/dataset.interface.d.ts +1 -1
- package/lib/core/model/filter.interface.d.ts +1 -1
- package/lib/core/model/widget-map-manifest.interface.d.ts +1 -0
- package/lib/core/public-api.d.ts +1 -1
- package/lib/core/store/aggregation/frontend-aggregation/aggregation-utils.class.d.ts +33 -0
- package/lib/core/store/aggregation/frontend-aggregation/frontend-aggregation.service.d.ts +22 -0
- package/lib/dashboard/store/dashboard.selectors.d.ts +1 -1
- package/package.json +30 -30
- package/presentation/i18n/en.translations.d.ts +1 -0
- package/presentation/i18n/fr.translations.d.ts +1 -0
- package/presentation/style/_o-pry-presentation.scss +7 -2
- package/tooltips/attribute/attribute-tooltip.component.d.ts +5 -1
- package/widgets/widget-map/component/widget-map.component.d.ts +3 -4
- package/widgets/widget-map/utils/widget-map.utils.d.ts +1 -0
- package/esm2022/lib/core/store/aggregation/frontend-aggregation.service.mjs +0 -210
- package/lib/core/store/aggregation/frontend-aggregation.service.d.ts +0 -33
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { InjectionToken } from '@angular/core';
|
|
2
|
+
import { HttpClient } from '@angular/common/http';
|
|
2
3
|
import * as i0 from "@angular/core";
|
|
3
4
|
export declare abstract class PryGeoAuthService {
|
|
4
5
|
abstract customLoader(tile: any, src: string): void;
|
|
5
6
|
}
|
|
6
7
|
export declare const PRY_GEOAUTH_TOKEN: InjectionToken<PryGeoAuthService>;
|
|
7
8
|
export declare class PryDefaultGeoAuthService extends PryGeoAuthService {
|
|
8
|
-
|
|
9
|
+
private httpClient;
|
|
10
|
+
constructor(httpClient: HttpClient);
|
|
9
11
|
customLoader(tile: any, src: string): void;
|
|
10
12
|
static ɵfac: i0.ɵɵFactoryDeclaration<PryDefaultGeoAuthService, never>;
|
|
11
13
|
static ɵprov: i0.ɵɵInjectableDeclaration<PryDefaultGeoAuthService>;
|
package/lib/core/public-api.d.ts
CHANGED
|
@@ -45,7 +45,7 @@ export * from './store/context-menu/context-menu.reducer';
|
|
|
45
45
|
export * from './store/raw/raw.service';
|
|
46
46
|
export * from './store/aggregation/base-aggregation.service';
|
|
47
47
|
export * from './store/aggregation/backend-aggregation.service';
|
|
48
|
-
export * from './store/aggregation/frontend-aggregation.service';
|
|
48
|
+
export * from './store/aggregation/frontend-aggregation/frontend-aggregation.service';
|
|
49
49
|
export * from './components/nq-color-selector/nq-color-selector.component';
|
|
50
50
|
export * from './components/translate-id/translate-id.pipe';
|
|
51
51
|
export * from './components/translate-item-to-symbol/translate-item-to-symbol.pipe';
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { AtLimit, ChartAggregatedWidgetOptions, Operation, TimeLimit } from '../../../model/widget-aggregated-chart-manifest.interface';
|
|
2
|
+
import { Class } from '../../class/class.interface';
|
|
3
|
+
import { Item, ValueType } from '../../../model/item.interface';
|
|
4
|
+
import { ResultSets } from '../../../model/result-set.interface';
|
|
5
|
+
import { Filter } from '../../../model/filter.interface';
|
|
6
|
+
export declare class AggregationUtils {
|
|
7
|
+
static getAxisAttribute(classes: Class[], options: ChartAggregatedWidgetOptions, axis: 'ordinate' | 'abscissa'): string | undefined;
|
|
8
|
+
static getChartDatasourceResultSet(datasources: string[], resultSets: ResultSets): import("../../../model/result-set.interface").ResultSet;
|
|
9
|
+
static getAggregatedValue(operation: Operation, groupedItems: {
|
|
10
|
+
[key: string | number]: Item[];
|
|
11
|
+
}, abscissaAttribute: keyof typeof groupedItems, ordinateAttribute: string): number | ValueType;
|
|
12
|
+
static getValueFromAttribute(item: Item, attribute: string): import("../../../model/item.interface").AttributeSimpleValue;
|
|
13
|
+
static getAggregatedValueForOperation(operation: Operation, values: number[]): number | ValueType;
|
|
14
|
+
static getQuartile(values: number[], q: number): number;
|
|
15
|
+
static formatByLimit(data: {
|
|
16
|
+
key: ValueType;
|
|
17
|
+
value: ValueType;
|
|
18
|
+
}[], limit: AtLimit | TimeLimit, operation: Operation): {
|
|
19
|
+
key: ValueType;
|
|
20
|
+
value: ValueType;
|
|
21
|
+
}[];
|
|
22
|
+
static formatDataByTimeLimit(data: {
|
|
23
|
+
key: ValueType;
|
|
24
|
+
value: ValueType;
|
|
25
|
+
}[], limit: TimeLimit, operation: Operation): {
|
|
26
|
+
value: ValueType;
|
|
27
|
+
key: ValueType;
|
|
28
|
+
values: ValueType[];
|
|
29
|
+
}[];
|
|
30
|
+
static getKeyValueForTimeInterval(key: ValueType, interval: 'second' | 'minute' | 'hour' | 'day' | 'week' | 'quarter' | 'year'): string;
|
|
31
|
+
static filterItems(items: Item[], filters: Filter[]): Item[];
|
|
32
|
+
static doesItemValuePassFilter(item: Item, attribute: string, operator: string | undefined, filterValue: string | number | undefined): boolean;
|
|
33
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Store } from '@ngrx/store';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { Item, ValueType } from '../../../model/item.interface';
|
|
4
|
+
import { AtLimit, ChartAggregatedWidgetOptions, Operation, TimeLimit } from '../../../model/widget-aggregated-chart-manifest.interface';
|
|
5
|
+
import { AggregationResult, PryAggregationService } from '../base-aggregation.service';
|
|
6
|
+
import { Class } from '../../class/class.interface';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
export declare class PryFrontendAggregationService extends PryAggregationService {
|
|
9
|
+
private store;
|
|
10
|
+
constructor(store: Store);
|
|
11
|
+
aggregate(datasources: string[], options: ChartAggregatedWidgetOptions): Observable<AggregationResult>;
|
|
12
|
+
getAggregationResult(options: ChartAggregatedWidgetOptions, classes: Class[], items: Item[]): AggregationResult;
|
|
13
|
+
getItemsGroupedByAttributeValue(items: Item[], attribute: string): {
|
|
14
|
+
[key: string | number]: Item[];
|
|
15
|
+
};
|
|
16
|
+
getChartDataBasedOnOperation(items: Item[], operation: Operation, abscissa: string, ordinate: string, limit?: AtLimit | TimeLimit): {
|
|
17
|
+
key: ValueType;
|
|
18
|
+
value: ValueType;
|
|
19
|
+
}[];
|
|
20
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PryFrontendAggregationService, never>;
|
|
21
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<PryFrontendAggregationService>;
|
|
22
|
+
}
|
|
@@ -319,7 +319,7 @@ export declare const DashboardSelectors: {
|
|
|
319
319
|
viewMode?: ViewMode | undefined;
|
|
320
320
|
initial: GlobalManifest | undefined;
|
|
321
321
|
}>;
|
|
322
|
-
filters: MemoizedSelector<object,
|
|
322
|
+
filters: MemoizedSelector<object, Filter[], (s1: DashboardState) => Filter[]>;
|
|
323
323
|
isCurrentPresentationModified: MemoizedSelector<object, boolean, (s1: {
|
|
324
324
|
current: import("../../core/model/manifest.interface").ManifestDescription | undefined;
|
|
325
325
|
viewMode?: ViewMode | undefined;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@provoly/dashboard",
|
|
3
|
-
"version": "0.15.
|
|
3
|
+
"version": "0.15.10",
|
|
4
4
|
"type": "commonjs",
|
|
5
5
|
"peerDependencies": {
|
|
6
6
|
"@angular/cdk": "14.x || 15.x || 16.x",
|
|
@@ -127,17 +127,41 @@
|
|
|
127
127
|
"esm": "./esm2022/search/provoly-dashboard-search.mjs",
|
|
128
128
|
"default": "./fesm2022/provoly-dashboard-search.mjs"
|
|
129
129
|
},
|
|
130
|
+
"./supervision": {
|
|
131
|
+
"types": "./supervision/index.d.ts",
|
|
132
|
+
"esm2022": "./esm2022/supervision/provoly-dashboard-supervision.mjs",
|
|
133
|
+
"esm": "./esm2022/supervision/provoly-dashboard-supervision.mjs",
|
|
134
|
+
"default": "./fesm2022/provoly-dashboard-supervision.mjs"
|
|
135
|
+
},
|
|
130
136
|
"./toolbox": {
|
|
131
137
|
"types": "./toolbox/index.d.ts",
|
|
132
138
|
"esm2022": "./esm2022/toolbox/provoly-dashboard-toolbox.mjs",
|
|
133
139
|
"esm": "./esm2022/toolbox/provoly-dashboard-toolbox.mjs",
|
|
134
140
|
"default": "./fesm2022/provoly-dashboard-toolbox.mjs"
|
|
135
141
|
},
|
|
136
|
-
"./
|
|
137
|
-
"types": "./
|
|
138
|
-
"esm2022": "./esm2022/
|
|
139
|
-
"esm": "./esm2022/
|
|
140
|
-
"default": "./fesm2022/provoly-dashboard-
|
|
142
|
+
"./filters/date": {
|
|
143
|
+
"types": "./filters/date/index.d.ts",
|
|
144
|
+
"esm2022": "./esm2022/filters/date/provoly-dashboard-filters-date.mjs",
|
|
145
|
+
"esm": "./esm2022/filters/date/provoly-dashboard-filters-date.mjs",
|
|
146
|
+
"default": "./fesm2022/provoly-dashboard-filters-date.mjs"
|
|
147
|
+
},
|
|
148
|
+
"./filters/list": {
|
|
149
|
+
"types": "./filters/list/index.d.ts",
|
|
150
|
+
"esm2022": "./esm2022/filters/list/provoly-dashboard-filters-list.mjs",
|
|
151
|
+
"esm": "./esm2022/filters/list/provoly-dashboard-filters-list.mjs",
|
|
152
|
+
"default": "./fesm2022/provoly-dashboard-filters-list.mjs"
|
|
153
|
+
},
|
|
154
|
+
"./filters/number": {
|
|
155
|
+
"types": "./filters/number/index.d.ts",
|
|
156
|
+
"esm2022": "./esm2022/filters/number/provoly-dashboard-filters-number.mjs",
|
|
157
|
+
"esm": "./esm2022/filters/number/provoly-dashboard-filters-number.mjs",
|
|
158
|
+
"default": "./fesm2022/provoly-dashboard-filters-number.mjs"
|
|
159
|
+
},
|
|
160
|
+
"./filters/text": {
|
|
161
|
+
"types": "./filters/text/index.d.ts",
|
|
162
|
+
"esm2022": "./esm2022/filters/text/provoly-dashboard-filters-text.mjs",
|
|
163
|
+
"esm": "./esm2022/filters/text/provoly-dashboard-filters-text.mjs",
|
|
164
|
+
"default": "./fesm2022/provoly-dashboard-filters-text.mjs"
|
|
141
165
|
},
|
|
142
166
|
"./components/card": {
|
|
143
167
|
"types": "./components/card/index.d.ts",
|
|
@@ -181,30 +205,6 @@
|
|
|
181
205
|
"esm": "./esm2022/components/stepper/provoly-dashboard-components-stepper.mjs",
|
|
182
206
|
"default": "./fesm2022/provoly-dashboard-components-stepper.mjs"
|
|
183
207
|
},
|
|
184
|
-
"./filters/date": {
|
|
185
|
-
"types": "./filters/date/index.d.ts",
|
|
186
|
-
"esm2022": "./esm2022/filters/date/provoly-dashboard-filters-date.mjs",
|
|
187
|
-
"esm": "./esm2022/filters/date/provoly-dashboard-filters-date.mjs",
|
|
188
|
-
"default": "./fesm2022/provoly-dashboard-filters-date.mjs"
|
|
189
|
-
},
|
|
190
|
-
"./filters/list": {
|
|
191
|
-
"types": "./filters/list/index.d.ts",
|
|
192
|
-
"esm2022": "./esm2022/filters/list/provoly-dashboard-filters-list.mjs",
|
|
193
|
-
"esm": "./esm2022/filters/list/provoly-dashboard-filters-list.mjs",
|
|
194
|
-
"default": "./fesm2022/provoly-dashboard-filters-list.mjs"
|
|
195
|
-
},
|
|
196
|
-
"./filters/number": {
|
|
197
|
-
"types": "./filters/number/index.d.ts",
|
|
198
|
-
"esm2022": "./esm2022/filters/number/provoly-dashboard-filters-number.mjs",
|
|
199
|
-
"esm": "./esm2022/filters/number/provoly-dashboard-filters-number.mjs",
|
|
200
|
-
"default": "./fesm2022/provoly-dashboard-filters-number.mjs"
|
|
201
|
-
},
|
|
202
|
-
"./filters/text": {
|
|
203
|
-
"types": "./filters/text/index.d.ts",
|
|
204
|
-
"esm2022": "./esm2022/filters/text/provoly-dashboard-filters-text.mjs",
|
|
205
|
-
"esm": "./esm2022/filters/text/provoly-dashboard-filters-text.mjs",
|
|
206
|
-
"default": "./fesm2022/provoly-dashboard-filters-text.mjs"
|
|
207
|
-
},
|
|
208
208
|
"./pipeline-components/filter": {
|
|
209
209
|
"types": "./pipeline-components/filter/index.d.ts",
|
|
210
210
|
"esm2022": "./esm2022/pipeline-components/filter/provoly-dashboard-pipeline-components-filter.mjs",
|
|
@@ -48,14 +48,18 @@
|
|
|
48
48
|
align-items: stretch;
|
|
49
49
|
|
|
50
50
|
.a-tooltip {
|
|
51
|
+
align-items: center;
|
|
52
|
+
width: 100%;
|
|
51
53
|
height: 100%;
|
|
52
54
|
}
|
|
53
|
-
|
|
54
55
|
&__image {
|
|
55
56
|
width: auto;
|
|
56
|
-
height: 90%;
|
|
57
57
|
cursor: pointer;
|
|
58
58
|
overflow: hidden;
|
|
59
|
+
height: toRem(110);
|
|
60
|
+
display: flex;
|
|
61
|
+
align-items: center;
|
|
62
|
+
justify-content: center;
|
|
59
63
|
|
|
60
64
|
.is-full-width {
|
|
61
65
|
width: 100%;
|
|
@@ -64,6 +68,7 @@
|
|
|
64
68
|
}
|
|
65
69
|
}
|
|
66
70
|
|
|
71
|
+
|
|
67
72
|
&__header {
|
|
68
73
|
position: relative;
|
|
69
74
|
display: flex;
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import { BaseTooltipComponent, TranslateIdPipe } from '@provoly/dashboard';
|
|
2
2
|
import { Observable } from 'rxjs';
|
|
3
|
+
import { Store } from '@ngrx/store';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
export declare class AttributeTooltipComponent extends BaseTooltipComponent {
|
|
5
6
|
private translateIdPipe;
|
|
6
|
-
|
|
7
|
+
private store;
|
|
8
|
+
private classes$;
|
|
9
|
+
constructor(translateIdPipe: TranslateIdPipe, store: Store<any>);
|
|
10
|
+
getAttributeName(attribute: string): Observable<string>;
|
|
7
11
|
getValue(attribute: string, limit?: number): Observable<string>;
|
|
8
12
|
_getValue(attribute: string): Observable<string | undefined | number>;
|
|
9
13
|
static ɵfac: i0.ɵɵFactoryDeclaration<AttributeTooltipComponent, never>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AfterViewInit, ComponentRef, ElementRef, Injector, OnDestroy, TemplateRef, ViewContainerRef } from '@angular/core';
|
|
2
2
|
import { Store } from '@ngrx/store';
|
|
3
|
-
import { BaseTooltipComponent, BaseWidgetMapLayerOptions, Class, DataWidgetComponent, Field, FilterContext, GetCapabilitiesResponse, MapAutoLayerOptions, MapFeatureLayerOptions, MapGeoServerLayerOptions, MapRasterTileLayerOptions, MapVectorTileLayerOptions, MapWidgetBubbleLayerOptions, MapWidgetHeatMapLayerOptions, MapWidgetLayerOptions, MapWidgetMarkerLayerOptions, MapWidgetOptions, MapWMSLayerLayerOptions, MapWMTSLayerLayerOptions, PryAggregationService, PryGeoAuthService, PryI18nService,
|
|
3
|
+
import { BaseTooltipComponent, BaseWidgetMapLayerOptions, Class, DataWidgetComponent, Field, FilterContext, GetCapabilitiesResponse, MapAutoLayerOptions, MapFeatureLayerOptions, MapGeoServerLayerOptions, MapRasterTileLayerOptions, MapVectorTileLayerOptions, MapWidgetBubbleLayerOptions, MapWidgetHeatMapLayerOptions, MapWidgetLayerOptions, MapWidgetMarkerLayerOptions, MapWidgetOptions, MapWMSLayerLayerOptions, MapWMTSLayerLayerOptions, PryAggregationService, PryGeoAuthService, PryI18nService, SymbolService, TooltipFactoryService } from '@provoly/dashboard';
|
|
4
4
|
import { Map } from 'ol';
|
|
5
5
|
import { Coordinate } from 'ol/coordinate';
|
|
6
6
|
import { Geometry } from 'ol/geom';
|
|
@@ -17,7 +17,6 @@ import { WidgetMapLayerService } from './widget-map-layer.service';
|
|
|
17
17
|
import * as i0 from "@angular/core";
|
|
18
18
|
export declare const TOOLTIP_PADDING = 15;
|
|
19
19
|
export declare class WidgetMapComponent extends DataWidgetComponent implements AfterViewInit, OnDestroy {
|
|
20
|
-
private snackBar;
|
|
21
20
|
translateService: PryI18nService;
|
|
22
21
|
private tooltipFactoryService;
|
|
23
22
|
private symbolService;
|
|
@@ -93,7 +92,7 @@ export declare class WidgetMapComponent extends DataWidgetComponent implements A
|
|
|
93
92
|
}[]>;
|
|
94
93
|
datasourceFilters$: Observable<any>;
|
|
95
94
|
usedClasses$: Observable<any>;
|
|
96
|
-
constructor(store: Store<any>,
|
|
95
|
+
constructor(store: Store<any>, translateService: PryI18nService, tooltipFactoryService: TooltipFactoryService, symbolService: SymbolService, injector: Injector, widgetMapLayerService: WidgetMapLayerService, pryAggregationService: PryAggregationService, el: ElementRef, geoAuthService: PryGeoAuthService);
|
|
97
96
|
initInteractionManager(): InteractionManager;
|
|
98
97
|
ngAfterViewInit(): void;
|
|
99
98
|
initResultSet$(): Observable<import("@provoly/dashboard").ResultSet>;
|
|
@@ -159,6 +158,6 @@ export declare class WidgetMapComponent extends DataWidgetComponent implements A
|
|
|
159
158
|
changeAutoLayer($event: any): void;
|
|
160
159
|
get layerVisibleIdx(): number;
|
|
161
160
|
ngOnDestroy(): void;
|
|
162
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<WidgetMapComponent, [null, null, null, null, null, null, null, null,
|
|
161
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<WidgetMapComponent, [null, null, null, null, null, null, null, null, { optional: true; }]>;
|
|
163
162
|
static ɵcmp: i0.ɵɵComponentDeclaration<WidgetMapComponent, "pry-widget-map", never, {}, {}, never, never, false, never>;
|
|
164
163
|
}
|
|
@@ -16,6 +16,7 @@ export declare const getLinkFeature: (relation: Relation, featureSource: Feature
|
|
|
16
16
|
export declare const getMapAsPng: (map: Map) => Promise<string>;
|
|
17
17
|
export declare const exportMapAsImage: (map: Map, filename: string) => void;
|
|
18
18
|
export declare const geometryForLayer: (layer: MapWidgetLayerOptions) => string;
|
|
19
|
+
export declare const getLayerOrder: (layer: MapWidgetLayerOptions, index: number, array: MapWidgetLayerOptions[]) => number;
|
|
19
20
|
export declare const DEFAULT_HEATMAP_RADIUS = 25;
|
|
20
21
|
export declare const DEFAULT_RADIUS_INTENSITY_FACTOR = 10000;
|
|
21
22
|
export declare const DEFAULT_ZOOM_MIN = 3;
|
|
@@ -1,210 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { combineLatest, map } from 'rxjs';
|
|
3
|
-
import { ItemUtils } from '../../../dashboard/item-utils';
|
|
4
|
-
import { ResultsetUtils } from '../../../dashboard/resultset-utils';
|
|
5
|
-
import { DashboardSelectors } from '../../../dashboard/store/dashboard.selectors';
|
|
6
|
-
import { Operation } from '../../model/widget-aggregated-chart-manifest.interface';
|
|
7
|
-
import { ClassSelectors } from '../class/class.selectors';
|
|
8
|
-
import { PryAggregationService } from './base-aggregation.service';
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
import * as i1 from "@ngrx/store";
|
|
11
|
-
export class PryFrontendAggregationService extends PryAggregationService {
|
|
12
|
-
constructor(store) {
|
|
13
|
-
super();
|
|
14
|
-
this.store = store;
|
|
15
|
-
}
|
|
16
|
-
// @ts-ignore
|
|
17
|
-
aggregate(datasource, options) {
|
|
18
|
-
return combineLatest([
|
|
19
|
-
this.store.select(DashboardSelectors.resultSets),
|
|
20
|
-
this.store.select(ClassSelectors.classes)
|
|
21
|
-
]).pipe(map(([resultSets, classes]) => {
|
|
22
|
-
const abscissa = classes
|
|
23
|
-
.map((clazz) => clazz.attributes.find((attr) => attr.id === options.abscissa.attribute))
|
|
24
|
-
.find((attr) => !!attr)?.name;
|
|
25
|
-
const ordinate = classes
|
|
26
|
-
.map((clazz) => clazz.attributes.find((attr) => attr.id === options.ordinate.attribute))
|
|
27
|
-
.find((attr) => !!attr)?.name;
|
|
28
|
-
if (!abscissa || !ordinate) {
|
|
29
|
-
throw new Error('abscissaorodinateinvalid');
|
|
30
|
-
}
|
|
31
|
-
let data = datasource.map((rsName) => resultSets[rsName ?? '']).filter((rsName) => !!rsName);
|
|
32
|
-
const resultSet = data.reduce((rs1, rs2) => ResultsetUtils.mergeResultSets(rs1, rs2), {
|
|
33
|
-
items: {},
|
|
34
|
-
relations: [],
|
|
35
|
-
merged: data.length
|
|
36
|
-
});
|
|
37
|
-
let items = Object.keys(resultSet.items)
|
|
38
|
-
.map((classId) => resultSet.items[classId])
|
|
39
|
-
.reduce((prev, curr) => [...prev, ...curr], []);
|
|
40
|
-
if (!!options.groupBy) {
|
|
41
|
-
const groupBy = classes
|
|
42
|
-
.map((clazz) => clazz.attributes.find((attr) => attr.id === options.groupBy?.attribute))
|
|
43
|
-
.find((attr) => !!attr)?.name;
|
|
44
|
-
if (!groupBy) {
|
|
45
|
-
throw new Error('groupByAttributeisinvalid');
|
|
46
|
-
}
|
|
47
|
-
const itemsGrouped = this.groupBy(items, groupBy);
|
|
48
|
-
const values = [];
|
|
49
|
-
Object.keys(itemsGrouped).forEach((key) => {
|
|
50
|
-
values.push({
|
|
51
|
-
key,
|
|
52
|
-
groupBy: this.getValueFromOperation(itemsGrouped[key], options.ordinate.operation, abscissa, ordinate, options.abscissa.limit)
|
|
53
|
-
});
|
|
54
|
-
});
|
|
55
|
-
return { operation: options.ordinate.operation, values: values };
|
|
56
|
-
}
|
|
57
|
-
const values = this.getValueFromOperation(items, options.ordinate.operation, abscissa, ordinate, options.abscissa.limit);
|
|
58
|
-
return { operation: options.ordinate.operation, values: values };
|
|
59
|
-
}));
|
|
60
|
-
}
|
|
61
|
-
getValueFromOperation(items, operation, abscissa, ordinate, limit) {
|
|
62
|
-
let result = [];
|
|
63
|
-
const groupByAbscissa = this.groupBy(items, abscissa);
|
|
64
|
-
groupByAbscissa.map((test) => console.log(groupByAbscissa[test]));
|
|
65
|
-
switch (operation) {
|
|
66
|
-
case Operation.COUNT:
|
|
67
|
-
result.push(...Object.keys(groupByAbscissa).map((key) => ({
|
|
68
|
-
key: key,
|
|
69
|
-
value: groupByAbscissa[key].length
|
|
70
|
-
})));
|
|
71
|
-
break;
|
|
72
|
-
case Operation.SUM:
|
|
73
|
-
result.push(...Object.keys(groupByAbscissa).map((key) => ({
|
|
74
|
-
key: key,
|
|
75
|
-
value: this.getSum(groupByAbscissa[key], ordinate)
|
|
76
|
-
})));
|
|
77
|
-
break;
|
|
78
|
-
case Operation.DISTINCT:
|
|
79
|
-
result.push(...Object.keys(groupByAbscissa).map((key) => ({
|
|
80
|
-
key: key,
|
|
81
|
-
value: this.getDistinct(groupByAbscissa[key], ordinate)
|
|
82
|
-
})));
|
|
83
|
-
break;
|
|
84
|
-
case Operation.AVERAGE:
|
|
85
|
-
result.push(...Object.keys(groupByAbscissa).map((key) => ({
|
|
86
|
-
key: key,
|
|
87
|
-
value: this.getAverage(groupByAbscissa[key], ordinate)
|
|
88
|
-
})));
|
|
89
|
-
break;
|
|
90
|
-
case Operation.MEDIAN:
|
|
91
|
-
result.push(...Object.keys(groupByAbscissa).map((key) => ({
|
|
92
|
-
key: key,
|
|
93
|
-
value: this.getQuartile(groupByAbscissa[key], ordinate, 0.5)
|
|
94
|
-
})));
|
|
95
|
-
break;
|
|
96
|
-
case Operation.Q1:
|
|
97
|
-
result.push(...Object.keys(groupByAbscissa).map((key) => ({
|
|
98
|
-
key: key,
|
|
99
|
-
value: this.getQuartile(groupByAbscissa[key], ordinate, 0.25)
|
|
100
|
-
})));
|
|
101
|
-
break;
|
|
102
|
-
case Operation.Q3:
|
|
103
|
-
result.push(...Object.keys(groupByAbscissa).map((key) => ({
|
|
104
|
-
key: key,
|
|
105
|
-
value: this.getQuartile(groupByAbscissa[key], ordinate, 0.75)
|
|
106
|
-
})));
|
|
107
|
-
break;
|
|
108
|
-
case Operation.MIN:
|
|
109
|
-
result.push(...Object.keys(groupByAbscissa).map((key) => ({
|
|
110
|
-
key: key,
|
|
111
|
-
value: this.getMin(groupByAbscissa[key], ordinate)
|
|
112
|
-
})));
|
|
113
|
-
break;
|
|
114
|
-
default:
|
|
115
|
-
result.push(...Object.keys(groupByAbscissa).map((key) => ({
|
|
116
|
-
key: key,
|
|
117
|
-
value: this.getMax(groupByAbscissa[key], ordinate)
|
|
118
|
-
})));
|
|
119
|
-
break;
|
|
120
|
-
}
|
|
121
|
-
if (limit) {
|
|
122
|
-
result = this.formatByLimit(result, limit);
|
|
123
|
-
}
|
|
124
|
-
return result;
|
|
125
|
-
}
|
|
126
|
-
groupBy(items, attribute) {
|
|
127
|
-
let distincts = [];
|
|
128
|
-
items.forEach((item) => {
|
|
129
|
-
let value = this.getValueFromAttribute(item, attribute);
|
|
130
|
-
if (distincts[value.value]) {
|
|
131
|
-
distincts[value.value].push(item);
|
|
132
|
-
}
|
|
133
|
-
else {
|
|
134
|
-
distincts[value.value] = [item];
|
|
135
|
-
}
|
|
136
|
-
});
|
|
137
|
-
return distincts;
|
|
138
|
-
}
|
|
139
|
-
getValueFromAttribute(item, attribute) {
|
|
140
|
-
let value = ItemUtils.getAttributeValue(item, attribute);
|
|
141
|
-
return Array.isArray(value) ? value[0] : value;
|
|
142
|
-
}
|
|
143
|
-
getSum(items, attribute) {
|
|
144
|
-
let sum = 0;
|
|
145
|
-
items.forEach((item) => {
|
|
146
|
-
sum += this.getValueFromAttribute(item, attribute).value;
|
|
147
|
-
});
|
|
148
|
-
return sum;
|
|
149
|
-
}
|
|
150
|
-
getMin(items, attribute) {
|
|
151
|
-
const result = items.reduce((prev, curr) => {
|
|
152
|
-
const prevValue = this.getValueFromAttribute(prev, attribute).value;
|
|
153
|
-
const currValue = this.getValueFromAttribute(curr, attribute).value;
|
|
154
|
-
return prevValue < currValue ? prev : curr;
|
|
155
|
-
});
|
|
156
|
-
return this.getValueFromAttribute(result, attribute).value;
|
|
157
|
-
}
|
|
158
|
-
getMax(items, attribute) {
|
|
159
|
-
const result = items.reduce((prev, curr) => {
|
|
160
|
-
const prevValue = this.getValueFromAttribute(prev, attribute).value;
|
|
161
|
-
const currValue = this.getValueFromAttribute(curr, attribute).value;
|
|
162
|
-
return prevValue > currValue ? prev : curr;
|
|
163
|
-
});
|
|
164
|
-
return this.getValueFromAttribute(result, attribute).value;
|
|
165
|
-
}
|
|
166
|
-
getAverage(items, attribute) {
|
|
167
|
-
const allValues = items.map((item) => this.getValueFromAttribute(item, attribute).value);
|
|
168
|
-
return allValues.reduce((acc, val) => acc + val, 0) / allValues.length;
|
|
169
|
-
}
|
|
170
|
-
getDistinct(items, attribute) {
|
|
171
|
-
return [...new Set(items.map((item) => this.getValueFromAttribute(item, attribute).value))].length;
|
|
172
|
-
}
|
|
173
|
-
getQuartile(items, attribute, q) {
|
|
174
|
-
const allValues = items.map((item) => this.getValueFromAttribute(item, attribute).value);
|
|
175
|
-
const allValuesSorted = allValues.sort((a, b) => a - b);
|
|
176
|
-
let pos = (allValuesSorted.length - 1) * q;
|
|
177
|
-
if (pos % 1 === 0) {
|
|
178
|
-
return allValuesSorted[pos];
|
|
179
|
-
}
|
|
180
|
-
pos = Math.floor(pos);
|
|
181
|
-
if (allValuesSorted[pos + 1] !== undefined) {
|
|
182
|
-
return (allValuesSorted[pos] + allValuesSorted[pos + 1]) / 2;
|
|
183
|
-
}
|
|
184
|
-
return allValuesSorted[pos];
|
|
185
|
-
}
|
|
186
|
-
getPercentile(items, attribute, q) {
|
|
187
|
-
const allValues = items.map((item) => this.getValueFromAttribute(item, attribute).value);
|
|
188
|
-
const allValuesSorted = allValues.sort((a, b) => a - b);
|
|
189
|
-
return ((100 * allValuesSorted.reduce((acc, v) => acc + (v < q ? 1 : 0) + (v === q ? 0.5 : 0), 0)) /
|
|
190
|
-
allValuesSorted.length);
|
|
191
|
-
}
|
|
192
|
-
formatByLimit(data, limit) {
|
|
193
|
-
if (!limit.isTimeLimit) {
|
|
194
|
-
data
|
|
195
|
-
.sort((a, b) => (limit.order === 'asc' ? (a.value > b.value ? 1 : -1) : a.value < b.value ? 1 : -1))
|
|
196
|
-
.splice(limit.at);
|
|
197
|
-
return data;
|
|
198
|
-
}
|
|
199
|
-
return data;
|
|
200
|
-
}
|
|
201
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryFrontendAggregationService, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
202
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryFrontendAggregationService, providedIn: 'root' }); }
|
|
203
|
-
}
|
|
204
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryFrontendAggregationService, decorators: [{
|
|
205
|
-
type: Injectable,
|
|
206
|
-
args: [{
|
|
207
|
-
providedIn: 'root'
|
|
208
|
-
}]
|
|
209
|
-
}], ctorParameters: function () { return [{ type: i1.Store }]; } });
|
|
210
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbnRlbmQtYWdncmVnYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2xpYi9jb3JlL3N0b3JlL2FnZ3JlZ2F0aW9uL2Zyb250ZW5kLWFnZ3JlZ2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRWxGLE9BQU8sRUFHTCxTQUFTLEVBRVYsTUFBTSx3REFBd0QsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFxQixxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7QUFLdEYsTUFBTSxPQUFPLDZCQUE4QixTQUFRLHFCQUFxQjtJQUN0RSxZQUFvQixLQUFZO1FBQzlCLEtBQUssRUFBRSxDQUFDO1FBRFUsVUFBSyxHQUFMLEtBQUssQ0FBTztJQUVoQyxDQUFDO0lBRUQsYUFBYTtJQUNKLFNBQVMsQ0FBQyxVQUFvQixFQUFFLE9BQXFDO1FBQzVFLE9BQU8sYUFBYSxDQUFDO1lBQ25CLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQztZQUNoRCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDO1NBQzFDLENBQUMsQ0FBQyxJQUFJLENBQ0wsR0FBRyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRTtZQUM1QixNQUFNLFFBQVEsR0FBRyxPQUFPO2lCQUNyQixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQ3ZGLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQztZQUNoQyxNQUFNLFFBQVEsR0FBRyxPQUFPO2lCQUNyQixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQ3ZGLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQztZQUNoQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7YUFDN0M7WUFDRCxJQUFJLElBQUksR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0YsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUNwRixLQUFLLEVBQUUsRUFBRTtnQkFDVCxTQUFTLEVBQUUsRUFBRTtnQkFDYixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07YUFDcEIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxLQUFLLEdBQVcsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO2lCQUM3QyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQzFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQVcsQ0FBQztZQUM1RCxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFO2dCQUNyQixNQUFNLE9BQU8sR0FBRyxPQUFPO3FCQUNwQixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7cUJBQ3ZGLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQztnQkFDaEMsSUFBSSxDQUFDLE9BQU8sRUFBRTtvQkFDWixNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7aUJBQzlDO2dCQUNELE1BQU0sWUFBWSxHQUF1QyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDdEYsTUFBTSxNQUFNLEdBQXdDLEVBQUUsQ0FBQztnQkFDdkQsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDeEMsTUFBTSxDQUFDLElBQUksQ0FBQzt3QkFDVixHQUFHO3dCQUNILE9BQU8sRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQ2pDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFDakIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQzFCLFFBQVEsRUFDUixRQUFRLEVBQ1IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQ3ZCO3FCQUNGLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQXVCLENBQUM7YUFDdkY7WUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQ3ZDLEtBQUssRUFDTCxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFDMUIsUUFBUSxFQUNSLFFBQVEsRUFDUixPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FDdkIsQ0FBQztZQUNGLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBdUIsQ0FBQztRQUN4RixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELHFCQUFxQixDQUNuQixLQUFhLEVBQ2IsU0FBb0IsRUFDcEIsUUFBZ0IsRUFDaEIsUUFBZ0IsRUFDaEIsS0FBMkI7UUFFM0IsSUFBSSxNQUFNLEdBQTJDLEVBQUUsQ0FBQztRQUN4RCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN0RCxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkUsUUFBUSxTQUFTLEVBQUU7WUFDakIsS0FBSyxTQUFTLENBQUMsS0FBSztnQkFDbEIsTUFBTSxDQUFDLElBQUksQ0FDVCxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUM1QyxHQUFHLEVBQUUsR0FBRztvQkFDUixLQUFLLEVBQUUsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU07aUJBQ25DLENBQUMsQ0FBQyxDQUNKLENBQUM7Z0JBQ0YsTUFBTTtZQUNSLEtBQUssU0FBUyxDQUFDLEdBQUc7Z0JBQ2hCLE1BQU0sQ0FBQyxJQUFJLENBQ1QsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDNUMsR0FBRyxFQUFFLEdBQUc7b0JBQ1IsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsQ0FBQztpQkFDbkQsQ0FBQyxDQUFDLENBQ0osQ0FBQztnQkFDRixNQUFNO1lBQ1IsS0FBSyxTQUFTLENBQUMsUUFBUTtnQkFDckIsTUFBTSxDQUFDLElBQUksQ0FDVCxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUM1QyxHQUFHLEVBQUUsR0FBRztvQkFDUixLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxDQUFDO2lCQUN4RCxDQUFDLENBQUMsQ0FDSixDQUFDO2dCQUNGLE1BQU07WUFDUixLQUFLLFNBQVMsQ0FBQyxPQUFPO2dCQUNwQixNQUFNLENBQUMsSUFBSSxDQUNULEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQzVDLEdBQUcsRUFBRSxHQUFHO29CQUNSLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLENBQUM7aUJBQ3ZELENBQUMsQ0FBQyxDQUNKLENBQUM7Z0JBQ0YsTUFBTTtZQUNSLEtBQUssU0FBUyxDQUFDLE1BQU07Z0JBQ25CLE1BQU0sQ0FBQyxJQUFJLENBQ1QsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDNUMsR0FBRyxFQUFFLEdBQUc7b0JBQ1IsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUM7aUJBQzdELENBQUMsQ0FBQyxDQUNKLENBQUM7Z0JBQ0YsTUFBTTtZQUNSLEtBQUssU0FBUyxDQUFDLEVBQUU7Z0JBQ2YsTUFBTSxDQUFDLElBQUksQ0FDVCxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUM1QyxHQUFHLEVBQUUsR0FBRztvQkFDUixLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQztpQkFDOUQsQ0FBQyxDQUFDLENBQ0osQ0FBQztnQkFDRixNQUFNO1lBQ1IsS0FBSyxTQUFTLENBQUMsRUFBRTtnQkFDZixNQUFNLENBQUMsSUFBSSxDQUNULEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQzVDLEdBQUcsRUFBRSxHQUFHO29CQUNSLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDO2lCQUM5RCxDQUFDLENBQUMsQ0FDSixDQUFDO2dCQUNGLE1BQU07WUFDUixLQUFLLFNBQVMsQ0FBQyxHQUFHO2dCQUNoQixNQUFNLENBQUMsSUFBSSxDQUNULEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQzVDLEdBQUcsRUFBRSxHQUFHO29CQUNSLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLENBQUM7aUJBQ25ELENBQUMsQ0FBQyxDQUNKLENBQUM7Z0JBQ0YsTUFBTTtZQUNSO2dCQUNFLE1BQU0sQ0FBQyxJQUFJLENBQ1QsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDNUMsR0FBRyxFQUFFLEdBQUc7b0JBQ1IsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsQ0FBQztpQkFDbkQsQ0FBQyxDQUFDLENBQ0osQ0FBQztnQkFDRixNQUFNO1NBQ1Q7UUFDRCxJQUFJLEtBQUssRUFBRTtZQUNULE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztTQUM1QztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxPQUFPLENBQUMsS0FBYSxFQUFFLFNBQWlCO1FBQ3RDLElBQUksU0FBUyxHQUFRLEVBQUUsQ0FBQztRQUN4QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBVSxFQUFFLEVBQUU7WUFDM0IsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztZQUN4RCxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBd0IsQ0FBQyxFQUFFO2dCQUM3QyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDdEQ7aUJBQU07Z0JBQ0wsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUF3QixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNwRDtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELHFCQUFxQixDQUFDLElBQVUsRUFBRSxTQUFpQjtRQUNqRCxJQUFJLEtBQUssR0FBRyxTQUFTLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3pELE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDakQsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFhLEVBQUUsU0FBaUI7UUFDckMsSUFBSSxHQUFHLEdBQVcsQ0FBQyxDQUFDO1FBQ3BCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNyQixHQUFHLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxLQUFlLENBQUM7UUFDckUsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBYSxFQUFFLFNBQWlCO1FBQ3JDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFTLEVBQUUsSUFBUyxFQUFFLEVBQUU7WUFDbkQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDcEUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDcEUsT0FBTyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDN0QsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFhLEVBQUUsU0FBaUI7UUFDckMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQVMsRUFBRSxJQUFTLEVBQUUsRUFBRTtZQUNuRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUNwRSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUNwRSxPQUFPLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUM3RCxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQWEsRUFBRSxTQUFpQjtRQUN6QyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEtBQWUsQ0FBQyxDQUFDO1FBQ25HLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztJQUN6RSxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWEsRUFBRSxTQUFpQjtRQUMxQyxPQUFPLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDckcsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFhLEVBQUUsU0FBaUIsRUFBRSxDQUFTO1FBQ3JELE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsS0FBZSxDQUFDLENBQUM7UUFDbkcsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUV4RSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNDLElBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDakIsT0FBTyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDN0I7UUFFRCxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QixJQUFJLGVBQWUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFO1lBQzFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEdBQUcsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM5RDtRQUVELE9BQU8sZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBYSxFQUFFLFNBQWlCLEVBQUUsQ0FBUztRQUN2RCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEtBQWUsQ0FBQyxDQUFDO1FBQ25HLE1BQU0sZUFBZSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDeEUsT0FBTyxDQUNMLENBQUMsR0FBRyxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMxRixlQUFlLENBQUMsTUFBTSxDQUN2QixDQUFDO0lBQ0osQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUE0QyxFQUFFLEtBQTBCO1FBQ3BGLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFO1lBQ3RCLElBQUk7aUJBQ0QsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ25HLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDcEIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs4R0FsUFUsNkJBQTZCO2tIQUE3Qiw2QkFBNkIsY0FGNUIsTUFBTTs7MkZBRVAsNkJBQTZCO2tCQUh6QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgbWFwLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJdGVtVXRpbHMgfSBmcm9tICcuLi8uLi8uLi9kYXNoYm9hcmQvaXRlbS11dGlscyc7XG5pbXBvcnQgeyBSZXN1bHRzZXRVdGlscyB9IGZyb20gJy4uLy4uLy4uL2Rhc2hib2FyZC9yZXN1bHRzZXQtdXRpbHMnO1xuaW1wb3J0IHsgRGFzaGJvYXJkU2VsZWN0b3JzIH0gZnJvbSAnLi4vLi4vLi4vZGFzaGJvYXJkL3N0b3JlL2Rhc2hib2FyZC5zZWxlY3RvcnMnO1xuaW1wb3J0IHsgSXRlbSwgVmFsdWVUeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWwvaXRlbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgQXRMaW1pdCxcbiAgQ2hhcnRBZ2dyZWdhdGVkV2lkZ2V0T3B0aW9ucyxcbiAgT3BlcmF0aW9uLFxuICBUaW1lTGltaXRcbn0gZnJvbSAnLi4vLi4vbW9kZWwvd2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQtbWFuaWZlc3QuaW50ZXJmYWNlJztcbmltcG9ydCB7IENsYXNzU2VsZWN0b3JzIH0gZnJvbSAnLi4vY2xhc3MvY2xhc3Muc2VsZWN0b3JzJztcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uUmVzdWx0LCBQcnlBZ2dyZWdhdGlvblNlcnZpY2UgfSBmcm9tICcuL2Jhc2UtYWdncmVnYXRpb24uc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFByeUZyb250ZW5kQWdncmVnYXRpb25TZXJ2aWNlIGV4dGVuZHMgUHJ5QWdncmVnYXRpb25TZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzdG9yZTogU3RvcmUpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLy8gQHRzLWlnbm9yZVxuICBvdmVycmlkZSBhZ2dyZWdhdGUoZGF0YXNvdXJjZTogc3RyaW5nW10sIG9wdGlvbnM6IENoYXJ0QWdncmVnYXRlZFdpZGdldE9wdGlvbnMpOiBPYnNlcnZhYmxlPEFnZ3JlZ2F0aW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLnJlc3VsdFNldHMpLFxuICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoQ2xhc3NTZWxlY3RvcnMuY2xhc3NlcylcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbcmVzdWx0U2V0cywgY2xhc3Nlc10pID0+IHtcbiAgICAgICAgY29uc3QgYWJzY2lzc2EgPSBjbGFzc2VzXG4gICAgICAgICAgLm1hcCgoY2xhenopID0+IGNsYXp6LmF0dHJpYnV0ZXMuZmluZCgoYXR0cikgPT4gYXR0ci5pZCA9PT0gb3B0aW9ucy5hYnNjaXNzYS5hdHRyaWJ1dGUpKVxuICAgICAgICAgIC5maW5kKChhdHRyKSA9PiAhIWF0dHIpPy5uYW1lO1xuICAgICAgICBjb25zdCBvcmRpbmF0ZSA9IGNsYXNzZXNcbiAgICAgICAgICAubWFwKChjbGF6eikgPT4gY2xhenouYXR0cmlidXRlcy5maW5kKChhdHRyKSA9PiBhdHRyLmlkID09PSBvcHRpb25zLm9yZGluYXRlLmF0dHJpYnV0ZSkpXG4gICAgICAgICAgLmZpbmQoKGF0dHIpID0+ICEhYXR0cik/Lm5hbWU7XG4gICAgICAgIGlmICghYWJzY2lzc2EgfHwgIW9yZGluYXRlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdhYnNjaXNzYW9yb2RpbmF0ZWludmFsaWQnKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZGF0YSA9IGRhdGFzb3VyY2UubWFwKChyc05hbWUpID0+IHJlc3VsdFNldHNbcnNOYW1lID8/ICcnXSkuZmlsdGVyKChyc05hbWUpID0+ICEhcnNOYW1lKTtcbiAgICAgICAgY29uc3QgcmVzdWx0U2V0ID0gZGF0YS5yZWR1Y2UoKHJzMSwgcnMyKSA9PiBSZXN1bHRzZXRVdGlscy5tZXJnZVJlc3VsdFNldHMocnMxLCByczIpLCB7XG4gICAgICAgICAgaXRlbXM6IHt9LFxuICAgICAgICAgIHJlbGF0aW9uczogW10sXG4gICAgICAgICAgbWVyZ2VkOiBkYXRhLmxlbmd0aFxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IGl0ZW1zOiBJdGVtW10gPSBPYmplY3Qua2V5cyhyZXN1bHRTZXQuaXRlbXMpXG4gICAgICAgICAgLm1hcCgoY2xhc3NJZCkgPT4gcmVzdWx0U2V0Lml0ZW1zW2NsYXNzSWRdKVxuICAgICAgICAgIC5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IFsuLi5wcmV2LCAuLi5jdXJyXSwgW10pIGFzIEl0ZW1bXTtcbiAgICAgICAgaWYgKCEhb3B0aW9ucy5ncm91cEJ5KSB7XG4gICAgICAgICAgY29uc3QgZ3JvdXBCeSA9IGNsYXNzZXNcbiAgICAgICAgICAgIC5tYXAoKGNsYXp6KSA9PiBjbGF6ei5hdHRyaWJ1dGVzLmZpbmQoKGF0dHIpID0+IGF0dHIuaWQgPT09IG9wdGlvbnMuZ3JvdXBCeT8uYXR0cmlidXRlKSlcbiAgICAgICAgICAgIC5maW5kKChhdHRyKSA9PiAhIWF0dHIpPy5uYW1lO1xuICAgICAgICAgIGlmICghZ3JvdXBCeSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdncm91cEJ5QXR0cmlidXRlaXNpbnZhbGlkJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGl0ZW1zR3JvdXBlZDogeyBba2V5OiBzdHJpbmcgfCBudW1iZXJdOiBJdGVtW10gfSA9IHRoaXMuZ3JvdXBCeShpdGVtcywgZ3JvdXBCeSk7XG4gICAgICAgICAgY29uc3QgdmFsdWVzOiB7IGtleTogVmFsdWVUeXBlOyBncm91cEJ5OiB7fVtdIH1bXSA9IFtdO1xuICAgICAgICAgIE9iamVjdC5rZXlzKGl0ZW1zR3JvdXBlZCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICB2YWx1ZXMucHVzaCh7XG4gICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgZ3JvdXBCeTogdGhpcy5nZXRWYWx1ZUZyb21PcGVyYXRpb24oXG4gICAgICAgICAgICAgICAgaXRlbXNHcm91cGVkW2tleV0sXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5vcmRpbmF0ZS5vcGVyYXRpb24sXG4gICAgICAgICAgICAgICAgYWJzY2lzc2EsXG4gICAgICAgICAgICAgICAgb3JkaW5hdGUsXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5hYnNjaXNzYS5saW1pdFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4geyBvcGVyYXRpb246IG9wdGlvbnMub3JkaW5hdGUub3BlcmF0aW9uLCB2YWx1ZXM6IHZhbHVlcyB9IGFzIEFnZ3JlZ2F0aW9uUmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0VmFsdWVGcm9tT3BlcmF0aW9uKFxuICAgICAgICAgIGl0ZW1zLFxuICAgICAgICAgIG9wdGlvbnMub3JkaW5hdGUub3BlcmF0aW9uLFxuICAgICAgICAgIGFic2Npc3NhLFxuICAgICAgICAgIG9yZGluYXRlLFxuICAgICAgICAgIG9wdGlvbnMuYWJzY2lzc2EubGltaXRcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHsgb3BlcmF0aW9uOiBvcHRpb25zLm9yZGluYXRlLm9wZXJhdGlvbiwgdmFsdWVzOiB2YWx1ZXMgfSBhcyBBZ2dyZWdhdGlvblJlc3VsdDtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldFZhbHVlRnJvbU9wZXJhdGlvbihcbiAgICBpdGVtczogSXRlbVtdLFxuICAgIG9wZXJhdGlvbjogT3BlcmF0aW9uLFxuICAgIGFic2Npc3NhOiBzdHJpbmcsXG4gICAgb3JkaW5hdGU6IHN0cmluZyxcbiAgICBsaW1pdD86IEF0TGltaXQgfCBUaW1lTGltaXRcbiAgKSB7XG4gICAgbGV0IHJlc3VsdDogeyBrZXk6IFZhbHVlVHlwZTsgdmFsdWU6IFZhbHVlVHlwZSB9W10gPSBbXTtcbiAgICBjb25zdCBncm91cEJ5QWJzY2lzc2EgPSB0aGlzLmdyb3VwQnkoaXRlbXMsIGFic2Npc3NhKTtcbiAgICBncm91cEJ5QWJzY2lzc2EubWFwKCh0ZXN0OiBhbnkpID0+IGNvbnNvbGUubG9nKGdyb3VwQnlBYnNjaXNzYVt0ZXN0XSkpO1xuICAgIHN3aXRjaCAob3BlcmF0aW9uKSB7XG4gICAgICBjYXNlIE9wZXJhdGlvbi5DT1VOVDpcbiAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgLi4uT2JqZWN0LmtleXMoZ3JvdXBCeUFic2Npc3NhKS5tYXAoKGtleSkgPT4gKHtcbiAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgdmFsdWU6IGdyb3VwQnlBYnNjaXNzYVtrZXldLmxlbmd0aFxuICAgICAgICAgIH0pKVxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgT3BlcmF0aW9uLlNVTTpcbiAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgLi4uT2JqZWN0LmtleXMoZ3JvdXBCeUFic2Npc3NhKS5tYXAoKGtleSkgPT4gKHtcbiAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuZ2V0U3VtKGdyb3VwQnlBYnNjaXNzYVtrZXldLCBvcmRpbmF0ZSlcbiAgICAgICAgICB9KSlcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIE9wZXJhdGlvbi5ESVNUSU5DVDpcbiAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgLi4uT2JqZWN0LmtleXMoZ3JvdXBCeUFic2Npc3NhKS5tYXAoKGtleSkgPT4gKHtcbiAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuZ2V0RGlzdGluY3QoZ3JvdXBCeUFic2Npc3NhW2tleV0sIG9yZGluYXRlKVxuICAgICAgICAgIH0pKVxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgT3BlcmF0aW9uLkFWRVJBR0U6XG4gICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgIC4uLk9iamVjdC5rZXlzKGdyb3VwQnlBYnNjaXNzYSkubWFwKChrZXkpID0+ICh7XG4gICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmdldEF2ZXJhZ2UoZ3JvdXBCeUFic2Npc3NhW2tleV0sIG9yZGluYXRlKVxuICAgICAgICAgIH0pKVxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgT3BlcmF0aW9uLk1FRElBTjpcbiAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgLi4uT2JqZWN0LmtleXMoZ3JvdXBCeUFic2Npc3NhKS5tYXAoKGtleSkgPT4gKHtcbiAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuZ2V0UXVhcnRpbGUoZ3JvdXBCeUFic2Npc3NhW2tleV0sIG9yZGluYXRlLCAwLjUpXG4gICAgICAgICAgfSkpXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBPcGVyYXRpb24uUTE6XG4gICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgIC4uLk9iamVjdC5rZXlzKGdyb3VwQnlBYnNjaXNzYSkubWFwKChrZXkpID0+ICh7XG4gICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmdldFF1YXJ0aWxlKGdyb3VwQnlBYnNjaXNzYVtrZXldLCBvcmRpbmF0ZSwgMC4yNSlcbiAgICAgICAgICB9KSlcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIE9wZXJhdGlvbi5RMzpcbiAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgLi4uT2JqZWN0LmtleXMoZ3JvdXBCeUFic2Npc3NhKS5tYXAoKGtleSkgPT4gKHtcbiAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuZ2V0UXVhcnRpbGUoZ3JvdXBCeUFic2Npc3NhW2tleV0sIG9yZGluYXRlLCAwLjc1KVxuICAgICAgICAgIH0pKVxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgT3BlcmF0aW9uLk1JTjpcbiAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgLi4uT2JqZWN0LmtleXMoZ3JvdXBCeUFic2Npc3NhKS5tYXAoKGtleSkgPT4gKHtcbiAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuZ2V0TWluKGdyb3VwQnlBYnNjaXNzYVtrZXldLCBvcmRpbmF0ZSlcbiAgICAgICAgICB9KSlcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAuLi5PYmplY3Qua2V5cyhncm91cEJ5QWJzY2lzc2EpLm1hcCgoa2V5KSA9PiAoe1xuICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5nZXRNYXgoZ3JvdXBCeUFic2Npc3NhW2tleV0sIG9yZGluYXRlKVxuICAgICAgICAgIH0pKVxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKGxpbWl0KSB7XG4gICAgICByZXN1bHQgPSB0aGlzLmZvcm1hdEJ5TGltaXQocmVzdWx0LCBsaW1pdCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBncm91cEJ5KGl0ZW1zOiBJdGVtW10sIGF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgbGV0IGRpc3RpbmN0czogYW55ID0gW107XG4gICAgaXRlbXMuZm9yRWFjaCgoaXRlbTogSXRlbSkgPT4ge1xuICAgICAgbGV0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZUZyb21BdHRyaWJ1dGUoaXRlbSwgYXR0cmlidXRlKTtcbiAgICAgIGlmIChkaXN0aW5jdHNbdmFsdWUudmFsdWUgYXMgc3RyaW5nIHwgbnVtYmVyXSkge1xuICAgICAgICBkaXN0aW5jdHNbdmFsdWUudmFsdWUgYXMgc3RyaW5nIHwgbnVtYmVyXS5wdXNoKGl0ZW0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlzdGluY3RzW3ZhbHVlLnZhbHVlIGFzIHN0cmluZyB8IG51bWJlcl0gPSBbaXRlbV07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGRpc3RpbmN0cztcbiAgfVxuXG4gIGdldFZhbHVlRnJvbUF0dHJpYnV0ZShpdGVtOiBJdGVtLCBhdHRyaWJ1dGU6IHN0cmluZykge1xuICAgIGxldCB2YWx1ZSA9IEl0ZW1VdGlscy5nZXRBdHRyaWJ1dGVWYWx1ZShpdGVtLCBhdHRyaWJ1dGUpO1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlWzBdIDogdmFsdWU7XG4gIH1cblxuICBnZXRTdW0oaXRlbXM6IEl0ZW1bXSwgYXR0cmlidXRlOiBzdHJpbmcpIHtcbiAgICBsZXQgc3VtOiBudW1iZXIgPSAwO1xuICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIHN1bSArPSB0aGlzLmdldFZhbHVlRnJvbUF0dHJpYnV0ZShpdGVtLCBhdHRyaWJ1dGUpLnZhbHVlIGFzIG51bWJlcjtcbiAgICB9KTtcbiAgICByZXR1cm4gc3VtO1xuICB9XG5cbiAgZ2V0TWluKGl0ZW1zOiBJdGVtW10sIGF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gaXRlbXMucmVkdWNlKChwcmV2OiBhbnksIGN1cnI6IGFueSkgPT4ge1xuICAgICAgY29uc3QgcHJldlZhbHVlID0gdGhpcy5nZXRWYWx1ZUZyb21BdHRyaWJ1dGUocHJldiwgYXR0cmlidXRlKS52YWx1ZTtcbiAgICAgIGNvbnN0IGN1cnJWYWx1ZSA9IHRoaXMuZ2V0VmFsdWVGcm9tQXR0cmlidXRlKGN1cnIsIGF0dHJpYnV0ZSkudmFsdWU7XG4gICAgICByZXR1cm4gcHJldlZhbHVlIDwgY3VyclZhbHVlID8gcHJldiA6IGN1cnI7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWVGcm9tQXR0cmlidXRlKHJlc3VsdCwgYXR0cmlidXRlKS52YWx1ZTtcbiAgfVxuXG4gIGdldE1heChpdGVtczogSXRlbVtdLCBhdHRyaWJ1dGU6IHN0cmluZykge1xuICAgIGNvbnN0IHJlc3VsdCA9IGl0ZW1zLnJlZHVjZSgocHJldjogYW55LCBjdXJyOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHByZXZWYWx1ZSA9IHRoaXMuZ2V0VmFsdWVGcm9tQXR0cmlidXRlKHByZXYsIGF0dHJpYnV0ZSkudmFsdWU7XG4gICAgICBjb25zdCBjdXJyVmFsdWUgPSB0aGlzLmdldFZhbHVlRnJvbUF0dHJpYnV0ZShjdXJyLCBhdHRyaWJ1dGUpLnZhbHVlO1xuICAgICAgcmV0dXJuIHByZXZWYWx1ZSA+IGN1cnJWYWx1ZSA/IHByZXYgOiBjdXJyO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmdldFZhbHVlRnJvbUF0dHJpYnV0ZShyZXN1bHQsIGF0dHJpYnV0ZSkudmFsdWU7XG4gIH1cblxuICBnZXRBdmVyYWdlKGl0ZW1zOiBJdGVtW10sIGF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgY29uc3QgYWxsVmFsdWVzID0gaXRlbXMubWFwKChpdGVtKSA9PiB0aGlzLmdldFZhbHVlRnJvbUF0dHJpYnV0ZShpdGVtLCBhdHRyaWJ1dGUpLnZhbHVlIGFzIG51bWJlcik7XG4gICAgcmV0dXJuIGFsbFZhbHVlcy5yZWR1Y2UoKGFjYywgdmFsKSA9PiBhY2MgKyB2YWwsIDApIC8gYWxsVmFsdWVzLmxlbmd0aDtcbiAgfVxuXG4gIGdldERpc3RpbmN0KGl0ZW1zOiBJdGVtW10sIGF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIFsuLi5uZXcgU2V0KGl0ZW1zLm1hcCgoaXRlbSkgPT4gdGhpcy5nZXRWYWx1ZUZyb21BdHRyaWJ1dGUoaXRlbSwgYXR0cmlidXRlKS52YWx1ZSkpXS5sZW5ndGg7XG4gIH1cblxuICBnZXRRdWFydGlsZShpdGVtczogSXRlbVtdLCBhdHRyaWJ1dGU6IHN0cmluZywgcTogbnVtYmVyKSB7XG4gICAgY29uc3QgYWxsVmFsdWVzID0gaXRlbXMubWFwKChpdGVtKSA9PiB0aGlzLmdldFZhbHVlRnJvbUF0dHJpYnV0ZShpdGVtLCBhdHRyaWJ1dGUpLnZhbHVlIGFzIG51bWJlcik7XG4gICAgY29uc3QgYWxsVmFsdWVzU29ydGVkID0gYWxsVmFsdWVzLnNvcnQoKGE6IG51bWJlciwgYjogbnVtYmVyKSA9PiBhIC0gYik7XG5cbiAgICBsZXQgcG9zID0gKGFsbFZhbHVlc1NvcnRlZC5sZW5ndGggLSAxKSAqIHE7XG4gICAgaWYgKHBvcyAlIDEgPT09IDApIHtcbiAgICAgIHJldHVybiBhbGxWYWx1ZXNTb3J0ZWRbcG9zXTtcbiAgICB9XG5cbiAgICBwb3MgPSBNYXRoLmZsb29yKHBvcyk7XG4gICAgaWYgKGFsbFZhbHVlc1NvcnRlZFtwb3MgKyAxXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gKGFsbFZhbHVlc1NvcnRlZFtwb3NdICsgYWxsVmFsdWVzU29ydGVkW3BvcyArIDFdKSAvIDI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFsbFZhbHVlc1NvcnRlZFtwb3NdO1xuICB9XG5cbiAgZ2V0UGVyY2VudGlsZShpdGVtczogSXRlbVtdLCBhdHRyaWJ1dGU6IHN0cmluZywgcTogbnVtYmVyKSB7XG4gICAgY29uc3QgYWxsVmFsdWVzID0gaXRlbXMubWFwKChpdGVtKSA9PiB0aGlzLmdldFZhbHVlRnJvbUF0dHJpYnV0ZShpdGVtLCBhdHRyaWJ1dGUpLnZhbHVlIGFzIG51bWJlcik7XG4gICAgY29uc3QgYWxsVmFsdWVzU29ydGVkID0gYWxsVmFsdWVzLnNvcnQoKGE6IG51bWJlciwgYjogbnVtYmVyKSA9PiBhIC0gYik7XG4gICAgcmV0dXJuIChcbiAgICAgICgxMDAgKiBhbGxWYWx1ZXNTb3J0ZWQucmVkdWNlKChhY2MsIHYpID0+IGFjYyArICh2IDwgcSA/IDEgOiAwKSArICh2ID09PSBxID8gMC41IDogMCksIDApKSAvXG4gICAgICBhbGxWYWx1ZXNTb3J0ZWQubGVuZ3RoXG4gICAgKTtcbiAgfVxuXG4gIGZvcm1hdEJ5TGltaXQoZGF0YTogeyBrZXk6IFZhbHVlVHlwZTsgdmFsdWU6IFZhbHVlVHlwZSB9W10sIGxpbWl0OiBBdExpbWl0IHwgVGltZUxpbWl0KSB7XG4gICAgaWYgKCFsaW1pdC5pc1RpbWVMaW1pdCkge1xuICAgICAgZGF0YVxuICAgICAgICAuc29ydCgoYSwgYikgPT4gKGxpbWl0Lm9yZGVyID09PSAnYXNjJyA/IChhLnZhbHVlID4gYi52YWx1ZSA/IDEgOiAtMSkgOiBhLnZhbHVlIDwgYi52YWx1ZSA/IDEgOiAtMSkpXG4gICAgICAgIC5zcGxpY2UobGltaXQuYXQpO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG59XG4iXX0=
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { Store } from '@ngrx/store';
|
|
2
|
-
import { Observable } from 'rxjs';
|
|
3
|
-
import { Item, ValueType } from '../../model/item.interface';
|
|
4
|
-
import { AtLimit, ChartAggregatedWidgetOptions, Operation, TimeLimit } from '../../model/widget-aggregated-chart-manifest.interface';
|
|
5
|
-
import { AggregationResult, PryAggregationService } from './base-aggregation.service';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
export declare class PryFrontendAggregationService extends PryAggregationService {
|
|
8
|
-
private store;
|
|
9
|
-
constructor(store: Store);
|
|
10
|
-
aggregate(datasource: string[], options: ChartAggregatedWidgetOptions): Observable<AggregationResult>;
|
|
11
|
-
getValueFromOperation(items: Item[], operation: Operation, abscissa: string, ordinate: string, limit?: AtLimit | TimeLimit): {
|
|
12
|
-
key: ValueType;
|
|
13
|
-
value: ValueType;
|
|
14
|
-
}[];
|
|
15
|
-
groupBy(items: Item[], attribute: string): any;
|
|
16
|
-
getValueFromAttribute(item: Item, attribute: string): import("../../model/item.interface").AttributeSimpleValue;
|
|
17
|
-
getSum(items: Item[], attribute: string): number;
|
|
18
|
-
getMin(items: Item[], attribute: string): ValueType;
|
|
19
|
-
getMax(items: Item[], attribute: string): ValueType;
|
|
20
|
-
getAverage(items: Item[], attribute: string): number;
|
|
21
|
-
getDistinct(items: Item[], attribute: string): number;
|
|
22
|
-
getQuartile(items: Item[], attribute: string, q: number): number;
|
|
23
|
-
getPercentile(items: Item[], attribute: string, q: number): number;
|
|
24
|
-
formatByLimit(data: {
|
|
25
|
-
key: ValueType;
|
|
26
|
-
value: ValueType;
|
|
27
|
-
}[], limit: AtLimit | TimeLimit): {
|
|
28
|
-
key: ValueType;
|
|
29
|
-
value: ValueType;
|
|
30
|
-
}[];
|
|
31
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<PryFrontendAggregationService, never>;
|
|
32
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<PryFrontendAggregationService>;
|
|
33
|
-
}
|