@c8y/ngx-components 1021.2.0 → 1021.2.1

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.
@@ -1,13 +1,16 @@
1
1
  import { OnInit } from '@angular/core';
2
2
  import { AbstractControl, ControlValueAccessor, FormBuilder, FormGroup, ValidationErrors, Validator } from '@angular/forms';
3
- import { OmitSelectorProperties, TimelineType } from '../alarm-event-selector.model';
3
+ import { AlarmEventAttributesFormService } from './alarm-event-attributes-form.service';
4
+ import { AlarmOrEvent, OmitSelectorProperties, TimelineType } from '../alarm-event-selector.model';
4
5
  import * as i0 from "@angular/core";
5
6
  export declare class AlarmEventAttributesFormComponent implements ControlValueAccessor, Validator, OnInit {
6
7
  private formBuilder;
8
+ private alarmEventAttributesFormService;
7
9
  timelineType: TimelineType;
8
10
  omitProperties: OmitSelectorProperties;
11
+ selectedItems: AlarmOrEvent[];
9
12
  formGroup: FormGroup;
10
- constructor(formBuilder: FormBuilder);
13
+ constructor(formBuilder: FormBuilder, alarmEventAttributesFormService: AlarmEventAttributesFormService);
11
14
  ngOnInit(): void;
12
15
  validate(_control: AbstractControl): ValidationErrors;
13
16
  writeValue(obj: any): void;
@@ -15,6 +18,6 @@ export declare class AlarmEventAttributesFormComponent implements ControlValueAc
15
18
  registerOnTouched(fn: any): void;
16
19
  setDisabledState(isDisabled: boolean): void;
17
20
  static ɵfac: i0.ɵɵFactoryDeclaration<AlarmEventAttributesFormComponent, never>;
18
- static ɵcmp: i0.ɵɵComponentDeclaration<AlarmEventAttributesFormComponent, "c8y-alarm-event-attributes-form", never, { "timelineType": { "alias": "timelineType"; "required": false; }; "omitProperties": { "alias": "omitProperties"; "required": false; }; }, {}, never, never, false, never>;
21
+ static ɵcmp: i0.ɵɵComponentDeclaration<AlarmEventAttributesFormComponent, "c8y-alarm-event-attributes-form", never, { "timelineType": { "alias": "timelineType"; "required": false; }; "omitProperties": { "alias": "omitProperties"; "required": false; }; "selectedItems": { "alias": "selectedItems"; "required": false; }; }, {}, never, never, false, never>;
19
22
  }
20
23
  //# sourceMappingURL=alarm-event-attributes-form.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"alarm-event-attributes-form.component.d.ts","sourceRoot":"","sources":["../../../alarm-event-selector/alarm-event-attributes-form/alarm-event-attributes-form.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,MAAM,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,WAAW,EAEX,SAAS,EAGT,gBAAgB,EAChB,SAAS,EAEV,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;;AAErF,qBAgBa,iCAAkC,YAAW,oBAAoB,EAAE,SAAS,EAAE,MAAM;IAKnF,OAAO,CAAC,WAAW;IAJtB,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,EAAE,sBAAsB,CAAM;IACrD,SAAS,EAAE,SAAS,CAAC;gBAED,WAAW,EAAE,WAAW;IAE5C,QAAQ;IAWR,QAAQ,CAAC,QAAQ,EAAE,eAAe,GAAG,gBAAgB;IAIrD,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IAI1B,gBAAgB,CAAC,EAAE,EAAE,GAAG,GAAG,IAAI;IAI/B,iBAAiB,CAAC,EAAE,EAAE,GAAG,GAAG,IAAI;IAIhC,gBAAgB,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI;yCAlChC,iCAAiC;2CAAjC,iCAAiC;CAqC7C"}
1
+ {"version":3,"file":"alarm-event-attributes-form.component.d.ts","sourceRoot":"","sources":["../../../alarm-event-selector/alarm-event-attributes-form/alarm-event-attributes-form.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,MAAM,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,WAAW,EAEX,SAAS,EAGT,gBAAgB,EAChB,SAAS,EAEV,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,+BAA+B,EAAE,MAAM,uCAAuC,CAAC;AACxF,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;;AAEnG,qBAgBa,iCAAkC,YAAW,oBAAoB,EAAE,SAAS,EAAE,MAAM;IAO7F,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,+BAA+B;IAPhC,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,EAAE,sBAAsB,CAAM;IAC5C,aAAa,EAAE,YAAY,EAAE,CAAM;IAC5C,SAAS,EAAE,SAAS,CAAC;gBAGX,WAAW,EAAE,WAAW,EACxB,+BAA+B,EAAE,+BAA+B;IAG1E,QAAQ;IAmBR,QAAQ,CAAC,QAAQ,EAAE,eAAe,GAAG,gBAAgB;IAIrD,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IAI1B,gBAAgB,CAAC,EAAE,EAAE,GAAG,GAAG,IAAI;IAI/B,iBAAiB,CAAC,EAAE,EAAE,GAAG,GAAG,IAAI;IAIhC,gBAAgB,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI;yCA9ChC,iCAAiC;2CAAjC,iCAAiC;CAiD7C"}
@@ -0,0 +1,9 @@
1
+ import { AbstractControl, ValidationErrors } from '@angular/forms';
2
+ import { AlarmOrEvent } from '../alarm-event-selector.model';
3
+ import * as i0 from "@angular/core";
4
+ export declare class AlarmEventAttributesFormService {
5
+ duplicateTypeValidator(selectedItems: AlarmOrEvent[]): (control: AbstractControl) => ValidationErrors | null;
6
+ static ɵfac: i0.ɵɵFactoryDeclaration<AlarmEventAttributesFormService, never>;
7
+ static ɵprov: i0.ɵɵInjectableDeclaration<AlarmEventAttributesFormService>;
8
+ }
9
+ //# sourceMappingURL=alarm-event-attributes-form.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alarm-event-attributes-form.service.d.ts","sourceRoot":"","sources":["../../../alarm-event-selector/alarm-event-attributes-form/alarm-event-attributes-form.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;;AAE7D,qBACa,+BAA+B;IAC1C,sBAAsB,CAAC,aAAa,EAAE,YAAY,EAAE,aACjC,eAAe,KAAG,gBAAgB,GAAG,IAAI;yCAFjD,+BAA+B;6CAA/B,+BAA+B;CAY3C"}
@@ -9,6 +9,7 @@ export declare class CustomAlarmEventFormComponent implements OnInit, OnDestroy
9
9
  timelineType: TimelineType;
10
10
  target: IIdentified;
11
11
  omitProperties: OmitSelectorProperties;
12
+ selectedItems: AlarmOrEvent[];
12
13
  defaultColor: string;
13
14
  added: EventEmitter<AlarmOrEvent>;
14
15
  cancel: EventEmitter<void>;
@@ -21,6 +22,6 @@ export declare class CustomAlarmEventFormComponent implements OnInit, OnDestroy
21
22
  add(): void;
22
23
  private transformFormValue;
23
24
  static ɵfac: i0.ɵɵFactoryDeclaration<CustomAlarmEventFormComponent, never>;
24
- static ɵcmp: i0.ɵɵComponentDeclaration<CustomAlarmEventFormComponent, "c8y-custom-alarm-event-form", never, { "timelineType": { "alias": "timelineType"; "required": false; }; "target": { "alias": "target"; "required": false; }; "omitProperties": { "alias": "omitProperties"; "required": false; }; "defaultColor": { "alias": "defaultColor"; "required": false; }; }, { "added": "added"; "cancel": "cancel"; }, never, never, false, never>;
25
+ static ɵcmp: i0.ɵɵComponentDeclaration<CustomAlarmEventFormComponent, "c8y-custom-alarm-event-form", never, { "timelineType": { "alias": "timelineType"; "required": false; }; "target": { "alias": "target"; "required": false; }; "omitProperties": { "alias": "omitProperties"; "required": false; }; "selectedItems": { "alias": "selectedItems"; "required": false; }; "defaultColor": { "alias": "defaultColor"; "required": false; }; }, { "added": "added"; "cancel": "cancel"; }, never, never, false, never>;
25
26
  }
26
27
  //# sourceMappingURL=custom-alarm-event-form.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"custom-alarm-event-form.component.d.ts","sourceRoot":"","sources":["../../../alarm-event-selector/custom-alarm-event-form/custom-alarm-event-form.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAAS,SAAS,EAAE,MAAM,EAAU,MAAM,eAAe,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAEnG,OAAO,EAAE,UAAU,EAAW,MAAM,MAAM,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;;AAE1C,qBAIa,6BAA8B,YAAW,MAAM,EAAE,SAAS;IAYzD,OAAO,CAAC,WAAW;IAXtB,YAAY,EAAE,YAAY,CAAC;IAC3B,MAAM,EAAE,WAAW,CAAC;IACpB,cAAc,EAAE,sBAAsB,CAAM;IAC5C,YAAY,EAAE,MAAM,CAAC;IACpB,KAAK,6BAAoC;IACzC,MAAM,qBAA4B;IAE5C,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IAC5B,OAAO,CAAC,QAAQ,CAAuB;gBAEnB,WAAW,EAAE,WAAW;IAe5C,QAAQ;IAQR,WAAW;IAKX,GAAG;IAOH,OAAO,CAAC,kBAAkB;yCA/Cf,6BAA6B;2CAA7B,6BAA6B;CAoDzC"}
1
+ {"version":3,"file":"custom-alarm-event-form.component.d.ts","sourceRoot":"","sources":["../../../alarm-event-selector/custom-alarm-event-form/custom-alarm-event-form.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAAS,SAAS,EAAE,MAAM,EAAU,MAAM,eAAe,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAEnG,OAAO,EAAE,UAAU,EAAW,MAAM,MAAM,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;;AAE1C,qBAIa,6BAA8B,YAAW,MAAM,EAAE,SAAS;IAazD,OAAO,CAAC,WAAW;IAZtB,YAAY,EAAE,YAAY,CAAC;IAC3B,MAAM,EAAE,WAAW,CAAC;IACpB,cAAc,EAAE,sBAAsB,CAAM;IAC5C,aAAa,EAAE,YAAY,EAAE,CAAM;IACnC,YAAY,EAAE,MAAM,CAAC;IACpB,KAAK,6BAAoC;IACzC,MAAM,qBAA4B;IAE5C,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IAC5B,OAAO,CAAC,QAAQ,CAAuB;gBAEnB,WAAW,EAAE,WAAW;IAe5C,QAAQ;IAQR,WAAW;IAKX,GAAG;IAOH,OAAO,CAAC,kBAAkB;yCAhDf,6BAA6B;2CAA7B,6BAA6B;CAqDzC"}
@@ -1,18 +1,30 @@
1
1
  import { Component, forwardRef, Input } from '@angular/core';
2
2
  import { FormBuilder, FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validators } from '@angular/forms';
3
3
  import { take } from 'rxjs/operators';
4
+ import { AlarmEventAttributesFormService } from './alarm-event-attributes-form.service';
4
5
  import * as i0 from "@angular/core";
5
6
  import * as i1 from "@angular/forms";
6
- import * as i2 from "@angular/common";
7
- import * as i3 from "@c8y/ngx-components";
7
+ import * as i2 from "./alarm-event-attributes-form.service";
8
+ import * as i3 from "@angular/common";
9
+ import * as i4 from "@c8y/ngx-components";
8
10
  export class AlarmEventAttributesFormComponent {
9
- constructor(formBuilder) {
11
+ constructor(formBuilder, alarmEventAttributesFormService) {
10
12
  this.formBuilder = formBuilder;
13
+ this.alarmEventAttributesFormService = alarmEventAttributesFormService;
11
14
  this.omitProperties = {};
15
+ this.selectedItems = [];
12
16
  }
13
17
  ngOnInit() {
14
18
  this.formGroup = this.formBuilder.group({
15
- filters: this.formBuilder.group({ type: ['', [Validators.required]] }),
19
+ filters: this.formBuilder.group({
20
+ type: [
21
+ '',
22
+ [
23
+ Validators.required,
24
+ this.alarmEventAttributesFormService.duplicateTypeValidator(this.selectedItems)
25
+ ]
26
+ ]
27
+ }),
16
28
  timelineType: ''
17
29
  });
18
30
  if (!this.omitProperties.label) {
@@ -34,8 +46,8 @@ export class AlarmEventAttributesFormComponent {
34
46
  setDisabledState(isDisabled) {
35
47
  isDisabled ? this.formGroup.disable() : this.formGroup.enable();
36
48
  }
37
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AlarmEventAttributesFormComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
38
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AlarmEventAttributesFormComponent, selector: "c8y-alarm-event-attributes-form", inputs: { timelineType: "timelineType", omitProperties: "omitProperties" }, providers: [
49
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AlarmEventAttributesFormComponent, deps: [{ token: i1.FormBuilder }, { token: i2.AlarmEventAttributesFormService }], target: i0.ɵɵFactoryTarget.Component }); }
50
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AlarmEventAttributesFormComponent, selector: "c8y-alarm-event-attributes-form", inputs: { timelineType: "timelineType", omitProperties: "omitProperties", selectedItems: "selectedItems" }, providers: [
39
51
  {
40
52
  provide: NG_VALUE_ACCESSOR,
41
53
  useExisting: forwardRef(() => AlarmEventAttributesFormComponent),
@@ -46,7 +58,7 @@ export class AlarmEventAttributesFormComponent {
46
58
  useExisting: forwardRef(() => AlarmEventAttributesFormComponent),
47
59
  multi: true
48
60
  }
49
- ], ngImport: i0, template: "<div [formGroup]=\"formGroup\">\n <c8y-form-group *ngIf=\"formGroup.controls.label\">\n <label class=\"m-0\">{{ 'Label' | translate }}</label>\n <input\n class=\"form-control flex-grow\"\n name=\"label\"\n formControlName=\"label\"\n [placeholder]=\"\n 'e.g. {{ example }}'\n | translate\n : {\n example:\n timelineType === 'ALARM'\n ? 'Alarm unavailable'\n : 'Location update'\n }\n \"\n />\n </c8y-form-group>\n\n <div formGroupName=\"filters\">\n <c8y-form-group>\n <label class=\"m-0\">{{ 'Type' | translate }}</label>\n <input\n class=\"form-control flex-grow\"\n name=\"type\"\n formControlName=\"type\"\n [placeholder]=\"\n 'e.g. {{ example }}'\n | translate\n : {\n example:\n timelineType === 'ALARM'\n ? 'c8y_UnavailabilityAlarm'\n : 'c8y_LocationUpdate'\n }\n \"\n />\n </c8y-form-group>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i3.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i3.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] }); }
61
+ ], ngImport: i0, template: "<div [formGroup]=\"formGroup\">\n <c8y-form-group *ngIf=\"formGroup.controls.label\">\n <label class=\"m-0\">{{ 'Label' | translate }}</label>\n <input\n class=\"form-control flex-grow\"\n name=\"label\"\n formControlName=\"label\"\n [placeholder]=\"\n 'e.g. {{ example }}'\n | translate\n : {\n example: timelineType === 'ALARM' ? 'Alarm unavailable' : 'Location update'\n }\n \"\n />\n </c8y-form-group>\n\n <div formGroupName=\"filters\">\n <c8y-form-group>\n <label class=\"m-0\">{{ 'Type' | translate }}</label>\n <input\n class=\"form-control flex-grow\"\n name=\"type\"\n formControlName=\"type\"\n [placeholder]=\"\n 'e.g. {{ example }}'\n | translate\n : {\n example:\n timelineType === 'ALARM' ? 'c8y_UnavailabilityAlarm' : 'c8y_LocationUpdate'\n }\n \"\n />\n <c8y-messages>\n <c8y-message\n name=\"duplicateType\"\n [text]=\"'Type already used.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i4.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i4.MessageDirective, selector: "c8y-message", inputs: ["name", "text"] }, { kind: "component", type: i4.MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults", "helpMessage"] }, { kind: "directive", type: i4.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "pipe", type: i4.C8yTranslatePipe, name: "translate" }] }); }
50
62
  }
