@eo-sdk/client 11.8.1 → 11.9.0-rc.2

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.
Files changed (50) hide show
  1. package/app/eo-client/about-state/about-state.component.d.ts.map +1 -1
  2. package/app/eo-client/inbox-state/inbox-state/inbox-state.component.d.ts +11 -1
  3. package/app/eo-client/inbox-state/inbox-state/inbox-state.component.d.ts.map +1 -1
  4. package/app/eo-client/settings/settings.component.d.ts +4 -2
  5. package/app/eo-client/settings/settings.component.d.ts.map +1 -1
  6. package/app/eo-framework/actions/action-menu/action-menu.component.d.ts +12 -3
  7. package/app/eo-framework/actions/action-menu/action-menu.component.d.ts.map +1 -1
  8. package/app/eo-framework/actions/action-service/action.service.d.ts +39 -3
  9. package/app/eo-framework/actions/action-service/action.service.d.ts.map +1 -1
  10. package/app/eo-framework/actions/action.module.d.ts +16 -13
  11. package/app/eo-framework/actions/action.module.d.ts.map +1 -1
  12. package/app/eo-framework/actions/actions/return-task-action/return-task/return-task.component.d.ts +39 -0
  13. package/app/eo-framework/actions/actions/return-task-action/return-task/return-task.component.d.ts.map +1 -0
  14. package/app/eo-framework/actions/actions/return-task-action/return-task-action.d.ts +32 -0
  15. package/app/eo-framework/actions/actions/return-task-action/return-task-action.d.ts.map +1 -0
  16. package/app/eo-framework/app-shell/app-bar/app-search/app-search.component.d.ts +1 -0
  17. package/app/eo-framework/app-shell/app-bar/app-search/app-search.component.d.ts.map +1 -1
  18. package/app/eo-framework/form-elements/datetime-range/datetime-range.component.d.ts +15 -1
  19. package/app/eo-framework/form-elements/datetime-range/datetime-range.component.d.ts.map +1 -1
  20. package/app/eo-framework/form-elements/dynamic-list/dynamic-list.component.d.ts +1 -2
  21. package/app/eo-framework/form-elements/dynamic-list/dynamic-list.component.d.ts.map +1 -1
  22. package/app/eo-framework/object-form/object-form-helper.service.d.ts.map +1 -1
  23. package/app/eo-framework/ui/indexdata-summary/indexdata-summary.component.d.ts.map +1 -1
  24. package/app/eo-framework-core/api/grid.service.d.ts.map +1 -1
  25. package/assets/_default/i18n/de.json +24 -9
  26. package/assets/_default/i18n/en.json +24 -9
  27. package/assets/_default/svg/ic_rollback.svg +1 -0
  28. package/esm2022/app/eo-client/about-state/about-state.component.mjs +3 -3
  29. package/esm2022/app/eo-client/dashboard/widgets/charts-widget/charts-widget.component.mjs +6 -6
  30. package/esm2022/app/eo-client/inbox-state/inbox-state/inbox-state.component.mjs +70 -23
  31. package/esm2022/app/eo-client/process-state/process-state.component.mjs +1 -1
  32. package/esm2022/app/eo-client/settings/settings.component.mjs +9 -6
  33. package/esm2022/app/eo-framework/actions/action-menu/action-menu.component.mjs +51 -32
  34. package/esm2022/app/eo-framework/actions/action-service/action.service.mjs +54 -3
  35. package/esm2022/app/eo-framework/actions/action.module.mjs +10 -4
  36. package/esm2022/app/eo-framework/actions/actions/return-task-action/return-task/return-task.component.mjs +75 -0
  37. package/esm2022/app/eo-framework/actions/actions/return-task-action/return-task-action.mjs +43 -0
  38. package/esm2022/app/eo-framework/app-shell/app-bar/app-search/app-search.component.mjs +1 -1
  39. package/esm2022/app/eo-framework/form-elements/datetime-range/datetime-range.component.mjs +150 -11
  40. package/esm2022/app/eo-framework/form-elements/dynamic-list/dynamic-list.component.mjs +3 -4
  41. package/esm2022/app/eo-framework/object-form/object-form/form-element/form-element.component.mjs +3 -3
  42. package/esm2022/app/eo-framework/object-form/object-form-edit/object-form-edit.component.mjs +2 -2
  43. package/esm2022/app/eo-framework/object-form/object-form-helper.service.mjs +14 -2
  44. package/esm2022/app/eo-framework/shortcuts/global-shortcuts/global-shortcuts-section/global-shortcuts-section.component.mjs +2 -2
  45. package/esm2022/app/eo-framework/ui/indexdata-summary/indexdata-summary-entry/indexdata-summary-entry.component.mjs +2 -2
  46. package/esm2022/app/eo-framework/ui/indexdata-summary/indexdata-summary.component.mjs +20 -10
  47. package/esm2022/app/eo-framework-core/api/grid.service.mjs +4 -1
  48. package/fesm2022/eo-sdk-client.mjs +591 -203
  49. package/fesm2022/eo-sdk-client.mjs.map +1 -1
  50. package/package.json +2 -2
@@ -10,7 +10,8 @@ import * as i3 from "@angular/common";
10
10
  import * as i4 from "@ngx-translate/core";
11
11
  import * as i5 from "../../ui/eo-icon/eo-icon.component";
12
12
  import * as i6 from "@yuuvis/components/dropdown";
