verben-ng-ui 1.2.40 → 1.2.42

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.
@@ -6,6 +6,7 @@ import * as i2 from "@angular/common";
6
6
  import * as i3 from "verben-ng-ui/src/lib/components/svg";
7
7
  import * as i4 from "verben-ng-ui/src/lib/components/drop-down";
8
8
  import * as i5 from "verben-ng-ui/src/lib/components/data-view";
9
+ import * as i6 from "verben-ng-ui/src/lib/components/tooltip";
9
10
  export class DatePickerComponent {
10
11
  placeholder = 'Select date';
11
12
  format = 'MM/DD/YYYY';
@@ -25,6 +26,7 @@ export class DatePickerComponent {
25
26
  selectedDate = new Date();
26
27
  tempSelectedDate = new Date();
27
28
  showCalendar = false;
29
+ datePickerWidth = '400px';
28
30
  weekDays = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'];
29
31
  months = [
30
32
  'January', 'February', 'March', 'April', 'May', 'June',
@@ -37,8 +39,11 @@ export class DatePickerComponent {
37
39
  onTouched = () => { };
38
40
  writeValue(value) {
39
41
  if (value) {
40
- this.date = value;
42
+ if (typeof value === 'string') {
43
+ value = this.sanitizeDateString(value);
44
+ }
41
45
  const parsedDate = typeof value === 'string' ? new Date(value) : value;
46
+ this.date = parsedDate;
42
47
  this.selectedDate = new Date(parsedDate);
43
48
  this.tempSelectedDate = new Date(parsedDate);
44
49
  this.selectedMonth = this.selectedDate.getMonth();
@@ -59,7 +64,10 @@ export class DatePickerComponent {
59
64
  }
60
65
  ngOnChanges() {
61
66
  if (this.date) {
62
- const parsedDate = typeof this.date === 'string' ? new Date(this.date) : this.date;
67
+ let d = this.date;
68
+ if (typeof d === 'string')
69
+ d = this.sanitizeDateString(d);
70
+ const parsedDate = new Date(d);
63
71
  this.selectedDate = new Date(parsedDate);
64
72
  this.tempSelectedDate = new Date(parsedDate);
65
73
  this.selectedMonth = this.selectedDate.getMonth();
@@ -78,19 +86,20 @@ export class DatePickerComponent {
78
86
  this.yearRange.sort((a, b) => b - a);
79
87
  if (!this.date) {
80
88
  const now = new Date();
81
- this.tempSelectedDate = new Date(now);
82
- this.selectedDate = new Date(now);
89
+ const pad = (n) => n.toString().padStart(2, '0');
90
+ const localDateString = `${now.getFullYear()}-${pad(now.getMonth() + 1)}-${pad(now.getDate())}T${pad(now.getHours())}:${pad(now.getMinutes())}:${pad(now.getSeconds())}`;
91
+ this.selectedDate = new Date(localDateString);
92
+ this.tempSelectedDate = new Date(localDateString);
83
93
  this.date = this.selectedDate;
84
94
  if (this.showTime) {
85
95
  const hours = now.getHours();
86
96
  const minutes = now.getMinutes();
87
- this.selectedHour = (!this.is24Hour && hours > 12 ? hours - 12 : hours)
88
- .toString()
89
- .padStart(2, "0");
90
- this.selectedMinute = minutes.toString().padStart(2, "0");
91
- this.amPm = !this.is24Hour && hours >= 12 ? "PM" : "AM";
97
+ this.selectedHour = hours.toString().padStart(2, '0');
98
+ this.selectedMinute = minutes.toString().padStart(2, '0');
92
99
  this.tempTime = `${this.selectedHour}:${this.selectedMinute}`;
93
100
  }
101
+ this.dateChange.emit(this.selectedDate);
102
+ this.onChange(localDateString);
94
103
  }
95
104
  }
96
105
  get displayDate() {
@@ -98,13 +107,12 @@ export class DatePickerComponent {
98
107
  return parsedDate ? this.formatDate(parsedDate, this.format) : '';
99
108
  }
100
109
  tempTime = '';
101
- amPm = 'AM';
102
- selectedHour = "12";
103
- selectedMinute = "00";
110
+ selectedHour = '00';
111
+ selectedMinute = '00';
104
112
  showHourOptions = false;
105
113
  showMinuteOptions = false;
106
- hours = Array.from({ length: 12 }, (_, i) => String(i + 1).padStart(2, "0"));
107
- minutes = Array.from({ length: 60 }, (_, i) => String(i).padStart(2, "0"));
114
+ hours = Array.from({ length: 24 }, (_, i) => String(i).padStart(2, '0'));
115
+ minutes = Array.from({ length: 60 }, (_, i) => String(i).padStart(2, '0'));
108
116
  toggleHourDropdown() {
109
117
  this.showHourOptions = !this.showHourOptions;
110
118
  this.showMinuteOptions = false;
@@ -121,9 +129,6 @@ export class DatePickerComponent {
121
129
  this.selectedMinute = m;
122
130
  this.showMinuteOptions = false;
123
131
  }
124
- toggleAmPm() {
125
- this.amPm = this.amPm === "AM" ? "PM" : "AM";
126
- }
127
132
  toggleCalendar() {
128
133
  this.showCalendar = !this.showCalendar;
129
134
  this.tempSelectedDate = new Date(this.date || new Date());
@@ -136,22 +141,16 @@ export class DatePickerComponent {
136
141
  const hours = isToday ? today.getHours() : 0;
137
142
  const minutes = isToday ? today.getMinutes() : 0;
138
143
  this.tempSelectedDate.setHours(hours, minutes, 0, 0);
139
- this.selectedHour = (!this.is24Hour && hours > 12 ? hours - 12 : hours)
140
- .toString()
141
- .padStart(2, "0");
142
- this.selectedMinute = minutes.toString().padStart(2, "0");
143
- this.amPm = !this.is24Hour && hours >= 12 ? "PM" : "AM";
144
+ this.selectedHour = hours.toString().padStart(2, '0');
145
+ this.selectedMinute = minutes.toString().padStart(2, '0');
144
146
  this.tempTime = `${this.selectedHour}:${this.selectedMinute}`;
145
147
  }
146
148
  }
147
149
  initTimeFromDate(date) {
148
150
  const hours = date.getHours();
149
151
  const minutes = date.getMinutes();
150
- this.selectedHour = (!this.is24Hour && hours > 12 ? hours - 12 : hours)
151
- .toString()
152
- .padStart(2, "0");
153
- this.selectedMinute = minutes.toString().padStart(2, "0");
154
- this.amPm = !this.is24Hour && hours >= 12 ? "PM" : "AM";
152
+ this.selectedHour = hours.toString().padStart(2, '0');
153
+ this.selectedMinute = minutes.toString().padStart(2, '0');
155
154
  this.tempTime = `${this.selectedHour}:${this.selectedMinute}`;
156
155
  this.tempSelectedDate.setHours(hours, minutes, 0, 0);
157
156
  }
@@ -166,41 +165,32 @@ export class DatePickerComponent {
166
165
  confirm() {
167
166
  if (this.isDisabled(this.tempSelectedDate))
168
167
  return;
169
- let hours;
170
- let minutes;
171
- if (this.showTime) {
172
- hours = Number(this.selectedHour);
173
- minutes = Number(this.selectedMinute);
174
- if (!this.is24Hour) {
175
- if (this.amPm === "PM" && hours < 12)
176
- hours += 12;
177
- if (this.amPm === "AM" && hours === 12)
178
- hours = 0;
179
- }
180
- }
181
- else {
182
- hours = 0;
183
- minutes = 0;
184
- }
168
+ const hours = Number(this.selectedHour);
169
+ const minutes = Number(this.selectedMinute);
185
170
  this.tempSelectedDate.setHours(hours, minutes, 0, 0);
186
171
  this.selectedDate = new Date(this.tempSelectedDate);
187
172
  this.date = this.selectedDate;
188
173
  const pad = (n) => n.toString().padStart(2, '0');
189
174
  const localDateString = `${this.selectedDate.getFullYear()}-${pad(this.selectedDate.getMonth() + 1)}-${pad(this.selectedDate.getDate())}T${pad(this.selectedDate.getHours())}:${pad(this.selectedDate.getMinutes())}:${pad(this.selectedDate.getSeconds())}`;
190
- console.log(localDateString);
191
175
  this.dateChange.emit(this.selectedDate);
192
176
  this.onChange(localDateString);
193
177
  this.onTouched();
194
178
  this.showCalendar = false;
195
179
  }
196
180
  setToStartOfDay() {
197
- this.selectedHour = this.is24Hour ? '00' : '12';
181
+ this.selectedHour = '00';
198
182
  this.selectedMinute = '00';
199
- this.amPm = 'AM';
200
183
  this.tempSelectedDate.setHours(0, 0, 0, 0);
201
184
  this.tempTime = `${this.selectedHour}:${this.selectedMinute}`;
202
185
  this.selectedDate = new Date(this.tempSelectedDate);
203
186
  }
187
+ setToEndOfDay() {
188
+ this.selectedHour = '23';
189
+ this.selectedMinute = '59';
190
+ this.tempSelectedDate.setHours(23, 59, 59, 999);
191
+ this.tempTime = `${this.selectedHour}:${this.selectedMinute}`;
192
+ this.selectedDate = new Date(this.tempSelectedDate);
193
+ }
204
194
  previousMonth() {
205
195
  this.selectedMonth--;
206
196
  if (this.selectedMonth < 0) {
@@ -245,6 +235,9 @@ export class DatePickerComponent {
245
235
  }
246
236
  return days;
247
237
  }
238
+ sanitizeDateString(value) {
239
+ return value?.endsWith('Z') ? value.slice(0, -1) : value;
240
+ }
248
241
  isDisabled(day) {
249
242
  const dayDate = this.toDate(day);
250
243
  if (this.minDate && dayDate < this.stripTime(this.toDate(this.minDate)))
@@ -260,9 +253,9 @@ export class DatePickerComponent {
260
253
  toDate(value) {
261
254
  if (value instanceof Date)
262
255
  return value;
263
- return new Date(value);
256
+ return new Date(this.sanitizeDateString(value));
264
257
  }
265
- is24Hour = false;
258
+ is24Hour = true;
266
259
  selectTemporaryDate(day) {
267
260
  if (this.isDisabled(day))
268
261
  return;
@@ -277,19 +270,14 @@ export class DatePickerComponent {
277
270
  const hours = isToday ? today.getHours() : 0;
278
271
  const minutes = isToday ? today.getMinutes() : 0;
279
272
  this.tempSelectedDate.setHours(hours, minutes, 0, 0);
280
- this.selectedHour = (!this.is24Hour && hours > 12 ? hours - 12 : hours)
281
- .toString()
282
- .padStart(2, "0");
283
- this.selectedMinute = minutes.toString().padStart(2, "0");
284
- this.amPm = !this.is24Hour && hours >= 12 ? "PM" : "AM";
273
+ this.selectedHour = hours.toString().padStart(2, '0');
274
+ this.selectedMinute = minutes.toString().padStart(2, '0');
285
275
  this.tempTime = `${this.selectedHour}:${this.selectedMinute}`;
286
276
  }
287
277
  else {
288
278
  const [h, m] = this.tempTime.split(':');
289
279
  this.selectedHour = h;
290
280
  this.selectedMinute = m;
291
- if (!this.is24Hour)
292
- this.amPm = Number(h) >= 12 ? 'PM' : 'AM';
293
281
  }
294
282
  }
295
283
  }
@@ -314,13 +302,13 @@ export class DatePickerComponent {
314
302
  this.showCalendar = false;
315
303
  }
316
304
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: DatePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
317
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.10", type: DatePickerComponent, selector: "app-date-picker", inputs: { placeholder: "placeholder", format: "format", minDate: "minDate", maxDate: "maxDate", disabled: "disabled", bgColor: "bgColor", border: "border", useDropdowns: "useDropdowns", yearPlaceholder: "yearPlaceholder", monthPlaceholder: "monthPlaceholder", date: "date", showTime: "showTime" }, outputs: { dateChange: "dateChange" }, providers: [
305
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.10", type: DatePickerComponent, selector: "app-date-picker", inputs: { placeholder: "placeholder", format: "format", minDate: "minDate", maxDate: "maxDate", disabled: "disabled", bgColor: "bgColor", border: "border", useDropdowns: "useDropdowns", yearPlaceholder: "yearPlaceholder", monthPlaceholder: "monthPlaceholder", date: "date", showTime: "showTime", datePickerWidth: "datePickerWidth" }, outputs: { dateChange: "dateChange" }, providers: [
318
306
  {
319
307
  provide: NG_VALUE_ACCESSOR,
320
308
  useExisting: forwardRef(() => DatePickerComponent),
321
309
  multi: true,
322
310
  },
323
- ], usesOnChanges: true, ngImport: i0, template: "<div class=\"date-picker\">\n<div class=\"calendar-container\">\n <input\n type=\"text\"\n [placeholder]=\"placeholder\"\n [value]=\"displayDate\"\n [disabled]=\"disabled\"\n (click)=\"!disabled && toggleCalendar()\"\n class=\"w-full block\"\n [style.background-color]=\"bgColor\"\n [style.border]=\"border\"\n \n [ngClass]=\"{'cursor-not-allowed':disabled===true, 'cursor-pointer':disabled===false}\"\n readonly\n /> \n<verben-svg (click)=\"!disabled && toggleCalendar()\" class=\"icon\" [icon]=\"'calendar'\"></verben-svg>\n</div>\n\n <div *ngIf=\"showCalendar\" [appOutSideClick]=\"showCalendar\" (outSideClick)=\"showCalendar=false\" class=\"calendar\">\n <div class=\"calendar-header\">\n <ng-container *ngIf=\"!useDropdowns; else dropdowns\">\n <button (click)=\"previousMonth()\">\n <verben-svg [width]=\"20\" [icon]=\"'chevron-left'\"></verben-svg>\n </button>\n <span>{{ months[selectedMonth] }} {{ selectedYear }}</span>\n <button (click)=\"nextMonth()\">\n <verben-svg [width]=\"20\" [icon]=\"'chevron-right'\"></verben-svg>\n </button>\n </ng-container>\n\n <ng-template #dropdowns>\n <verben-drop-down\n [placeholder]=\"yearPlaceholder\"\n (onChange)=\"onDropdownYearChange($event)\"\n [options]=\"yearRange\"\n [(ngModel)]=\"selectedYear\"\n [width]=\"'90px'\"\n ></verben-drop-down>\n\n <verben-drop-down\n [placeholder]=\"monthPlaceholder\"\n (onChange)=\"onDropdownMonthChange($event)\"\n [options]=\"months\"\n class=\"drop-down\"\n [(ngModel)]=\"selectedMonthString\"\n [width]=\"'90px'\"\n ></verben-drop-down>\n </ng-template>\n <verben-svg (click)=\"setToStartOfDay()\" class=\" cursor-pointer\" [width]=\"14\" [height]=\"14\" [icon]=\"'clock'\"></verben-svg>\n<div class=\"time-picker flex items-center gap-2\" *ngIf=\"showTime\">\n <div class=\"relative\">\n <div class=\"flex items-center box rounded px-2 py-1 cursor-pointer\"\n (click)=\"toggleHourDropdown()\">\n {{ selectedHour }}\n </div>\n\n <div *ngIf=\"showHourOptions\" class=\"dropdown\">\n <div\n class=\"dropdown-item\"\n *ngFor=\"let h of hours\"\n [class.active]=\"h === selectedHour\"\n (click)=\"selectHour(h)\"\n >\n {{ h }}\n </div>\n </div>\n </div>\n\n <span>:</span>\n\n <div class=\"relative\">\n <div class=\"flex items-center box rounded px-2 py-1 cursor-pointer\"\n (click)=\"toggleMinuteDropdown()\">\n {{ selectedMinute }}\n </div>\n\n <div *ngIf=\"showMinuteOptions\" class=\"dropdown\">\n <div\n class=\"dropdown-item\"\n *ngFor=\"let m of minutes\"\n [class.active]=\"m === selectedMinute\"\n (click)=\"selectMinute(m)\"\n >\n {{m}}\n </div>\n </div>\n </div>\n <button\n type=\"button\"\n (click)=\"toggleAmPm()\"\n class=\"amPm\"\n >\n {{ amPm }}\n </button>\n\n \n</div>\n\n\n </div>\n\n <div class=\"calendar-body\">\n <div class=\"weekdays\">\n <span *ngFor=\"let day of weekDays\">{{ day }}</span>\n </div>\n <div class=\"dates\">\n <ng-container *ngFor=\"let day of getDaysInMonth()\">\n <button\n *ngIf=\"day; else empty\"\n [class.selected]=\"isSelected(day)\"\n [disabled]=\"isDisabled(day)\" \n [ngClass]=\"{'disabled-day': isDisabled(day)}\"\n (click)=\"selectTemporaryDate(day)\"\n >\n {{ day.getDate() }}\n </button>\n <ng-template #empty>\n <span class=\"empty-date\"></span>\n </ng-template>\n </ng-container>\n </div>\n </div>\n\n <div class=\"calendar-footer\">\n\n <button (click)=\"cancel()\">Cancel</button>\n <button (click)=\"confirm()\">OK</button>\n </div>\n </div>\n</div>\n", styles: [".date-picker{position:relative;width:100%}.calendar-container{position:relative}.icon{position:absolute;top:5px;right:10px;cursor:pointer}input{width:100%;padding:10px;font-size:13px;border:1px solid #ccc;border-radius:4px}.cursor-pointer{cursor:pointer}.cursor-not-allowed{cursor:not-allowed;color:#8080808f}.calendar{position:absolute;top:100%;left:0;width:350px;border:1px solid #ccc;background-color:#fff;z-index:10;border-radius:4px}.calendar-header{display:flex;justify-content:center;gap:5px;align-items:center;font-size:13px;padding:15px 15px 0}.weekdays,.dates{display:grid;grid-template-columns:repeat(7,1fr);text-align:center;gap:1px;padding:15px 15px 0;font-size:13px}button{border:none;background:none;cursor:pointer;padding:5px;width:40px;height:40px}button.selected{background-color:#ffe681;color:#000;border-radius:30px}.calendar-footer{display:flex;justify-content:end;gap:10px;padding:4px 15px;color:#000;font-weight:500;font-size:13px}.calendar-footer button{color:#000}.disabled-day{opacity:.4;cursor:not-allowed}.time-picker input{border:1px solid #ccc;border-radius:4px;padding:4px 6px;text-align:center;width:50px;outline:none;height:40px}.time-picker button{border:1px solid #ccc;border-radius:4px;background-color:#f3f3f3;font-size:10px;width:fit-content;height:30px;cursor:pointer}.box{border:1px solid #ccc}::ng-deep .drop-down .verben-drop-down,::ng-deep .drop-down *{font-size:13px!important}.dropdown{position:absolute;top:110%;left:0;width:60px;max-height:120px;overflow-y:auto;background:#fff;border:1px solid #ccc;border-radius:6px;box-shadow:0 2px 8px #0000001a;z-index:20}.dropdown-item{padding:6px;text-align:center;cursor:pointer}.dropdown-item:hover,.dropdown-item.active{background:#3182ce;color:#fff}\n"], dependencies: [{ kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }, { kind: "component", type: i4.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "directive", type: i5.OutSideClickDirective, selector: "[appOutSideClick]", inputs: ["appOutSideClick"], outputs: ["outSideClick"] }] });
311
+ ], usesOnChanges: true, ngImport: i0, template: "<div class=\"date-picker\">\n <div class=\"calendar-container\">\n <input\n type=\"text\"\n [placeholder]=\"placeholder\"\n [value]=\"displayDate\"\n [disabled]=\"disabled\"\n (click)=\"!disabled && toggleCalendar()\"\n class=\"w-full block\"\n [style.background-color]=\"bgColor\"\n [style.border]=\"border\"\n [ngClass]=\"{\n 'cursor-not-allowed': disabled === true,\n 'cursor-pointer': disabled === false\n }\"\n readonly\n />\n <verben-svg\n (click)=\"!disabled && toggleCalendar()\"\n class=\"icon\"\n [icon]=\"'calendar'\"\n ></verben-svg>\n </div>\n\n <div\n *ngIf=\"showCalendar\"\n [appOutSideClick]=\"showCalendar\"\n (outSideClick)=\"showCalendar = false\"\n class=\"calendar\"\n [style.width]=\"datePickerWidth\"\n >\n <div class=\"calendar-header\">\n <ng-container *ngIf=\"!useDropdowns; else dropdowns\">\n <button (click)=\"previousMonth()\">\n <verben-svg [width]=\"20\" [icon]=\"'chevron-left'\"></verben-svg>\n </button>\n <span>{{ months[selectedMonth] }} {{ selectedYear }}</span>\n <button (click)=\"nextMonth()\">\n <verben-svg [width]=\"20\" [icon]=\"'chevron-right'\"></verben-svg>\n </button>\n </ng-container>\n\n <ng-template #dropdowns>\n <verben-drop-down\n [placeholder]=\"yearPlaceholder\"\n (onChange)=\"onDropdownYearChange($event)\"\n [options]=\"yearRange\"\n [(ngModel)]=\"selectedYear\"\n [width]=\"'90px'\"\n ></verben-drop-down>\n\n <verben-drop-down\n [placeholder]=\"monthPlaceholder\"\n (onChange)=\"onDropdownMonthChange($event)\"\n [options]=\"months\"\n class=\"drop-down\"\n [(ngModel)]=\"selectedMonthString\"\n [width]=\"'90px'\"\n ></verben-drop-down>\n </ng-template>\n\n \n <div class=\"time-picker flex items-center gap-2\" *ngIf=\"showTime\">\n <div class=\"relative\">\n <div\n class=\"flex items-center box rounded px-2 py-1 cursor-pointer\"\n (click)=\"toggleHourDropdown()\"\n >\n {{ selectedHour }}\n </div>\n\n <div *ngIf=\"showHourOptions\" class=\"dropdown\">\n <div\n class=\"dropdown-item\"\n *ngFor=\"let h of hours\"\n [class.active]=\"h === selectedHour\"\n (click)=\"selectHour(h)\"\n >\n {{ h }}\n </div>\n </div>\n </div>\n\n <span>:</span>\n\n <div class=\"relative\">\n <div\n class=\"flex items-center box rounded px-2 py-1 cursor-pointer\"\n (click)=\"toggleMinuteDropdown()\"\n >\n {{ selectedMinute }}\n </div>\n\n <div *ngIf=\"showMinuteOptions\" class=\"dropdown\">\n <div\n class=\"dropdown-item\"\n *ngFor=\"let m of minutes\"\n [class.active]=\"m === selectedMinute\"\n (click)=\"selectMinute(m)\"\n >\n {{ m }}\n </div>\n </div>\n </div>\n \n <div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"tooltipTemplate\"\n #tooltip>\n <verben-svg\n (click)=\"setToStartOfDay()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'sun'\"\n ></verben-svg>\n </verben-tooltip>\n <ng-template #tooltipTemplate>\n <div>\n <p class=\"text-xs\">Set start of day</p>\n </div>\n </ng-template>\n </div>\n <div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"endOfDayTooltip\"\n #endOfDayTip\n >\n <verben-svg\n (click)=\"setToEndOfDay()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'moon'\"\n ></verben-svg>\n </verben-tooltip>\n\n <ng-template #endOfDayTooltip>\n <div>\n <p class=\"text-xs\">Set end of day</p>\n </div>\n </ng-template>\n</div>\n\n </div>\n\n </div>\n\n <div class=\"calendar-body\">\n <div class=\"weekdays\">\n <span *ngFor=\"let day of weekDays\">{{ day }}</span>\n </div>\n\n <div class=\"dates\">\n <ng-container *ngFor=\"let day of getDaysInMonth()\">\n <button\n *ngIf=\"day; else empty\"\n [class.selected]=\"isSelected(day)\"\n [disabled]=\"isDisabled(day)\"\n [ngClass]=\"{ 'disabled-day': isDisabled(day) }\"\n (click)=\"selectTemporaryDate(day)\"\n >\n {{ day.getDate() }}\n </button>\n <ng-template #empty>\n <span class=\"empty-date\"></span>\n </ng-template>\n </ng-container>\n </div>\n </div>\n\n <div class=\"calendar-footer\">\n <button (click)=\"cancel()\">Cancel</button>\n <button (click)=\"confirm()\">OK</button>\n </div>\n </div>\n</div>\n", styles: [".date-picker{position:relative;width:100%}.calendar-container{position:relative}.icon{position:absolute;top:5px;right:10px;cursor:pointer}input{width:100%;padding:10px;font-size:13px;border:1px solid #ccc;border-radius:4px}.cursor-pointer{cursor:pointer}.cursor-not-allowed{cursor:not-allowed;color:#8080808f}.calendar{position:absolute;top:100%;left:0;border:1px solid #ccc;background-color:#fff;z-index:10;border-radius:4px}.calendar-header{display:flex;justify-content:center;gap:5px;align-items:center;font-size:13px;padding:15px 15px 0}.weekdays,.dates{display:grid;grid-template-columns:repeat(7,1fr);text-align:center;gap:1px;padding:15px 15px 0;font-size:13px}button{border:none;background:none;cursor:pointer;padding:5px;width:40px;height:40px}button.selected{background-color:#ffe681;color:#000;border-radius:30px}.calendar-footer{display:flex;justify-content:end;gap:10px;padding:4px 15px;color:#000;font-weight:500;font-size:13px}.calendar-footer button{color:#000}.disabled-day{opacity:.4;cursor:not-allowed}.time-picker input{border:1px solid #ccc;border-radius:4px;padding:4px 6px;text-align:center;width:50px;outline:none;height:40px}.time-picker button{border:1px solid #ccc;border-radius:4px;background-color:#f3f3f3;font-size:10px;width:fit-content;height:30px;cursor:pointer}.box{border:1px solid #ccc}::ng-deep .drop-down .verben-drop-down,::ng-deep .drop-down *{font-size:13px!important}.dropdown{position:absolute;top:110%;left:0;width:60px;max-height:120px;overflow-y:auto;background:#fff;border:1px solid #ccc;border-radius:6px;box-shadow:0 2px 8px #0000001a;z-index:20}.dropdown-item{padding:6px;text-align:center;cursor:pointer}.dropdown-item:hover,.dropdown-item.active{background:#3182ce;color:#fff}\n"], dependencies: [{ kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }, { kind: "component", type: i4.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "directive", type: i5.OutSideClickDirective, selector: "[appOutSideClick]", inputs: ["appOutSideClick"], outputs: ["outSideClick"] }, { kind: "component", type: i6.TooltipComponent, selector: "verben-tooltip", inputs: ["tooltipContent", "customClass", "backgroundColor", "textColor", "padding", "borderRadius", "zIndex", "border", "width", "top", "bottom", "left", "right"] }] });
324
312
  }
325
313
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: DatePickerComponent, decorators: [{
326
314
  type: Component,
@@ -330,7 +318,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImpo
330
318
  useExisting: forwardRef(() => DatePickerComponent),
331
319
  multi: true,
332
320
  },
333
- ], template: "<div class=\"date-picker\">\n<div class=\"calendar-container\">\n <input\n type=\"text\"\n [placeholder]=\"placeholder\"\n [value]=\"displayDate\"\n [disabled]=\"disabled\"\n (click)=\"!disabled && toggleCalendar()\"\n class=\"w-full block\"\n [style.background-color]=\"bgColor\"\n [style.border]=\"border\"\n \n [ngClass]=\"{'cursor-not-allowed':disabled===true, 'cursor-pointer':disabled===false}\"\n readonly\n /> \n<verben-svg (click)=\"!disabled && toggleCalendar()\" class=\"icon\" [icon]=\"'calendar'\"></verben-svg>\n</div>\n\n <div *ngIf=\"showCalendar\" [appOutSideClick]=\"showCalendar\" (outSideClick)=\"showCalendar=false\" class=\"calendar\">\n <div class=\"calendar-header\">\n <ng-container *ngIf=\"!useDropdowns; else dropdowns\">\n <button (click)=\"previousMonth()\">\n <verben-svg [width]=\"20\" [icon]=\"'chevron-left'\"></verben-svg>\n </button>\n <span>{{ months[selectedMonth] }} {{ selectedYear }}</span>\n <button (click)=\"nextMonth()\">\n <verben-svg [width]=\"20\" [icon]=\"'chevron-right'\"></verben-svg>\n </button>\n </ng-container>\n\n <ng-template #dropdowns>\n <verben-drop-down\n [placeholder]=\"yearPlaceholder\"\n (onChange)=\"onDropdownYearChange($event)\"\n [options]=\"yearRange\"\n [(ngModel)]=\"selectedYear\"\n [width]=\"'90px'\"\n ></verben-drop-down>\n\n <verben-drop-down\n [placeholder]=\"monthPlaceholder\"\n (onChange)=\"onDropdownMonthChange($event)\"\n [options]=\"months\"\n class=\"drop-down\"\n [(ngModel)]=\"selectedMonthString\"\n [width]=\"'90px'\"\n ></verben-drop-down>\n </ng-template>\n <verben-svg (click)=\"setToStartOfDay()\" class=\" cursor-pointer\" [width]=\"14\" [height]=\"14\" [icon]=\"'clock'\"></verben-svg>\n<div class=\"time-picker flex items-center gap-2\" *ngIf=\"showTime\">\n <div class=\"relative\">\n <div class=\"flex items-center box rounded px-2 py-1 cursor-pointer\"\n (click)=\"toggleHourDropdown()\">\n {{ selectedHour }}\n </div>\n\n <div *ngIf=\"showHourOptions\" class=\"dropdown\">\n <div\n class=\"dropdown-item\"\n *ngFor=\"let h of hours\"\n [class.active]=\"h === selectedHour\"\n (click)=\"selectHour(h)\"\n >\n {{ h }}\n </div>\n </div>\n </div>\n\n <span>:</span>\n\n <div class=\"relative\">\n <div class=\"flex items-center box rounded px-2 py-1 cursor-pointer\"\n (click)=\"toggleMinuteDropdown()\">\n {{ selectedMinute }}\n </div>\n\n <div *ngIf=\"showMinuteOptions\" class=\"dropdown\">\n <div\n class=\"dropdown-item\"\n *ngFor=\"let m of minutes\"\n [class.active]=\"m === selectedMinute\"\n (click)=\"selectMinute(m)\"\n >\n {{m}}\n </div>\n </div>\n </div>\n <button\n type=\"button\"\n (click)=\"toggleAmPm()\"\n class=\"amPm\"\n >\n {{ amPm }}\n </button>\n\n \n</div>\n\n\n </div>\n\n <div class=\"calendar-body\">\n <div class=\"weekdays\">\n <span *ngFor=\"let day of weekDays\">{{ day }}</span>\n </div>\n <div class=\"dates\">\n <ng-container *ngFor=\"let day of getDaysInMonth()\">\n <button\n *ngIf=\"day; else empty\"\n [class.selected]=\"isSelected(day)\"\n [disabled]=\"isDisabled(day)\" \n [ngClass]=\"{'disabled-day': isDisabled(day)}\"\n (click)=\"selectTemporaryDate(day)\"\n >\n {{ day.getDate() }}\n </button>\n <ng-template #empty>\n <span class=\"empty-date\"></span>\n </ng-template>\n </ng-container>\n </div>\n </div>\n\n <div class=\"calendar-footer\">\n\n <button (click)=\"cancel()\">Cancel</button>\n <button (click)=\"confirm()\">OK</button>\n </div>\n </div>\n</div>\n", styles: [".date-picker{position:relative;width:100%}.calendar-container{position:relative}.icon{position:absolute;top:5px;right:10px;cursor:pointer}input{width:100%;padding:10px;font-size:13px;border:1px solid #ccc;border-radius:4px}.cursor-pointer{cursor:pointer}.cursor-not-allowed{cursor:not-allowed;color:#8080808f}.calendar{position:absolute;top:100%;left:0;width:350px;border:1px solid #ccc;background-color:#fff;z-index:10;border-radius:4px}.calendar-header{display:flex;justify-content:center;gap:5px;align-items:center;font-size:13px;padding:15px 15px 0}.weekdays,.dates{display:grid;grid-template-columns:repeat(7,1fr);text-align:center;gap:1px;padding:15px 15px 0;font-size:13px}button{border:none;background:none;cursor:pointer;padding:5px;width:40px;height:40px}button.selected{background-color:#ffe681;color:#000;border-radius:30px}.calendar-footer{display:flex;justify-content:end;gap:10px;padding:4px 15px;color:#000;font-weight:500;font-size:13px}.calendar-footer button{color:#000}.disabled-day{opacity:.4;cursor:not-allowed}.time-picker input{border:1px solid #ccc;border-radius:4px;padding:4px 6px;text-align:center;width:50px;outline:none;height:40px}.time-picker button{border:1px solid #ccc;border-radius:4px;background-color:#f3f3f3;font-size:10px;width:fit-content;height:30px;cursor:pointer}.box{border:1px solid #ccc}::ng-deep .drop-down .verben-drop-down,::ng-deep .drop-down *{font-size:13px!important}.dropdown{position:absolute;top:110%;left:0;width:60px;max-height:120px;overflow-y:auto;background:#fff;border:1px solid #ccc;border-radius:6px;box-shadow:0 2px 8px #0000001a;z-index:20}.dropdown-item{padding:6px;text-align:center;cursor:pointer}.dropdown-item:hover,.dropdown-item.active{background:#3182ce;color:#fff}\n"] }]
321
+ ], template: "<div class=\"date-picker\">\n <div class=\"calendar-container\">\n <input\n type=\"text\"\n [placeholder]=\"placeholder\"\n [value]=\"displayDate\"\n [disabled]=\"disabled\"\n (click)=\"!disabled && toggleCalendar()\"\n class=\"w-full block\"\n [style.background-color]=\"bgColor\"\n [style.border]=\"border\"\n [ngClass]=\"{\n 'cursor-not-allowed': disabled === true,\n 'cursor-pointer': disabled === false\n }\"\n readonly\n />\n <verben-svg\n (click)=\"!disabled && toggleCalendar()\"\n class=\"icon\"\n [icon]=\"'calendar'\"\n ></verben-svg>\n </div>\n\n <div\n *ngIf=\"showCalendar\"\n [appOutSideClick]=\"showCalendar\"\n (outSideClick)=\"showCalendar = false\"\n class=\"calendar\"\n [style.width]=\"datePickerWidth\"\n >\n <div class=\"calendar-header\">\n <ng-container *ngIf=\"!useDropdowns; else dropdowns\">\n <button (click)=\"previousMonth()\">\n <verben-svg [width]=\"20\" [icon]=\"'chevron-left'\"></verben-svg>\n </button>\n <span>{{ months[selectedMonth] }} {{ selectedYear }}</span>\n <button (click)=\"nextMonth()\">\n <verben-svg [width]=\"20\" [icon]=\"'chevron-right'\"></verben-svg>\n </button>\n </ng-container>\n\n <ng-template #dropdowns>\n <verben-drop-down\n [placeholder]=\"yearPlaceholder\"\n (onChange)=\"onDropdownYearChange($event)\"\n [options]=\"yearRange\"\n [(ngModel)]=\"selectedYear\"\n [width]=\"'90px'\"\n ></verben-drop-down>\n\n <verben-drop-down\n [placeholder]=\"monthPlaceholder\"\n (onChange)=\"onDropdownMonthChange($event)\"\n [options]=\"months\"\n class=\"drop-down\"\n [(ngModel)]=\"selectedMonthString\"\n [width]=\"'90px'\"\n ></verben-drop-down>\n </ng-template>\n\n \n <div class=\"time-picker flex items-center gap-2\" *ngIf=\"showTime\">\n <div class=\"relative\">\n <div\n class=\"flex items-center box rounded px-2 py-1 cursor-pointer\"\n (click)=\"toggleHourDropdown()\"\n >\n {{ selectedHour }}\n </div>\n\n <div *ngIf=\"showHourOptions\" class=\"dropdown\">\n <div\n class=\"dropdown-item\"\n *ngFor=\"let h of hours\"\n [class.active]=\"h === selectedHour\"\n (click)=\"selectHour(h)\"\n >\n {{ h }}\n </div>\n </div>\n </div>\n\n <span>:</span>\n\n <div class=\"relative\">\n <div\n class=\"flex items-center box rounded px-2 py-1 cursor-pointer\"\n (click)=\"toggleMinuteDropdown()\"\n >\n {{ selectedMinute }}\n </div>\n\n <div *ngIf=\"showMinuteOptions\" class=\"dropdown\">\n <div\n class=\"dropdown-item\"\n *ngFor=\"let m of minutes\"\n [class.active]=\"m === selectedMinute\"\n (click)=\"selectMinute(m)\"\n >\n {{ m }}\n </div>\n </div>\n </div>\n \n <div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"tooltipTemplate\"\n #tooltip>\n <verben-svg\n (click)=\"setToStartOfDay()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'sun'\"\n ></verben-svg>\n </verben-tooltip>\n <ng-template #tooltipTemplate>\n <div>\n <p class=\"text-xs\">Set start of day</p>\n </div>\n </ng-template>\n </div>\n <div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"endOfDayTooltip\"\n #endOfDayTip\n >\n <verben-svg\n (click)=\"setToEndOfDay()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'moon'\"\n ></verben-svg>\n </verben-tooltip>\n\n <ng-template #endOfDayTooltip>\n <div>\n <p class=\"text-xs\">Set end of day</p>\n </div>\n </ng-template>\n</div>\n\n </div>\n\n </div>\n\n <div class=\"calendar-body\">\n <div class=\"weekdays\">\n <span *ngFor=\"let day of weekDays\">{{ day }}</span>\n </div>\n\n <div class=\"dates\">\n <ng-container *ngFor=\"let day of getDaysInMonth()\">\n <button\n *ngIf=\"day; else empty\"\n [class.selected]=\"isSelected(day)\"\n [disabled]=\"isDisabled(day)\"\n [ngClass]=\"{ 'disabled-day': isDisabled(day) }\"\n (click)=\"selectTemporaryDate(day)\"\n >\n {{ day.getDate() }}\n </button>\n <ng-template #empty>\n <span class=\"empty-date\"></span>\n </ng-template>\n </ng-container>\n </div>\n </div>\n\n <div class=\"calendar-footer\">\n <button (click)=\"cancel()\">Cancel</button>\n <button (click)=\"confirm()\">OK</button>\n </div>\n </div>\n</div>\n", styles: [".date-picker{position:relative;width:100%}.calendar-container{position:relative}.icon{position:absolute;top:5px;right:10px;cursor:pointer}input{width:100%;padding:10px;font-size:13px;border:1px solid #ccc;border-radius:4px}.cursor-pointer{cursor:pointer}.cursor-not-allowed{cursor:not-allowed;color:#8080808f}.calendar{position:absolute;top:100%;left:0;border:1px solid #ccc;background-color:#fff;z-index:10;border-radius:4px}.calendar-header{display:flex;justify-content:center;gap:5px;align-items:center;font-size:13px;padding:15px 15px 0}.weekdays,.dates{display:grid;grid-template-columns:repeat(7,1fr);text-align:center;gap:1px;padding:15px 15px 0;font-size:13px}button{border:none;background:none;cursor:pointer;padding:5px;width:40px;height:40px}button.selected{background-color:#ffe681;color:#000;border-radius:30px}.calendar-footer{display:flex;justify-content:end;gap:10px;padding:4px 15px;color:#000;font-weight:500;font-size:13px}.calendar-footer button{color:#000}.disabled-day{opacity:.4;cursor:not-allowed}.time-picker input{border:1px solid #ccc;border-radius:4px;padding:4px 6px;text-align:center;width:50px;outline:none;height:40px}.time-picker button{border:1px solid #ccc;border-radius:4px;background-color:#f3f3f3;font-size:10px;width:fit-content;height:30px;cursor:pointer}.box{border:1px solid #ccc}::ng-deep .drop-down .verben-drop-down,::ng-deep .drop-down *{font-size:13px!important}.dropdown{position:absolute;top:110%;left:0;width:60px;max-height:120px;overflow-y:auto;background:#fff;border:1px solid #ccc;border-radius:6px;box-shadow:0 2px 8px #0000001a;z-index:20}.dropdown-item{padding:6px;text-align:center;cursor:pointer}.dropdown-item:hover,.dropdown-item.active{background:#3182ce;color:#fff}\n"] }]
334
322
  }], propDecorators: { placeholder: [{
335
323
  type: Input
336
324
  }], format: [{
@@ -357,5 +345,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImpo
357
345
  type: Input
358
346
  }], dateChange: [{
359
347
  type: Output
348
+ }], datePickerWidth: [{
349
+ type: Input
360
350
  }] } });