51
63
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AlarmEventAttributesFormComponent, decorators: [{
52
64
  type: Component,
@@ -61,10 +73,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
61
73
  useExisting: forwardRef(() => AlarmEventAttributesFormComponent),
62
74
  multi: true
63
75
  }
64
- ], template: "<div [formGroup]=\"formGroup\">\n <c8y-form-group *ngIf=\"formGroup.controls.label\">\n <label class=\"m-0\">{{ 'Label' | translate }}</label>\n <input\n class=\"form-control flex-grow\"\n name=\"label\"\n formControlName=\"label\"\n [placeholder]=\"\n 'e.g. {{ example }}'\n | translate\n : {\n example:\n timelineType === 'ALARM'\n ? 'Alarm unavailable'\n : 'Location update'\n }\n \"\n />\n </c8y-form-group>\n\n <div formGroupName=\"filters\">\n <c8y-form-group>\n <label class=\"m-0\">{{ 'Type' | translate }}</label>\n <input\n class=\"form-control flex-grow\"\n name=\"type\"\n formControlName=\"type\"\n [placeholder]=\"\n 'e.g. {{ example }}'\n | translate\n : {\n example:\n timelineType === 'ALARM'\n ? 'c8y_UnavailabilityAlarm'\n : 'c8y_LocationUpdate'\n }\n \"\n />\n </c8y-form-group>\n </div>\n</div>\n" }]
65
- }], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { timelineType: [{
76
+ ], template: "<div [formGroup]=\"formGroup\">\n <c8y-form-group *ngIf=\"formGroup.controls.label\">\n <label class=\"m-0\">{{ 'Label' | translate }}</label>\n <input\n class=\"form-control flex-grow\"\n name=\"label\"\n formControlName=\"label\"\n [placeholder]=\"\n 'e.g. {{ example }}'\n | translate\n : {\n example: timelineType === 'ALARM' ? 'Alarm unavailable' : 'Location update'\n }\n \"\n />\n </c8y-form-group>\n\n <div formGroupName=\"filters\">\n <c8y-form-group>\n <label class=\"m-0\">{{ 'Type' | translate }}</label>\n <input\n class=\"form-control flex-grow\"\n name=\"type\"\n formControlName=\"type\"\n [placeholder]=\"\n 'e.g. {{ example }}'\n | translate\n : {\n example:\n timelineType === 'ALARM' ? 'c8y_UnavailabilityAlarm' : 'c8y_LocationUpdate'\n }\n \"\n />\n <c8y-messages>\n <c8y-message\n name=\"duplicateType\"\n [text]=\"'Type already used.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n</div>\n" }]
77
+ }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.AlarmEventAttributesFormService }], propDecorators: { timelineType: [{
66
78
  type: Input
67
79
  }], omitProperties: [{
68
80
  type: Input
81
+ }], selectedItems: [{
82
+ type: Input
69
83
  }] } });
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm0tZXZlbnQtYXR0cmlidXRlcy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2FsYXJtLWV2ZW50LXNlbGVjdG9yL2FsYXJtLWV2ZW50LWF0dHJpYnV0ZXMtZm9ybS9hbGFybS1ldmVudC1hdHRyaWJ1dGVzLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vYWxhcm0tZXZlbnQtc2VsZWN0b3IvYWxhcm0tZXZlbnQtYXR0cmlidXRlcy1mb3JtL2FsYXJtLWV2ZW50LWF0dHJpYnV0ZXMtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUdMLFdBQVcsRUFDWCxXQUFXLEVBRVgsYUFBYSxFQUNiLGlCQUFpQixFQUdqQixVQUFVLEVBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBbUJ0QyxNQUFNLE9BQU8saUNBQWlDO0lBSzVDLFlBQW9CLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBSG5DLG1CQUFjLEdBQTJCLEVBQUUsQ0FBQztJQUdOLENBQUM7SUFFaEQsUUFBUTtRQUNOLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDdEMsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN0RSxZQUFZLEVBQUUsRUFBRTtTQUNqQixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQy9FLENBQUM7SUFDSCxDQUFDO0lBRUQsUUFBUSxDQUFDLFFBQXlCO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDNUQsQ0FBQztJQUVELFVBQVUsQ0FBQyxHQUFRO1FBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFPO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBTztRQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxVQUFtQjtRQUNsQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDbEUsQ0FBQzs4R0FwQ1UsaUNBQWlDO2tHQUFqQyxpQ0FBaUMsc0lBYmpDO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxpQ0FBaUMsQ0FBQztnQkFDaEUsS0FBSyxFQUFFLElBQUk7YUFDWjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxhQUFhO2dCQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGlDQUFpQyxDQUFDO2dCQUNoRSxLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0YsMEJDOUJILDZuQ0F5Q0E7OzJGRFRhLGlDQUFpQztrQkFoQjdDLFNBQVM7K0JBQ0UsaUNBQWlDLGFBRWhDO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLGtDQUFrQyxDQUFDOzRCQUNoRSxLQUFLLEVBQUUsSUFBSTt5QkFDWjt3QkFDRDs0QkFDRSxPQUFPLEVBQUUsYUFBYTs0QkFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsa0NBQWtDLENBQUM7NEJBQ2hFLEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO2dGQUdRLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgZm9yd2FyZFJlZiwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgRm9ybUJ1aWxkZXIsXG4gIEZvcm1Db250cm9sLFxuICBGb3JtR3JvdXAsXG4gIE5HX1ZBTElEQVRPUlMsXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3IsXG4gIFZhbGlkYXRvcnNcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE9taXRTZWxlY3RvclByb3BlcnRpZXMsIFRpbWVsaW5lVHlwZSB9IGZyb20gJy4uL2FsYXJtLWV2ZW50LXNlbGVjdG9yLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWFsYXJtLWV2ZW50LWF0dHJpYnV0ZXMtZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAnLi9hbGFybS1ldmVudC1hdHRyaWJ1dGVzLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEFsYXJtRXZlbnRBdHRyaWJ1dGVzRm9ybUNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEFsYXJtRXZlbnRBdHRyaWJ1dGVzRm9ybUNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBBbGFybUV2ZW50QXR0cmlidXRlc0Zvcm1Db21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yLCBPbkluaXQge1xuICBASW5wdXQoKSB0aW1lbGluZVR5cGU6IFRpbWVsaW5lVHlwZTtcbiAgQElucHV0KCkgb21pdFByb3BlcnRpZXM6IE9taXRTZWxlY3RvclByb3BlcnRpZXMgPSB7fTtcbiAgZm9ybUdyb3VwOiBGb3JtR3JvdXA7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIpIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5mb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIGZpbHRlcnM6IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoeyB0eXBlOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0gfSksXG4gICAgICB0aW1lbGluZVR5cGU6ICcnXG4gICAgfSk7XG5cbiAgICBpZiAoIXRoaXMub21pdFByb3BlcnRpZXMubGFiZWwpIHtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmFkZENvbnRyb2woJ2xhYmVsJywgbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSk7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGUoX2NvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMge1xuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cD8udmFsaWQgPyBudWxsIDogeyBmb3JtSW52YWxpZDoge30gfTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKG9iaik7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKGZuKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoZm4pO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaXNEaXNhYmxlZCA/IHRoaXMuZm9ybUdyb3VwLmRpc2FibGUoKSA6IHRoaXMuZm9ybUdyb3VwLmVuYWJsZSgpO1xuICB9XG59XG4iLCI8ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCI+XG4gIDxjOHktZm9ybS1ncm91cCAqbmdJZj1cImZvcm1Hcm91cC5jb250cm9scy5sYWJlbFwiPlxuICAgIDxsYWJlbCBjbGFzcz1cIm0tMFwiPnt7ICdMYWJlbCcgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICAgIDxpbnB1dFxuICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZmxleC1ncm93XCJcbiAgICAgIG5hbWU9XCJsYWJlbFwiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9XCJsYWJlbFwiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwiXG4gICAgICAgICdlLmcuIHt7IGV4YW1wbGUgfX0nXG4gICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIGV4YW1wbGU6XG4gICAgICAgICAgICAgICAgICB0aW1lbGluZVR5cGUgPT09ICdBTEFSTSdcbiAgICAgICAgICAgICAgICAgICAgPyAnQWxhcm0gdW5hdmFpbGFibGUnXG4gICAgICAgICAgICAgICAgICAgIDogJ0xvY2F0aW9uIHVwZGF0ZSdcbiAgICAgICAgICAgICAgfVxuICAgICAgXCJcbiAgICAvPlxuICA8L2M4eS1mb3JtLWdyb3VwPlxuXG4gIDxkaXYgZm9ybUdyb3VwTmFtZT1cImZpbHRlcnNcIj5cbiAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJtLTBcIj57eyAnVHlwZScgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICAgICAgPGlucHV0XG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZsZXgtZ3Jvd1wiXG4gICAgICAgIG5hbWU9XCJ0eXBlXCJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidHlwZVwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAnZS5nLiB7eyBleGFtcGxlIH19J1xuICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICBleGFtcGxlOlxuICAgICAgICAgICAgICAgICAgICB0aW1lbGluZVR5cGUgPT09ICdBTEFSTSdcbiAgICAgICAgICAgICAgICAgICAgICA/ICdjOHlfVW5hdmFpbGFiaWxpdHlBbGFybSdcbiAgICAgICAgICAgICAgICAgICAgICA6ICdjOHlfTG9jYXRpb25VcGRhdGUnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICBcIlxuICAgICAgLz5cbiAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm0tZXZlbnQtYXR0cmlidXRlcy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2FsYXJtLWV2ZW50LXNlbGVjdG9yL2FsYXJtLWV2ZW50LWF0dHJpYnV0ZXMtZm9ybS9hbGFybS1ldmVudC1hdHRyaWJ1dGVzLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vYWxhcm0tZXZlbnQtc2VsZWN0b3IvYWxhcm0tZXZlbnQtYXR0cmlidXRlcy1mb3JtL2FsYXJtLWV2ZW50LWF0dHJpYnV0ZXMtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUdMLFdBQVcsRUFDWCxXQUFXLEVBRVgsYUFBYSxFQUNiLGlCQUFpQixFQUdqQixVQUFVLEVBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7Ozs7OztBQW1CeEYsTUFBTSxPQUFPLGlDQUFpQztJQU01QyxZQUNVLFdBQXdCLEVBQ3hCLCtCQUFnRTtRQURoRSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixvQ0FBK0IsR0FBL0IsK0JBQStCLENBQWlDO1FBTmpFLG1CQUFjLEdBQTJCLEVBQUUsQ0FBQztRQUM1QyxrQkFBYSxHQUFtQixFQUFFLENBQUM7SUFNekMsQ0FBQztJQUVKLFFBQVE7UUFDTixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQ3RDLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztnQkFDOUIsSUFBSSxFQUFFO29CQUNKLEVBQUU7b0JBQ0Y7d0JBQ0UsVUFBVSxDQUFDLFFBQVE7d0JBQ25CLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO3FCQUNoRjtpQkFDRjthQUNGLENBQUM7WUFDRixZQUFZLEVBQUUsRUFBRTtTQUNqQixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQy9FLENBQUM7SUFDSCxDQUFDO0lBRUQsUUFBUSxDQUFDLFFBQXlCO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDNUQsQ0FBQztJQUVELFVBQVUsQ0FBQyxHQUFRO1FBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFPO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBTztRQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxVQUFtQjtRQUNsQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDbEUsQ0FBQzs4R0FoRFUsaUNBQWlDO2tHQUFqQyxpQ0FBaUMsc0tBYmpDO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxpQ0FBaUMsQ0FBQztnQkFDaEUsS0FBSyxFQUFFLElBQUk7YUFDWjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxhQUFhO2dCQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGlDQUFpQyxDQUFDO2dCQUNoRSxLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0YsMEJDL0JILHVzQ0EwQ0E7OzJGRFRhLGlDQUFpQztrQkFoQjdDLFNBQVM7K0JBQ0UsaUNBQWlDLGFBRWhDO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLGtDQUFrQyxDQUFDOzRCQUNoRSxLQUFLLEVBQUUsSUFBSTt5QkFDWjt3QkFDRDs0QkFDRSxPQUFPLEVBQUUsYUFBYTs0QkFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsa0NBQWtDLENBQUM7NEJBQ2hFLEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGOzhIQUdRLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBmb3J3YXJkUmVmLCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBGb3JtQnVpbGRlcixcbiAgRm9ybUNvbnRyb2wsXG4gIEZvcm1Hcm91cCxcbiAgTkdfVkFMSURBVE9SUyxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIFZhbGlkYXRvcixcbiAgVmFsaWRhdG9yc1xufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQWxhcm1FdmVudEF0dHJpYnV0ZXNGb3JtU2VydmljZSB9IGZyb20gJy4vYWxhcm0tZXZlbnQtYXR0cmlidXRlcy1mb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWxhcm1PckV2ZW50LCBPbWl0U2VsZWN0b3JQcm9wZXJ0aWVzLCBUaW1lbGluZVR5cGUgfSBmcm9tICcuLi9hbGFybS1ldmVudC1zZWxlY3Rvci5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1hbGFybS1ldmVudC1hdHRyaWJ1dGVzLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vYWxhcm0tZXZlbnQtYXR0cmlidXRlcy1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBbGFybUV2ZW50QXR0cmlidXRlc0Zvcm1Db21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBbGFybUV2ZW50QXR0cmlidXRlc0Zvcm1Db21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQWxhcm1FdmVudEF0dHJpYnV0ZXNGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciwgT25Jbml0IHtcbiAgQElucHV0KCkgdGltZWxpbmVUeXBlOiBUaW1lbGluZVR5cGU7XG4gIEBJbnB1dCgpIG9taXRQcm9wZXJ0aWVzOiBPbWl0U2VsZWN0b3JQcm9wZXJ0aWVzID0ge307XG4gIEBJbnB1dCgpIHNlbGVjdGVkSXRlbXM6IEFsYXJtT3JFdmVudFtdID0gW107XG4gIGZvcm1Hcm91cDogRm9ybUdyb3VwO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgYWxhcm1FdmVudEF0dHJpYnV0ZXNGb3JtU2VydmljZTogQWxhcm1FdmVudEF0dHJpYnV0ZXNGb3JtU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5mb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIGZpbHRlcnM6IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgICB0eXBlOiBbXG4gICAgICAgICAgJycsXG4gICAgICAgICAgW1xuICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcbiAgICAgICAgICAgIHRoaXMuYWxhcm1FdmVudEF0dHJpYnV0ZXNGb3JtU2VydmljZS5kdXBsaWNhdGVUeXBlVmFsaWRhdG9yKHRoaXMuc2VsZWN0ZWRJdGVtcylcbiAgICAgICAgICBdXG4gICAgICAgIF1cbiAgICAgIH0pLFxuICAgICAgdGltZWxpbmVUeXBlOiAnJ1xuICAgIH0pO1xuXG4gICAgaWYgKCF0aGlzLm9taXRQcm9wZXJ0aWVzLmxhYmVsKSB7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5hZGRDb250cm9sKCdsYWJlbCcsIG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCkpO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlKF9jb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXA/LnZhbGlkID8gbnVsbCA6IHsgZm9ybUludmFsaWQ6IHt9IH07XG4gIH1cblxuICB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XG4gICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZShvYmopO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5mb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnN1YnNjcmliZShmbik7XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5mb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGZuKTtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlzRGlzYWJsZWQgPyB0aGlzLmZvcm1Hcm91cC5kaXNhYmxlKCkgOiB0aGlzLmZvcm1Hcm91cC5lbmFibGUoKTtcbiAgfVxufVxuIiwiPGRpdiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxuICA8Yzh5LWZvcm0tZ3JvdXAgKm5nSWY9XCJmb3JtR3JvdXAuY29udHJvbHMubGFiZWxcIj5cbiAgICA8bGFiZWwgY2xhc3M9XCJtLTBcIj57eyAnTGFiZWwnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgICA8aW5wdXRcbiAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZsZXgtZ3Jvd1wiXG4gICAgICBuYW1lPVwibGFiZWxcIlxuICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibGFiZWxcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cIlxuICAgICAgICAnZS5nLiB7eyBleGFtcGxlIH19J1xuICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBleGFtcGxlOiB0aW1lbGluZVR5cGUgPT09ICdBTEFSTScgPyAnQWxhcm0gdW5hdmFpbGFibGUnIDogJ0xvY2F0aW9uIHVwZGF0ZSdcbiAgICAgICAgICAgICAgfVxuICAgICAgXCJcbiAgICAvPlxuICA8L2M4eS1mb3JtLWdyb3VwPlxuXG4gIDxkaXYgZm9ybUdyb3VwTmFtZT1cImZpbHRlcnNcIj5cbiAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJtLTBcIj57eyAnVHlwZScgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICAgICAgPGlucHV0XG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZsZXgtZ3Jvd1wiXG4gICAgICAgIG5hbWU9XCJ0eXBlXCJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidHlwZVwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAnZS5nLiB7eyBleGFtcGxlIH19J1xuICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICBleGFtcGxlOlxuICAgICAgICAgICAgICAgICAgICB0aW1lbGluZVR5cGUgPT09ICdBTEFSTScgPyAnYzh5X1VuYXZhaWxhYmlsaXR5QWxhcm0nIDogJ2M4eV9Mb2NhdGlvblVwZGF0ZSdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgIFwiXG4gICAgICAvPlxuICAgICAgPGM4eS1tZXNzYWdlcz5cbiAgICAgICAgPGM4eS1tZXNzYWdlXG4gICAgICAgICAgbmFtZT1cImR1cGxpY2F0ZVR5cGVcIlxuICAgICAgICAgIFt0ZXh0XT1cIidUeXBlIGFscmVhZHkgdXNlZC4nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgPjwvYzh5LW1lc3NhZ2U+XG4gICAgICA8L2M4eS1tZXNzYWdlcz5cbiAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -0,0 +1,20 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class AlarmEventAttributesFormService {
4
+ duplicateTypeValidator(selectedItems) {
5
+ return (control) => {
6
+ if (!control.value || !selectedItems?.length) {
7
+ return null;
8
+ }
9
+ const isDuplicate = selectedItems.some(item => item.filters?.type?.toLowerCase() === control.value.toLowerCase());
10
+ return isDuplicate ? { duplicateType: true } : null;
11
+ };
12
+ }
13
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AlarmEventAttributesFormService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
14
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AlarmEventAttributesFormService, providedIn: 'root' }); }
15
+ }
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AlarmEventAttributesFormService, decorators: [{
17
+ type: Injectable,
18
+ args: [{ providedIn: 'root' }]
19
+ }] });
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm0tZXZlbnQtYXR0cmlidXRlcy1mb3JtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9hbGFybS1ldmVudC1zZWxlY3Rvci9hbGFybS1ldmVudC1hdHRyaWJ1dGVzLWZvcm0vYWxhcm0tZXZlbnQtYXR0cmlidXRlcy1mb3JtLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLM0MsTUFBTSxPQUFPLCtCQUErQjtJQUMxQyxzQkFBc0IsQ0FBQyxhQUE2QjtRQUNsRCxPQUFPLENBQUMsT0FBd0IsRUFBMkIsRUFBRTtZQUMzRCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsQ0FBQztnQkFDN0MsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBQ0QsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FDcEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUMxRSxDQUFDO1lBQ0YsT0FBTyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDdEQsQ0FBQyxDQUFDO0lBQ0osQ0FBQzs4R0FYVSwrQkFBK0I7a0hBQS9CLCtCQUErQixjQURsQixNQUFNOzsyRkFDbkIsK0JBQStCO2tCQUQzQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFsYXJtT3JFdmVudCB9IGZyb20gJy4uL2FsYXJtLWV2ZW50LXNlbGVjdG9yLm1vZGVsJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBBbGFybUV2ZW50QXR0cmlidXRlc0Zvcm1TZXJ2aWNlIHtcbiAgZHVwbGljYXRlVHlwZVZhbGlkYXRvcihzZWxlY3RlZEl0ZW1zOiBBbGFybU9yRXZlbnRbXSkge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgaWYgKCFjb250cm9sLnZhbHVlIHx8ICFzZWxlY3RlZEl0ZW1zPy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBpc0R1cGxpY2F0ZSA9IHNlbGVjdGVkSXRlbXMuc29tZShcbiAgICAgICAgaXRlbSA9PiBpdGVtLmZpbHRlcnM/LnR5cGU/LnRvTG93ZXJDYXNlKCkgPT09IGNvbnRyb2wudmFsdWUudG9Mb3dlckNhc2UoKVxuICAgICAgKTtcbiAgICAgIHJldHVybiBpc0R1cGxpY2F0ZSA/IHsgZHVwbGljYXRlVHlwZTogdHJ1ZSB9IDogbnVsbDtcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -87,7 +87,7 @@ export class AlarmEventSelectorListItemComponent {
87
87
  useExisting: forwardRef(() => AlarmEventSelectorListItemComponent),
88
88
  multi: true
89
89
  }
