@iotize/ionic
Version:
Iotize specific building blocks on top of @ionic/angular.
154 lines • 22 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { ChangeDetectorRef, Component, ElementRef, Inject, Input, NgZone, PLATFORM_ID, ViewChild, } from '@angular/core';
import { HeatMapComponent, LegendPosition } from '@swimlane/ngx-charts';
import { MonitoringAppGenComponent } from '../../metadata/decorators';
import { ChartDataModel, } from '../ChartDataModel';
import { dataWithSeriesToCsv } from '../ExportDataFormat';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
import * as i2 from "@swimlane/ngx-charts";
import * as i3 from "../../ui-directive/export-data.directive";
import * as i4 from "@ionic/angular";
let TapVariableHeatMapChartComponent = class TapVariableHeatMapChartComponent extends HeatMapComponent {
heatChart;
colorScheme = {
domain: [
'#e0f7fa',
'#b2ebf2',
'#80deea',
'#4dd0e1',
'#26c6da',
'#00bcd4',
'#00acc1',
'#0097a7',
'#00838f',
'#006064',
],
};
showExportButton = false;
exportedFileName;
yAxis = true;
showYAxisLabel = true;
xAxis = true;
showXAxisLabel = false;
legend = true;
legendPosition = LegendPosition.Below;
valueCountLimit = 15;
history = false;
set label(indexOrArray) {
this.chartModel.initLabel(indexOrArray);
}
xAxisTickFormatting = this.defaultDateTickFormatting.bind(this);
isArray;
chartHeight = 100;
maxValue = 1;
set variable(variableOrArray) {
this.inputStream = this.chartModel.initVariable(variableOrArray);
}
set inputStream(inputs) {
this.subscription = this.chartModel
.defineInputStreamMulti(inputs, this.history, this.valueCountLimit)
.subscribe((result) => {
result.map((e) => {
e.series.map((v) => {
if (typeof v.value === 'number' && v.value > this.maxValue) {
this.maxValue = v.value;
}
});
});
this.heatChart.max = this.maxValue;
this.chartHeight = result[0].series.length * 50;
if (this.chartHeight <= 100) {
this.chartHeight = 100;
}
this.results = result;
});
}
results = [
{
name: '---',
series: [
{
name: '---',
value: 0,
extra: 0,
},
],
},
];
chartModel = new ChartDataModel();
subscription;
constructor(myChartElement, zone, platformId, cd) {
super(myChartElement, zone, cd, platformId);
}
createExportedData() {
return dataWithSeriesToCsv(this.results);
}
ngAfterContentChecked() {
this.cd.detectChanges();
}
defaultDateTickFormatting(val) {
if (val instanceof Date) {
return val.toLocaleTimeString();
}
return val;
}
ngOnDestroy() {
this.subscription?.unsubscribe();
this.chartModel.destroyCurrentSub();
}
onSelect(event) {
/* Not implemented
this.chartModel.showDetail(event, this.modalController, TapVariableDataPopupComponent);
*/
}
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TapVariableHeatMapChartComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: PLATFORM_ID }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
/** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: TapVariableHeatMapChartComponent, selector: "tap-variable-heat-map-chart", inputs: { colorScheme: "colorScheme", showExportButton: "showExportButton", exportedFileName: "exportedFileName", yAxis: "yAxis", showYAxisLabel: "showYAxisLabel", xAxis: "xAxis", showXAxisLabel: "showXAxisLabel", legend: "legend", legendPosition: "legendPosition", valueCountLimit: "valueCountLimit", history: "history", label: "label", xAxisTickFormatting: "xAxisTickFormatting", variable: "variable", inputStream: "inputStream" }, viewQueries: [{ propertyName: "heatChart", first: true, predicate: HeatMapComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div\n style=\"position: relative\"\n #containerRef\n [style.height.px]=\"chartHeight\"\n [ngClass]=\"legendPosition === 'below' ? 'belowLegend' : 'rightLegend'\"\n>\n <ngx-charts-heat-map\n [view]=\"[containerRef.offsetWidth, containerRef.offsetHeight]\"\n [scheme]=\"colorScheme\"\n [animations]=\"false\"\n [legend]=\"legend\"\n [legendPosition]=\"legendPosition\"\n [xAxis]=\"xAxis\"\n [yAxis]=\"yAxis\"\n [showXAxisLabel]=\"false\"\n [showYAxisLabel]=\"false\"\n [innerPadding]=\"[1.5, 1, 1, 1]\"\n [results]=\"results\"\n [xAxisTickFormatting]=\"xAxisTickFormatting\"\n (select)=\"onSelect($event)\"\n >\n </ngx-charts-heat-map>\n <ion-fab-button\n id=\"exportFabButton\"\n size=\"small\"\n tapExportData\n [dataToExport]=\"createExportedData.bind(this)\"\n [exportedFileName]=\"exportedFileName\"\n *ngIf=\"showExportButton\"\n >\n <ion-icon name=\"download\"></ion-icon>\n </ion-fab-button>\n</div>\n", styles: ["::ng-deep .scale-legend{padding:20px!important}::ng-deep .horizontal-legend{overflow:auto!important}.belowLegend{width:100%;margin-bottom:100px}.rightLegend{width:100%}#exportFabButton{position:absolute;top:10px;right:10px}@media (prefers-color-scheme: dark){::ng-deep span.legend-label-text{color:#ccc!important}::ng-deep span.legend-label-text:hover{color:#fff!important}::ng-deep .ngx-charts text{fill:#fff!important}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.HeatMapComponent, selector: "ngx-charts-heat-map", inputs: ["legend", "legendTitle", "legendPosition", "xAxis", "yAxis", "showXAxisLabel", "showYAxisLabel", "xAxisLabel", "yAxisLabel", "gradient", "innerPadding", "trimXAxisTicks", "trimYAxisTicks", "rotateXAxisTicks", "maxXAxisTickLength", "maxYAxisTickLength", "xAxisTickFormatting", "yAxisTickFormatting", "xAxisTicks", "yAxisTicks", "tooltipDisabled", "tooltipText", "min", "max", "activeEntries", "wrapTicks"], outputs: ["activate", "deactivate"] }, { kind: "directive", type: i3.ExportDataDirective, selector: "[tapExportData]", inputs: ["exportedFileName", "dataToExport", "format"], outputs: ["exportDataError"] }, { kind: "component", type: i4.IonFabButton, selector: "ion-fab-button", inputs: ["activated", "closeIcon", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "show", "size", "target", "translucent", "type"] }, { kind: "component", type: i4.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] });
};
TapVariableHeatMapChartComponent = __decorate([
MonitoringAppGenComponent({}),
__metadata("design:paramtypes", [ElementRef,
NgZone, String, ChangeDetectorRef])
], TapVariableHeatMapChartComponent);
export { TapVariableHeatMapChartComponent };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TapVariableHeatMapChartComponent, decorators: [{
type: Component,
args: [{ selector: 'tap-variable-heat-map-chart', template: "<div\n style=\"position: relative\"\n #containerRef\n [style.height.px]=\"chartHeight\"\n [ngClass]=\"legendPosition === 'below' ? 'belowLegend' : 'rightLegend'\"\n>\n <ngx-charts-heat-map\n [view]=\"[containerRef.offsetWidth, containerRef.offsetHeight]\"\n [scheme]=\"colorScheme\"\n [animations]=\"false\"\n [legend]=\"legend\"\n [legendPosition]=\"legendPosition\"\n [xAxis]=\"xAxis\"\n [yAxis]=\"yAxis\"\n [showXAxisLabel]=\"false\"\n [showYAxisLabel]=\"false\"\n [innerPadding]=\"[1.5, 1, 1, 1]\"\n [results]=\"results\"\n [xAxisTickFormatting]=\"xAxisTickFormatting\"\n (select)=\"onSelect($event)\"\n >\n </ngx-charts-heat-map>\n <ion-fab-button\n id=\"exportFabButton\"\n size=\"small\"\n tapExportData\n [dataToExport]=\"createExportedData.bind(this)\"\n [exportedFileName]=\"exportedFileName\"\n *ngIf=\"showExportButton\"\n >\n <ion-icon name=\"download\"></ion-icon>\n </ion-fab-button>\n</div>\n", styles: ["::ng-deep .scale-legend{padding:20px!important}::ng-deep .horizontal-legend{overflow:auto!important}.belowLegend{width:100%;margin-bottom:100px}.rightLegend{width:100%}#exportFabButton{position:absolute;top:10px;right:10px}@media (prefers-color-scheme: dark){::ng-deep span.legend-label-text{color:#ccc!important}::ng-deep span.legend-label-text:hover{color:#fff!important}::ng-deep .ngx-charts text{fill:#fff!important}}\n"] }]
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: undefined, decorators: [{
type: Inject,
args: [PLATFORM_ID]
}] }, { type: i0.ChangeDetectorRef }], propDecorators: { heatChart: [{
type: ViewChild,
args: [HeatMapComponent]
}], colorScheme: [{
type: Input
}], showExportButton: [{
type: Input
}], exportedFileName: [{
type: Input
}], yAxis: [{
type: Input
}], showYAxisLabel: [{
type: Input
}], xAxis: [{
type: Input
}], showXAxisLabel: [{
type: Input
}], legend: [{
type: Input
}], legendPosition: [{
type: Input
}], valueCountLimit: [{
type: Input
}], history: [{
type: Input
}], label: [{
type: Input
}], xAxisTickFormatting: [{
type: Input
}], variable: [{
type: Input
}], inputStream: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwLXZhcmlhYmxlLWhlYXQtbWFwLWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lvdGl6ZS1pb25pYy9tb25pdG9yaW5nL3NyYy9saWIvdWktY29tcG9uZW50cy90YXAtdmFyaWFibGUtaGVhdC1tYXAtY2hhcnQvdGFwLXZhcmlhYmxlLWhlYXQtbWFwLWNoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lvdGl6ZS1pb25pYy9tb25pdG9yaW5nL3NyYy9saWIvdWktY29tcG9uZW50cy90YXAtdmFyaWFibGUtaGVhdC1tYXAtY2hhcnQvdGFwLXZhcmlhYmxlLWhlYXQtbWFwLWNoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBRU4sV0FBVyxFQUNYLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFeEUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEUsT0FBTyxFQUNMLGNBQWMsR0FHZixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7QUFTbkQsSUFBTSxnQ0FBZ0MsR0FBdEMsTUFBTSxnQ0FDWCxTQUFRLGdCQUFnQjtJQUdLLFNBQVMsQ0FBb0I7SUFHMUQsV0FBVyxHQUFHO1FBQ1osTUFBTSxFQUFFO1lBQ04sU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFDVCxTQUFTO1lBQ1QsU0FBUztZQUNULFNBQVM7WUFD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LFFBQVE7c0JBRFgsS0FBSztnQkFXRixXQUFXO3NCQURkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRDaGVja2VkLFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgUExBVEZPUk1fSUQsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdFZhcmlhYmxlIH0gZnJvbSAnQGlvdGl6ZS90YXAvZGF0YSc7XG5pbXBvcnQgeyBIZWF0TWFwQ29tcG9uZW50LCBMZWdlbmRQb3NpdGlvbiB9IGZyb20gJ0Bzd2ltbGFuZS9uZ3gtY2hhcnRzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTW9uaXRvcmluZ0FwcEdlbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL21ldGFkYXRhL2RlY29yYXRvcnMnO1xuaW1wb3J0IHtcbiAgQ2hhcnREYXRhTW9kZWwsXG4gIENoYXJ0SW5wdXRNdXRsaSxcbiAgQ2hhcnRJbnB1dFN0cmVhbVZhcixcbn0gZnJvbSAnLi4vQ2hhcnREYXRhTW9kZWwnO1xuaW1wb3J0IHsgZGF0YVdpdGhTZXJpZXNUb0NzdiB9IGZyb20gJy4uL0V4cG9ydERhdGFGb3JtYXQnO1xuaW1wb3J0IHsgT25DaGFydFNlbGVjdEV2ZW50IH0gZnJvbSAnLi4vc2hhcmVkLXR5cGVzJztcblxuQE1vbml0b3JpbmdBcHBHZW5Db21wb25lbnQoe30pXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0YXAtdmFyaWFibGUtaGVhdC1tYXAtY2hhcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFwLXZhcmlhYmxlLWhlYXQtbWFwLWNoYXJ0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFwLXZhcmlhYmxlLWhlYXQtbWFwLWNoYXJ0LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFRhcFZhcmlhYmxlSGVhdE1hcENoYXJ0Q29tcG9uZW50XG4gIGV4dGVuZHMgSGVhdE1hcENvbXBvbmVudFxuICBpbXBsZW1lbnRzIEFmdGVyQ29udGVudENoZWNrZWQsIE9uRGVzdHJveVxue1xuICBAVmlld0NoaWxkKEhlYXRNYXBDb21wb25lbnQpIGhlYXRDaGFydCE6IEhlYXRNYXBDb21wb25lbnQ7XG5cbiAgQElucHV0KClcbiAgY29sb3JTY2hlbWUgPSB7XG4gICAgZG9tYWluOiBbXG4gICAgICAnI2UwZjdmYScsXG4gICAgICAnI2IyZWJmMicsXG4gICAgICAnIzgwZGVlYScsXG4gICAgICAnIzRkZDBlMScsXG4gICAgICAnIzI2YzZkYScsXG4gICAgICAnIzAwYmNkNCcsXG4gICAgICAnIzAwYWNjMScsXG4gICAgICAnIzAwOTdhNycsXG4gICAgICAnIzAwODM4ZicsXG4gICAgICAnIzAwNjA2NCcsXG4gICAgXSxcbiAgfTtcblxuICBASW5wdXQoKVxuICBzaG93RXhwb3J0QnV0dG9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgZXhwb3J0ZWRGaWxlTmFtZT86IHN0cmluZztcblxuICBASW5wdXQoKVxuICB5QXhpczogYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgc2hvd1lBeGlzTGFiZWwgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHhBeGlzOiBib29sZWFuID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBzaG93WEF4aXNMYWJlbCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGxlZ2VuZCA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgbGVnZW5kUG9zaXRpb246IExlZ2VuZFBvc2l0aW9uID0gTGVnZW5kUG9zaXRpb24uQmVsb3c7XG5cbiAgQElucHV0KClcbiAgdmFsdWVDb3VudExpbWl0ID0gMTU7XG5cbiAgQElucHV0KClcbiAgaGlzdG9yeTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBsYWJlbChpbmRleE9yQXJyYXk6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHwgRnVuY3Rpb24pIHtcbiAgICB0aGlzLmNoYXJ0TW9kZWwuaW5pdExhYmVsKGluZGV4T3JBcnJheSk7XG4gIH1cblxuICBASW5wdXQoKSB4QXhpc1RpY2tGb3JtYXR0aW5nOiAoaW5wdXQ6IGFueSkgPT4gc3RyaW5nID1cbiAgICB0aGlzLmRlZmF1bHREYXRlVGlja0Zvcm1hdHRpbmcuYmluZCh0aGlzKTtcblxuICBpc0FycmF5PzogYm9vbGVhbjtcbiAgY2hhcnRIZWlnaHQgPSAxMDA7XG4gIG1heFZhbHVlID0gMTtcblxuICBASW5wdXQoKVxuICBzZXQgdmFyaWFibGUoXG4gICAgdmFyaWFibGVPckFycmF5OlxuICAgICAgfCBBYnN0cmFjdFZhcmlhYmxlPG51bWJlciB8IG51bWJlcltdPlxuICAgICAgfCBBYnN0cmFjdFZhcmlhYmxlPG51bWJlciB8IG51bWJlcltdPltdXG4gICAgICB8IHVuZGVmaW5lZFxuICApIHtcbiAgICB0aGlzLmlucHV0U3RyZWFtID0gdGhpcy5jaGFydE1vZGVsLmluaXRWYXJpYWJsZSh2YXJpYWJsZU9yQXJyYXkpO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IGlucHV0U3RyZWFtKGlucHV0czogQ2hhcnRJbnB1dFN0cmVhbVZhcltdKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNoYXJ0TW9kZWxcbiAgICAgIC5kZWZpbmVJbnB1dFN0cmVhbU11bHRpKGlucHV0cywgdGhpcy5oaXN0b3J5LCB0aGlzLnZhbHVlQ291bnRMaW1pdClcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICByZXN1bHQubWFwKChlKSA9PiB7XG4gICAgICAgICAgZS5zZXJpZXMubWFwKCh2KSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHYudmFsdWUgPT09ICdudW1iZXInICYmIHYudmFsdWUgPiB0aGlzLm1heFZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMubWF4VmFsdWUgPSB2LnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5oZWF0Q2hhcnQubWF4ID0gdGhpcy5tYXhWYWx1ZTtcbiAgICAgICAgdGhpcy5jaGFydEhlaWdodCA9IHJlc3VsdFswXS5zZXJpZXMubGVuZ3RoICogNTA7XG4gICAgICAgIGlmICh0aGlzLmNoYXJ0SGVpZ2h0IDw9IDEwMCkge1xuICAgICAgICAgIHRoaXMuY2hhcnRIZWlnaHQgPSAxMDA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZXN1bHRzID0gcmVzdWx0O1xuICAgICAgfSk7XG4gIH1cblxuICByZXN1bHRzOiBDaGFydElucHV0TXV0bGlbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnLS0tJyxcbiAgICAgIHNlcmllczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJy0tLScsXG4gICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgZXh0cmE6IDAsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIF07XG5cbiAgcHJpdmF0ZSBjaGFydE1vZGVsID0gbmV3IENoYXJ0RGF0YU1vZGVsKCk7XG5cbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgbXlDaGFydEVsZW1lbnQ6IEVsZW1lbnRSZWY8YW55PixcbiAgICB6b25lOiBOZ1pvbmUsXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcGxhdGZvcm1JZDogc3RyaW5nLFxuICAgIGNkOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICBzdXBlcihteUNoYXJ0RWxlbWVudCwgem9uZSwgY2QsIHBsYXRmb3JtSWQpO1xuICB9XG5cbiAgY3JlYXRlRXhwb3J0ZWREYXRhKCkge1xuICAgIHJldHVybiBkYXRhV2l0aFNlcmllc1RvQ3N2KHRoaXMucmVzdWx0cyk7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKSB7XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBkZWZhdWx0RGF0ZVRpY2tGb3JtYXR0aW5nKHZhbDogYW55KTogc3RyaW5nIHtcbiAgICBpZiAodmFsIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgcmV0dXJuIHZhbC50b0xvY2FsZVRpbWVTdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2hhcnRNb2RlbC5kZXN0cm95Q3VycmVudFN1YigpO1xuICB9XG5cbiAgb25TZWxlY3QoZXZlbnQ6IE9uQ2hhcnRTZWxlY3RFdmVudCkge1xuICAgIC8qIE5vdCBpbXBsZW1lbnRlZFxuICAgIHRoaXMuY2hhcnRNb2RlbC5zaG93RGV0YWlsKGV2ZW50LCB0aGlzLm1vZGFsQ29udHJvbGxlciwgVGFwVmFyaWFibGVEYXRhUG9wdXBDb21wb25lbnQpO1xuICAgICovXG4gIH1cbn1cbiIsIjxkaXZcbiAgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmVcIlxuICAjY29udGFpbmVyUmVmXG4gIFtzdHlsZS5oZWlnaHQucHhdPVwiY2hhcnRIZWlnaHRcIlxuICBbbmdDbGFzc109XCJsZWdlbmRQb3NpdGlvbiA9PT0gJ2JlbG93JyA/ICdiZWxvd0xlZ2VuZCcgOiAncmlnaHRMZWdlbmQnXCJcbj5cbiAgPG5neC1jaGFydHMtaGVhdC1tYXBcbiAgICBbdmlld109XCJbY29udGFpbmVyUmVmLm9mZnNldFdpZHRoLCBjb250YWluZXJSZWYub2Zmc2V0SGVpZ2h0XVwiXG4gICAgW3NjaGVtZV09XCJjb2xvclNjaGVtZVwiXG4gICAgW2FuaW1hdGlvbnNdPVwiZmFsc2VcIlxuICAgIFtsZWdlbmRdPVwibGVnZW5kXCJcbiAgICBbbGVnZW5kUG9zaXRpb25dPVwibGVnZW5kUG9zaXRpb25cIlxuICAgIFt4QXhpc109XCJ4QXhpc1wiXG4gICAgW3lBeGlzXT1cInlBeGlzXCJcbiAgICBbc2hvd1hBeGlzTGFiZWxdPVwiZmFsc2VcIlxuICAgIFtzaG93WUF4aXNMYWJlbF09XCJmYWxzZVwiXG4gICAgW2lubmVyUGFkZGluZ109XCJbMS41LCAxLCAxLCAxXVwiXG4gICAgW3Jlc3VsdHNdPVwicmVzdWx0c1wiXG4gICAgW3hBeGlzVGlja0Zvcm1hdHRpbmddPVwieEF4aXNUaWNrRm9ybWF0dGluZ1wiXG4gICAgKHNlbGVjdCk9XCJvblNlbGVjdCgkZXZlbnQpXCJcbiAgPlxuICA8L25neC1jaGFydHMtaGVhdC1tYXA+XG4gIDxpb24tZmFiLWJ1dHRvblxuICAgIGlkPVwiZXhwb3J0RmFiQnV0dG9uXCJcbiAgICBzaXplPVwic21hbGxcIlxuICAgIHRhcEV4cG9ydERhdGFcbiAgICBbZGF0YVRvRXhwb3J0XT1cImNyZWF0ZUV4cG9ydGVkRGF0YS5iaW5kKHRoaXMpXCJcbiAgICBbZXhwb3J0ZWRGaWxlTmFtZV09XCJleHBvcnRlZEZpbGVOYW1lXCJcbiAgICAqbmdJZj1cInNob3dFeHBvcnRCdXR0b25cIlxuICA+XG4gICAgPGlvbi1pY29uIG5hbWU9XCJkb3dubG9hZFwiPjwvaW9uLWljb24+XG4gIDwvaW9uLWZhYi1idXR0b24+XG48L2Rpdj5cbiJdfQ==