361
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5GLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7OztBQWN6RSxNQUFNLE9BQU8sbUJBQW1CO0lBQ3JCLFdBQVcsR0FBRyxhQUFhLENBQUM7SUFDNUIsTUFBTSxHQUFHLFlBQVksQ0FBQztJQUN0QixPQUFPLENBQVE7SUFDZixPQUFPLENBQVE7SUFDZixRQUFRLEdBQWEsS0FBSyxDQUFDO0lBQzNCLE9BQU8sR0FBWSxNQUFNLENBQUM7SUFDMUIsTUFBTSxHQUFZLEVBQUUsQ0FBQztJQUNyQixZQUFZLEdBQVksSUFBSSxDQUFDO0lBQzdCLGVBQWUsR0FBVyxlQUFlLENBQUM7SUFDMUMsZ0JBQWdCLEdBQVcsZ0JBQWdCLENBQUM7SUFDNUMsSUFBSSxHQUF5QixJQUFJLENBQUM7SUFDcEMsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUN2QixVQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztJQUVoRCxTQUFTLEdBQWEsRUFBRSxDQUFDO0lBQ3pCLGlCQUFpQixHQUFhLEVBQUUsQ0FBQztJQUNqQyxZQUFZLEdBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUNoQyxnQkFBZ0IsR0FBUyxJQUFJ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QUFFLG9CQUFvQixDQUFDOzRCQUNsRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjs4QkFHUSxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDQyxRQUFRO3NCQUFoQixLQUFLO2dCQUNNLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgZm9yd2FyZFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRHJvcGRvd25DaGFuZ2VFdmVudCB9IGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvZHJvcC1kb3duJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWRhdGUtcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGF0ZS1waWNrZXIuY29tcG9uZW50LmNzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnU2VsZWN0IGRhdGUnO1xuICBASW5wdXQoKSBmb3JtYXQgPSAnTU0vREQvWVlZWSc7XG4gIEBJbnB1dCgpIG1pbkRhdGU/OiBEYXRlO1xuICBASW5wdXQoKSBtYXhEYXRlPzogRGF0ZTtcbiAgQElucHV0KCkgZGlzYWJsZWQ/OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGJnQ29sb3I/OiBzdHJpbmcgPSAnI2ZmZic7XG4gIEBJbnB1dCgpIGJvcmRlcj86IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSB1c2VEcm9wZG93bnM6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSB5ZWFyUGxhY2Vob2xkZXI6IHN0cmluZyA9ICdTZWxlY3QgYSB5ZWFyJztcbiAgQElucHV0KCkgbW9udGhQbGFjZWhvbGRlcjogc3RyaW5nID0gJ1NlbGVjdCBhIG1vbnRoJztcbiAgQElucHV0KCkgZGF0ZTogRGF0ZSB8IG51bGwgfCBzdHJpbmcgPSBudWxsO1xuQElucHV0KCkgc2hvd1RpbWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQE91dHB1dCgpIGRhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG5cbiAgeWVhclJhbmdlOiBudW1iZXJbXSA9IFtdO1xuICBmaWx0ZXJlZFllYXJSYW5nZTogbnVtYmVyW10gPSBbXTtcbiAgc2VsZWN0ZWREYXRlOiBEYXRlID0gbmV3IERhdGUoKTtcbiAgdGVtcFNlbGVjdGVkRGF0ZTogRGF0ZSA9IG5ldyBEYXRlKCk7XG4gIHNob3dDYWxlbmRhciA9IGZhbHNlO1xuICAgIFxuICB3ZWVrRGF5cyA9IFsnTW9uJywgJ1R1ZScsICdXZWQnLCAnVGh1JywgJ0ZyaScsICdTYXQnLCAnU3VuJ107XG4gIG1vbnRocyA9IFtcbiAgICAnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsXG4gICAgJ0p1bHknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPY3RvYmVyJywgJ05vdmVtYmVyJywgJ0RlY2VtYmVyJyxcbiAgXTtcblxuICBzZWxlY3RlZE1vbnRoOiBudW1iZXIgPSAxO1xuICBzZWxlY3RlZE1vbnRoU3RyaW5nOiBzdHJpbmcgPSAnJztcbiAgc2VsZWN0ZWRZZWFyOiBudW1iZXIgPSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7XG5cbiAgcHJpdmF0ZSBvbkNoYW5nZTogYW55ID0gKCkgPT4ge307XG4gIHByaXZhdGUgb25Ub3VjaGVkOiBhbnkgPSAoKSA9PiB7fTtcblxud3JpdGVWYWx1ZSh2YWx1ZTogRGF0ZSB8IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgaWYgKHZhbHVlKSB7XG4gICAgdGhpcy5kYXRlID0gdmFsdWU7XG4gICAgY29uc3QgcGFyc2VkRGF0ZSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyBuZXcgRGF0ZSh2YWx1ZSkgOiB2YWx1ZTtcbiAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHBhcnNlZERhdGUpO1xuICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHBhcnNlZERhdGUpO1xuICAgIHRoaXMuc2VsZWN0ZWRNb250aCA9IHRoaXMuc2VsZWN0ZWREYXRlLmdldE1vbnRoKCk7XG4gICAgdGhpcy5zZWxlY3RlZFllYXIgPSB0aGlzLnNlbGVjdGVkRGF0ZS5nZXRGdWxsWWVhcigpO1xuXG4gICAgaWYgKHRoaXMuc2hvd1RpbWUpIHtcbiAgICAgIHRoaXMuaW5pdFRpbWVGcm9tRGF0ZSh0aGlzLnNlbGVjdGVkRGF0ZSk7XG4gICAgfVxuICB9XG59XG5cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCkge1xuICAgIGlmICh0aGlzLmRhdGUpIHtcbiAgICAgIGNvbnN0IHBhcnNlZERhdGUgPVxuICAgICAgICB0eXBlb2YgdGhpcy5kYXRlID09PSAnc3RyaW5nJyA/IG5ldyBEYXRlKHRoaXMuZGF0ZSkgOiB0aGlzLmRhdGU7XG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHBhcnNlZERhdGUpO1xuICAgICAgdGhpcy50ZW1wU2VsZWN0ZWREYXRlID0gbmV3IERhdGUocGFyc2VkRGF0ZSk7XG4gICAgICB0aGlzLnNlbGVjdGVkTW9udGggPSB0aGlzLnNlbGVjdGVkRGF0ZS5nZXRNb250aCgpO1xuICAgICAgdGhpcy5zZWxlY3RlZFllYXIgPSB0aGlzLnNlbGVjdGVkRGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgIH1cbiAgfVxuaXNTYW1lRGF0ZShkMTogRGF0ZSwgZDI6IERhdGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBkMS5nZXRGdWxsWWVhcigpID09PSBkMi5nZXRGdWxsWWVhcigpICYmXG4gICAgZDEuZ2V0TW9udGgoKSA9PT0gZDIuZ2V0TW9udGgoKSAmJlxuICAgIGQxLmdldERhdGUoKSA9PT0gZDIuZ2V0RGF0ZSgpXG4gICk7XG59XG5uZ09uSW5pdCgpIHtcbiAgY29uc3QgY3VycmVudFllYXIgPSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7XG4gIGNvbnN0IGVuZFllYXIgPSBjdXJyZW50WWVhciArIDEwO1xuICB0aGlzLnllYXJSYW5nZSA9IEFycmF5LmZyb20oXG4gICAgeyBsZW5ndGg6IGVuZFllYXIgLSAxOTYwICsgMSB9LFxuICAgIChfLCBpKSA9PiAxOTYwICsgaVxuICApO1xuICB0aGlzLnllYXJSYW5nZS5zb3J0KChhLCBiKSA9PiBiIC0gYSk7XG5cbiAgaWYgKCF0aGlzLmRhdGUpIHtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKG5vdyk7XG4gICAgdGhpcy5zZWxlY3RlZERhdGUgPSBuZXcgRGF0ZShub3cpO1xuICAgIHRoaXMuZGF0ZSA9IHRoaXMuc2VsZWN0ZWREYXRlO1xuXG4gICAgaWYgKHRoaXMuc2hvd1RpbWUpIHtcbiAgICAgIGNvbnN0IGhvdXJzID0gbm93LmdldEhvdXJzKCk7XG4gICAgICBjb25zdCBtaW51dGVzID0gbm93LmdldE1pbnV0ZXMoKTtcblxuICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgPSAoIXRoaXMuaXMyNEhvdXIgJiYgaG91cnMgPiAxMiA/IGhvdXJzIC0gMTIgOiBob3VycylcbiAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgLnBhZFN0YXJ0KDIsIFwiMFwiKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSBtaW51dGVzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpO1xuICAgICAgdGhpcy5hbVBtID0gIXRoaXMuaXMyNEhvdXIgJiYgaG91cnMgPj0gMTIgPyBcIlBNXCIgOiBcIkFNXCI7XG4gICAgICB0aGlzLnRlbXBUaW1lID0gYCR7dGhpcy5zZWxlY3RlZEhvdXJ9OiR7dGhpcy5zZWxlY3RlZE1pbnV0ZX1gO1xuICAgIH1cbiAgfVxufVxuXG5cbiAgZ2V0IGRpc3BsYXlEYXRlKCk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFyc2VkRGF0ZSA9XG4gICAgICB0eXBlb2YgdGhpcy5kYXRlID09PSAnc3RyaW5nJyA/IG5ldyBEYXRlKHRoaXMuZGF0ZSkgOiB0aGlzLmRhdGU7XG4gICAgcmV0dXJuIHBhcnNlZERhdGUgPyB0aGlzLmZvcm1hdERhdGUocGFyc2VkRGF0ZSwgdGhpcy5mb3JtYXQpIDogJyc7XG4gIH1cblxudGVtcFRpbWU6IHN0cmluZyA9ICcnO1xuYW1QbTogJ0FNJyB8ICdQTScgPSAnQU0nO1xuXG5cblxuc2VsZWN0ZWRIb3VyID0gXCIxMlwiO1xuc2VsZWN0ZWRNaW51dGUgPSBcIjAwXCI7XG5cblxuc2hvd0hvdXJPcHRpb25zID0gZmFsc2U7XG5zaG93TWludXRlT3B0aW9ucyA9IGZhbHNlO1xuXG5ob3VycyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDEyIH0sIChfLCBpKSA9PlxuICBTdHJpbmcoaSArIDEpLnBhZFN0YXJ0KDIsIFwiMFwiKVxuKTtcblxubWludXRlcyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDYwIH0sIChfLCBpKSA9PlxuICBTdHJpbmcoaSkucGFkU3RhcnQoMiwgXCIwXCIpXG4pO1xuXG50b2dnbGVIb3VyRHJvcGRvd24oKSB7XG4gIHRoaXMuc2hvd0hvdXJPcHRpb25zID0gIXRoaXMuc2hvd0hvdXJPcHRpb25zO1xuICB0aGlzLnNob3dNaW51dGVPcHRpb25zID0gZmFsc2U7XG59XG5cbnRvZ2dsZU1pbnV0ZURyb3Bkb3duKCkge1xuICB0aGlzLnNob3dNaW51dGVPcHRpb25zID0gIXRoaXMuc2hvd01pbnV0ZU9wdGlvbnM7XG4gIHRoaXMuc2hvd0hvdXJPcHRpb25zID0gZmFsc2U7XG59XG5cbnNlbGVjdEhvdXIoaDogc3RyaW5nKSB7XG4gIHRoaXMuc2VsZWN0ZWRIb3VyID0gaDtcbiAgdGhpcy5zaG93SG91ck9wdGlvbnMgPSBmYWxzZTtcbn1cblxuc2VsZWN0TWludXRlKG06IHN0cmluZykge1xuICB0aGlzLnNlbGVjdGVkTWludXRlID0gbTtcbiAgdGhpcy5zaG93TWludXRlT3B0aW9ucyA9IGZhbHNlO1xufVxuXG50b2dnbGVBbVBtKCkge1xuICB0aGlzLmFtUG0gPSB0aGlzLmFtUG0gPT09IFwiQU1cIiA/IFwiUE1cIiA6IFwiQU1cIjtcbn1cblxudG9nZ2xlQ2FsZW5kYXIoKSB7XG4gIHRoaXMuc2hvd0NhbGVuZGFyID0gIXRoaXMuc2hvd0NhbGVuZGFyO1xuXG4gIHRoaXMudGVtcFNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHRoaXMuZGF0ZSB8fCBuZXcgRGF0ZSgpKTtcbiAgdGhpcy5zZWxlY3RlZE1vbnRoID0gdGhpcy50ZW1wU2VsZWN0ZWREYXRlLmdldE1vbnRoKCk7XG4gIHRoaXMuc2VsZWN0ZWRNb250aFN0cmluZyA9IHRoaXMubW9udGhzW3RoaXMuc2VsZWN0ZWRNb250aF07XG4gIHRoaXMuc2VsZWN0ZWRZZWFyID0gdGhpcy50ZW1wU2VsZWN0ZWREYXRlLmdldEZ1bGxZZWFyKCk7XG5cbiAgaWYgKHRoaXMuc2hvd1RpbWUgJiYgIXRoaXMudGVtcFRpbWUpIHtcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgaXNUb2RheSA9IHRoaXMuaXNTYW1lRGF0ZSh0aGlzLnRlbXBTZWxlY3RlZERhdGUsIHRvZGF5KTtcblxuICAgIGNvbnN0IGhvdXJzID0gaXNUb2RheSA/IHRvZGF5LmdldEhvdXJzKCkgOiAwO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBpc1RvZGF5ID8gdG9kYXkuZ2V0TWludXRlcygpIDogMDtcblxuICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZS5zZXRIb3Vycyhob3VycywgbWludXRlcywgMCwgMCk7XG5cbiAgICB0aGlzLnNlbGVjdGVkSG91ciA9ICghdGhpcy5pczI0SG91ciAmJiBob3VycyA+IDEyID8gaG91cnMgLSAxMiA6IGhvdXJzKVxuICAgICAgLnRvU3RyaW5nKClcbiAgICAgIC5wYWRTdGFydCgyLCBcIjBcIik7XG4gICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IG1pbnV0ZXMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIik7XG4gICAgdGhpcy5hbVBtID0gIXRoaXMuaXMyNEhvdXIgJiYgaG91cnMgPj0gMTIgPyBcIlBNXCIgOiBcIkFNXCI7XG5cbiAgICB0aGlzLnRlbXBUaW1lID0gYCR7dGhpcy5zZWxlY3RlZEhvdXJ9OiR7dGhpcy5zZWxlY3RlZE1pbnV0ZX1gO1xuICB9XG59XG5cblxuIGluaXRUaW1lRnJvbURhdGUoZGF0ZTogRGF0ZSkge1xuICBjb25zdCBob3VycyA9IGRhdGUuZ2V0SG91cnMoKTtcbiAgY29uc3QgbWludXRlcyA9IGRhdGUuZ2V0TWludXRlcygpO1xuXG4gIHRoaXMuc2VsZWN0ZWRIb3VyID0gKCF0aGlzLmlzMjRIb3VyICYmIGhvdXJzID4gMTIgPyBob3VycyAtIDEyIDogaG91cnMpXG4gICAgLnRvU3RyaW5nKClcbiAgICAucGFkU3RhcnQoMiwgXCIwXCIpO1xuICB0aGlzLnNlbGVjdGVkTWludXRlID0gbWludXRlcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKTtcbiAgdGhpcy5hbVBtID0gIXRoaXMuaXMyNEhvdXIgJiYgaG91cnMgPj0gMTIgPyBcIlBNXCIgOiBcIkFNXCI7XG5cbiAgdGhpcy50ZW1wVGltZSA9IGAke3RoaXMuc2VsZWN0ZWRIb3VyfToke3RoaXMuc2VsZWN0ZWRNaW51dGV9YDtcbiAgdGhpcy50ZW1wU2VsZWN0ZWREYXRlLnNldEhvdXJzKGhvdXJzLCBtaW51dGVzLCAwLCAwKTtcbn1cbmZpeFRvVVRDKGRhdGVWYWx1ZTogYW55KSB7XG4gIGlmICghZGF0ZVZhbHVlKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBkYXRlID0gZGF0ZVZhbHVlIGluc3RhbmNlb2YgRGF0ZSA/IGRhdGVWYWx1ZSA6IG5ldyBEYXRlKGRhdGVWYWx1ZSk7XG4gIGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHJldHVybiBudWxsO1xuXG4gIHJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhcbiAgICBkYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgZGF0ZS5nZXRNb250aCgpLFxuICAgIGRhdGUuZ2V0RGF0ZSgpLFxuICAgIGRhdGUuZ2V0SG91cnMoKSxcbiAgICBkYXRlLmdldE1pbnV0ZXMoKSxcbiAgICBkYXRlLmdldFNlY29uZHMoKSxcbiAgICBkYXRlLmdldE1pbGxpc2Vjb25kcygpXG4gICkpO1xufVxuXG5jb25maXJtKCkge1xuICBpZiAodGhpcy5pc0Rpc2FibGVkKHRoaXMudGVtcFNlbGVjdGVkRGF0ZSkpIHJldHVybjtcblxuICBsZXQgaG91cnM6IG51bWJlcjtcbiAgbGV0IG1pbnV0ZXM6IG51bWJlcjtcblxuIFxuICBpZiAodGhpcy5zaG93VGltZSkge1xuICAgIGhvdXJzID0gTnVtYmVyKHRoaXMuc2VsZWN0ZWRIb3VyKTtcbiAgICBtaW51dGVzID0gTnVtYmVyKHRoaXMuc2VsZWN0ZWRNaW51dGUpO1xuXG4gICAgaWYgKCF0aGlzLmlzMjRIb3VyKSB7XG4gICAgICBpZiAodGhpcy5hbVBtID09PSBcIlBNXCIgJiYgaG91cnMgPCAxMikgaG91cnMgKz0gMTI7XG4gICAgICBpZiAodGhpcy5hbVBtID09PSBcIkFNXCIgJiYgaG91cnMgPT09IDEyKSBob3VycyA9IDA7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGhvdXJzID0gMDtcbiAgICBtaW51dGVzID0gMDtcbiAgfVxuXG5cbiAgdGhpcy50ZW1wU2VsZWN0ZWREYXRlLnNldEhvdXJzKGhvdXJzLCBtaW51dGVzLCAwLCAwKTtcblxuICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHRoaXMudGVtcFNlbGVjdGVkRGF0ZSk7XG4gIHRoaXMuZGF0ZSA9IHRoaXMuc2VsZWN0ZWREYXRlO1xuXG5cbiAgY29uc3QgcGFkID0gKG46IG51bWJlcikgPT4gbi50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gIGNvbnN0IGxvY2FsRGF0ZVN0cmluZyA9IGAke3RoaXMuc2VsZWN0ZWREYXRlLmdldEZ1bGxZZWFyKCl9LSR7cGFkKHRoaXMuc2VsZWN0ZWREYXRlLmdldE1vbnRoKCkgKyAxKX0tJHtwYWQodGhpcy5zZWxlY3RlZERhdGUuZ2V0RGF0ZSgpKX1UJHtwYWQodGhpcy5zZWxlY3RlZERhdGUuZ2V0SG91cnMoKSl9OiR7cGFkKHRoaXMuc2VsZWN0ZWREYXRlLmdldE1pbnV0ZXMoKSl9OiR7cGFkKHRoaXMuc2VsZWN0ZWREYXRlLmdldFNlY29uZHMoKSl9YDtcblxuIGNvbnNvbGUubG9nKGxvY2FsRGF0ZVN0cmluZyk7XG4gXG4gIHRoaXMuZGF0ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgdGhpcy5vbkNoYW5nZShsb2NhbERhdGVTdHJpbmcpOyBcbiAgdGhpcy5vblRvdWNoZWQoKTtcblxuICB0aGlzLnNob3dDYWxlbmRhciA9IGZhbHNlO1xufVxuXG5cblxuc2V0VG9TdGFydE9mRGF5KCkge1xuXG4gIHRoaXMuc2VsZWN0ZWRIb3VyID0gdGhpcy5pczI0SG91ciA/ICcwMCcgOiAnMTInO1xuICB0aGlzLnNlbGVjdGVkTWludXRlID0gJzAwJztcbiAgdGhpcy5hbVBtID0gJ0FNJztcblxuXG4gIHRoaXMudGVtcFNlbGVjdGVkRGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgdGhpcy50ZW1wVGltZSA9IGAke3RoaXMuc2VsZWN0ZWRIb3VyfToke3RoaXMuc2VsZWN0ZWRNaW51dGV9YDtcblxuICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHRoaXMudGVtcFNlbGVjdGVkRGF0ZSk7XG59XG5cblxuXG4gIHByZXZpb3VzTW9udGgoKSB7XG4gICAgdGhpcy5zZWxlY3RlZE1vbnRoLS07XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRNb250aCA8IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRNb250aCA9IDExO1xuICAgICAgdGhpcy5zZWxlY3RlZFllYXItLTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVUZW1wU2VsZWN0ZWREYXRlKCk7XG4gIH1cblxuICBuZXh0TW9udGgoKSB7XG4gICAgdGhpcy5zZWxlY3RlZE1vbnRoKys7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRNb250aCA+IDExKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkTW9udGggPSAwO1xuICAgICAgdGhpcy5zZWxlY3RlZFllYXIrKztcbiAgICB9XG4gICAgdGhpcy51cGRhdGVUZW1wU2VsZWN0ZWREYXRlKCk7XG4gIH1cblxuICBvbkRyb3Bkb3duWWVhckNoYW5nZShldmVudDogRHJvcGRvd25DaGFuZ2VFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRZZWFyID0gZXZlbnQudmFsdWU7XG4gICAgdGhpcy51cGRhdGVUZW1wU2VsZWN0ZWREYXRlKCk7XG4gIH1cblxuICBvbkRyb3Bkb3duTW9udGhDaGFuZ2UoZXZlbnQ6IERyb3Bkb3duQ2hhbmdlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkTW9udGggPSB0aGlzLm1vbnRocy5pbmRleE9mKGV2ZW50LnZhbHVlKTtcbiAgICB0aGlzLnVwZGF0ZVRlbXBTZWxlY3RlZERhdGUoKTtcbiAgfVxuXG4gIHVwZGF0ZVRlbXBTZWxlY3RlZERhdGUoKSB7XG4gICAgdGhpcy50ZW1wU2VsZWN0ZWREYXRlLnNldE1vbnRoKHRoaXMuc2VsZWN0ZWRNb250aCk7XG4gICAgdGhpcy50ZW1wU2VsZWN0ZWREYXRlLnNldEZ1bGxZZWFyKHRoaXMuc2VsZWN0ZWRZZWFyKTtcbiAgfVxuXG4gIGdldERheXNJbk1vbnRoKCk6IChEYXRlIHwgbnVsbClbXSB7XG4gICAgY29uc3QgZGF5czogKERhdGUgfCBudWxsKVtdID0gW107XG4gICAgY29uc3QgeWVhciA9IHRoaXMuc2VsZWN0ZWRZZWFyO1xuICAgIGNvbnN0IG1vbnRoID0gdGhpcy5zZWxlY3RlZE1vbnRoO1xuXG4gICAgY29uc3QgZmlyc3REYXlPZk1vbnRoID0gbmV3IERhdGUoeWVhciwgbW9udGgsIDEpLmdldERheSgpO1xuICAgIGNvbnN0IG9mZnNldCA9IGZpcnN0RGF5T2ZNb250aCA9PT0gMCA/IDYgOiBmaXJzdERheU9mTW9udGggLSAxO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvZmZzZXQ7IGkrKykge1xuICAgICAgZGF5cy5wdXNoKG51bGwpO1xuICAgIH1cblxuICAgIGNvbnN0IHRvdGFsRGF5cyA9IG5ldyBEYXRlKHllYXIsIG1vbnRoICsgMSwgMCkuZ2V0RGF0ZSgpO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHRvdGFsRGF5czsgaSsrKSB7XG4gICAgICBjb25zdCBkYXkgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgaSk7XG4gICAgICBkYXlzLnB1c2goZGF5KTtcbiAgICB9XG4gICAgcmV0dXJuIGRheXM7XG4gIH1cblxuaXNEaXNhYmxlZChkYXk6IERhdGUgfCBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgZGF5RGF0ZSA9IHRoaXMudG9EYXRlKGRheSk7XG5cbiAgaWYgKHRoaXMubWluRGF0ZSAmJiBkYXlEYXRlIDwgdGhpcy5zdHJpcFRpbWUodGhpcy50b0RhdGUodGhpcy5taW5EYXRlKSkpIHJldHVybiB0cnVlO1xuICBpZiAodGhpcy5tYXhEYXRlICYmIGRheURhdGUgPiB0aGlzLnN0cmlwVGltZSh0aGlzLnRvRGF0ZSh0aGlzLm1heERhdGUpKSkgcmV0dXJuIHRydWU7XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5wcml2YXRlIHN0cmlwVGltZShkYXRlOiBEYXRlIHwgc3RyaW5nKTogRGF0ZSB7XG4gIGNvbnN0IGQgPSB0aGlzLnRvRGF0ZShkYXRlKTtcbiAgcmV0dXJuIG5ldyBEYXRlKGQuZ2V0RnVsbFllYXIoKSwgZC5nZXRNb250aCgpLCBkLmdldERhdGUoKSk7XG59XG5cbnByaXZhdGUgdG9EYXRlKHZhbHVlOiBEYXRlIHwgc3RyaW5nKTogRGF0ZSB7XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHJldHVybiB2YWx1ZTtcbiAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKTtcbn1cbiBpczI0SG91cjogYm9vbGVhbiA9IGZhbHNlO1xuc2VsZWN0VGVtcG9yYXJ5RGF0ZShkYXk6IERhdGUpIHtcbiAgaWYgKHRoaXMuaXNEaXNhYmxlZChkYXkpKSByZXR1cm47XG5cbiAgY29uc3QgaXNOZXdEYXRlID0gIXRoaXMuaXNTYW1lRGF0ZSh0aGlzLnRlbXBTZWxlY3RlZERhdGUsIGRheSk7XG4gIHRoaXMudGVtcFNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKGRheSk7XG5cbiAgaWYgKHRoaXMuc2hvd1RpbWUpIHtcbiAgICBpZiAoaXNOZXdEYXRlKSB7XG5cbiAgICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgICAgIGNvbnN0IGlzVG9kYXkgPVxuICAgICAgICBkYXkuZ2V0RnVsbFllYXIoKSA9PT0gdG9kYXkuZ2V0RnVsbFllYXIoKSAmJlxuICAgICAgICBkYXkuZ2V0TW9udGgoKSA9PT0gdG9kYXkuZ2V0TW9udGgoKSAmJlxuICAgICAgICBkYXkuZ2V0RGF0ZSgpID09PSB0b2RheS5nZXREYXRlKCk7XG5cbiAgICAgIGNvbnN0IGhvdXJzID0gaXNUb2RheSA/IHRvZGF5LmdldEhvdXJzKCkgOiAwO1xuICAgICAgY29uc3QgbWludXRlcyA9IGlzVG9kYXkgPyB0b2RheS5nZXRNaW51dGVzKCkgOiAwO1xuXG4gICAgICB0aGlzLnRlbXBTZWxlY3RlZERhdGUuc2V0SG91cnMoaG91cnMsIG1pbnV0ZXMsIDAsIDApO1xuXG4gICAgICB0aGlzLnNlbGVjdGVkSG91ciA9ICghdGhpcy5pczI0SG91ciAmJiBob3VycyA+IDEyID8gaG91cnMgLSAxMiA6IGhvdXJzKVxuICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAucGFkU3RhcnQoMiwgXCIwXCIpO1xuICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IG1pbnV0ZXMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIik7XG4gICAgICB0aGlzLmFtUG0gPSAhdGhpcy5pczI0SG91ciAmJiBob3VycyA+PSAxMiA/IFwiUE1cIiA6IFwiQU1cIjtcblxuICAgICAgdGhpcy50ZW1wVGltZSA9IGAke3RoaXMuc2VsZWN0ZWRIb3VyfToke3RoaXMuc2VsZWN0ZWRNaW51dGV9YDtcbiAgICB9IGVsc2Uge1xuIFxuICAgICAgY29uc3QgW2gsIG1dID0gdGhpcy50ZW1wVGltZS5zcGxpdCgnOicpO1xuICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgPSBoO1xuICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IG07XG4gICAgICBpZiAoIXRoaXMuaXMyNEhvdXIpIHRoaXMuYW1QbSA9IE51bWJlcihoKSA+PSAxMiA/ICdQTScgOiAnQU0nO1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cbiAgaXNTZWxlY3RlZChkYXk6IERhdGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgZGF5LmdldERhdGUoKSA9PT0gdGhpcy50ZW1wU2VsZWN0ZWREYXRlLmdldERhdGUoKSAmJlxuICAgICAgZGF5LmdldE1vbnRoKCkgPT09IHRoaXMudGVtcFNlbGVjdGVkRGF0ZS5nZXRNb250aCgpICYmXG4gICAgICBkYXkuZ2V0RnVsbFllYXIoKSA9PT0gdGhpcy50ZW1wU2VsZWN0ZWREYXRlLmdldEZ1bGxZZWFyKClcbiAgICApO1xuICB9XG5cbiAgZm9ybWF0RGF0ZShkYXRlOiBEYXRlLCBmb3JtYXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgZGF5ID0gZGF0ZS5nZXREYXRlKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIGNvbnN0IG1vbnRoID0gKGRhdGUuZ2V0TW9udGgoKSArIDEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuXG4gICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgIGNhc2UgJ0REL01NL1lZWVknOlxuICAgICAgICByZXR1cm4gYCR7ZGF5fS8ke21vbnRofS8ke3llYXJ9YDtcbiAgICAgIGNhc2UgJ01NL0REL1lZWVknOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGAke21vbnRofS8ke2RheX0vJHt5ZWFyfWA7XG4gICAgfVxuICB9XG5cblxuXG4gIGNhbmNlbCgpIHtcbiAgICB0aGlzLnNob3dDYWxlbmRhciA9IGZhbHNlO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXJcIj5cbjxkaXYgY2xhc3M9XCJjYWxlbmRhci1jb250YWluZXJcIj5cbiAgICA8aW5wdXRcbiAgICB0eXBlPVwidGV4dFwiXG4gICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICBbdmFsdWVdPVwiZGlzcGxheURhdGVcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgKGNsaWNrKT1cIiFkaXNhYmxlZCAmJiB0b2dnbGVDYWxlbmRhcigpXCJcbiAgICBjbGFzcz1cInctZnVsbCBibG9ja1wiXG4gICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiYmdDb2xvclwiXG4gICAgW3N0eWxlLmJvcmRlcl09XCJib3JkZXJcIlxuICAgIFxuICAgIFtuZ0NsYXNzXT1cInsnY3Vyc29yLW5vdC1hbGxvd2VkJzpkaXNhYmxlZD09PXRydWUsICdjdXJzb3ItcG9pbnRlcic6ZGlzYWJsZWQ9PT1mYWxzZX1cIlxuICAgIHJlYWRvbmx5XG4gIC8+IFxuPHZlcmJlbi1zdmcgICAgIChjbGljayk9XCIhZGlzYWJsZWQgJiYgdG9nZ2xlQ2FsZW5kYXIoKVwiIGNsYXNzPVwiaWNvblwiIFtpY29uXT1cIidjYWxlbmRhcidcIj48L3ZlcmJlbi1zdmc+XG48L2Rpdj5cblxuICA8ZGl2ICpuZ0lmPVwic2hvd0NhbGVuZGFyXCIgW2FwcE91dFNpZGVDbGlja109XCJzaG93Q2FsZW5kYXJcIiAob3V0U2lkZUNsaWNrKT1cInNob3dDYWxlbmRhcj1mYWxzZVwiIGNsYXNzPVwiY2FsZW5kYXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FsZW5kYXItaGVhZGVyXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXVzZURyb3Bkb3duczsgZWxzZSBkcm9wZG93bnNcIj5cbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicHJldmlvdXNNb250aCgpXCI+XG4gICAgICAgICAgPHZlcmJlbi1zdmcgW3dpZHRoXT1cIjIwXCIgW2ljb25dPVwiJ2NoZXZyb24tbGVmdCdcIj48L3ZlcmJlbi1zdmc+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8c3Bhbj57eyBtb250aHNbc2VsZWN0ZWRNb250aF0gfX0ge3sgc2VsZWN0ZWRZZWFyIH19PC9zcGFuPlxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJuZXh0TW9udGgoKVwiPlxuICAgICAgICAgIDx2ZXJiZW4tc3ZnIFt3aWR0aF09XCIyMFwiIFtpY29uXT1cIidjaGV2cm9uLXJpZ2h0J1wiPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLXRlbXBsYXRlICNkcm9wZG93bnM+XG4gICAgICAgIDx2ZXJiZW4tZHJvcC1kb3duXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInllYXJQbGFjZWhvbGRlclwiXG4gICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uRHJvcGRvd25ZZWFyQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgIFtvcHRpb25zXT1cInllYXJSYW5nZVwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFllYXJcIlxuICAgICAgICAgIFt3aWR0aF09XCInOTBweCdcIlxuICAgICAgICA+PC92ZXJiZW4tZHJvcC1kb3duPlxuXG4gICAgICAgIDx2ZXJiZW4tZHJvcC1kb3duXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIm1vbnRoUGxhY2Vob2xkZXJcIlxuICAgICAgICAgIChvbkNoYW5nZSk9XCJvbkRyb3Bkb3duTW9udGhDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgW29wdGlvbnNdPVwibW9udGhzXCJcbiAgICAgICAgICBjbGFzcz1cImRyb3AtZG93blwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZE1vbnRoU3RyaW5nXCJcbiAgICAgICAgICAgIFt3aWR0aF09XCInOTBweCdcIlxuICAgICAgICA+PC92ZXJiZW4tZHJvcC1kb3duPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDx2ZXJiZW4tc3ZnICAgKGNsaWNrKT1cInNldFRvU3RhcnRPZkRheSgpXCIgY2xhc3M9XCIgY3Vyc29yLXBvaW50ZXJcIiBbd2lkdGhdPVwiMTRcIiBbaGVpZ2h0XT1cIjE0XCIgW2ljb25dPVwiJ2Nsb2NrJ1wiPjwvdmVyYmVuLXN2Zz5cbjxkaXYgY2xhc3M9XCJ0aW1lLXBpY2tlciBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiICpuZ0lmPVwic2hvd1RpbWVcIj5cbiAgPGRpdiBjbGFzcz1cInJlbGF0aXZlXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGJveCByb3VuZGVkIHB4LTIgcHktMSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAoY2xpY2spPVwidG9nZ2xlSG91ckRyb3Bkb3duKClcIj5cbiAgICAgIHt7IHNlbGVjdGVkSG91ciB9fVxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiAqbmdJZj1cInNob3dIb3VyT3B0aW9uc1wiIGNsYXNzPVwiZHJvcGRvd25cIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCJcbiAgICAgICAgKm5nRm9yPVwibGV0IGggb2YgaG91cnNcIlxuICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImggPT09IHNlbGVjdGVkSG91clwiXG4gICAgICAgIChjbGljayk9XCJzZWxlY3RIb3VyKGgpXCJcbiAgICAgID5cbiAgICAgICAge3sgaCB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxzcGFuPjo8L3NwYW4+XG5cbiAgPGRpdiBjbGFzcz1cInJlbGF0aXZlXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGJveCByb3VuZGVkIHB4LTIgcHktMSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAoY2xpY2spPVwidG9nZ2xlTWludXRlRHJvcGRvd24oKVwiPlxuICAgICAge3sgc2VsZWN0ZWRNaW51dGUgfX1cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCJzaG93TWludXRlT3B0aW9uc1wiIGNsYXNzPVwiZHJvcGRvd25cIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCJcbiAgICAgICAgKm5nRm9yPVwibGV0IG0gb2YgbWludXRlc1wiXG4gICAgICAgIFtjbGFzcy5hY3RpdmVdPVwibSA9PT0gc2VsZWN0ZWRNaW51dGVcIlxuICAgICAgICAoY2xpY2spPVwic2VsZWN0TWludXRlKG0pXCJcbiAgICAgID5cbiAgICAgIHt7bX19XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gICA8YnV0dG9uXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgKGNsaWNrKT1cInRvZ2dsZUFtUG0oKVwiXG4gICAgY2xhc3M9XCJhbVBtXCJcbiAgPlxuICAgIHt7IGFtUG0gfX1cbiAgPC9idXR0b24+XG5cbiBcbjwvZGl2PlxuXG5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJjYWxlbmRhci1ib2R5XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwid2Vla2RheXNcIj5cbiAgICAgICAgPHNwYW4gICpuZ0Zvcj1cImxldCBkYXkgb2Ygd2Vla0RheXNcIj57eyBkYXkgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRlc1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkYXkgb2YgZ2V0RGF5c0luTW9udGgoKVwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiZGF5OyBlbHNlIGVtcHR5XCJcbiAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJpc1NlbGVjdGVkKGRheSlcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWQoZGF5KVwiICBcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQtZGF5JzogaXNEaXNhYmxlZChkYXkpfVwiXG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0VGVtcG9yYXJ5RGF0ZShkYXkpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBkYXkuZ2V0RGF0ZSgpIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNlbXB0eT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZW1wdHktZGF0ZVwiPjwvc3Bhbj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNhbGVuZGFyLWZvb3RlclwiPlxuXG4gICAgICA8YnV0dG9uIChjbGljayk9XCJjYW5jZWwoKVwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY29uZmlybSgpXCI+T0s8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
351
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5GLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7QUFjekUsTUFBTSxPQUFPLG1CQUFtQjtJQUNyQixXQUFXLEdBQUcsYUFBYSxDQUFDO0lBQzVCLE1BQU0sR0FBRyxZQUFZLENBQUM7SUFDdEIsT0FBTyxDQUFRO0lBQ2YsT0FBTyxDQUFRO0lBQ2YsUUFBUSxHQUFhLEtBQUssQ0FBQztJQUMzQixPQUFPLEdBQVksTUFBTSxDQUFDO0lBQzFCLE1BQU0sR0FBWSxFQUFFLENBQUM7SUFDckIsWUFBWSxHQUFZLElBQUksQ0FBQztJQUM3QixlQUFlLEdBQVcsZUFBZSxDQUFDO0lBQzFDLGdCQUFnQixHQUFXLGdCQUFnQixDQUFDO0lBQzVDLElBQUksR0FBeUIsSUFBSSxDQUFDO0lBQ2xDLFFBQVEsR0FBWSxLQUFLLENBQUM7SUFDekIsVUFBVSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFFaEQsU0FBUyxHQUFhLEVBQUUsQ0FBQztJQUN6QixpQkFBaUIsR0FBYSxFQUFFLENBQUM7SUFDakMsWUFBWSxHQUFTLElBQUksSUFBSSxFQUFFLENBQUM7SUFDaEMsZ0JBQWdCLEdBQVMsSUFB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LElBQUksRUFBRSxDQUFDO1lBQ25DLEtBQUssWUFBWSxDQUFDO1lBQ2xCO2dCQUNFLE9BQU8sR0FBRyxLQUFLLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3JDLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQzVCLENBQUM7d0dBNVlVLG1CQUFtQjs0RkFBbkIsbUJBQW1CLCtaQVJuQjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUM7Z0JBQ2xELEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRiwrQ0NkSCxpdktBMkxBOzs0RkQzS2EsbUJBQW1CO2tCQVovQixTQUFTOytCQUNFLGlCQUFpQixhQUdoQjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxvQkFBb0IsQ0FBQzs0QkFDbEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7OEJBR1EsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDSSxVQUFVO3NCQUFuQixNQUFNO2dCQU9DLGVBQWU7c0JBQXZCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgZm9yd2FyZFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRHJvcGRvd25DaGFuZ2VFdmVudCB9IGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvZHJvcC1kb3duJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWRhdGUtcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGF0ZS1waWNrZXIuY29tcG9uZW50LmNzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnU2VsZWN0IGRhdGUnO1xuICBASW5wdXQoKSBmb3JtYXQgPSAnTU0vREQvWVlZWSc7XG4gIEBJbnB1dCgpIG1pbkRhdGU/OiBEYXRlO1xuICBASW5wdXQoKSBtYXhEYXRlPzogRGF0ZTtcbiAgQElucHV0KCkgZGlzYWJsZWQ/OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGJnQ29sb3I/OiBzdHJpbmcgPSAnI2ZmZic7XG4gIEBJbnB1dCgpIGJvcmRlcj86IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSB1c2VEcm9wZG93bnM6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSB5ZWFyUGxhY2Vob2xkZXI6IHN0cmluZyA9ICdTZWxlY3QgYSB5ZWFyJztcbiAgQElucHV0KCkgbW9udGhQbGFjZWhvbGRlcjogc3RyaW5nID0gJ1NlbGVjdCBhIG1vbnRoJztcbiAgQElucHV0KCkgZGF0ZTogRGF0ZSB8IG51bGwgfCBzdHJpbmcgPSBudWxsO1xuICBASW5wdXQoKSBzaG93VGltZTogYm9vbGVhbiA9IGZhbHNlO1xuICBAT3V0cHV0KCkgZGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcblxuICB5ZWFyUmFuZ2U6IG51bWJlcltdID0gW107XG4gIGZpbHRlcmVkWWVhclJhbmdlOiBudW1iZXJbXSA9IFtdO1xuICBzZWxlY3RlZERhdGU6IERhdGUgPSBuZXcgRGF0ZSgpO1xuICB0ZW1wU2VsZWN0ZWREYXRlOiBEYXRlID0gbmV3IERhdGUoKTtcbiAgc2hvd0NhbGVuZGFyID0gZmFsc2U7XG4gQElucHV0KCkgZGF0ZVBpY2tlcldpZHRoOnN0cmluZz0nNDAwcHgnXG4gIHdlZWtEYXlzID0gWydNb24nLCAnVHVlJywgJ1dlZCcsICdUaHUnLCAnRnJpJywgJ1NhdCcsICdTdW4nXTtcbiAgbW9udGhzID0gW1xuICAgICdKYW51YXJ5JywgJ0ZlYnJ1YXJ5JywgJ01hcmNoJywgJ0FwcmlsJywgJ01heScsICdKdW5lJyxcbiAgICAnSnVseScsICdBdWd1c3QnLCAnU2VwdGVtYmVyJywgJ09jdG9iZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInLFxuICBdO1xuXG4gIHNlbGVjdGVkTW9udGg6IG51bWJlciA9IDE7XG4gIHNlbGVjdGVkTW9udGhTdHJpbmc6IHN0cmluZyA9ICcnO1xuICBzZWxlY3RlZFllYXI6IG51bWJlciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcblxuICBwcml2YXRlIG9uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7fTtcbiAgcHJpdmF0ZSBvblRvdWNoZWQ6IGFueSA9ICgpID0+IHt9O1xud3JpdGVWYWx1ZSh2YWx1ZTogRGF0ZSB8IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgaWYgKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHZhbHVlID0gdGhpcy5zYW5pdGl6ZURhdGVTdHJpbmcodmFsdWUpO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZERhdGUgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gbmV3IERhdGUodmFsdWUpIDogdmFsdWU7XG4gICAgdGhpcy5kYXRlID0gcGFyc2VkRGF0ZTtcblxuICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbmV3IERhdGUocGFyc2VkRGF0ZSk7XG4gICAgdGhpcy50ZW1wU2VsZWN0ZWREYXRlID0gbmV3IERhdGUocGFyc2VkRGF0ZSk7XG4gICAgdGhpcy5zZWxlY3RlZE1vbnRoID0gdGhpcy5zZWxlY3RlZERhdGUuZ2V0TW9udGgoKTtcbiAgICB0aGlzLnNlbGVjdGVkWWVhciA9IHRoaXMuc2VsZWN0ZWREYXRlLmdldEZ1bGxZZWFyKCk7XG5cbiAgICBpZiAodGhpcy5zaG93VGltZSkge1xuICAgICAgdGhpcy5pbml0VGltZUZyb21EYXRlKHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICB9XG4gIH1cbn1cblxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbm5nT25DaGFuZ2VzKCkge1xuICBpZiAodGhpcy5kYXRlKSB7XG4gICAgbGV0IGQgPSB0aGlzLmRhdGU7XG4gICAgaWYgKHR5cGVvZiBkID09PSAnc3RyaW5nJykgZCA9IHRoaXMuc2FuaXRpemVEYXRlU3RyaW5nKGQpO1xuXG4gICAgY29uc3QgcGFyc2VkRGF0ZSA9IG5ldyBEYXRlKGQpO1xuICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbmV3IERhdGUocGFyc2VkRGF0ZSk7XG4gICAgdGhpcy50ZW1wU2VsZWN0ZWREYXRlID0gbmV3IERhdGUocGFyc2VkRGF0ZSk7XG4gICAgdGhpcy5zZWxlY3RlZE1vbnRoID0gdGhpcy5zZWxlY3RlZERhdGUuZ2V0TW9udGgoKTtcbiAgICB0aGlzLnNlbGVjdGVkWWVhciA9IHRoaXMuc2VsZWN0ZWREYXRlLmdldEZ1bGxZZWFyKCk7XG4gIFxuICAgIFxuICB9XG59XG5cblxuICBpc1NhbWVEYXRlKGQxOiBEYXRlLCBkMjogRGF0ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBkMS5nZXRGdWxsWWVhcigpID09PSBkMi5nZXRGdWxsWWVhcigpICYmXG4gICAgICBkMS5nZXRNb250aCgpID09PSBkMi5nZXRNb250aCgpICYmXG4gICAgICBkMS5nZXREYXRlKCkgPT09IGQyLmdldERhdGUoKVxuICAgICk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBjdXJyZW50WWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcbiAgICBjb25zdCBlbmRZZWFyID0gY3VycmVudFllYXIgKyAxMDtcbiAgICB0aGlzLnllYXJSYW5nZSA9IEFycmF5LmZyb20oXG4gICAgICB7IGxlbmd0aDogZW5kWWVhciAtIDE5NjAgKyAxIH0sXG4gICAgICAoXywgaSkgPT4gMTk2MCArIGlcbiAgICApO1xuICAgIHRoaXMueWVhclJhbmdlLnNvcnQoKGEsIGIpID0+IGIgLSBhKTtcblxuICAgIGlmICghdGhpcy5kYXRlKSB7XG4gICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgICAgY29uc3QgcGFkID0gKG46IG51bWJlcikgPT4gbi50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG5cbiAgICAgIGNvbnN0IGxvY2FsRGF0ZVN0cmluZyA9IGAke25vdy5nZXRGdWxsWWVhcigpfS0ke3BhZChcbiAgICAgICAgbm93LmdldE1vbnRoKCkgKyAxXG4gICAgICApfS0ke3BhZChub3cuZ2V0RGF0ZSgpKX1UJHtwYWQobm93LmdldEhvdXJzKCkpfToke3BhZChcbiAgICAgICAgbm93LmdldE1pbnV0ZXMoKVxuICAgICAgKX06JHtwYWQobm93LmdldFNlY29uZHMoKSl9YDtcblxuICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBuZXcgRGF0ZShsb2NhbERhdGVTdHJpbmcpO1xuICAgICAgdGhpcy50ZW1wU2VsZWN0ZWREYXRlID0gbmV3IERhdGUobG9jYWxEYXRlU3RyaW5nKTtcbiAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuc2VsZWN0ZWREYXRlO1xuXG4gICAgICBpZiAodGhpcy5zaG93VGltZSkge1xuICAgICAgICBjb25zdCBob3VycyA9IG5vdy5nZXRIb3VycygpO1xuICAgICAgICBjb25zdCBtaW51dGVzID0gbm93LmdldE1pbnV0ZXMoKTtcblxuICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IGhvdXJzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IG1pbnV0ZXMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgICB0aGlzLnRlbXBUaW1lID0gYCR7dGhpcy5zZWxlY3RlZEhvdXJ9OiR7dGhpcy5zZWxlY3RlZE1pbnV0ZX1gO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRhdGVDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkRGF0ZSk7XG4gICAgICB0aGlzLm9uQ2hhbmdlKGxvY2FsRGF0ZVN0cmluZyk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGRpc3BsYXlEYXRlKCk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFyc2VkRGF0ZSA9XG4gICAgICB0eXBlb2YgdGhpcy5kYXRlID09PSAnc3RyaW5nJyA/IG5ldyBEYXRlKHRoaXMuZGF0ZSkgOiB0aGlzLmRhdGU7XG4gICAgcmV0dXJuIHBhcnNlZERhdGUgPyB0aGlzLmZvcm1hdERhdGUocGFyc2VkRGF0ZSwgdGhpcy5mb3JtYXQpIDogJyc7XG4gIH1cblxuICB0ZW1wVGltZTogc3RyaW5nID0gJyc7XG4gIHNlbGVjdGVkSG91ciA9ICcwMCc7XG4gIHNlbGVjdGVkTWludXRlID0gJzAwJztcblxuICBzaG93SG91ck9wdGlvbnMgPSBmYWxzZTtcbiAgc2hvd01pbnV0ZU9wdGlvbnMgPSBmYWxzZTtcblxuICBob3VycyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDI0IH0sIChfLCBpKSA9PiBTdHJpbmcoaSkucGFkU3RhcnQoMiwgJzAnKSk7XG4gIG1pbnV0ZXMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiA2MCB9LCAoXywgaSkgPT4gU3RyaW5nKGkpLnBhZFN0YXJ0KDIsICcwJykpO1xuXG4gIHRvZ2dsZUhvdXJEcm9wZG93bigpIHtcbiAgICB0aGlzLnNob3dIb3VyT3B0aW9ucyA9ICF0aGlzLnNob3dIb3VyT3B0aW9ucztcbiAgICB0aGlzLnNob3dNaW51dGVPcHRpb25zID0gZmFsc2U7XG4gIH1cblxuICB0b2dnbGVNaW51dGVEcm9wZG93bigpIHtcbiAgICB0aGlzLnNob3dNaW51dGVPcHRpb25zID0gIXRoaXMuc2hvd01pbnV0ZU9wdGlvbnM7XG4gICAgdGhpcy5zaG93SG91ck9wdGlvbnMgPSBmYWxzZTtcbiAgfVxuXG4gIHNlbGVjdEhvdXIoaDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZWxlY3RlZEhvdXIgPSBoO1xuICAgIHRoaXMuc2hvd0hvdXJPcHRpb25zID0gZmFsc2U7XG4gIH1cblxuICBzZWxlY3RNaW51dGUobTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IG07XG4gICAgdGhpcy5zaG93TWludXRlT3B0aW9ucyA9IGZhbHNlO1xuICB9XG5cbiAgdG9nZ2xlQ2FsZW5kYXIoKSB7XG4gICAgdGhpcy5zaG93Q2FsZW5kYXIgPSAhdGhpcy5zaG93Q2FsZW5kYXI7XG5cbiAgICB0aGlzLnRlbXBTZWxlY3RlZERhdGUgPSBuZXcgRGF0ZSh0aGlzLmRhdGUgfHwgbmV3IERhdGUoKSk7XG4gICAgdGhpcy5zZWxlY3RlZE1vbnRoID0gdGhpcy50ZW1wU2VsZWN0ZWREYXRlLmdldE1vbnRoKCk7XG4gICAgdGhpcy5zZWxlY3RlZE1vbnRoU3RyaW5nID0gdGhpcy5tb250aHNbdGhpcy5zZWxlY3RlZE1vbnRoXTtcbiAgICB0aGlzLnNlbGVjdGVkWWVhciA9IHRoaXMudGVtcFNlbGVjdGVkRGF0ZS5nZXRGdWxsWWVhcigpO1xuXG4gICAgaWYgKHRoaXMuc2hvd1RpbWUgJiYgIXRoaXMudGVtcFRpbWUpIHtcbiAgICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgICAgIGNvbnN0IGlzVG9kYXkgPSB0aGlzLmlzU2FtZURhdGUodGhpcy50ZW1wU2VsZWN0ZWREYXRlLCB0b2RheSk7XG5cbiAgICAgIGNvbnN0IGhvdXJzID0gaXNUb2RheSA/IHRvZGF5LmdldEhvdXJzKCkgOiAwO1xuICAgICAgY29uc3QgbWludXRlcyA9IGlzVG9kYXkgPyB0b2RheS5nZXRNaW51dGVzKCkgOiAwO1xuXG4gICAgICB0aGlzLnRlbXBTZWxlY3RlZERhdGUuc2V0SG91cnMoaG91cnMsIG1pbnV0ZXMsIDAsIDApO1xuICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgPSBob3Vycy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gbWludXRlcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICB0aGlzLnRlbXBUaW1lID0gYCR7dGhpcy5zZWxlY3RlZEhvdXJ9OiR7dGhpcy5zZWxlY3RlZE1pbnV0ZX1gO1xuICAgIH1cbiAgfVxuXG4gIGluaXRUaW1lRnJvbURhdGUoZGF0ZTogRGF0ZSkge1xuICAgIGNvbnN0IGhvdXJzID0gZGF0ZS5nZXRIb3VycygpO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBkYXRlLmdldE1pbnV0ZXMoKTtcblxuICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gaG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSBtaW51dGVzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICB0aGlzLnRlbXBUaW1lID0gYCR7dGhpcy5zZWxlY3RlZEhvdXJ9OiR7dGhpcy5zZWxlY3RlZE1pbnV0ZX1gO1xuICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZS5zZXRIb3Vycyhob3VycywgbWludXRlcywgMCwgMCk7XG4gIH1cblxuICBmaXhUb1VUQyhkYXRlVmFsdWU6IGFueSkge1xuICAgIGlmICghZGF0ZVZhbHVlKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGRhdGUgPSBkYXRlVmFsdWUgaW5zdGFuY2VvZiBEYXRlID8gZGF0ZVZhbHVlIDogbmV3IERhdGUoZGF0ZVZhbHVlKTtcbiAgICBpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiBuZXcgRGF0ZShcbiAgICAgIERhdGUuVVRDKFxuICAgICAgICBkYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgIGRhdGUuZ2V0TW9udGgoKSxcbiAgICAgICAgZGF0ZS5nZXREYXRlKCksXG4gICAgICAgIGRhdGUuZ2V0SG91cnMoKSxcbiAgICAgICAgZGF0ZS5nZXRNaW51dGVzKCksXG4gICAgICAgIGRhdGUuZ2V0U2Vjb25kcygpLFxuICAgICAgICBkYXRlLmdldE1pbGxpc2Vjb25kcygpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGNvbmZpcm0oKSB7XG4gICAgaWYgKHRoaXMuaXNEaXNhYmxlZCh0aGlzLnRlbXBTZWxlY3RlZERhdGUpKSByZXR1cm47XG5cbiAgICBjb25zdCBob3VycyA9IE51bWJlcih0aGlzLnNlbGVjdGVkSG91cik7XG4gICAgY29uc3QgbWludXRlcyA9IE51bWJlcih0aGlzLnNlbGVjdGVkTWludXRlKTtcblxuICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZS5zZXRIb3Vycyhob3VycywgbWludXRlcywgMCwgMCk7XG5cbiAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHRoaXMudGVtcFNlbGVjdGVkRGF0ZSk7XG4gICAgdGhpcy5kYXRlID0gdGhpcy5zZWxlY3RlZERhdGU7XG5cbiAgICBjb25zdCBwYWQgPSAobjogbnVtYmVyKSA9PiBuLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICBjb25zdCBsb2NhbERhdGVTdHJpbmcgPSBgJHt0aGlzLnNlbGVjdGVkRGF0ZS5nZXRGdWxsWWVhcigpfS0ke3BhZChcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlLmdldE1vbnRoKCkgKyAxXG4gICAgKX0tJHtwYWQodGhpcy5zZWxlY3RlZERhdGUuZ2V0RGF0ZSgpKX1UJHtwYWQoXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZS5nZXRIb3VycygpXG4gICAgKX06JHtwYWQodGhpcy5zZWxlY3RlZERhdGUuZ2V0TWludXRlcygpKX06JHtwYWQoXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZS5nZXRTZWNvbmRzKClcbiAgICApfWA7XG5cbiAgICBcblxuICAgIHRoaXMuZGF0ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICB0aGlzLm9uQ2hhbmdlKGxvY2FsRGF0ZVN0cmluZyk7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcblxuICAgIHRoaXMuc2hvd0NhbGVuZGFyID0gZmFsc2U7XG4gIH1cblxuICBzZXRUb1N0YXJ0T2ZEYXkoKSB7XG4gICAgdGhpcy5zZWxlY3RlZEhvdXIgPSAnMDAnO1xuICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSAnMDAnO1xuXG4gICAgdGhpcy50ZW1wU2VsZWN0ZWREYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgIHRoaXMudGVtcFRpbWUgPSBgJHt0aGlzLnNlbGVjdGVkSG91cn06JHt0aGlzLnNlbGVjdGVkTWludXRlfWA7XG5cbiAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHRoaXMudGVtcFNlbGVjdGVkRGF0ZSk7XG4gIH1cbnNldFRvRW5kT2ZEYXkoKSB7XG4gIHRoaXMuc2VsZWN0ZWRIb3VyID0gJzIzJztcbiAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9ICc1OSc7XG5cbiAgdGhpcy50ZW1wU2VsZWN0ZWREYXRlLnNldEhvdXJzKDIzLCA1OSwgNTksIDk5OSk7XG4gIHRoaXMudGVtcFRpbWUgPSBgJHt0aGlzLnNlbGVjdGVkSG91cn06JHt0aGlzLnNlbGVjdGVkTWludXRlfWA7XG5cbiAgdGhpcy5zZWxlY3RlZERhdGUgPSBuZXcgRGF0ZSh0aGlzLnRlbXBTZWxlY3RlZERhdGUpO1xufVxuXG4gIHByZXZpb3VzTW9udGgoKSB7XG4gICAgdGhpcy5zZWxlY3RlZE1vbnRoLS07XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRNb250aCA8IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRNb250aCA9IDExO1xuICAgICAgdGhpcy5zZWxlY3RlZFllYXItLTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVUZW1wU2VsZWN0ZWREYXRlKCk7XG4gIH1cblxuICBuZXh0TW9udGgoKSB7XG4gICAgdGhpcy5zZWxlY3RlZE1vbnRoKys7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRNb250aCA+IDExKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkTW9udGggPSAwO1xuICAgICAgdGhpcy5zZWxlY3RlZFllYXIrKztcbiAgICB9XG4gICAgdGhpcy51cGRhdGVUZW1wU2VsZWN0ZWREYXRlKCk7XG4gIH1cblxuICBvbkRyb3Bkb3duWWVhckNoYW5nZShldmVudDogRHJvcGRvd25DaGFuZ2VFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRZZWFyID0gZXZlbnQudmFsdWU7XG4gICAgdGhpcy51cGRhdGVUZW1wU2VsZWN0ZWREYXRlKCk7XG4gIH1cblxuICBvbkRyb3Bkb3duTW9udGhDaGFuZ2UoZXZlbnQ6IERyb3Bkb3duQ2hhbmdlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkTW9udGggPSB0aGlzLm1vbnRocy5pbmRleE9mKGV2ZW50LnZhbHVlKTtcbiAgICB0aGlzLnVwZGF0ZVRlbXBTZWxlY3RlZERhdGUoKTtcbiAgfVxuXG4gIHVwZGF0ZVRlbXBTZWxlY3RlZERhdGUoKSB7XG4gICAgdGhpcy50ZW1wU2VsZWN0ZWREYXRlLnNldE1vbnRoKHRoaXMuc2VsZWN0ZWRNb250aCk7XG4gICAgdGhpcy50ZW1wU2VsZWN0ZWREYXRlLnNldEZ1bGxZZWFyKHRoaXMuc2VsZWN0ZWRZZWFyKTtcbiAgfVxuXG4gIGdldERheXNJbk1vbnRoKCk6IChEYXRlIHwgbnVsbClbXSB7XG4gICAgY29uc3QgZGF5czogKERhdGUgfCBudWxsKVtdID0gW107XG4gICAgY29uc3QgeWVhciA9IHRoaXMuc2VsZWN0ZWRZZWFyO1xuICAgIGNvbnN0IG1vbnRoID0gdGhpcy5zZWxlY3RlZE1vbnRoO1xuXG4gICAgY29uc3QgZmlyc3REYXlPZk1vbnRoID0gbmV3IERhdGUoeWVhciwgbW9udGgsIDEpLmdldERheSgpO1xuICAgIGNvbnN0IG9mZnNldCA9IGZpcnN0RGF5T2ZNb250aCA9PT0gMCA/IDYgOiBmaXJzdERheU9mTW9udGggLSAxO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvZmZzZXQ7IGkrKykge1xuICAgICAgZGF5cy5wdXNoKG51bGwpO1xuICAgIH1cblxuICAgIGNvbnN0IHRvdGFsRGF5cyA9IG5ldyBEYXRlKHllYXIsIG1vbnRoICsgMSwgMCkuZ2V0RGF0ZSgpO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHRvdGFsRGF5czsgaSsrKSB7XG4gICAgICBjb25zdCBkYXkgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgaSk7XG4gICAgICBkYXlzLnB1c2goZGF5KTtcbiAgICB9XG4gICAgcmV0dXJuIGRheXM7XG4gIH1cbiBzYW5pdGl6ZURhdGVTdHJpbmcodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB2YWx1ZT8uZW5kc1dpdGgoJ1onKSA/IHZhbHVlLnNsaWNlKDAsIC0xKSA6IHZhbHVlO1xufVxuXG4gIGlzRGlzYWJsZWQoZGF5OiBEYXRlIHwgc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZGF5RGF0ZSA9IHRoaXMudG9EYXRlKGRheSk7XG5cbiAgICBpZiAodGhpcy5taW5EYXRlICYmIGRheURhdGUgPCB0aGlzLnN0cmlwVGltZSh0aGlzLnRvRGF0ZSh0aGlzLm1pbkRhdGUpKSlcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmICh0aGlzLm1heERhdGUgJiYgZGF5RGF0ZSA+IHRoaXMuc3RyaXBUaW1lKHRoaXMudG9EYXRlKHRoaXMubWF4RGF0ZSkpKVxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHN0cmlwVGltZShkYXRlOiBEYXRlIHwgc3RyaW5nKTogRGF0ZSB7XG4gICAgY29uc3QgZCA9IHRoaXMudG9EYXRlKGRhdGUpO1xuICAgIHJldHVybiBuZXcgRGF0ZShkLmdldEZ1bGxZZWFyKCksIGQuZ2V0TW9udGgoKSwgZC5nZXREYXRlKCkpO1xuICB9XG5cbiB0b0RhdGUodmFsdWU6IERhdGUgfCBzdHJpbmcpOiBEYXRlIHtcbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIHZhbHVlO1xuICByZXR1cm4gbmV3IERhdGUodGhpcy5zYW5pdGl6ZURhdGVTdHJpbmcodmFsdWUpKTtcbn1cblxuXG4gIGlzMjRIb3VyOiBib29sZWFuID0gdHJ1ZTtcblxuICBzZWxlY3RUZW1wb3JhcnlEYXRlKGRheTogRGF0ZSkge1xuICAgIGlmICh0aGlzLmlzRGlzYWJsZWQoZGF5KSkgcmV0dXJuO1xuXG4gICAgY29uc3QgaXNOZXdEYXRlID0gIXRoaXMuaXNTYW1lRGF0ZSh0aGlzLnRlbXBTZWxlY3RlZERhdGUsIGRheSk7XG4gICAgdGhpcy50ZW1wU2VsZWN0ZWREYXRlID0gbmV3IERhdGUoZGF5KTtcblxuICAgIGlmICh0aGlzLnNob3dUaW1lKSB7XG4gICAgICBpZiAoaXNOZXdEYXRlKSB7XG4gICAgICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgICAgICAgY29uc3QgaXNUb2RheSA9XG4gICAgICAgICAgZGF5LmdldEZ1bGxZZWFyKCkgPT09IHRvZGF5LmdldEZ1bGxZZWFyKCkgJiZcbiAgICAgICAgICBkYXkuZ2V0TW9udGgoKSA9PT0gdG9kYXkuZ2V0TW9udGgoKSAmJlxuICAgICAgICAgIGRheS5nZXREYXRlKCkgPT09IHRvZGF5LmdldERhdGUoKTtcblxuICAgICAgICBjb25zdCBob3VycyA9IGlzVG9kYXkgPyB0b2RheS5nZXRIb3VycygpIDogMDtcbiAgICAgICAgY29uc3QgbWludXRlcyA9IGlzVG9kYXkgPyB0b2RheS5nZXRNaW51dGVzKCkgOiAwO1xuXG4gICAgICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZS5zZXRIb3Vycyhob3VycywgbWludXRlcywgMCwgMCk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgPSBob3Vycy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSBtaW51dGVzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgICAgdGhpcy50ZW1wVGltZSA9IGAke3RoaXMuc2VsZWN0ZWRIb3VyfToke3RoaXMuc2VsZWN0ZWRNaW51dGV9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IFtoLCBtXSA9IHRoaXMudGVtcFRpbWUuc3BsaXQoJzonKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgPSBoO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gbTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpc1NlbGVjdGVkKGRheTogRGF0ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBkYXkuZ2V0RGF0ZSgpID09PSB0aGlzLnRlbXBTZWxlY3RlZERhdGUuZ2V0RGF0ZSgpICYmXG4gICAgICBkYXkuZ2V0TW9udGgoKSA9PT0gdGhpcy50ZW1wU2VsZWN0ZWREYXRlLmdldE1vbnRoKCkgJiZcbiAgICAgIGRheS5nZXRGdWxsWWVhcigpID09PSB0aGlzLnRlbXBTZWxlY3RlZERhdGUuZ2V0RnVsbFllYXIoKVxuICAgICk7XG4gIH1cblxuICBmb3JtYXREYXRlKGRhdGU6IERhdGUsIGZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBkYXkgPSBkYXRlLmdldERhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgY29uc3QgbW9udGggPSAoZGF0ZS5nZXRNb250aCgpICsgMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIGNvbnN0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG5cbiAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgY2FzZSAnREQvTU0vWVlZWSc6XG4gICAgICAgIHJldHVybiBgJHtkYXl9LyR7bW9udGh9LyR7eWVhcn1gO1xuICAgICAgY2FzZSAnTU0vREQvWVlZWSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gYCR7bW9udGh9LyR7ZGF5fS8ke3llYXJ9YDtcbiAgICB9XG4gIH1cblxuICBjYW5jZWwoKSB7XG4gICAgdGhpcy5zaG93Q2FsZW5kYXIgPSBmYWxzZTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyXCI+XG4gIDxkaXYgY2xhc3M9XCJjYWxlbmRhci1jb250YWluZXJcIj5cbiAgICA8aW5wdXRcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICBbdmFsdWVdPVwiZGlzcGxheURhdGVcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIChjbGljayk9XCIhZGlzYWJsZWQgJiYgdG9nZ2xlQ2FsZW5kYXIoKVwiXG4gICAgICBjbGFzcz1cInctZnVsbCBibG9ja1wiXG4gICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJiZ0NvbG9yXCJcbiAgICAgIFtzdHlsZS5ib3JkZXJdPVwiYm9yZGVyXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ2N1cnNvci1ub3QtYWxsb3dlZCc6IGRpc2FibGVkID09PSB0cnVlLFxuICAgICAgICAnY3Vyc29yLXBvaW50ZXInOiBkaXNhYmxlZCA9PT0gZmFsc2VcbiAgICAgIH1cIlxuICAgICAgcmVhZG9ubHlcbiAgICAvPlxuICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAoY2xpY2spPVwiIWRpc2FibGVkICYmIHRvZ2dsZUNhbGVuZGFyKClcIlxuICAgICAgY2xhc3M9XCJpY29uXCJcbiAgICAgIFtpY29uXT1cIidjYWxlbmRhcidcIlxuICAgID48L3ZlcmJlbi1zdmc+XG4gIDwvZGl2PlxuXG4gIDxkaXZcbiAgICAqbmdJZj1cInNob3dDYWxlbmRhclwiXG4gICAgW2FwcE91dFNpZGVDbGlja109XCJzaG93Q2FsZW5kYXJcIlxuICAgIChvdXRTaWRlQ2xpY2spPVwic2hvd0NhbGVuZGFyID0gZmFsc2VcIlxuICAgIGNsYXNzPVwiY2FsZW5kYXJcIlxuICAgIFtzdHlsZS53aWR0aF09XCJkYXRlUGlja2VyV2lkdGhcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImNhbGVuZGFyLWhlYWRlclwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF1c2VEcm9wZG93bnM7IGVsc2UgZHJvcGRvd25zXCI+XG4gICAgICAgIDxidXR0b24gKGNsaWNrKT1cInByZXZpb3VzTW9udGgoKVwiPlxuICAgICAgICAgIDx2ZXJiZW4tc3ZnIFt3aWR0aF09XCIyMFwiIFtpY29uXT1cIidjaGV2cm9uLWxlZnQnXCI+PC92ZXJiZW4tc3ZnPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPHNwYW4+e3sgbW9udGhzW3NlbGVjdGVkTW9udGhdIH19IHt7IHNlbGVjdGVkWWVhciB9fTwvc3Bhbj5cbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibmV4dE1vbnRoKClcIj5cbiAgICAgICAgICA8dmVyYmVuLXN2ZyBbd2lkdGhdPVwiMjBcIiBbaWNvbl09XCInY2hldnJvbi1yaWdodCdcIj48L3ZlcmJlbi1zdmc+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjZHJvcGRvd25zPlxuICAgICAgICA8dmVyYmVuLWRyb3AtZG93blxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJ5ZWFyUGxhY2Vob2xkZXJcIlxuICAgICAgICAgIChvbkNoYW5nZSk9XCJvbkRyb3Bkb3duWWVhckNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICBbb3B0aW9uc109XCJ5ZWFyUmFuZ2VcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRZZWFyXCJcbiAgICAgICAgICBbd2lkdGhdPVwiJzkwcHgnXCJcbiAgICAgICAgPjwvdmVyYmVuLWRyb3AtZG93bj5cblxuICAgICAgICA8dmVyYmVuLWRyb3AtZG93blxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJtb250aFBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAob25DaGFuZ2UpPVwib25Ecm9wZG93bk1vbnRoQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgIFtvcHRpb25zXT1cIm1vbnRoc1wiXG4gICAgICAgICAgY2xhc3M9XCJkcm9wLWRvd25cIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRNb250aFN0cmluZ1wiXG4gICAgICAgICAgW3dpZHRoXT1cIic5MHB4J1wiXG4gICAgICAgID48L3ZlcmJlbi1kcm9wLWRvd24+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuXG4gXG4gICAgICA8ZGl2IGNsYXNzPVwidGltZS1waWNrZXIgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIiAqbmdJZj1cInNob3dUaW1lXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZVwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgYm94IHJvdW5kZWQgcHgtMiBweS0xIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVIb3VyRHJvcGRvd24oKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgc2VsZWN0ZWRIb3VyIH19XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0hvdXJPcHRpb25zXCIgY2xhc3M9XCJkcm9wZG93blwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIlxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaCBvZiBob3Vyc1wiXG4gICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiaCA9PT0gc2VsZWN0ZWRIb3VyXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEhvdXIoaClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBoIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPHNwYW4+Ojwvc3Bhbj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmVcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGJveCByb3VuZGVkIHB4LTIgcHktMSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlTWludXRlRHJvcGRvd24oKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgc2VsZWN0ZWRNaW51dGUgfX1cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93TWludXRlT3B0aW9uc1wiIGNsYXNzPVwiZHJvcGRvd25cIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG0gb2YgbWludXRlc1wiXG4gICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwibSA9PT0gc2VsZWN0ZWRNaW51dGVcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0TWludXRlKG0pXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgbSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgXG4gICAgIDxkaXY+XG4gICAgICAgIDx2ZXJiZW4tdG9vbHRpcFxuICAgICAgICBbdG9wXT1cIictNDBweCdcIlxuICAgICAgICBbdGV4dENvbG9yXT1cIicjMDAwJ1wiXG4gICAgICAgIFtiYWNrZ3JvdW5kQ29sb3JdPVwiJyNEM0QzRDMnXCJcbiAgICAgICAgW2xlZnRdPVwiJzAnXCJcbiAgICAgICAgW3dpZHRoXT1cIicxMDBweCdcIlxuICAgICAgICBbdG9vbHRpcENvbnRlbnRdPVwidG9vbHRpcFRlbXBsYXRlXCJcbiAgICAgICAgI3Rvb2x0aXA+XG4gICAgPHZlcmJlbi1zdmdcbiAgICAgICAgKGNsaWNrKT1cInNldFRvU3RhcnRPZkRheSgpXCJcbiAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgIFt3aWR0aF09XCIxNFwiXG4gICAgICAgIFtoZWlnaHRdPVwiMTRcIlxuICAgICAgICBbaWNvbl09XCInc3VuJ1wiXG4gICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgPC92ZXJiZW4tdG9vbHRpcD5cbiAgICAgICAgICAgPG5nLXRlbXBsYXRlICN0b29sdGlwVGVtcGxhdGU+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXhzXCI+U2V0IHN0YXJ0IG9mIGRheTwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICA8L2Rpdj5cbiAgICAgPGRpdj5cbiAgPHZlcmJlbi10b29sdGlwXG4gICAgW3RvcF09XCInLTQwcHgnXCJcbiAgICBbdGV4dENvbG9yXT1cIicjMDAwJ1wiXG4gICAgW2JhY2tncm91bmRDb2xvcl09XCInI0QzRDNEMydcIlxuICAgIFtsZWZ0XT1cIicwJ1wiXG4gICAgW3dpZHRoXT1cIicxMDBweCdcIlxuICAgIFt0b29sdGlwQ29udGVudF09XCJlbmRPZkRheVRvb2x0aXBcIlxuICAgICNlbmRPZkRheVRpcFxuICA+XG4gICAgPHZlcmJlbi1zdmdcbiAgICAgIChjbGljayk9XCJzZXRUb0VuZE9mRGF5KClcIlxuICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXG4gICAgICBbd2lkdGhdPVwiMTRcIlxuICAgICAgW2hlaWdodF09XCIxNFwiXG4gICAgICBbaWNvbl09XCInbW9vbidcIlxuICAgID48L3ZlcmJlbi1zdmc+XG4gIDwvdmVyYmVuLXRvb2x0aXA+XG5cbiAgPG5nLXRlbXBsYXRlICNlbmRPZkRheVRvb2x0aXA+XG4gICAgPGRpdj5cbiAgICAgIDxwIGNsYXNzPVwidGV4dC14c1wiPlNldCBlbmQgb2YgZGF5PC9wPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG5cbiAgICAgIDwvZGl2PlxuXG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY2FsZW5kYXItYm9keVwiPlxuICAgICAgPGRpdiBjbGFzcz1cIndlZWtkYXlzXCI+XG4gICAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCBkYXkgb2Ygd2Vla0RheXNcIj57eyBkYXkgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImRhdGVzXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRheSBvZiBnZXREYXlzSW5Nb250aCgpXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJkYXk7IGVsc2UgZW1wdHlcIlxuICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImlzU2VsZWN0ZWQoZGF5KVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZChkYXkpXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2Rpc2FibGVkLWRheSc6IGlzRGlzYWJsZWQoZGF5KSB9XCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RUZW1wb3JhcnlEYXRlKGRheSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IGRheS5nZXREYXRlKCkgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2VtcHR5PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbXB0eS1kYXRlXCI+PC9zcGFuPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY2FsZW5kYXItZm9vdGVyXCI+XG4gICAgICA8YnV0dG9uIChjbGljayk9XCJjYW5jZWwoKVwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY29uZmlybSgpXCI+T0s8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -6,6 +6,7 @@ import { SvgModule } from 'verben-ng-ui/src/lib/components/svg';
6
6
  import { DropDownModule } from 'verben-ng-ui/src/lib/components/drop-down';
