@testgorilla/tgo-ui 2.23.24 → 2.23.25

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,4 +1,4 @@
1
- import { ChangeDetectorRef, DoCheck, EventEmitter, OnChanges } from '@angular/core';
1
+ import { ChangeDetectorRef, DoCheck, EventEmitter, OnChanges, Renderer2, SimpleChanges } from '@angular/core';
2
2
  import { ControlValueAccessor, FormControl, FormGroup, NgControl } from '@angular/forms';
3
3
  import { ApplicationTheme } from '../../models/application-theme.model';
4
4
  import { MatDatepicker } from '@angular/material/datepicker';
@@ -9,6 +9,7 @@ export declare class DatepickerComponent implements OnChanges, ControlValueAcces
9
9
  private cdr;
10
10
  private sanitizer;
11
11
  ngControl: NgControl;
12
+ private renderer2;
12
13
  class: string;
13
14
  /**
14
15
  * Form field label
@@ -159,6 +160,14 @@ export declare class DatepickerComponent implements OnChanges, ControlValueAcces
159
160
  * @memberof DatepickerComponent
160
161
  */
161
162
  preventUserInput: boolean;
163
+ /**
164
+ * Color of the option hover.
165
+ * Defaults to Test Gorilla primary color.
166
+ *
167
+ * @type {string}
168
+ * @memberof DatepickerComponent
169
+ */
170
+ companyColor: string;
162
171
  /**
163
172
  * @ignore
164
173
  */
@@ -180,7 +189,7 @@ export declare class DatepickerComponent implements OnChanges, ControlValueAcces
180
189
  }>;
181
190
  errorsLength: boolean;
182
191
  protected translationContext: string;
183
- constructor(defaultAppTheme: ApplicationTheme, cdr: ChangeDetectorRef, sanitizer: DomSanitizer, ngControl: NgControl);
192
+ constructor(defaultAppTheme: ApplicationTheme, cdr: ChangeDetectorRef, sanitizer: DomSanitizer, ngControl: NgControl, renderer2: Renderer2);
184
193
  get hint(): string;
185
194
  /**
186
195
  * Used to mark component view as dirty when touched programmatically with markAsTouched/markAllAsTouched or errors
@@ -188,7 +197,7 @@ export declare class DatepickerComponent implements OnChanges, ControlValueAcces
188
197
  */
189
198
  ngDoCheck(): void;
190
199
  ngOnInit(): void;
191
- ngOnChanges(): void;
200
+ ngOnChanges(changes: SimpleChanges): void;
192
201
  setErrorsLength(): boolean;
193
202
  onValueChange(value: Date | string): void;
194
203
  writeValue(value?: Date | string): void;
@@ -200,6 +209,7 @@ export declare class DatepickerComponent implements OnChanges, ControlValueAcces
200
209
  private setRange;
201
210
  private getRange;
202
211
  onInput(event: Event): void;