90
- ], ngImport: i0, template: "<c8y-li\n class=\"c8y-list__item__collapse--container-small\"\n [formGroup]=\"formGroup\"\n #li\n>\n <c8y-li-drag-handle><ng-content select=\"c8y-li-drag-handle\"></ng-content></c8y-li-drag-handle>\n <c8y-li-icon\n class=\"a-s-center p-r-4\"\n *ngIf=\"showAddRemoveButton\"\n >\n <button\n class=\"btn btn-clean text-primary\"\n [title]=\"'Remove' | translate\"\n *ngIf=\"isSelected\"\n (click)=\"addOrRemoveItem()\"\n >\n <i\n class=\"text-danger\"\n c8yIcon=\"minus-circle\"\n ></i>\n </button>\n <button\n class=\"btn btn-clean text-primary\"\n [title]=\"'Select' | translate\"\n *ngIf=\"!isSelected\"\n (click)=\"addOrRemoveItem()\"\n [disabled]=\"(valid$ | async) === false\"\n >\n <i\n class=\"text-primary\"\n c8yIcon=\"plus-circle\"\n ></i>\n </button>\n </c8y-li-icon>\n\n <c8y-li-checkbox\n class=\"a-s-center p-r-0\"\n *ngIf=\"showActiveToggle\"\n [displayAsSwitch]=\"displayAsSwitch\"\n formControlName=\"__active\"\n (click)=\"$event.stopPropagation()\"\n ></c8y-li-checkbox>\n\n <div class=\"d-flex a-i-center p-l-4\">\n <div\n class=\"c8y-list__item__colorpicker p-t-0 p-b-0 p-l-0\"\n [title]=\"colorPickerTitle | translate\"\n >\n <div\n class=\"c8y-colorpicker\"\n [ngClass]=\"{\n 'c8y-colorpicker--alarm': timelineType === 'ALARM',\n 'c8y-colorpicker--event': timelineType === 'EVENT'\n }\"\n >\n <input\n [ngStyle]=\"{ 'pointer-events': allowItemEdit && !omitProperties.color ? 'auto' : 'none' }\"\n type=\"color\"\n formControlName=\"color\"\n (click)=\"$event.stopPropagation()\"\n />\n <span\n class=\"circle-icon-wrapper\"\n [ngStyle]=\"{ 'background-color': formGroup.value.color }\"\n >\n <i\n class=\"stroked-icon\"\n [c8yIcon]=\"timelineType === 'EVENT' ? 'c8y-events' : 'bell'\"\n ></i>\n </span>\n </div>\n </div>\n <button\n class=\"btn-clean text-truncate\"\n [title]=\"formGroup.value.details?.label\"\n (click)=\"\n allowItemEdit\n ? (li.collapsed = !li.collapsed)\n : showActiveToggle\n ? toggleActive()\n : addOrRemoveItem()\n \"\n >\n <span class=\"text-truncate\">\n <c8y-highlight\n [text]=\"\n omitProperties.label\n ? formGroup.value.details?.filters?.type\n : formGroup.value.details?.label\n \"\n [pattern]=\"highlightText\"\n [shouldTrimPattern]=\"true\"\n ></c8y-highlight>\n </span>\n <small\n class=\"text-truncate text-muted icon-flex\"\n *ngIf=\"formGroup.value.__target && !hideSource\"\n >\n <i c8yIcon=\"exchange\"></i>\n <span class=\"text-truncate\">{{ formGroup.value.__target.name }}</span>\n </small>\n </button>\n\n <button\n class=\"btn-dot btn-dot--danger m-l-auto\"\n title=\"{{ 'Invalid entries' | translate }}\"\n [popover]=\"'Some entries are invalid. Check the required input fields.' | translate\"\n container=\"body\"\n *ngIf=\"(valid$ | async) === false && li.collapsed\"\n [outsideClick]=\"true\"\n >\n <i c8yIcon=\"exclamation-circle\"></i>\n </button>\n </div>\n\n <c8y-li-action\n [icon]=\"'minus-circle'\"\n *ngIf=\"optionToRemove\"\n [label]=\"'Remove from list' | translate\"\n (click)=\"remove()\"\n ></c8y-li-action>\n <c8y-li-collapse *ngIf=\"allowItemEdit\">\n <div class=\"data-point-details\">\n <c8y-alarm-event-attributes-form\n formControlName=\"details\"\n [timelineType]=\"timelineType\"\n [omitProperties]=\"omitProperties\"\n ></c8y-alarm-event-attributes-form>\n </div>\n </c8y-li-collapse>\n</c8y-li>\n", dependencies: [{ kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.HighlightComponent, selector: "c8y-highlight", inputs: ["pattern", "text", "elementClass", "shouldTrimPattern"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: i2.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i2.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i2.ListItemActionComponent, selector: "c8y-list-item-action, c8y-li-action", inputs: ["label", "icon", "disabled"], outputs: ["click"] }, { kind: "component", type: i2.ListItemCollapseComponent, selector: "c8y-list-item-collapse, c8y-li-collapse", inputs: ["collapseWay"] }, { kind: "component", type: i2.ListItemCheckboxComponent, selector: "c8y-list-item-checkbox, c8y-li-checkbox", inputs: ["selected", "indeterminate", "disabled", "displayAsSwitch"], outputs: ["onSelect"] }, { kind: "component", type: i2.ListItemDragHandleComponent, selector: "c8y-list-item-drag-handle, c8y-li-drag-handle" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "component", type: i5.AlarmEventAttributesFormComponent, selector: "c8y-alarm-event-attributes-form", inputs: ["timelineType", "omitProperties"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] }); }
90
+ ], ngImport: i0, template: "<c8y-li\n class=\"c8y-list__item__collapse--container-small\"\n [formGroup]=\"formGroup\"\n #li\n>\n <c8y-li-drag-handle><ng-content select=\"c8y-li-drag-handle\"></ng-content></c8y-li-drag-handle>\n <c8y-li-icon\n class=\"a-s-center p-r-4\"\n *ngIf=\"showAddRemoveButton\"\n >\n <button\n class=\"btn btn-clean text-primary\"\n [title]=\"'Remove' | translate\"\n *ngIf=\"isSelected\"\n (click)=\"addOrRemoveItem()\"\n >\n <i\n class=\"text-danger\"\n c8yIcon=\"minus-circle\"\n ></i>\n </button>\n <button\n class=\"btn btn-clean text-primary\"\n [title]=\"'Select' | translate\"\n *ngIf=\"!isSelected\"\n (click)=\"addOrRemoveItem()\"\n [disabled]=\"(valid$ | async) === false\"\n >\n <i\n class=\"text-primary\"\n c8yIcon=\"plus-circle\"\n ></i>\n </button>\n </c8y-li-icon>\n\n <c8y-li-checkbox\n class=\"a-s-center p-r-0\"\n *ngIf=\"showActiveToggle\"\n [displayAsSwitch]=\"displayAsSwitch\"\n formControlName=\"__active\"\n (click)=\"$event.stopPropagation()\"\n ></c8y-li-checkbox>\n\n <div class=\"d-flex a-i-center p-l-4\">\n <div\n class=\"c8y-list__item__colorpicker p-t-0 p-b-0 p-l-0\"\n [title]=\"colorPickerTitle | translate\"\n >\n <div\n class=\"c8y-colorpicker\"\n [ngClass]=\"{\n 'c8y-colorpicker--alarm': timelineType === 'ALARM',\n 'c8y-colorpicker--event': timelineType === 'EVENT'\n }\"\n >\n <input\n [ngStyle]=\"{ 'pointer-events': allowItemEdit && !omitProperties.color ? 'auto' : 'none' }\"\n type=\"color\"\n formControlName=\"color\"\n (click)=\"$event.stopPropagation()\"\n />\n <span\n class=\"circle-icon-wrapper\"\n [ngStyle]=\"{ 'background-color': formGroup.value.color }\"\n >\n <i\n class=\"stroked-icon\"\n [c8yIcon]=\"timelineType === 'EVENT' ? 'c8y-events' : 'bell'\"\n ></i>\n </span>\n </div>\n </div>\n <button\n class=\"btn-clean text-truncate\"\n [title]=\"formGroup.value.details?.label\"\n (click)=\"\n allowItemEdit\n ? (li.collapsed = !li.collapsed)\n : showActiveToggle\n ? toggleActive()\n : addOrRemoveItem()\n \"\n >\n <span class=\"text-truncate\">\n <c8y-highlight\n [text]=\"\n omitProperties.label\n ? formGroup.value.details?.filters?.type\n : formGroup.value.details?.label\n \"\n [pattern]=\"highlightText\"\n [shouldTrimPattern]=\"true\"\n ></c8y-highlight>\n </span>\n <small\n class=\"text-truncate text-muted icon-flex\"\n *ngIf=\"formGroup.value.__target && !hideSource\"\n >\n <i c8yIcon=\"exchange\"></i>\n <span class=\"text-truncate\">{{ formGroup.value.__target.name }}</span>\n </small>\n </button>\n\n <button\n class=\"btn-dot btn-dot--danger m-l-auto\"\n title=\"{{ 'Invalid entries' | translate }}\"\n [popover]=\"'Some entries are invalid. Check the required input fields.' | translate\"\n container=\"body\"\n *ngIf=\"(valid$ | async) === false && li.collapsed\"\n [outsideClick]=\"true\"\n >\n <i c8yIcon=\"exclamation-circle\"></i>\n </button>\n </div>\n\n <c8y-li-action\n [icon]=\"'minus-circle'\"\n *ngIf=\"optionToRemove\"\n [label]=\"'Remove from list' | translate\"\n (click)=\"remove()\"\n ></c8y-li-action>\n <c8y-li-collapse *ngIf=\"allowItemEdit\">\n <div class=\"data-point-details\">\n <c8y-alarm-event-attributes-form\n formControlName=\"details\"\n [timelineType]=\"timelineType\"\n [omitProperties]=\"omitProperties\"\n ></c8y-alarm-event-attributes-form>\n </div>\n </c8y-li-collapse>\n</c8y-li>\n", dependencies: [{ kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.HighlightComponent, selector: "c8y-highlight", inputs: ["pattern", "text", "elementClass", "shouldTrimPattern"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: i2.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i2.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i2.ListItemActionComponent, selector: "c8y-list-item-action, c8y-li-action", inputs: ["label", "icon", "disabled"], outputs: ["click"] }, { kind: "component", type: i2.ListItemCollapseComponent, selector: "c8y-list-item-collapse, c8y-li-collapse", inputs: ["collapseWay"] }, { kind: "component", type: i2.ListItemCheckboxComponent, selector: "c8y-list-item-checkbox, c8y-li-checkbox", inputs: ["selected", "indeterminate", "disabled", "displayAsSwitch"], outputs: ["onSelect"] }, { kind: "component", type: i2.ListItemDragHandleComponent, selector: "c8y-list-item-drag-handle, c8y-li-drag-handle" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "component", type: i5.AlarmEventAttributesFormComponent, selector: "c8y-alarm-event-attributes-form", inputs: ["timelineType", "omitProperties", "selectedItems"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] }); }
91
91
  }