7
7
  import { VerbenPopUpModule } from 'verben-ng-ui/src/lib/components/pop-up';
8
8
  import { OutSideClickDirective } from 'verben-ng-ui/src/lib/components/data-view';
9
+ import { TooltipModule } from 'verben-ng-ui/src/lib/components/tooltip';
9
10
  import * as i0 from "@angular/core";
10
11
  export class DatePickerModule {
11
12
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: DatePickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
@@ -14,12 +15,14 @@ export class DatePickerModule {
14
15
  SvgModule,
15
16
  DropDownModule,
16
17
  VerbenPopUpModule,
17
- OutSideClickDirective], exports: [DatePickerComponent] });
18
+ OutSideClickDirective,
19
+ TooltipModule], exports: [DatePickerComponent] });
18
20
  static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: DatePickerModule, imports: [FormsModule,
19
21
  CommonModule,
20
22
  SvgModule,
21
23
  DropDownModule,
22
- VerbenPopUpModule] });
24
+ VerbenPopUpModule,
25
+ TooltipModule] });
23
26
  }
24
27
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: DatePickerModule, decorators: [{
25
28
  type: NgModule,
@@ -32,8 +35,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImpo
32
35
  DropDownModule,
33
36
  VerbenPopUpModule,
34
37
  OutSideClickDirective,
38
+ TooltipModule
35
39
  ],
36
40
  exports: [DatePickerComponent],
37
41
  }]