203
- static ɵfac: i0.ɵɵFactoryDeclaration<DatepickerComponent, [{ optional: true; }, null, null, { optional: true; self: true; }]>;
204
- static ɵcmp: i0.ɵɵComponentDeclaration<DatepickerComponent, "ui-datepicker", never, { "label": { "alias": "label"; "required": false; }; "fieldName": { "alias": "fieldName"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "id": { "alias": "id"; "required": false; }; "value": { "alias": "value"; "required": false; }; "errors": { "alias": "errors"; "required": false; }; "isRange": { "alias": "isRange"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "required": { "alias": "required"; "required": false; }; "hintMessage": { "alias": "hintMessage"; "required": false; }; "updateOnBlur": { "alias": "updateOnBlur"; "required": false; }; "language": { "alias": "language"; "required": false; }; "showBottomContent": { "alias": "showBottomContent"; "required": false; }; "fullWidth": { "alias": "fullWidth"; "required": false; }; "minDate": { "alias": "minDate"; "required": false; }; "maxDate": { "alias": "maxDate"; "required": false; }; "monthPicker": { "alias": "monthPicker"; "required": false; }; "applicationTheme": { "alias": "applicationTheme"; "required": false; }; "hideBuiltInErrors": { "alias": "hideBuiltInErrors"; "required": false; }; "hideLabelInErrors": { "alias": "hideLabelInErrors"; "required": false; }; "preventUserInput": { "alias": "preventUserInput"; "required": false; }; }, { "changed": "changed"; }, never, never, false, never>;
212
+ private setStyleVariable;
213
+ static ɵfac: i0.ɵɵFactoryDeclaration<DatepickerComponent, [{ optional: true; }, null, null, { optional: true; self: true; }, null]>;
214
+ static ɵcmp: i0.ɵɵComponentDeclaration<DatepickerComponent, "ui-datepicker", never, { "label": { "alias": "label"; "required": false; }; "fieldName": { "alias": "fieldName"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "id": { "alias": "id"; "required": false; }; "value": { "alias": "value"; "required": false; }; "errors": { "alias": "errors"; "required": false; }; "isRange": { "alias": "isRange"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "required": { "alias": "required"; "required": false; }; "hintMessage": { "alias": "hintMessage"; "required": false; }; "updateOnBlur": { "alias": "updateOnBlur"; "required": false; }; "language": { "alias": "language"; "required": false; }; "showBottomContent": { "alias": "showBottomContent"; "required": false; }; "fullWidth": { "alias": "fullWidth"; "required": false; }; "minDate": { "alias": "minDate"; "required": false; }; "maxDate": { "alias": "maxDate"; "required": false; }; "monthPicker": { "alias": "monthPicker"; "required": false; }; "applicationTheme": { "alias": "applicationTheme"; "required": false; }; "hideBuiltInErrors": { "alias": "hideBuiltInErrors"; "required": false; }; "hideLabelInErrors": { "alias": "hideLabelInErrors"; "required": false; }; "preventUserInput": { "alias": "preventUserInput"; "required": false; }; "companyColor": { "alias": "companyColor"; "required": false; }; }, { "changed": "changed"; }, never, never, false, never>;
205
215
  }
@@ -1,13 +1,14 @@
1
- import { ChangeDetectorRef, DoCheck, EventEmitter, OnInit } from '@angular/core';
1
+ import { ChangeDetectorRef, DoCheck, EventEmitter, OnChanges, OnInit, Renderer2, SimpleChanges } from '@angular/core';
2
2
  import { ControlValueAccessor, NgControl } from '@angular/forms';
3
3
  import { FloatLabelType } from '@angular/material/form-field';
4
4
  import { OptionType } from './dropdown.model';
5
5
  import { ApplicationTheme } from '../../models/application-theme.model';
6
6
  import * as i0 from "@angular/core";
7
- export declare class DropdownComponent implements OnInit, ControlValueAccessor, DoCheck {
7
+ export declare class DropdownComponent implements OnInit, ControlValueAccessor, DoCheck, OnChanges {
8
8
  private readonly defaultAppTheme;
9
9
  private cdr;
10
10
  ngControl: NgControl;
11
+ private renderer2;
11
12
  class: string;
12
13
  /**
13
14
  * Text content will be applied to the input element if present.
@@ -139,6 +140,14 @@ export declare class DropdownComponent implements OnInit, ControlValueAccessor,
139
140
  */
140
141
  valueField: string;
141
142
  hasError: boolean;
143
+ /**
144
+ * Color of the option hover.
145
+ * Defaults to Test Gorilla primary color.
146
+ *
147
+ * @type {string}
148
+ * @memberof DropdownComponent
149
+ */
150
+ companyColor: string;
142
151
  closed: EventEmitter<void>;
143
152
  opened: EventEmitter<void>;
144
153
  /**
@@ -149,7 +158,7 @@ export declare class DropdownComponent implements OnInit, ControlValueAccessor,
149
158
  * @ignore
150
159
  */
151
160
  onTouch: () => void;
152
- constructor(defaultAppTheme: ApplicationTheme, cdr: ChangeDetectorRef, ngControl: NgControl);
161
+ constructor(defaultAppTheme: ApplicationTheme, cdr: ChangeDetectorRef, ngControl: NgControl, renderer2: Renderer2);
153
162
  floatLabel: FloatLabelType;
154
163
  classError: string;
155
164
  errorsLength: boolean;
@@ -160,6 +169,7 @@ export declare class DropdownComponent implements OnInit, ControlValueAccessor,
160
169
  */
161
170
  ngDoCheck(): void;
162
171
  ngOnInit(): void;
172
+ ngOnChanges(changes: SimpleChanges): void;
163
173
  clearValue(event: Event): void;
164
174
  onChangeOption(event: any): void;
165
175
  setErrorsLength(): boolean;
@@ -169,6 +179,7 @@ export declare class DropdownComponent implements OnInit, ControlValueAccessor,
169
179
  setDisabledState(isDisabled: boolean): void;
170
180
  onClosed(): void;
171
181
  onOpened(): void;
172
- static ɵfac: i0.ɵɵFactoryDeclaration<DropdownComponent, [{ optional: true; }, null, { optional: true; self: true; }]>;
173
- static ɵcmp: i0.ɵɵComponentDeclaration<DropdownComponent, "ui-dropdown", never, { "label": { "alias": "label"; "required": false; }; "name": { "alias": "name"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "id": { "alias": "id"; "required": false; }; "value": { "alias": "value"; "required": false; }; "errors": { "alias": "errors"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "valueList": { "alias": "valueList"; "required": false; }; "allowClear": { "alias": "allowClear"; "required": false; }; "allowMultipleSelection": { "alias": "allowMultipleSelection"; "required": false; }; "required": { "alias": "required"; "required": false; }; "language": { "alias": "language"; "required": false; }; "showBottomContent": { "alias": "showBottomContent"; "required": false; }; "applicationTheme": { "alias": "applicationTheme"; "required": false; }; "hideBuiltInErrors": { "alias": "hideBuiltInErrors"; "required": false; }; "hideLabelInErrors": { "alias": "hideLabelInErrors"; "required": false; }; "textField": { "alias": "textField"; "required": false; }; "valueField": { "alias": "valueField"; "required": false; }; "hasError": { "alias": "hasError"; "required": false; }; }, { "closed": "closed"; "opened": "opened"; }, never, never, false, never>;
182
+ setStyleVariable(): void;
183
+ static ɵfac: i0.ɵɵFactoryDeclaration<DropdownComponent, [{ optional: true; }, null, { optional: true; self: true; }, null]>;
184
+ static ɵcmp: i0.ɵɵComponentDeclaration<DropdownComponent, "ui-dropdown", never, { "label": { "alias": "label"; "required": false; }; "name": { "alias": "name"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "id": { "alias": "id"; "required": false; }; "value": { "alias": "value"; "required": false; }; "errors": { "alias": "errors"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "valueList": { "alias": "valueList"; "required": false; }; "allowClear": { "alias": "allowClear"; "required": false; }; "allowMultipleSelection": { "alias": "allowMultipleSelection"; "required": false; }; "required": { "alias": "required"; "required": false; }; "language": { "alias": "language"; "required": false; }; "showBottomContent": { "alias": "showBottomContent"; "required": false; }; "applicationTheme": { "alias": "applicationTheme"; "required": false; }; "hideBuiltInErrors": { "alias": "hideBuiltInErrors"; "required": false; }; "hideLabelInErrors": { "alias": "hideLabelInErrors"; "required": false; }; "textField": { "alias": "textField"; "required": false; }; "valueField": { "alias": "valueField"; "required": false; }; "hasError": { "alias": "hasError"; "required": false; }; "companyColor": { "alias": "companyColor"; "required": false; }; }, { "closed": "closed"; "opened": "opened"; }, never, never, false, never>;
174
185
  }
@@ -2,6 +2,7 @@
2
2
  import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Inject, Input, Optional, Output, Self, ViewEncapsulation, } from '@angular/core';
3
3
  import { FormControl, FormGroup } from '@angular/forms';
4
4
  import { LanguageService } from '../../utils/localization/language.service';
5
+ import { adjustLightness } from "../../utils/color-contrast";
5
6
  import * as i0 from "@angular/core";
6
7
  import * as i1 from "@angular/platform-browser";
7
8
  import * as i2 from "@angular/forms";
@@ -26,11 +27,12 @@ export class DatepickerComponent {
26
27
  this._errors = errors?.filter(Boolean).map(error => this.sanitizer.bypassSecurityTrustHtml(error));
27
28
  this.errorsLength = this.setErrorsLength();
28
29
  }
29
- constructor(defaultAppTheme, cdr, sanitizer, ngControl) {
30
+ constructor(defaultAppTheme, cdr, sanitizer, ngControl, renderer2) {
30
31
  this.defaultAppTheme = defaultAppTheme;
31
32
  this.cdr = cdr;
32
33
  this.sanitizer = sanitizer;
33
34
  this.ngControl = ngControl;
35
+ this.renderer2 = renderer2;
34
36
  this.class = 'ui-datepicker';
35
37
  /**
36
38
  * Form field label
@@ -117,6 +119,14 @@ export class DatepickerComponent {
117
119
  * @memberof DatepickerComponent
118
120
  */
119
121
  this.preventUserInput = false;
122
+ /**
123
+ * Color of the option hover.
124
+ * Defaults to Test Gorilla primary color.
125
+ *
126
+ * @type {string}
127
+ * @memberof DatepickerComponent
128
+ */
129
+ this.companyColor = '';
120
130
  /**
121
131
  * @ignore
122
132
  */
@@ -163,12 +173,16 @@ export class DatepickerComponent {
163
173
  // eslint-disable-next-line @angular-eslint/no-conflicting-lifecycle
164
174
  ngOnInit() {
165
175
  document.body.setAttribute('theme', this.applicationTheme);
176
+ this.setStyleVariable();
166
177
  }
167
178
  // eslint-disable-next-line @angular-eslint/no-conflicting-lifecycle
168
- ngOnChanges() {
179
+ ngOnChanges(changes) {
169
180
  if (this.isRange) {
170
181
  this.setRange();
171
182
  }
183
+ if (changes['companyColor']) {
184
+ this.setStyleVariable();
185
+ }
172
186
  }
173
187
  // Set errors length for validation
174
188
  // Consider only those errors which which are not empty
@@ -239,12 +253,18 @@ export class DatepickerComponent {
239
253
  const fullDate = new Date(fullDateString);
240
254
  this.onValueChange(fullDate);
241
255
  }
242
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: DatepickerComponent, deps: [{ token: 'CANOPYUI_DEFAULT_APPLICATION_THEME', optional: true }, { token: i0.ChangeDetectorRef }, { token: i1.DomSanitizer }, { token: i2.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component }); }
243
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.7", type: DatepickerComponent, selector: "ui-datepicker", inputs: { label: "label", fieldName: "fieldName", placeholder: "placeholder", id: "id", value: "value", errors: "errors", isRange: "isRange", disabled: "disabled", required: "required", hintMessage: "hintMessage", updateOnBlur: "updateOnBlur", language: "language", showBottomContent: "showBottomContent", fullWidth: "fullWidth", minDate: "minDate", maxDate: "maxDate", monthPicker: "monthPicker", applicationTheme: "applicationTheme", hideBuiltInErrors: "hideBuiltInErrors", hideLabelInErrors: "hideLabelInErrors", preventUserInput: "preventUserInput" }, outputs: { changed: "changed" }, host: { properties: { "class": "this.class" } }, usesOnChanges: true, ngImport: i0, template: "<ng-container>\n <mat-form-field\n *ngIf=\"!monthPicker; else dateYearPicker\"\n #uiDatepicker\n appearance=\"outline\"\n [color]=\"(errorsLength || (ngControl?.errors && ngControl?.touched )) ? 'warn' : 'accent'\"\n [ngClass]=\"{ 'hide-bottom-content': !showBottomContent, 'full-width': fullWidth }\"\n >\n <mat-label *ngIf=\"label\">{{ label }}<span *ngIf=\"required\"> *</span></mat-label>\n <ng-container *ngIf=\"!isRange\">\n <input *ngIf=\"!isRange\" matInput\n [matDatepicker]=\"picker\"\n (blur)=\"onTouch()\"\n (dateChange)=\"onValueChange($event.value)\"\n [id]=\"id!\"\n [placeholder]=\"placeholder!\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n [name]=\"fieldName!\"\n [readonly]=\"preventUserInput\"\n [min]=\"minDate\"\n [max]=\"maxDate\"\n />\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\">\n <ui-icon matDatepickerToggleIcon [applicationTheme]=\"applicationTheme\" name=\"Calendar\" size=\"24\" color=\"inherit\"></ui-icon>\n </mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n </ng-container>\n\n <ng-container *ngIf=\"isRange\">\n <mat-date-range-input *ngIf=\"isRange\" [formGroup]=\"range\" [rangePicker]=\"rangePicker\" [min]=\"minDate\" [max]=\"maxDate\" >\n <input matStartDate #dateRangeStart formControlName=\"start\" [placeholder]=\"(translationContext + 'START_DATE') | uiTranslate : language\" (dateChange)=\"dateRangeChange(dateRangeStart.value, dateRangeEnd.value)\">\n <input matEndDate #dateRangeEnd formControlName=\"end\" [placeholder]=\"(translationContext + 'END_DATE') | uiTranslate : language\" (dateChange)=\"dateRangeChange(dateRangeStart.value, dateRangeEnd.value)\">\n </mat-date-range-input>\n <mat-datepicker-toggle matIconSuffix [for]=\"rangePicker\">\n <ui-icon matDatepickerToggleIcon [applicationTheme]=\"applicationTheme\" name=\"Calendar\" size=\"24\" color=\"inherit\"></ui-icon>\n </mat-datepicker-toggle>\n <mat-date-range-picker #rangePicker></mat-date-range-picker>\n </ng-container>\n\n <mat-hint class=\"info\" *ngIf=\"hint && !_errors && !(ngControl?.touched && (ngControl?.errors | hasValidationError))\">{{ hint }}</mat-hint>\n <mat-hint class=\"error\" *ngIf=\"errorsLength || (ngControl?.touched && (ngControl?.errors | hasValidationError))\">\n <ng-container *ngIf=\"errorsLength\">\n <div class=\"errors\" *ngFor=\"let error of _errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" name=\"Error\"></ui-icon>\n <span [innerHTML]=\"error\"></span>\n </div>\n </ng-container>\n <ui-validation-error *ngIf=\"ngControl && !hideBuiltInErrors\" [ngControl]=\"ngControl\" [label]=\"hideLabelInErrors ? null : label\" [language]=\"language\"></ui-validation-error>\n </mat-hint>\n </mat-form-field>\n\n <ng-template #dateYearPicker>\n <mat-form-field\n appNoDateFormat\n #uiDatepicker\n appearance=\"outline\"\n [color]=\"(errorsLength || (ngControl?.errors && ngControl?.touched )) ? 'warn' : 'accent'\"\n [ngClass]=\"{ 'hide-bottom-content': !showBottomContent, 'full-width': fullWidth }\"\n >\n <mat-label *ngIf=\"label\">{{ label }}<span *ngIf=\"required\"> *</span></mat-label>\n\n <ng-container >\n <input matInput\n [id]=\"id!\"\n (blur)=\"onTouch()\"\n [placeholder]=\"placeholder!\"\n [matDatepicker]=\"dp\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n [name]=\"fieldName!\"\n [min]=\"minDate\"\n [max]=\"maxDate\"\n [readonly]=\"preventUserInput\"\n (change)=\"onInput($event)\"\n (dateChange)=\"onValueChange($event.value)\"\n >\n <mat-datepicker-toggle matIconSuffix [for]=\"dp\">\n <ui-icon *ngIf=\"applicationTheme !== 'classic'\" matDatepickerToggleIcon [applicationTheme]=\"applicationTheme\" name=\"Calendar\" size=\"24\" color=\"inherit\"></ui-icon>\n </mat-datepicker-toggle>\n <mat-datepicker panelClass=\"month-picker\" #dp startView=\"multi-year\" (monthSelected)=\"setMonthAndYear($event, dp)\"></mat-datepicker>\n </ng-container>\n\n <mat-hint class=\"info\" *ngIf=\"hint && !_errors && !(ngControl?.touched && (ngControl?.errors | hasValidationError))\">{{ hint }}</mat-hint>\n <mat-hint class=\"error\" *ngIf=\"errorsLength || (ngControl?.touched && (ngControl?.errors | hasValidationError))\">\n <ng-container *ngIf=\"errorsLength\">\n <div class=\"errors\" *ngFor=\"let error of _errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" name=\"Error\"></ui-icon>\n <span [innerHTML]=\"error\"></span>\n </div>\n </ng-container>\n <ui-validation-error *ngIf=\"ngControl && !hideBuiltInErrors\" [ngControl]=\"ngControl\" [label]=\"hideLabelInErrors ? null : label\" [language]=\"language\"></ui-validation-error>\n </mat-hint>\n\n </mat-form-field>\n </ng-template>\n\n</ng-container>\n", styles: [".bg-teal-60b{background:#1c443c}.bg-teal-30b{background:#31766a}.bg-teal-default{background:#46a997}.bg-teal-30w{background:#7ec3b6}.bg-teal-60w{background:#b5ddd5}.bg-teal-secondary{background:#cbd6cb}.bg-teal-90w{background:#ecf6f5}.bg-petrol-60b{background:#102930}.bg-petrol-30b{background:#1b4754}.bg-petrol-default{background:#276678}.bg-petrol-30w{background:#6894a0}.bg-petrol-60w{background:#a9c2c9}.bg-petrol-secondary{background:#c8d7de}.bg-petrol-90w{background:#e9f0f1}.bg-error-60b{background:#513131}.bg-error-30b{background:#8e5655}.bg-error-60w{background:#e3c3c6}.bg-error-secondary{background:#f0dad9}.bg-error-default{background:#cb7b7a}.bg-warning-secondary{background:#f0d6bb}.bg-warning-default{background:#cca45f}.bg-black{background:#000}.bg-dark{background:#888}.bg-medium{background:#e0e0e0}.bg-grey{background:#ededed}.bg-light{background:#f6f6f6}.bg-white{background:#fff}.bg-box-shadow{background:#00000014}.bg-navigation-subtitle{background:#528593}.bgc-teal-60b{background-color:#1c443c}.bgc-teal-30b{background-color:#31766a}.bgc-teal-default{background-color:#46a997}.bgc-teal-30w{background-color:#7ec3b6}.bgc-teal-60w{background-color:#b5ddd5}.bgc-teal-secondary{background-color:#cbd6cb}.bgc-teal-90w{background-color:#ecf6f5}.bgc-petrol-60b{background-color:#102930}.bgc-petrol-30b{background-color:#1b4754}.bgc-petrol-default{background-color:#276678}.bgc-petrol-30w{background-color:#6894a0}.bgc-petrol-60w{background-color:#a9c2c9}.bgc-petrol-secondary{background-color:#c8d7de}.bgc-petrol-90w{background-color:#e9f0f1}.bgc-error-60b{background-color:#513131}.bgc-error-30b{background-color:#8e5655}.bgc-error-60w{background-color:#e3c3c6}.bgc-error-secondary{background-color:#f0dad9}.bgc-error-default{background-color:#cb7b7a}.bgc-warning-secondary{background-color:#f0d6bb}.bgc-warning-default{background-color:#cca45f}.bgc-black{background-color:#000}.bgc-dark{background-color:#888}.bgc-medium{background-color:#e0e0e0}.bgc-grey{background-color:#ededed}.bgc-light{background-color:#f6f6f6}.bgc-white{background-color:#fff}.bgc-box-shadow{background-color:#00000014}.bgc-navigation-subtitle{background-color:#528593}.month-picker .mat-calendar-period-button{pointer-events:none}.month-picker .mat-calendar-arrow{display:none}.ui-datepicker{width:100%}.ui-datepicker .mat-mdc-form-field{margin-top:0;min-width:296px}.ui-datepicker .mat-mdc-form-field.full-width{width:100%}.ui-datepicker .mat-mdc-form-field.hide-bottom-content .mat-mdc-form-field-subscript-wrapper{display:none}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-text-field-wrapper{height:48px}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-text-field-wrapper .mat-mdc-form-field-flex .mat-mdc-floating-label{top:22px}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mdc-notched-outline{color:#888}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mdc-notched-outline .mdc-floating-label--float-above{transform:translateY(-30px) scale(.75)}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-infix{min-height:48px;max-height:48px;padding:4px 0;line-height:22px;display:inline-flex;align-items:center}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-subscript-wrapper{padding:0 0 12px;margin-top:0;font-size:12px;line-height:16px;position:relative}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-subscript-wrapper .mat-form-field-hint-spacer{display:none}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-hint.info{color:#888;width:100%}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-bottom-align:before{height:0}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-hint-wrapper{padding:0;position:relative}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-hint.error,.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-hint.error svg{color:#cb7b7a}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-hint.error{display:flex}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-hint.error ui-icon{margin-right:4px}.ui-datepicker .mat-mdc-form-field.mat-warn.mat-form-field-appearance-outline:not(.mdc-text-field--disabled) .mat-mdc-form-field-flex:hover .mdc-notched-outline .mdc-notched-outline__leading,.ui-datepicker .mat-mdc-form-field.mat-warn.mat-form-field-appearance-outline:not(.mdc-text-field--disabled) .mat-mdc-form-field-flex:hover .mdc-notched-outline .mdc-notched-outline__trailing,.ui-datepicker .mat-mdc-form-field.mat-warn.mat-form-field-appearance-outline:not(.mdc-text-field--disabled) .mat-mdc-form-field-flex:hover .mdc-notched-outline .mdc-notched-outline__notch{border-color:#cb7b7a}.ui-datepicker .mat-mdc-form-field.mat-warn.mat-form-field-appearance-outline .mdc-notched-outline .mdc-notched-outline__leading,.ui-datepicker .mat-mdc-form-field.mat-warn.mat-form-field-appearance-outline .mdc-notched-outline .mdc-notched-outline__trailing,.ui-datepicker .mat-mdc-form-field.mat-warn.mat-form-field-appearance-outline .mdc-notched-outline .mdc-notched-outline__notch{border-color:#cb7b7a}.ui-datepicker .mat-mdc-form-field.mat-warn.mat-focused .mat-mdc-text-field-wrapper .mat-mdc-form-field-flex .mat-mdc-form-field-infix .mat-form-field-label mat-label{color:#cb7b7a}.ui-datepicker .mat-mdc-form-field .mat-mdc-form-field-hint.error{display:flex;flex-flow:column;row-gap:4px}.ui-datepicker .mat-mdc-form-field .mat-mdc-form-field-hint.error .errors{display:flex;padding-bottom:10px}.ui-datepicker .mat-mdc-form-field.mat-accent.mat-form-field-appearance-outline:not(.mat-form-field-disabled) .mat-mdc-form-field-flex:hover .mdc-notched-outline{color:#276678}.ui-datepicker .mat-mdc-form-field.mat-accent.mat-focused .mat-mdc-text-field-wrapper .mat-mdc-form-field-flex .mat-mdc-form-field-infix .mat-form-field-label mat-label{color:#276678}.ui-datepicker .mat-mdc-form-field.mat-form-field-disabled.mat-form-field-appearance-outline .mdc-notched-outline{color:#e0e0e0}.ui-datepicker .mat-mdc-form-field .mat-mdc-form-field-hint .hint-message{color:#888!important;margin-top:4px}.mat-datepicker-content .mat-mdc-button.mat-unthemed .mdc-button__label>span{font-weight:600}.mat-datepicker-content.mat-datepicker-content.mat-accent .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:#e9f0f1}.mat-datepicker-content.mat-datepicker-content.mat-accent .mat-calendar-body-in-range:before{background-color:#e9f0f1}[theme=dark] .mat-datepicker-content.mat-datepicker-content.mat-accent .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),[theme=light] .mat-datepicker-content.mat-datepicker-content.mat-accent .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:#fff2fc}[theme=dark] .mat-datepicker-content.mat-datepicker-content.mat-accent .mat-calendar-body-in-range:before,[theme=light] .mat-datepicker-content.mat-datepicker-content.mat-accent .mat-calendar-body-in-range:before{background-color:#fff2fc}[theme=dark] .mat-datepicker-content .mat-calendar-body-selected,[theme=light] .mat-datepicker-content .mat-calendar-body-selected{background-color:#d410aa}[theme=dark] .mat-datepicker-content .mat-calendar-body-today:not(.mat-calendar-body-selected),[theme=light] .mat-datepicker-content .mat-calendar-body-today:not(.mat-calendar-body-selected){background:transparent;--mat-datepicker-calendar-date-focus-state-background-color: $tgo-white }[theme=dark] .mat-datepicker-content .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),[theme=light] .mat-datepicker-content .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){--mat-datepicker-calendar-date-focus-state-background-color: $brand-10}.info{margin-top:4px!important;padding-bottom:10px}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i6.IconComponent, selector: "ui-icon", inputs: ["size", "cssClass", "name", "color", "filled", "applicationTheme"] }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i7.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i7.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i7.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "directive", type: i7.MatDatepickerToggleIcon, selector: "[matDatepickerToggleIcon]" }, { kind: "component", type: i7.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i7.MatStartDate, selector: "input[matStartDate]", inputs: ["errorStateMatcher"], outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i7.MatEndDate, selector: "input[matEndDate]", inputs: ["errorStateMatcher"], outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i7.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "directive", type: i8.NoDateFormatDirective, selector: "[appNoDateFormat]" }, { kind: "component", type: i9.ValidationErrorComponent, selector: "ui-validation-error", inputs: ["ngControl", "touchedOn", "errorMessage", "label", "applicationTheme", "language"] }, { kind: "pipe", type: i10.UiTranslatePipe, name: "uiTranslate" }, { kind: "pipe", type: i11.HasValidationErrorPipe, name: "hasValidationError" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
256
+ setStyleVariable() {
257
+ const hover = this.companyColor ? adjustLightness(this.companyColor, 'hover') : '#FFF2FC';
258
+ this.renderer2.setAttribute(document.body, 'style', `
259
+ --datepicker-hover-color: ${hover};
260
+ --datepicker-selected-color: ${this.companyColor || '#D410AA'}`);
261
+ }
262
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: DatepickerComponent, deps: [{ token: 'CANOPYUI_DEFAULT_APPLICATION_THEME', optional: true }, { token: i0.ChangeDetectorRef }, { token: i1.DomSanitizer }, { token: i2.NgControl, optional: true, self: true }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
263
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.7", type: DatepickerComponent, selector: "ui-datepicker", inputs: { label: "label", fieldName: "fieldName", placeholder: "placeholder", id: "id", value: "value", errors: "errors", isRange: "isRange", disabled: "disabled", required: "required", hintMessage: "hintMessage", updateOnBlur: "updateOnBlur", language: "language", showBottomContent: "showBottomContent", fullWidth: "fullWidth", minDate: "minDate", maxDate: "maxDate", monthPicker: "monthPicker", applicationTheme: "applicationTheme", hideBuiltInErrors: "hideBuiltInErrors", hideLabelInErrors: "hideLabelInErrors", preventUserInput: "preventUserInput", companyColor: "companyColor" }, outputs: { changed: "changed" }, host: { properties: { "class": "this.class" } }, usesOnChanges: true, ngImport: i0, template: "<ng-container>\n <mat-form-field\n *ngIf=\"!monthPicker; else dateYearPicker\"\n #uiDatepicker\n appearance=\"outline\"\n [color]=\"(errorsLength || (ngControl?.errors && ngControl?.touched )) ? 'warn' : 'accent'\"\n [ngClass]=\"{ 'hide-bottom-content': !showBottomContent, 'full-width': fullWidth }\"\n >\n <mat-label *ngIf=\"label\">{{ label }}<span *ngIf=\"required\"> *</span></mat-label>\n <ng-container *ngIf=\"!isRange\">\n <input *ngIf=\"!isRange\" matInput\n [matDatepicker]=\"picker\"\n (blur)=\"onTouch()\"\n (dateChange)=\"onValueChange($event.value)\"\n [id]=\"id!\"\n [placeholder]=\"placeholder!\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n [name]=\"fieldName!\"\n [readonly]=\"preventUserInput\"\n [min]=\"minDate\"\n [max]=\"maxDate\"\n />\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\">\n <ui-icon matDatepickerToggleIcon [applicationTheme]=\"applicationTheme\" name=\"Calendar\" size=\"24\" color=\"inherit\"></ui-icon>\n </mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n </ng-container>\n\n <ng-container *ngIf=\"isRange\">\n <mat-date-range-input *ngIf=\"isRange\" [formGroup]=\"range\" [rangePicker]=\"rangePicker\" [min]=\"minDate\" [max]=\"maxDate\" >\n <input matStartDate #dateRangeStart formControlName=\"start\" [placeholder]=\"(translationContext + 'START_DATE') | uiTranslate : language\" (dateChange)=\"dateRangeChange(dateRangeStart.value, dateRangeEnd.value)\">\n <input matEndDate #dateRangeEnd formControlName=\"end\" [placeholder]=\"(translationContext + 'END_DATE') | uiTranslate : language\" (dateChange)=\"dateRangeChange(dateRangeStart.value, dateRangeEnd.value)\">\n </mat-date-range-input>\n <mat-datepicker-toggle matIconSuffix [for]=\"rangePicker\">\n <ui-icon matDatepickerToggleIcon [applicationTheme]=\"applicationTheme\" name=\"Calendar\" size=\"24\" color=\"inherit\"></ui-icon>\n </mat-datepicker-toggle>\n <mat-date-range-picker #rangePicker></mat-date-range-picker>\n </ng-container>\n\n <mat-hint class=\"info\" *ngIf=\"hint && !_errors && !(ngControl?.touched && (ngControl?.errors | hasValidationError))\">{{ hint }}</mat-hint>\n <mat-hint class=\"error\" *ngIf=\"errorsLength || (ngControl?.touched && (ngControl?.errors | hasValidationError))\">\n <ng-container *ngIf=\"errorsLength\">\n <div class=\"errors\" *ngFor=\"let error of _errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" name=\"Error\"></ui-icon>\n <span [innerHTML]=\"error\"></span>\n </div>\n </ng-container>\n <ui-validation-error *ngIf=\"ngControl && !hideBuiltInErrors\" [ngControl]=\"ngControl\" [label]=\"hideLabelInErrors ? null : label\" [language]=\"language\"></ui-validation-error>\n </mat-hint>\n </mat-form-field>\n\n <ng-template #dateYearPicker>\n <mat-form-field\n appNoDateFormat\n #uiDatepicker\n appearance=\"outline\"\n [color]=\"(errorsLength || (ngControl?.errors && ngControl?.touched )) ? 'warn' : 'accent'\"\n [ngClass]=\"{ 'hide-bottom-content': !showBottomContent, 'full-width': fullWidth }\"\n >\n <mat-label *ngIf=\"label\">{{ label }}<span *ngIf=\"required\"> *</span></mat-label>\n\n <ng-container >\n <input matInput\n [id]=\"id!\"\n (blur)=\"onTouch()\"\n [placeholder]=\"placeholder!\"\n [matDatepicker]=\"dp\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n [name]=\"fieldName!\"\n [min]=\"minDate\"\n [max]=\"maxDate\"\n [readonly]=\"preventUserInput\"\n (change)=\"onInput($event)\"\n (dateChange)=\"onValueChange($event.value)\"\n >\n <mat-datepicker-toggle matIconSuffix [for]=\"dp\">\n <ui-icon *ngIf=\"applicationTheme !== 'classic'\" matDatepickerToggleIcon [applicationTheme]=\"applicationTheme\" name=\"Calendar\" size=\"24\" color=\"inherit\"></ui-icon>\n </mat-datepicker-toggle>\n <mat-datepicker panelClass=\"month-picker\" #dp startView=\"multi-year\" (monthSelected)=\"setMonthAndYear($event, dp)\"></mat-datepicker>\n </ng-container>\n\n <mat-hint class=\"info\" *ngIf=\"hint && !_errors && !(ngControl?.touched && (ngControl?.errors | hasValidationError))\">{{ hint }}</mat-hint>\n <mat-hint class=\"error\" *ngIf=\"errorsLength || (ngControl?.touched && (ngControl?.errors | hasValidationError))\">\n <ng-container *ngIf=\"errorsLength\">\n <div class=\"errors\" *ngFor=\"let error of _errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" name=\"Error\"></ui-icon>\n <span [innerHTML]=\"error\"></span>\n </div>\n </ng-container>\n <ui-validation-error *ngIf=\"ngControl && !hideBuiltInErrors\" [ngControl]=\"ngControl\" [label]=\"hideLabelInErrors ? null : label\" [language]=\"language\"></ui-validation-error>\n </mat-hint>\n\n </mat-form-field>\n </ng-template>\n\n</ng-container>\n", styles: [".bg-teal-60b{background:#1c443c}.bg-teal-30b{background:#31766a}.bg-teal-default{background:#46a997}.bg-teal-30w{background:#7ec3b6}.bg-teal-60w{background:#b5ddd5}.bg-teal-secondary{background:#cbd6cb}.bg-teal-90w{background:#ecf6f5}.bg-petrol-60b{background:#102930}.bg-petrol-30b{background:#1b4754}.bg-petrol-default{background:#276678}.bg-petrol-30w{background:#6894a0}.bg-petrol-60w{background:#a9c2c9}.bg-petrol-secondary{background:#c8d7de}.bg-petrol-90w{background:#e9f0f1}.bg-error-60b{background:#513131}.bg-error-30b{background:#8e5655}.bg-error-60w{background:#e3c3c6}.bg-error-secondary{background:#f0dad9}.bg-error-default{background:#cb7b7a}.bg-warning-secondary{background:#f0d6bb}.bg-warning-default{background:#cca45f}.bg-black{background:#000}.bg-dark{background:#888}.bg-medium{background:#e0e0e0}.bg-grey{background:#ededed}.bg-light{background:#f6f6f6}.bg-white{background:#fff}.bg-box-shadow{background:#00000014}.bg-navigation-subtitle{background:#528593}.bgc-teal-60b{background-color:#1c443c}.bgc-teal-30b{background-color:#31766a}.bgc-teal-default{background-color:#46a997}.bgc-teal-30w{background-color:#7ec3b6}.bgc-teal-60w{background-color:#b5ddd5}.bgc-teal-secondary{background-color:#cbd6cb}.bgc-teal-90w{background-color:#ecf6f5}.bgc-petrol-60b{background-color:#102930}.bgc-petrol-30b{background-color:#1b4754}.bgc-petrol-default{background-color:#276678}.bgc-petrol-30w{background-color:#6894a0}.bgc-petrol-60w{background-color:#a9c2c9}.bgc-petrol-secondary{background-color:#c8d7de}.bgc-petrol-90w{background-color:#e9f0f1}.bgc-error-60b{background-color:#513131}.bgc-error-30b{background-color:#8e5655}.bgc-error-60w{background-color:#e3c3c6}.bgc-error-secondary{background-color:#f0dad9}.bgc-error-default{background-color:#cb7b7a}.bgc-warning-secondary{background-color:#f0d6bb}.bgc-warning-default{background-color:#cca45f}.bgc-black{background-color:#000}.bgc-dark{background-color:#888}.bgc-medium{background-color:#e0e0e0}.bgc-grey{background-color:#ededed}.bgc-light{background-color:#f6f6f6}.bgc-white{background-color:#fff}.bgc-box-shadow{background-color:#00000014}.bgc-navigation-subtitle{background-color:#528593}.month-picker .mat-calendar-period-button{pointer-events:none}.month-picker .mat-calendar-arrow{display:none}.ui-datepicker{width:100%}.ui-datepicker .mat-mdc-form-field{margin-top:0;min-width:296px}.ui-datepicker .mat-mdc-form-field.full-width{width:100%}.ui-datepicker .mat-mdc-form-field.hide-bottom-content .mat-mdc-form-field-subscript-wrapper{display:none}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-text-field-wrapper{height:48px}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-text-field-wrapper .mat-mdc-form-field-flex .mat-mdc-floating-label{top:22px}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mdc-notched-outline{color:#888}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mdc-notched-outline .mdc-floating-label--float-above{transform:translateY(-30px) scale(.75)}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-infix{min-height:48px;max-height:48px;padding:4px 0;line-height:22px;display:inline-flex;align-items:center}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-subscript-wrapper{padding:0 0 12px;margin-top:0;font-size:12px;line-height:16px;position:relative}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-subscript-wrapper .mat-form-field-hint-spacer{display:none}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-hint.info{color:#888;width:100%}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-bottom-align:before{height:0}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-hint-wrapper{padding:0;position:relative}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-hint.error,.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-hint.error svg{color:#cb7b7a}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-hint.error{display:flex}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-hint.error ui-icon{margin-right:4px}.ui-datepicker .mat-mdc-form-field.mat-warn.mat-form-field-appearance-outline:not(.mdc-text-field--disabled) .mat-mdc-form-field-flex:hover .mdc-notched-outline .mdc-notched-outline__leading,.ui-datepicker .mat-mdc-form-field.mat-warn.mat-form-field-appearance-outline:not(.mdc-text-field--disabled) .mat-mdc-form-field-flex:hover .mdc-notched-outline .mdc-notched-outline__trailing,.ui-datepicker .mat-mdc-form-field.mat-warn.mat-form-field-appearance-outline:not(.mdc-text-field--disabled) .mat-mdc-form-field-flex:hover .mdc-notched-outline .mdc-notched-outline__notch{border-color:#cb7b7a}.ui-datepicker .mat-mdc-form-field.mat-warn.mat-form-field-appearance-outline .mdc-notched-outline .mdc-notched-outline__leading,.ui-datepicker .mat-mdc-form-field.mat-warn.mat-form-field-appearance-outline .mdc-notched-outline .mdc-notched-outline__trailing,.ui-datepicker .mat-mdc-form-field.mat-warn.mat-form-field-appearance-outline .mdc-notched-outline .mdc-notched-outline__notch{border-color:#cb7b7a}.ui-datepicker .mat-mdc-form-field.mat-warn.mat-focused .mat-mdc-text-field-wrapper .mat-mdc-form-field-flex .mat-mdc-form-field-infix .mat-form-field-label mat-label{color:#cb7b7a}.ui-datepicker .mat-mdc-form-field .mat-mdc-form-field-hint.error{display:flex;flex-flow:column;row-gap:4px}.ui-datepicker .mat-mdc-form-field .mat-mdc-form-field-hint.error .errors{display:flex;padding-bottom:10px}.ui-datepicker .mat-mdc-form-field.mat-accent.mat-form-field-appearance-outline:not(.mat-form-field-disabled) .mat-mdc-form-field-flex:hover .mdc-notched-outline{color:#276678}.ui-datepicker .mat-mdc-form-field.mat-accent.mat-focused .mat-mdc-text-field-wrapper .mat-mdc-form-field-flex .mat-mdc-form-field-infix .mat-form-field-label mat-label{color:#276678}.ui-datepicker .mat-mdc-form-field.mat-form-field-disabled.mat-form-field-appearance-outline .mdc-notched-outline{color:#e0e0e0}.ui-datepicker .mat-mdc-form-field .mat-mdc-form-field-hint .hint-message{color:#888!important;margin-top:4px}.mat-datepicker-content .mat-mdc-button.mat-unthemed .mdc-button__label>span{font-weight:600}.mat-datepicker-content.mat-datepicker-content.mat-accent .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:#e9f0f1}.mat-datepicker-content.mat-datepicker-content.mat-accent .mat-calendar-body-in-range:before{background-color:#e9f0f1}[theme=dark] .mat-datepicker-content.mat-datepicker-content.mat-accent .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),[theme=light] .mat-datepicker-content.mat-datepicker-content.mat-accent .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:var(--datepicker-hover-color)}[theme=dark] .mat-datepicker-content.mat-datepicker-content.mat-accent .mat-calendar-body-in-range:before,[theme=light] .mat-datepicker-content.mat-datepicker-content.mat-accent .mat-calendar-body-in-range:before{background-color:var(--datepicker-hover-color)}[theme=dark] .mat-datepicker-content .mat-calendar-body-selected,[theme=light] .mat-datepicker-content .mat-calendar-body-selected{background-color:var(--datepicker-selected-color)}[theme=dark] .mat-datepicker-content .mat-calendar-body-today:not(.mat-calendar-body-selected),[theme=light] .mat-datepicker-content .mat-calendar-body-today:not(.mat-calendar-body-selected){background:transparent;--mat-datepicker-calendar-date-focus-state-background-color: $tgo-white }[theme=dark] .mat-datepicker-content .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),[theme=light] .mat-datepicker-content .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){--mat-datepicker-calendar-date-focus-state-background-color: var(--datepicker-hover-color)}.info{margin-top:4px!important;padding-bottom:10px}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i6.IconComponent, selector: "ui-icon", inputs: ["size", "cssClass", "name", "color", "filled", "applicationTheme"] }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i7.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i7.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i7.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "directive", type: i7.MatDatepickerToggleIcon, selector: "[matDatepickerToggleIcon]" }, { kind: "component", type: i7.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i7.MatStartDate, selector: "input[matStartDate]", inputs: ["errorStateMatcher"], outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i7.MatEndDate, selector: "input[matEndDate]", inputs: ["errorStateMatcher"], outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i7.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "directive", type: i8.NoDateFormatDirective, selector: "[appNoDateFormat]" }, { kind: "component", type: i9.ValidationErrorComponent, selector: "ui-validation-error", inputs: ["ngControl", "touchedOn", "errorMessage", "label", "applicationTheme", "language"] }, { kind: "pipe", type: i10.UiTranslatePipe, name: "uiTranslate" }, { kind: "pipe", type: i11.HasValidationErrorPipe, name: "hasValidationError" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
244
264
  }
245
265
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: DatepickerComponent, decorators: [{
246
266
  type: Component,
247
- args: [{ selector: 'ui-datepicker', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container>\n <mat-form-field\n *ngIf=\"!monthPicker; else dateYearPicker\"\n #uiDatepicker\n appearance=\"outline\"\n [color]=\"(errorsLength || (ngControl?.errors && ngControl?.touched )) ? 'warn' : 'accent'\"\n [ngClass]=\"{ 'hide-bottom-content': !showBottomContent, 'full-width': fullWidth }\"\n >\n <mat-label *ngIf=\"label\">{{ label }}<span *ngIf=\"required\"> *</span></mat-label>\n <ng-container *ngIf=\"!isRange\">\n <input *ngIf=\"!isRange\" matInput\n [matDatepicker]=\"picker\"\n (blur)=\"onTouch()\"\n (dateChange)=\"onValueChange($event.value)\"\n [id]=\"id!\"\n [placeholder]=\"placeholder!\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n [name]=\"fieldName!\"\n [readonly]=\"preventUserInput\"\n [min]=\"minDate\"\n [max]=\"maxDate\"\n />\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\">\n <ui-icon matDatepickerToggleIcon [applicationTheme]=\"applicationTheme\" name=\"Calendar\" size=\"24\" color=\"inherit\"></ui-icon>\n </mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n </ng-container>\n\n <ng-container *ngIf=\"isRange\">\n <mat-date-range-input *ngIf=\"isRange\" [formGroup]=\"range\" [rangePicker]=\"rangePicker\" [min]=\"minDate\" [max]=\"maxDate\" >\n <input matStartDate #dateRangeStart formControlName=\"start\" [placeholder]=\"(translationContext + 'START_DATE') | uiTranslate : language\" (dateChange)=\"dateRangeChange(dateRangeStart.value, dateRangeEnd.value)\">\n <input matEndDate #dateRangeEnd formControlName=\"end\" [placeholder]=\"(translationContext + 'END_DATE') | uiTranslate : language\" (dateChange)=\"dateRangeChange(dateRangeStart.value, dateRangeEnd.value)\">\n </mat-date-range-input>\n <mat-datepicker-toggle matIconSuffix [for]=\"rangePicker\">\n <ui-icon matDatepickerToggleIcon [applicationTheme]=\"applicationTheme\" name=\"Calendar\" size=\"24\" color=\"inherit\"></ui-icon>\n </mat-datepicker-toggle>\n <mat-date-range-picker #rangePicker></mat-date-range-picker>\n </ng-container>\n\n <mat-hint class=\"info\" *ngIf=\"hint && !_errors && !(ngControl?.touched && (ngControl?.errors | hasValidationError))\">{{ hint }}</mat-hint>\n <mat-hint class=\"error\" *ngIf=\"errorsLength || (ngControl?.touched && (ngControl?.errors | hasValidationError))\">\n <ng-container *ngIf=\"errorsLength\">\n <div class=\"errors\" *ngFor=\"let error of _errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" name=\"Error\"></ui-icon>\n <span [innerHTML]=\"error\"></span>\n </div>\n </ng-container>\n <ui-validation-error *ngIf=\"ngControl && !hideBuiltInErrors\" [ngControl]=\"ngControl\" [label]=\"hideLabelInErrors ? null : label\" [language]=\"language\"></ui-validation-error>\n </mat-hint>\n </mat-form-field>\n\n <ng-template #dateYearPicker>\n <mat-form-field\n appNoDateFormat\n #uiDatepicker\n appearance=\"outline\"\n [color]=\"(errorsLength || (ngControl?.errors && ngControl?.touched )) ? 'warn' : 'accent'\"\n [ngClass]=\"{ 'hide-bottom-content': !showBottomContent, 'full-width': fullWidth }\"\n >\n <mat-label *ngIf=\"label\">{{ label }}<span *ngIf=\"required\"> *</span></mat-label>\n\n <ng-container >\n <input matInput\n [id]=\"id!\"\n (blur)=\"onTouch()\"\n [placeholder]=\"placeholder!\"\n [matDatepicker]=\"dp\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n [name]=\"fieldName!\"\n [min]=\"minDate\"\n [max]=\"maxDate\"\n [readonly]=\"preventUserInput\"\n (change)=\"onInput($event)\"\n (dateChange)=\"onValueChange($event.value)\"\n >\n <mat-datepicker-toggle matIconSuffix [for]=\"dp\">\n <ui-icon *ngIf=\"applicationTheme !== 'classic'\" matDatepickerToggleIcon [applicationTheme]=\"applicationTheme\" name=\"Calendar\" size=\"24\" color=\"inherit\"></ui-icon>\n </mat-datepicker-toggle>\n <mat-datepicker panelClass=\"month-picker\" #dp startView=\"multi-year\" (monthSelected)=\"setMonthAndYear($event, dp)\"></mat-datepicker>\n </ng-container>\n\n <mat-hint class=\"info\" *ngIf=\"hint && !_errors && !(ngControl?.touched && (ngControl?.errors | hasValidationError))\">{{ hint }}</mat-hint>\n <mat-hint class=\"error\" *ngIf=\"errorsLength || (ngControl?.touched && (ngControl?.errors | hasValidationError))\">\n <ng-container *ngIf=\"errorsLength\">\n <div class=\"errors\" *ngFor=\"let error of _errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" name=\"Error\"></ui-icon>\n <span [innerHTML]=\"error\"></span>\n </div>\n </ng-container>\n <ui-validation-error *ngIf=\"ngControl && !hideBuiltInErrors\" [ngControl]=\"ngControl\" [label]=\"hideLabelInErrors ? null : label\" [language]=\"language\"></ui-validation-error>\n </mat-hint>\n\n </mat-form-field>\n </ng-template>\n\n</ng-container>\n", styles: [".bg-teal-60b{background:#1c443c}.bg-teal-30b{background:#31766a}.bg-teal-default{background:#46a997}.bg-teal-30w{background:#7ec3b6}.bg-teal-60w{background:#b5ddd5}.bg-teal-secondary{background:#cbd6cb}.bg-teal-90w{background:#ecf6f5}.bg-petrol-60b{background:#102930}.bg-petrol-30b{background:#1b4754}.bg-petrol-default{background:#276678}.bg-petrol-30w{background:#6894a0}.bg-petrol-60w{background:#a9c2c9}.bg-petrol-secondary{background:#c8d7de}.bg-petrol-90w{background:#e9f0f1}.bg-error-60b{background:#513131}.bg-error-30b{background:#8e5655}.bg-error-60w{background:#e3c3c6}.bg-error-secondary{background:#f0dad9}.bg-error-default{background:#cb7b7a}.bg-warning-secondary{background:#f0d6bb}.bg-warning-default{background:#cca45f}.bg-black{background:#000}.bg-dark{background:#888}.bg-medium{background:#e0e0e0}.bg-grey{background:#ededed}.bg-light{background:#f6f6f6}.bg-white{background:#fff}.bg-box-shadow{background:#00000014}.bg-navigation-subtitle{background:#528593}.bgc-teal-60b{background-color:#1c443c}.bgc-teal-30b{background-color:#31766a}.bgc-teal-default{background-color:#46a997}.bgc-teal-30w{background-color:#7ec3b6}.bgc-teal-60w{background-color:#b5ddd5}.bgc-teal-secondary{background-color:#cbd6cb}.bgc-teal-90w{background-color:#ecf6f5}.bgc-petrol-60b{background-color:#102930}.bgc-petrol-30b{background-color:#1b4754}.bgc-petrol-default{background-color:#276678}.bgc-petrol-30w{background-color:#6894a0}.bgc-petrol-60w{background-color:#a9c2c9}.bgc-petrol-secondary{background-color:#c8d7de}.bgc-petrol-90w{background-color:#e9f0f1}.bgc-error-60b{background-color:#513131}.bgc-error-30b{background-color:#8e5655}.bgc-error-60w{background-color:#e3c3c6}.bgc-error-secondary{background-color:#f0dad9}.bgc-error-default{background-color:#cb7b7a}.bgc-warning-secondary{background-color:#f0d6bb}.bgc-warning-default{background-color:#cca45f}.bgc-black{background-color:#000}.bgc-dark{background-color:#888}.bgc-medium{background-color:#e0e0e0}.bgc-grey{background-color:#ededed}.bgc-light{background-color:#f6f6f6}.bgc-white{background-color:#fff}.bgc-box-shadow{background-color:#00000014}.bgc-navigation-subtitle{background-color:#528593}.month-picker .mat-calendar-period-button{pointer-events:none}.month-picker .mat-calendar-arrow{display:none}.ui-datepicker{width:100%}.ui-datepicker .mat-mdc-form-field{margin-top:0;min-width:296px}.ui-datepicker .mat-mdc-form-field.full-width{width:100%}.ui-datepicker .mat-mdc-form-field.hide-bottom-content .mat-mdc-form-field-subscript-wrapper{display:none}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-text-field-wrapper{height:48px}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-text-field-wrapper .mat-mdc-form-field-flex .mat-mdc-floating-label{top:22px}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mdc-notched-outline{color:#888}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mdc-notched-outline .mdc-floating-label--float-above{transform:translateY(-30px) scale(.75)}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-infix{min-height:48px;max-height:48px;padding:4px 0;line-height:22px;display:inline-flex;align-items:center}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-subscript-wrapper{padding:0 0 12px;margin-top:0;font-size:12px;line-height:16px;position:relative}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-subscript-wrapper .mat-form-field-hint-spacer{display:none}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-hint.info{color:#888;width:100%}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-bottom-align:before{height:0}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-hint-wrapper{padding:0;position:relative}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-hint.error,.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-hint.error svg{color:#cb7b7a}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-hint.error{display:flex}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-hint.error ui-icon{margin-right:4px}.ui-datepicker .mat-mdc-form-field.mat-warn.mat-form-field-appearance-outline:not(.mdc-text-field--disabled) .mat-mdc-form-field-flex:hover .mdc-notched-outline .mdc-notched-outline__leading,.ui-datepicker .mat-mdc-form-field.mat-warn.mat-form-field-appearance-outline:not(.mdc-text-field--disabled) .mat-mdc-form-field-flex:hover .mdc-notched-outline .mdc-notched-outline__trailing,.ui-datepicker .mat-mdc-form-field.mat-warn.mat-form-field-appearance-outline:not(.mdc-text-field--disabled) .mat-mdc-form-field-flex:hover .mdc-notched-outline .mdc-notched-outline__notch{border-color:#cb7b7a}.ui-datepicker .mat-mdc-form-field.mat-warn.mat-form-field-appearance-outline .mdc-notched-outline .mdc-notched-outline__leading,.ui-datepicker .mat-mdc-form-field.mat-warn.mat-form-field-appearance-outline .mdc-notched-outline .mdc-notched-outline__trailing,.ui-datepicker .mat-mdc-form-field.mat-warn.mat-form-field-appearance-outline .mdc-notched-outline .mdc-notched-outline__notch{border-color:#cb7b7a}.ui-datepicker .mat-mdc-form-field.mat-warn.mat-focused .mat-mdc-text-field-wrapper .mat-mdc-form-field-flex .mat-mdc-form-field-infix .mat-form-field-label mat-label{color:#cb7b7a}.ui-datepicker .mat-mdc-form-field .mat-mdc-form-field-hint.error{display:flex;flex-flow:column;row-gap:4px}.ui-datepicker .mat-mdc-form-field .mat-mdc-form-field-hint.error .errors{display:flex;padding-bottom:10px}.ui-datepicker .mat-mdc-form-field.mat-accent.mat-form-field-appearance-outline:not(.mat-form-field-disabled) .mat-mdc-form-field-flex:hover .mdc-notched-outline{color:#276678}.ui-datepicker .mat-mdc-form-field.mat-accent.mat-focused .mat-mdc-text-field-wrapper .mat-mdc-form-field-flex .mat-mdc-form-field-infix .mat-form-field-label mat-label{color:#276678}.ui-datepicker .mat-mdc-form-field.mat-form-field-disabled.mat-form-field-appearance-outline .mdc-notched-outline{color:#e0e0e0}.ui-datepicker .mat-mdc-form-field .mat-mdc-form-field-hint .hint-message{color:#888!important;margin-top:4px}.mat-datepicker-content .mat-mdc-button.mat-unthemed .mdc-button__label>span{font-weight:600}.mat-datepicker-content.mat-datepicker-content.mat-accent .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:#e9f0f1}.mat-datepicker-content.mat-datepicker-content.mat-accent .mat-calendar-body-in-range:before{background-color:#e9f0f1}[theme=dark] .mat-datepicker-content.mat-datepicker-content.mat-accent .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),[theme=light] .mat-datepicker-content.mat-datepicker-content.mat-accent .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:#fff2fc}[theme=dark] .mat-datepicker-content.mat-datepicker-content.mat-accent .mat-calendar-body-in-range:before,[theme=light] .mat-datepicker-content.mat-datepicker-content.mat-accent .mat-calendar-body-in-range:before{background-color:#fff2fc}[theme=dark] .mat-datepicker-content .mat-calendar-body-selected,[theme=light] .mat-datepicker-content .mat-calendar-body-selected{background-color:#d410aa}[theme=dark] .mat-datepicker-content .mat-calendar-body-today:not(.mat-calendar-body-selected),[theme=light] .mat-datepicker-content .mat-calendar-body-today:not(.mat-calendar-body-selected){background:transparent;--mat-datepicker-calendar-date-focus-state-background-color: $tgo-white }[theme=dark] .mat-datepicker-content .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),[theme=light] .mat-datepicker-content .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){--mat-datepicker-calendar-date-focus-state-background-color: $brand-10}.info{margin-top:4px!important;padding-bottom:10px}\n"] }]
267
+ args: [{ selector: 'ui-datepicker', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container>\n <mat-form-field\n *ngIf=\"!monthPicker; else dateYearPicker\"\n #uiDatepicker\n appearance=\"outline\"\n [color]=\"(errorsLength || (ngControl?.errors && ngControl?.touched )) ? 'warn' : 'accent'\"\n [ngClass]=\"{ 'hide-bottom-content': !showBottomContent, 'full-width': fullWidth }\"\n >\n <mat-label *ngIf=\"label\">{{ label }}<span *ngIf=\"required\"> *</span></mat-label>\n <ng-container *ngIf=\"!isRange\">\n <input *ngIf=\"!isRange\" matInput\n [matDatepicker]=\"picker\"\n (blur)=\"onTouch()\"\n (dateChange)=\"onValueChange($event.value)\"\n [id]=\"id!\"\n [placeholder]=\"placeholder!\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n [name]=\"fieldName!\"\n [readonly]=\"preventUserInput\"\n [min]=\"minDate\"\n [max]=\"maxDate\"\n />\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\">\n <ui-icon matDatepickerToggleIcon [applicationTheme]=\"applicationTheme\" name=\"Calendar\" size=\"24\" color=\"inherit\"></ui-icon>\n </mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n </ng-container>\n\n <ng-container *ngIf=\"isRange\">\n <mat-date-range-input *ngIf=\"isRange\" [formGroup]=\"range\" [rangePicker]=\"rangePicker\" [min]=\"minDate\" [max]=\"maxDate\" >\n <input matStartDate #dateRangeStart formControlName=\"start\" [placeholder]=\"(translationContext + 'START_DATE') | uiTranslate : language\" (dateChange)=\"dateRangeChange(dateRangeStart.value, dateRangeEnd.value)\">\n <input matEndDate #dateRangeEnd formControlName=\"end\" [placeholder]=\"(translationContext + 'END_DATE') | uiTranslate : language\" (dateChange)=\"dateRangeChange(dateRangeStart.value, dateRangeEnd.value)\">\n </mat-date-range-input>\n <mat-datepicker-toggle matIconSuffix [for]=\"rangePicker\">\n <ui-icon matDatepickerToggleIcon [applicationTheme]=\"applicationTheme\" name=\"Calendar\" size=\"24\" color=\"inherit\"></ui-icon>\n </mat-datepicker-toggle>\n <mat-date-range-picker #rangePicker></mat-date-range-picker>\n </ng-container>\n\n <mat-hint class=\"info\" *ngIf=\"hint && !_errors && !(ngControl?.touched && (ngControl?.errors | hasValidationError))\">{{ hint }}</mat-hint>\n <mat-hint class=\"error\" *ngIf=\"errorsLength || (ngControl?.touched && (ngControl?.errors | hasValidationError))\">\n <ng-container *ngIf=\"errorsLength\">\n <div class=\"errors\" *ngFor=\"let error of _errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" name=\"Error\"></ui-icon>\n <span [innerHTML]=\"error\"></span>\n </div>\n </ng-container>\n <ui-validation-error *ngIf=\"ngControl && !hideBuiltInErrors\" [ngControl]=\"ngControl\" [label]=\"hideLabelInErrors ? null : label\" [language]=\"language\"></ui-validation-error>\n </mat-hint>\n </mat-form-field>\n\n <ng-template #dateYearPicker>\n <mat-form-field\n appNoDateFormat\n #uiDatepicker\n appearance=\"outline\"\n [color]=\"(errorsLength || (ngControl?.errors && ngControl?.touched )) ? 'warn' : 'accent'\"\n [ngClass]=\"{ 'hide-bottom-content': !showBottomContent, 'full-width': fullWidth }\"\n >\n <mat-label *ngIf=\"label\">{{ label }}<span *ngIf=\"required\"> *</span></mat-label>\n\n <ng-container >\n <input matInput\n [id]=\"id!\"\n (blur)=\"onTouch()\"\n [placeholder]=\"placeholder!\"\n [matDatepicker]=\"dp\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n [name]=\"fieldName!\"\n [min]=\"minDate\"\n [max]=\"maxDate\"\n [readonly]=\"preventUserInput\"\n (change)=\"onInput($event)\"\n (dateChange)=\"onValueChange($event.value)\"\n >\n <mat-datepicker-toggle matIconSuffix [for]=\"dp\">\n <ui-icon *ngIf=\"applicationTheme !== 'classic'\" matDatepickerToggleIcon [applicationTheme]=\"applicationTheme\" name=\"Calendar\" size=\"24\" color=\"inherit\"></ui-icon>\n </mat-datepicker-toggle>\n <mat-datepicker panelClass=\"month-picker\" #dp startView=\"multi-year\" (monthSelected)=\"setMonthAndYear($event, dp)\"></mat-datepicker>\n </ng-container>\n\n <mat-hint class=\"info\" *ngIf=\"hint && !_errors && !(ngControl?.touched && (ngControl?.errors | hasValidationError))\">{{ hint }}</mat-hint>\n <mat-hint class=\"error\" *ngIf=\"errorsLength || (ngControl?.touched && (ngControl?.errors | hasValidationError))\">\n <ng-container *ngIf=\"errorsLength\">\n <div class=\"errors\" *ngFor=\"let error of _errors\">\n <ui-icon [applicationTheme]=\"applicationTheme\" name=\"Error\"></ui-icon>\n <span [innerHTML]=\"error\"></span>\n </div>\n </ng-container>\n <ui-validation-error *ngIf=\"ngControl && !hideBuiltInErrors\" [ngControl]=\"ngControl\" [label]=\"hideLabelInErrors ? null : label\" [language]=\"language\"></ui-validation-error>\n </mat-hint>\n\n </mat-form-field>\n </ng-template>\n\n</ng-container>\n", styles: [".bg-teal-60b{background:#1c443c}.bg-teal-30b{background:#31766a}.bg-teal-default{background:#46a997}.bg-teal-30w{background:#7ec3b6}.bg-teal-60w{background:#b5ddd5}.bg-teal-secondary{background:#cbd6cb}.bg-teal-90w{background:#ecf6f5}.bg-petrol-60b{background:#102930}.bg-petrol-30b{background:#1b4754}.bg-petrol-default{background:#276678}.bg-petrol-30w{background:#6894a0}.bg-petrol-60w{background:#a9c2c9}.bg-petrol-secondary{background:#c8d7de}.bg-petrol-90w{background:#e9f0f1}.bg-error-60b{background:#513131}.bg-error-30b{background:#8e5655}.bg-error-60w{background:#e3c3c6}.bg-error-secondary{background:#f0dad9}.bg-error-default{background:#cb7b7a}.bg-warning-secondary{background:#f0d6bb}.bg-warning-default{background:#cca45f}.bg-black{background:#000}.bg-dark{background:#888}.bg-medium{background:#e0e0e0}.bg-grey{background:#ededed}.bg-light{background:#f6f6f6}.bg-white{background:#fff}.bg-box-shadow{background:#00000014}.bg-navigation-subtitle{background:#528593}.bgc-teal-60b{background-color:#1c443c}.bgc-teal-30b{background-color:#31766a}.bgc-teal-default{background-color:#46a997}.bgc-teal-30w{background-color:#7ec3b6}.bgc-teal-60w{background-color:#b5ddd5}.bgc-teal-secondary{background-color:#cbd6cb}.bgc-teal-90w{background-color:#ecf6f5}.bgc-petrol-60b{background-color:#102930}.bgc-petrol-30b{background-color:#1b4754}.bgc-petrol-default{background-color:#276678}.bgc-petrol-30w{background-color:#6894a0}.bgc-petrol-60w{background-color:#a9c2c9}.bgc-petrol-secondary{background-color:#c8d7de}.bgc-petrol-90w{background-color:#e9f0f1}.bgc-error-60b{background-color:#513131}.bgc-error-30b{background-color:#8e5655}.bgc-error-60w{background-color:#e3c3c6}.bgc-error-secondary{background-color:#f0dad9}.bgc-error-default{background-color:#cb7b7a}.bgc-warning-secondary{background-color:#f0d6bb}.bgc-warning-default{background-color:#cca45f}.bgc-black{background-color:#000}.bgc-dark{background-color:#888}.bgc-medium{background-color:#e0e0e0}.bgc-grey{background-color:#ededed}.bgc-light{background-color:#f6f6f6}.bgc-white{background-color:#fff}.bgc-box-shadow{background-color:#00000014}.bgc-navigation-subtitle{background-color:#528593}.month-picker .mat-calendar-period-button{pointer-events:none}.month-picker .mat-calendar-arrow{display:none}.ui-datepicker{width:100%}.ui-datepicker .mat-mdc-form-field{margin-top:0;min-width:296px}.ui-datepicker .mat-mdc-form-field.full-width{width:100%}.ui-datepicker .mat-mdc-form-field.hide-bottom-content .mat-mdc-form-field-subscript-wrapper{display:none}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-text-field-wrapper{height:48px}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-text-field-wrapper .mat-mdc-form-field-flex .mat-mdc-floating-label{top:22px}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mdc-notched-outline{color:#888}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mdc-notched-outline .mdc-floating-label--float-above{transform:translateY(-30px) scale(.75)}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-infix{min-height:48px;max-height:48px;padding:4px 0;line-height:22px;display:inline-flex;align-items:center}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-subscript-wrapper{padding:0 0 12px;margin-top:0;font-size:12px;line-height:16px;position:relative}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-subscript-wrapper .mat-form-field-hint-spacer{display:none}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-hint.info{color:#888;width:100%}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-bottom-align:before{height:0}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-hint-wrapper{padding:0;position:relative}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-hint.error,.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-hint.error svg{color:#cb7b7a}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-hint.error{display:flex}.ui-datepicker .mat-mdc-form-field.mat-form-field-appearance-outline .mat-mdc-form-field-hint.error ui-icon{margin-right:4px}.ui-datepicker .mat-mdc-form-field.mat-warn.mat-form-field-appearance-outline:not(.mdc-text-field--disabled) .mat-mdc-form-field-flex:hover .mdc-notched-outline .mdc-notched-outline__leading,.ui-datepicker .mat-mdc-form-field.mat-warn.mat-form-field-appearance-outline:not(.mdc-text-field--disabled) .mat-mdc-form-field-flex:hover .mdc-notched-outline .mdc-notched-outline__trailing,.ui-datepicker .mat-mdc-form-field.mat-warn.mat-form-field-appearance-outline:not(.mdc-text-field--disabled) .mat-mdc-form-field-flex:hover .mdc-notched-outline .mdc-notched-outline__notch{border-color:#cb7b7a}.ui-datepicker .mat-mdc-form-field.mat-warn.mat-form-field-appearance-outline .mdc-notched-outline .mdc-notched-outline__leading,.ui-datepicker .mat-mdc-form-field.mat-warn.mat-form-field-appearance-outline .mdc-notched-outline .mdc-notched-outline__trailing,.ui-datepicker .mat-mdc-form-field.mat-warn.mat-form-field-appearance-outline .mdc-notched-outline .mdc-notched-outline__notch{border-color:#cb7b7a}.ui-datepicker .mat-mdc-form-field.mat-warn.mat-focused .mat-mdc-text-field-wrapper .mat-mdc-form-field-flex .mat-mdc-form-field-infix .mat-form-field-label mat-label{color:#cb7b7a}.ui-datepicker .mat-mdc-form-field .mat-mdc-form-field-hint.error{display:flex;flex-flow:column;row-gap:4px}.ui-datepicker .mat-mdc-form-field .mat-mdc-form-field-hint.error .errors{display:flex;padding-bottom:10px}.ui-datepicker .mat-mdc-form-field.mat-accent.mat-form-field-appearance-outline:not(.mat-form-field-disabled) .mat-mdc-form-field-flex:hover .mdc-notched-outline{color:#276678}.ui-datepicker .mat-mdc-form-field.mat-accent.mat-focused .mat-mdc-text-field-wrapper .mat-mdc-form-field-flex .mat-mdc-form-field-infix .mat-form-field-label mat-label{color:#276678}.ui-datepicker .mat-mdc-form-field.mat-form-field-disabled.mat-form-field-appearance-outline .mdc-notched-outline{color:#e0e0e0}.ui-datepicker .mat-mdc-form-field .mat-mdc-form-field-hint .hint-message{color:#888!important;margin-top:4px}.mat-datepicker-content .mat-mdc-button.mat-unthemed .mdc-button__label>span{font-weight:600}.mat-datepicker-content.mat-datepicker-content.mat-accent .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:#e9f0f1}.mat-datepicker-content.mat-datepicker-content.mat-accent .mat-calendar-body-in-range:before{background-color:#e9f0f1}[theme=dark] .mat-datepicker-content.mat-datepicker-content.mat-accent .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),[theme=light] .mat-datepicker-content.mat-datepicker-content.mat-accent .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:var(--datepicker-hover-color)}[theme=dark] .mat-datepicker-content.mat-datepicker-content.mat-accent .mat-calendar-body-in-range:before,[theme=light] .mat-datepicker-content.mat-datepicker-content.mat-accent .mat-calendar-body-in-range:before{background-color:var(--datepicker-hover-color)}[theme=dark] .mat-datepicker-content .mat-calendar-body-selected,[theme=light] .mat-datepicker-content .mat-calendar-body-selected{background-color:var(--datepicker-selected-color)}[theme=dark] .mat-datepicker-content .mat-calendar-body-today:not(.mat-calendar-body-selected),[theme=light] .mat-datepicker-content .mat-calendar-body-today:not(.mat-calendar-body-selected){background:transparent;--mat-datepicker-calendar-date-focus-state-background-color: $tgo-white }[theme=dark] .mat-datepicker-content .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),[theme=light] .mat-datepicker-content .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){--mat-datepicker-calendar-date-focus-state-background-color: var(--datepicker-hover-color)}.info{margin-top:4px!important;padding-bottom:10px}\n"] }]
248
268
  }], ctorParameters: () => [{ type: undefined, decorators: [{
249
269
  type: Optional
250
270
  }, {
@@ -254,7 +274,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImpor
254
274
  type: Optional
255
275
  }, {
256
276
  type: Self
257
- }] }], propDecorators: { class: [{
277
+ }] }, { type: i0.Renderer2 }], propDecorators: { class: [{
258
278
  type: HostBinding
259
279
  }], label: [{
260
280
  type: Input
@@ -298,7 +318,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImpor
298
318
  type: Input
299
319
  }], preventUserInput: [{
300
320
  type: Input
321
+ }], companyColor: [{
322
+ type: Input
301
323
  }], changed: [{
302
324
  type: Output
303
325
  }] } });
304
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90Z28tY2Fub3B5LXVpL2NvbXBvbmVudHMvZGF0ZXBpY2tlci9kYXRlcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rnby1jYW5vcHktdWkvY29tcG9uZW50cy9kYXRlcGlja2VyL2RhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEseUNBQXlDO0FBQ3pDLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFlBQVksRUFDWixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFFTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLElBQUksRUFDSixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixXQUFXLEVBQUUsU0FBUyxFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDekYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJDQUEyQyxDQUFDOzs7Ozs7Ozs7Ozs7O0FBWTVFLG9FQUFvRTtBQUNwRSxNQUFNLE9BQU8sbUJBQW1CO0lBNEM5Qjs7Ozs7T0FLRztJQUNILElBQWEsTUFBTSxDQUFDLE1BQWdCO1FBQ2xDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDbkcsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQW9KRCxZQUM2RSxlQUFpQyxFQUNwRyxHQUFzQixFQUN0QixTQUF1QixFQUNKLFNBQW9CO1FBSDRCLG9CQUFlLEdBQWYsZUFBZSxDQUFrQjtRQUNwRyxR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LEtBQUs7c0JBQW5CLFdBQVc7Z0JBUUgsS0FBSztzQkFBYixLQUFLO2dCQVFHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBUUcsV0FBVztzQkFBbkIsS0FBSztnQkFRRyxFQUFFO3NCQUFWLEtBQUs7Z0JBUUcsS0FBSztzQkFBYixLQUFLO2dCQVNPLE1BQU07c0JBQWxCLEtBQUs7Z0JBV0csT0FBTztzQkFBZixLQUFLO2dCQVFHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBUUcsUUFBUTtzQkFBaEIsS0FBSztnQkFRRyxXQUFXO3NCQUFuQixLQUFLO2dCQVFHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBUUcsUUFBUTtzQkFBaEIsS0FBSztnQkFRRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBUUcsU0FBUztzQkFBakIsS0FBSztnQkFRRyxPQUFPO3NCQUFmLEtBQUs7Z0JBUUcsT0FBTztzQkFBZixLQUFLO2dCQVFHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBU0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQVFHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFRRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBUUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQWlCSSxPQUFPO3NCQUFoQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBEb0NoZWNrLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFNlbGYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBOZ0NvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBMYW5ndWFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi91dGlscy9sb2NhbGl6YXRpb24vbGFuZ3VhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvblRoZW1lIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FwcGxpY2F0aW9uLXRoZW1lLm1vZGVsJztcbmltcG9ydCB7IE1hdERhdGVwaWNrZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndWktZGF0ZXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGF0ZXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWNvbmZsaWN0aW5nLWxpZmVjeWNsZVxuZXhwb3J0IGNsYXNzIERhdGVwaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBEb0NoZWNrIHtcbiAgQEhvc3RCaW5kaW5nKCkgY2xhc3MgPSAndWktZGF0ZXBpY2tlcic7XG5cbiAgLyoqXG4gICAqIEZvcm0gZmllbGQgbGFiZWxcbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQG1lbWJlcm9mIERhdGVwaWNrZXJDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpIGxhYmVsPyA9ICcnO1xuXG4gIC8qKlxuICAgKiBJbnB1dCBuYW1lIGF0dHJpYnV0ZVxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAbWVtYmVyb2YgRGF0ZXBpY2tlckNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgZmllbGROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbnB1dCBwbGFjZWhvbGRlclxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAbWVtYmVyb2YgRGF0ZXBpY2tlckNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXI/ID0gJyc7XG5cbiAgLyoqXG4gICAqIElucHV0IGlkXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBtZW1iZXJvZiBEYXRlcGlja2VyQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKSBpZD8gPSAnJztcblxuICAvKipcbiAgICogSW5wdXQgdmFsdWVcbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQG1lbWJlcm9mIERhdGVwaWNrZXJDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpIHZhbHVlPzogc3RyaW5nIHwgRGF0ZTtcblxuICBfZXJyb3JzOiBTYWZlSHRtbFtdO1xuICAvKipcbiAgICogSW5wdXQgZmllbGQgZXJyb3JzXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBtZW1iZXJvZiBEYXRlcGlja2VyQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKSBzZXQgZXJyb3JzKGVycm9yczogc3RyaW5nW10pIHtcbiAgICB0aGlzLl9lcnJvcnMgPSBlcnJvcnM/LmZpbHRlcihCb29sZWFuKS5tYXAoZXJyb3IgPT4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoZXJyb3IpKTtcbiAgICB0aGlzLmVycm9yc0xlbmd0aCA9IHRoaXMuc2V0RXJyb3JzTGVuZ3RoKCk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiBpbnB1dCBpcyBkYXRlIHJhbmdlXG4gICAqXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAbWVtYmVyb2YgRGF0ZXBpY2tlckNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgaXNSYW5nZTogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiBpbnB1dCBpcyBkaXNhYmxlZFxuICAgKlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQG1lbWJlcm9mIERhdGVwaWNrZXJDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbnB1dCBpcyByZXF1aXJlZCBvciBub3RcbiAgICpcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBtZW1iZXJvZiBEYXRlcGlja2VyQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKSByZXF1aXJlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogSGludCB0ZXh0XG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBtZW1iZXJvZiBEYXRlcGlja2VyQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKSBoaW50TWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbnB1dCBpcyB1cGRhdGUgb25seSBvbiBibHVyXG4gICAqXG4gICAqIEB0eXBlIHtCb29sZWFufVxuICAgKiBAbWVtYmVyb2YgRGF0ZXBpY2tlckNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgdXBkYXRlT25CbHVyID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSBsYW5ndWFnZSB0byBiZSB1c2VkXG4gICAqXG4gICAqIEB0eXBlIHtMYW5ndWFnZX1cbiAgICogQG1lbWJlcm9mIERhdGVwaWNrZXJDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpIGxhbmd1YWdlID0gTGFuZ3VhZ2VTZXJ2aWNlLmRlZmF1bHRMYW5ndWFnZTtcblxuICAvKipcbiAgICogU2hvdyByZXNlcnZlZCBjb250ZW50IGJlbG93IGZvcm0gZmllbGRcbiAgICpcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBtZW1iZXJvZiBEYXRlcGlja2VyQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKSBzaG93Qm90dG9tQ29udGVudCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFNldCBmdWxsIHdpZHRoIERhdGVwaWNrZXJDb21wb25lbnRcbiAgICpcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBtZW1iZXJvZiBEYXRlcGlja2VyQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKSBmdWxsV2lkdGggPSBmYWxzZTtcblxuICAvKipcbiAgICogU2V0IG1pbiBkYXRlIGZvciBEYXRlcGlja2VyXG4gICAqXG4gICAqIEB0eXBlIHtEYXRlfVxuICAgKiBAbWVtYmVyb2YgRGF0ZXBpY2tlckNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgbWluRGF0ZTogRGF0ZSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogU2V0IG1heCBkYXRlIGZvciBEYXRlcGlja2VyXG4gICAqXG4gICAqIEB0eXBlIHtEYXRlfVxuICAgKiBAbWVtYmVyb2YgRGF0ZXBpY2tlckNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgbWF4RGF0ZTogRGF0ZSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogU2hvdyBhbmQgcGljayBkYXRlIHdpdGhvdXQgZGF5XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAbWVtYmVyb2YgRGF0ZXBpY2tlckNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgbW9udGhQaWNrZXIgPSBmYWxzZTtcblxuICAvKipcbiAgICpcbiAgICogRGVmaW5lcyB0aGUgYXBwbGljYXRpb24gdGhlbWVcbiAgICpcbiAgICogQHR5cGUge0FwcGxpY2F0aW9uVGhlbWV9XG4gICAqIEBtZW1iZXJvZiBEYXRlcGlja2VyQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKSBhcHBsaWNhdGlvblRoZW1lOiBBcHBsaWNhdGlvblRoZW1lID0gJ2xpZ2h0JztcblxuICAvKipcbiAgICogSGlkZSBpbi1idWlsZCBlcnJvcnMgZm9yIFJlYWN0aXZlIEZvcm1zXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBtZW1iZXJvZiBEYXRlcGlja2VyQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKSBoaWRlQnVpbHRJbkVycm9ycyA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBIaWRlIGxhYmVsIGluIGVycm9yc1xuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAbWVtYmVyb2YgRGF0ZXBpY2tlckNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgaGlkZUxhYmVsSW5FcnJvcnMgPSBmYWxzZTtcblxuICAvKipcbiAgICogUHJldmVudCB1c2VyIGlucHV0XG4gICAqXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAbWVtYmVyb2YgRGF0ZXBpY2tlckNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgcHJldmVudFVzZXJJbnB1dCA9IGZhbHNlO1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25DaGFuZ2UgPSAoXzogYW55KSA9PiB7fTtcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Ub3VjaCA9ICgpID0+IHt9O1xuXG4gIC8qKlxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIHZhbHVlIGlzIGNoYW5nZSAtIHdoZW4gdXNlZCBvdXRzaWRlIG9mIGZvcm1cbiAgICpcbiAgICogQHR5cGUge0RhdGV9XG4gICAqIEBtZW1iZXJvZiBEYXRlcGlja2VyQ29tcG9uZW50XG4gICAqL1xuICBAT3V0cHV0KCkgY2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZSB8IHN0cmluZz4oKTtcblxuICByYW5nZSA9IG5ldyBGb3JtR3JvdXAoe1xuICAgIHN0YXJ0OiBuZXcgRm9ybUNvbnRyb2w8RGF0ZSB8IG51bGw+KG51bGwpLFxuICAgIGVuZDogbmV3IEZvcm1Db250cm9sPERhdGUgfCBudWxsPihudWxsKSxcbiAgfSk7XG5cbiAgZXJyb3JzTGVuZ3RoOiBib29sZWFuO1xuICBwcm90ZWN0ZWQgdHJhbnNsYXRpb25Db250ZXh0ID0gJ0RBVEVQSUNLRVIuJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KCdDQU5PUFlVSV9ERUZBVUxUX0FQUExJQ0FUSU9OX1RIRU1FJykgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0QXBwVGhlbWU6IEFwcGxpY2F0aW9uVGhlbWUsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2xcbiAgKSB7XG4gICAgaWYgKGRlZmF1bHRBcHBUaGVtZSkge1xuICAgICAgdGhpcy5hcHBsaWNhdGlvblRoZW1lID0gZGVmYXVsdEFwcFRoZW1lO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPSBudWxsKSB7XG4gICAgICB0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICB9XG4gIH1cblxuICBnZXQgaGludCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmhpbnRNZXNzYWdlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzUmFuZ2UgPyAnTU0vREQvWVlZWSAtIE1NL0REL1lZWVknIDogdGhpcy5tb250aFBpY2tlciA/ICdNTS9ZWVlZJyA6ICdNTS9ERC9ZWVlZJztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5oaW50TWVzc2FnZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIG1hcmsgY29tcG9uZW50IHZpZXcgYXMgZGlydHkgd2hlbiB0b3VjaGVkIHByb2dyYW1tYXRpY2FsbHkgd2l0aCBtYXJrQXNUb3VjaGVkL21hcmtBbGxBc1RvdWNoZWQgb3IgZXJyb3JzXG4gICAqIHRvIGRpc3BsYXkgdmFsaWRhdGlvbiBlcnJvcnMgdGhhdCBtaWdodCBoYXBwZW4gKGUuZy4gcmVxdWlyZWQpXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWNvbmZsaWN0aW5nLWxpZmVjeWNsZVxuICBuZ0RvQ2hlY2soKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubmdDb250cm9sPy50b3VjaGVkIHx8IHRoaXMubmdDb250cm9sPy5lcnJvcnMpIHtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tY29uZmxpY3RpbmctbGlmZWN5Y2xlXG4gIG5nT25Jbml0KCkge1xuICAgIGRvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKCd0aGVtZScsIHRoaXMuYXBwbGljYXRpb25UaGVtZSk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWNvbmZsaWN0aW5nLWxpZmVjeWNsZVxuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc1JhbmdlKSB7XG4gICAgICB0aGlzLnNldFJhbmdlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2V0IGVycm9ycyBsZW5ndGggZm9yIHZhbGlkYXRpb25cbiAgLy8gQ29uc2lkZXIgb25seSB0aG9zZSBlcnJvcnMgd2hpY2ggd2hpY2ggYXJlIG5vdCBlbXB0eVxuICBzZXRFcnJvcnNMZW5ndGgoKTogYm9vbGVhbiB7XG4gICAgaWYgKCEhdGhpcy5fZXJyb3JzKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZXJyb3JzLmZpbHRlcihlcnIgPT4gISFlcnIpLmxlbmd0aCA+IDAgPyB0cnVlIDogZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIG9uVmFsdWVDaGFuZ2UodmFsdWU6IERhdGUgfCBzdHJpbmcpIHtcbiAgICB0aGlzLndyaXRlVmFsdWUodmFsdWUpO1xuICAgIHRoaXMuZXJyb3JzTGVuZ3RoID0gdGhpcy5zZXRFcnJvcnNMZW5ndGgoKTtcbiAgICBpZiAoIXRoaXMudXBkYXRlT25CbHVyKSB7XG4gICAgICB0aGlzLm9uVG91Y2goKTtcbiAgICB9XG4gICAgdGhpcy5vbkNoYW5nZSh2YWx1ZSk7XG4gICAgdGhpcy5jaGFuZ2VkLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZT86IERhdGUgfCBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgaWYgKHRoaXMuaXNSYW5nZSkge1xuICAgICAgdGhpcy5zZXRSYW5nZSgpO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2ggPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZGF0ZVJhbmdlQ2hhbmdlKHN0YXJ0OiBzdHJpbmcsIGVuZDogc3RyaW5nKSB7XG4gICAgdGhpcy5vblZhbHVlQ2hhbmdlKHRoaXMuZ2V0UmFuZ2Uoc3RhcnQsIGVuZCkpO1xuICB9XG5cbiAgc2V0TW9udGhBbmRZZWFyKG5vcm1hbGl6ZWRNb250aEFuZFllYXI6IGFueSwgZGF0ZXBpY2tlcjogTWF0RGF0ZXBpY2tlcjxEYXRlPikge1xuICAgIGNvbnN0IGN0cmxWYWx1ZSA9IHR5cGVvZiB0aGlzLnZhbHVlID09PSAnc3RyaW5nJyA/IG5ldyBEYXRlKHRoaXMudmFsdWUpIDogdGhpcy52YWx1ZSB8fCBuZXcgRGF0ZSgpO1xuXG4gICAgY3RybFZhbHVlLnNldE1vbnRoKG5vcm1hbGl6ZWRNb250aEFuZFllYXIuZ2V0TW9udGgoKSk7XG4gICAgY3RybFZhbHVlLnNldEZ1bGxZZWFyKG5vcm1hbGl6ZWRNb250aEFuZFllYXIuZ2V0RnVsbFllYXIoKSk7XG5cbiAgICBkYXRlcGlja2VyLmNsb3NlKCk7XG5cbiAgICB0aGlzLm9uVmFsdWVDaGFuZ2UobmV3IERhdGUoY3RybFZhbHVlKSk7XG4gIH1cblxuICBwcml2YXRlIHNldFJhbmdlKCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy52YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IFtzdGFydCwgZW5kXSA9IHRoaXMudmFsdWU/LnNwbGl0KCctJyk7XG4gICAgICBpZiAoc3RhcnQpIHtcbiAgICAgICAgdGhpcy5yYW5nZS5jb250cm9scy5zdGFydC5zZXRWYWx1ZShuZXcgRGF0ZShzdGFydCkpO1xuICAgICAgfVxuICAgICAgaWYgKGVuZCkge1xuICAgICAgICB0aGlzLnJhbmdlLmNvbnRyb2xzLmVuZC5zZXRWYWx1ZShuZXcgRGF0ZShlbmQpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudmFsdWUpIHtcbiAgICAgIHRoaXMucmFuZ2UuY29udHJvbHMuc3RhcnQuc2V0VmFsdWUobnVsbCk7XG4gICAgICB0aGlzLnJhbmdlLmNvbnRyb2xzLmVuZC5zZXRWYWx1ZShudWxsKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFJhbmdlKHN0YXJ0OiBzdHJpbmcsIGVuZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7c3RhcnR9LSR7ZW5kfWA7XG4gIH1cblxuICBvbklucHV0KGV2ZW50OiBFdmVudCkge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBFdmVudFRhcmdldCAmIHsgdmFsdWU6IHN0cmluZyB9O1xuICAgIGNvbnN0IFttb250aCwgeWVhcl0gPSB0YXJnZXQudmFsdWUuc3BsaXQoJy8nKTtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKS5nZXREYXRlKCk7XG4gICAgY29uc3QgZnVsbERhdGVTdHJpbmcgPSBgJHttb250aH0vJHtkYXRlfS8ke3llYXJ9YDtcbiAgICBjb25zdCBmdWxsRGF0ZSA9IG5ldyBEYXRlKGZ1bGxEYXRlU3RyaW5nKTtcbiAgICB0aGlzLm9uVmFsdWVDaGFuZ2UoZnVsbERhdGUpO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyPlxuICA8bWF0LWZvcm0tZmllbGRcbiAgICAqbmdJZj1cIiFtb250aFBpY2tlcjsgZWxzZSBkYXRlWWVhclBpY2tlclwiXG4gICAgI3VpRGF0ZXBpY2tlclxuICAgIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCJcbiAgICBbY29sb3JdPVwiKGVycm9yc0xlbmd0aCB8fCAobmdDb250cm9sPy5lcnJvcnMgJiYgbmdDb250cm9sPy50b3VjaGVkICkpICA/ICd3YXJuJyA6ICdhY2NlbnQnXCJcbiAgICBbbmdDbGFzc109XCJ7ICdoaWRlLWJvdHRvbS1jb250ZW50JzogIXNob3dCb3R0b21Db250ZW50LCAnZnVsbC13aWR0aCc6IGZ1bGxXaWR0aCB9XCJcbiAgPlxuICAgIDxtYXQtbGFiZWwgKm5nSWY9XCJsYWJlbFwiPnt7IGxhYmVsIH19PHNwYW4gKm5nSWY9XCJyZXF1aXJlZFwiPiAqPC9zcGFuPjwvbWF0LWxhYmVsPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNSYW5nZVwiPlxuICAgICAgPGlucHV0ICpuZ0lmPVwiIWlzUmFuZ2VcIiBtYXRJbnB1dFxuICAgICAgICAgICAgIFttYXREYXRlcGlja2VyXT1cInBpY2tlclwiXG4gICAgICAgICAgICAgKGJsdXIpPVwib25Ub3VjaCgpXCJcbiAgICAgICAgICAgICAoZGF0ZUNoYW5nZSk9XCJvblZhbHVlQ2hhbmdlKCRldmVudC52YWx1ZSlcIlxuICAgICAgICAgICAgIFtpZF09XCJpZCFcIlxuICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlciFcIlxuICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICBbbmFtZV09XCJmaWVsZE5hbWUhXCJcbiAgICAgICAgICAgICBbcmVhZG9ubHldPVwicHJldmVudFVzZXJJbnB1dFwiXG4gICAgICAgICAgICAgW21pbl09XCJtaW5EYXRlXCJcbiAgICAgICAgICAgICBbbWF4XT1cIm1heERhdGVcIlxuICAgICAgLz5cbiAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0SWNvblN1ZmZpeCBbZm9yXT1cInBpY2tlclwiPlxuICAgICAgICA8dWktaWNvbiBtYXREYXRlcGlja2VyVG9nZ2xlSWNvbiBbYXBwbGljYXRpb25UaGVtZV09XCJhcHBsaWNhdGlvblRoZW1lXCIgbmFtZT1cIkNhbGVuZGFyXCIgc2l6ZT1cIjI0XCIgY29sb3I9XCJpbmhlcml0XCI+PC91aS1pY29uPlxuICAgICAgPC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XG4gICAgICA8bWF0LWRhdGVwaWNrZXIgI3BpY2tlcj48L21hdC1kYXRlcGlja2VyPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzUmFuZ2VcIj5cbiAgICAgIDxtYXQtZGF0ZS1yYW5nZS1pbnB1dCAqbmdJZj1cImlzUmFuZ2VcIiBbZm9ybUdyb3VwXT1cInJhbmdlXCIgW3JhbmdlUGlja2VyXT1cInJhbmdlUGlja2VyXCIgW21pbl09XCJtaW5EYXRlXCIgW21heF09XCJtYXhEYXRlXCIgPlxuICAgICAgICA8aW5wdXQgbWF0U3RhcnREYXRlICNkYXRlUmFuZ2VTdGFydCBmb3JtQ29udHJvbE5hbWU9XCJzdGFydFwiIFtwbGFjZWhvbGRlcl09XCIodHJhbnNsYXRpb25Db250ZXh0ICsgJ1NUQVJUX0RBVEUnKSB8IHVpVHJhbnNsYXRlIDogbGFuZ3VhZ2VcIiAoZGF0ZUNoYW5nZSk9XCJkYXRlUmFuZ2VDaGFuZ2UoZGF0ZVJhbmdlU3RhcnQudmFsdWUsIGRhdGVSYW5nZUVuZC52YWx1ZSlcIj5cbiAgICAgICAgPGlucHV0IG1hdEVuZERhdGUgICNkYXRlUmFuZ2VFbmQgZm9ybUNvbnRyb2xOYW1lPVwiZW5kXCIgW3BsYWNlaG9sZGVyXT1cIih0cmFuc2xhdGlvbkNvbnRleHQgKyAnRU5EX0RBVEUnKSB8IHVpVHJhbnNsYXRlIDogbGFuZ3VhZ2VcIiAoZGF0ZUNoYW5nZSk9XCJkYXRlUmFuZ2VDaGFuZ2UoZGF0ZVJhbmdlU3RhcnQudmFsdWUsIGRhdGVSYW5nZUVuZC52YWx1ZSlcIj5cbiAgICAgIDwvbWF0LWRhdGUtcmFuZ2UtaW5wdXQ+XG4gICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdEljb25TdWZmaXggW2Zvcl09XCJyYW5nZVBpY2tlclwiPlxuICAgICAgICA8dWktaWNvbiBtYXREYXRlcGlja2VyVG9nZ2xlSWNvbiBbYXBwbGljYXRpb25UaGVtZV09XCJhcHBsaWNhdGlvblRoZW1lXCIgbmFtZT1cIkNhbGVuZGFyXCIgc2l6ZT1cIjI0XCIgY29sb3I9XCJpbmhlcml0XCI+PC91aS1pY29uPlxuICAgICAgPC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XG4gICAgICA8bWF0LWRhdGUtcmFuZ2UtcGlja2VyICNyYW5nZVBpY2tlcj48L21hdC1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxtYXQtaGludCBjbGFzcz1cImluZm9cIiAqbmdJZj1cImhpbnQgJiYgIV9lcnJvcnMgJiYgIShuZ0NvbnRyb2w/LnRvdWNoZWQgJiYgKG5nQ29udHJvbD8uZXJyb3JzIHwgaGFzVmFsaWRhdGlvbkVycm9yKSlcIj57eyBoaW50IH19PC9tYXQtaGludD5cbiAgICA8bWF0LWhpbnQgY2xhc3M9XCJlcnJvclwiICpuZ0lmPVwiZXJyb3JzTGVuZ3RoIHx8IChuZ0NvbnRyb2w/LnRvdWNoZWQgJiYgKG5nQ29udHJvbD8uZXJyb3JzIHwgaGFzVmFsaWRhdGlvbkVycm9yKSlcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlcnJvcnNMZW5ndGhcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImVycm9yc1wiICpuZ0Zvcj1cImxldCBlcnJvciBvZiBfZXJyb3JzXCI+XG4gICAgICAgICAgPHVpLWljb24gW2FwcGxpY2F0aW9uVGhlbWVdPVwiYXBwbGljYXRpb25UaGVtZVwiIG5hbWU9XCJFcnJvclwiPjwvdWktaWNvbj5cbiAgICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cImVycm9yXCI+PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPHVpLXZhbGlkYXRpb24tZXJyb3IgKm5nSWY9XCJuZ0NvbnRyb2wgJiYgIWhpZGVCdWlsdEluRXJyb3JzXCIgW25nQ29udHJvbF09XCJuZ0NvbnRyb2xcIiBbbGFiZWxdPVwiaGlkZUxhYmVsSW5FcnJvcnMgPyBudWxsIDogbGFiZWxcIiBbbGFuZ3VhZ2VdPVwibGFuZ3VhZ2VcIj48L3VpLXZhbGlkYXRpb24tZXJyb3I+XG4gICAgPC9tYXQtaGludD5cbiAgPC9tYXQtZm9ybS1maWVsZD5cblxuICA8bmctdGVtcGxhdGUgI2RhdGVZZWFyUGlja2VyPlxuICAgIDxtYXQtZm9ybS1maWVsZFxuICAgICAgYXBwTm9EYXRlRm9ybWF0XG4gICAgICAjdWlEYXRlcGlja2VyXG4gICAgICBhcHBlYXJhbmNlPVwib3V0bGluZVwiXG4gICAgICBbY29sb3JdPVwiKGVycm9yc0xlbmd0aCB8fCAobmdDb250cm9sPy5lcnJvcnMgJiYgbmdDb250cm9sPy50b3VjaGVkICkpICA/ICd3YXJuJyA6ICdhY2NlbnQnXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsgJ2hpZGUtYm90dG9tLWNvbnRlbnQnOiAhc2hvd0JvdHRvbUNvbnRlbnQsICdmdWxsLXdpZHRoJzogZnVsbFdpZHRoIH1cIlxuICAgID5cbiAgICAgIDxtYXQtbGFiZWwgKm5nSWY9XCJsYWJlbFwiPnt7IGxhYmVsIH19PHNwYW4gKm5nSWY9XCJyZXF1aXJlZFwiPiAqPC9zcGFuPjwvbWF0LWxhYmVsPlxuXG4gICAgICA8bmctY29udGFpbmVyID5cbiAgICAgICAgPGlucHV0IG1hdElucHV0XG4gICAgICAgICAgICAgICBbaWRdPVwiaWQhXCJcbiAgICAgICAgICAgICAgIChibHVyKT1cIm9uVG91Y2goKVwiXG4gICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIhXCJcbiAgICAgICAgICAgICAgIFttYXREYXRlcGlja2VyXT1cImRwXCJcbiAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgW25hbWVdPVwiZmllbGROYW1lIVwiXG4gICAgICAgICAgICAgICBbbWluXT1cIm1pbkRhdGVcIlxuICAgICAgICAgICAgICAgW21heF09XCJtYXhEYXRlXCJcbiAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJwcmV2ZW50VXNlcklucHV0XCJcbiAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25JbnB1dCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgIChkYXRlQ2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2UoJGV2ZW50LnZhbHVlKVwiXG4gICAgICAgID5cbiAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRJY29uU3VmZml4IFtmb3JdPVwiZHBcIj5cbiAgICAgICAgICA8dWktaWNvbiAqbmdJZj1cImFwcGxpY2F0aW9uVGhlbWUgIT09ICdjbGFzc2ljJ1wiIG1hdERhdGVwaWNrZXJUb2dnbGVJY29uIFthcHBsaWNhdGlvblRoZW1lXT1cImFwcGxpY2F0aW9uVGhlbWVcIiBuYW1lPVwiQ2FsZW5kYXJcIiBzaXplPVwiMjRcIiBjb2xvcj1cImluaGVyaXRcIj48L3VpLWljb24+XG4gICAgICAgIDwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxuICAgICAgICA8bWF0LWRhdGVwaWNrZXIgcGFuZWxDbGFzcz1cIm1vbnRoLXBpY2tlclwiICNkcCBzdGFydFZpZXc9XCJtdWx0aS15ZWFyXCIgKG1vbnRoU2VsZWN0ZWQpPVwic2V0TW9udGhBbmRZZWFyKCRldmVudCwgZHApXCI+PC9tYXQtZGF0ZXBpY2tlcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bWF0LWhpbnQgY2xhc3M9XCJpbmZvXCIgKm5nSWY9XCJoaW50ICYmICFfZXJyb3JzICYmICEobmdDb250cm9sPy50b3VjaGVkICYmIChuZ0NvbnRyb2w/LmVycm9ycyB8IGhhc1ZhbGlkYXRpb25FcnJvcikpXCI+e3sgaGludCB9fTwvbWF0LWhpbnQ+XG4gICAgICA8bWF0LWhpbnQgY2xhc3M9XCJlcnJvclwiICpuZ0lmPVwiZXJyb3JzTGVuZ3RoIHx8IChuZ0NvbnRyb2w/LnRvdWNoZWQgJiYgKG5nQ29udHJvbD8uZXJyb3JzIHwgaGFzVmFsaWRhdGlvbkVycm9yKSlcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVycm9yc0xlbmd0aFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJlcnJvcnNcIiAqbmdGb3I9XCJsZXQgZXJyb3Igb2YgX2Vycm9yc1wiPlxuICAgICAgICAgICAgPHVpLWljb24gW2FwcGxpY2F0aW9uVGhlbWVdPVwiYXBwbGljYXRpb25UaGVtZVwiIG5hbWU9XCJFcnJvclwiPjwvdWktaWNvbj5cbiAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiZXJyb3JcIj48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8dWktdmFsaWRhdGlvbi1lcnJvciAqbmdJZj1cIm5nQ29udHJvbCAmJiAhaGlkZUJ1aWx0SW5FcnJvcnNcIiBbbmdDb250cm9sXT1cIm5nQ29udHJvbFwiIFtsYWJlbF09XCJoaWRlTGFiZWxJbkVycm9ycyA/IG51bGwgOiBsYWJlbFwiIFtsYW5ndWFnZV09XCJsYW5ndWFnZVwiPjwvdWktdmFsaWRhdGlvbi1lcnJvcj5cbiAgICAgIDwvbWF0LWhpbnQ+XG5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L25nLXRlbXBsYXRlPlxuXG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
326
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90Z28tY2Fub3B5LXVpL2NvbXBvbmVudHMvZGF0ZXBpY2tlci9kYXRlcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rnby1jYW5vcHktdWkvY29tcG9uZW50cy9kYXRlcGlja2VyL2RhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEseUNBQXlDO0FBQ3pDLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFlBQVksRUFDWixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFFTCxRQUFRLEVBQ1IsTUFBTSxFQUVOLElBQUksRUFFSixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixXQUFXLEVBQUUsU0FBUyxFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDekYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBSTVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7Ozs7Ozs7OztBQVM3RCxvRUFBb0U7QUFDcEUsTUFBTSxPQUFPLG1CQUFtQjtJQTRDOUI7Ozs7O09BS0c7SUFDSCxJQUFhLE1BQU0sQ0FBQyxNQUFnQjtRQUNsQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ25HLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzdDLENBQUM7SUE2SkQsWUFDNkUsZUFBaUMsRUFDcEcsR0FBc0IsRUFDdEIsU0FBdUIsRUFDSixTQUFvQixFQUN2QyxTQUFvQjtRQUorQyxvQkFBZSxHQUFmLGVBQWUsQ0FBa0I7UUFDcEcsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsY0FBUyxHQUFULFNBQVMsQ0FBYztRQUNKLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDdkMsY0FBUyxHQUFULFNBQVMsQ0FBVztRQXROZixVQUFLLEdBQUcsZUFBZSxDQUFDO1FBRXZDOzs7OztXQUtHO1FBQ00sVUFBSyxHQUFJLEVBQUUsQ0FBQztRQVVyQjs7Ozs7V0FLRztRQUNNLGdCQUFXLEdBQUksRUFBRSxDQUFDO1FBRTNCOzs7OztXQUtHO1FBQ00sT0FBRSxHQUFJLEVBQUUsQ0FBQztRQXNEbEI7Ozs7O1dBS0c7UUFDTSxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUU5Qjs7Ozs7V0FLRztRQUNNLGFBQVEsR0FBRyxlQUFlLENBQUMsZUFBZSxDQUFDO1FBRXBEOzs7OztXQUtHO1FBQ00sc0JBQWlCLEdBQUcsSUFBSSxDQUFDO1FBRWxDOzs7OztXQUtHO1FBQ00sY0FBUyxHQUFHLEtBQUssQ0FBQztRQWtCM0I7Ozs7O1dBS0c7UUFDTSxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUU3Qjs7Ozs7O1dBTUc7UUFDTSxxQkFBZ0IsR0FBcUIsT0FBTyxDQUFDO1FBRXREOzs7OztXQUtHO1FBQ00sc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBRW5DOzs7OztXQUtHO1FBQ00sc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBRW5DOzs7OztXQUtHO1FBQ00scUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBRWxDOzs7Ozs7V0FNRztRQUNNLGlCQUFZLEdBQVcsRUFBRSxDQUFBO1FBQ2xDOztXQUVHO1FBQ0gsYUFBUSxHQUFHLENBQUMsQ0FBTSxFQUFFLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFFMUI7O1dBRUc7UUFDSCxZQUFPLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBRW5COzs7OztXQUtHO1FBQ08sWUFBTyxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBRXRELFVBQUssR0FBRyxJQUFJLFNBQVMsQ0FBQztZQUNwQixLQUFLLEVBQUUsSUFBSSxXQUFXLENBQWMsSUFBSSxDQUFDO1lBQ3pDLEdBQUcsRUFBRSxJQUFJLFdBQVcsQ0FBYyxJQUFJLENBQUM7U0FDeEMsQ0FBQyxDQUFDO1FBR08sdUJBQWtCLEdBQUcsYUFBYSxDQUFDO1FBUzNDLElBQUksZUFBZSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGVBQWUsQ0FBQztRQUMxQyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNuQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztRQUNoRyxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxvRUFBb0U7SUFDcEUsU0FBUztRQUNQLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUN0RCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFCLENBQUM7SUFDSCxDQUFDO0lBRUQsb0VBQW9FO0lBQ3BFLFFBQVE7UUFDTixRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELG9FQUFvRTtJQUNwRSxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2xCLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzFCLENBQUM7SUFDSCxDQUFDO0lBRUQsbUNBQW1DO0lBQ25DLHVEQUF1RDtJQUN2RCxlQUFlO1FBQ2IsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25CLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDckUsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFvQjtRQUNoQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pCLENBQUM7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBcUI7UUFDOUIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2xCLENBQUM7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsRUFBTztRQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBTztRQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsVUFBbUI7UUFDbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7UUFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQWEsRUFBRSxHQUFXO1FBQ3hDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsZUFBZSxDQUFDLHNCQUEyQixFQUFFLFVBQStCO1FBQzFFLE1BQU0sU0FBUyxHQUFHLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1FBRW5HLFNBQVMsQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN0RCxTQUFTLENBQUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFFNUQsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRW5CLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU8sUUFBUTtRQUNkLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ25DLE1BQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDNUMsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDdEQsQ0FBQztZQUNELElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ1IsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2xELENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsQ0FBQztJQUNILENBQUM7SUFFTyxRQUFRLENBQUMsS0FBYSxFQUFFLEdBQVc7UUFDekMsT0FBTyxHQUFHLEtBQUssSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQVk7UUFDbEIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQXlDLENBQUM7UUFDL0QsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QyxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xDLE1BQU0sY0FBYyxHQUFHLEdBQUcsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNsRCxNQUFNLFFBQVEsR0FBRyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUMxRixJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRTtnQ0FDeEIsS0FBSzttQ0FDRixJQUFJLENBQUMsWUFBWSxJQUFJLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDbkUsQ0FBQzs4R0E5VlUsbUJBQW1CLGtCQW1OUixvQ0FBb0M7a0dBbk4vQyxtQkFBbUIsc3VCQ2pDaEMseW9LQWtHQTs7MkZEakVhLG1CQUFtQjtrQkFSL0IsU0FBUzsrQkFDRSxlQUFlLGlCQUdWLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU07OzBCQXNONUMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxvQ0FBb0M7OzBCQUd2RCxRQUFROzswQkFBSSxJQUFJO2lFQXJOSixLQUFLO3NCQUFuQixXQUFXO2dCQVFILEtBQUs7c0JBQWIsS0FBSztnQkFRRyxTQUFTO3NCQUFqQixLQUFLO2dCQVFHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBUUcsRUFBRTtzQkFBVixLQUFLO2dCQVFHLEtBQUs7c0JBQWIsS0FBSztnQkFTTyxNQUFNO3NCQUFsQixLQUFLO2dCQVdHLE9BQU87c0JBQWYsS0FBSztnQkFRRyxRQUFRO3NCQUFoQixLQUFLO2dCQVFHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBUUcsV0FBVztzQkFBbkIsS0FBSztnQkFRRyxZQUFZO3NCQUFwQixLQUFLO2dCQVFHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBUUcsaUJBQWlCO3NCQUF6QixLQUFLO2dCQVFHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBUUcsT0FBTztzQkFBZixLQUFLO2dCQVFHLE9BQU87c0JBQWYsS0FBSztnQkFRRyxXQUFXO3NCQUFuQixLQUFLO2dCQVNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFRRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBUUcsaUJBQWlCO3NCQUF6QixLQUFLO2dCQVFHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFTRyxZQUFZO3NCQUFwQixLQUFLO2dCQWlCSSxPQUFPO3NCQUFoQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBEb0NoZWNrLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFJlbmRlcmVyMixcbiAgU2VsZixcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IExhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3V0aWxzL2xvY2FsaXphdGlvbi9sYW5ndWFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uVGhlbWUgfSBmcm9tICcuLi8uLi9tb2RlbHMvYXBwbGljYXRpb24tdGhlbWUubW9kZWwnO1xuaW1wb3J0IHsgTWF0RGF0ZXBpY2tlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgYWRqdXN0TGlnaHRuZXNzIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2NvbG9yLWNvbnRyYXN0XCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3VpLWRhdGVwaWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGVwaWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1jb25mbGljdGluZy1saWZlY3ljbGVcbmV4cG9ydCBjbGFzcyBEYXRlcGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgRG9DaGVjayB7XG4gIEBIb3N0QmluZGluZygpIGNsYXNzID0gJ3VpLWRhdGVwaWNrZXInO1xuXG4gIC8qKlxuICAgKiBGb3JtIGZpZWxkIGxhYmVsXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBtZW1iZXJvZiBEYXRlcGlja2VyQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKSBsYWJlbD8gPSAnJztcblxuICAvKipcbiAgICogSW5wdXQgbmFtZSBhdHRyaWJ1dGVcbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQG1lbWJlcm9mIERhdGVwaWNrZXJDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpIGZpZWxkTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogSW5wdXQgcGxhY2Vob2xkZXJcbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQG1lbWJlcm9mIERhdGVwaWNrZXJDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyPyA9ICcnO1xuXG4gIC8qKlxuICAgKiBJbnB1dCBpZFxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAbWVtYmVyb2YgRGF0ZXBpY2tlckNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgaWQ/ID0gJyc7XG5cbiAgLyoqXG4gICAqIElucHV0IHZhbHVlXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBtZW1iZXJvZiBEYXRlcGlja2VyQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKSB2YWx1ZT86IHN0cmluZyB8IERhdGU7XG5cbiAgX2Vycm9yczogU2FmZUh0bWxbXTtcbiAgLyoqXG4gICAqIElucHV0IGZpZWxkIGVycm9yc1xuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAbWVtYmVyb2YgRGF0ZXBpY2tlckNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgc2V0IGVycm9ycyhlcnJvcnM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5fZXJyb3JzID0gZXJyb3JzPy5maWx0ZXIoQm9vbGVhbikubWFwKGVycm9yID0+IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKGVycm9yKSk7XG4gICAgdGhpcy5lcnJvcnNMZW5ndGggPSB0aGlzLnNldEVycm9yc0xlbmd0aCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgaW5wdXQgaXMgZGF0ZSByYW5nZVxuICAgKlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQG1lbWJlcm9mIERhdGVwaWNrZXJDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpIGlzUmFuZ2U6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgaW5wdXQgaXMgZGlzYWJsZWRcbiAgICpcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBtZW1iZXJvZiBEYXRlcGlja2VyQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5wdXQgaXMgcmVxdWlyZWQgb3Igbm90XG4gICAqXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAbWVtYmVyb2YgRGF0ZXBpY2tlckNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgcmVxdWlyZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEhpbnQgdGV4dFxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAbWVtYmVyb2YgRGF0ZXBpY2tlckNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgaGludE1lc3NhZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogSW5wdXQgaXMgdXBkYXRlIG9ubHkgb24gYmx1clxuICAgKlxuICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICogQG1lbWJlcm9mIERhdGVwaWNrZXJDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpIHVwZGF0ZU9uQmx1ciA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaGUgbGFuZ3VhZ2UgdG8gYmUgdXNlZFxuICAgKlxuICAgKiBAdHlwZSB7TGFuZ3VhZ2V9XG4gICAqIEBtZW1iZXJvZiBEYXRlcGlja2VyQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKSBsYW5ndWFnZSA9IExhbmd1YWdlU2VydmljZS5kZWZhdWx0TGFuZ3VhZ2U7XG5cbiAgLyoqXG4gICAqIFNob3cgcmVzZXJ2ZWQgY29udGVudCBiZWxvdyBmb3JtIGZpZWxkXG4gICAqXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAbWVtYmVyb2YgRGF0ZXBpY2tlckNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgc2hvd0JvdHRvbUNvbnRlbnQgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBTZXQgZnVsbCB3aWR0aCBEYXRlcGlja2VyQ29tcG9uZW50XG4gICAqXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAbWVtYmVyb2YgRGF0ZXBpY2tlckNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgZnVsbFdpZHRoID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFNldCBtaW4gZGF0ZSBmb3IgRGF0ZXBpY2tlclxuICAgKlxuICAgKiBAdHlwZSB7RGF0ZX1cbiAgICogQG1lbWJlcm9mIERhdGVwaWNrZXJDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpIG1pbkRhdGU6IERhdGUgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFNldCBtYXggZGF0ZSBmb3IgRGF0ZXBpY2tlclxuICAgKlxuICAgKiBAdHlwZSB7RGF0ZX1cbiAgICogQG1lbWJlcm9mIERhdGVwaWNrZXJDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpIG1heERhdGU6IERhdGUgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFNob3cgYW5kIHBpY2sgZGF0ZSB3aXRob3V0IGRheVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQG1lbWJlcm9mIERhdGVwaWNrZXJDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpIG1vbnRoUGlja2VyID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqXG4gICAqIERlZmluZXMgdGhlIGFwcGxpY2F0aW9uIHRoZW1lXG4gICAqXG4gICAqIEB0eXBlIHtBcHBsaWNhdGlvblRoZW1lfVxuICAgKiBAbWVtYmVyb2YgRGF0ZXBpY2tlckNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgYXBwbGljYXRpb25UaGVtZTogQXBwbGljYXRpb25UaGVtZSA9ICdsaWdodCc7XG5cbiAgLyoqXG4gICAqIEhpZGUgaW4tYnVpbGQgZXJyb3JzIGZvciBSZWFjdGl2ZSBGb3Jtc1xuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAbWVtYmVyb2YgRGF0ZXBpY2tlckNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgaGlkZUJ1aWx0SW5FcnJvcnMgPSBmYWxzZTtcblxuICAvKipcbiAgICogSGlkZSBsYWJlbCBpbiBlcnJvcnNcbiAgICpcbiAgICogQHR5cGUge251bWJlcn1cbiAgICogQG1lbWJlcm9mIERhdGVwaWNrZXJDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpIGhpZGVMYWJlbEluRXJyb3JzID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFByZXZlbnQgdXNlciBpbnB1dFxuICAgKlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQG1lbWJlcm9mIERhdGVwaWNrZXJDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpIHByZXZlbnRVc2VySW5wdXQgPSBmYWxzZTtcblxuICAvKipcbiAgICogQ29sb3Igb2YgdGhlIG9wdGlvbiBob3Zlci5cbiAgICogRGVmYXVsdHMgdG8gVGVzdCBHb3JpbGxhIHByaW1hcnkgY29sb3IuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBtZW1iZXJvZiBEYXRlcGlja2VyQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKSBjb21wYW55Q29sb3I6IHN0cmluZyA9ICcnXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkNoYW5nZSA9IChfOiBhbnkpID0+IHt9O1xuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvblRvdWNoID0gKCkgPT4ge307XG5cbiAgLyoqXG4gICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgdmFsdWUgaXMgY2hhbmdlIC0gd2hlbiB1c2VkIG91dHNpZGUgb2YgZm9ybVxuICAgKlxuICAgKiBAdHlwZSB7RGF0ZX1cbiAgICogQG1lbWJlcm9mIERhdGVwaWNrZXJDb21wb25lbnRcbiAgICovXG4gIEBPdXRwdXQoKSBjaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlIHwgc3RyaW5nPigpO1xuXG4gIHJhbmdlID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgc3RhcnQ6IG5ldyBGb3JtQ29udHJvbDxEYXRlIHwgbnVsbD4obnVsbCksXG4gICAgZW5kOiBuZXcgRm9ybUNvbnRyb2w8RGF0ZSB8IG51bGw+KG51bGwpLFxuICB9KTtcblxuICBlcnJvcnNMZW5ndGg6IGJvb2xlYW47XG4gIHByb3RlY3RlZCB0cmFuc2xhdGlvbkNvbnRleHQgPSAnREFURVBJQ0tFUi4nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoJ0NBTk9QWVVJX0RFRkFVTFRfQVBQTElDQVRJT05fVEhFTUUnKSBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRBcHBUaGVtZTogQXBwbGljYXRpb25UaGVtZSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcbiAgICBwcml2YXRlIHJlbmRlcmVyMjogUmVuZGVyZXIyLFxuICApIHtcbiAgICBpZiAoZGVmYXVsdEFwcFRoZW1lKSB7XG4gICAgICB0aGlzLmFwcGxpY2F0aW9uVGhlbWUgPSBkZWZhdWx0QXBwVGhlbWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubmdDb250cm9sICE9IG51bGwpIHtcbiAgICAgIHRoaXMubmdDb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xuICAgIH1cbiAgfVxuXG4gIGdldCBoaW50KCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuaGludE1lc3NhZ2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNSYW5nZSA/ICdNTS9ERC9ZWVlZIC0gTU0vREQvWVlZWScgOiB0aGlzLm1vbnRoUGlja2VyID8gJ01NL1lZWVknIDogJ01NL0REL1lZWVknO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmhpbnRNZXNzYWdlO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gbWFyayBjb21wb25lbnQgdmlldyBhcyBkaXJ0eSB3aGVuIHRvdWNoZWQgcHJvZ3JhbW1hdGljYWxseSB3aXRoIG1hcmtBc1RvdWNoZWQvbWFya0FsbEFzVG91Y2hlZCBvciBlcnJvcnNcbiAgICogdG8gZGlzcGxheSB2YWxpZGF0aW9uIGVycm9ycyB0aGF0IG1pZ2h0IGhhcHBlbiAoZS5nLiByZXF1aXJlZClcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tY29uZmxpY3RpbmctbGlmZWN5Y2xlXG4gIG5nRG9DaGVjaygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2w/LnRvdWNoZWQgfHwgdGhpcy5uZ0NvbnRyb2w/LmVycm9ycykge1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1jb25mbGljdGluZy1saWZlY3ljbGVcbiAgbmdPbkluaXQoKSB7XG4gICAgZG9jdW1lbnQuYm9keS5zZXRBdHRyaWJ1dGUoJ3RoZW1lJywgdGhpcy5hcHBsaWNhdGlvblRoZW1lKTtcbiAgICB0aGlzLnNldFN0eWxlVmFyaWFibGUoKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tY29uZmxpY3RpbmctbGlmZWN5Y2xlXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc1JhbmdlKSB7XG4gICAgICB0aGlzLnNldFJhbmdlKCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydjb21wYW55Q29sb3InXSkge1xuICAgICAgdGhpcy5zZXRTdHlsZVZhcmlhYmxlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2V0IGVycm9ycyBsZW5ndGggZm9yIHZhbGlkYXRpb25cbiAgLy8gQ29uc2lkZXIgb25seSB0aG9zZSBlcnJvcnMgd2hpY2ggd2hpY2ggYXJlIG5vdCBlbXB0eVxuICBzZXRFcnJvcnNMZW5ndGgoKTogYm9vbGVhbiB7XG4gICAgaWYgKCEhdGhpcy5fZXJyb3JzKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZXJyb3JzLmZpbHRlcihlcnIgPT4gISFlcnIpLmxlbmd0aCA+IDAgPyB0cnVlIDogZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIG9uVmFsdWVDaGFuZ2UodmFsdWU6IERhdGUgfCBzdHJpbmcpIHtcbiAgICB0aGlzLndyaXRlVmFsdWUodmFsdWUpO1xuICAgIHRoaXMuZXJyb3JzTGVuZ3RoID0gdGhpcy5zZXRFcnJvcnNMZW5ndGgoKTtcbiAgICBpZiAoIXRoaXMudXBkYXRlT25CbHVyKSB7XG4gICAgICB0aGlzLm9uVG91Y2goKTtcbiAgICB9XG4gICAgdGhpcy5vbkNoYW5nZSh2YWx1ZSk7XG4gICAgdGhpcy5jaGFuZ2VkLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZT86IERhdGUgfCBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgaWYgKHRoaXMuaXNSYW5nZSkge1xuICAgICAgdGhpcy5zZXRSYW5nZSgpO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2ggPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZGF0ZVJhbmdlQ2hhbmdlKHN0YXJ0OiBzdHJpbmcsIGVuZDogc3RyaW5nKSB7XG4gICAgdGhpcy5vblZhbHVlQ2hhbmdlKHRoaXMuZ2V0UmFuZ2Uoc3RhcnQsIGVuZCkpO1xuICB9XG5cbiAgc2V0TW9udGhBbmRZZWFyKG5vcm1hbGl6ZWRNb250aEFuZFllYXI6IGFueSwgZGF0ZXBpY2tlcjogTWF0RGF0ZXBpY2tlcjxEYXRlPikge1xuICAgIGNvbnN0IGN0cmxWYWx1ZSA9IHR5cGVvZiB0aGlzLnZhbHVlID09PSAnc3RyaW5nJyA/IG5ldyBEYXRlKHRoaXMudmFsdWUpIDogdGhpcy52YWx1ZSB8fCBuZXcgRGF0ZSgpO1xuXG4gICAgY3RybFZhbHVlLnNldE1vbnRoKG5vcm1hbGl6ZWRNb250aEFuZFllYXIuZ2V0TW9udGgoKSk7XG4gICAgY3RybFZhbHVlLnNldEZ1bGxZZWFyKG5vcm1hbGl6ZWRNb250aEFuZFllYXIuZ2V0RnVsbFllYXIoKSk7XG5cbiAgICBkYXRlcGlja2VyLmNsb3NlKCk7XG5cbiAgICB0aGlzLm9uVmFsdWVDaGFuZ2UobmV3IERhdGUoY3RybFZhbHVlKSk7XG4gIH1cblxuICBwcml2YXRlIHNldFJhbmdlKCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy52YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IFtzdGFydCwgZW5kXSA9IHRoaXMudmFsdWU/LnNwbGl0KCctJyk7XG4gICAgICBpZiAoc3RhcnQpIHtcbiAgICAgICAgdGhpcy5yYW5nZS5jb250cm9scy5zdGFydC5zZXRWYWx1ZShuZXcgRGF0ZShzdGFydCkpO1xuICAgICAgfVxuICAgICAgaWYgKGVuZCkge1xuICAgICAgICB0aGlzLnJhbmdlLmNvbnRyb2xzLmVuZC5zZXRWYWx1ZShuZXcgRGF0ZShlbmQpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudmFsdWUpIHtcbiAgICAgIHRoaXMucmFuZ2UuY29udHJvbHMuc3RhcnQuc2V0VmFsdWUobnVsbCk7XG4gICAgICB0aGlzLnJhbmdlLmNvbnRyb2xzLmVuZC5zZXRWYWx1ZShudWxsKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFJhbmdlKHN0YXJ0OiBzdHJpbmcsIGVuZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7c3RhcnR9LSR7ZW5kfWA7XG4gIH1cblxuICBvbklucHV0KGV2ZW50OiBFdmVudCkge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBFdmVudFRhcmdldCAmIHsgdmFsdWU6IHN0cmluZyB9O1xuICAgIGNvbnN0IFttb250aCwgeWVhcl0gPSB0YXJnZXQudmFsdWUuc3BsaXQoJy8nKTtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKS5nZXREYXRlKCk7XG4gICAgY29uc3QgZnVsbERhdGVTdHJpbmcgPSBgJHttb250aH0vJHtkYXRlfS8ke3llYXJ9YDtcbiAgICBjb25zdCBmdWxsRGF0ZSA9IG5ldyBEYXRlKGZ1bGxEYXRlU3RyaW5nKTtcbiAgICB0aGlzLm9uVmFsdWVDaGFuZ2UoZnVsbERhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTdHlsZVZhcmlhYmxlKCkge1xuICAgIGNvbnN0IGhvdmVyID0gdGhpcy5jb21wYW55Q29sb3IgPyBhZGp1c3RMaWdodG5lc3ModGhpcy5jb21wYW55Q29sb3IsICdob3ZlcicpIDogJyNGRkYyRkMnO1xuICAgIHRoaXMucmVuZGVyZXIyLnNldEF0dHJpYnV0ZShkb2N1bWVudC5ib2R5LCAnc3R5bGUnLCBgXG4gICAgLS1kYXRlcGlja2VyLWhvdmVyLWNvbG9yOiAke2hvdmVyfTtcbiAgICAtLWRhdGVwaWNrZXItc2VsZWN0ZWQtY29sb3I6ICR7dGhpcy5jb21wYW55Q29sb3IgfHwgJyNENDEwQUEnfWApO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyPlxuICA8bWF0LWZvcm0tZmllbGRcbiAgICAqbmdJZj1cIiFtb250aFBpY2tlcjsgZWxzZSBkYXRlWWVhclBpY2tlclwiXG4gICAgI3VpRGF0ZXBpY2tlclxuICAgIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCJcbiAgICBbY29sb3JdPVwiKGVycm9yc0xlbmd0aCB8fCAobmdDb250cm9sPy5lcnJvcnMgJiYgbmdDb250cm9sPy50b3VjaGVkICkpICA/ICd3YXJuJyA6ICdhY2NlbnQnXCJcbiAgICBbbmdDbGFzc109XCJ7ICdoaWRlLWJvdHRvbS1jb250ZW50JzogIXNob3dCb3R0b21Db250ZW50LCAnZnVsbC13aWR0aCc6IGZ1bGxXaWR0aCB9XCJcbiAgPlxuICAgIDxtYXQtbGFiZWwgKm5nSWY9XCJsYWJlbFwiPnt7IGxhYmVsIH19PHNwYW4gKm5nSWY9XCJyZXF1aXJlZFwiPiAqPC9zcGFuPjwvbWF0LWxhYmVsPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNSYW5nZVwiPlxuICAgICAgPGlucHV0ICpuZ0lmPVwiIWlzUmFuZ2VcIiBtYXRJbnB1dFxuICAgICAgICAgICAgIFttYXREYXRlcGlja2VyXT1cInBpY2tlclwiXG4gICAgICAgICAgICAgKGJsdXIpPVwib25Ub3VjaCgpXCJcbiAgICAgICAgICAgICAoZGF0ZUNoYW5nZSk9XCJvblZhbHVlQ2hhbmdlKCRldmVudC52YWx1ZSlcIlxuICAgICAgICAgICAgIFtpZF09XCJpZCFcIlxuICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlciFcIlxuICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICBbbmFtZV09XCJmaWVsZE5hbWUhXCJcbiAgICAgICAgICAgICBbcmVhZG9ubHldPVwicHJldmVudFVzZXJJbnB1dFwiXG4gICAgICAgICAgICAgW21pbl09XCJtaW5EYXRlXCJcbiAgICAgICAgICAgICBbbWF4XT1cIm1heERhdGVcIlxuICAgICAgLz5cbiAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0SWNvblN1ZmZpeCBbZm9yXT1cInBpY2tlclwiPlxuICAgICAgICA8dWktaWNvbiBtYXREYXRlcGlja2VyVG9nZ2xlSWNvbiBbYXBwbGljYXRpb25UaGVtZV09XCJhcHBsaWNhdGlvblRoZW1lXCIgbmFtZT1cIkNhbGVuZGFyXCIgc2l6ZT1cIjI0XCIgY29sb3I9XCJpbmhlcml0XCI+PC91aS1pY29uPlxuICAgICAgPC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XG4gICAgICA8bWF0LWRhdGVwaWNrZXIgI3BpY2tlcj48L21hdC1kYXRlcGlja2VyPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzUmFuZ2VcIj5cbiAgICAgIDxtYXQtZGF0ZS1yYW5nZS1pbnB1dCAqbmdJZj1cImlzUmFuZ2VcIiBbZm9ybUdyb3VwXT1cInJhbmdlXCIgW3JhbmdlUGlja2VyXT1cInJhbmdlUGlja2VyXCIgW21pbl09XCJtaW5EYXRlXCIgW21heF09XCJtYXhEYXRlXCIgPlxuICAgICAgICA8aW5wdXQgbWF0U3RhcnREYXRlICNkYXRlUmFuZ2VTdGFydCBmb3JtQ29udHJvbE5hbWU9XCJzdGFydFwiIFtwbGFjZWhvbGRlcl09XCIodHJhbnNsYXRpb25Db250ZXh0ICsgJ1NUQVJUX0RBVEUnKSB8IHVpVHJhbnNsYXRlIDogbGFuZ3VhZ2VcIiAoZGF0ZUNoYW5nZSk9XCJkYXRlUmFuZ2VDaGFuZ2UoZGF0ZVJhbmdlU3RhcnQudmFsdWUsIGRhdGVSYW5nZUVuZC52YWx1ZSlcIj5cbiAgICAgICAgPGlucHV0IG1hdEVuZERhdGUgICNkYXRlUmFuZ2VFbmQgZm9ybUNvbnRyb2xOYW1lPVwiZW5kXCIgW3BsYWNlaG9sZGVyXT1cIih0cmFuc2xhdGlvbkNvbnRleHQgKyAnRU5EX0RBVEUnKSB8IHVpVHJhbnNsYXRlIDogbGFuZ3VhZ2VcIiAoZGF0ZUNoYW5nZSk9XCJkYXRlUmFuZ2VDaGFuZ2UoZGF0ZVJhbmdlU3RhcnQudmFsdWUsIGRhdGVSYW5nZUVuZC52YWx1ZSlcIj5cbiAgICAgIDwvbWF0LWRhdGUtcmFuZ2UtaW5wdXQ+XG4gICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdEljb25TdWZmaXggW2Zvcl09XCJyYW5nZVBpY2tlclwiPlxuICAgICAgICA8dWktaWNvbiBtYXREYXRlcGlja2VyVG9nZ2xlSWNvbiBbYXBwbGljYXRpb25UaGVtZV09XCJhcHBsaWNhdGlvblRoZW1lXCIgbmFtZT1cIkNhbGVuZGFyXCIgc2l6ZT1cIjI0XCIgY29sb3I9XCJpbmhlcml0XCI+PC91aS1pY29uPlxuICAgICAgPC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XG4gICAgICA8bWF0LWRhdGUtcmFuZ2UtcGlja2VyICNyYW5nZVBpY2tlcj48L21hdC1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxtYXQtaGludCBjbGFzcz1cImluZm9cIiAqbmdJZj1cImhpbnQgJiYgIV9lcnJvcnMgJiYgIShuZ0NvbnRyb2w/LnRvdWNoZWQgJiYgKG5nQ29udHJvbD8uZXJyb3JzIHwgaGFzVmFsaWRhdGlvbkVycm9yKSlcIj57eyBoaW50IH19PC9tYXQtaGludD5cbiAgICA8bWF0LWhpbnQgY2xhc3M9XCJlcnJvclwiICpuZ0lmPVwiZXJyb3JzTGVuZ3RoIHx8IChuZ0NvbnRyb2w/LnRvdWNoZWQgJiYgKG5nQ29udHJvbD8uZXJyb3JzIHwgaGFzVmFsaWRhdGlvbkVycm9yKSlcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlcnJvcnNMZW5ndGhcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImVycm9yc1wiICpuZ0Zvcj1cImxldCBlcnJvciBvZiBfZXJyb3JzXCI+XG4gICAgICAgICAgPHVpLWljb24gW2FwcGxpY2F0aW9uVGhlbWVdPVwiYXBwbGljYXRpb25UaGVtZVwiIG5hbWU9XCJFcnJvclwiPjwvdWktaWNvbj5cbiAgICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cImVycm9yXCI+PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPHVpLXZhbGlkYXRpb24tZXJyb3IgKm5nSWY9XCJuZ0NvbnRyb2wgJiYgIWhpZGVCdWlsdEluRXJyb3JzXCIgW25nQ29udHJvbF09XCJuZ0NvbnRyb2xcIiBbbGFiZWxdPVwiaGlkZUxhYmVsSW5FcnJvcnMgPyBudWxsIDogbGFiZWxcIiBbbGFuZ3VhZ2VdPVwibGFuZ3VhZ2VcIj48L3VpLXZhbGlkYXRpb24tZXJyb3I+XG4gICAgPC9tYXQtaGludD5cbiAgPC9tYXQtZm9ybS1maWVsZD5cblxuICA8bmctdGVtcGxhdGUgI2RhdGVZZWFyUGlja2VyPlxuICAgIDxtYXQtZm9ybS1maWVsZFxuICAgICAgYXBwTm9EYXRlRm9ybWF0XG4gICAgICAjdWlEYXRlcGlja2VyXG4gICAgICBhcHBlYXJhbmNlPVwib3V0bGluZVwiXG4gICAgICBbY29sb3JdPVwiKGVycm9yc0xlbmd0aCB8fCAobmdDb250cm9sPy5lcnJvcnMgJiYgbmdDb250cm9sPy50b3VjaGVkICkpICA/ICd3YXJuJyA6ICdhY2NlbnQnXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsgJ2hpZGUtYm90dG9tLWNvbnRlbnQnOiAhc2hvd0JvdHRvbUNvbnRlbnQsICdmdWxsLXdpZHRoJzogZnVsbFdpZHRoIH1cIlxuICAgID5cbiAgICAgIDxtYXQtbGFiZWwgKm5nSWY9XCJsYWJlbFwiPnt7IGxhYmVsIH19PHNwYW4gKm5nSWY9XCJyZXF1aXJlZFwiPiAqPC9zcGFuPjwvbWF0LWxhYmVsPlxuXG4gICAgICA8bmctY29udGFpbmVyID5cbiAgICAgICAgPGlucHV0IG1hdElucHV0XG4gICAgICAgICAgICAgICBbaWRdPVwiaWQhXCJcbiAgICAgICAgICAgICAgIChibHVyKT1cIm9uVG91Y2goKVwiXG4gICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIhXCJcbiAgICAgICAgICAgICAgIFttYXREYXRlcGlja2VyXT1cImRwXCJcbiAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgW25hbWVdPVwiZmllbGROYW1lIVwiXG4gICAgICAgICAgICAgICBbbWluXT1cIm1pbkRhdGVcIlxuICAgICAgICAgICAgICAgW21heF09XCJtYXhEYXRlXCJcbiAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJwcmV2ZW50VXNlcklucHV0XCJcbiAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25JbnB1dCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgIChkYXRlQ2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2UoJGV2ZW50LnZhbHVlKVwiXG4gICAgICAgID5cbiAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRJY29uU3VmZml4IFtmb3JdPVwiZHBcIj5cbiAgICAgICAgICA8dWktaWNvbiAqbmdJZj1cImFwcGxpY2F0aW9uVGhlbWUgIT09ICdjbGFzc2ljJ1wiIG1hdERhdGVwaWNrZXJUb2dnbGVJY29uIFthcHBsaWNhdGlvblRoZW1lXT1cImFwcGxpY2F0aW9uVGhlbWVcIiBuYW1lPVwiQ2FsZW5kYXJcIiBzaXplPVwiMjRcIiBjb2xvcj1cImluaGVyaXRcIj48L3VpLWljb24+XG4gICAgICAgIDwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxuICAgICAgICA8bWF0LWRhdGVwaWNrZXIgcGFuZWxDbGFzcz1cIm1vbnRoLXBpY2tlclwiICNkcCBzdGFydFZpZXc9XCJtdWx0aS15ZWFyXCIgKG1vbnRoU2VsZWN0ZWQpPVwic2V0TW9udGhBbmRZZWFyKCRldmVudCwgZHApXCI+PC9tYXQtZGF0ZXBpY2tlcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bWF0LWhpbnQgY2xhc3M9XCJpbmZvXCIgKm5nSWY9XCJoaW50ICYmICFfZXJyb3JzICYmICEobmdDb250cm9sPy50b3VjaGVkICYmIChuZ0NvbnRyb2w/LmVycm9ycyB8IGhhc1ZhbGlkYXRpb25FcnJvcikpXCI+e3sgaGludCB9fTwvbWF0LWhpbnQ+XG4gICAgICA8bWF0LWhpbnQgY2xhc3M9XCJlcnJvclwiICpuZ0lmPVwiZXJyb3JzTGVuZ3RoIHx8IChuZ0NvbnRyb2w/LnRvdWNoZWQgJiYgKG5nQ29udHJvbD8uZXJyb3JzIHwgaGFzVmFsaWRhdGlvbkVycm9yKSlcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVycm9yc0xlbmd0aFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJlcnJvcnNcIiAqbmdGb3I9XCJsZXQgZXJyb3Igb2YgX2Vycm9yc1wiPlxuICAgICAgICAgICAgPHVpLWljb24gW2FwcGxpY2F0aW9uVGhlbWVdPVwiYXBwbGljYXRpb25UaGVtZVwiIG5hbWU9XCJFcnJvclwiPjwvdWktaWNvbj5cbiAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiZXJyb3JcIj48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8dWktdmFsaWRhdGlvbi1lcnJvciAqbmdJZj1cIm5nQ29udHJvbCAmJiAhaGlkZUJ1aWx0SW5FcnJvcnNcIiBbbmdDb250cm9sXT1cIm5nQ29udHJvbFwiIFtsYWJlbF09XCJoaWRlTGFiZWxJbkVycm9ycyA/IG51bGwgOiBsYWJlbFwiIFtsYW5ndWFnZV09XCJsYW5ndWFnZVwiPjwvdWktdmFsaWRhdGlvbi1lcnJvcj5cbiAgICAgIDwvbWF0LWhpbnQ+XG5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L25nLXRlbXBsYXRlPlxuXG48L25nLWNvbnRhaW5lcj5cbiJdfQ==