92
92
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AlarmEventSelectorListItemComponent, decorators: [{
93
93
  type: Component,
@@ -112,7 +112,7 @@ export class AlarmEventSelectorComponent {
112
112
  multi: true,
113
113
  useExisting: forwardRef(() => AlarmEventSelectorComponent)
114
114
  }
115
- ], ngImport: i0, template: "<div\n class=\"d-grid grid__row--1 fit-h\"\n [ngClass]=\"{\n 'grid__col--3-6-3--md': allowChangingContext,\n 'grid__col--8-4--md': !allowChangingContext\n }\"\n>\n <div\n class=\"d-flex d-col p-relative bg-level-1\"\n *ngIf=\"allowChangingContext\"\n >\n <c8y-asset-selector-miller\n class=\"d-contents\"\n [(ngModel)]=\"contextAsset\"\n [asset]=\"contextAsset\"\n (onSelected)=\"assetSelectionChanged($event)\"\n [container]=\"''\"\n [config]=\"{\n view: 'miller',\n groupsSelectable: groupsSelectable,\n columnHeaders: true,\n showChildDevices: true,\n showUnassignedDevices: true,\n singleColumn: true,\n search: allowSearch,\n showFilter: true\n }\"\n ></c8y-asset-selector-miller>\n </div>\n <!-- center column -->\n <div class=\"inner-scroll bg-component\" data-cy=\"c8y-alarm-event-selector--inner-column\">\n <ng-template #noDeviceEmptyState>\n <div class=\"p-16\">\n <c8y-ui-empty-state\n [icon]=\"timelineTypeTexts.emptyStateIcon\"\n [title]=\"timelineTypeTexts.emptyStateTitle | translate\"\n [subtitle]=\"timelineTypeTexts.assetWithNoItemsEmptyStateSubtitle | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n </ng-template>\n\n <ng-template #loadingData>\n <div class=\"p-16 text-center\">\n <c8y-loading></c8y-loading>\n </div>\n </ng-template>\n\n <div\n class=\"bg-inherit\"\n *ngIf=\"assetSelection | async as asset; else noDeviceEmptyState\"\n >\n <div class=\"p-l-16 p-r-16 p-t-8 p-b-8 sticky-top bg-inherit separator-bottom\">\n <p\n class=\"text-medium text-truncate\"\n [title]=\"timelineTypeTexts.availableItemsTitle | translate\"\n >\n {{ timelineTypeTexts.availableItemsTitle | translate }}\n </p>\n <div class=\"d-flex\">\n <div\n class=\"input-group input-group-search m-t-4\"\n id=\"search\"\n *ngIf=\"!(loadingItems$ | async)\"\n >\n <input\n class=\"form-control\"\n placeholder=\"Filter\u2026\"\n type=\"search\"\n [ngModel]=\"filterString\"\n (ngModelChange)=\"filterStringChanged($event)\"\n />\n <span class=\"input-group-addon\">\n <i\n c8yIcon=\"search\"\n *ngIf=\"!filterString; else clearFilterString\"\n ></i>\n <ng-template #clearFilterString>\n <i\n class=\"text-muted\"\n c8yIcon=\"times\"\n *ngIf=\"filterString\"\n (click)=\"filterStringChanged()\"\n ></i>\n </ng-template>\n </span>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"filteredItems$ | async as filteredItems; else loadingData\">\n <ng-container *ngIf=\"!(loadingItems$ | async); else loadingData\">\n <ng-container *ngIf=\"items$ | async as items\">\n <div class=\"p-16 bg-level-2 separator-bottom\">\n <div>\n <p>\n <i\n class=\"text-info m-r-4\"\n c8yIcon=\"info-circle\"\n ></i>\n <strong>{{ timelineTypeTexts.recentItemsWarningTitle | translate }}</strong>\n </p>\n <p>\n {{ timelineTypeTexts.recentItemsWarningText | translate }}\n {{ timelineTypeTexts.addCustomText | translate }}\n </p>\n </div>\n <div class=\"p-t-16\">\n <button\n class=\"btn btn-default btn-sm\"\n aria-controls=\"collapseCustomItemForm\"\n [attr.aria-expanded]=\"isExpanded\"\n (click)=\"isExpanded = !isExpanded\"\n >\n {{ timelineTypeTexts.addCustomItemButtonLabel | translate }}\n </button>\n <div\n class=\"collapse\"\n id=\"collapseCustomItemForm\"\n [collapse]=\"!isExpanded\"\n [isAnimated]=\"true\"\n >\n <div [style.min-height]=\"'230px'\">\n <c8y-custom-alarm-event-form\n class=\"d-block\"\n *ngIf=\"isExpanded\"\n [timelineType]=\"timelineType\"\n [target]=\"assetSelection | async\"\n [omitProperties]=\"omitProperties\"\n [defaultColor]=\"defaultColor\"\n (added)=\"itemAdded($event); isExpanded = false\"\n (cancel)=\"isExpanded = false\"\n ></c8y-custom-alarm-event-form>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"p-16\"\n *ngIf=\"!filteredItems.length\"\n >\n <c8y-ui-empty-state\n [icon]=\"timelineTypeTexts.emptyStateIcon\"\n [title]=\"timelineTypeTexts.emptyStateTitle | translate\"\n [subtitle]=\"\n items.length\n ? ('Try another filter term.' | translate)\n : (timelineTypeTexts.assetWithNoItemsEmptyStateSubtitle | translate)\n \"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n\n <c8y-list-group>\n <c8y-list-item\n class=\"sticky-top\"\n style=\"top: 72px\"\n *ngIf=\"items.length > maxNumberOfItems && filteredItems.length >= maxNumberOfItems\"\n >\n <div class=\"alert alert-warning m-b-0\">\n {{ timelineTypeTexts.largeNumberOfItemsInfo | translate }}\n </div>\n </c8y-list-item>\n <c8y-alarm-event-selector-list-item\n class=\"d-contents\"\n [ngModel]=\"item\"\n [isSelected]=\"selectedItems | includesAlarmOrEvent: item\"\n (added)=\"itemAdded($event)\"\n (removed)=\"itemRemoved($event)\"\n [highlightText]=\"filterStringChanges$ | async\"\n [timelineType]=\"timelineType\"\n [hideSource]=\"hideSource\"\n *ngFor=\"let item of filteredItems; trackBy: trackByFn\"\n ></c8y-alarm-event-selector-list-item>\n </c8y-list-group>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <!-- last column -->\n <div class=\"inner-scroll bg-level-1\">\n <p\n class=\"text-medium m-b-4 p-l-16 p-r-16 p-t-8 p-b-8 separator-bottom sticky-top text-truncate\"\n [title]=\"timelineTypeTexts.selectedItemsTitle | translate\"\n >\n {{ timelineTypeTexts.selectedItemsTitle | translate }}\n </p>\n <div class=\"d-flex flex-wrap gap-8 p-l-16 p-r-16 p-b-16\">\n <c8y-ui-empty-state\n [icon]=\"timelineTypeTexts.emptyStateIcon\"\n [title]=\"timelineTypeTexts.noSelectedItemsTitle | translate\"\n *ngIf=\"!selectedItems || !selectedItems.length\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n\n <div\n [ngClass]=\"{\n 'c8y-alarm-pill': timelineType === 'ALARM',\n 'c8y-event-pill': timelineType === 'EVENT'\n }\"\n *ngFor=\"let selectedItem of selectedItems\"\n >\n <button\n [title]=\"'Remove' | translate\"\n type=\"button\"\n [ngClass]=\"{\n 'c8y-alarm-pill__btn': timelineType === 'ALARM',\n 'c8y-event-pill__btn': timelineType === 'EVENT'\n }\"\n (click)=\"itemRemoved(selectedItem)\"\n >\n <i\n class=\"icon-14\"\n c8yIcon=\"remove\"\n ></i>\n </button>\n <div\n class=\"c8y-datapoint-pill__label\"\n [title]=\"selectedItem.label || selectedItem.filters.type\"\n >\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small m-r-4\"\n [style.background-color]=\"selectedItem.color || defaultColor\"\n >\n <i\n class=\"stroked-icon\"\n [c8yIcon]=\"timelineType === 'ALARM' ? 'bell' : 'c8y-events'\"\n ></i>\n </span>\n <span class=\"text-truncate\">\n <span class=\"text-truncate\">{{ selectedItem.label || selectedItem.filters.type }}</span>\n <small\n class=\"text-muted text-10\"\n *ngIf=\"!hideSource && selectedItem?.__target?.name\"\n >\n {{ selectedItem?.__target?.name }}\n </small>\n </span>\n </div>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i2.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i2.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i5.MillerViewComponent, selector: "c8y-asset-selector-miller", inputs: ["config", "asset", "selectedDevice", "rootNode", "container"], outputs: ["onSelected", "onClearSelected"] }, { kind: "directive", type: i6.CollapseDirective, selector: "[collapse]", inputs: ["display", "isAnimated", "collapse"], outputs: ["collapsed", "collapses", "expanded", "expands"], exportAs: ["bs-collapse"] }, { kind: "component", type: i7.AlarmEventSelectorListItemComponent, selector: "c8y-alarm-event-selector-list-item", inputs: ["timelineType", "highlightText", "showAddRemoveButton", "isSelected", "optionToRemove", "showActiveToggle", "allowItemEdit", "hideSource", "displayAsSwitch", "omitProperties"], outputs: ["added", "removed"] }, { kind: "component", type: i8.CustomAlarmEventFormComponent, selector: "c8y-custom-alarm-event-form", inputs: ["timelineType", "target", "omitProperties", "defaultColor"], outputs: ["added", "cancel"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i9.IncludesAlarmOrEventPipe, name: "includesAlarmOrEvent" }] }); }
115
+ ], ngImport: i0, template: "<div\n class=\"d-grid grid__row--1 fit-h\"\n [ngClass]=\"{\n 'grid__col--3-6-3--md': allowChangingContext,\n 'grid__col--8-4--md': !allowChangingContext\n }\"\n>\n <div\n class=\"d-flex d-col p-relative bg-level-1\"\n *ngIf=\"allowChangingContext\"\n >\n <c8y-asset-selector-miller\n class=\"d-contents\"\n [(ngModel)]=\"contextAsset\"\n [asset]=\"contextAsset\"\n (onSelected)=\"assetSelectionChanged($event)\"\n [container]=\"''\"\n [config]=\"{\n view: 'miller',\n groupsSelectable: groupsSelectable,\n columnHeaders: true,\n showChildDevices: true,\n showUnassignedDevices: true,\n singleColumn: true,\n search: allowSearch,\n showFilter: true\n }\"\n ></c8y-asset-selector-miller>\n </div>\n <!-- center column -->\n <div class=\"inner-scroll bg-component\" data-cy=\"c8y-alarm-event-selector--inner-column\">\n <ng-template #noDeviceEmptyState>\n <div class=\"p-16\">\n <c8y-ui-empty-state\n [icon]=\"timelineTypeTexts.emptyStateIcon\"\n [title]=\"timelineTypeTexts.emptyStateTitle | translate\"\n [subtitle]=\"timelineTypeTexts.assetWithNoItemsEmptyStateSubtitle | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n </ng-template>\n\n <ng-template #loadingData>\n <div class=\"p-16 text-center\">\n <c8y-loading></c8y-loading>\n </div>\n </ng-template>\n\n <div\n class=\"bg-inherit\"\n *ngIf=\"assetSelection | async as asset; else noDeviceEmptyState\"\n >\n <div class=\"p-l-16 p-r-16 p-t-8 p-b-8 sticky-top bg-inherit separator-bottom\">\n <p\n class=\"text-medium text-truncate\"\n [title]=\"timelineTypeTexts.availableItemsTitle | translate\"\n >\n {{ timelineTypeTexts.availableItemsTitle | translate }}\n </p>\n <div class=\"d-flex\">\n <div\n class=\"input-group input-group-search m-t-4\"\n id=\"search\"\n *ngIf=\"!(loadingItems$ | async)\"\n >\n <input\n class=\"form-control\"\n placeholder=\"Filter\u2026\"\n type=\"search\"\n [ngModel]=\"filterString\"\n (ngModelChange)=\"filterStringChanged($event)\"\n />\n <span class=\"input-group-addon\">\n <i\n c8yIcon=\"search\"\n *ngIf=\"!filterString; else clearFilterString\"\n ></i>\n <ng-template #clearFilterString>\n <i\n class=\"text-muted\"\n c8yIcon=\"times\"\n *ngIf=\"filterString\"\n (click)=\"filterStringChanged()\"\n ></i>\n </ng-template>\n </span>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"filteredItems$ | async as filteredItems; else loadingData\">\n <ng-container *ngIf=\"!(loadingItems$ | async); else loadingData\">\n <ng-container *ngIf=\"items$ | async as items\">\n <div class=\"p-16 bg-level-2 separator-bottom\">\n <div>\n <p>\n <i\n class=\"text-info m-r-4\"\n c8yIcon=\"info-circle\"\n ></i>\n <strong>{{ timelineTypeTexts.recentItemsWarningTitle | translate }}</strong>\n </p>\n <p>\n {{ timelineTypeTexts.recentItemsWarningText | translate }}\n {{ timelineTypeTexts.addCustomText | translate }}\n </p>\n </div>\n <div class=\"p-t-16\">\n <button\n class=\"btn btn-default btn-sm\"\n aria-controls=\"collapseCustomItemForm\"\n [attr.aria-expanded]=\"isExpanded\"\n (click)=\"isExpanded = !isExpanded\"\n >\n {{ timelineTypeTexts.addCustomItemButtonLabel | translate }}\n </button>\n <div\n class=\"collapse\"\n id=\"collapseCustomItemForm\"\n [collapse]=\"!isExpanded\"\n [isAnimated]=\"true\"\n >\n <div [style.min-height]=\"'230px'\">\n <c8y-custom-alarm-event-form\n class=\"d-block\"\n *ngIf=\"isExpanded\"\n [timelineType]=\"timelineType\"\n [target]=\"assetSelection | async\"\n [omitProperties]=\"omitProperties\"\n [defaultColor]=\"defaultColor\"\n (added)=\"itemAdded($event); isExpanded = false\"\n (cancel)=\"isExpanded = false\"\n [selectedItems]=\"selectedItems\"\n ></c8y-custom-alarm-event-form>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"p-16\"\n *ngIf=\"!filteredItems.length\"\n >\n <c8y-ui-empty-state\n [icon]=\"timelineTypeTexts.emptyStateIcon\"\n [title]=\"timelineTypeTexts.emptyStateTitle | translate\"\n [subtitle]=\"\n items.length\n ? ('Try another filter term.' | translate)\n : (timelineTypeTexts.assetWithNoItemsEmptyStateSubtitle | translate)\n \"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n\n <c8y-list-group>\n <c8y-list-item\n class=\"sticky-top\"\n style=\"top: 72px\"\n *ngIf=\"items.length > maxNumberOfItems && filteredItems.length >= maxNumberOfItems\"\n >\n <div class=\"alert alert-warning m-b-0\">\n {{ timelineTypeTexts.largeNumberOfItemsInfo | translate }}\n </div>\n </c8y-list-item>\n <c8y-alarm-event-selector-list-item\n class=\"d-contents\"\n [ngModel]=\"item\"\n [isSelected]=\"selectedItems | includesAlarmOrEvent: item\"\n (added)=\"itemAdded($event)\"\n (removed)=\"itemRemoved($event)\"\n [highlightText]=\"filterStringChanges$ | async\"\n [timelineType]=\"timelineType\"\n [hideSource]=\"hideSource\"\n *ngFor=\"let item of filteredItems; trackBy: trackByFn\"\n ></c8y-alarm-event-selector-list-item>\n </c8y-list-group>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <!-- last column -->\n <div class=\"inner-scroll bg-level-1\">\n <p\n class=\"text-medium m-b-4 p-l-16 p-r-16 p-t-8 p-b-8 separator-bottom sticky-top text-truncate\"\n [title]=\"timelineTypeTexts.selectedItemsTitle | translate\"\n >\n {{ timelineTypeTexts.selectedItemsTitle | translate }}\n </p>\n <div class=\"d-flex flex-wrap gap-8 p-l-16 p-r-16 p-b-16\">\n <c8y-ui-empty-state\n [icon]=\"timelineTypeTexts.emptyStateIcon\"\n [title]=\"timelineTypeTexts.noSelectedItemsTitle | translate\"\n *ngIf=\"!selectedItems || !selectedItems.length\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n\n <div\n [ngClass]=\"{\n 'c8y-alarm-pill': timelineType === 'ALARM',\n 'c8y-event-pill': timelineType === 'EVENT'\n }\"\n *ngFor=\"let selectedItem of selectedItems\"\n >\n <button\n [title]=\"'Remove' | translate\"\n type=\"button\"\n [ngClass]=\"{\n 'c8y-alarm-pill__btn': timelineType === 'ALARM',\n 'c8y-event-pill__btn': timelineType === 'EVENT'\n }\"\n (click)=\"itemRemoved(selectedItem)\"\n >\n <i\n class=\"icon-14\"\n c8yIcon=\"remove\"\n ></i>\n </button>\n <div\n class=\"c8y-datapoint-pill__label\"\n [title]=\"selectedItem.label || selectedItem.filters.type\"\n >\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small m-r-4\"\n [style.background-color]=\"selectedItem.color || defaultColor\"\n >\n <i\n class=\"stroked-icon\"\n [c8yIcon]=\"timelineType === 'ALARM' ? 'bell' : 'c8y-events'\"\n ></i>\n </span>\n <span class=\"text-truncate\">\n <span class=\"text-truncate\">{{ selectedItem.label || selectedItem.filters.type }}</span>\n <small\n class=\"text-muted text-10\"\n *ngIf=\"!hideSource && selectedItem?.__target?.name\"\n >\n {{ selectedItem?.__target?.name }}\n </small>\n </span>\n </div>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i2.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i2.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i5.MillerViewComponent, selector: "c8y-asset-selector-miller", inputs: ["config", "asset", "selectedDevice", "rootNode", "container"], outputs: ["onSelected", "onClearSelected"] }, { kind: "directive", type: i6.CollapseDirective, selector: "[collapse]", inputs: ["display", "isAnimated", "collapse"], outputs: ["collapsed", "collapses", "expanded", "expands"], exportAs: ["bs-collapse"] }, { kind: "component", type: i7.AlarmEventSelectorListItemComponent, selector: "c8y-alarm-event-selector-list-item", inputs: ["timelineType", "highlightText", "showAddRemoveButton", "isSelected", "optionToRemove", "showActiveToggle", "allowItemEdit", "hideSource", "displayAsSwitch", "omitProperties"], outputs: ["added", "removed"] }, { kind: "component", type: i8.CustomAlarmEventFormComponent, selector: "c8y-custom-alarm-event-form", inputs: ["timelineType", "target", "omitProperties", "selectedItems", "defaultColor"], outputs: ["added", "cancel"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i9.IncludesAlarmOrEventPipe, name: "includesAlarmOrEvent" }] }); }
116
116
  }