13
- import * as i7 from "../date/date.component";
13
+ import * as i7 from "../codesystem/codesystem.component";
14
+ import * as i8 from "../date/date.component";
14
15
  export class DatetimeRangeComponent {
15
16
  constructor(fb, translate) {
16
17
  this.fb = fb;
@@ -19,7 +20,8 @@ export class DatetimeRangeComponent {
19
20
  this.swapInputs = false;
20
21
  this.rangeForm = this.fb.group({
21
22
  dateValue: [],
22
- dateValueFrom: []
23
+ dateValueFrom: [],
24
+ datePickerValue: []
23
25
  });
24
26
  this.isValid = true;
25
27
  // options for search situation
@@ -27,10 +29,15 @@ export class DatetimeRangeComponent {
27
29
  { label: RangeValue.getOperatorLabel(SearchFilter.OPERATOR.EQUAL), value: SearchFilter.OPERATOR.EQUAL },
28
30
  { label: RangeValue.getOperatorLabel(SearchFilter.OPERATOR.GREATER_OR_EQUAL), value: SearchFilter.OPERATOR.GREATER_OR_EQUAL },
29
31
  { label: RangeValue.getOperatorLabel(SearchFilter.OPERATOR.LESS_OR_EQUAL), value: SearchFilter.OPERATOR.LESS_OR_EQUAL },
30
- { label: RangeValue.getOperatorLabel(SearchFilter.OPERATOR.INTERVAL_INCLUDE_BOTH), value: SearchFilter.OPERATOR.INTERVAL_INCLUDE_BOTH }
32
+ { label: RangeValue.getOperatorLabel(SearchFilter.OPERATOR.INTERVAL_INCLUDE_BOTH), value: SearchFilter.OPERATOR.INTERVAL_INCLUDE_BOTH },
33
+ { label: RangeValue.getOperatorLabel(SearchFilter.OPERATOR.MORE), value: SearchFilter.OPERATOR.MORE }
31
34
  ];
32
35
  this.previousDateValue = null;
33
36
  this.previousDateValueFrom = null;
37
+ this.datePicker = {
38
+ title: this.translate.instant('eo.search.agg.time.span'),
39
+ codesystem: null,
40
+ };
34
41
  this.propagateChange = (_) => { };
35
42
  this.validationChange = () => { };
36
43
  this.datePipe = new LocaleDatePipe(translate);
@@ -39,6 +46,11 @@ export class DatetimeRangeComponent {
39
46
  writeValue(value) {
40
47
  this._setValue(value);
41
48
  }
49
+ onSearchSituation() {
50
+ if (this.situation !== 'SEARCH') {
51
+ this.availableSearchOptions = this.availableSearchOptions.filter(option => option.value !== SearchFilter.OPERATOR.MORE);
52
+ }
53
+ }
42
54
  registerOnChange(fn) {
43
55
  this.propagateChange = fn;
44
56
  }
@@ -52,6 +64,7 @@ export class DatetimeRangeComponent {
52
64
  }
53
65
  onValueChange(searchOption = this.searchOption) {
54
66
  let dateValue = this.formatDate(this.rangeForm.get('dateValue').value);
67
+ let datePickerValue = this.rangeForm.get('datePickerValue').value;
55
68
  if (searchOption === SearchFilter.OPERATOR.INTERVAL_INCLUDE_BOTH) {
56
69
  const dateValueFrom = this.formatDate(this.rangeForm.get('dateValueFrom').value);
57
70
  if (dateValueFrom && dateValue) {
@@ -65,19 +78,31 @@ export class DatetimeRangeComponent {
65
78
  }
66
79
  }
67
80
  }
81
+ else if (searchOption === SearchFilter.OPERATOR.MORE) {
82
+ this.swapInputs = false;
83
+ this.isValid = this.rangeForm.valid;
84
+ const oldSearchOption = this.searchOption;
85
+ this._setValue(!datePickerValue ? null : new RangeValue(searchOption, datePickerValue));
86
+ if (this.previousDateValue !== datePickerValue || oldSearchOption !== searchOption) {
87
+ this.propagateChange(this.value);
88
+ this.previousDateValue = datePickerValue;
89
+ }
90
+ }
68
91
  else {
69
92
  this.swapInputs = false;
70
93
  this.isValid = this.rangeForm.valid;
71
94
  if (searchOption === SearchFilter.OPERATOR.LESS_OR_EQUAL && dateValue) {
72
95
  const newDateValue = new Date(dateValue);
73
- if (!this.withTime)
96
+ if (!this.withTime) {
74
97
  newDateValue.setHours(23, 59);
98
+ }
75
99
  dateValue = newDateValue.toISOString();
76
100
  }
77
101
  else if (searchOption === SearchFilter.OPERATOR.GREATER_OR_EQUAL && dateValue) {
78
102
  const newDateValue = new Date(dateValue);
79
- if (!this.withTime)
103
+ if (!this.withTime) {
80
104
  newDateValue.setHours(0, 0);
105
+ }
81
106
  dateValue = newDateValue.toISOString();
82
107
  }
83
108
  if (this.isValid) {
@@ -92,8 +117,10 @@ export class DatetimeRangeComponent {
92
117
  this.searchOption = searchOption;
93
118
  }
94
119
  _setValue(value, emitEvent = false) {
95
- if (JSON.stringify(this.value) === JSON.stringify(value))
120
+ this.getPlaceholderCodesystem();
121
+ if (JSON.stringify(this.value) === JSON.stringify(value)) {
96
122
  return;
123
+ }
97
124
  if (value && value instanceof RangeValue && (value.firstValue || value.secondValue)) {
98
125
  // This prevents the value change event from being fired twice during initialization or when there is already a value
99
126
  if (this.rangeForm.pristine && this.value != null && value != this.value) {
@@ -102,13 +129,19 @@ export class DatetimeRangeComponent {
102
129
  const fV = value.firstValue ? new Date(value.firstValue) : null;
103
130
  const sV = value.secondValue ? new Date(value.secondValue) : null;
104
131
  this.value = value;
105
- this.searchOption = value.operator || SearchFilter.OPERATOR.EQUAL;
132
+ this.searchOption = (value.operator === 'rg' ? 'mr' : value.operator) || SearchFilter.OPERATOR.EQUAL;
106
133
  if (!value.secondValue) {
107
134
  if (JSON.stringify(this.rangeForm.value.dateValue) !== JSON.stringify(fV)) {
108
135
  this.rangeForm.patchValue({
109
136
  dateValue: fV
110
137
  }, { emitEvent });
111
138
  }
139
+ if (JSON.stringify(this.rangeForm.value.datePickerValue) !== JSON.stringify(fV)) {
140
+ this.value.firstValue;
141
+ }
142
+ this.rangeForm.patchValue({
143
+ datePickerValue: this.value.firstValue
144
+ }, { emitEvent });
112
145
  }
113
146
  else {
114
147
  if (JSON.stringify(this.rangeForm.value.dateValueFrom) !== JSON.stringify(fV)) {
@@ -132,8 +165,111 @@ export class DatetimeRangeComponent {
132
165
  return !value ? null :
133
166
  this.withTime ? value.toISOString().replace(':00.000', '') : this.datePipe.transform(value, 'yyyy-MM-dd');
134
167
  }
168
+ getPlaceholderCodesystem() {
169
+ let entries = [
170
+ {
171
+ id: 'yesterday',
172
+ defaultrepresentation: this.translate.instant('eo.search.agg.time.yesterday'),
173
+ label: this.translate.instant('eo.search.agg.time.yesterday'),
174
+ value: 'yesterday'
175
+ },
176
+ {
177
+ id: 'today',
178
+ defaultrepresentation: this.translate.instant('eo.search.agg.time.today'),
179
+ label: this.translate.instant('eo.search.agg.time.today'),
180
+ value: 'today'
181
+ },
182
+ {
183
+ id: 'tomorrow',
184
+ defaultrepresentation: this.translate.instant('eo.search.agg.time.tomorrow'),
185
+ label: this.translate.instant('eo.search.agg.time.tomorrow'),
186
+ value: 'tomorrow'
187
+ },
188
+ {
189
+ id: 'lastweek',
190
+ defaultrepresentation: this.translate.instant('eo.search.agg.time.lastweek'),
191
+ label: this.translate.instant('eo.search.agg.time.lastweek'),
192
+ value: 'lastweek'
193
+ },
194
+ {
195
+ id: 'thisweek',
196
+ defaultrepresentation: this.translate.instant('eo.search.agg.time.thisweek'),
197
+ label: this.translate.instant('eo.search.agg.time.thisweek'),
198
+ value: 'thisweek'
199
+ },
200
+ {
201
+ id: 'nextweek',
202
+ defaultrepresentation: this.translate.instant('eo.search.agg.time.nextweek'),
203
+ label: this.translate.instant('eo.search.agg.time.nextweek'),
204
+ value: 'nextweek'
205
+ },
206
+ {
207
+ id: 'lastmonth',
208
+ defaultrepresentation: this.translate.instant('eo.search.agg.time.lastmonth'),
209
+ label: this.translate.instant('eo.search.agg.time.lastmonth'),
210
+ value: 'lastmonth'
211
+ },
212
+ {
213
+ id: 'thismonth',
214
+ defaultrepresentation: this.translate.instant('eo.search.agg.time.thismonth'),
215
+ label: this.translate.instant('eo.search.agg.time.thismonth'),
216
+ value: 'thismonth'
217
+ },
218
+ {
219
+ id: 'nextmonth',
220
+ defaultrepresentation: this.translate.instant('eo.search.agg.time.nextmonth'),
221
+ label: this.translate.instant('eo.search.agg.time.nextmonth'),
222
+ value: 'nextmonth'
223
+ },
224
+ {
225
+ id: 'thisquarter',
226
+ defaultrepresentation: this.translate.instant('eo.search.agg.time.thisquarter'),
227
+ label: this.translate.instant('eo.search.agg.time.thisquarter'),
228
+ value: 'thisquarter'
229
+ },
230
+ {
231
+ id: 'lastquarter',
232
+ defaultrepresentation: this.translate.instant('eo.search.agg.time.lastquarter'),
233
+ label: this.translate.instant('eo.search.agg.time.lastquarter'),
234
+ value: 'lastquarter'
235
+ },
236
+ {
237
+ id: 'nextquarter',
238
+ defaultrepresentation: this.translate.instant('eo.search.agg.time.nextquarter'),
239
+ label: this.translate.instant('eo.search.agg.time.nextquarter'),
240
+ value: 'nextquarter'
241
+ },
242
+ {
243
+ id: 'lastyear',
244
+ defaultrepresentation: this.translate.instant('eo.search.agg.time.lastyear'),
245
+ label: this.translate.instant('eo.search.agg.time.lastyear'),
246
+ value: 'lastyear'
247
+ },
248
+ {
249
+ id: 'thisyear',
250
+ defaultrepresentation: this.translate.instant('eo.search.agg.time.thisyear'),
251
+ label: this.translate.instant('eo.search.agg.time.thisyear'),
252
+ value: 'thisyear'
253
+ },
254
+ {
255
+ id: 'nextyear',
256
+ defaultrepresentation: this.translate.instant('eo.search.agg.time.nextyear'),
257
+ label: this.translate.instant('eo.search.agg.time.nextyear'),
258
+ value: 'nextyear'
259
+ }
260
+ ];
261
+ return this.datePicker.codesystem = {
262
+ entries: entries.map((res) => ({
263
+ id: res.id,
264
+ label: res.label,
265
+ defaultrepresentation: res.defaultrepresentation,
266
+ data: res.value
267
+ })),
268
+ };
269
+ }
135
270
  // returns null when valid else the validation object
136
271
  validate(c) {
272
+ this.onSearchSituation();
137
273
  let err;
138
274
  if (this.searchOption === SearchFilter.OPERATOR.EQUAL) {
139
275
  err = {
@@ -152,10 +288,11 @@ export class DatetimeRangeComponent {
152
288
  return (this.isValid) ? null : err;
153
289
  }
154
290
  ngOnInit() {
291
+ this.getPlaceholderCodesystem();
155
292
  this.searchOption = this.operator;
156
293
  }
157
294
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: DatetimeRangeComponent, deps: [{ token: i1.UntypedFormBuilder }, { token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
158
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.4", type: DatetimeRangeComponent, selector: "eo-datetime-range", inputs: { withTime: "withTime", pickerTitle: "pickerTitle", operator: "operator" }, host: { properties: { "class.swap": "this.swapInputs" }, classAttribute: "form-element-range" }, providers: [
295
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.4", type: DatetimeRangeComponent, selector: "eo-datetime-range", inputs: { withTime: "withTime", pickerTitle: "pickerTitle", operator: "operator", situation: "situation" }, host: { properties: { "class.swap": "this.swapInputs" }, classAttribute: "form-element-range" }, providers: [
159
296
  {
160
297
  provide: NG_VALUE_ACCESSOR,
161
298
  useExisting: forwardRef(() => DatetimeRangeComponent),
@@ -166,7 +303,7 @@ export class DatetimeRangeComponent {
166
303
  useExisting: forwardRef(() => DatetimeRangeComponent),
167
304
  multi: true,
168
305
  }
169
- ], ngImport: i0, template: "<form class=\"eo-datetime-range\" [formGroup]=\"rangeForm\">\n <eo-date *ngIf=\"searchOption === 'gtelte'\" [withTime]=\"withTime\"\n formControlName=\"dateValueFrom\"></eo-date>\n\n <yvc-dropdown [ngModel]=\"searchOption\" (ngModelChange)=\"onValueChange($event)\" [ngModelOptions]=\"{standalone: true}\"\n [options]=\"availableSearchOptions\"></yvc-dropdown>\n\n <eo-date [withTime]=\"withTime\" formControlName=\"dateValue\"></eo-date>\n</form>\n\n<div class=\"errors\" *ngIf=\"rangeForm.invalid\">\n <div class=\"err-msg\" translate>eo.form.property.date.invalid</div>\n <eo-icon class=\"button\" [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"reset()\"></eo-icon>\n</div>\n", styles: [".eo-datetime-range{display:flex;flex-flow:row nowrap;align-items:stretch;gap:2px}.eo-datetime-range yvc-dropdown{border-radius:2px;outline:1px solid rgba(0,0,0,.2);background-color:var(--list-item-hover-background)}.eo-datetime-range yvc-dropdown:hover{background-color:var(--list-item-selected-background)}.eo-datetime-range eo-date{flex:1 1 auto}.err-msg{color:var(--color-error);margin:calc(var(--app-pane-padding) / 4) 0;padding:calc(var(--app-pane-padding) / 4)}.errors{display:flex;align-items:center;justify-content:space-between;gap:.5em}.errors .err-msg:before{content:\"!\";padding:0 calc(var(--app-pane-padding) / 4)}.errors eo-icon{color:var(--color-error);width:18px;height:18px}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i5.EoIconComponent, selector: "eo-icon", inputs: ["objectType", "iconId", "iconSrc", "badge", "iconTitle"] }, { kind: "component", type: i6.Dropdown, selector: "yvc-dropdown", inputs: ["options", "filter", "disabled", "multiple", "disableClearButton"] }, { kind: "component", type: i7.DateComponent, selector: "eo-date", inputs: ["withTime", "readonly", "onlyFutureDates"] }] }); }
306
+ ], ngImport: i0, template: "<form class=\"eo-datetime-range\" [formGroup]=\"rangeForm\">\n <eo-date *ngIf=\"searchOption === 'gtelte'\" [withTime]=\"withTime\"\n formControlName=\"dateValueFrom\"></eo-date>\n\n <yvc-dropdown [ngModel]=\"searchOption\" (ngModelChange)=\"onValueChange($event)\" [ngModelOptions]=\"{standalone: true}\"\n [options]=\"availableSearchOptions\"></yvc-dropdown>\n \n @if(searchOption === 'mr'){\n <eo-codesystem formControlName=\"datePickerValue\" [pickerTitle]=\"datePicker.title\"\n [emptyMessage]=\"'eo.workspace.widget.stored.queries.list.notAvailable'\"\n [codesystem]=\"datePicker.codesystem\"></eo-codesystem>\n }\n @else{\n <eo-date [withTime]=\"withTime\" formControlName=\"dateValue\"></eo-date>\n }\n</form>\n\n<div class=\"errors\" *ngIf=\"rangeForm.invalid\">\n <div class=\"err-msg\" translate>eo.form.property.date.invalid</div>\n <eo-icon class=\"button\" [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"reset()\"></eo-icon>\n</div>\n", styles: [".eo-datetime-range{display:flex;flex-flow:row nowrap;align-items:stretch;gap:2px}.eo-datetime-range yvc-dropdown{border-radius:2px;outline:1px solid rgba(0,0,0,.2);background-color:var(--list-item-hover-background)}.eo-datetime-range yvc-dropdown:hover{background-color:var(--list-item-selected-background)}.eo-datetime-range eo-date{flex:1 1 auto}.err-msg{color:var(--color-error);margin:calc(var(--app-pane-padding) / 4) 0;padding:calc(var(--app-pane-padding) / 4)}.errors{display:flex;align-items:center;justify-content:space-between;gap:.5em}.errors .err-msg:before{content:\"!\";padding:0 calc(var(--app-pane-padding) / 4)}.errors eo-icon{color:var(--color-error);width:18px;height:18px}eo-codesystem{width:100%}::ng-deep yvc-dropdown[aria-expanded=true],::ng-deep .yvc-dropdown:focus{background-color:var(--color-primary-4)!important}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i5.EoIconComponent, selector: "eo-icon", inputs: ["objectType", "iconId", "iconSrc", "badge", "iconTitle"] }, { kind: "component", type: i6.Dropdown, selector: "yvc-dropdown", inputs: ["options", "filter", "disabled", "multiple", "disableClearButton"] }, { kind: "component", type: i7.CodesystemComponent, selector: "eo-codesystem", inputs: ["situation", "pickerTitle", "placeholder", "codesystem", "multiselect", "readonly", "inputStyleClass", "emptyMessage", "filterFunction", "disablingFilterFunction"] }, { kind: "component", type: i8.DateComponent, selector: "eo-date", inputs: ["withTime", "readonly", "onlyFutureDates"] }] }); }
170
307
  }
171
308
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: DatetimeRangeComponent, decorators: [{
172
309
  type: Component,
@@ -183,15 +320,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImpor
183
320
  }
184
321
  ], host: {
185
322
  class: 'form-element-range'
186
- }, template: "<form class=\"eo-datetime-range\" [formGroup]=\"rangeForm\">\n <eo-date *ngIf=\"searchOption === 'gtelte'\" [withTime]=\"withTime\"\n formControlName=\"dateValueFrom\"></eo-date>\n\n <yvc-dropdown [ngModel]=\"searchOption\" (ngModelChange)=\"onValueChange($event)\" [ngModelOptions]=\"{standalone: true}\"\n [options]=\"availableSearchOptions\"></yvc-dropdown>\n\n <eo-date [withTime]=\"withTime\" formControlName=\"dateValue\"></eo-date>\n</form>\n\n<div class=\"errors\" *ngIf=\"rangeForm.invalid\">\n <div class=\"err-msg\" translate>eo.form.property.date.invalid</div>\n <eo-icon class=\"button\" [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"reset()\"></eo-icon>\n</div>\n", styles: [".eo-datetime-range{display:flex;flex-flow:row nowrap;align-items:stretch;gap:2px}.eo-datetime-range yvc-dropdown{border-radius:2px;outline:1px solid rgba(0,0,0,.2);background-color:var(--list-item-hover-background)}.eo-datetime-range yvc-dropdown:hover{background-color:var(--list-item-selected-background)}.eo-datetime-range eo-date{flex:1 1 auto}.err-msg{color:var(--color-error);margin:calc(var(--app-pane-padding) / 4) 0;padding:calc(var(--app-pane-padding) / 4)}.errors{display:flex;align-items:center;justify-content:space-between;gap:.5em}.errors .err-msg:before{content:\"!\";padding:0 calc(var(--app-pane-padding) / 4)}.errors eo-icon{color:var(--color-error);width:18px;height:18px}\n"] }]
323
+ }, template: "<form class=\"eo-datetime-range\" [formGroup]=\"rangeForm\">\n <eo-date *ngIf=\"searchOption === 'gtelte'\" [withTime]=\"withTime\"\n formControlName=\"dateValueFrom\"></eo-date>\n\n <yvc-dropdown [ngModel]=\"searchOption\" (ngModelChange)=\"onValueChange($event)\" [ngModelOptions]=\"{standalone: true}\"\n [options]=\"availableSearchOptions\"></yvc-dropdown>\n \n @if(searchOption === 'mr'){\n <eo-codesystem formControlName=\"datePickerValue\" [pickerTitle]=\"datePicker.title\"\n [emptyMessage]=\"'eo.workspace.widget.stored.queries.list.notAvailable'\"\n [codesystem]=\"datePicker.codesystem\"></eo-codesystem>\n }\n @else{\n <eo-date [withTime]=\"withTime\" formControlName=\"dateValue\"></eo-date>\n }\n</form>\n\n<div class=\"errors\" *ngIf=\"rangeForm.invalid\">\n <div class=\"err-msg\" translate>eo.form.property.date.invalid</div>\n <eo-icon class=\"button\" [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"reset()\"></eo-icon>\n</div>\n", styles: [".eo-datetime-range{display:flex;flex-flow:row nowrap;align-items:stretch;gap:2px}.eo-datetime-range yvc-dropdown{border-radius:2px;outline:1px solid rgba(0,0,0,.2);background-color:var(--list-item-hover-background)}.eo-datetime-range yvc-dropdown:hover{background-color:var(--list-item-selected-background)}.eo-datetime-range eo-date{flex:1 1 auto}.err-msg{color:var(--color-error);margin:calc(var(--app-pane-padding) / 4) 0;padding:calc(var(--app-pane-padding) / 4)}.errors{display:flex;align-items:center;justify-content:space-between;gap:.5em}.errors .err-msg:before{content:\"!\";padding:0 calc(var(--app-pane-padding) / 4)}.errors eo-icon{color:var(--color-error);width:18px;height:18px}eo-codesystem{width:100%}::ng-deep yvc-dropdown[aria-expanded=true],::ng-deep .yvc-dropdown:focus{background-color:var(--color-primary-4)!important}\n"] }]
187
324
  }], ctorParameters: () => [{ type: i1.UntypedFormBuilder }, { type: i2.TranslateService }], propDecorators: { withTime: [{
188
325
  type: Input
189
326
  }], pickerTitle: [{
190
327
  type: Input
191
328
  }], operator: [{
192
329
  type: Input
330
+ }], situation: [{
331
+ type: Input
193
332
  }], swapInputs: [{
194
333
  type: HostBinding,
195
334
  args: ['class.swap']
196
335
  }] } });
197
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUtcmFuZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvZm9ybS1lbGVtZW50cy9kYXRldGltZS1yYW5nZS9kYXRldGltZS1yYW5nZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2VvLWZyYW1ld29yay9mb3JtLWVsZW1lbnRzL2RhdGV0aW1lLXJhbmdlL2RhdGV0aW1lLXJhbmdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFVLFVBQVUsRUFBRSxXQUFXLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQU1MLGlCQUFpQixFQUNqQixhQUFhLEVBQ2QsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsVUFBVSxFQUFFLFlBQVksRUFBbUIsTUFBTSxjQUFjLENBQUM7QUFDeEUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1EQUFtRCxDQUFDOzs7Ozs7Ozs7QUFzQmpGLE1BQU0sT0FBTyxzQkFBc0I7SUE0QmpDLFlBQW9CLEVBQXNCLEVBQVMsU0FBMkI7UUFBMUQsT0FBRSxHQUFGLEVBQUUsQ0FBb0I7UUFBUyxjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQXhCckUsYUFBUSxHQUFHLElBQUksQ0FBQztRQUVFLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFFdkQsY0FBUyxHQUFjLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ25DLFNBQVMsRUFBRSxFQUFFO1lBQ2IsYUFBYSxFQUFFLEVBQUU7U0FDbEIsQ0FBQyxDQUFDO1FBRUssWUFBTyxHQUFHLElBQUksQ0FBQztRQUV2QiwrQkFBK0I7UUFDeEIsMkJBQXNCLEdB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SSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3BDLENBQUM7OEdBektVLHNCQUFzQjtrR0FBdEIsc0JBQXNCLGlPQWhCdEI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHNCQUFzQixDQUFDO2dCQUNyRCxLQUFLLEVBQUUsSUFBSTthQUNaO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLGFBQWE7Z0JBQ3RCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsc0JBQXNCLENBQUM7Z0JBQ3JELEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRiwwQkM3QkgsK3JCQWNBOzsyRkRvQmEsc0JBQXNCO2tCQXBCbEMsU0FBUzsrQkFDRSxtQkFBbUIsYUFHbEI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsdUJBQXVCLENBQUM7NEJBQ3JELEtBQUssRUFBRSxJQUFJO3lCQUNaO3dCQUNEOzRCQUNFLE9BQU8sRUFBRSxhQUFhOzRCQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSx1QkFBdUIsQ0FBQzs0QkFDckQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0YsUUFDSzt3QkFDSixLQUFLLEVBQUUsb0JBQW9CO3FCQUM1QjtzSEFJUSxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFFcUIsVUFBVTtzQkFBcEMsV0FBVzt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIElucHV0LCBPbkluaXQsIGZvcndhcmRSZWYsIEhvc3RCaW5kaW5nfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEZvcm1Hcm91cCxcbiAgVW50eXBlZEZvcm1Db250cm9sLFxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgVmFsaWRhdG9yLFxuICBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxuICBOR19WQUxJREFUT1JTXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7dGFrZVVudGlsRGVzdHJveWVkfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge1JhbmdlVmFsdWUsIFNlYXJjaEZpbHRlciwgVHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQGVvLXNkay9jb3JlJztcbmltcG9ydCB7TG9jYWxlRGF0ZVBpcGV9IGZyb20gJy4uLy4uLy4uL2VvLWZyYW1ld29yay1jb3JlL3BpcGVzL2xvY2FsZS1kYXRlLnBpcGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdlby1kYXRldGltZS1yYW5nZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRldGltZS1yYW5nZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGV0aW1lLXJhbmdlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0ZXRpbWVSYW5nZUNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGV0aW1lUmFuZ2VDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfVxuICBdLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdmb3JtLWVsZW1lbnQtcmFuZ2UnXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgRGF0ZXRpbWVSYW5nZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciB7XG5cbiAgQElucHV0KCkgd2l0aFRpbWU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHBpY2tlclRpdGxlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG9wZXJhdG9yID0gJ2VxJztcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnN3YXAnKSBzd2FwSW5wdXRzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcmFuZ2VGb3JtOiBGb3JtR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICBkYXRlVmFsdWU6IFtdLFxuICAgIGRhdGVWYWx1ZUZyb206IFtdXG4gIH0pO1xuICB2YWx1ZTogUmFuZ2VWYWx1ZTtcbiAgcHJpdmF0ZSBpc1ZhbGlkID0gdHJ1ZTtcblxuICAvLyBvcHRpb25zIGZvciBzZWFyY2ggc2l0dWF0aW9uXG4gIHB1YmxpYyBhdmFpbGFibGVTZWFyY2hPcHRpb25zID0gW1xuICAgIHtsYWJlbDogUmFuZ2VWYWx1ZS5nZXRPcGVyYXRvckxhYmVsKFNlYXJjaEZpbHRlci5PUEVSQVRPUi5FUVVBTCksIHZhbHVlOiBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuRVFVQUx9LFxuICAgIHtsYWJlbDogUmFuZ2VWYWx1ZS5nZXRPcGVyYXRvckxhYmVsKFNlYXJjaEZpbHRlci5PUEVSQVRPUi5HUkVBVEVSX09SX0VRVUFMKSwgdmFsdWU6IFNlYXJjaEZpbHRlci5PUEVSQVRPUi5HUkVBVEVSX09SX0VRVUFMfSxcbiAgICB7bGFiZWw6IFJhbmdlVmFsdWUuZ2V0T3BlcmF0b3JMYWJlbChTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuTEVTU19PUl9FUVVBTCksIHZhbHVlOiBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuTEVTU19PUl9FUVVBTH0sXG4gICAge2xhYmVsOiBSYW5nZVZhbHVlLmdldE9wZXJhdG9yTGFiZWwoU2VhcmNoRmlsdGVyLk9QRVJBVE9SLklOVEVSVkFMX0lOQ0xVREVfQk9USCksIHZhbHVlOiBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuSU5URVJWQUxfSU5DTFVERV9CT1RIfVxuICBdO1xuICAvLyB0aGUgc2VsZWN0ZWQgc2VhcmNoIG9wdGlvblxuICBwdWJsaWMgc2VhcmNoT3B0aW9uOiBzdHJpbmc7XG4gIGRhdGVQaXBlOiBMb2NhbGVEYXRlUGlwZTtcbiAgcHJldmlvdXNEYXRlVmFsdWUgPSBudWxsO1xuICBwcmV2aW91c0RhdGVWYWx1ZUZyb20gPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmI6IFVudHlwZWRGb3JtQnVpbGRlciwgcHVibGljIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSkge1xuICAgIHRoaXMuZGF0ZVBpcGUgPSBuZXcgTG9jYWxlRGF0ZVBpcGUodHJhbnNsYXRlKTtcbiAgICB0aGlzLnJhbmdlRm9ybS52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpXG4gICAgKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vblZhbHVlQ2hhbmdlKCkpO1xuICB9XG5cbiAgcHJvcGFnYXRlQ2hhbmdlID0gKF86IGFueSkgPT4geyB9XG4gIHZhbGlkYXRpb25DaGFuZ2UgPSAoKSA9PiB7IH07XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogUmFuZ2VWYWx1ZSk6IHZvaWQge1xuICAgIHRoaXMuX3NldFZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlPyhmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMudmFsaWRhdGlvbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5fc2V0VmFsdWUobmV3IFJhbmdlVmFsdWUoXG4gICAgICB0aGlzLnNlYXJjaE9wdGlvbixcbiAgICAgIG51bGwsIG51bGxcbiAgICApKTtcbiAgfVxuXG4gIG9uVmFsdWVDaGFuZ2Uoc2VhcmNoT3B0aW9uID0gdGhpcy5zZWFyY2hPcHRpb24pIHtcbiAgICBsZXQgZGF0ZVZhbHVlID0gdGhpcy5mb3JtYXREYXRlKHRoaXMucmFuZ2VGb3JtLmdldCgnZGF0ZVZhbHVlJykudmFsdWUpO1xuICAgIGlmIChzZWFyY2hPcHRpb24gPT09IFNlYXJjaEZpbHRlci5PUEVSQVRPUi5JTlRFUlZBTF9JTkNMVURFX0JPVEgpIHtcbiAgICAgIGNvbnN0IGRhdGVWYWx1ZUZyb20gPSB0aGlzLmZvcm1hdERhdGUodGhpcy5yYW5nZUZvcm0uZ2V0KCdkYXRlVmFsdWVGcm9tJykudmFsdWUpO1xuXG4gICAgICBpZiAoZGF0ZVZhbHVlRnJvbSAmJiBkYXRlVmFsdWUpIHtcbiAgICAgICAgdGhpcy5pc1ZhbGlkID0gdGhpcy5yYW5nZUZvcm0udmFsaWQgJiYgISFkYXRlVmFsdWVGcm9tICYmICEhZGF0ZVZhbHVlO1xuICAgICAgICB0aGlzLnN3YXBJbnB1dHMgPSBkYXRlVmFsdWVGcm9tICYmIGRhdGVWYWx1ZSAmJiBkYXRlVmFsdWVGcm9tID4gZGF0ZVZhbHVlO1xuICAgICAgICB0aGlzLl9zZXRWYWx1ZShuZXcgUmFuZ2VWYWx1ZShcbiAgICAgICAgICBzZWFyY2hPcHRpb24sXG4gICAgICAgICAgdGhpcy5zd2FwSW5wdXRzID8gZGF0ZVZhbHVlIDogZGF0ZVZhbHVlRnJvbSxcbiAgICAgICAgICB0aGlzLnN3YXBJbnB1dHMgPyBkYXRlVmFsdWVGcm9tIDogZGF0ZVZhbHVlXG4gICAgICAgICkpO1xuICAgICAgICBpZiAodGhpcy5wcmV2aW91c0RhdGVWYWx1ZSAhPT0gZGF0ZVZhbHVlIHx8IHRoaXMucHJldmlvdXNEYXRlVmFsdWVGcm9tICE9PSBkYXRlVmFsdWVGcm9tIHx8IHRoaXMuc2VhcmNoT3B0aW9uICE9PSBzZWFyY2hPcHRpb24pIHtcbiAgICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgICB0aGlzLnByZXZpb3VzRGF0ZVZhbHVlID0gZGF0ZVZhbHVlO1xuICAgICAgICAgIHRoaXMucHJldmlvdXNEYXRlVmFsdWVGcm9tID0gZGF0ZVZhbHVlRnJvbTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN3YXBJbnB1dHMgPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNWYWxpZCA9IHRoaXMucmFuZ2VGb3JtLnZhbGlkO1xuICAgICAgaWYgKHNlYXJjaE9wdGlvbiA9PT0gU2VhcmNoRmlsdGVyLk9QRVJBVE9SLkxFU1NfT1JfRVFVQUwgJiYgZGF0ZVZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG5ld0RhdGVWYWx1ZSA9IG5ldyBEYXRlKGRhdGVWYWx1ZSk7XG4gICAgICAgIGlmICghdGhpcy53aXRoVGltZSkgbmV3RGF0ZVZhbHVlLnNldEhvdXJzKDIzLCA1OSk7XG4gICAgICAgIGRhdGVWYWx1ZSA9IG5ld0RhdGVWYWx1ZS50b0lTT1N0cmluZygpO1xuICAgICAgfSBlbHNlIGlmIChzZWFyY2hPcHRpb24gPT09IFNlYXJjaEZpbHRlci5PUEVSQVRPUi5HUkVBVEVSX09SX0VRVUFMICYmIGRhdGVWYWx1ZSkge1xuICAgICAgICBjb25zdCBuZXdEYXRlVmFsdWUgPSBuZXcgRGF0ZShkYXRlVmFsdWUpO1xuICAgICAgICBpZiAoIXRoaXMud2l0aFRpbWUpIG5ld0RhdGVWYWx1ZS5zZXRIb3VycygwLCAwKTtcbiAgICAgICAgZGF0ZVZhbHVlID0gbmV3RGF0ZVZhbHVlLnRvSVNPU3RyaW5nKCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc1ZhbGlkKSB7XG4gICAgICAgIGNvbnN0IG9sZFNlYXJjaE9wdGlvbiA9IHRoaXMuc2VhcmNoT3B0aW9uO1xuICAgICAgICB0aGlzLl9zZXRWYWx1ZSghZGF0ZVZhbHVlID8gbnVsbCA6IG5ldyBSYW5nZVZhbHVlKHNlYXJjaE9wdGlvbiwgZGF0ZVZhbHVlKSk7XG4gICAgICAgIGlmICh0aGlzLnByZXZpb3VzRGF0ZVZhbHVlICE9PSBkYXRlVmFsdWUgfHwgb2xkU2VhcmNoT3B0aW9uICE9PSBzZWFyY2hPcHRpb24pIHtcbiAgICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgICB0aGlzLnByZXZpb3VzRGF0ZVZhbHVlID0gZGF0ZVZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2VhcmNoT3B0aW9uID0gc2VhcmNoT3B0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0VmFsdWUodmFsdWU6IFJhbmdlVmFsdWUsIGVtaXRFdmVudCA9IGZhbHNlKSB7XG4gICAgaWYgKEpTT04uc3RyaW5naWZ5KHRoaXMudmFsdWUpID09PSBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpIHJldHVybjtcbiAgICBpZiAodmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBSYW5nZVZhbHVlICYmICh2YWx1ZS5maXJzdFZhbHVlIHx8IHZhbHVlLnNlY29uZFZhbHVlKSkge1xuXG4gICAgICAvLyBUaGlzIHByZXZlbnRzIHRoZSB2YWx1ZSBjaGFuZ2UgZXZlbnQgZnJvbSBiZWluZyBmaXJlZCB0d2ljZSBkdXJpbmcgaW5pdGlhbGl6YXRpb24gb3Igd2hlbiB0aGVyZSBpcyBhbHJlYWR5IGEgdmFsdWVcbiAgICAgIGlmICh0aGlzLnJhbmdlRm9ybS5wcmlzdGluZSAmJiB0aGlzLnZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT0gdGhpcy52YWx1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZWID0gdmFsdWUuZmlyc3RWYWx1ZSA/IG5ldyBEYXRlKHZhbHVlLmZpcnN0VmFsdWUpIDogbnVsbDtcbiAgICAgIGNvbnN0IHNWID0gdmFsdWUuc2Vjb25kVmFsdWUgPyBuZXcgRGF0ZSh2YWx1ZS5zZWNvbmRWYWx1ZSkgOiBudWxsO1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5zZWFyY2hPcHRpb24gPSB2YWx1ZS5vcGVyYXRvciB8fCBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuRVFVQUw7XG5cbiAgICAgIGlmICghdmFsdWUuc2Vjb25kVmFsdWUpIHtcbiAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KHRoaXMucmFuZ2VGb3JtLnZhbHVlLmRhdGVWYWx1ZSkgIT09IEpTT04uc3RyaW5naWZ5KGZWKSkge1xuICAgICAgICAgIHRoaXMucmFuZ2VGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgZGF0ZVZhbHVlOiBmVlxuICAgICAgICAgIH0sIHtlbWl0RXZlbnR9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KHRoaXMucmFuZ2VGb3JtLnZhbHVlLmRhdGVWYWx1ZUZyb20pICE9PSBKU09OLnN0cmluZ2lmeShmVikpIHtcbiAgICAgICAgICB0aGlzLnJhbmdlRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgICAgIGRhdGVWYWx1ZUZyb206IGZWXG4gICAgICAgICAgfSwge2VtaXRFdmVudH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChKU09OLnN0cmluZ2lmeSh0aGlzLnJhbmdlRm9ybS52YWx1ZS5kYXRlVmFsdWUpICE9PSBKU09OLnN0cmluZ2lmeShzVikpIHtcbiAgICAgICAgICB0aGlzLnJhbmdlRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgICAgIGRhdGVWYWx1ZTogc1ZcbiAgICAgICAgICB9LCB7ZW1pdEV2ZW50fSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbHVlID0gbnVsbDtcbiAgICAgIHRoaXMucmFuZ2VGb3JtLnJlc2V0KCk7XG4gICAgfVxuICB9XG5cbiAgZm9ybWF0RGF0ZSh2YWx1ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuICF2YWx1ZSA/IG51bGwgOlxuICAgICAgdGhpcy53aXRoVGltZSA/IHZhbHVlLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgnOjAwLjAwMCcsICcnKSA6IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHZhbHVlLCAneXl5eS1NTS1kZCcpO1xuICB9XG5cbiAgLy8gcmV0dXJucyBudWxsIHdoZW4gdmFsaWQgZWxzZSB0aGUgdmFsaWRhdGlvbiBvYmplY3RcbiAgcHVibGljIHZhbGlkYXRlKGM6IFVudHlwZWRGb3JtQ29udHJvbCkge1xuXG4gICAgbGV0IGVycjtcbiAgICBpZiAodGhpcy5zZWFyY2hPcHRpb24gPT09IFNlYXJjaEZpbHRlci5PUEVSQVRPUi5FUVVBTCkge1xuICAgICAgZXJyID0ge1xuICAgICAgICBkYXRlY29udHJvbDoge1xuICAgICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXJyID0ge1xuICAgICAgICBkYXRlcmFuZ2U6IHtcbiAgICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiAodGhpcy5pc1ZhbGlkKSA/IG51bGwgOiBlcnI7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNlYXJjaE9wdGlvbiA9IHRoaXMub3BlcmF0b3I7XG4gIH1cbn1cbiIsIjxmb3JtIGNsYXNzPVwiZW8tZGF0ZXRpbWUtcmFuZ2VcIiBbZm9ybUdyb3VwXT1cInJhbmdlRm9ybVwiPlxuICA8ZW8tZGF0ZSAqbmdJZj1cInNlYXJjaE9wdGlvbiA9PT0gJ2d0ZWx0ZSdcIiBbd2l0aFRpbWVdPVwid2l0aFRpbWVcIlxuICAgIGZvcm1Db250cm9sTmFtZT1cImRhdGVWYWx1ZUZyb21cIj48L2VvLWRhdGU+XG5cbiAgPHl2Yy1kcm9wZG93biBbbmdNb2RlbF09XCJzZWFyY2hPcHRpb25cIiAobmdNb2RlbENoYW5nZSk9XCJvblZhbHVlQ2hhbmdlKCRldmVudClcIiBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCJcbiAgICBbb3B0aW9uc109XCJhdmFpbGFibGVTZWFyY2hPcHRpb25zXCI+PC95dmMtZHJvcGRvd24+XG5cbiAgPGVvLWRhdGUgW3dpdGhUaW1lXT1cIndpdGhUaW1lXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGF0ZVZhbHVlXCI+PC9lby1kYXRlPlxuPC9mb3JtPlxuXG48ZGl2IGNsYXNzPVwiZXJyb3JzXCIgKm5nSWY9XCJyYW5nZUZvcm0uaW52YWxpZFwiPlxuICA8ZGl2IGNsYXNzPVwiZXJyLW1zZ1wiIHRyYW5zbGF0ZT5lby5mb3JtLnByb3BlcnR5LmRhdGUuaW52YWxpZDwvZGl2PlxuICA8ZW8taWNvbiBjbGFzcz1cImJ1dHRvblwiIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2NsZWFyLnN2ZydcIiAoY2xpY2spPVwicmVzZXQoKVwiPjwvZW8taWNvbj5cbjwvZGl2PlxuIl19
336
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUtcmFuZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvZm9ybS1lbGVtZW50cy9kYXRldGltZS1yYW5nZS9kYXRldGltZS1yYW5nZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2VvLWZyYW1ld29yay9mb3JtLWVsZW1lbnRzL2RhdGV0aW1lLXJhbmdlL2RhdGV0aW1lLXJhbmdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFVLFVBQVUsRUFBRSxXQUFXLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQU1MLGlCQUFpQixFQUNqQixhQUFhLEVBQ2QsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsVUFBVSxFQUFFLFlBQVksRUFBbUIsTUFBTSxjQUFjLENBQUM7QUFDeEUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1EQUFtRCxDQUFDOzs7Ozs7Ozs7O0FBc0JqRixNQUFNLE9BQU8sc0JBQXNCO0lBcUNqQyxZQUFvQixFQUFzQixFQUNqQyxTQUEyQjtRQURoQixPQUFFLEdBQUYsRUFBRSxDQUFvQjtRQUNqQyxjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQWxDM0IsYUFBUSxHQUFHLElBQUksQ0FBQztRQUlFLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFFOUMsY0FBUyxHQUFjLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ25DLFNBQVMsRUFBRSxFQUFFO1lBQ2IsYUFBYSxFQUFFLEVBQUU7WUFDakIsZUFBZSxFQUFFLEVBQUU7U0FDcEIsQ0FBQyxDQUFDO1FBRUssWUFBTyxHQUFHLElBQUksQ0FBQztRQUV2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Q0FBQyxRQUFRLENBQUM7SUFDcEMsQ0FBQzs4R0FqWFUsc0JBQXNCO2tHQUF0QixzQkFBc0IseVBBaEJ0QjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsc0JBQXNCLENBQUM7Z0JBQ3JELEtBQUssRUFBRSxJQUFJO2FBQ1o7WUFDRDtnQkFDRSxPQUFPLEVBQUUsYUFBYTtnQkFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztnQkFDckQsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGLDBCQzdCSCxnL0JBcUJBOzsyRkRhYSxzQkFBc0I7a0JBcEJsQyxTQUFTOytCQUNFLG1CQUFtQixhQUdsQjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSx1QkFBdUIsQ0FBQzs0QkFDckQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7d0JBQ0Q7NEJBQ0UsT0FBTyxFQUFFLGFBQWE7NEJBQ3RCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHVCQUF1QixDQUFDOzRCQUNyRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRixRQUNLO3dCQUNKLEtBQUssRUFBRSxvQkFBb0I7cUJBQzVCO3NIQUlRLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR3FCLFVBQVU7c0JBQXBDLFdBQVc7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBmb3J3YXJkUmVmLCBIb3N0QmluZGluZ30gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBGb3JtR3JvdXAsXG4gIFVudHlwZWRGb3JtQ29udHJvbCxcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIFZhbGlkYXRvcixcbiAgVW50eXBlZEZvcm1CdWlsZGVyLFxuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgTkdfVkFMSURBVE9SU1xufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge3Rha2VVbnRpbERlc3Ryb3llZH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtSYW5nZVZhbHVlLCBTZWFyY2hGaWx0ZXIsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0Blby1zZGsvY29yZSc7XG5pbXBvcnQge0xvY2FsZURhdGVQaXBlfSBmcm9tICcuLi8uLi8uLi9lby1mcmFtZXdvcmstY29yZS9waXBlcy9sb2NhbGUtZGF0ZS5waXBlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZW8tZGF0ZXRpbWUtcmFuZ2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZXRpbWUtcmFuZ2UuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRldGltZS1yYW5nZS5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGV0aW1lUmFuZ2VDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRldGltZVJhbmdlQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH1cbiAgXSxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnZm9ybS1lbGVtZW50LXJhbmdlJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIERhdGV0aW1lUmFuZ2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3Ige1xuXG4gIEBJbnB1dCgpIHdpdGhUaW1lOiBib29sZWFuO1xuICBASW5wdXQoKSBwaWNrZXJUaXRsZTogc3RyaW5nO1xuICBASW5wdXQoKSBvcGVyYXRvciA9ICdlcSc7XG4gIEBJbnB1dCgpIHNpdHVhdGlvbjogc3RyaW5nO1xuXG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zd2FwJykgc3dhcElucHV0cyA9IGZhbHNlO1xuXG4gIHJhbmdlRm9ybTogRm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XG4gICAgZGF0ZVZhbHVlOiBbXSxcbiAgICBkYXRlVmFsdWVGcm9tOiBbXSxcbiAgICBkYXRlUGlja2VyVmFsdWU6IFtdXG4gIH0pO1xuICB2YWx1ZTogUmFuZ2VWYWx1ZTtcbiAgcHJpdmF0ZSBpc1ZhbGlkID0gdHJ1ZTtcblxuICAvLyBvcHRpb25zIGZvciBzZWFyY2ggc2l0dWF0aW9uXG4gIHB1YmxpYyBhdmFpbGFibGVTZWFyY2hPcHRpb25zID0gW1xuICAgIHtsYWJlbDogUmFuZ2VWYWx1ZS5nZXRPcGVyYXRvckxhYmVsKFNlYXJjaEZpbHRlci5PUEVSQVRPUi5FUVVBTCksIHZhbHVlOiBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuRVFVQUx9LFxuICAgIHtsYWJlbDogUmFuZ2VWYWx1ZS5nZXRPcGVyYXRvckxhYmVsKFNlYXJjaEZpbHRlci5PUEVSQVRPUi5HUkVBVEVSX09SX0VRVUFMKSwgdmFsdWU6IFNlYXJjaEZpbHRlci5PUEVSQVRPUi5HUkVBVEVSX09SX0VRVUFMfSxcbiAgICB7bGFiZWw6IFJhbmdlVmFsdWUuZ2V0T3BlcmF0b3JMYWJlbChTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuTEVTU19PUl9FUVVBTCksIHZhbHVlOiBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuTEVTU19PUl9FUVVBTH0sXG4gICAge2xhYmVsOiBSYW5nZVZhbHVlLmdldE9wZXJhdG9yTGFiZWwoU2VhcmNoRmlsdGVyLk9QRVJBVE9SLklOVEVSVkFMX0lOQ0xVREVfQk9USCksIHZhbHVlOiBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuSU5URVJWQUxfSU5DTFVERV9CT1RIfSxcbiAgICB7bGFiZWw6IFJhbmdlVmFsdWUuZ2V0T3BlcmF0b3JMYWJlbChTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuTU9SRSksIHZhbHVlOiBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuTU9SRX1cbiAgXTtcblxuICAvLyB0aGUgc2VsZWN0ZWQgc2VhcmNoIG9wdGlvblxuICBwdWJsaWMgc2VhcmNoT3B0aW9uOiBzdHJpbmc7XG4gIGRhdGVQaXBlOiBMb2NhbGVEYXRlUGlwZTtcbiAgcHJldmlvdXNEYXRlVmFsdWUgPSBudWxsO1xuICBwcmV2aW91c0RhdGVWYWx1ZUZyb20gPSBudWxsO1xuICBkYXRlUGlja2VyID0ge1xuICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5zZWFyY2guYWdnLnRpbWUuc3BhbicpLFxuICAgIGNvZGVzeXN0ZW06IG51bGwsXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmYjogVW50eXBlZEZvcm1CdWlsZGVyLFxuICAgIHB1YmxpYyB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICkge1xuICAgIHRoaXMuZGF0ZVBpcGUgPSBuZXcgTG9jYWxlRGF0ZVBpcGUodHJhbnNsYXRlKTtcbiAgICB0aGlzLnJhbmdlRm9ybS52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpXG4gICAgKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vblZhbHVlQ2hhbmdlKCkpO1xuICB9XG5cbiAgcHJvcGFnYXRlQ2hhbmdlID0gKF86IGFueSkgPT4geyB9O1xuICB2YWxpZGF0aW9uQ2hhbmdlID0gKCkgPT4geyB9O1xuXG4gIHdyaXRlVmFsdWUodmFsdWU6IFJhbmdlVmFsdWUpOiB2b2lkIHtcbiAgICB0aGlzLl9zZXRWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICBvblNlYXJjaFNpdHVhdGlvbigpIHtcbiAgICBpZiAodGhpcy5zaXR1YXRpb24gIT09ICdTRUFSQ0gnKSB7XG4gICAgICB0aGlzLmF2YWlsYWJsZVNlYXJjaE9wdGlvbnMgPSB0aGlzLmF2YWlsYWJsZVNlYXJjaE9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiBvcHRpb24udmFsdWUgIT09IFNlYXJjaEZpbHRlci5PUEVSQVRPUi5NT1JFKTtcbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZT8oZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLnZhbGlkYXRpb25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMuX3NldFZhbHVlKG5ldyBSYW5nZVZhbHVlKFxuICAgICAgdGhpcy5zZWFyY2hPcHRpb24sXG4gICAgICBudWxsLCBudWxsXG4gICAgKSk7XG4gIH1cblxuICBvblZhbHVlQ2hhbmdlKHNlYXJjaE9wdGlvbiA9IHRoaXMuc2VhcmNoT3B0aW9uKSB7XG4gICAgbGV0IGRhdGVWYWx1ZSA9IHRoaXMuZm9ybWF0RGF0ZSh0aGlzLnJhbmdlRm9ybS5nZXQoJ2RhdGVWYWx1ZScpLnZhbHVlKTtcbiAgICBsZXQgZGF0ZVBpY2tlclZhbHVlID0gdGhpcy5yYW5nZUZvcm0uZ2V0KCdkYXRlUGlja2VyVmFsdWUnKS52YWx1ZTtcblxuICAgIGlmIChzZWFyY2hPcHRpb24gPT09IFNlYXJjaEZpbHRlci5PUEVSQVRPUi5JTlRFUlZBTF9JTkNMVURFX0JPVEgpIHtcbiAgICAgIGNvbnN0IGRhdGVWYWx1ZUZyb20gPSB0aGlzLmZvcm1hdERhdGUodGhpcy5yYW5nZUZvcm0uZ2V0KCdkYXRlVmFsdWVGcm9tJykudmFsdWUpO1xuXG4gICAgICBpZiAoZGF0ZVZhbHVlRnJvbSAmJiBkYXRlVmFsdWUpIHtcbiAgICAgICAgdGhpcy5pc1ZhbGlkID0gdGhpcy5yYW5nZUZvcm0udmFsaWQgJiYgISFkYXRlVmFsdWVGcm9tICYmICEhZGF0ZVZhbHVlO1xuICAgICAgICB0aGlzLnN3YXBJbnB1dHMgPSBkYXRlVmFsdWVGcm9tICYmIGRhdGVWYWx1ZSAmJiBkYXRlVmFsdWVGcm9tID4gZGF0ZVZhbHVlO1xuICAgICAgICB0aGlzLl9zZXRWYWx1ZShuZXcgUmFuZ2VWYWx1ZShcbiAgICAgICAgICBzZWFyY2hPcHRpb24sXG4gICAgICAgICAgdGhpcy5zd2FwSW5wdXRzID8gZGF0ZVZhbHVlIDogZGF0ZVZhbHVlRnJvbSxcbiAgICAgICAgICB0aGlzLnN3YXBJbnB1dHMgPyBkYXRlVmFsdWVGcm9tIDogZGF0ZVZhbHVlXG4gICAgICAgICkpO1xuICAgICAgICBpZiAodGhpcy5wcmV2aW91c0RhdGVWYWx1ZSAhPT0gZGF0ZVZhbHVlIHx8IHRoaXMucHJldmlvdXNEYXRlVmFsdWVGcm9tICE9PSBkYXRlVmFsdWVGcm9tIHx8IHRoaXMuc2VhcmNoT3B0aW9uICE9PSBzZWFyY2hPcHRpb24pIHtcbiAgICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgICB0aGlzLnByZXZpb3VzRGF0ZVZhbHVlID0gZGF0ZVZhbHVlO1xuICAgICAgICAgIHRoaXMucHJldmlvdXNEYXRlVmFsdWVGcm9tID0gZGF0ZVZhbHVlRnJvbTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc2VhcmNoT3B0aW9uID09PSBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuTU9SRSkge1xuICAgICAgdGhpcy5zd2FwSW5wdXRzID0gZmFsc2U7XG4gICAgICB0aGlzLmlzVmFsaWQgPSB0aGlzLnJhbmdlRm9ybS52YWxpZDtcbiAgICAgIGNvbnN0IG9sZFNlYXJjaE9wdGlvbiA9IHRoaXMuc2VhcmNoT3B0aW9uO1xuICAgICAgdGhpcy5fc2V0VmFsdWUoIWRhdGVQaWNrZXJWYWx1ZSA/IG51bGwgOiBuZXcgUmFuZ2VWYWx1ZShzZWFyY2hPcHRpb24sIGRhdGVQaWNrZXJWYWx1ZSkpO1xuXG4gICAgICBpZiAodGhpcy5wcmV2aW91c0RhdGVWYWx1ZSAhPT0gZGF0ZVBpY2tlclZhbHVlIHx8IG9sZFNlYXJjaE9wdGlvbiAhPT0gc2VhcmNoT3B0aW9uKSB7XG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMudmFsdWUpO1xuICAgICAgICB0aGlzLnByZXZpb3VzRGF0ZVZhbHVlID0gZGF0ZVBpY2tlclZhbHVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN3YXBJbnB1dHMgPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNWYWxpZCA9IHRoaXMucmFuZ2VGb3JtLnZhbGlkO1xuICAgICAgaWYgKHNlYXJjaE9wdGlvbiA9PT0gU2VhcmNoRmlsdGVyLk9QRVJBVE9SLkxFU1NfT1JfRVFVQUwgJiYgZGF0ZVZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG5ld0RhdGVWYWx1ZSA9IG5ldyBEYXRlKGRhdGVWYWx1ZSk7XG4gICAgICAgIGlmICghdGhpcy53aXRoVGltZSkge1xuICAgICAgICAgIG5ld0RhdGVWYWx1ZS5zZXRIb3VycygyMywgNTkpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGVWYWx1ZSA9IG5ld0RhdGVWYWx1ZS50b0lTT1N0cmluZygpO1xuICAgICAgfSBlbHNlIGlmIChzZWFyY2hPcHRpb24gPT09IFNlYXJjaEZpbHRlci5PUEVSQVRPUi5HUkVBVEVSX09SX0VRVUFMICYmIGRhdGVWYWx1ZSkge1xuICAgICAgICBjb25zdCBuZXdEYXRlVmFsdWUgPSBuZXcgRGF0ZShkYXRlVmFsdWUpO1xuICAgICAgICBpZiAoIXRoaXMud2l0aFRpbWUpIHtcbiAgICAgICAgICBuZXdEYXRlVmFsdWUuc2V0SG91cnMoMCwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0ZVZhbHVlID0gbmV3RGF0ZVZhbHVlLnRvSVNPU3RyaW5nKCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc1ZhbGlkKSB7XG4gICAgICAgIGNvbnN0IG9sZFNlYXJjaE9wdGlvbiA9IHRoaXMuc2VhcmNoT3B0aW9uO1xuICAgICAgICB0aGlzLl9zZXRWYWx1ZSghZGF0ZVZhbHVlID8gbnVsbCA6IG5ldyBSYW5nZVZhbHVlKHNlYXJjaE9wdGlvbiwgZGF0ZVZhbHVlKSk7XG4gICAgICAgIGlmICh0aGlzLnByZXZpb3VzRGF0ZVZhbHVlICE9PSBkYXRlVmFsdWUgfHwgb2xkU2VhcmNoT3B0aW9uICE9PSBzZWFyY2hPcHRpb24pIHtcbiAgICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgICB0aGlzLnByZXZpb3VzRGF0ZVZhbHVlID0gZGF0ZVZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2VhcmNoT3B0aW9uID0gc2VhcmNoT3B0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0VmFsdWUodmFsdWU6IFJhbmdlVmFsdWUsIGVtaXRFdmVudCA9IGZhbHNlKSB7XG4gICAgdGhpcy5nZXRQbGFjZWhvbGRlckNvZGVzeXN0ZW0oKTtcbiAgICBpZiAoSlNPTi5zdHJpbmdpZnkodGhpcy52YWx1ZSkgPT09IEpTT04uc3RyaW5naWZ5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIFJhbmdlVmFsdWUgJiYgKHZhbHVlLmZpcnN0VmFsdWUgfHwgdmFsdWUuc2Vjb25kVmFsdWUpKSB7XG5cbiAgICAgIC8vIFRoaXMgcHJldmVudHMgdGhlIHZhbHVlIGNoYW5nZSBldmVudCBmcm9tIGJlaW5nIGZpcmVkIHR3aWNlIGR1cmluZyBpbml0aWFsaXphdGlvbiBvciB3aGVuIHRoZXJlIGlzIGFscmVhZHkgYSB2YWx1ZVxuICAgICAgaWYgKHRoaXMucmFuZ2VGb3JtLnByaXN0aW5lICYmIHRoaXMudmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPSB0aGlzLnZhbHVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZlYgPSB2YWx1ZS5maXJzdFZhbHVlID8gbmV3IERhdGUodmFsdWUuZmlyc3RWYWx1ZSkgOiBudWxsO1xuICAgICAgY29uc3Qgc1YgPSB2YWx1ZS5zZWNvbmRWYWx1ZSA/IG5ldyBEYXRlKHZhbHVlLnNlY29uZFZhbHVlKSA6IG51bGw7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG5cbiAgICAgIHRoaXMuc2VhcmNoT3B0aW9uID0gKHZhbHVlLm9wZXJhdG9yID09PSAncmcnID8gJ21yJyA6IHZhbHVlLm9wZXJhdG9yKSB8fCBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuRVFVQUw7XG5cbiAgICAgIGlmICghdmFsdWUuc2Vjb25kVmFsdWUpIHtcbiAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KHRoaXMucmFuZ2VGb3JtLnZhbHVlLmRhdGVWYWx1ZSkgIT09IEpTT04uc3RyaW5naWZ5KGZWKSkge1xuICAgICAgICAgIHRoaXMucmFuZ2VGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgZGF0ZVZhbHVlOiBmVlxuICAgICAgICAgIH0sIHtlbWl0RXZlbnR9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkodGhpcy5yYW5nZUZvcm0udmFsdWUuZGF0ZVBpY2tlclZhbHVlKSAhPT0gSlNPTi5zdHJpbmdpZnkoZlYpKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZS5maXJzdFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmFuZ2VGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgIGRhdGVQaWNrZXJWYWx1ZTogdGhpcy52YWx1ZS5maXJzdFZhbHVlXG4gICAgICAgIH0sIHtlbWl0RXZlbnR9KTtcblxuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkodGhpcy5yYW5nZUZvcm0udmFsdWUuZGF0ZVZhbHVlRnJvbSkgIT09IEpTT04uc3RyaW5naWZ5KGZWKSkge1xuICAgICAgICAgIHRoaXMucmFuZ2VGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgZGF0ZVZhbHVlRnJvbTogZlZcbiAgICAgICAgICB9LCB7ZW1pdEV2ZW50fSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KHRoaXMucmFuZ2VGb3JtLnZhbHVlLmRhdGVWYWx1ZSkgIT09IEpTT04uc3RyaW5naWZ5KHNWKSkge1xuICAgICAgICAgIHRoaXMucmFuZ2VGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgZGF0ZVZhbHVlOiBzVlxuICAgICAgICAgIH0sIHtlbWl0RXZlbnR9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xuICAgICAgdGhpcy5yYW5nZUZvcm0ucmVzZXQoKTtcbiAgICB9XG4gIH1cblxuICBmb3JtYXREYXRlKHZhbHVlOiBEYXRlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gIXZhbHVlID8gbnVsbCA6XG4gICAgICB0aGlzLndpdGhUaW1lID8gdmFsdWUudG9JU09TdHJpbmcoKS5yZXBsYWNlKCc6MDAuMDAwJywgJycpIDogdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odmFsdWUsICd5eXl5LU1NLWRkJyk7XG4gIH1cblxuICBcbiAgZ2V0UGxhY2Vob2xkZXJDb2Rlc3lzdGVtKCkge1xuICAgIGxldCBlbnRyaWVzID0gW1xuICAgICAge1xuICAgICAgICBpZDogJ3llc3RlcmRheScsXG4gICAgICAgIGRlZmF1bHRyZXByZXNlbnRhdGlvbjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAnZW8uc2VhcmNoLmFnZy50aW1lLnllc3RlcmRheScpLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAnZW8uc2VhcmNoLmFnZy50aW1lLnllc3RlcmRheSdcbiAgICAgICAgKSxcbiAgICAgICAgdmFsdWU6ICd5ZXN0ZXJkYXknXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogJ3RvZGF5JyxcbiAgICAgICAgZGVmYXVsdHJlcHJlc2VudGF0aW9uOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdlby5zZWFyY2guYWdnLnRpbWUudG9kYXknKSxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLnNlYXJjaC5hZ2cudGltZS50b2RheSdcbiAgICAgICAgKSxcbiAgICAgICAgdmFsdWU6ICd0b2RheSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiAndG9tb3Jyb3cnLFxuICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLnNlYXJjaC5hZ2cudGltZS50b21vcnJvdycpLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAnZW8uc2VhcmNoLmFnZy50aW1lLnRvbW9ycm93J1xuICAgICAgICApLFxuICAgICAgICB2YWx1ZTogJ3RvbW9ycm93J1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6ICdsYXN0d2VlaycsXG4gICAgICAgIGRlZmF1bHRyZXByZXNlbnRhdGlvbjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAnZW8uc2VhcmNoLmFnZy50aW1lLmxhc3R3ZWVrJyksXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdlby5zZWFyY2guYWdnLnRpbWUubGFzdHdlZWsnXG4gICAgICAgICksXG4gICAgICAgIHZhbHVlOiAnbGFzdHdlZWsnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogJ3RoaXN3ZWVrJyxcbiAgICAgICAgZGVmYXVsdHJlcHJlc2VudGF0aW9uOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdlby5zZWFyY2guYWdnLnRpbWUudGhpc3dlZWsnKSxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLnNlYXJjaC5hZ2cudGltZS50aGlzd2VlaydcbiAgICAgICAgKSxcbiAgICAgICAgdmFsdWU6ICd0aGlzd2VlaydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiAnbmV4dHdlZWsnLFxuICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLnNlYXJjaC5hZ2cudGltZS5uZXh0d2VlaycpLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAnZW8uc2VhcmNoLmFnZy50aW1lLm5leHR3ZWVrJ1xuICAgICAgICApLFxuICAgICAgICB2YWx1ZTogJ25leHR3ZWVrJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6ICdsYXN0bW9udGgnLFxuICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLnNlYXJjaC5hZ2cudGltZS5sYXN0bW9udGgnKSxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLnNlYXJjaC5hZ2cudGltZS5sYXN0bW9udGgnXG4gICAgICAgICksXG4gICAgICAgIHZhbHVlOiAnbGFzdG1vbnRoJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6ICd0aGlzbW9udGgnLFxuICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLnNlYXJjaC5hZ2cudGltZS50aGlzbW9udGgnKSxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLnNlYXJjaC5hZ2cudGltZS50aGlzbW9udGgnXG4gICAgICAgICksXG4gICAgICAgIHZhbHVlOiAndGhpc21vbnRoJ1xuICAgICAgfSxcblxuICAgICAge1xuICAgICAgICBpZDogJ25leHRtb250aCcsXG4gICAgICAgIGRlZmF1bHRyZXByZXNlbnRhdGlvbjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAnZW8uc2VhcmNoLmFnZy50aW1lLm5leHRtb250aCcpLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAnZW8uc2VhcmNoLmFnZy50aW1lLm5leHRtb250aCdcbiAgICAgICAgKSxcbiAgICAgICAgdmFsdWU6ICduZXh0bW9udGgnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogJ3RoaXNxdWFydGVyJyxcbiAgICAgICAgZGVmYXVsdHJlcHJlc2VudGF0aW9uOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdlby5zZWFyY2guYWdnLnRpbWUudGhpc3F1YXJ0ZXInKSxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLnNlYXJjaC5hZ2cudGltZS50aGlzcXVhcnRlcidcbiAgICAgICAgKSxcbiAgICAgICAgdmFsdWU6ICd0aGlzcXVhcnRlcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiAnbGFzdHF1YXJ0ZXInLFxuICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLnNlYXJjaC5hZ2cudGltZS5sYXN0cXVhcnRlcicpLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAnZW8uc2VhcmNoLmFnZy50aW1lLmxhc3RxdWFydGVyJ1xuICAgICAgICApLFxuICAgICAgICB2YWx1ZTogJ2xhc3RxdWFydGVyJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6ICduZXh0cXVhcnRlcicsXG4gICAgICAgIGRlZmF1bHRyZXByZXNlbnRhdGlvbjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAnZW8uc2VhcmNoLmFnZy50aW1lLm5leHRxdWFydGVyJyksXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdlby5zZWFyY2guYWdnLnRpbWUubmV4dHF1YXJ0ZXInXG4gICAgICAgICksXG4gICAgICAgIHZhbHVlOiAnbmV4dHF1YXJ0ZXInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogJ2xhc3R5ZWFyJyxcbiAgICAgICAgZGVmYXVsdHJlcHJlc2VudGF0aW9uOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdlby5zZWFyY2guYWdnLnRpbWUubGFzdHllYXInXG4gICAgICAgICksXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdlby5zZWFyY2guYWdnLnRpbWUubGFzdHllYXInXG4gICAgICAgICksXG4gICAgICAgIHZhbHVlOiAnbGFzdHllYXInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogJ3RoaXN5ZWFyJyxcbiAgICAgICAgZGVmYXVsdHJlcHJlc2VudGF0aW9uOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdlby5zZWFyY2guYWdnLnRpbWUudGhpc3llYXInXG4gICAgICAgICksXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdlby5zZWFyY2guYWdnLnRpbWUudGhpc3llYXInXG4gICAgICAgICksXG4gICAgICAgIHZhbHVlOiAndGhpc3llYXInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogJ25leHR5ZWFyJyxcbiAgICAgICAgZGVmYXVsdHJlcHJlc2VudGF0aW9uOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdlby5zZWFyY2guYWdnLnRpbWUubmV4dHllYXInKSxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLnNlYXJjaC5hZ2cudGltZS5uZXh0eWVhcidcbiAgICAgICAgKSxcbiAgICAgICAgdmFsdWU6ICduZXh0eWVhcidcbiAgICAgIH1cbiAgICBdO1xuICAgIHJldHVybiB0aGlzLmRhdGVQaWNrZXIuY29kZXN5c3RlbSA9IHtcbiAgICAgIGVudHJpZXM6IGVudHJpZXMubWFwKChyZXMpID0+ICh7XG4gICAgICAgIGlkOiByZXMuaWQsXG4gICAgICAgIGxhYmVsOiByZXMubGFiZWwsXG4gICAgICAgIGRlZmF1bHRyZXByZXNlbnRhdGlvbjogcmVzLmRlZmF1bHRyZXByZXNlbnRhdGlvbixcbiAgICAgICAgZGF0YTogcmVzLnZhbHVlXG4gICAgICB9KSksXG4gICAgfTtcbiAgfVxuXG4gIC8vIHJldHVybnMgbnVsbCB3aGVuIHZhbGlkIGVsc2UgdGhlIHZhbGlkYXRpb24gb2JqZWN0XG4gIHB1YmxpYyB2YWxpZGF0ZShjOiBVbnR5cGVkRm9ybUNvbnRyb2wpIHtcbiAgICB0aGlzLm9uU2VhcmNoU2l0dWF0aW9uKCk7XG5cbiAgICBsZXQgZXJyO1xuICAgIGlmICh0aGlzLnNlYXJjaE9wdGlvbiA9PT0gU2VhcmNoRmlsdGVyLk9QRVJBVE9SLkVRVUFMKSB7XG4gICAgICBlcnIgPSB7XG4gICAgICAgIGRhdGVjb250cm9sOiB7XG4gICAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBlcnIgPSB7XG4gICAgICAgIGRhdGVyYW5nZToge1xuICAgICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuICh0aGlzLmlzVmFsaWQpID8gbnVsbCA6IGVycjtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZ2V0UGxhY2Vob2xkZXJDb2Rlc3lzdGVtKCk7XG4gICAgdGhpcy5zZWFyY2hPcHRpb24gPSB0aGlzLm9wZXJhdG9yO1xuICB9XG59XG4iLCI8Zm9ybSBjbGFzcz1cImVvLWRhdGV0aW1lLXJhbmdlXCIgW2Zvcm1Hcm91cF09XCJyYW5nZUZvcm1cIj5cbiAgPGVvLWRhdGUgKm5nSWY9XCJzZWFyY2hPcHRpb24gPT09ICdndGVsdGUnXCIgW3dpdGhUaW1lXT1cIndpdGhUaW1lXCJcbiAgICBmb3JtQ29udHJvbE5hbWU9XCJkYXRlVmFsdWVGcm9tXCI+PC9lby1kYXRlPlxuXG4gIDx5dmMtZHJvcGRvd24gW25nTW9kZWxdPVwic2VhcmNoT3B0aW9uXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25WYWx1ZUNoYW5nZSgkZXZlbnQpXCIgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiXG4gICAgW29wdGlvbnNdPVwiYXZhaWxhYmxlU2VhcmNoT3B0aW9uc1wiPjwveXZjLWRyb3Bkb3duPlxuIFxuICAgIEBpZihzZWFyY2hPcHRpb24gPT09ICdtcicpe1xuICAgICAgPGVvLWNvZGVzeXN0ZW0gZm9ybUNvbnRyb2xOYW1lPVwiZGF0ZVBpY2tlclZhbHVlXCIgW3BpY2tlclRpdGxlXT1cImRhdGVQaWNrZXIudGl0bGVcIlxuICAgICAgICBbZW1wdHlNZXNzYWdlXT1cIidlby53b3Jrc3BhY2Uud2lkZ2V0LnN0b3JlZC5xdWVyaWVzLmxpc3Qubm90QXZhaWxhYmxlJ1wiXG4gICAgICAgIFtjb2Rlc3lzdGVtXT1cImRhdGVQaWNrZXIuY29kZXN5c3RlbVwiPjwvZW8tY29kZXN5c3RlbT5cbiAgICB9XG4gICAgQGVsc2V7XG4gICAgICA8ZW8tZGF0ZSBbd2l0aFRpbWVdPVwid2l0aFRpbWVcIiBmb3JtQ29udHJvbE5hbWU9XCJkYXRlVmFsdWVcIj48L2VvLWRhdGU+XG4gICAgfVxuPC9mb3JtPlxuXG48ZGl2IGNsYXNzPVwiZXJyb3JzXCIgKm5nSWY9XCJyYW5nZUZvcm0uaW52YWxpZFwiPlxuICA8ZGl2IGNsYXNzPVwiZXJyLW1zZ1wiIHRyYW5zbGF0ZT5lby5mb3JtLnByb3BlcnR5LmRhdGUuaW52YWxpZDwvZGl2PlxuICA8ZW8taWNvbiBjbGFzcz1cImJ1dHRvblwiIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2NsZWFyLnN2ZydcIiAoY2xpY2spPVwicmVzZXQoKVwiPjwvZW8taWNvbj5cbjwvZGl2PlxuIl19