38
42
  }] });
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7O0FBYWxGLE1BQU0sT0FBTyxnQkFBZ0I7d0dBQWhCLGdCQUFnQjt5R0FBaEIsZ0JBQWdCLGlCQVhaLG1CQUFtQixhQUVoQyxXQUFXO1lBQ1gsWUFBWTtZQUNaLFNBQVM7WUFDVCxjQUFjO1lBQ2QsaUJBQWlCO1lBQ2pCLHFCQUFxQixhQUViLG1CQUFtQjt5R0FFbEIsZ0JBQWdCLFlBVHpCLFdBQVc7WUFDWCxZQUFZO1lBQ1osU0FBUztZQUNULGNBQWM7WUFDZCxpQkFBaUI7OzRGQUtSLGdCQUFnQjtrQkFaNUIsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztvQkFDbkMsT0FBTyxFQUFFO3dCQUNQLFdBQVc7d0JBQ1gsWUFBWTt3QkFDWixTQUFTO3dCQUNULGNBQWM7d0JBQ2QsaUJBQWlCO3dCQUNqQixxQkFBcUI7cUJBQ3RCO29CQUNELE9BQU8sRUFBRSxDQUFDLG1CQUFtQixDQUFDO2lCQUMvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBEYXRlUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRlLXBpY2tlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3ZnTW9kdWxlIH0gZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9zdmcnO1xuaW1wb3J0IHsgRHJvcERvd25Nb2R1bGUgfSBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2Ryb3AtZG93bic7XG5pbXBvcnQgeyBWZXJiZW5Qb3BVcE1vZHVsZSB9IGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvcG9wLXVwJztcbmltcG9ydCB7IE91dFNpZGVDbGlja0RpcmVjdGl2ZSB9IGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvZGF0YS12aWV3JztcbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW0RhdGVQaWNrZXJDb21wb25lbnRdLFxuICBpbXBvcnRzOiBbXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFN2Z01vZHVsZSxcbiAgICBEcm9wRG93bk1vZHVsZSxcbiAgICBWZXJiZW5Qb3BVcE1vZHVsZSxcbiAgICBPdXRTaWRlQ2xpY2tEaXJlY3RpdmUsXG4gIF0sXG4gIGV4cG9ydHM6IFtEYXRlUGlja2VyQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVBpY2tlck1vZHVsZSB7fVxuIl19
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOztBQWN4RSxNQUFNLE9BQU8sZ0JBQWdCO3dHQUFoQixnQkFBZ0I7eUdBQWhCLGdCQUFnQixpQkFaWixtQkFBbUIsYUFFaEMsV0FBVztZQUNYLFlBQVk7WUFDWixTQUFTO1lBQ1QsY0FBYztZQUNkLGlCQUFpQjtZQUNqQixxQkFBcUI7WUFDckIsYUFBYSxhQUVMLG1CQUFtQjt5R0FFbEIsZ0JBQWdCLFlBVnpCLFdBQVc7WUFDWCxZQUFZO1lBQ1osU0FBUztZQUNULGNBQWM7WUFDZCxpQkFBaUI7WUFFakIsYUFBYTs7NEZBSUosZ0JBQWdCO2tCQWI1QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLG1CQUFtQixDQUFDO29CQUNuQyxPQUFPLEVBQUU7d0JBQ1AsV0FBVzt3QkFDWCxZQUFZO3dCQUNaLFNBQVM7d0JBQ1QsY0FBYzt3QkFDZCxpQkFBaUI7d0JBQ2pCLHFCQUFxQjt3QkFDckIsYUFBYTtxQkFDZDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztpQkFDL0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRGF0ZVBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4vZGF0ZS1waWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFN2Z01vZHVsZSB9IGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvc3ZnJztcbmltcG9ydCB7IERyb3BEb3duTW9kdWxlIH0gZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kcm9wLWRvd24nO1xuaW1wb3J0IHsgVmVyYmVuUG9wVXBNb2R1bGUgfSBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL3BvcC11cCc7XG5pbXBvcnQgeyBPdXRTaWRlQ2xpY2tEaXJlY3RpdmUgfSBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtdmlldyc7XG5pbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy90b29sdGlwJztcbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW0RhdGVQaWNrZXJDb21wb25lbnRdLFxuICBpbXBvcnRzOiBbXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFN2Z01vZHVsZSxcbiAgICBEcm9wRG93bk1vZHVsZSxcbiAgICBWZXJiZW5Qb3BVcE1vZHVsZSxcbiAgICBPdXRTaWRlQ2xpY2tEaXJlY3RpdmUsXG4gICAgVG9vbHRpcE1vZHVsZVxuICBdLFxuICBleHBvcnRzOiBbRGF0ZVBpY2tlckNvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIERhdGVQaWNrZXJNb2R1bGUge31cbiJdfQ==