117
117
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AlarmEventSelectorComponent, decorators: [{
118
118
  type: Component,
@@ -122,7 +122,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
122
122
  multi: true,
123
123
  useExisting: forwardRef(() => AlarmEventSelectorComponent)
124
124
  }
125
- ], template: "<div\n class=\"d-grid grid__row--1 fit-h\"\n [ngClass]=\"{\n 'grid__col--3-6-3--md': allowChangingContext,\n 'grid__col--8-4--md': !allowChangingContext\n }\"\n>\n <div\n class=\"d-flex d-col p-relative bg-level-1\"\n *ngIf=\"allowChangingContext\"\n >\n <c8y-asset-selector-miller\n class=\"d-contents\"\n [(ngModel)]=\"contextAsset\"\n [asset]=\"contextAsset\"\n (onSelected)=\"assetSelectionChanged($event)\"\n [container]=\"''\"\n [config]=\"{\n view: 'miller',\n groupsSelectable: groupsSelectable,\n columnHeaders: true,\n showChildDevices: true,\n showUnassignedDevices: true,\n singleColumn: true,\n search: allowSearch,\n showFilter: true\n }\"\n ></c8y-asset-selector-miller>\n </div>\n <!-- center column -->\n <div class=\"inner-scroll bg-component\" data-cy=\"c8y-alarm-event-selector--inner-column\">\n <ng-template #noDeviceEmptyState>\n <div class=\"p-16\">\n <c8y-ui-empty-state\n [icon]=\"timelineTypeTexts.emptyStateIcon\"\n [title]=\"timelineTypeTexts.emptyStateTitle | translate\"\n [subtitle]=\"timelineTypeTexts.assetWithNoItemsEmptyStateSubtitle | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n </ng-template>\n\n <ng-template #loadingData>\n <div class=\"p-16 text-center\">\n <c8y-loading></c8y-loading>\n </div>\n </ng-template>\n\n <div\n class=\"bg-inherit\"\n *ngIf=\"assetSelection | async as asset; else noDeviceEmptyState\"\n >\n <div class=\"p-l-16 p-r-16 p-t-8 p-b-8 sticky-top bg-inherit separator-bottom\">\n <p\n class=\"text-medium text-truncate\"\n [title]=\"timelineTypeTexts.availableItemsTitle | translate\"\n >\n {{ timelineTypeTexts.availableItemsTitle | translate }}\n </p>\n <div class=\"d-flex\">\n <div\n class=\"input-group input-group-search m-t-4\"\n id=\"search\"\n *ngIf=\"!(loadingItems$ | async)\"\n >\n <input\n class=\"form-control\"\n placeholder=\"Filter\u2026\"\n type=\"search\"\n [ngModel]=\"filterString\"\n (ngModelChange)=\"filterStringChanged($event)\"\n />\n <span class=\"input-group-addon\">\n <i\n c8yIcon=\"search\"\n *ngIf=\"!filterString; else clearFilterString\"\n ></i>\n <ng-template #clearFilterString>\n <i\n class=\"text-muted\"\n c8yIcon=\"times\"\n *ngIf=\"filterString\"\n (click)=\"filterStringChanged()\"\n ></i>\n </ng-template>\n </span>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"filteredItems$ | async as filteredItems; else loadingData\">\n <ng-container *ngIf=\"!(loadingItems$ | async); else loadingData\">\n <ng-container *ngIf=\"items$ | async as items\">\n <div class=\"p-16 bg-level-2 separator-bottom\">\n <div>\n <p>\n <i\n class=\"text-info m-r-4\"\n c8yIcon=\"info-circle\"\n ></i>\n <strong>{{ timelineTypeTexts.recentItemsWarningTitle | translate }}</strong>\n </p>\n <p>\n {{ timelineTypeTexts.recentItemsWarningText | translate }}\n {{ timelineTypeTexts.addCustomText | translate }}\n </p>\n </div>\n <div class=\"p-t-16\">\n <button\n class=\"btn btn-default btn-sm\"\n aria-controls=\"collapseCustomItemForm\"\n [attr.aria-expanded]=\"isExpanded\"\n (click)=\"isExpanded = !isExpanded\"\n >\n {{ timelineTypeTexts.addCustomItemButtonLabel | translate }}\n </button>\n <div\n class=\"collapse\"\n id=\"collapseCustomItemForm\"\n [collapse]=\"!isExpanded\"\n [isAnimated]=\"true\"\n >\n <div [style.min-height]=\"'230px'\">\n <c8y-custom-alarm-event-form\n class=\"d-block\"\n *ngIf=\"isExpanded\"\n [timelineType]=\"timelineType\"\n [target]=\"assetSelection | async\"\n [omitProperties]=\"omitProperties\"\n [defaultColor]=\"defaultColor\"\n (added)=\"itemAdded($event); isExpanded = false\"\n (cancel)=\"isExpanded = false\"\n ></c8y-custom-alarm-event-form>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"p-16\"\n *ngIf=\"!filteredItems.length\"\n >\n <c8y-ui-empty-state\n [icon]=\"timelineTypeTexts.emptyStateIcon\"\n [title]=\"timelineTypeTexts.emptyStateTitle | translate\"\n [subtitle]=\"\n items.length\n ? ('Try another filter term.' | translate)\n : (timelineTypeTexts.assetWithNoItemsEmptyStateSubtitle | translate)\n \"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n\n <c8y-list-group>\n <c8y-list-item\n class=\"sticky-top\"\n style=\"top: 72px\"\n *ngIf=\"items.length > maxNumberOfItems && filteredItems.length >= maxNumberOfItems\"\n >\n <div class=\"alert alert-warning m-b-0\">\n {{ timelineTypeTexts.largeNumberOfItemsInfo | translate }}\n </div>\n </c8y-list-item>\n <c8y-alarm-event-selector-list-item\n class=\"d-contents\"\n [ngModel]=\"item\"\n [isSelected]=\"selectedItems | includesAlarmOrEvent: item\"\n (added)=\"itemAdded($event)\"\n (removed)=\"itemRemoved($event)\"\n [highlightText]=\"filterStringChanges$ | async\"\n [timelineType]=\"timelineType\"\n [hideSource]=\"hideSource\"\n *ngFor=\"let item of filteredItems; trackBy: trackByFn\"\n ></c8y-alarm-event-selector-list-item>\n </c8y-list-group>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <!-- last column -->\n <div class=\"inner-scroll bg-level-1\">\n <p\n class=\"text-medium m-b-4 p-l-16 p-r-16 p-t-8 p-b-8 separator-bottom sticky-top text-truncate\"\n [title]=\"timelineTypeTexts.selectedItemsTitle | translate\"\n >\n {{ timelineTypeTexts.selectedItemsTitle | translate }}\n </p>\n <div class=\"d-flex flex-wrap gap-8 p-l-16 p-r-16 p-b-16\">\n <c8y-ui-empty-state\n [icon]=\"timelineTypeTexts.emptyStateIcon\"\n [title]=\"timelineTypeTexts.noSelectedItemsTitle | translate\"\n *ngIf=\"!selectedItems || !selectedItems.length\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n\n <div\n [ngClass]=\"{\n 'c8y-alarm-pill': timelineType === 'ALARM',\n 'c8y-event-pill': timelineType === 'EVENT'\n }\"\n *ngFor=\"let selectedItem of selectedItems\"\n >\n <button\n [title]=\"'Remove' | translate\"\n type=\"button\"\n [ngClass]=\"{\n 'c8y-alarm-pill__btn': timelineType === 'ALARM',\n 'c8y-event-pill__btn': timelineType === 'EVENT'\n }\"\n (click)=\"itemRemoved(selectedItem)\"\n >\n <i\n class=\"icon-14\"\n c8yIcon=\"remove\"\n ></i>\n </button>\n <div\n class=\"c8y-datapoint-pill__label\"\n [title]=\"selectedItem.label || selectedItem.filters.type\"\n >\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small m-r-4\"\n [style.background-color]=\"selectedItem.color || defaultColor\"\n >\n <i\n class=\"stroked-icon\"\n [c8yIcon]=\"timelineType === 'ALARM' ? 'bell' : 'c8y-events'\"\n ></i>\n </span>\n <span class=\"text-truncate\">\n <span class=\"text-truncate\">{{ selectedItem.label || selectedItem.filters.type }}</span>\n <small\n class=\"text-muted text-10\"\n *ngIf=\"!hideSource && selectedItem?.__target?.name\"\n >\n {{ selectedItem?.__target?.name }}\n </small>\n </span>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
125
+ ], template: "<div\n class=\"d-grid grid__row--1 fit-h\"\n [ngClass]=\"{\n 'grid__col--3-6-3--md': allowChangingContext,\n 'grid__col--8-4--md': !allowChangingContext\n }\"\n>\n <div\n class=\"d-flex d-col p-relative bg-level-1\"\n *ngIf=\"allowChangingContext\"\n >\n <c8y-asset-selector-miller\n class=\"d-contents\"\n [(ngModel)]=\"contextAsset\"\n [asset]=\"contextAsset\"\n (onSelected)=\"assetSelectionChanged($event)\"\n [container]=\"''\"\n [config]=\"{\n view: 'miller',\n groupsSelectable: groupsSelectable,\n columnHeaders: true,\n showChildDevices: true,\n showUnassignedDevices: true,\n singleColumn: true,\n search: allowSearch,\n showFilter: true\n }\"\n ></c8y-asset-selector-miller>\n </div>\n <!-- center column -->\n <div class=\"inner-scroll bg-component\" data-cy=\"c8y-alarm-event-selector--inner-column\">\n <ng-template #noDeviceEmptyState>\n <div class=\"p-16\">\n <c8y-ui-empty-state\n [icon]=\"timelineTypeTexts.emptyStateIcon\"\n [title]=\"timelineTypeTexts.emptyStateTitle | translate\"\n [subtitle]=\"timelineTypeTexts.assetWithNoItemsEmptyStateSubtitle | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n </ng-template>\n\n <ng-template #loadingData>\n <div class=\"p-16 text-center\">\n <c8y-loading></c8y-loading>\n </div>\n </ng-template>\n\n <div\n class=\"bg-inherit\"\n *ngIf=\"assetSelection | async as asset; else noDeviceEmptyState\"\n >\n <div class=\"p-l-16 p-r-16 p-t-8 p-b-8 sticky-top bg-inherit separator-bottom\">\n <p\n class=\"text-medium text-truncate\"\n [title]=\"timelineTypeTexts.availableItemsTitle | translate\"\n >\n {{ timelineTypeTexts.availableItemsTitle | translate }}\n </p>\n <div class=\"d-flex\">\n <div\n class=\"input-group input-group-search m-t-4\"\n id=\"search\"\n *ngIf=\"!(loadingItems$ | async)\"\n >\n <input\n class=\"form-control\"\n placeholder=\"Filter\u2026\"\n type=\"search\"\n [ngModel]=\"filterString\"\n (ngModelChange)=\"filterStringChanged($event)\"\n />\n <span class=\"input-group-addon\">\n <i\n c8yIcon=\"search\"\n *ngIf=\"!filterString; else clearFilterString\"\n ></i>\n <ng-template #clearFilterString>\n <i\n class=\"text-muted\"\n c8yIcon=\"times\"\n *ngIf=\"filterString\"\n (click)=\"filterStringChanged()\"\n ></i>\n </ng-template>\n </span>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"filteredItems$ | async as filteredItems; else loadingData\">\n <ng-container *ngIf=\"!(loadingItems$ | async); else loadingData\">\n <ng-container *ngIf=\"items$ | async as items\">\n <div class=\"p-16 bg-level-2 separator-bottom\">\n <div>\n <p>\n <i\n class=\"text-info m-r-4\"\n c8yIcon=\"info-circle\"\n ></i>\n <strong>{{ timelineTypeTexts.recentItemsWarningTitle | translate }}</strong>\n </p>\n <p>\n {{ timelineTypeTexts.recentItemsWarningText | translate }}\n {{ timelineTypeTexts.addCustomText | translate }}\n </p>\n </div>\n <div class=\"p-t-16\">\n <button\n class=\"btn btn-default btn-sm\"\n aria-controls=\"collapseCustomItemForm\"\n [attr.aria-expanded]=\"isExpanded\"\n (click)=\"isExpanded = !isExpanded\"\n >\n {{ timelineTypeTexts.addCustomItemButtonLabel | translate }}\n </button>\n <div\n class=\"collapse\"\n id=\"collapseCustomItemForm\"\n [collapse]=\"!isExpanded\"\n [isAnimated]=\"true\"\n >\n <div [style.min-height]=\"'230px'\">\n <c8y-custom-alarm-event-form\n class=\"d-block\"\n *ngIf=\"isExpanded\"\n [timelineType]=\"timelineType\"\n [target]=\"assetSelection | async\"\n [omitProperties]=\"omitProperties\"\n [defaultColor]=\"defaultColor\"\n (added)=\"itemAdded($event); isExpanded = false\"\n (cancel)=\"isExpanded = false\"\n [selectedItems]=\"selectedItems\"\n ></c8y-custom-alarm-event-form>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"p-16\"\n *ngIf=\"!filteredItems.length\"\n >\n <c8y-ui-empty-state\n [icon]=\"timelineTypeTexts.emptyStateIcon\"\n [title]=\"timelineTypeTexts.emptyStateTitle | translate\"\n [subtitle]=\"\n items.length\n ? ('Try another filter term.' | translate)\n : (timelineTypeTexts.assetWithNoItemsEmptyStateSubtitle | translate)\n \"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n\n <c8y-list-group>\n <c8y-list-item\n class=\"sticky-top\"\n style=\"top: 72px\"\n *ngIf=\"items.length > maxNumberOfItems && filteredItems.length >= maxNumberOfItems\"\n >\n <div class=\"alert alert-warning m-b-0\">\n {{ timelineTypeTexts.largeNumberOfItemsInfo | translate }}\n </div>\n </c8y-list-item>\n <c8y-alarm-event-selector-list-item\n class=\"d-contents\"\n [ngModel]=\"item\"\n [isSelected]=\"selectedItems | includesAlarmOrEvent: item\"\n (added)=\"itemAdded($event)\"\n (removed)=\"itemRemoved($event)\"\n [highlightText]=\"filterStringChanges$ | async\"\n [timelineType]=\"timelineType\"\n [hideSource]=\"hideSource\"\n *ngFor=\"let item of filteredItems; trackBy: trackByFn\"\n ></c8y-alarm-event-selector-list-item>\n </c8y-list-group>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <!-- last column -->\n <div class=\"inner-scroll bg-level-1\">\n <p\n class=\"text-medium m-b-4 p-l-16 p-r-16 p-t-8 p-b-8 separator-bottom sticky-top text-truncate\"\n [title]=\"timelineTypeTexts.selectedItemsTitle | translate\"\n >\n {{ timelineTypeTexts.selectedItemsTitle | translate }}\n </p>\n <div class=\"d-flex flex-wrap gap-8 p-l-16 p-r-16 p-b-16\">\n <c8y-ui-empty-state\n [icon]=\"timelineTypeTexts.emptyStateIcon\"\n [title]=\"timelineTypeTexts.noSelectedItemsTitle | translate\"\n *ngIf=\"!selectedItems || !selectedItems.length\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n\n <div\n [ngClass]=\"{\n 'c8y-alarm-pill': timelineType === 'ALARM',\n 'c8y-event-pill': timelineType === 'EVENT'\n }\"\n *ngFor=\"let selectedItem of selectedItems\"\n >\n <button\n [title]=\"'Remove' | translate\"\n type=\"button\"\n [ngClass]=\"{\n 'c8y-alarm-pill__btn': timelineType === 'ALARM',\n 'c8y-event-pill__btn': timelineType === 'EVENT'\n }\"\n (click)=\"itemRemoved(selectedItem)\"\n >\n <i\n class=\"icon-14\"\n c8yIcon=\"remove\"\n ></i>\n </button>\n <div\n class=\"c8y-datapoint-pill__label\"\n [title]=\"selectedItem.label || selectedItem.filters.type\"\n >\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small m-r-4\"\n [style.background-color]=\"selectedItem.color || defaultColor\"\n >\n <i\n class=\"stroked-icon\"\n [c8yIcon]=\"timelineType === 'ALARM' ? 'bell' : 'c8y-events'\"\n ></i>\n </span>\n <span class=\"text-truncate\">\n <span class=\"text-truncate\">{{ selectedItem.label || selectedItem.filters.type }}</span>\n <small\n class=\"text-muted text-10\"\n *ngIf=\"!hideSource && selectedItem?.__target?.name\"\n >\n {{ selectedItem?.__target?.name }}\n </small>\n </span>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
126
126
  }], ctorParameters: () => [{ type: i1.AlarmEventSelectorService }], propDecorators: { timelineType: [{
127
127
  type: Input
128
128
  }], contextAsset: [{
@@ -142,4 +142,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
142
142
  }], selectionChange: [{
143
143
  type: Output
144
144
  }] } });
