@iotize/ionic
Version:
Iotize specific building blocks on top of @ionic/angular.
172 lines • 20.1 kB
JavaScript
import { DecimalPipe } from '@angular/common';
import { Component, Input, ViewChild, } from '@angular/core';
import { InlineEditorComponent, TapValueEditorContainerComponent, } from '@iotize/ionic';
import { AbstractVariable } from '@iotize/tap/data';
import { map, shareReplay } from 'rxjs/operators';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
import * as i2 from "@iotize/ionic";
export class MonitoringVariableValueComponent {
decimalPipe;
ctx;
lines;
unitValue;
set error(err) {
this.fieldError = err;
}
set variable(v) {
this._variable = v;
}
/**
* @deprecated
*/
set config(config) {
if (!this.inputOptions) {
switch (config.type) {
case 'FLOAT32':
this.inputOptions = {
type: 'number',
};
break;
case 'STRING':
this.inputOptions = {
type: 'text',
maxLength: config.length,
};
break;
case 'UINT32':
this.inputOptions = {
type: 'number',
min: 0,
max: 0xffffffff,
};
break;
case 'UINT16':
this.inputOptions = {
type: 'number',
min: 0,
max: 0xffff,
};
break;
case 'UINT8':
this.inputOptions = {
type: 'number',
min: 0,
max: 0xff,
};
break;
case 'INT32':
this.inputOptions = {
type: 'number',
min: -2147483648,
max: 2147483647,
};
break;
case 'INT16':
this.inputOptions = {
type: 'number',
min: -32768,
max: 32767,
};
break;
case 'INT8':
this.inputOptions = {
type: 'number',
min: -128,
max: 127,
};
break;
}
}
}
inputOptions = {
type: 'text',
};
editable = false;
modalEdition = false;
valueStyle;
/**
* See digitsInfo doc on @{link https://angular.io/api/common/DecimalPipe#parameters}
* Will be used only if value is a number
*/
digitsInfo;
refreshable = false;
valueFormatting;
_variable;
fieldError;
_value;
forceValue = undefined;
valueSub;
constructor(decimalPipe) {
this.decimalPipe = decimalPipe;
}
ngOnDestroy() {
this.valueSub?.unsubscribe();
}
ngAfterViewInit() {
this.valueSub = this.ctx?.valueToDisplay
?.pipe(map((value) => {
if (this.valueFormatting) {
value = this.valueFormatting(value);
}
if (this.digitsInfo && typeof value === 'number') {
value = this.decimalPipe.transform(value, this.digitsInfo);
}
return value;
}), shareReplay(1))
.subscribe((v) => {
this._value = v;
});
}
onSubmit(newValue) {
this.ctx?.notifyValueChange(newValue);
}
onSubmitValue() {
this.ctx?.submitValue();
}
onValueChange(event) {
this.ctx.valueToSubmit = event;
}
onEditModeChange(newValue) {
if (newValue) {
this.ctx?.enableEditMode();
}
else {
this.ctx?.cancelEdit();
}
}
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MonitoringVariableValueComponent, deps: [{ token: i1.DecimalPipe }], target: i0.ɵɵFactoryTarget.Component });
/** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: MonitoringVariableValueComponent, selector: "monitoring-variable-value", inputs: { lines: "lines", unitValue: "unitValue", error: "error", variable: "variable", config: "config", inputOptions: "inputOptions", editable: "editable", modalEdition: "modalEdition", valueStyle: "valueStyle", digitsInfo: "digitsInfo", refreshable: "refreshable", valueFormatting: "valueFormatting" }, viewQueries: [{ propertyName: "ctx", first: true, predicate: ["ctx"], descendants: true }], ngImport: i0, template: "<tap-value-editor-container\n #ctx\n [variable]=\"_variable\"\n [showRefreshButton]=\"refreshable\"\n [showEditButton]=\"editable\"\n [showSubmitButton]=\"true\"\n [modalEdition]=\"modalEdition\"\n [inputOptions]=\"inputOptions\"\n [lines]=\"lines\"\n>\n <tap-inline-editor\n [forceValue]=\"forceValue\"\n [value]=\"\n ctx.pendingSubmitValue === undefined ? _value : ctx.pendingSubmitValue\n \"\n [editMode]=\"ctx.editModeChange | async\"\n (editModeChange)=\"onEditModeChange($event)\"\n [editable]=\"editable && ctx.pendingSubmitValue === undefined\"\n [fieldError]=\"fieldError\"\n [inputOptions]=\"inputOptions\"\n [unitValue]=\"unitValue\"\n [valueStyle]=\"valueStyle\"\n (valueChange)=\"onValueChange($event)\"\n (onSubmit)=\"onSubmit($event)\"\n >\n </tap-inline-editor>\n</tap-value-editor-container>\n", styles: [""], dependencies: [{ kind: "component", type: i2.TapValueEditorContainerComponent, selector: "tap-value-editor-container", inputs: ["button", "variable", "inputOptions", "showRefreshButton", "showSubmitButton", "showEditButton", "error", "lines", "modalEdition", "value"], outputs: ["submit", "refresh"] }, { kind: "component", type: i2.InlineEditorComponent, selector: "tap-inline-editor", inputs: ["editMode", "editable", "unitValue", "inputOptions", "valueStyle", "value", "forceValue", "showLoader", "fieldError"], outputs: ["onSubmit", "valueChange", "editModeChange"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MonitoringVariableValueComponent, decorators: [{
type: Component,
args: [{ selector: 'monitoring-variable-value', template: "<tap-value-editor-container\n #ctx\n [variable]=\"_variable\"\n [showRefreshButton]=\"refreshable\"\n [showEditButton]=\"editable\"\n [showSubmitButton]=\"true\"\n [modalEdition]=\"modalEdition\"\n [inputOptions]=\"inputOptions\"\n [lines]=\"lines\"\n>\n <tap-inline-editor\n [forceValue]=\"forceValue\"\n [value]=\"\n ctx.pendingSubmitValue === undefined ? _value : ctx.pendingSubmitValue\n \"\n [editMode]=\"ctx.editModeChange | async\"\n (editModeChange)=\"onEditModeChange($event)\"\n [editable]=\"editable && ctx.pendingSubmitValue === undefined\"\n [fieldError]=\"fieldError\"\n [inputOptions]=\"inputOptions\"\n [unitValue]=\"unitValue\"\n [valueStyle]=\"valueStyle\"\n (valueChange)=\"onValueChange($event)\"\n (onSubmit)=\"onSubmit($event)\"\n >\n </tap-inline-editor>\n</tap-value-editor-container>\n" }]
}], ctorParameters: () => [{ type: i1.DecimalPipe }], propDecorators: { ctx: [{
type: ViewChild,
args: ['ctx']
}], lines: [{
type: Input
}], unitValue: [{
type: Input
}], error: [{
type: Input
}], variable: [{
type: Input
}], config: [{
type: Input
}], inputOptions: [{
type: Input
}], editable: [{
type: Input
}], modalEdition: [{
type: Input
}], valueStyle: [{
type: Input
}], digitsInfo: [{
type: Input
}], refreshable: [{
type: Input
}], valueFormatting: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9uaXRvcmluZy12YXJpYWJsZS12YWx1ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pb3RpemUtaW9uaWMvbW9uaXRvcmluZy9zcmMvbGliL3VpLWNvbXBvbmVudHMvbW9uaXRvcmluZy12YXJpYWJsZS12YWx1ZS9tb25pdG9yaW5nLXZhcmlhYmxlLXZhbHVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lvdGl6ZS1pb25pYy9tb25pdG9yaW5nL3NyYy9saWIvdWktY29tcG9uZW50cy9tb25pdG9yaW5nLXZhcmlhYmxlLXZhbHVlL21vbml0b3JpbmctdmFyaWFibGUtdmFsdWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFFTCxTQUFTLEVBQ1QsS0FBSyxFQUVMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLGdDQUFnQyxHQUNqQyxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVwRCxPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBT2xELE1BQU0sT0FBTyxnQ0FBZ0M7SUFxSHZCO0lBbEhGLEdBQUcsQ0FBb0M7SUFFaEQsS0FBSyxDQUFVO0lBR3hCLFNBQVMsQ0FBVTtJQUVuQixJQUFhLEtBQUssQ0FBQyxHQUFVO1FBQzNCLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUNJLFFBQVEsQ0FBQyxDQUE4QjtRQUN6QyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFhLE1BQU0sQ0FBQyxNQUFzQjtRQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3ZCLFFBQVEsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNwQixLQUFLLFNBQVM7b0JBQ1osSUFBSSxDQUFDLFlBQVksR0FBRzt3QkFDbEIsSUFBSSxFQUFFLFFBQVE7cUJBQ2YsQ0FBQztvQkFDRixNQUFNO2dCQUNSLEtBQUssUUFBUTtvQkFDWCxJQUFJLENBQUMsWUFBWSxHQUFHO3dCQUNsQixJQUFJLEVBQUUsTUFBTTt3QkFDWixTQUFTLEVBQUUsTUFBTSxDQUFDLE1BQU07cUJBQ3pCLENBQUM7b0JBQ0YsTUFBTTtnQkFDUixLQUFLLFFBQVE7b0JBQ1gsSUFBSSxDQUFDLFlBQVksR0FBRzt3QkFDbEIsSUFBSSxFQUFFLFFBQVE7d0JBQ2QsR0FBRyxFQUFFLENBQUM7d0JBQ04sR0FBRyxFQUFFLFVBQVU7cUJBQ2hCLENBQUM7b0JBQ0YsTUFBTTtnQkFDUixLQUFLLFFBQVE7b0JBQ1gsSUFBSSxDQUFDLFlBQVksR0FBRzt3QkFDbEIsSUFBSSxFQUFFLFFBQVE7d0JBQ2QsR0FBRyxFQUFFLENBQUM7d0JBQ04sR0FBRyxFQUFFLE1BQU07cUJBQ1osQ0FBQztvQkFDRixNQUFNO2dCQUNSLEtBQUssT0FBTztvQkFDVixJQUFJLENBQUMsWUFBWSxHQUFHO3dCQUNsQixJQUFJLEVBQUUsUUFBUTt3QkFDZCxHQUFHLEVBQUUsQ0FBQzt3QkFDTixHQUFHLEVBQUUsSUFBSTtxQkFDVixDQUFDO29CQUNGLE1BQU07Z0JBQ1IsS0FBSyxPQUFPO29CQUNWLElBQUksQ0FBQyxZQUFZLEdBQUc7d0JBQ2xCLElBQUksRUFBRSxRQUFRO3dCQUNkLEdBQUcsRUFBRSxDQUFDLFVBQVU7d0JBQ2hCLEdBQUcsRUFBRSxVQUFVO3FCQUNoQixDQUFDO29CQUNGLE1BQU07Z0JBQ1IsS0FBSyxPQUFPO29CQUNWLElBQUksQ0FBQyxZQUFZLEdBQUc7d0JBQ2xCLElBQUksRUFBRSxRQUFRO3dCQUNkLEdBQUcsRUFBRSxDQUFDLEtBQUs7d0JBQ1gsR0FBRyxFQUFFLEtBQUs7cUJBQ1gsQ0FBQztvQkFDRixNQUFNO2dCQUNSLEtBQUssTUFBTTtvQkFDVCxJQUFJLENBQUMsWUFBWSxHQUFHO3dCQUNsQixJQUFJLEVBQUUsUUFBUTt3QkFDZCxHQUFHLEVBQUUsQ0FBQyxHQUFHO3dCQUNULEdBQUcsRUFBRSxHQUFHO3FCQUNULENBQUM7b0JBQ0YsTUFBTTtZQUNWLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVRLFlBQVksR0FBdUM7UUFDMUQsSUFBSSxFQUFFLE1BQU07S0FDYixDQUFDO0lBR0YsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUdqQixZQUFZLEdBQUcsS0FBSyxDQUFDO0lBR3JCLFVBQVUsQ0FBTztJQUVqQjs7O09BR0c7SUFFSCxVQUFVLENBQVU7SUFHcEIsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUVYLGVBQWUsQ0FBbUM7SUFFcEQsU0FBUyxDQUErQjtJQUV4QyxVQUFVLENBQVM7SUFFMUIsTUFBTSxDQUFPO0lBRWIsVUFBVSxHQUFRLFNBQVMsQ0FBQztJQUU1QixRQUFRLENBQWdCO0lBRXhCLFlBQW9CLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO0lBQUcsQ0FBQztJQUVoRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxjQUFjO1lBQ3RDLEVBQUUsSUFBSSxDQUNKLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1osSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3pCLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RDLENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ2pELEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzdELENBQUM7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQyxFQUNGLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZjthQUNBLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ2YsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsUUFBUSxDQUFDLFFBQWE7UUFDcEIsSUFBSSxDQUFDLEdBQUcsRUFBRSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFVO1FBQ3RCLElBQUksQ0FBQyxHQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUNsQyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsUUFBYTtRQUM1QixJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLEdBQUcsRUFBRSxjQUFjLEVBQUUsQ0FBQztRQUM3QixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLENBQUM7UUFDekIsQ0FBQztJQUNILENBQUM7MkhBaEtVLGdDQUFnQzsrR0FBaEMsZ0NBQWdDLCtjQ3RCN0MsZzJCQTJCQTs7NEZETGEsZ0NBQWdDO2tCQUw1QyxTQUFTOytCQUNFLDJCQUEyQjtnRkFPbkIsR0FBRztzQkFBcEIsU0FBUzt1QkFBQyxLQUFLO2dCQUVQLEtBQUs7c0JBQWIsS0FBSztnQkFHTixTQUFTO3NCQURSLEtBQUs7Z0JBR08sS0FBSztzQkFBakIsS0FBSztnQkFLRixRQUFRO3NCQURYLEtBQUs7Z0JBUU8sTUFBTTtzQkFBbEIsS0FBSztnQkE0REcsWUFBWTtzQkFBcEIsS0FBSztnQkFLTixRQUFRO3NCQURQLEtBQUs7Z0JBSU4sWUFBWTtzQkFEWCxLQUFLO2dCQUlOLFVBQVU7c0JBRFQsS0FBSztnQkFRTixVQUFVO3NCQURULEtBQUs7Z0JBSU4sV0FBVztzQkFEVixLQUFLO2dCQUdHLGVBQWU7c0JBQXZCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZWNpbWFsUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBJbmxpbmVFZGl0b3JDb21wb25lbnQsXG4gIFRhcFZhbHVlRWRpdG9yQ29udGFpbmVyQ29tcG9uZW50LFxufSBmcm9tICdAaW90aXplL2lvbmljJztcbmltcG9ydCB7IFZhcmlhYmxlQ29uZmlnIH0gZnJvbSAnQGlvdGl6ZS90YXAvY29uZmlnL3NjaGVtYS92MSc7XG5pbXBvcnQgeyBBYnN0cmFjdFZhcmlhYmxlIH0gZnJvbSAnQGlvdGl6ZS90YXAvZGF0YSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21vbml0b3JpbmctdmFyaWFibGUtdmFsdWUnLFxuICB0ZW1wbGF0ZVVybDogJy4vbW9uaXRvcmluZy12YXJpYWJsZS12YWx1ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21vbml0b3JpbmctdmFyaWFibGUtdmFsdWUuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgTW9uaXRvcmluZ1ZhcmlhYmxlVmFsdWVDb21wb25lbnQ8VmFsdWVUeXBlID0gYW55PlxuICBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveVxue1xuICBAVmlld0NoaWxkKCdjdHgnKSBjdHg/OiBUYXBWYWx1ZUVkaXRvckNvbnRhaW5lckNvbXBvbmVudDtcblxuICBASW5wdXQoKSBsaW5lcz86IHN0cmluZztcblxuICBASW5wdXQoKVxuICB1bml0VmFsdWU/OiBzdHJpbmc7XG5cbiAgQElucHV0KCkgc2V0IGVycm9yKGVycjogRXJyb3IpIHtcbiAgICB0aGlzLmZpZWxkRXJyb3IgPSBlcnI7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgdmFyaWFibGUodjogQWJzdHJhY3RWYXJpYWJsZTxWYWx1ZVR5cGU+KSB7XG4gICAgdGhpcy5fdmFyaWFibGUgPSB2O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBASW5wdXQoKSBzZXQgY29uZmlnKGNvbmZpZzogVmFyaWFibGVDb25maWcpIHtcbiAgICBpZiAoIXRoaXMuaW5wdXRPcHRpb25zKSB7XG4gICAgICBzd2l0Y2ggKGNvbmZpZy50eXBlKSB7XG4gICAgICAgIGNhc2UgJ0ZMT0FUMzInOlxuICAgICAgICAgIHRoaXMuaW5wdXRPcHRpb25zID0ge1xuICAgICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnU1RSSU5HJzpcbiAgICAgICAgICB0aGlzLmlucHV0T3B0aW9ucyA9IHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIG1heExlbmd0aDogY29uZmlnLmxlbmd0aCxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdVSU5UMzInOlxuICAgICAgICAgIHRoaXMuaW5wdXRPcHRpb25zID0ge1xuICAgICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgICAgICBtaW46IDAsXG4gICAgICAgICAgICBtYXg6IDB4ZmZmZmZmZmYsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnVUlOVDE2JzpcbiAgICAgICAgICB0aGlzLmlucHV0T3B0aW9ucyA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgICAgICAgbWluOiAwLFxuICAgICAgICAgICAgbWF4OiAweGZmZmYsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnVUlOVDgnOlxuICAgICAgICAgIHRoaXMuaW5wdXRPcHRpb25zID0ge1xuICAgICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgICAgICBtaW46IDAsXG4gICAgICAgICAgICBtYXg6IDB4ZmYsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnSU5UMzInOlxuICAgICAgICAgIHRoaXMuaW5wdXRPcHRpb25zID0ge1xuICAgICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgICAgICBtaW46IC0yMTQ3NDgzNjQ4LFxuICAgICAgICAgICAgbWF4OiAyMTQ3NDgzNjQ3LFxuICAgICAgICAgIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0lOVDE2JzpcbiAgICAgICAgICB0aGlzLmlucHV0T3B0aW9ucyA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgICAgICAgbWluOiAtMzI3NjgsXG4gICAgICAgICAgICBtYXg6IDMyNzY3LFxuICAgICAgICAgIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0lOVDgnOlxuICAgICAgICAgIHRoaXMuaW5wdXRPcHRpb25zID0ge1xuICAgICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgICAgICBtaW46IC0xMjgsXG4gICAgICAgICAgICBtYXg6IDEyNyxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpIGlucHV0T3B0aW9uczogSW5saW5lRWRpdG9yQ29tcG9uZW50LklucHV0T3B0aW9ucyA9IHtcbiAgICB0eXBlOiAndGV4dCcsXG4gIH07XG5cbiAgQElucHV0KClcbiAgZWRpdGFibGUgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBtb2RhbEVkaXRpb24gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICB2YWx1ZVN0eWxlPzogYW55O1xuXG4gIC8qKlxuICAgKiBTZWUgZGlnaXRzSW5mbyBkb2Mgb24gQHtsaW5rIGh0dHBzOi8vYW5ndWxhci5pby9hcGkvY29tbW9uL0RlY2ltYWxQaXBlI3BhcmFtZXRlcnN9XG4gICAqIFdpbGwgYmUgdXNlZCBvbmx5IGlmIHZhbHVlIGlzIGEgbnVtYmVyXG4gICAqL1xuICBASW5wdXQoKVxuICBkaWdpdHNJbmZvPzogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIHJlZnJlc2hhYmxlID0gZmFsc2U7XG5cbiAgQElucHV0KCkgdmFsdWVGb3JtYXR0aW5nPzogKHZhbHVlOiBWYWx1ZVR5cGUpID0+IFZhbHVlVHlwZTtcblxuICBwdWJsaWMgX3ZhcmlhYmxlPzogQWJzdHJhY3RWYXJpYWJsZTxWYWx1ZVR5cGU+O1xuXG4gIHB1YmxpYyBmaWVsZEVycm9yPzogRXJyb3I7XG5cbiAgX3ZhbHVlPzogYW55O1xuXG4gIGZvcmNlVmFsdWU6IGFueSA9IHVuZGVmaW5lZDtcblxuICB2YWx1ZVN1Yj86IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRlY2ltYWxQaXBlOiBEZWNpbWFsUGlwZSkge31cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlU3ViPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWVTdWIgPSB0aGlzLmN0eD8udmFsdWVUb0Rpc3BsYXlcbiAgICAgID8ucGlwZShcbiAgICAgICAgbWFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnZhbHVlRm9ybWF0dGluZykge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnZhbHVlRm9ybWF0dGluZyh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLmRpZ2l0c0luZm8gJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmRlY2ltYWxQaXBlLnRyYW5zZm9ybSh2YWx1ZSwgdGhpcy5kaWdpdHNJbmZvKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9KSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHYpID0+IHtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2O1xuICAgICAgfSk7XG4gIH1cblxuICBvblN1Ym1pdChuZXdWYWx1ZTogYW55KSB7XG4gICAgdGhpcy5jdHg/Lm5vdGlmeVZhbHVlQ2hhbmdlKG5ld1ZhbHVlKTtcbiAgfVxuXG4gIG9uU3VibWl0VmFsdWUoKSB7XG4gICAgdGhpcy5jdHg/LnN1Ym1pdFZhbHVlKCk7XG4gIH1cblxuICBvblZhbHVlQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmN0eCEudmFsdWVUb1N1Ym1pdCA9IGV2ZW50O1xuICB9XG5cbiAgb25FZGl0TW9kZUNoYW5nZShuZXdWYWx1ZTogYW55KSB7XG4gICAgaWYgKG5ld1ZhbHVlKSB7XG4gICAgICB0aGlzLmN0eD8uZW5hYmxlRWRpdE1vZGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdHg/LmNhbmNlbEVkaXQoKTtcbiAgICB9XG4gIH1cbn1cbiIsIjx0YXAtdmFsdWUtZWRpdG9yLWNvbnRhaW5lclxuICAjY3R4XG4gIFt2YXJpYWJsZV09XCJfdmFyaWFibGVcIlxuICBbc2hvd1JlZnJlc2hCdXR0b25dPVwicmVmcmVzaGFibGVcIlxuICBbc2hvd0VkaXRCdXR0b25dPVwiZWRpdGFibGVcIlxuICBbc2hvd1N1Ym1pdEJ1dHRvbl09XCJ0cnVlXCJcbiAgW21vZGFsRWRpdGlvbl09XCJtb2RhbEVkaXRpb25cIlxuICBbaW5wdXRPcHRpb25zXT1cImlucHV0T3B0aW9uc1wiXG4gIFtsaW5lc109XCJsaW5lc1wiXG4+XG4gIDx0YXAtaW5saW5lLWVkaXRvclxuICAgIFtmb3JjZVZhbHVlXT1cImZvcmNlVmFsdWVcIlxuICAgIFt2YWx1ZV09XCJcbiAgICAgIGN0eC5wZW5kaW5nU3VibWl0VmFsdWUgPT09IHVuZGVmaW5lZCA/IF92YWx1ZSA6IGN0eC5wZW5kaW5nU3VibWl0VmFsdWVcbiAgICBcIlxuICAgIFtlZGl0TW9kZV09XCJjdHguZWRpdE1vZGVDaGFuZ2UgfCBhc3luY1wiXG4gICAgKGVkaXRNb2RlQ2hhbmdlKT1cIm9uRWRpdE1vZGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgW2VkaXRhYmxlXT1cImVkaXRhYmxlICYmIGN0eC5wZW5kaW5nU3VibWl0VmFsdWUgPT09IHVuZGVmaW5lZFwiXG4gICAgW2ZpZWxkRXJyb3JdPVwiZmllbGRFcnJvclwiXG4gICAgW2lucHV0T3B0aW9uc109XCJpbnB1dE9wdGlvbnNcIlxuICAgIFt1bml0VmFsdWVdPVwidW5pdFZhbHVlXCJcbiAgICBbdmFsdWVTdHlsZV09XCJ2YWx1ZVN0eWxlXCJcbiAgICAodmFsdWVDaGFuZ2UpPVwib25WYWx1ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAob25TdWJtaXQpPVwib25TdWJtaXQoJGV2ZW50KVwiXG4gID5cbiAgPC90YXAtaW5saW5lLWVkaXRvcj5cbjwvdGFwLXZhbHVlLWVkaXRvci1jb250YWluZXI+XG4iXX0=