145
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm0tZXZlbnQtc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vYWxhcm0tZXZlbnQtc2VsZWN0b3IvYWxhcm0tZXZlbnQtc2VsZWN0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vYWxhcm0tZXZlbnQtc2VsZWN0b3IvYWxhcm0tZXZlbnQtc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0YsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbEUsT0FBTyxFQUNMLFlBQVksRUFDWixvQkFBb0IsRUFDcEIsR0FBRyxFQUNILFdBQVcsRUFDWCxTQUFTLEVBQ1QsR0FBRyxFQUNKLE1BQU0sZ0JBQWdCLENBQUM7QUFPeEIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7Ozs7Ozs7Ozs7O0FBYTNFLE1BQU0sT0FBTywyQkFBMkI7SUEyQnRDLFlBQW9CLHlCQUFvRDtRQUFwRCw4QkFBeUIsR0FBekIseUJBQXlCLENBQTJCO1FBMUIvRCxpQkFBWSxHQUFpQixPQUFPLENBQUM7UUFFckMseUJBQW9CLEdBQUcsSUFBSSxDQUFDO1FBQzVCLGtCQUFhLEdBQUcsSUFBSSxLQUFLLEVBQWdCLENBQUM7UUFDMUMsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFDbkIscUJBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsbUJBQWMsR0FBMkIsRUFBRSxDQUFDO1FBRTNDLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQWtCLENBQUM7UUFDL0QsaUJBQVksR0FB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QUM7SUFDZixDQUFDOzhHQW5JVSwyQkFBMkI7a0dBQTNCLDJCQUEyQix3WEFSM0I7WUFDVDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixLQUFLLEVBQUUsSUFBSTtnQkFDWCxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDJCQUEyQixDQUFDO2FBQzNEO1NBQ0YsMEJDOUJILHUzUkFzUEE7OzJGRHROYSwyQkFBMkI7a0JBWHZDLFNBQVM7K0JBQ0UsMEJBQTBCLGFBRXpCO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLEtBQUssRUFBRSxJQUFJOzRCQUNYLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLDRCQUE0QixDQUFDO3lCQUMzRDtxQkFDRjs4RkFHUSxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVJLGVBQWU7c0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElJZGVudGlmaWVkIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQXNzZXRTZWxlY3Rpb25DaGFuZ2VFdmVudCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYXNzZXRzLW5hdmlnYXRvcic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIGRlYm91bmNlVGltZSxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIG1hcCxcbiAgc2hhcmVSZXBsYXksXG4gIHN3aXRjaE1hcCxcbiAgdGFwXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIEFsYXJtT3JFdmVudCxcbiAgT21pdFNlbGVjdG9yUHJvcGVydGllcyxcbiAgVGltZWxpbmVUeXBlLFxuICBUaW1lbGluZVR5cGVUZXh0c1xufSBmcm9tICcuL2FsYXJtLWV2ZW50LXNlbGVjdG9yLm1vZGVsJztcbmltcG9ydCB7IEFsYXJtRXZlbnRTZWxlY3RvclNlcnZpY2UgfSBmcm9tICcuL2FsYXJtLWV2ZW50LXNlbGVjdG9yLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktYWxhcm0tZXZlbnQtc2VsZWN0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vYWxhcm0tZXZlbnQtc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQWxhcm1FdmVudFNlbGVjdG9yQ29tcG9uZW50KVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBBbGFybUV2ZW50U2VsZWN0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSB0aW1lbGluZVR5cGU6IFRpbWVsaW5lVHlwZSA9ICdBTEFSTSc7XG4gIEBJbnB1dCgpIGNvbnRleHRBc3NldDogSUlkZW50aWZpZWQ7XG4gIEBJbnB1dCgpIGFsbG93Q2hhbmdpbmdDb250ZXh0ID0gdHJ1ZTtcbiAgQElucHV0KCkgc2VsZWN0ZWRJdGVtcyA9IG5ldyBBcnJheTxBbGFybU9yRXZlbnQ+KCk7XG4gIEBJbnB1dCgpIGFsbG93U2VhcmNoID0gdHJ1ZTtcbiAgQElucHV0KCkgZ3JvdXBzU2VsZWN0YWJsZSA9IHRydWU7XG4gIEBJbnB1dCgpIGhpZGVTb3VyY2UgPSBmYWxzZTtcbiAgQElucHV0KCkgb21pdFByb3BlcnRpZXM6IE9taXRTZWxlY3RvclByb3BlcnRpZXMgPSB7fTtcblxuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxBbGFybU9yRXZlbnRbXT4oKTtcbiAgZmlsdGVyU3RyaW5nID0gJyc7XG4gIG1heE51bWJlck9mSXRlbXMgPSA1MDtcblxuICBsb2FkaW5nSXRlbXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gIGFzc2V0U2VsZWN0aW9uID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJSWRlbnRpZmllZD4oe30pO1xuICBpdGVtcyQ6IE9ic2VydmFibGU8QWxhcm1PckV2ZW50W10+O1xuICBmaWx0ZXJlZEl0ZW1zJDogT2JzZXJ2YWJsZTxBbGFybU9yRXZlbnRbXT47XG4gIGZpbHRlclN0cmluZ0NoYW5nZXMkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIHRpbWVsaW5lVHlwZVRleHRzOiBUaW1lbGluZVR5cGVUZXh0cztcbiAgaXNFeHBhbmRlZCA9IGZhbHNlO1xuICBkZWZhdWx0Q29sb3IgPVxuICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKCctLWJyYW5kLXByaW1hcnknKSB8fFxuICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKCctLWM4eS1icmFuZC1wcmltYXJ5JykgfHxcbiAgICAnIzE3NzZCRic7XG4gIHByaXZhdGUgZmlsdGVyU3RyaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoJycpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYWxhcm1FdmVudFNlbGVjdG9yU2VydmljZTogQWxhcm1FdmVudFNlbGVjdG9yU2VydmljZSkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnRpbWVsaW5lVHlwZVRleHRzID0gdGhpcy5hbGFybUV2ZW50U2VsZWN0b3JTZXJ2aWNlLnRpbWVsaW5lVHlwZVRleHRzKHRoaXMudGltZWxpbmVUeXBlKTtcbiAgICB0aGlzLnNldHVwT2JzZXJ2YWJsZXMoKTtcbiAgICBpZiAodGhpcy5jb250ZXh0QXNzZXQpIHtcbiAgICAgIHRoaXMuc2VsZWN0QXNzZXQodGhpcy5jb250ZXh0QXNzZXQpO1xuICAgIH1cbiAgfVxuXG4gIGl0ZW1BZGRlZChpdGVtOiBBbGFybU9yRXZlbnQpOiB2b2lkIHtcbiAgICBpdGVtLl9fYWN0aXZlID0gdHJ1ZTtcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbLi4udGhpcy5zZWxlY3RlZEl0ZW1zLCBpdGVtXTtcbiAgICB0aGlzLmVtaXRDdXJyZW50U2VsZWN0aW9uKCk7XG4gIH1cblxuICBpdGVtUmVtb3ZlZChhbGFybTogQWxhcm1PckV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcihcbiAgICAgIHRtcCA9PlxuICAgICAgICB0bXAubGFiZWwgIT09IGFsYXJtLmxhYmVsIHx8XG4gICAgICAgIHRtcC5maWx0ZXJzLnR5cGUgIT09IGFsYXJtLmZpbHRlcnMudHlwZSB8fFxuICAgICAgICB0bXAuX190YXJnZXQ/LmlkICE9PSBhbGFybS5fX3RhcmdldD8uaWRcbiAgICApO1xuICAgIHRoaXMuZW1pdEN1cnJlbnRTZWxlY3Rpb24oKTtcbiAgfVxuXG4gIGFzc2V0U2VsZWN0aW9uQ2hhbmdlZChldnQ6IEFzc2V0U2VsZWN0aW9uQ2hhbmdlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZ0Lml0ZW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RBc3NldChldnQuaXRlbXMubGVuZ3RoID8gZXZ0Lml0ZW1zWzBdIDogZXZ0Lml0ZW1zKTtcbiAgICB9XG4gICAgLy8gcmVzZXQgc2VsZWN0aW9uXG4gICAgdGhpcy5hc3NldFNlbGVjdGlvbi5uZXh0KG51bGwpO1xuICB9XG5cbiAgdHJhY2tCeUZuKF9pbmRleDogbnVtYmVyLCBpdGVtOiBBbGFybU9yRXZlbnQpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtpdGVtLmZpbHRlcnMudHlwZX0tJHtpdGVtLl9fdGFyZ2V0Py5pZH1gO1xuICB9XG5cbiAgZmlsdGVyU3RyaW5nQ2hhbmdlZChuZXdWYWx1ZSA9ICcnKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJTdHJpbmckLm5leHQobmV3VmFsdWUpO1xuICAgIHRoaXMuZmlsdGVyU3RyaW5nID0gbmV3VmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHNldExvYWRpbmdTdGF0ZShzdGF0ZTogYm9vbGVhbikge1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHRoaXMubG9hZGluZ0l0ZW1zJC5uZXh0KHN0YXRlKSk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwT2JzZXJ2YWJsZXMoKTogdm9pZCB7XG4gICAgdGhpcy5pdGVtcyQgPSB0aGlzLmFzc2V0U2VsZWN0aW9uLnBpcGUoXG4gICAgICB0YXAoKCkgPT4gdGhpcy5zZXRMb2FkaW5nU3RhdGUodHJ1ZSkpLFxuICAgICAgc3dpdGNoTWFwKChhc3NldDogSUlkZW50aWZpZWQpID0+XG4gICAgICAgIGFzc2V0Py5pZFxuICAgICAgICAgID8gdGhpcy5hbGFybUV2ZW50U2VsZWN0b3JTZXJ2aWNlLmdldEFsYXJtc09yRXZlbnRzKGFzc2V0LCB0aGlzLnRpbWVsaW5lVHlwZSlcbiAgICAgICAgICA6IHRoaXMuYWxhcm1FdmVudFNlbGVjdG9yU2VydmljZS5nZXRJdGVtcyh0aGlzLnRpbWVsaW5lVHlwZSlcbiAgICAgICksXG4gICAgICB0YXAoKCkgPT4gdGhpcy5zZXRMb2FkaW5nU3RhdGUoZmFsc2UpKSxcbiAgICAgIG1hcChpdGVtcyA9PiB7XG4gICAgICAgIGlmICh0aGlzLm9taXRQcm9wZXJ0aWVzLmNvbG9yKSB7XG4gICAgICAgICAgaXRlbXMuZm9yRWFjaChpID0+IChpLmNvbG9yID0gdGhpcy5kZWZhdWx0Q29sb3IpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgICB9KSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcblxuICAgIHRoaXMuZmlsdGVyU3RyaW5nQ2hhbmdlcyQgPSB0aGlzLmZpbHRlclN0cmluZyQucGlwZShcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBkZWJvdW5jZVRpbWUoNTAwKSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcblxuICAgIHRoaXMuZmlsdGVyZWRJdGVtcyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmZpbHRlclN0cmluZ0NoYW5nZXMkLCB0aGlzLml0ZW1zJF0pLnBpcGUoXG4gICAgICBtYXAoKFtmaWx0ZXJTdHJpbmcsIGl0ZW1zXSkgPT4ge1xuICAgICAgICBpZiAoIWZpbHRlclN0cmluZykge1xuICAgICAgICAgIHJldHVybiBpdGVtcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsb3dlckNhc2VGaWx0ZXJTdHJpbmcgPSBmaWx0ZXJTdHJpbmcudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIGl0ZW1zLmZpbHRlcihpdGVtID0+IHRoaXMuaW5jbHVkZXNGaWx0ZXJTdHJpbmcoaXRlbSwgbG93ZXJDYXNlRmlsdGVyU3RyaW5nKSk7XG4gICAgICB9KSxcbiAgICAgIG1hcChmaWx0ZXJlZCA9PiBmaWx0ZXJlZC5zbGljZSgwLCB0aGlzLm1heE51bWJlck9mSXRlbXMpKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdEFzc2V0KGFzc2V0OiBJSWRlbnRpZmllZCkge1xuICAgIHRoaXMuYXNzZXRTZWxlY3Rpb24ubmV4dChhc3NldCk7XG4gICAgdGhpcy5maWx0ZXJTdHJpbmdDaGFuZ2VkKCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRDdXJyZW50U2VsZWN0aW9uKCkge1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZEl0ZW1zKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5jbHVkZXNGaWx0ZXJTdHJpbmcoYWxhcm06IEFsYXJtT3JFdmVudCwgbG93ZXJDYXNlRmlsdGVyU3RyaW5nOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBsYWJlbCA9IGFsYXJtLmxhYmVsPy50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChsYWJlbCAmJiBsYWJlbC5pbmNsdWRlcyhsb3dlckNhc2VGaWx0ZXJTdHJpbmcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlID0gYWxhcm0uZmlsdGVycy50eXBlPy50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICh0eXBlICYmIHR5cGUuaW5jbHVkZXMobG93ZXJDYXNlRmlsdGVyU3RyaW5nKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwiZC1ncmlkIGdyaWRfX3Jvdy0tMSBmaXQtaFwiXG4gIFtuZ0NsYXNzXT1cIntcbiAgICAnZ3JpZF9fY29sLS0zLTYtMy0tbWQnOiBhbGxvd0NoYW5naW5nQ29udGV4dCxcbiAgICAnZ3JpZF9fY29sLS04LTQtLW1kJzogIWFsbG93Q2hhbmdpbmdDb250ZXh0XG4gIH1cIlxuPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJkLWZsZXggZC1jb2wgcC1yZWxhdGl2ZSBiZy1sZXZlbC0xXCJcbiAgICAqbmdJZj1cImFsbG93Q2hhbmdpbmdDb250ZXh0XCJcbiAgPlxuICAgIDxjOHktYXNzZXQtc2VsZWN0b3ItbWlsbGVyXG4gICAgICBjbGFzcz1cImQtY29udGVudHNcIlxuICAgICAgWyhuZ01vZGVsKV09XCJjb250ZXh0QXNzZXRcIlxuICAgICAgW2Fzc2V0XT1cImNvbnRleHRBc3NldFwiXG4gICAgICAob25TZWxlY3RlZCk9XCJhc3NldFNlbGVjdGlvbkNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICBbY29udGFpbmVyXT1cIicnXCJcbiAgICAgIFtjb25maWddPVwie1xuICAgICAgICB2aWV3OiAnbWlsbGVyJyxcbiAgICAgICAgZ3JvdXBzU2VsZWN0YWJsZTogZ3JvdXBzU2VsZWN0YWJsZSxcbiAgICAgICAgY29sdW1uSGVhZGVyczogdHJ1ZSxcbiAgICAgICAgc2hvd0NoaWxkRGV2aWNlczogdHJ1ZSxcbiAgICAgICAgc2hvd1VuYXNzaWduZWREZXZpY2VzOiB0cnVlLFxuICAgICAgICBzaW5nbGVDb2x1bW46IHRydWUsXG4gICAgICAgIHNlYXJjaDogYWxsb3dTZWFyY2gsXG4gICAgICAgIHNob3dGaWx0ZXI6IHRydWVcbiAgICAgIH1cIlxuICAgID48L2M4eS1hc3NldC1zZWxlY3Rvci1taWxsZXI+XG4gIDwvZGl2PlxuICA8IS0tIGNlbnRlciBjb2x1bW4gLS0+XG4gIDxkaXYgY2xhc3M9XCJpbm5lci1zY3JvbGwgYmctY29tcG9uZW50XCIgZGF0YS1jeT1cImM4eS1hbGFybS1ldmVudC1zZWxlY3Rvci0taW5uZXItY29sdW1uXCI+XG4gICAgPG5nLXRlbXBsYXRlICNub0RldmljZUVtcHR5U3RhdGU+XG4gICAgICA8ZGl2IGNsYXNzPVwicC0xNlwiPlxuICAgICAgICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgICAgICAgW2ljb25dPVwidGltZWxpbmVUeXBlVGV4dHMuZW1wdHlTdGF0ZUljb25cIlxuICAgICAgICAgIFt0aXRsZV09XCJ0aW1lbGluZVR5cGVUZXh0cy5lbXB0eVN0YXRlVGl0bGUgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtzdWJ0aXRsZV09XCJ0aW1lbGluZVR5cGVUZXh0cy5hc3NldFdpdGhOb0l0ZW1zRW1wdHlTdGF0ZVN1YnRpdGxlIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbaG9yaXpvbnRhbF09XCJ0cnVlXCJcbiAgICAgICAgPjwvYzh5LXVpLWVtcHR5LXN0YXRlPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy10ZW1wbGF0ZSAjbG9hZGluZ0RhdGE+XG4gICAgICA8ZGl2IGNsYXNzPVwicC0xNiB0ZXh0LWNlbnRlclwiPlxuICAgICAgICA8Yzh5LWxvYWRpbmc+PC9jOHktbG9hZGluZz5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImJnLWluaGVyaXRcIlxuICAgICAgKm5nSWY9XCJhc3NldFNlbGVjdGlvbiB8IGFzeW5jIGFzIGFzc2V0OyBlbHNlIG5vRGV2aWNlRW1wdHlTdGF0ZVwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cInAtbC0xNiBwLXItMTYgcC10LTggcC1iLTggc3RpY2t5LXRvcCBiZy1pbmhlcml0IHNlcGFyYXRvci1ib3R0b21cIj5cbiAgICAgICAgPHBcbiAgICAgICAgICBjbGFzcz1cInRleHQtbWVkaXVtIHRleHQtdHJ1bmNhdGVcIlxuICAgICAgICAgIFt0aXRsZV09XCJ0aW1lbGluZVR5cGVUZXh0cy5hdmFpbGFibGVJdGVtc1RpdGxlIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHRpbWVsaW5lVHlwZVRleHRzLmF2YWlsYWJsZUl0ZW1zVGl0bGUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9wPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1zZWFyY2ggbS10LTRcIlxuICAgICAgICAgICAgaWQ9XCJzZWFyY2hcIlxuICAgICAgICAgICAgKm5nSWY9XCIhKGxvYWRpbmdJdGVtcyQgfCBhc3luYylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRmlsdGVy4oCmXCJcbiAgICAgICAgICAgICAgdHlwZT1cInNlYXJjaFwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cImZpbHRlclN0cmluZ1wiXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlclN0cmluZ0NoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC1hZGRvblwiPlxuICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgIGM4eUljb249XCJzZWFyY2hcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWZpbHRlclN0cmluZzsgZWxzZSBjbGVhckZpbHRlclN0cmluZ1wiXG4gICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2xlYXJGaWx0ZXJTdHJpbmc+XG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1tdXRlZFwiXG4gICAgICAgICAgICAgICAgICBjOHlJY29uPVwidGltZXNcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaWx0ZXJTdHJpbmdcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZpbHRlclN0cmluZ0NoYW5nZWQoKVwiXG4gICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlcmVkSXRlbXMkIHwgYXN5bmMgYXMgZmlsdGVyZWRJdGVtczsgZWxzZSBsb2FkaW5nRGF0YVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIShsb2FkaW5nSXRlbXMkIHwgYXN5bmMpOyBlbHNlIGxvYWRpbmdEYXRhXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW1zJCB8IGFzeW5jIGFzIGl0ZW1zXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC0xNiBiZy1sZXZlbC0yIHNlcGFyYXRvci1ib3R0b21cIj5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1pbmZvIG0tci00XCJcbiAgICAgICAgICAgICAgICAgICAgYzh5SWNvbj1cImluZm8tY2lyY2xlXCJcbiAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IHRpbWVsaW5lVHlwZVRleHRzLnJlY2VudEl0ZW1zV2FybmluZ1RpdGxlIHwgdHJhbnNsYXRlIH19PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgICAge3sgdGltZWxpbmVUeXBlVGV4dHMucmVjZW50SXRlbXNXYXJuaW5nVGV4dCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAge3sgdGltZWxpbmVUeXBlVGV4dHMuYWRkQ3VzdG9tVGV4dCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLXQtMTZcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4tc21cIlxuICAgICAgICAgICAgICAgICAgYXJpYS1jb250cm9scz1cImNvbGxhcHNlQ3VzdG9tSXRlbUZvcm1cIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc0V4cGFuZGVkXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJpc0V4cGFuZGVkID0gIWlzRXhwYW5kZWRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IHRpbWVsaW5lVHlwZVRleHRzLmFkZEN1c3RvbUl0ZW1CdXR0b25MYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sbGFwc2VcIlxuICAgICAgICAgICAgICAgICAgaWQ9XCJjb2xsYXBzZUN1c3RvbUl0ZW1Gb3JtXCJcbiAgICAgICAgICAgICAgICAgIFtjb2xsYXBzZV09XCIhaXNFeHBhbmRlZFwiXG4gICAgICAgICAgICAgICAgICBbaXNBbmltYXRlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IFtzdHlsZS5taW4taGVpZ2h0XT1cIicyMzBweCdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGM4eS1jdXN0b20tYWxhcm0tZXZlbnQtZm9ybVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1ibG9ja1wiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc0V4cGFuZGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGltZWxpbmVUeXBlXT1cInRpbWVsaW5lVHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3RhcmdldF09XCJhc3NldFNlbGVjdGlvbiB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICBbb21pdFByb3BlcnRpZXNdPVwib21pdFByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkZWZhdWx0Q29sb3JdPVwiZGVmYXVsdENvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAoYWRkZWQpPVwiaXRlbUFkZGVkKCRldmVudCk7IGlzRXhwYW5kZWQgPSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNhbmNlbCk9XCJpc0V4cGFuZGVkID0gZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICA+PC9jOHktY3VzdG9tLWFsYXJtLWV2ZW50LWZvcm0+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInAtMTZcIlxuICAgICAgICAgICAgICAqbmdJZj1cIiFmaWx0ZXJlZEl0ZW1zLmxlbmd0aFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxjOHktdWktZW1wdHktc3RhdGVcbiAgICAgICAgICAgICAgICBbaWNvbl09XCJ0aW1lbGluZVR5cGVUZXh0cy5lbXB0eVN0YXRlSWNvblwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cInRpbWVsaW5lVHlwZVRleHRzLmVtcHR5U3RhdGVUaXRsZSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW3N1YnRpdGxlXT1cIlxuICAgICAgICAgICAgICAgICAgaXRlbXMubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gKCdUcnkgYW5vdGhlciBmaWx0ZXIgdGVybS4nIHwgdHJhbnNsYXRlKVxuICAgICAgICAgICAgICAgICAgICA6ICh0aW1lbGluZVR5cGVUZXh0cy5hc3NldFdpdGhOb0l0ZW1zRW1wdHlTdGF0ZVN1YnRpdGxlIHwgdHJhbnNsYXRlKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgW2hvcml6b250YWxdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgID48L2M4eS11aS1lbXB0eS1zdGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8Yzh5LWxpc3QtZ3JvdXA+XG4gICAgICAgICAgICAgIDxjOHktbGlzdC1pdGVtXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzdGlja3ktdG9wXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cInRvcDogNzJweFwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtcy5sZW5ndGggPiBtYXhOdW1iZXJPZkl0ZW1zICYmIGZpbHRlcmVkSXRlbXMubGVuZ3RoID49IG1heE51bWJlck9mSXRlbXNcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LXdhcm5pbmcgbS1iLTBcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHRpbWVsaW5lVHlwZVRleHRzLmxhcmdlTnVtYmVyT2ZJdGVtc0luZm8gfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9jOHktbGlzdC1pdGVtPlxuICAgICAgICAgICAgICA8Yzh5LWFsYXJtLWV2ZW50LXNlbGVjdG9yLWxpc3QtaXRlbVxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgW2lzU2VsZWN0ZWRdPVwic2VsZWN0ZWRJdGVtcyB8IGluY2x1ZGVzQWxhcm1PckV2ZW50OiBpdGVtXCJcbiAgICAgICAgICAgICAgICAoYWRkZWQpPVwiaXRlbUFkZGVkKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChyZW1vdmVkKT1cIml0ZW1SZW1vdmVkKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtoaWdobGlnaHRUZXh0XT1cImZpbHRlclN0cmluZ0NoYW5nZXMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgIFt0aW1lbGluZVR5cGVdPVwidGltZWxpbmVUeXBlXCJcbiAgICAgICAgICAgICAgICBbaGlkZVNvdXJjZV09XCJoaWRlU291cmNlXCJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaWx0ZXJlZEl0ZW1zOyB0cmFja0J5OiB0cmFja0J5Rm5cIlxuICAgICAgICAgICAgICA+PC9jOHktYWxhcm0tZXZlbnQtc2VsZWN0b3ItbGlzdC1pdGVtPlxuICAgICAgICAgICAgPC9jOHktbGlzdC1ncm91cD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBsYXN0IGNvbHVtbiAgLS0+XG4gIDxkaXYgY2xhc3M9XCJpbm5lci1zY3JvbGwgYmctbGV2ZWwtMVwiPlxuICAgIDxwXG4gICAgICBjbGFzcz1cInRleHQtbWVkaXVtIG0tYi00IHAtbC0xNiBwLXItMTYgcC10LTggcC1iLTggc2VwYXJhdG9yLWJvdHRvbSBzdGlja3ktdG9wIHRleHQtdHJ1bmNhdGVcIlxuICAgICAgW3RpdGxlXT1cInRpbWVsaW5lVHlwZVRleHRzLnNlbGVjdGVkSXRlbXNUaXRsZSB8IHRyYW5zbGF0ZVwiXG4gICAgPlxuICAgICAge3sgdGltZWxpbmVUeXBlVGV4dHMuc2VsZWN0ZWRJdGVtc1RpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgPC9wPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC13cmFwIGdhcC04IHAtbC0xNiBwLXItMTYgcC1iLTE2XCI+XG4gICAgICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgICAgIFtpY29uXT1cInRpbWVsaW5lVHlwZVRleHRzLmVtcHR5U3RhdGVJY29uXCJcbiAgICAgICAgW3RpdGxlXT1cInRpbWVsaW5lVHlwZVRleHRzLm5vU2VsZWN0ZWRJdGVtc1RpdGxlIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgKm5nSWY9XCIhc2VsZWN0ZWRJdGVtcyB8fCAhc2VsZWN0ZWRJdGVtcy5sZW5ndGhcIlxuICAgICAgICBbaG9yaXpvbnRhbF09XCJ0cnVlXCJcbiAgICAgID48L2M4eS11aS1lbXB0eS1zdGF0ZT5cblxuICAgICAgPGRpdlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgJ2M4eS1hbGFybS1waWxsJzogdGltZWxpbmVUeXBlID09PSAnQUxBUk0nLFxuICAgICAgICAgICdjOHktZXZlbnQtcGlsbCc6IHRpbWVsaW5lVHlwZSA9PT0gJ0VWRU5UJ1xuICAgICAgICB9XCJcbiAgICAgICAgKm5nRm9yPVwibGV0IHNlbGVjdGVkSXRlbSBvZiBzZWxlY3RlZEl0ZW1zXCJcbiAgICAgID5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIFt0aXRsZV09XCInUmVtb3ZlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ2M4eS1hbGFybS1waWxsX19idG4nOiB0aW1lbGluZVR5cGUgPT09ICdBTEFSTScsXG4gICAgICAgICAgICAnYzh5LWV2ZW50LXBpbGxfX2J0bic6IHRpbWVsaW5lVHlwZSA9PT0gJ0VWRU5UJ1xuICAgICAgICAgIH1cIlxuICAgICAgICAgIChjbGljayk9XCJpdGVtUmVtb3ZlZChzZWxlY3RlZEl0ZW0pXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpXG4gICAgICAgICAgICBjbGFzcz1cImljb24tMTRcIlxuICAgICAgICAgICAgYzh5SWNvbj1cInJlbW92ZVwiXG4gICAgICAgICAgPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImM4eS1kYXRhcG9pbnQtcGlsbF9fbGFiZWxcIlxuICAgICAgICAgIFt0aXRsZV09XCJzZWxlY3RlZEl0ZW0ubGFiZWwgfHwgc2VsZWN0ZWRJdGVtLmZpbHRlcnMudHlwZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3M9XCJjaXJjbGUtaWNvbi13cmFwcGVyIGNpcmNsZS1pY29uLXdyYXBwZXItLXNtYWxsIG0tci00XCJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cInNlbGVjdGVkSXRlbS5jb2xvciB8fCBkZWZhdWx0Q29sb3JcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgIGNsYXNzPVwic3Ryb2tlZC1pY29uXCJcbiAgICAgICAgICAgICAgW2M4eUljb25dPVwidGltZWxpbmVUeXBlID09PSAnQUxBUk0nID8gJ2JlbGwnIDogJ2M4eS1ldmVudHMnXCJcbiAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC10cnVuY2F0ZVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCI+e3sgc2VsZWN0ZWRJdGVtLmxhYmVsIHx8IHNlbGVjdGVkSXRlbS5maWx0ZXJzLnR5cGUgfX08L3NwYW4+XG4gICAgICAgICAgICA8c21hbGxcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LW11dGVkIHRleHQtMTBcIlxuICAgICAgICAgICAgICAqbmdJZj1cIiFoaWRlU291cmNlICYmIHNlbGVjdGVkSXRlbT8uX190YXJnZXQ/Lm5hbWVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBzZWxlY3RlZEl0ZW0/Ll9fdGFyZ2V0Py5uYW1lIH19XG4gICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm0tZXZlbnQtc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vYWxhcm0tZXZlbnQtc2VsZWN0b3IvYWxhcm0tZXZlbnQtc2VsZWN0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vYWxhcm0tZXZlbnQtc2VsZWN0b3IvYWxhcm0tZXZlbnQtc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0YsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbEUsT0FBTyxFQUNMLFlBQVksRUFDWixvQkFBb0IsRUFDcEIsR0FBRyxFQUNILFdBQVcsRUFDWCxTQUFTLEVBQ1QsR0FBRyxFQUNKLE1BQU0sZ0JBQWdCLENBQUM7QUFPeEIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7Ozs7Ozs7Ozs7O0FBYTNFLE1BQU0sT0FBTywyQkFBMkI7SUEyQnRDLFlBQW9CLHlCQUFvRDtRQUFwRCw4QkFBeUIsR0FBekIseUJBQXlCLENBQTJCO1FBMUIvRCxpQkFBWSxHQUFpQixPQUFPLENBQUM7UUFFckMseUJBQW9CLEdBQUcsSUFBSSxDQUFDO1FBQzVCLGtCQUFhLEdBQUcsSUFBSSxLQUFLLEVBQWdCLENBQUM7UUFDMUMsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFDbkIscUJBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsbUJBQWMsR0FBMkIsRUFBRSxDQUFDO1FBRTNDLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQWtCLENBQUM7UUFDL0QsaUJBQVksR0FBRyxFQUFFLENBQUM7UUFDbEIscUJBQWdCLEdBQUcsRUFBRSxDQUFDO1FBRXRCLGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0MsbUJBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBYyxFQUFFLENBQUMsQ0FBQztRQUt0RCxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLGlCQUFZLEdBQ1YsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDO1lBQzlFLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQztZQUNsRixTQUFTLENBQUM7UUFDSixrQkFBYSxHQUFHLElBQUksZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRTJCLENBQUM7SUFFNUUsUUFBUTtRQUNOLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdGLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3RDLENBQUM7SUFDSCxDQUFDO0lBRUQsU0FBUyxDQUFDLElBQWtCO1FBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFtQjtRQUM3QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUM1QyxHQUFHLENBQUMsRUFBRSxDQUNKLEdBQUcsQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLEtBQUs7WUFDekIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJO1lBQ3ZDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxLQUFLLEtBQUssQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUMxQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELHFCQUFxQixDQUFDLEdBQThCO1FBQ2xELElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkUsQ0FBQztRQUNELGtCQUFrQjtRQUNsQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsU0FBUyxDQUFDLE1BQWMsRUFBRSxJQUFrQjtRQUMxQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNyRCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsUUFBUSxHQUFHLEVBQUU7UUFDL0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUM7SUFDL0IsQ0FBQztJQUVPLGVBQWUsQ0FBQyxLQUFjO1FBQ3BDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDcEMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsRUFDckMsU0FBUyxDQUFDLENBQUMsS0FBa0IsRUFBRSxFQUFFLENBQy9CLEtBQUssRUFBRSxFQUFFO1lBQ1AsQ0FBQyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUM1RSxDQUFDLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQy9ELEVBQ0QsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsRUFDdEMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1YsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUM5QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ3BELENBQUM7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQyxFQUNGLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO1FBRUYsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUNqRCxvQkFBb0IsRUFBRSxFQUN0QixZQUFZLENBQUMsR0FBRyxDQUFDLEVBQ2pCLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO1FBRUYsSUFBSSxDQUFDLGNBQWMsR0FBRyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNoRixHQUFHLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQzVCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDbEIsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBQ0QsTUFBTSxxQkFBcUIsR0FBRyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDekQsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7UUFDdEYsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FDMUQsQ0FBQztJQUNKLENBQUM7SUFFTyxXQUFXLENBQUMsS0FBa0I7UUFDcEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVPLG9CQUFvQjtRQUMxQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVPLG9CQUFvQixDQUFDLEtBQW1CLEVBQUUscUJBQTZCO1FBQzdFLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDekMsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUM7WUFDbkQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDL0MsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUM7WUFDakQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOzhHQW5JVSwyQkFBMkI7a0dBQTNCLDJCQUEyQix3WEFSM0I7WUFDVDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixLQUFLLEVBQUUsSUFBSTtnQkFDWCxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDJCQUEyQixDQUFDO2FBQzNEO1NBQ0YsMEJDOUJILGc3UkF1UEE7OzJGRHZOYSwyQkFBMkI7a0JBWHZDLFNBQVM7K0JBQ0UsMEJBQTBCLGFBRXpCO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLEtBQUssRUFBRSxJQUFJOzRCQUNYLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLDRCQUE0QixDQUFDO3lCQUMzRDtxQkFDRjs4RkFHUSxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVJLGVBQWU7c0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElJZGVudGlmaWVkIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQXNzZXRTZWxlY3Rpb25DaGFuZ2VFdmVudCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYXNzZXRzLW5hdmlnYXRvcic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIGRlYm91bmNlVGltZSxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIG1hcCxcbiAgc2hhcmVSZXBsYXksXG4gIHN3aXRjaE1hcCxcbiAgdGFwXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIEFsYXJtT3JFdmVudCxcbiAgT21pdFNlbGVjdG9yUHJvcGVydGllcyxcbiAgVGltZWxpbmVUeXBlLFxuICBUaW1lbGluZVR5cGVUZXh0c1xufSBmcm9tICcuL2FsYXJtLWV2ZW50LXNlbGVjdG9yLm1vZGVsJztcbmltcG9ydCB7IEFsYXJtRXZlbnRTZWxlY3RvclNlcnZpY2UgfSBmcm9tICcuL2FsYXJtLWV2ZW50LXNlbGVjdG9yLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktYWxhcm0tZXZlbnQtc2VsZWN0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vYWxhcm0tZXZlbnQtc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQWxhcm1FdmVudFNlbGVjdG9yQ29tcG9uZW50KVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBBbGFybUV2ZW50U2VsZWN0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSB0aW1lbGluZVR5cGU6IFRpbWVsaW5lVHlwZSA9ICdBTEFSTSc7XG4gIEBJbnB1dCgpIGNvbnRleHRBc3NldDogSUlkZW50aWZpZWQ7XG4gIEBJbnB1dCgpIGFsbG93Q2hhbmdpbmdDb250ZXh0ID0gdHJ1ZTtcbiAgQElucHV0KCkgc2VsZWN0ZWRJdGVtcyA9IG5ldyBBcnJheTxBbGFybU9yRXZlbnQ+KCk7XG4gIEBJbnB1dCgpIGFsbG93U2VhcmNoID0gdHJ1ZTtcbiAgQElucHV0KCkgZ3JvdXBzU2VsZWN0YWJsZSA9IHRydWU7XG4gIEBJbnB1dCgpIGhpZGVTb3VyY2UgPSBmYWxzZTtcbiAgQElucHV0KCkgb21pdFByb3BlcnRpZXM6IE9taXRTZWxlY3RvclByb3BlcnRpZXMgPSB7fTtcblxuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxBbGFybU9yRXZlbnRbXT4oKTtcbiAgZmlsdGVyU3RyaW5nID0gJyc7XG4gIG1heE51bWJlck9mSXRlbXMgPSA1MDtcblxuICBsb2FkaW5nSXRlbXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gIGFzc2V0U2VsZWN0aW9uID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJSWRlbnRpZmllZD4oe30pO1xuICBpdGVtcyQ6IE9ic2VydmFibGU8QWxhcm1PckV2ZW50W10+O1xuICBmaWx0ZXJlZEl0ZW1zJDogT2JzZXJ2YWJsZTxBbGFybU9yRXZlbnRbXT47XG4gIGZpbHRlclN0cmluZ0NoYW5nZXMkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIHRpbWVsaW5lVHlwZVRleHRzOiBUaW1lbGluZVR5cGVUZXh0cztcbiAgaXNFeHBhbmRlZCA9IGZhbHNlO1xuICBkZWZhdWx0Q29sb3IgPVxuICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKCctLWJyYW5kLXByaW1hcnknKSB8fFxuICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKCctLWM4eS1icmFuZC1wcmltYXJ5JykgfHxcbiAgICAnIzE3NzZCRic7XG4gIHByaXZhdGUgZmlsdGVyU3RyaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoJycpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYWxhcm1FdmVudFNlbGVjdG9yU2VydmljZTogQWxhcm1FdmVudFNlbGVjdG9yU2VydmljZSkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnRpbWVsaW5lVHlwZVRleHRzID0gdGhpcy5hbGFybUV2ZW50U2VsZWN0b3JTZXJ2aWNlLnRpbWVsaW5lVHlwZVRleHRzKHRoaXMudGltZWxpbmVUeXBlKTtcbiAgICB0aGlzLnNldHVwT2JzZXJ2YWJsZXMoKTtcbiAgICBpZiAodGhpcy5jb250ZXh0QXNzZXQpIHtcbiAgICAgIHRoaXMuc2VsZWN0QXNzZXQodGhpcy5jb250ZXh0QXNzZXQpO1xuICAgIH1cbiAgfVxuXG4gIGl0ZW1BZGRlZChpdGVtOiBBbGFybU9yRXZlbnQpOiB2b2lkIHtcbiAgICBpdGVtLl9fYWN0aXZlID0gdHJ1ZTtcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbLi4udGhpcy5zZWxlY3RlZEl0ZW1zLCBpdGVtXTtcbiAgICB0aGlzLmVtaXRDdXJyZW50U2VsZWN0aW9uKCk7XG4gIH1cblxuICBpdGVtUmVtb3ZlZChhbGFybTogQWxhcm1PckV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcihcbiAgICAgIHRtcCA9PlxuICAgICAgICB0bXAubGFiZWwgIT09IGFsYXJtLmxhYmVsIHx8XG4gICAgICAgIHRtcC5maWx0ZXJzLnR5cGUgIT09IGFsYXJtLmZpbHRlcnMudHlwZSB8fFxuICAgICAgICB0bXAuX190YXJnZXQ/LmlkICE9PSBhbGFybS5fX3RhcmdldD8uaWRcbiAgICApO1xuICAgIHRoaXMuZW1pdEN1cnJlbnRTZWxlY3Rpb24oKTtcbiAgfVxuXG4gIGFzc2V0U2VsZWN0aW9uQ2hhbmdlZChldnQ6IEFzc2V0U2VsZWN0aW9uQ2hhbmdlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZ0Lml0ZW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RBc3NldChldnQuaXRlbXMubGVuZ3RoID8gZXZ0Lml0ZW1zWzBdIDogZXZ0Lml0ZW1zKTtcbiAgICB9XG4gICAgLy8gcmVzZXQgc2VsZWN0aW9uXG4gICAgdGhpcy5hc3NldFNlbGVjdGlvbi5uZXh0KG51bGwpO1xuICB9XG5cbiAgdHJhY2tCeUZuKF9pbmRleDogbnVtYmVyLCBpdGVtOiBBbGFybU9yRXZlbnQpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtpdGVtLmZpbHRlcnMudHlwZX0tJHtpdGVtLl9fdGFyZ2V0Py5pZH1gO1xuICB9XG5cbiAgZmlsdGVyU3RyaW5nQ2hhbmdlZChuZXdWYWx1ZSA9ICcnKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJTdHJpbmckLm5leHQobmV3VmFsdWUpO1xuICAgIHRoaXMuZmlsdGVyU3RyaW5nID0gbmV3VmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHNldExvYWRpbmdTdGF0ZShzdGF0ZTogYm9vbGVhbikge1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHRoaXMubG9hZGluZ0l0ZW1zJC5uZXh0KHN0YXRlKSk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwT2JzZXJ2YWJsZXMoKTogdm9pZCB7XG4gICAgdGhpcy5pdGVtcyQgPSB0aGlzLmFzc2V0U2VsZWN0aW9uLnBpcGUoXG4gICAgICB0YXAoKCkgPT4gdGhpcy5zZXRMb2FkaW5nU3RhdGUodHJ1ZSkpLFxuICAgICAgc3dpdGNoTWFwKChhc3NldDogSUlkZW50aWZpZWQpID0+XG4gICAgICAgIGFzc2V0Py5pZFxuICAgICAgICAgID8gdGhpcy5hbGFybUV2ZW50U2VsZWN0b3JTZXJ2aWNlLmdldEFsYXJtc09yRXZlbnRzKGFzc2V0LCB0aGlzLnRpbWVsaW5lVHlwZSlcbiAgICAgICAgICA6IHRoaXMuYWxhcm1FdmVudFNlbGVjdG9yU2VydmljZS5nZXRJdGVtcyh0aGlzLnRpbWVsaW5lVHlwZSlcbiAgICAgICksXG4gICAgICB0YXAoKCkgPT4gdGhpcy5zZXRMb2FkaW5nU3RhdGUoZmFsc2UpKSxcbiAgICAgIG1hcChpdGVtcyA9PiB7XG4gICAgICAgIGlmICh0aGlzLm9taXRQcm9wZXJ0aWVzLmNvbG9yKSB7XG4gICAgICAgICAgaXRlbXMuZm9yRWFjaChpID0+IChpLmNvbG9yID0gdGhpcy5kZWZhdWx0Q29sb3IpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgICB9KSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcblxuICAgIHRoaXMuZmlsdGVyU3RyaW5nQ2hhbmdlcyQgPSB0aGlzLmZpbHRlclN0cmluZyQucGlwZShcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBkZWJvdW5jZVRpbWUoNTAwKSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcblxuICAgIHRoaXMuZmlsdGVyZWRJdGVtcyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmZpbHRlclN0cmluZ0NoYW5nZXMkLCB0aGlzLml0ZW1zJF0pLnBpcGUoXG4gICAgICBtYXAoKFtmaWx0ZXJTdHJpbmcsIGl0ZW1zXSkgPT4ge1xuICAgICAgICBpZiAoIWZpbHRlclN0cmluZykge1xuICAgICAgICAgIHJldHVybiBpdGVtcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsb3dlckNhc2VGaWx0ZXJTdHJpbmcgPSBmaWx0ZXJTdHJpbmcudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIGl0ZW1zLmZpbHRlcihpdGVtID0+IHRoaXMuaW5jbHVkZXNGaWx0ZXJTdHJpbmcoaXRlbSwgbG93ZXJDYXNlRmlsdGVyU3RyaW5nKSk7XG4gICAgICB9KSxcbiAgICAgIG1hcChmaWx0ZXJlZCA9PiBmaWx0ZXJlZC5zbGljZSgwLCB0aGlzLm1heE51bWJlck9mSXRlbXMpKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdEFzc2V0KGFzc2V0OiBJSWRlbnRpZmllZCkge1xuICAgIHRoaXMuYXNzZXRTZWxlY3Rpb24ubmV4dChhc3NldCk7XG4gICAgdGhpcy5maWx0ZXJTdHJpbmdDaGFuZ2VkKCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRDdXJyZW50U2VsZWN0aW9uKCkge1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZEl0ZW1zKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5jbHVkZXNGaWx0ZXJTdHJpbmcoYWxhcm06IEFsYXJtT3JFdmVudCwgbG93ZXJDYXNlRmlsdGVyU3RyaW5nOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBsYWJlbCA9IGFsYXJtLmxhYmVsPy50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChsYWJlbCAmJiBsYWJlbC5pbmNsdWRlcyhsb3dlckNhc2VGaWx0ZXJTdHJpbmcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlID0gYWxhcm0uZmlsdGVycy50eXBlPy50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICh0eXBlICYmIHR5cGUuaW5jbHVkZXMobG93ZXJDYXNlRmlsdGVyU3RyaW5nKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwiZC1ncmlkIGdyaWRfX3Jvdy0tMSBmaXQtaFwiXG4gIFtuZ0NsYXNzXT1cIntcbiAgICAnZ3JpZF9fY29sLS0zLTYtMy0tbWQnOiBhbGxvd0NoYW5naW5nQ29udGV4dCxcbiAgICAnZ3JpZF9fY29sLS04LTQtLW1kJzogIWFsbG93Q2hhbmdpbmdDb250ZXh0XG4gIH1cIlxuPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJkLWZsZXggZC1jb2wgcC1yZWxhdGl2ZSBiZy1sZXZlbC0xXCJcbiAgICAqbmdJZj1cImFsbG93Q2hhbmdpbmdDb250ZXh0XCJcbiAgPlxuICAgIDxjOHktYXNzZXQtc2VsZWN0b3ItbWlsbGVyXG4gICAgICBjbGFzcz1cImQtY29udGVudHNcIlxuICAgICAgWyhuZ01vZGVsKV09XCJjb250ZXh0QXNzZXRcIlxuICAgICAgW2Fzc2V0XT1cImNvbnRleHRBc3NldFwiXG4gICAgICAob25TZWxlY3RlZCk9XCJhc3NldFNlbGVjdGlvbkNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICBbY29udGFpbmVyXT1cIicnXCJcbiAgICAgIFtjb25maWddPVwie1xuICAgICAgICB2aWV3OiAnbWlsbGVyJyxcbiAgICAgICAgZ3JvdXBzU2VsZWN0YWJsZTogZ3JvdXBzU2VsZWN0YWJsZSxcbiAgICAgICAgY29sdW1uSGVhZGVyczogdHJ1ZSxcbiAgICAgICAgc2hvd0NoaWxkRGV2aWNlczogdHJ1ZSxcbiAgICAgICAgc2hvd1VuYXNzaWduZWREZXZpY2VzOiB0cnVlLFxuICAgICAgICBzaW5nbGVDb2x1bW46IHRydWUsXG4gICAgICAgIHNlYXJjaDogYWxsb3dTZWFyY2gsXG4gICAgICAgIHNob3dGaWx0ZXI6IHRydWVcbiAgICAgIH1cIlxuICAgID48L2M4eS1hc3NldC1zZWxlY3Rvci1taWxsZXI+XG4gIDwvZGl2PlxuICA8IS0tIGNlbnRlciBjb2x1bW4gLS0+XG4gIDxkaXYgY2xhc3M9XCJpbm5lci1zY3JvbGwgYmctY29tcG9uZW50XCIgZGF0YS1jeT1cImM4eS1hbGFybS1ldmVudC1zZWxlY3Rvci0taW5uZXItY29sdW1uXCI+XG4gICAgPG5nLXRlbXBsYXRlICNub0RldmljZUVtcHR5U3RhdGU+XG4gICAgICA8ZGl2IGNsYXNzPVwicC0xNlwiPlxuICAgICAgICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgICAgICAgW2ljb25dPVwidGltZWxpbmVUeXBlVGV4dHMuZW1wdHlTdGF0ZUljb25cIlxuICAgICAgICAgIFt0aXRsZV09XCJ0aW1lbGluZVR5cGVUZXh0cy5lbXB0eVN0YXRlVGl0bGUgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtzdWJ0aXRsZV09XCJ0aW1lbGluZVR5cGVUZXh0cy5hc3NldFdpdGhOb0l0ZW1zRW1wdHlTdGF0ZVN1YnRpdGxlIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbaG9yaXpvbnRhbF09XCJ0cnVlXCJcbiAgICAgICAgPjwvYzh5LXVpLWVtcHR5LXN0YXRlPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy10ZW1wbGF0ZSAjbG9hZGluZ0RhdGE+XG4gICAgICA8ZGl2IGNsYXNzPVwicC0xNiB0ZXh0LWNlbnRlclwiPlxuICAgICAgICA8Yzh5LWxvYWRpbmc+PC9jOHktbG9hZGluZz5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImJnLWluaGVyaXRcIlxuICAgICAgKm5nSWY9XCJhc3NldFNlbGVjdGlvbiB8IGFzeW5jIGFzIGFzc2V0OyBlbHNlIG5vRGV2aWNlRW1wdHlTdGF0ZVwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cInAtbC0xNiBwLXItMTYgcC10LTggcC1iLTggc3RpY2t5LXRvcCBiZy1pbmhlcml0IHNlcGFyYXRvci1ib3R0b21cIj5cbiAgICAgICAgPHBcbiAgICAgICAgICBjbGFzcz1cInRleHQtbWVkaXVtIHRleHQtdHJ1bmNhdGVcIlxuICAgICAgICAgIFt0aXRsZV09XCJ0aW1lbGluZVR5cGVUZXh0cy5hdmFpbGFibGVJdGVtc1RpdGxlIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHRpbWVsaW5lVHlwZVRleHRzLmF2YWlsYWJsZUl0ZW1zVGl0bGUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9wPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1zZWFyY2ggbS10LTRcIlxuICAgICAgICAgICAgaWQ9XCJzZWFyY2hcIlxuICAgICAgICAgICAgKm5nSWY9XCIhKGxvYWRpbmdJdGVtcyQgfCBhc3luYylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRmlsdGVy4oCmXCJcbiAgICAgICAgICAgICAgdHlwZT1cInNlYXJjaFwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cImZpbHRlclN0cmluZ1wiXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlclN0cmluZ0NoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC1hZGRvblwiPlxuICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgIGM4eUljb249XCJzZWFyY2hcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWZpbHRlclN0cmluZzsgZWxzZSBjbGVhckZpbHRlclN0cmluZ1wiXG4gICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2xlYXJGaWx0ZXJTdHJpbmc+XG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1tdXRlZFwiXG4gICAgICAgICAgICAgICAgICBjOHlJY29uPVwidGltZXNcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaWx0ZXJTdHJpbmdcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZpbHRlclN0cmluZ0NoYW5nZWQoKVwiXG4gICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlcmVkSXRlbXMkIHwgYXN5bmMgYXMgZmlsdGVyZWRJdGVtczsgZWxzZSBsb2FkaW5nRGF0YVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIShsb2FkaW5nSXRlbXMkIHwgYXN5bmMpOyBlbHNlIGxvYWRpbmdEYXRhXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW1zJCB8IGFzeW5jIGFzIGl0ZW1zXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC0xNiBiZy1sZXZlbC0yIHNlcGFyYXRvci1ib3R0b21cIj5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1pbmZvIG0tci00XCJcbiAgICAgICAgICAgICAgICAgICAgYzh5SWNvbj1cImluZm8tY2lyY2xlXCJcbiAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IHRpbWVsaW5lVHlwZVRleHRzLnJlY2VudEl0ZW1zV2FybmluZ1RpdGxlIHwgdHJhbnNsYXRlIH19PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgICAge3sgdGltZWxpbmVUeXBlVGV4dHMucmVjZW50SXRlbXNXYXJuaW5nVGV4dCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAge3sgdGltZWxpbmVUeXBlVGV4dHMuYWRkQ3VzdG9tVGV4dCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLXQtMTZcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4tc21cIlxuICAgICAgICAgICAgICAgICAgYXJpYS1jb250cm9scz1cImNvbGxhcHNlQ3VzdG9tSXRlbUZvcm1cIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc0V4cGFuZGVkXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJpc0V4cGFuZGVkID0gIWlzRXhwYW5kZWRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IHRpbWVsaW5lVHlwZVRleHRzLmFkZEN1c3RvbUl0ZW1CdXR0b25MYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sbGFwc2VcIlxuICAgICAgICAgICAgICAgICAgaWQ9XCJjb2xsYXBzZUN1c3RvbUl0ZW1Gb3JtXCJcbiAgICAgICAgICAgICAgICAgIFtjb2xsYXBzZV09XCIhaXNFeHBhbmRlZFwiXG4gICAgICAgICAgICAgICAgICBbaXNBbmltYXRlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IFtzdHlsZS5taW4taGVpZ2h0XT1cIicyMzBweCdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGM4eS1jdXN0b20tYWxhcm0tZXZlbnQtZm9ybVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1ibG9ja1wiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc0V4cGFuZGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGltZWxpbmVUeXBlXT1cInRpbWVsaW5lVHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3RhcmdldF09XCJhc3NldFNlbGVjdGlvbiB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICBbb21pdFByb3BlcnRpZXNdPVwib21pdFByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkZWZhdWx0Q29sb3JdPVwiZGVmYXVsdENvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAoYWRkZWQpPVwiaXRlbUFkZGVkKCRldmVudCk7IGlzRXhwYW5kZWQgPSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNhbmNlbCk9XCJpc0V4cGFuZGVkID0gZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZEl0ZW1zXT1cInNlbGVjdGVkSXRlbXNcIlxuICAgICAgICAgICAgICAgICAgICA+PC9jOHktY3VzdG9tLWFsYXJtLWV2ZW50LWZvcm0+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInAtMTZcIlxuICAgICAgICAgICAgICAqbmdJZj1cIiFmaWx0ZXJlZEl0ZW1zLmxlbmd0aFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxjOHktdWktZW1wdHktc3RhdGVcbiAgICAgICAgICAgICAgICBbaWNvbl09XCJ0aW1lbGluZVR5cGVUZXh0cy5lbXB0eVN0YXRlSWNvblwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cInRpbWVsaW5lVHlwZVRleHRzLmVtcHR5U3RhdGVUaXRsZSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW3N1YnRpdGxlXT1cIlxuICAgICAgICAgICAgICAgICAgaXRlbXMubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gKCdUcnkgYW5vdGhlciBmaWx0ZXIgdGVybS4nIHwgdHJhbnNsYXRlKVxuICAgICAgICAgICAgICAgICAgICA6ICh0aW1lbGluZVR5cGVUZXh0cy5hc3NldFdpdGhOb0l0ZW1zRW1wdHlTdGF0ZVN1YnRpdGxlIHwgdHJhbnNsYXRlKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgW2hvcml6b250YWxdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgID48L2M4eS11aS1lbXB0eS1zdGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8Yzh5LWxpc3QtZ3JvdXA+XG4gICAgICAgICAgICAgIDxjOHktbGlzdC1pdGVtXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzdGlja3ktdG9wXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cInRvcDogNzJweFwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtcy5sZW5ndGggPiBtYXhOdW1iZXJPZkl0ZW1zICYmIGZpbHRlcmVkSXRlbXMubGVuZ3RoID49IG1heE51bWJlck9mSXRlbXNcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LXdhcm5pbmcgbS1iLTBcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHRpbWVsaW5lVHlwZVRleHRzLmxhcmdlTnVtYmVyT2ZJdGVtc0luZm8gfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9jOHktbGlzdC1pdGVtPlxuICAgICAgICAgICAgICA8Yzh5LWFsYXJtLWV2ZW50LXNlbGVjdG9yLWxpc3QtaXRlbVxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgW2lzU2VsZWN0ZWRdPVwic2VsZWN0ZWRJdGVtcyB8IGluY2x1ZGVzQWxhcm1PckV2ZW50OiBpdGVtXCJcbiAgICAgICAgICAgICAgICAoYWRkZWQpPVwiaXRlbUFkZGVkKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChyZW1vdmVkKT1cIml0ZW1SZW1vdmVkKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtoaWdobGlnaHRUZXh0XT1cImZpbHRlclN0cmluZ0NoYW5nZXMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgIFt0aW1lbGluZVR5cGVdPVwidGltZWxpbmVUeXBlXCJcbiAgICAgICAgICAgICAgICBbaGlkZVNvdXJjZV09XCJoaWRlU291cmNlXCJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaWx0ZXJlZEl0ZW1zOyB0cmFja0J5OiB0cmFja0J5Rm5cIlxuICAgICAgICAgICAgICA+PC9jOHktYWxhcm0tZXZlbnQtc2VsZWN0b3ItbGlzdC1pdGVtPlxuICAgICAgICAgICAgPC9jOHktbGlzdC1ncm91cD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBsYXN0IGNvbHVtbiAgLS0+XG4gIDxkaXYgY2xhc3M9XCJpbm5lci1zY3JvbGwgYmctbGV2ZWwtMVwiPlxuICAgIDxwXG4gICAgICBjbGFzcz1cInRleHQtbWVkaXVtIG0tYi00IHAtbC0xNiBwLXItMTYgcC10LTggcC1iLTggc2VwYXJhdG9yLWJvdHRvbSBzdGlja3ktdG9wIHRleHQtdHJ1bmNhdGVcIlxuICAgICAgW3RpdGxlXT1cInRpbWVsaW5lVHlwZVRleHRzLnNlbGVjdGVkSXRlbXNUaXRsZSB8IHRyYW5zbGF0ZVwiXG4gICAgPlxuICAgICAge3sgdGltZWxpbmVUeXBlVGV4dHMuc2VsZWN0ZWRJdGVtc1RpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgPC9wPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC13cmFwIGdhcC04IHAtbC0xNiBwLXItMTYgcC1iLTE2XCI+XG4gICAgICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgICAgIFtpY29uXT1cInRpbWVsaW5lVHlwZVRleHRzLmVtcHR5U3RhdGVJY29uXCJcbiAgICAgICAgW3RpdGxlXT1cInRpbWVsaW5lVHlwZVRleHRzLm5vU2VsZWN0ZWRJdGVtc1RpdGxlIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgKm5nSWY9XCIhc2VsZWN0ZWRJdGVtcyB8fCAhc2VsZWN0ZWRJdGVtcy5sZW5ndGhcIlxuICAgICAgICBbaG9yaXpvbnRhbF09XCJ0cnVlXCJcbiAgICAgID48L2M4eS11aS1lbXB0eS1zdGF0ZT5cblxuICAgICAgPGRpdlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgJ2M4eS1hbGFybS1waWxsJzogdGltZWxpbmVUeXBlID09PSAnQUxBUk0nLFxuICAgICAgICAgICdjOHktZXZlbnQtcGlsbCc6IHRpbWVsaW5lVHlwZSA9PT0gJ0VWRU5UJ1xuICAgICAgICB9XCJcbiAgICAgICAgKm5nRm9yPVwibGV0IHNlbGVjdGVkSXRlbSBvZiBzZWxlY3RlZEl0ZW1zXCJcbiAgICAgID5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIFt0aXRsZV09XCInUmVtb3ZlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ2M4eS1hbGFybS1waWxsX19idG4nOiB0aW1lbGluZVR5cGUgPT09ICdBTEFSTScsXG4gICAgICAgICAgICAnYzh5LWV2ZW50LXBpbGxfX2J0bic6IHRpbWVsaW5lVHlwZSA9PT0gJ0VWRU5UJ1xuICAgICAgICAgIH1cIlxuICAgICAgICAgIChjbGljayk9XCJpdGVtUmVtb3ZlZChzZWxlY3RlZEl0ZW0pXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpXG4gICAgICAgICAgICBjbGFzcz1cImljb24tMTRcIlxuICAgICAgICAgICAgYzh5SWNvbj1cInJlbW92ZVwiXG4gICAgICAgICAgPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImM4eS1kYXRhcG9pbnQtcGlsbF9fbGFiZWxcIlxuICAgICAgICAgIFt0aXRsZV09XCJzZWxlY3RlZEl0ZW0ubGFiZWwgfHwgc2VsZWN0ZWRJdGVtLmZpbHRlcnMudHlwZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3M9XCJjaXJjbGUtaWNvbi13cmFwcGVyIGNpcmNsZS1pY29uLXdyYXBwZXItLXNtYWxsIG0tci00XCJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cInNlbGVjdGVkSXRlbS5jb2xvciB8fCBkZWZhdWx0Q29sb3JcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgIGNsYXNzPVwic3Ryb2tlZC1pY29uXCJcbiAgICAgICAgICAgICAgW2M4eUljb25dPVwidGltZWxpbmVUeXBlID09PSAnQUxBUk0nID8gJ2JlbGwnIDogJ2M4eS1ldmVudHMnXCJcbiAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC10cnVuY2F0ZVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCI+e3sgc2VsZWN0ZWRJdGVtLmxhYmVsIHx8IHNlbGVjdGVkSXRlbS5maWx0ZXJzLnR5cGUgfX08L3NwYW4+XG4gICAgICAgICAgICA8c21hbGxcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LW11dGVkIHRleHQtMTBcIlxuICAgICAgICAgICAgICAqbmdJZj1cIiFoaWRlU291cmNlICYmIHNlbGVjdGVkSXRlbT8uX190YXJnZXQ/Lm5hbWVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBzZWxlY3RlZEl0ZW0/Ll9fdGFyZ2V0Py5uYW1lIH19XG4gICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==